super-three 0.173.5 → 0.176.0
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 +21993 -1359
- package/build/three.core.js +21129 -1188
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +835 -142
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +19493 -17617
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +19477 -17617
- 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 +144 -42
- 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 +194 -71
- 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 +74 -30
- 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 +51 -5
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +36 -1
- package/examples/jsm/loaders/DDSLoader.js +25 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +71 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +222 -9
- 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 +87 -19
- 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 +56 -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 +90 -70
- 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 +105 -13
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +109 -73
- package/examples/jsm/misc/VolumeSlice.js +91 -48
- 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 +75 -2
- 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 +134 -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 +268 -134
- 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/AST.js +10 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
- package/examples/jsm/transpiler/TSLEncoder.js +83 -15
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
- package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
- package/examples/jsm/tsl/display/BleachBypass.js +1 -2
- package/examples/jsm/tsl/display/BloomNode.js +15 -16
- package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
- package/examples/jsm/tsl/display/FXAANode.js +2 -3
- package/examples/jsm/tsl/display/FilmNode.js +9 -8
- package/examples/jsm/tsl/display/GTAONode.js +11 -12
- package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
- package/examples/jsm/tsl/display/LensflareNode.js +15 -16
- package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
- package/examples/jsm/tsl/display/MotionBlur.js +1 -2
- package/examples/jsm/tsl/display/OutlineNode.js +7 -8
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
- package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
- package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
- package/examples/jsm/tsl/display/SMAANode.js +13 -7
- package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
- package/examples/jsm/tsl/display/SSRNode.js +6 -7
- package/examples/jsm/tsl/display/Sepia.js +1 -2
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
- package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
- package/examples/jsm/tsl/display/TransitionNode.js +4 -5
- package/examples/jsm/tsl/display/hashBlur.js +1 -2
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
- package/examples/jsm/tsl/math/Bayer.js +31 -0
- package/examples/jsm/tsl/utils/Raymarching.js +67 -0
- 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 +3 -4
- package/src/Three.TSL.js +7 -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 +169 -19
- 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/Audio.js +339 -0
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +28 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +163 -40
- package/src/cameras/StereoCamera.js +46 -0
- package/src/constants.js +1429 -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/EventDispatcher.js +44 -2
- 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 +593 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +170 -11
- 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 +88 -1
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +13 -780
- package/src/extras/ImageUtils.js +20 -2
- package/src/extras/PMREMGenerator.js +41 -25
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +95 -15
- package/src/extras/core/Curve.js +150 -50
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +63 -0
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +39 -0
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +28 -0
- package/src/geometries/ExtrudeGeometry.js +112 -28
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +40 -0
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +45 -5
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +22 -0
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- 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 +130 -0
- 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 +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +13 -9
- package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
- package/src/loaders/nodes/NodeObjectLoader.js +12 -12
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +481 -4
- 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 +14 -14
- package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
- package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
- package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
- package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
- package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
- package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
- package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
- package/src/materials/nodes/NodeMaterial.js +66 -47
- package/src/materials/nodes/PointsNodeMaterial.js +6 -6
- package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
- package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
- package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
- package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +94 -0
- package/src/math/MathUtils.js +405 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +262 -6
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +70 -8
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +388 -2
- package/src/math/Vector3.js +541 -4
- package/src/math/Vector4.js +393 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/AccessorsUtils.js +4 -2
- package/src/nodes/accessors/Arrays.js +6 -6
- package/src/nodes/accessors/BatchNode.js +10 -11
- package/src/nodes/accessors/Bitangent.js +6 -2
- package/src/nodes/accessors/BufferAttributeNode.js +33 -31
- package/src/nodes/accessors/BufferNode.js +12 -13
- package/src/nodes/accessors/BuiltinNode.js +7 -8
- package/src/nodes/accessors/Camera.js +9 -2
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +17 -19
- package/src/nodes/accessors/InstanceNode.js +10 -11
- package/src/nodes/accessors/InstancedMeshNode.js +3 -4
- package/src/nodes/accessors/Lights.js +12 -15
- package/src/nodes/accessors/MaterialNode.js +45 -9
- package/src/nodes/accessors/MaterialProperties.js +51 -2
- package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
- package/src/nodes/accessors/ModelNode.js +20 -3
- package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
- package/src/nodes/accessors/MorphNode.js +29 -26
- package/src/nodes/accessors/Normal.js +11 -3
- package/src/nodes/accessors/Object3DNode.js +51 -16
- package/src/nodes/accessors/PointUVNode.js +2 -3
- package/src/nodes/accessors/Position.js +8 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
- package/src/nodes/accessors/ReferenceNode.js +31 -31
- package/src/nodes/accessors/ReflectVector.js +4 -2
- package/src/nodes/accessors/RendererReferenceNode.js +9 -10
- package/src/nodes/accessors/SceneNode.js +5 -4
- package/src/nodes/accessors/SkinningNode.js +53 -44
- package/src/nodes/accessors/StorageBufferNode.js +24 -24
- package/src/nodes/accessors/StorageTextureNode.js +17 -17
- package/src/nodes/accessors/Tangent.js +6 -2
- package/src/nodes/accessors/Texture3DNode.js +11 -12
- package/src/nodes/accessors/TextureBicubic.js +2 -3
- package/src/nodes/accessors/TextureNode.js +68 -47
- package/src/nodes/accessors/TextureSizeNode.js +5 -6
- package/src/nodes/accessors/UV.js +2 -3
- package/src/nodes/accessors/UniformArrayNode.js +24 -24
- package/src/nodes/accessors/UserDataNode.js +11 -12
- package/src/nodes/accessors/VelocityNode.js +4 -5
- package/src/nodes/accessors/VertexColorNode.js +7 -8
- package/src/nodes/code/CodeNode.js +15 -13
- package/src/nodes/code/ExpressionNode.js +8 -9
- package/src/nodes/code/FunctionCallNode.js +29 -9
- package/src/nodes/code/FunctionNode.js +1 -1
- package/src/nodes/code/ScriptableNode.js +27 -28
- package/src/nodes/code/ScriptableValueNode.js +11 -12
- package/src/nodes/core/ArrayNode.js +29 -12
- package/src/nodes/core/AssignNode.js +4 -5
- package/src/nodes/core/AttributeNode.js +8 -9
- package/src/nodes/core/BypassNode.js +3 -4
- package/src/nodes/core/CacheNode.js +5 -6
- package/src/nodes/core/ConstNode.js +4 -4
- package/src/nodes/core/ContextNode.js +9 -9
- package/src/nodes/core/IndexNode.js +8 -4
- package/src/nodes/core/InputNode.js +7 -7
- package/src/nodes/core/LightingModel.js +17 -17
- package/src/nodes/core/MRTNode.js +9 -10
- package/src/nodes/core/Node.js +49 -37
- package/src/nodes/core/NodeAttribute.js +7 -7
- package/src/nodes/core/NodeBuilder.js +248 -175
- package/src/nodes/core/NodeCache.js +4 -4
- package/src/nodes/core/NodeCode.js +6 -6
- package/src/nodes/core/NodeFrame.js +10 -10
- package/src/nodes/core/NodeFunction.js +8 -8
- package/src/nodes/core/NodeFunctionInput.js +8 -8
- package/src/nodes/core/NodeParser.js +1 -1
- package/src/nodes/core/NodeUniform.js +7 -7
- package/src/nodes/core/NodeUtils.js +22 -24
- package/src/nodes/core/NodeVar.js +9 -9
- package/src/nodes/core/NodeVarying.js +4 -4
- package/src/nodes/core/OutputStructNode.js +2 -3
- package/src/nodes/core/ParameterNode.js +6 -7
- package/src/nodes/core/PropertyNode.js +41 -13
- package/src/nodes/core/StackNode.js +11 -12
- package/src/nodes/core/StructNode.js +2 -3
- package/src/nodes/core/StructTypeNode.js +10 -6
- package/src/nodes/core/TempNode.js +3 -3
- package/src/nodes/core/UniformGroupNode.js +15 -12
- package/src/nodes/core/UniformNode.js +9 -10
- package/src/nodes/core/VarNode.js +14 -18
- package/src/nodes/core/VaryingNode.js +10 -10
- package/src/nodes/core/constants.js +0 -2
- package/src/nodes/display/BlendModes.js +21 -14
- package/src/nodes/display/BumpMapNode.js +5 -6
- package/src/nodes/display/ColorAdjustment.js +13 -9
- package/src/nodes/display/ColorSpaceFunctions.js +4 -4
- package/src/nodes/display/ColorSpaceNode.js +15 -12
- package/src/nodes/display/FrontFacingNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +5 -6
- package/src/nodes/display/PassNode.js +122 -35
- package/src/nodes/display/PosterizeNode.js +2 -3
- package/src/nodes/display/RenderOutputNode.js +8 -9
- package/src/nodes/display/ScreenNode.js +16 -7
- package/src/nodes/display/ToneMappingFunctions.js +12 -8
- package/src/nodes/display/ToneMappingNode.js +8 -8
- package/src/nodes/display/ToonOutlinePassNode.js +3 -4
- package/src/nodes/display/ViewportDepthNode.js +15 -7
- package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
- package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
- package/src/nodes/display/ViewportTextureNode.js +16 -16
- package/src/nodes/fog/Fog.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BasicLightingModel.js +5 -8
- package/src/nodes/functions/PhongLightingModel.js +6 -8
- package/src/nodes/functions/PhysicalLightingModel.js +40 -42
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/ToonLightingModel.js +5 -6
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
- package/src/nodes/geometry/RangeNode.js +4 -5
- package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
- package/src/nodes/gpgpu/BarrierNode.js +6 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
- package/src/nodes/gpgpu/ComputeNode.js +43 -16
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
- package/src/nodes/lighting/AONode.js +2 -2
- package/src/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +50 -9
- package/src/nodes/lighting/BasicLightMapNode.js +2 -2
- package/src/nodes/lighting/DirectionalLightNode.js +3 -12
- package/src/nodes/lighting/EnvironmentNode.js +5 -8
- package/src/nodes/lighting/HemisphereLightNode.js +1 -1
- package/src/nodes/lighting/LightProbeNode.js +1 -1
- package/src/nodes/lighting/LightUtils.js +1 -5
- package/src/nodes/lighting/LightingContextNode.js +10 -10
- package/src/nodes/lighting/LightingNode.js +1 -1
- package/src/nodes/lighting/LightsNode.js +68 -25
- package/src/nodes/lighting/PointLightNode.js +12 -27
- package/src/nodes/lighting/PointShadowNode.js +5 -6
- package/src/nodes/lighting/RectAreaLightNode.js +5 -10
- package/src/nodes/lighting/ShadowBaseNode.js +8 -9
- package/src/nodes/lighting/ShadowNode.js +28 -15
- package/src/nodes/lighting/SpotLightNode.js +8 -19
- package/src/nodes/math/ConditionalNode.js +26 -9
- package/src/nodes/math/Hash.js +2 -3
- package/src/nodes/math/MathNode.js +217 -150
- package/src/nodes/math/MathUtils.js +8 -6
- package/src/nodes/math/OperatorNode.js +198 -89
- package/src/nodes/math/TriNoise3D.js +2 -3
- package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
- package/src/nodes/parsers/GLSLNodeParser.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +61 -37
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +2 -3
- package/src/nodes/shapes/Shapes.js +2 -3
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +117 -19
- package/src/nodes/utils/ArrayElementNode.js +5 -3
- package/src/nodes/utils/ConvertNode.js +3 -3
- package/src/nodes/utils/CubeMapNode.js +7 -8
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/Discard.js +5 -5
- package/src/nodes/utils/EquirectUVNode.js +3 -4
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
- package/src/nodes/utils/JoinNode.js +29 -4
- package/src/nodes/utils/LoopNode.js +67 -35
- package/src/nodes/utils/MatcapUVNode.js +1 -2
- package/src/nodes/utils/MaxMipLevelNode.js +4 -5
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Oscillators.js +8 -6
- package/src/nodes/utils/Packing.js +4 -4
- package/src/nodes/utils/PostProcessingUtils.js +6 -5
- package/src/nodes/utils/RTTNode.js +19 -19
- package/src/nodes/utils/ReflectorNode.js +35 -25
- package/src/nodes/utils/RemapNode.js +9 -9
- package/src/nodes/utils/RotateNode.js +3 -4
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +5 -5
- package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
- package/src/nodes/utils/SpriteUtils.js +5 -6
- package/src/nodes/utils/StorageArrayElementNode.js +3 -4
- package/src/nodes/utils/Timer.js +9 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
- package/src/nodes/utils/UVUtils.js +4 -4
- package/src/nodes/utils/ViewportUtils.js +3 -4
- package/src/objects/BatchedMesh.js +319 -32
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +4 -4
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +82 -0
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +75 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +105 -0
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- 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 +622 -83
- package/src/renderers/common/Animation.js +6 -6
- package/src/renderers/common/Attributes.js +3 -3
- package/src/renderers/common/Backend.js +40 -31
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/BindGroup.js +5 -5
- package/src/renderers/common/Binding.js +4 -4
- package/src/renderers/common/Bindings.js +10 -0
- package/src/renderers/common/Buffer.js +5 -5
- package/src/renderers/common/BufferUtils.js +7 -9
- package/src/renderers/common/BundleGroup.js +6 -6
- package/src/renderers/common/ChainMap.js +3 -3
- package/src/renderers/common/ClippingContext.js +8 -8
- package/src/renderers/common/Color4.js +8 -8
- package/src/renderers/common/ComputePipeline.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +2 -2
- package/src/renderers/common/Geometries.js +6 -6
- package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
- package/src/renderers/common/Info.js +17 -17
- package/src/renderers/common/Pipeline.js +3 -3
- package/src/renderers/common/Pipelines.js +12 -12
- package/src/renderers/common/PostProcessing.js +13 -1
- package/src/renderers/common/ProgrammableStage.js +11 -11
- package/src/renderers/common/QuadMesh.js +5 -3
- package/src/renderers/common/RenderContext.js +24 -24
- package/src/renderers/common/RenderContexts.js +4 -4
- package/src/renderers/common/RenderList.js +16 -16
- package/src/renderers/common/RenderObject.js +27 -27
- package/src/renderers/common/RenderObjects.js +4 -4
- package/src/renderers/common/RenderPipeline.js +1 -1
- package/src/renderers/common/Renderer.js +272 -200
- package/src/renderers/common/RendererUtils.js +0 -2
- package/src/renderers/common/SampledTexture.js +20 -20
- package/src/renderers/common/Sampler.js +5 -5
- package/src/renderers/common/StorageBuffer.js +2 -2
- package/src/renderers/common/StorageBufferAttribute.js +4 -4
- package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
- package/src/renderers/common/StorageTexture.js +6 -6
- package/src/renderers/common/Textures.js +6 -6
- package/src/renderers/common/TimestampQueryPool.js +66 -7
- package/src/renderers/common/Uniform.js +26 -26
- package/src/renderers/common/UniformBuffer.js +2 -2
- package/src/renderers/common/UniformsGroup.js +18 -18
- package/src/renderers/common/XRManager.js +369 -54
- package/src/renderers/common/XRRenderTarget.js +5 -5
- package/src/renderers/common/extras/PMREMGenerator.js +62 -37
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
- package/src/renderers/common/nodes/NodeLibrary.js +13 -13
- package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
- package/src/renderers/common/nodes/NodeSampler.js +1 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniform.js +9 -9
- package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
- package/src/renderers/common/nodes/Nodes.js +13 -13
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +19 -19
- package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
- package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
- package/src/renderers/webgpu/WebGPUBackend.js +200 -119
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
- package/src/renderers/webgpu/WebGPURenderer.js +19 -13
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +185 -9
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- 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 +61 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +362 -3
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { ArrayCamera } from '../../cameras/ArrayCamera.js';
|
|
2
2
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
3
3
|
import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
|
|
4
|
+
import { Quaternion } from '../../math/Quaternion.js';
|
|
4
5
|
import { RAD2DEG } from '../../math/MathUtils.js';
|
|
5
6
|
import { Vector2 } from '../../math/Vector2.js';
|
|
6
7
|
import { Vector3 } from '../../math/Vector3.js';
|
|
7
8
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
9
|
import { WebXRController } from '../webxr/WebXRController.js';
|
|
9
|
-
import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType } from '../../constants.js';
|
|
10
|
+
import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat, FrontSide, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, ZeroFactor } from '../../constants.js';
|
|
10
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
11
12
|
import { XRRenderTarget } from './XRRenderTarget.js';
|
|
13
|
+
import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
|
|
14
|
+
import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
|
|
15
|
+
import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
|
|
16
|
+
import { Mesh } from '../../objects/Mesh.js';
|
|
12
17
|
|
|
13
18
|
const _cameraLPos = /*@__PURE__*/ new Vector3();
|
|
14
19
|
const _cameraRPos = /*@__PURE__*/ new Vector3();
|
|
@@ -35,7 +40,7 @@ class XRManager extends EventDispatcher {
|
|
|
35
40
|
/**
|
|
36
41
|
* This flag globally enables XR rendering.
|
|
37
42
|
*
|
|
38
|
-
* @type {
|
|
43
|
+
* @type {boolean}
|
|
39
44
|
* @default false
|
|
40
45
|
*/
|
|
41
46
|
this.enabled = false;
|
|
@@ -43,7 +48,7 @@ class XRManager extends EventDispatcher {
|
|
|
43
48
|
/**
|
|
44
49
|
* Whether the XR device is currently presenting or not.
|
|
45
50
|
*
|
|
46
|
-
* @type {
|
|
51
|
+
* @type {boolean}
|
|
47
52
|
* @default false
|
|
48
53
|
* @readonly
|
|
49
54
|
*/
|
|
@@ -52,7 +57,7 @@ class XRManager extends EventDispatcher {
|
|
|
52
57
|
/**
|
|
53
58
|
* Whether the XR camera should automatically be updated or not.
|
|
54
59
|
*
|
|
55
|
-
* @type {
|
|
60
|
+
* @type {boolean}
|
|
56
61
|
* @default true
|
|
57
62
|
*/
|
|
58
63
|
this.cameraAutoUpdate = true;
|
|
@@ -105,7 +110,7 @@ class XRManager extends EventDispatcher {
|
|
|
105
110
|
* The current near value of the XR camera.
|
|
106
111
|
*
|
|
107
112
|
* @private
|
|
108
|
-
* @type {
|
|
113
|
+
* @type {?number}
|
|
109
114
|
* @default null
|
|
110
115
|
*/
|
|
111
116
|
this._currentDepthNear = null;
|
|
@@ -114,7 +119,7 @@ class XRManager extends EventDispatcher {
|
|
|
114
119
|
* The current far value of the XR camera.
|
|
115
120
|
*
|
|
116
121
|
* @private
|
|
117
|
-
* @type {
|
|
122
|
+
* @type {?number}
|
|
118
123
|
* @default null
|
|
119
124
|
*/
|
|
120
125
|
this._currentDepthFar = null;
|
|
@@ -137,29 +142,54 @@ class XRManager extends EventDispatcher {
|
|
|
137
142
|
this._controllerInputSources = [];
|
|
138
143
|
|
|
139
144
|
/**
|
|
140
|
-
* The
|
|
145
|
+
* The XR render target that represents the rendering destination
|
|
146
|
+
* during an active XR session.
|
|
141
147
|
*
|
|
142
148
|
* @private
|
|
143
|
-
* @type {RenderTarget
|
|
149
|
+
* @type {?RenderTarget}
|
|
144
150
|
* @default null
|
|
145
151
|
*/
|
|
146
|
-
this.
|
|
152
|
+
this._xrRenderTarget = null;
|
|
147
153
|
|
|
148
154
|
/**
|
|
149
|
-
*
|
|
150
|
-
* during an active XR session.
|
|
155
|
+
* An array holding all the non-projection layers
|
|
151
156
|
*
|
|
152
157
|
* @private
|
|
153
|
-
* @type {
|
|
154
|
-
* @default
|
|
158
|
+
* @type {Array<Object>}
|
|
159
|
+
* @default []
|
|
155
160
|
*/
|
|
156
|
-
this.
|
|
161
|
+
this._layers = [];
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Whether the device has support for all layer types.
|
|
165
|
+
*
|
|
166
|
+
* @type {boolean}
|
|
167
|
+
* @default false
|
|
168
|
+
*/
|
|
169
|
+
this._supportsLayers = false;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Helper function to create native WebXR Layer.
|
|
173
|
+
*
|
|
174
|
+
* @private
|
|
175
|
+
* @type {Function}
|
|
176
|
+
*/
|
|
177
|
+
this._createXRLayer = createXRLayer.bind( this );
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* The current WebGL context.
|
|
181
|
+
*
|
|
182
|
+
* @private
|
|
183
|
+
* @type {?WebGL2RenderingContext}
|
|
184
|
+
* @default null
|
|
185
|
+
*/
|
|
186
|
+
this._gl = null;
|
|
157
187
|
|
|
158
188
|
/**
|
|
159
189
|
* The current animation context.
|
|
160
190
|
*
|
|
161
191
|
* @private
|
|
162
|
-
* @type {Window
|
|
192
|
+
* @type {?Window}
|
|
163
193
|
* @default null
|
|
164
194
|
*/
|
|
165
195
|
this._currentAnimationContext = null;
|
|
@@ -168,7 +198,7 @@ class XRManager extends EventDispatcher {
|
|
|
168
198
|
* The current animation loop.
|
|
169
199
|
*
|
|
170
200
|
* @private
|
|
171
|
-
* @type {Function
|
|
201
|
+
* @type {?Function}
|
|
172
202
|
* @default null
|
|
173
203
|
*/
|
|
174
204
|
this._currentAnimationLoop = null;
|
|
@@ -177,7 +207,7 @@ class XRManager extends EventDispatcher {
|
|
|
177
207
|
* The current pixel ratio.
|
|
178
208
|
*
|
|
179
209
|
* @private
|
|
180
|
-
* @type {
|
|
210
|
+
* @type {?number}
|
|
181
211
|
* @default null
|
|
182
212
|
*/
|
|
183
213
|
this._currentPixelRatio = null;
|
|
@@ -217,7 +247,7 @@ class XRManager extends EventDispatcher {
|
|
|
217
247
|
|
|
218
248
|
/**
|
|
219
249
|
* The animation loop which is used as a replacement for the default
|
|
220
|
-
* animation loop of the
|
|
250
|
+
* animation loop of the application. It is only used when a XR session
|
|
221
251
|
* is active.
|
|
222
252
|
*
|
|
223
253
|
* @private
|
|
@@ -229,7 +259,7 @@ class XRManager extends EventDispatcher {
|
|
|
229
259
|
* The current XR reference space.
|
|
230
260
|
*
|
|
231
261
|
* @private
|
|
232
|
-
* @type {XRReferenceSpace
|
|
262
|
+
* @type {?XRReferenceSpace}
|
|
233
263
|
* @default null
|
|
234
264
|
*/
|
|
235
265
|
this._referenceSpace = null;
|
|
@@ -238,7 +268,7 @@ class XRManager extends EventDispatcher {
|
|
|
238
268
|
* The current XR reference space type.
|
|
239
269
|
*
|
|
240
270
|
* @private
|
|
241
|
-
* @type {
|
|
271
|
+
* @type {XRReferenceSpaceType}
|
|
242
272
|
* @default 'local-floor'
|
|
243
273
|
*/
|
|
244
274
|
this._referenceSpaceType = 'local-floor';
|
|
@@ -247,7 +277,7 @@ class XRManager extends EventDispatcher {
|
|
|
247
277
|
* A custom reference space defined by the application.
|
|
248
278
|
*
|
|
249
279
|
* @private
|
|
250
|
-
* @type {XRReferenceSpace
|
|
280
|
+
* @type {?XRReferenceSpace}
|
|
251
281
|
* @default null
|
|
252
282
|
*/
|
|
253
283
|
this._customReferenceSpace = null;
|
|
@@ -256,7 +286,7 @@ class XRManager extends EventDispatcher {
|
|
|
256
286
|
* The framebuffer scale factor.
|
|
257
287
|
*
|
|
258
288
|
* @private
|
|
259
|
-
* @type {
|
|
289
|
+
* @type {number}
|
|
260
290
|
* @default 1
|
|
261
291
|
*/
|
|
262
292
|
this._framebufferScaleFactor = 1;
|
|
@@ -265,7 +295,7 @@ class XRManager extends EventDispatcher {
|
|
|
265
295
|
* The foveation factor.
|
|
266
296
|
*
|
|
267
297
|
* @private
|
|
268
|
-
* @type {
|
|
298
|
+
* @type {number}
|
|
269
299
|
* @default 1
|
|
270
300
|
*/
|
|
271
301
|
this._foveation = 1.0;
|
|
@@ -274,7 +304,7 @@ class XRManager extends EventDispatcher {
|
|
|
274
304
|
* A reference to the current XR session.
|
|
275
305
|
*
|
|
276
306
|
* @private
|
|
277
|
-
* @type {XRSession
|
|
307
|
+
* @type {?XRSession}
|
|
278
308
|
* @default null
|
|
279
309
|
*/
|
|
280
310
|
this._session = null;
|
|
@@ -283,7 +313,7 @@ class XRManager extends EventDispatcher {
|
|
|
283
313
|
* A reference to the current XR base layer.
|
|
284
314
|
*
|
|
285
315
|
* @private
|
|
286
|
-
* @type {XRWebGLLayer
|
|
316
|
+
* @type {?XRWebGLLayer}
|
|
287
317
|
* @default null
|
|
288
318
|
*/
|
|
289
319
|
this._glBaseLayer = null;
|
|
@@ -292,7 +322,7 @@ class XRManager extends EventDispatcher {
|
|
|
292
322
|
* A reference to the current XR binding.
|
|
293
323
|
*
|
|
294
324
|
* @private
|
|
295
|
-
* @type {XRWebGLBinding
|
|
325
|
+
* @type {?XRWebGLBinding}
|
|
296
326
|
* @default null
|
|
297
327
|
*/
|
|
298
328
|
this._glBinding = null;
|
|
@@ -301,7 +331,7 @@ class XRManager extends EventDispatcher {
|
|
|
301
331
|
* A reference to the current XR projection layer.
|
|
302
332
|
*
|
|
303
333
|
* @private
|
|
304
|
-
* @type {XRProjectionLayer
|
|
334
|
+
* @type {?XRProjectionLayer}
|
|
305
335
|
* @default null
|
|
306
336
|
*/
|
|
307
337
|
this._glProjLayer = null;
|
|
@@ -310,7 +340,7 @@ class XRManager extends EventDispatcher {
|
|
|
310
340
|
* A reference to the current XR frame.
|
|
311
341
|
*
|
|
312
342
|
* @private
|
|
313
|
-
* @type {XRFrame
|
|
343
|
+
* @type {?XRFrame}
|
|
314
344
|
* @default null
|
|
315
345
|
*/
|
|
316
346
|
this._xrFrame = null;
|
|
@@ -319,7 +349,7 @@ class XRManager extends EventDispatcher {
|
|
|
319
349
|
* Whether to use the WebXR Layers API or not.
|
|
320
350
|
*
|
|
321
351
|
* @private
|
|
322
|
-
* @type {
|
|
352
|
+
* @type {boolean}
|
|
323
353
|
* @readonly
|
|
324
354
|
*/
|
|
325
355
|
this._useLayers = ( typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
|
|
@@ -331,7 +361,7 @@ class XRManager extends EventDispatcher {
|
|
|
331
361
|
* of a XR controller in target ray space. The requested controller is defined
|
|
332
362
|
* by the given index.
|
|
333
363
|
*
|
|
334
|
-
* @param {
|
|
364
|
+
* @param {number} index - The index of the XR controller.
|
|
335
365
|
* @return {Group} A group that represents the controller's transformation.
|
|
336
366
|
*/
|
|
337
367
|
getController( index ) {
|
|
@@ -347,7 +377,7 @@ class XRManager extends EventDispatcher {
|
|
|
347
377
|
* of a XR controller in grip space. The requested controller is defined
|
|
348
378
|
* by the given index.
|
|
349
379
|
*
|
|
350
|
-
* @param {
|
|
380
|
+
* @param {number} index - The index of the XR controller.
|
|
351
381
|
* @return {Group} A group that represents the controller's transformation.
|
|
352
382
|
*/
|
|
353
383
|
getControllerGrip( index ) {
|
|
@@ -363,7 +393,7 @@ class XRManager extends EventDispatcher {
|
|
|
363
393
|
* of a XR controller in hand space. The requested controller is defined
|
|
364
394
|
* by the given index.
|
|
365
395
|
*
|
|
366
|
-
* @param {
|
|
396
|
+
* @param {number} index - The index of the XR controller.
|
|
367
397
|
* @return {Group} A group that represents the controller's transformation.
|
|
368
398
|
*/
|
|
369
399
|
getHand( index ) {
|
|
@@ -377,7 +407,7 @@ class XRManager extends EventDispatcher {
|
|
|
377
407
|
/**
|
|
378
408
|
* Returns the foveation value.
|
|
379
409
|
*
|
|
380
|
-
* @return {
|
|
410
|
+
* @return {number|undefined} The foveation value. Returns `undefined` if no base or projection layer is defined.
|
|
381
411
|
*/
|
|
382
412
|
getFoveation() {
|
|
383
413
|
|
|
@@ -394,7 +424,7 @@ class XRManager extends EventDispatcher {
|
|
|
394
424
|
/**
|
|
395
425
|
* Sets the foveation value.
|
|
396
426
|
*
|
|
397
|
-
* @param {
|
|
427
|
+
* @param {number} foveation - A number in the range `[0,1]` where `0` means no foveation (full resolution)
|
|
398
428
|
* and `1` means maximum foveation (the edges render at lower resolution).
|
|
399
429
|
*/
|
|
400
430
|
setFoveation( foveation ) {
|
|
@@ -418,7 +448,7 @@ class XRManager extends EventDispatcher {
|
|
|
418
448
|
/**
|
|
419
449
|
* Returns the framebuffer scale factor.
|
|
420
450
|
*
|
|
421
|
-
* @return {
|
|
451
|
+
* @return {number} The framebuffer scale factor.
|
|
422
452
|
*/
|
|
423
453
|
getFramebufferScaleFactor() {
|
|
424
454
|
|
|
@@ -431,7 +461,7 @@ class XRManager extends EventDispatcher {
|
|
|
431
461
|
*
|
|
432
462
|
* This method can not be used during a XR session.
|
|
433
463
|
*
|
|
434
|
-
* @param {
|
|
464
|
+
* @param {number} factor - The framebuffer scale factor.
|
|
435
465
|
*/
|
|
436
466
|
setFramebufferScaleFactor( factor ) {
|
|
437
467
|
|
|
@@ -448,7 +478,7 @@ class XRManager extends EventDispatcher {
|
|
|
448
478
|
/**
|
|
449
479
|
* Returns the reference space type.
|
|
450
480
|
*
|
|
451
|
-
* @return {
|
|
481
|
+
* @return {XRReferenceSpaceType} The reference space type.
|
|
452
482
|
*/
|
|
453
483
|
getReferenceSpaceType() {
|
|
454
484
|
|
|
@@ -461,7 +491,7 @@ class XRManager extends EventDispatcher {
|
|
|
461
491
|
*
|
|
462
492
|
* This method can not be used during a XR session.
|
|
463
493
|
*
|
|
464
|
-
* @param {
|
|
494
|
+
* @param {XRReferenceSpaceType} type - The reference space type.
|
|
465
495
|
*/
|
|
466
496
|
setReferenceSpaceType( type ) {
|
|
467
497
|
|
|
@@ -511,7 +541,7 @@ class XRManager extends EventDispatcher {
|
|
|
511
541
|
/**
|
|
512
542
|
* Returns the environment blend mode from the current XR session.
|
|
513
543
|
*
|
|
514
|
-
* @return {
|
|
544
|
+
* @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.
|
|
515
545
|
*/
|
|
516
546
|
getEnvironmentBlendMode() {
|
|
517
547
|
|
|
@@ -526,7 +556,7 @@ class XRManager extends EventDispatcher {
|
|
|
526
556
|
/**
|
|
527
557
|
* Returns the current XR frame.
|
|
528
558
|
*
|
|
529
|
-
* @return {XRFrame
|
|
559
|
+
* @return {?XRFrame} The XR frame. Returns `null` when used outside a XR session.
|
|
530
560
|
*/
|
|
531
561
|
getFrame() {
|
|
532
562
|
|
|
@@ -534,10 +564,194 @@ class XRManager extends EventDispatcher {
|
|
|
534
564
|
|
|
535
565
|
}
|
|
536
566
|
|
|
567
|
+
createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
|
|
568
|
+
|
|
569
|
+
const geometry = new PlaneGeometry( width, height );
|
|
570
|
+
const renderTarget = new XRRenderTarget(
|
|
571
|
+
pixelwidth,
|
|
572
|
+
pixelheight,
|
|
573
|
+
{
|
|
574
|
+
format: RGBAFormat,
|
|
575
|
+
type: UnsignedByteType,
|
|
576
|
+
depthTexture: new DepthTexture(
|
|
577
|
+
pixelwidth,
|
|
578
|
+
pixelheight,
|
|
579
|
+
attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
|
|
580
|
+
undefined,
|
|
581
|
+
undefined,
|
|
582
|
+
undefined,
|
|
583
|
+
undefined,
|
|
584
|
+
undefined,
|
|
585
|
+
undefined,
|
|
586
|
+
attributes.stencil ? DepthStencilFormat : DepthFormat
|
|
587
|
+
),
|
|
588
|
+
stencilBuffer: attributes.stencil,
|
|
589
|
+
resolveDepthBuffer: false,
|
|
590
|
+
resolveStencilBuffer: false
|
|
591
|
+
} );
|
|
592
|
+
|
|
593
|
+
const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
|
|
594
|
+
material.map = renderTarget.texture;
|
|
595
|
+
material.map.offset.y = 1;
|
|
596
|
+
material.map.repeat.y = - 1;
|
|
597
|
+
const plane = new Mesh( geometry, material );
|
|
598
|
+
plane.position.copy( translation );
|
|
599
|
+
plane.quaternion.copy( quaternion );
|
|
600
|
+
|
|
601
|
+
const layer = {
|
|
602
|
+
type: 'quad',
|
|
603
|
+
width: width,
|
|
604
|
+
height: height,
|
|
605
|
+
translation: translation,
|
|
606
|
+
quaternion: quaternion,
|
|
607
|
+
pixelwidth: pixelwidth,
|
|
608
|
+
pixelheight: pixelheight,
|
|
609
|
+
plane: plane,
|
|
610
|
+
material: material,
|
|
611
|
+
rendercall: rendercall,
|
|
612
|
+
renderTarget: renderTarget };
|
|
613
|
+
|
|
614
|
+
this._layers.push( layer );
|
|
615
|
+
|
|
616
|
+
if ( this._session !== null ) {
|
|
617
|
+
|
|
618
|
+
layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
|
|
619
|
+
layer.plane.material.blending = CustomBlending;
|
|
620
|
+
layer.plane.material.blendEquation = AddEquation;
|
|
621
|
+
layer.plane.material.blendSrc = ZeroFactor;
|
|
622
|
+
layer.plane.material.blendDst = ZeroFactor;
|
|
623
|
+
|
|
624
|
+
layer.xrlayer = this._createXRLayer( layer );
|
|
625
|
+
|
|
626
|
+
const xrlayers = this._session.renderState.layers;
|
|
627
|
+
xrlayers.unshift( layer.xrlayer );
|
|
628
|
+
this._session.updateRenderState( { layers: xrlayers } );
|
|
629
|
+
|
|
630
|
+
} else {
|
|
631
|
+
|
|
632
|
+
renderTarget.isXRRenderTarget = false;
|
|
633
|
+
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
return plane;
|
|
637
|
+
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
|
|
641
|
+
|
|
642
|
+
const geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );
|
|
643
|
+
const renderTarget = new XRRenderTarget(
|
|
644
|
+
pixelwidth,
|
|
645
|
+
pixelheight,
|
|
646
|
+
{
|
|
647
|
+
format: RGBAFormat,
|
|
648
|
+
type: UnsignedByteType,
|
|
649
|
+
depthTexture: new DepthTexture(
|
|
650
|
+
pixelwidth,
|
|
651
|
+
pixelheight,
|
|
652
|
+
attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
|
|
653
|
+
undefined,
|
|
654
|
+
undefined,
|
|
655
|
+
undefined,
|
|
656
|
+
undefined,
|
|
657
|
+
undefined,
|
|
658
|
+
undefined,
|
|
659
|
+
attributes.stencil ? DepthStencilFormat : DepthFormat
|
|
660
|
+
),
|
|
661
|
+
stencilBuffer: attributes.stencil,
|
|
662
|
+
resolveDepthBuffer: false,
|
|
663
|
+
resolveStencilBuffer: false
|
|
664
|
+
} );
|
|
665
|
+
|
|
666
|
+
const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
|
|
667
|
+
material.map = renderTarget.texture;
|
|
668
|
+
material.map.offset.y = 1;
|
|
669
|
+
material.map.repeat.y = - 1;
|
|
670
|
+
const plane = new Mesh( geometry, material );
|
|
671
|
+
plane.position.copy( translation );
|
|
672
|
+
plane.quaternion.copy( quaternion );
|
|
673
|
+
|
|
674
|
+
const layer = {
|
|
675
|
+
type: 'cylinder',
|
|
676
|
+
radius: radius,
|
|
677
|
+
centralAngle: centralAngle,
|
|
678
|
+
aspectratio: aspectratio,
|
|
679
|
+
translation: translation,
|
|
680
|
+
quaternion: quaternion,
|
|
681
|
+
pixelwidth: pixelwidth,
|
|
682
|
+
pixelheight: pixelheight,
|
|
683
|
+
plane: plane,
|
|
684
|
+
material: material,
|
|
685
|
+
rendercall: rendercall,
|
|
686
|
+
renderTarget: renderTarget };
|
|
687
|
+
|
|
688
|
+
this._layers.push( layer );
|
|
689
|
+
|
|
690
|
+
if ( this._session !== null ) {
|
|
691
|
+
|
|
692
|
+
layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
|
|
693
|
+
layer.plane.material.blending = CustomBlending;
|
|
694
|
+
layer.plane.material.blendEquation = AddEquation;
|
|
695
|
+
layer.plane.material.blendSrc = ZeroFactor;
|
|
696
|
+
layer.plane.material.blendDst = ZeroFactor;
|
|
697
|
+
|
|
698
|
+
layer.xrlayer = this._createXRLayer( layer );
|
|
699
|
+
|
|
700
|
+
const xrlayers = this._session.renderState.layers;
|
|
701
|
+
xrlayers.unshift( layer.xrlayer );
|
|
702
|
+
this._session.updateRenderState( { layers: xrlayers } );
|
|
703
|
+
|
|
704
|
+
} else {
|
|
705
|
+
|
|
706
|
+
renderTarget.isXRRenderTarget = false;
|
|
707
|
+
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
return plane;
|
|
711
|
+
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
renderLayers( ) {
|
|
715
|
+
|
|
716
|
+
const translationObject = new Vector3();
|
|
717
|
+
const quaternionObject = new Quaternion();
|
|
718
|
+
|
|
719
|
+
const wasPresenting = this.isPresenting;
|
|
720
|
+
this.isPresenting = false;
|
|
721
|
+
|
|
722
|
+
for ( const layer of this._layers ) {
|
|
723
|
+
|
|
724
|
+
layer.renderTarget.isXRRenderTarget = this._session !== null;
|
|
725
|
+
layer.renderTarget.hasExternalTextures = layer.renderTarget.isXRRenderTarget;
|
|
726
|
+
layer.renderTarget.autoAllocateDepthBuffer = ! layer.renderTarget.isXRRenderTarget;
|
|
727
|
+
|
|
728
|
+
if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
|
|
729
|
+
|
|
730
|
+
layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
|
|
731
|
+
|
|
732
|
+
const glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );
|
|
733
|
+
this._renderer.backend.setXRRenderTargetTextures(
|
|
734
|
+
layer.renderTarget,
|
|
735
|
+
glSubImage.colorTexture,
|
|
736
|
+
glSubImage.depthStencilTexture );
|
|
737
|
+
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
this._renderer.setRenderTarget( layer.renderTarget );
|
|
741
|
+
layer.rendercall();
|
|
742
|
+
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
this.isPresenting = wasPresenting;
|
|
746
|
+
this._renderer.setRenderTarget( null );
|
|
747
|
+
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
|
|
537
751
|
/**
|
|
538
752
|
* Returns the current XR session.
|
|
539
753
|
*
|
|
540
|
-
* @return {XRSession
|
|
754
|
+
* @return {?XRSession} The XR session. Returns `null` when used outside a XR session.
|
|
541
755
|
*/
|
|
542
756
|
getSession() {
|
|
543
757
|
|
|
@@ -559,7 +773,9 @@ class XRManager extends EventDispatcher {
|
|
|
559
773
|
const renderer = this._renderer;
|
|
560
774
|
const backend = renderer.backend;
|
|
561
775
|
|
|
562
|
-
|
|
776
|
+
this._gl = renderer.getContext();
|
|
777
|
+
const gl = this._gl;
|
|
778
|
+
const attributes = gl.getContextAttributes();
|
|
563
779
|
|
|
564
780
|
this._session = session;
|
|
565
781
|
|
|
@@ -567,8 +783,6 @@ class XRManager extends EventDispatcher {
|
|
|
567
783
|
|
|
568
784
|
if ( backend.isWebGPUBackend === true ) throw new Error( 'THREE.XRManager: XR is currently not supported with a WebGPU backend. Use WebGL by passing "{ forceWebGL: true }" to the constructor of the renderer.' );
|
|
569
785
|
|
|
570
|
-
this._currentRenderTarget = renderer.getRenderTarget();
|
|
571
|
-
|
|
572
786
|
session.addEventListener( 'select', this._onSessionEvent );
|
|
573
787
|
session.addEventListener( 'selectstart', this._onSessionEvent );
|
|
574
788
|
session.addEventListener( 'selectend', this._onSessionEvent );
|
|
@@ -613,12 +827,11 @@ class XRManager extends EventDispatcher {
|
|
|
613
827
|
|
|
614
828
|
const glBinding = new XRWebGLBinding( session, gl );
|
|
615
829
|
const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
830
|
+
const layersArray = [ glProjLayer ];
|
|
616
831
|
|
|
617
832
|
this._glBinding = glBinding;
|
|
618
833
|
this._glProjLayer = glProjLayer;
|
|
619
834
|
|
|
620
|
-
session.updateRenderState( { layers: [ glProjLayer ] } );
|
|
621
|
-
|
|
622
835
|
renderer.setPixelRatio( 1 );
|
|
623
836
|
renderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );
|
|
624
837
|
|
|
@@ -631,11 +844,39 @@ class XRManager extends EventDispatcher {
|
|
|
631
844
|
colorSpace: renderer.outputColorSpace,
|
|
632
845
|
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
|
|
633
846
|
stencilBuffer: renderer.stencil,
|
|
634
|
-
samples:
|
|
847
|
+
samples: attributes.antialias ? 4 : 0,
|
|
848
|
+
resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
849
|
+
resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
635
850
|
} );
|
|
636
851
|
|
|
637
852
|
this._xrRenderTarget.hasExternalTextures = true;
|
|
638
853
|
|
|
854
|
+
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
855
|
+
|
|
856
|
+
this._supportsLayers = session.enabledFeatures.includes( 'layers' );
|
|
857
|
+
|
|
858
|
+
if ( this._supportsLayers ) {
|
|
859
|
+
|
|
860
|
+
// switch layers to native
|
|
861
|
+
for ( const layer of this._layers ) {
|
|
862
|
+
|
|
863
|
+
// change material so it "punches" out a hole to show the XR Layer.
|
|
864
|
+
layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: layer.type === 'cylinder' ? BackSide : FrontSide } );
|
|
865
|
+
layer.plane.material.blending = CustomBlending;
|
|
866
|
+
layer.plane.material.blendEquation = AddEquation;
|
|
867
|
+
layer.plane.material.blendSrc = ZeroFactor;
|
|
868
|
+
layer.plane.material.blendDst = ZeroFactor;
|
|
869
|
+
|
|
870
|
+
layer.xrlayer = this._createXRLayer( layer );
|
|
871
|
+
|
|
872
|
+
layersArray.unshift( layer.xrlayer );
|
|
873
|
+
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
session.updateRenderState( { layers: layersArray } );
|
|
879
|
+
|
|
639
880
|
} else {
|
|
640
881
|
|
|
641
882
|
// fallback to XRWebGLLayer
|
|
@@ -663,7 +904,9 @@ class XRManager extends EventDispatcher {
|
|
|
663
904
|
format: RGBAFormat,
|
|
664
905
|
type: UnsignedByteType,
|
|
665
906
|
colorSpace: renderer.outputColorSpace,
|
|
666
|
-
stencilBuffer: renderer.stencil
|
|
907
|
+
stencilBuffer: renderer.stencil,
|
|
908
|
+
resolveDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),
|
|
909
|
+
resolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false ),
|
|
667
910
|
}
|
|
668
911
|
);
|
|
669
912
|
|
|
@@ -673,8 +916,6 @@ class XRManager extends EventDispatcher {
|
|
|
673
916
|
|
|
674
917
|
this.setFoveation( this.getFoveation() );
|
|
675
918
|
|
|
676
|
-
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
677
|
-
|
|
678
919
|
renderer._animation.setAnimationLoop( this._onAnimationFrame );
|
|
679
920
|
renderer._animation.setContext( session );
|
|
680
921
|
renderer._animation.start();
|
|
@@ -764,7 +1005,7 @@ class XRManager extends EventDispatcher {
|
|
|
764
1005
|
* Returns a WebXR controller for the given controller index.
|
|
765
1006
|
*
|
|
766
1007
|
* @private
|
|
767
|
-
* @param {
|
|
1008
|
+
* @param {number} index - The controller index.
|
|
768
1009
|
* @return {WebXRController} The XR controller.
|
|
769
1010
|
*/
|
|
770
1011
|
_getController( index ) {
|
|
@@ -881,7 +1122,7 @@ function updateCamera( camera, parent ) {
|
|
|
881
1122
|
}
|
|
882
1123
|
|
|
883
1124
|
/**
|
|
884
|
-
* Updates the given camera with the
|
|
1125
|
+
* Updates the given camera with the transformation of the XR camera and parent object.
|
|
885
1126
|
*
|
|
886
1127
|
* @inner
|
|
887
1128
|
* @param {Camera} camera - The camera to update.
|
|
@@ -972,11 +1213,51 @@ function onSessionEnd() {
|
|
|
972
1213
|
// restore framebuffer/rendering state
|
|
973
1214
|
|
|
974
1215
|
renderer.backend.setXRTarget( null );
|
|
975
|
-
renderer.
|
|
1216
|
+
renderer.setOutputRenderTarget( null );
|
|
1217
|
+
renderer.setRenderTarget( null );
|
|
976
1218
|
|
|
977
1219
|
this._session = null;
|
|
978
1220
|
this._xrRenderTarget = null;
|
|
979
1221
|
|
|
1222
|
+
// switch layers back to emulated
|
|
1223
|
+
if ( this._supportsLayers === true ) {
|
|
1224
|
+
|
|
1225
|
+
for ( const layer of this._layers ) {
|
|
1226
|
+
|
|
1227
|
+
// Recreate layer render target to reset state
|
|
1228
|
+
layer.renderTarget = new XRRenderTarget(
|
|
1229
|
+
layer.pixelwidth,
|
|
1230
|
+
layer.pixelheight,
|
|
1231
|
+
{
|
|
1232
|
+
format: RGBAFormat,
|
|
1233
|
+
type: UnsignedByteType,
|
|
1234
|
+
depthTexture: new DepthTexture(
|
|
1235
|
+
layer.pixelwidth,
|
|
1236
|
+
layer.pixelheight,
|
|
1237
|
+
layer.stencilBuffer ? UnsignedInt248Type : UnsignedIntType,
|
|
1238
|
+
undefined,
|
|
1239
|
+
undefined,
|
|
1240
|
+
undefined,
|
|
1241
|
+
undefined,
|
|
1242
|
+
undefined,
|
|
1243
|
+
undefined,
|
|
1244
|
+
layer.stencilBuffer ? DepthStencilFormat : DepthFormat
|
|
1245
|
+
),
|
|
1246
|
+
stencilBuffer: layer.stencilBuffer,
|
|
1247
|
+
resolveDepthBuffer: false,
|
|
1248
|
+
resolveStencilBuffer: false
|
|
1249
|
+
} );
|
|
1250
|
+
|
|
1251
|
+
layer.renderTarget.isXRRenderTarget = false;
|
|
1252
|
+
|
|
1253
|
+
layer.plane.material = layer.material;
|
|
1254
|
+
layer.material.map = layer.renderTarget.texture;
|
|
1255
|
+
delete layer.xrlayer;
|
|
1256
|
+
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
}
|
|
1260
|
+
|
|
980
1261
|
//
|
|
981
1262
|
|
|
982
1263
|
this.isPresenting = false;
|
|
@@ -1063,6 +1344,40 @@ function onInputSourcesChange( event ) {
|
|
|
1063
1344
|
|
|
1064
1345
|
}
|
|
1065
1346
|
|
|
1347
|
+
// Creation method for native WebXR layers
|
|
1348
|
+
function createXRLayer( layer ) {
|
|
1349
|
+
|
|
1350
|
+
if ( layer.type === 'quad' ) {
|
|
1351
|
+
|
|
1352
|
+
return this._glBinding.createQuadLayer( {
|
|
1353
|
+
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1354
|
+
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1355
|
+
width: layer.width / 2,
|
|
1356
|
+
height: layer.height / 2,
|
|
1357
|
+
space: this._referenceSpace,
|
|
1358
|
+
viewPixelWidth: layer.pixelwidth,
|
|
1359
|
+
viewPixelHeight: layer.pixelheight
|
|
1360
|
+
} );
|
|
1361
|
+
|
|
1362
|
+
} else {
|
|
1363
|
+
|
|
1364
|
+
return this._glBinding.createCylinderLayer( {
|
|
1365
|
+
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1366
|
+
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1367
|
+
radius: layer.radius,
|
|
1368
|
+
centralAngle: layer.centralAngle,
|
|
1369
|
+
aspectRatio: layer.aspectRatio,
|
|
1370
|
+
space: this._referenceSpace,
|
|
1371
|
+
viewPixelWidth: layer.pixelwidth,
|
|
1372
|
+
viewPixelHeight: layer.pixelheight
|
|
1373
|
+
} );
|
|
1374
|
+
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
// Animation Loop
|
|
1380
|
+
|
|
1066
1381
|
function onAnimationFrame( time, frame ) {
|
|
1067
1382
|
|
|
1068
1383
|
if ( frame === undefined ) return;
|
|
@@ -1159,7 +1474,7 @@ function onAnimationFrame( time, frame ) {
|
|
|
1159
1474
|
|
|
1160
1475
|
}
|
|
1161
1476
|
|
|
1162
|
-
renderer.
|
|
1477
|
+
renderer.setOutputRenderTarget( this._xrRenderTarget );
|
|
1163
1478
|
|
|
1164
1479
|
}
|
|
1165
1480
|
|