@plastic-software/three 0.174.0 → 0.175.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1432 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +58 -1
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -31,18 +31,53 @@ void main() {
|
|
|
31
31
|
|
|
32
32
|
}`;
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* A XR module that manages the access to the Depth Sensing API.
|
|
36
|
+
*/
|
|
34
37
|
class WebXRDepthSensing {
|
|
35
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Constructs a new depth sensing module.
|
|
41
|
+
*/
|
|
36
42
|
constructor() {
|
|
37
43
|
|
|
44
|
+
/**
|
|
45
|
+
* A texture representing the depth of the user's environment.
|
|
46
|
+
*
|
|
47
|
+
* @type {?Texture}
|
|
48
|
+
*/
|
|
38
49
|
this.texture = null;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A plane mesh for visualizing the depth texture.
|
|
53
|
+
*
|
|
54
|
+
* @type {?Mesh}
|
|
55
|
+
*/
|
|
39
56
|
this.mesh = null;
|
|
40
57
|
|
|
58
|
+
/**
|
|
59
|
+
* The depth near value.
|
|
60
|
+
*
|
|
61
|
+
* @type {number}
|
|
62
|
+
*/
|
|
41
63
|
this.depthNear = 0;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The depth near far.
|
|
67
|
+
*
|
|
68
|
+
* @type {number}
|
|
69
|
+
*/
|
|
42
70
|
this.depthFar = 0;
|
|
43
71
|
|
|
44
72
|
}
|
|
45
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Inits the depth sensing module
|
|
76
|
+
*
|
|
77
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
78
|
+
* @param {XRWebGLDepthInformation} depthData - The XR depth data.
|
|
79
|
+
* @param {XRRenderState} renderState - The XR render state.
|
|
80
|
+
*/
|
|
46
81
|
init( renderer, depthData, renderState ) {
|
|
47
82
|
|
|
48
83
|
if ( this.texture === null ) {
|
|
@@ -65,6 +100,12 @@ class WebXRDepthSensing {
|
|
|
65
100
|
|
|
66
101
|
}
|
|
67
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Returns a plane mesh that visualizes the depth texture.
|
|
105
|
+
*
|
|
106
|
+
* @param {ArrayCamera} cameraXR - The XR camera.
|
|
107
|
+
* @return {?Mesh} The plane mesh.
|
|
108
|
+
*/
|
|
68
109
|
getMesh( cameraXR ) {
|
|
69
110
|
|
|
70
111
|
if ( this.texture !== null ) {
|
|
@@ -92,6 +133,9 @@ class WebXRDepthSensing {
|
|
|
92
133
|
|
|
93
134
|
}
|
|
94
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Resets the module
|
|
138
|
+
*/
|
|
95
139
|
reset() {
|
|
96
140
|
|
|
97
141
|
this.texture = null;
|
|
@@ -99,6 +143,11 @@ class WebXRDepthSensing {
|
|
|
99
143
|
|
|
100
144
|
}
|
|
101
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Returns a texture representing the depth of the user's environment.
|
|
148
|
+
*
|
|
149
|
+
* @return {?Texture} The depth texture.
|
|
150
|
+
*/
|
|
102
151
|
getDepthTexture() {
|
|
103
152
|
|
|
104
153
|
return this.texture;
|
|
@@ -12,8 +12,23 @@ import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
|
12
12
|
import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedIntType, UnsignedInt248Type } from '../../constants.js';
|
|
13
13
|
import { WebXRDepthSensing } from './WebXRDepthSensing.js';
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* This class represents an abstraction of the WebXR Device API and is
|
|
17
|
+
* internally used by {@link WebGLRenderer}. `WebXRManager` also provides a public
|
|
18
|
+
* interface that allows users to enable/disable XR and perform XR related
|
|
19
|
+
* tasks like for instance retrieving controllers.
|
|
20
|
+
*
|
|
21
|
+
* @augments EventDispatcher
|
|
22
|
+
* @hideconstructor
|
|
23
|
+
*/
|
|
15
24
|
class WebXRManager extends EventDispatcher {
|
|
16
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new WebGL renderer.
|
|
28
|
+
*
|
|
29
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
30
|
+
* @param {WebGL2RenderingContext} gl - The rendering context.
|
|
31
|
+
*/
|
|
17
32
|
constructor( renderer, gl ) {
|
|
18
33
|
|
|
19
34
|
super();
|
|
@@ -65,11 +80,40 @@ class WebXRManager extends EventDispatcher {
|
|
|
65
80
|
|
|
66
81
|
//
|
|
67
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Whether the manager's XR camera should be automatically updated or not.
|
|
85
|
+
*
|
|
86
|
+
* @type {boolean}
|
|
87
|
+
* @default true
|
|
88
|
+
*/
|
|
68
89
|
this.cameraAutoUpdate = true;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* This flag notifies the renderer to be ready for XR rendering. Set it to `true`
|
|
93
|
+
* if you are going to use XR in your app.
|
|
94
|
+
*
|
|
95
|
+
* @type {boolean}
|
|
96
|
+
* @default false
|
|
97
|
+
*/
|
|
69
98
|
this.enabled = false;
|
|
70
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Whether XR presentation is active or not.
|
|
102
|
+
*
|
|
103
|
+
* @type {boolean}
|
|
104
|
+
* @readonly
|
|
105
|
+
* @default false
|
|
106
|
+
*/
|
|
71
107
|
this.isPresenting = false;
|
|
72
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Returns a group representing the `target ray` space of the XR controller.
|
|
111
|
+
* Use this space for visualizing 3D objects that support the user in pointing
|
|
112
|
+
* tasks like UI interaction.
|
|
113
|
+
*
|
|
114
|
+
* @param {number} index - The index of the controller.
|
|
115
|
+
* @return {Group} A group representing the `target ray` space.
|
|
116
|
+
*/
|
|
73
117
|
this.getController = function ( index ) {
|
|
74
118
|
|
|
75
119
|
let controller = controllers[ index ];
|
|
@@ -85,6 +129,21 @@ class WebXRManager extends EventDispatcher {
|
|
|
85
129
|
|
|
86
130
|
};
|
|
87
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Returns a group representing the `grip` space of the XR controller.
|
|
134
|
+
* Use this space for visualizing 3D objects that support the user in pointing
|
|
135
|
+
* tasks like UI interaction.
|
|
136
|
+
*
|
|
137
|
+
* Note: If you want to show something in the user's hand AND offer a
|
|
138
|
+
* pointing ray at the same time, you'll want to attached the handheld object
|
|
139
|
+
* to the group returned by `getControllerGrip()` and the ray to the
|
|
140
|
+
* group returned by `getController()`. The idea is to have two
|
|
141
|
+
* different groups in two different coordinate spaces for the same WebXR
|
|
142
|
+
* controller.
|
|
143
|
+
*
|
|
144
|
+
* @param {number} index - The index of the controller.
|
|
145
|
+
* @return {Group} A group representing the `grip` space.
|
|
146
|
+
*/
|
|
88
147
|
this.getControllerGrip = function ( index ) {
|
|
89
148
|
|
|
90
149
|
let controller = controllers[ index ];
|
|
@@ -100,6 +159,14 @@ class WebXRManager extends EventDispatcher {
|
|
|
100
159
|
|
|
101
160
|
};
|
|
102
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Returns a group representing the `hand` space of the XR controller.
|
|
164
|
+
* Use this space for visualizing 3D objects that support the user in pointing
|
|
165
|
+
* tasks like UI interaction.
|
|
166
|
+
*
|
|
167
|
+
* @param {number} index - The index of the controller.
|
|
168
|
+
* @return {Group} A group representing the `hand` space.
|
|
169
|
+
*/
|
|
103
170
|
this.getHand = function ( index ) {
|
|
104
171
|
|
|
105
172
|
let controller = controllers[ index ];
|
|
@@ -189,6 +256,13 @@ class WebXRManager extends EventDispatcher {
|
|
|
189
256
|
|
|
190
257
|
}
|
|
191
258
|
|
|
259
|
+
/**
|
|
260
|
+
* Sets the framebuffer scale factor.
|
|
261
|
+
*
|
|
262
|
+
* This method can not be used during a XR session.
|
|
263
|
+
*
|
|
264
|
+
* @param {number} value - The framebuffer scale factor.
|
|
265
|
+
*/
|
|
192
266
|
this.setFramebufferScaleFactor = function ( value ) {
|
|
193
267
|
|
|
194
268
|
framebufferScaleFactor = value;
|
|
@@ -201,6 +275,15 @@ class WebXRManager extends EventDispatcher {
|
|
|
201
275
|
|
|
202
276
|
};
|
|
203
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Sets the reference space type. Can be used to configure a spatial relationship with the user's physical
|
|
280
|
+
* environment. Depending on how the user moves in 3D space, setting an appropriate reference space can
|
|
281
|
+
* improve tracking. Default is `local-floor`.
|
|
282
|
+
*
|
|
283
|
+
* This method can not be used during a XR session.
|
|
284
|
+
*
|
|
285
|
+
* @param {string} value - The reference space type.
|
|
286
|
+
*/
|
|
204
287
|
this.setReferenceSpaceType = function ( value ) {
|
|
205
288
|
|
|
206
289
|
referenceSpaceType = value;
|
|
@@ -213,42 +296,81 @@ class WebXRManager extends EventDispatcher {
|
|
|
213
296
|
|
|
214
297
|
};
|
|
215
298
|
|
|
299
|
+
/**
|
|
300
|
+
* Returns the XR reference space.
|
|
301
|
+
*
|
|
302
|
+
* @return {XRReferenceSpace} The XR reference space.
|
|
303
|
+
*/
|
|
216
304
|
this.getReferenceSpace = function () {
|
|
217
305
|
|
|
218
306
|
return customReferenceSpace || referenceSpace;
|
|
219
307
|
|
|
220
308
|
};
|
|
221
309
|
|
|
310
|
+
/**
|
|
311
|
+
* Sets a custom XR reference space.
|
|
312
|
+
*
|
|
313
|
+
* @param {XRReferenceSpace} space - The XR reference space.
|
|
314
|
+
*/
|
|
222
315
|
this.setReferenceSpace = function ( space ) {
|
|
223
316
|
|
|
224
317
|
customReferenceSpace = space;
|
|
225
318
|
|
|
226
319
|
};
|
|
227
320
|
|
|
321
|
+
/**
|
|
322
|
+
* Returns the current base layer.
|
|
323
|
+
*
|
|
324
|
+
* @return {?(XRWebGLLayer|XRProjectionLayer)} The XR base layer.
|
|
325
|
+
*/
|
|
228
326
|
this.getBaseLayer = function () {
|
|
229
327
|
|
|
230
328
|
return glProjLayer !== null ? glProjLayer : glBaseLayer;
|
|
231
329
|
|
|
232
330
|
};
|
|
233
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Returns the current XR binding.
|
|
334
|
+
*
|
|
335
|
+
* @return {?XRWebGLBinding} The XR binding.
|
|
336
|
+
*/
|
|
234
337
|
this.getBinding = function () {
|
|
235
338
|
|
|
236
339
|
return glBinding;
|
|
237
340
|
|
|
238
341
|
};
|
|
239
342
|
|
|
343
|
+
/**
|
|
344
|
+
* Returns the current XR frame.
|
|
345
|
+
*
|
|
346
|
+
* @return {?XRFrame} The XR frame. Returns `null` when used outside a XR session.
|
|
347
|
+
*/
|
|
240
348
|
this.getFrame = function () {
|
|
241
349
|
|
|
242
350
|
return xrFrame;
|
|
243
351
|
|
|
244
352
|
};
|
|
245
353
|
|
|
354
|
+
/**
|
|
355
|
+
* Returns the current XR session.
|
|
356
|
+
*
|
|
357
|
+
* @return {?XRSession} The XR session. Returns `null` when used outside a XR session.
|
|
358
|
+
*/
|
|
246
359
|
this.getSession = function () {
|
|
247
360
|
|
|
248
361
|
return session;
|
|
249
362
|
|
|
250
363
|
};
|
|
251
364
|
|
|
365
|
+
/**
|
|
366
|
+
* After a XR session has been requested usually with one of the `*Button` modules, it
|
|
367
|
+
* is injected into the renderer with this method. This method triggers the start of
|
|
368
|
+
* the actual XR rendering.
|
|
369
|
+
*
|
|
370
|
+
* @async
|
|
371
|
+
* @param {XRSession} value - The XR session to set.
|
|
372
|
+
* @return {Promise} A Promise that resolves when the session has been set.
|
|
373
|
+
*/
|
|
252
374
|
this.setSession = async function ( value ) {
|
|
253
375
|
|
|
254
376
|
session = value;
|
|
@@ -373,6 +495,11 @@ class WebXRManager extends EventDispatcher {
|
|
|
373
495
|
|
|
374
496
|
};
|
|
375
497
|
|
|
498
|
+
/**
|
|
499
|
+
* Returns the environment blend mode from the current XR session.
|
|
500
|
+
*
|
|
501
|
+
* @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.
|
|
502
|
+
*/
|
|
376
503
|
this.getEnvironmentBlendMode = function () {
|
|
377
504
|
|
|
378
505
|
if ( session !== null ) {
|
|
@@ -383,6 +510,11 @@ class WebXRManager extends EventDispatcher {
|
|
|
383
510
|
|
|
384
511
|
};
|
|
385
512
|
|
|
513
|
+
/**
|
|
514
|
+
* Returns the current depth texture computed via depth sensing.
|
|
515
|
+
*
|
|
516
|
+
* @return {?Texture} The depth texture.
|
|
517
|
+
*/
|
|
386
518
|
this.getDepthTexture = function () {
|
|
387
519
|
|
|
388
520
|
return depthSensing.getDepthTexture();
|
|
@@ -549,6 +681,15 @@ class WebXRManager extends EventDispatcher {
|
|
|
549
681
|
|
|
550
682
|
}
|
|
551
683
|
|
|
684
|
+
/**
|
|
685
|
+
* Updates the state of the XR camera. Use this method on app level if you
|
|
686
|
+
* set cameraAutoUpdate` to `false`. The method requires the non-XR
|
|
687
|
+
* camera of the scene as a parameter. The passed in camera's transformation
|
|
688
|
+
* is automatically adjusted to the position of the XR camera when calling
|
|
689
|
+
* this method.
|
|
690
|
+
*
|
|
691
|
+
* @param {Camera} camera - The camera.
|
|
692
|
+
*/
|
|
552
693
|
this.updateCamera = function ( camera ) {
|
|
553
694
|
|
|
554
695
|
if ( session === null ) return;
|
|
@@ -644,12 +785,27 @@ class WebXRManager extends EventDispatcher {
|
|
|
644
785
|
|
|
645
786
|
}
|
|
646
787
|
|
|
788
|
+
/**
|
|
789
|
+
* Returns an instance of {@link ArrayCamera} which represents the XR camera
|
|
790
|
+
* of the active XR session. For each view it holds a separate camera object.
|
|
791
|
+
*
|
|
792
|
+
* The camera's `fov` is currently not used and does not reflect the fov of
|
|
793
|
+
* the XR camera. If you need the fov on app level, you have to compute in
|
|
794
|
+
* manually from the XR camera's projection matrices.
|
|
795
|
+
*
|
|
796
|
+
* @return {ArrayCamera} The XR camera.
|
|
797
|
+
*/
|
|
647
798
|
this.getCamera = function () {
|
|
648
799
|
|
|
649
800
|
return cameraXR;
|
|
650
801
|
|
|
651
802
|
};
|
|
652
803
|
|
|
804
|
+
/**
|
|
805
|
+
* Returns the amount of foveation used by the XR compositor for the projection layer.
|
|
806
|
+
*
|
|
807
|
+
* @return {number} The amount of foveation.
|
|
808
|
+
*/
|
|
653
809
|
this.getFoveation = function () {
|
|
654
810
|
|
|
655
811
|
if ( glProjLayer === null && glBaseLayer === null ) {
|
|
@@ -662,6 +818,12 @@ class WebXRManager extends EventDispatcher {
|
|
|
662
818
|
|
|
663
819
|
};
|
|
664
820
|
|
|
821
|
+
/**
|
|
822
|
+
* Sets the foveation value.
|
|
823
|
+
*
|
|
824
|
+
* @param {number} value - A number in the range `[0,1]` where `0` means no foveation (full resolution)
|
|
825
|
+
* and `1` means maximum foveation (the edges render at lower resolution).
|
|
826
|
+
*/
|
|
665
827
|
this.setFoveation = function ( value ) {
|
|
666
828
|
|
|
667
829
|
// 0 = no foveation = full resolution
|
|
@@ -683,12 +845,22 @@ class WebXRManager extends EventDispatcher {
|
|
|
683
845
|
|
|
684
846
|
};
|
|
685
847
|
|
|
848
|
+
/**
|
|
849
|
+
* Returns `true` if depth sensing is supported.
|
|
850
|
+
*
|
|
851
|
+
* @return {boolean} Whether depth sensing is supported or not.
|
|
852
|
+
*/
|
|
686
853
|
this.hasDepthSensing = function () {
|
|
687
854
|
|
|
688
855
|
return depthSensing.texture !== null;
|
|
689
856
|
|
|
690
857
|
};
|
|
691
858
|
|
|
859
|
+
/**
|
|
860
|
+
* Returns the depth sensing mesh.
|
|
861
|
+
*
|
|
862
|
+
* @return {Mesh} The depth sensing mesh.
|
|
863
|
+
*/
|
|
692
864
|
this.getDepthSensingMesh = function () {
|
|
693
865
|
|
|
694
866
|
return depthSensing.getMesh( cameraXR );
|
|
@@ -747,7 +919,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
747
919
|
renderer.setRenderTargetTextures(
|
|
748
920
|
newRenderTarget,
|
|
749
921
|
glSubImage.colorTexture,
|
|
750
|
-
|
|
922
|
+
glSubImage.depthStencilTexture );
|
|
751
923
|
|
|
752
924
|
renderer.setRenderTarget( newRenderTarget );
|
|
753
925
|
|
package/src/scenes/Scene.js
CHANGED
|
@@ -104,7 +104,8 @@ class Scene extends Object3D {
|
|
|
104
104
|
this.environmentRotation = new Euler();
|
|
105
105
|
|
|
106
106
|
/**
|
|
107
|
-
* Forces everything in the scene to be rendered with the defined material.
|
|
107
|
+
* Forces everything in the scene to be rendered with the defined material. It is possible
|
|
108
|
+
* to exclude materials from override by setting {@link Material#allowOverride} to `false`.
|
|
108
109
|
*
|
|
109
110
|
* @type {?Material}
|
|
110
111
|
* @default null
|
|
@@ -1,11 +1,39 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Creates a texture from a canvas element.
|
|
5
|
+
*
|
|
6
|
+
* This is almost the same as the base texture class, except that it sets {@link Texture#needsUpdate}
|
|
7
|
+
* to `true` immediately since a canvas can directly be used for rendering.
|
|
8
|
+
*
|
|
9
|
+
* @augments Texture
|
|
10
|
+
*/
|
|
3
11
|
class CanvasTexture extends Texture {
|
|
4
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new texture.
|
|
15
|
+
*
|
|
16
|
+
* @param {HTMLCanvasElement} [canvas] - The HTML canvas element.
|
|
17
|
+
* @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
|
|
18
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
19
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
20
|
+
* @param {number} [magFilter=LinearFilter] - The mag filter value.
|
|
21
|
+
* @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
|
|
22
|
+
* @param {number} [format=RGBAFormat] - The texture format.
|
|
23
|
+
* @param {number} [type=UnsignedByteType] - The texture type.
|
|
24
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
25
|
+
*/
|
|
5
26
|
constructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
|
|
6
27
|
|
|
7
28
|
super( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
|
|
8
29
|
|
|
30
|
+
/**
|
|
31
|
+
* This flag can be used for type testing.
|
|
32
|
+
*
|
|
33
|
+
* @type {boolean}
|
|
34
|
+
* @readonly
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
9
37
|
this.isCanvasTexture = true;
|
|
10
38
|
|
|
11
39
|
this.needsUpdate = true;
|
|
@@ -1,26 +1,83 @@
|
|
|
1
1
|
import { ClampToEdgeWrapping } from '../constants.js';
|
|
2
2
|
import { CompressedTexture } from './CompressedTexture.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Creates a texture 2D array based on data in compressed form.
|
|
6
|
+
*
|
|
7
|
+
* These texture are usually loaded with {@link CompressedTextureLoader}.
|
|
8
|
+
*
|
|
9
|
+
* @augments CompressedTexture
|
|
10
|
+
*/
|
|
4
11
|
class CompressedArrayTexture extends CompressedTexture {
|
|
5
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new compressed array texture.
|
|
15
|
+
*
|
|
16
|
+
* @param {Array<Object>} mipmaps - This array holds for all mipmaps (including the bases mip)
|
|
17
|
+
* the data and dimensions.
|
|
18
|
+
* @param {number} width - The width of the texture.
|
|
19
|
+
* @param {number} height - The height of the texture.
|
|
20
|
+
* @param {number} depth - The depth of the texture.
|
|
21
|
+
* @param {number} [format=RGBAFormat] - The min filter value.
|
|
22
|
+
* @param {number} [type=UnsignedByteType] - The min filter value.
|
|
23
|
+
*/
|
|
6
24
|
constructor( mipmaps, width, height, depth, format, type ) {
|
|
7
25
|
|
|
8
26
|
super( mipmaps, width, height, format, type );
|
|
9
27
|
|
|
28
|
+
/**
|
|
29
|
+
* This flag can be used for type testing.
|
|
30
|
+
*
|
|
31
|
+
* @type {boolean}
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
10
35
|
this.isCompressedArrayTexture = true;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The image property of a compressed texture just defines its dimensions.
|
|
39
|
+
*
|
|
40
|
+
* @name CompressedArrayTexture#image
|
|
41
|
+
* @type {{width:number,height:number,depth:number}}
|
|
42
|
+
*/
|
|
11
43
|
this.image.depth = depth;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* This defines how the texture is wrapped in the depth and corresponds to
|
|
47
|
+
* *W* in UVW mapping.
|
|
48
|
+
*
|
|
49
|
+
* @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}
|
|
50
|
+
* @default ClampToEdgeWrapping
|
|
51
|
+
*/
|
|
12
52
|
this.wrapR = ClampToEdgeWrapping;
|
|
13
53
|
|
|
54
|
+
/**
|
|
55
|
+
* A set of all layers which need to be updated in the texture.
|
|
56
|
+
*
|
|
57
|
+
* @type {Set<number>}
|
|
58
|
+
*/
|
|
14
59
|
this.layerUpdates = new Set();
|
|
15
60
|
|
|
16
61
|
}
|
|
17
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Describes that a specific layer of the texture needs to be updated.
|
|
65
|
+
* Normally when {@link Texture#needsUpdate} is set to `true`, the
|
|
66
|
+
* entire compressed texture array is sent to the GPU. Marking specific
|
|
67
|
+
* layers will only transmit subsets of all mipmaps associated with a
|
|
68
|
+
* specific depth in the array which is often much more performant.
|
|
69
|
+
*
|
|
70
|
+
* @param {number} layerIndex - The layer index that should be updated.
|
|
71
|
+
*/
|
|
18
72
|
addLayerUpdate( layerIndex ) {
|
|
19
73
|
|
|
20
74
|
this.layerUpdates.add( layerIndex );
|
|
21
75
|
|
|
22
76
|
}
|
|
23
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Resets the layer updates registry.
|
|
80
|
+
*/
|
|
24
81
|
clearLayerUpdates() {
|
|
25
82
|
|
|
26
83
|
this.layerUpdates.clear();
|
|
@@ -1,13 +1,42 @@
|
|
|
1
1
|
import { CubeReflectionMapping } from '../constants.js';
|
|
2
2
|
import { CompressedTexture } from './CompressedTexture.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Creates a cube texture based on data in compressed form.
|
|
6
|
+
*
|
|
7
|
+
* These texture are usually loaded with {@link CompressedTextureLoader}.
|
|
8
|
+
*
|
|
9
|
+
* @augments CompressedTexture
|
|
10
|
+
*/
|
|
4
11
|
class CompressedCubeTexture extends CompressedTexture {
|
|
5
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new compressed texture.
|
|
15
|
+
*
|
|
16
|
+
* @param {Array<CompressedTexture>} images - An array of compressed textures.
|
|
17
|
+
* @param {number} [format=RGBAFormat] - The texture format.
|
|
18
|
+
* @param {number} [type=UnsignedByteType] - The texture type.
|
|
19
|
+
*/
|
|
6
20
|
constructor( images, format, type ) {
|
|
7
21
|
|
|
8
22
|
super( undefined, images[ 0 ].width, images[ 0 ].height, format, type, CubeReflectionMapping );
|
|
9
23
|
|
|
24
|
+
/**
|
|
25
|
+
* This flag can be used for type testing.
|
|
26
|
+
*
|
|
27
|
+
* @type {boolean}
|
|
28
|
+
* @readonly
|
|
29
|
+
* @default true
|
|
30
|
+
*/
|
|
10
31
|
this.isCompressedCubeTexture = true;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This flag can be used for type testing.
|
|
35
|
+
*
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
* @readonly
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
11
40
|
this.isCubeTexture = true;
|
|
12
41
|
|
|
13
42
|
this.image = images;
|
|
@@ -1,24 +1,82 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Creates a texture based on data in compressed form.
|
|
5
|
+
*
|
|
6
|
+
* These texture are usually loaded with {@link CompressedTextureLoader}.
|
|
7
|
+
*
|
|
8
|
+
* @augments Texture
|
|
9
|
+
*/
|
|
3
10
|
class CompressedTexture extends Texture {
|
|
4
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new compressed texture.
|
|
14
|
+
*
|
|
15
|
+
* @param {Array<Object>} mipmaps - This array holds for all mipmaps (including the bases mip)
|
|
16
|
+
* the data and dimensions.
|
|
17
|
+
* @param {number} width - The width of the texture.
|
|
18
|
+
* @param {number} height - The height of the texture.
|
|
19
|
+
* @param {number} [format=RGBAFormat] - The texture format.
|
|
20
|
+
* @param {number} [type=UnsignedByteType] - The texture type.
|
|
21
|
+
* @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
|
|
22
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
23
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
24
|
+
* @param {number} [magFilter=LinearFilter] - The mag filter value.
|
|
25
|
+
* @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
|
|
26
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
27
|
+
* @param {string} [colorSpace=NoColorSpace] - The color space.
|
|
28
|
+
*/
|
|
5
29
|
constructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {
|
|
6
30
|
|
|
7
31
|
super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
|
|
8
32
|
|
|
33
|
+
/**
|
|
34
|
+
* This flag can be used for type testing.
|
|
35
|
+
*
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
* @readonly
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
9
40
|
this.isCompressedTexture = true;
|
|
10
41
|
|
|
42
|
+
/**
|
|
43
|
+
* The image property of a compressed texture just defines its dimensions.
|
|
44
|
+
*
|
|
45
|
+
* @type {{width:number,height:number}}
|
|
46
|
+
*/
|
|
11
47
|
this.image = { width: width, height: height };
|
|
12
|
-
this.mipmaps = mipmaps;
|
|
13
48
|
|
|
14
|
-
|
|
15
|
-
|
|
49
|
+
/**
|
|
50
|
+
* This array holds for all mipmaps (including the bases mip) the data and dimensions.
|
|
51
|
+
*
|
|
52
|
+
* @type {Array<Object>}
|
|
53
|
+
*/
|
|
54
|
+
this.mipmaps = mipmaps;
|
|
16
55
|
|
|
56
|
+
/**
|
|
57
|
+
* If set to `true`, the texture is flipped along the vertical axis when
|
|
58
|
+
* uploaded to the GPU.
|
|
59
|
+
*
|
|
60
|
+
* Overwritten and set to `false` by default since it is not possible to
|
|
61
|
+
* flip compressed textures.
|
|
62
|
+
*
|
|
63
|
+
* @type {boolean}
|
|
64
|
+
* @default false
|
|
65
|
+
* @readonly
|
|
66
|
+
*/
|
|
17
67
|
this.flipY = false;
|
|
18
68
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
69
|
+
/**
|
|
70
|
+
* Whether to generate mipmaps (if possible) for a texture.
|
|
71
|
+
*
|
|
72
|
+
* Overwritten and set to `false` by default since it is not
|
|
73
|
+
* possible to generate mipmaps for compressed data. Mipmaps
|
|
74
|
+
* must be embedded in the compressed texture file.
|
|
75
|
+
*
|
|
76
|
+
* @type {boolean}
|
|
77
|
+
* @default false
|
|
78
|
+
* @readonly
|
|
79
|
+
*/
|
|
22
80
|
this.generateMipmaps = false;
|
|
23
81
|
|
|
24
82
|
}
|