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
|
@@ -2,8 +2,6 @@ import Node from '../core/Node.js';
|
|
|
2
2
|
import { nodeObject, vec3 } from '../tsl/TSLBase.js';
|
|
3
3
|
import { hashArray } from '../core/NodeUtils.js';
|
|
4
4
|
|
|
5
|
-
/** @module LightsNode **/
|
|
6
|
-
|
|
7
5
|
const sortLights = ( lights ) => {
|
|
8
6
|
|
|
9
7
|
return lights.sort( ( a, b ) => a.id - b.id );
|
|
@@ -55,21 +53,21 @@ class LightsNode extends Node {
|
|
|
55
53
|
*
|
|
56
54
|
* @type {Node<vec3>}
|
|
57
55
|
*/
|
|
58
|
-
this.totalDiffuseNode = vec3().toVar(
|
|
56
|
+
this.totalDiffuseNode = vec3().toVar();
|
|
59
57
|
|
|
60
58
|
/**
|
|
61
59
|
* A node representing the total specular light.
|
|
62
60
|
*
|
|
63
61
|
* @type {Node<vec3>}
|
|
64
62
|
*/
|
|
65
|
-
this.totalSpecularNode = vec3().toVar(
|
|
63
|
+
this.totalSpecularNode = vec3().toVar();
|
|
66
64
|
|
|
67
65
|
/**
|
|
68
66
|
* A node representing the outgoing light.
|
|
69
67
|
*
|
|
70
68
|
* @type {Node<vec3>}
|
|
71
69
|
*/
|
|
72
|
-
this.outgoingLightNode = vec3().toVar(
|
|
70
|
+
this.outgoingLightNode = vec3().toVar();
|
|
73
71
|
|
|
74
72
|
/**
|
|
75
73
|
* An array representing the lights in the scene.
|
|
@@ -84,7 +82,7 @@ class LightsNode extends Node {
|
|
|
84
82
|
* corresponding light node.
|
|
85
83
|
*
|
|
86
84
|
* @private
|
|
87
|
-
* @type {Array<LightingNode
|
|
85
|
+
* @type {?Array<LightingNode>}
|
|
88
86
|
* @default null
|
|
89
87
|
*/
|
|
90
88
|
this._lightNodes = null;
|
|
@@ -93,7 +91,7 @@ class LightsNode extends Node {
|
|
|
93
91
|
* A hash for identifying the current light nodes setup.
|
|
94
92
|
*
|
|
95
93
|
* @private
|
|
96
|
-
* @type {
|
|
94
|
+
* @type {?string}
|
|
97
95
|
* @default null
|
|
98
96
|
*/
|
|
99
97
|
this._lightNodesHash = null;
|
|
@@ -101,7 +99,7 @@ class LightsNode extends Node {
|
|
|
101
99
|
/**
|
|
102
100
|
* `LightsNode` sets this property to `true` by default.
|
|
103
101
|
*
|
|
104
|
-
* @type {
|
|
102
|
+
* @type {boolean}
|
|
105
103
|
* @default true
|
|
106
104
|
*/
|
|
107
105
|
this.global = true;
|
|
@@ -112,7 +110,7 @@ class LightsNode extends Node {
|
|
|
112
110
|
* Overwrites the default {@link Node#customCacheKey} implementation by including the
|
|
113
111
|
* light IDs into the cache key.
|
|
114
112
|
*
|
|
115
|
-
* @return {
|
|
113
|
+
* @return {number} The custom cache key.
|
|
116
114
|
*/
|
|
117
115
|
customCacheKey() {
|
|
118
116
|
|
|
@@ -133,7 +131,7 @@ class LightsNode extends Node {
|
|
|
133
131
|
* Computes a hash value for identifying the current light nodes setup.
|
|
134
132
|
*
|
|
135
133
|
* @param {NodeBuilder} builder - A reference to the current node builder.
|
|
136
|
-
* @return {
|
|
134
|
+
* @return {string} The computed hash.
|
|
137
135
|
*/
|
|
138
136
|
getHash( builder ) {
|
|
139
137
|
|
|
@@ -238,6 +236,37 @@ class LightsNode extends Node {
|
|
|
238
236
|
|
|
239
237
|
}
|
|
240
238
|
|
|
239
|
+
/**
|
|
240
|
+
* Sets up a direct light in the lighting model.
|
|
241
|
+
*
|
|
242
|
+
* @param {Object} builder - The builder object containing the context and stack.
|
|
243
|
+
* @param {Object} lightNode - The light node.
|
|
244
|
+
* @param {Object} lightData - The light object containing color and direction properties.
|
|
245
|
+
*/
|
|
246
|
+
setupDirectLight( builder, lightNode, lightData ) {
|
|
247
|
+
|
|
248
|
+
const { lightingModel, reflectedLight } = builder.context;
|
|
249
|
+
|
|
250
|
+
lightingModel.direct( {
|
|
251
|
+
...lightData,
|
|
252
|
+
lightNode,
|
|
253
|
+
reflectedLight
|
|
254
|
+
}, builder );
|
|
255
|
+
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
setupDirectRectAreaLight( builder, lightNode, lightData ) {
|
|
259
|
+
|
|
260
|
+
const { lightingModel, reflectedLight } = builder.context;
|
|
261
|
+
|
|
262
|
+
lightingModel.directRectArea( {
|
|
263
|
+
...lightData,
|
|
264
|
+
lightNode,
|
|
265
|
+
reflectedLight
|
|
266
|
+
}, builder );
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
241
270
|
/**
|
|
242
271
|
* Setups the internal lights by building all respective
|
|
243
272
|
* light nodes.
|
|
@@ -255,6 +284,14 @@ class LightsNode extends Node {
|
|
|
255
284
|
|
|
256
285
|
}
|
|
257
286
|
|
|
287
|
+
getLightNodes( builder ) {
|
|
288
|
+
|
|
289
|
+
if ( this._lightNodes === null ) this.setupLightsNode( builder );
|
|
290
|
+
|
|
291
|
+
return this._lightNodes;
|
|
292
|
+
|
|
293
|
+
}
|
|
294
|
+
|
|
258
295
|
/**
|
|
259
296
|
* The implementation makes sure that for each light in the scene
|
|
260
297
|
* there is a corresponding light node. By building the light nodes
|
|
@@ -265,16 +302,22 @@ class LightsNode extends Node {
|
|
|
265
302
|
*/
|
|
266
303
|
setup( builder ) {
|
|
267
304
|
|
|
268
|
-
|
|
305
|
+
const currentLightsNode = builder.lightsNode;
|
|
306
|
+
|
|
307
|
+
builder.lightsNode = this;
|
|
308
|
+
|
|
309
|
+
//
|
|
310
|
+
|
|
311
|
+
let outgoingLightNode = this.outgoingLightNode;
|
|
269
312
|
|
|
270
313
|
const context = builder.context;
|
|
271
314
|
const lightingModel = context.lightingModel;
|
|
272
315
|
|
|
273
|
-
|
|
316
|
+
const properties = builder.getDataFromNode( this );
|
|
274
317
|
|
|
275
318
|
if ( lightingModel ) {
|
|
276
319
|
|
|
277
|
-
const {
|
|
320
|
+
const { totalDiffuseNode, totalSpecularNode } = this;
|
|
278
321
|
|
|
279
322
|
context.outgoingLight = outgoingLightNode;
|
|
280
323
|
|
|
@@ -282,20 +325,11 @@ class LightsNode extends Node {
|
|
|
282
325
|
|
|
283
326
|
//
|
|
284
327
|
|
|
285
|
-
const properties = builder.getDataFromNode( this );
|
|
286
328
|
properties.nodes = stack.nodes;
|
|
287
329
|
|
|
288
330
|
//
|
|
289
331
|
|
|
290
|
-
lightingModel.start(
|
|
291
|
-
|
|
292
|
-
// lights
|
|
293
|
-
|
|
294
|
-
this.setupLights( builder, _lightNodes );
|
|
295
|
-
|
|
296
|
-
//
|
|
297
|
-
|
|
298
|
-
lightingModel.indirect( context, stack, builder );
|
|
332
|
+
lightingModel.start( builder );
|
|
299
333
|
|
|
300
334
|
//
|
|
301
335
|
|
|
@@ -327,14 +361,22 @@ class LightsNode extends Node {
|
|
|
327
361
|
|
|
328
362
|
//
|
|
329
363
|
|
|
330
|
-
lightingModel.finish(
|
|
364
|
+
lightingModel.finish( builder );
|
|
331
365
|
|
|
332
366
|
//
|
|
333
367
|
|
|
334
368
|
outgoingLightNode = outgoingLightNode.bypass( builder.removeStack() );
|
|
335
369
|
|
|
370
|
+
} else {
|
|
371
|
+
|
|
372
|
+
properties.nodes = [];
|
|
373
|
+
|
|
336
374
|
}
|
|
337
375
|
|
|
376
|
+
//
|
|
377
|
+
|
|
378
|
+
builder.lightsNode = currentLightsNode;
|
|
379
|
+
|
|
338
380
|
return outgoingLightNode;
|
|
339
381
|
|
|
340
382
|
}
|
|
@@ -370,7 +412,7 @@ class LightsNode extends Node {
|
|
|
370
412
|
/**
|
|
371
413
|
* Whether the scene has lights or not.
|
|
372
414
|
*
|
|
373
|
-
* @type {
|
|
415
|
+
* @type {boolean}
|
|
374
416
|
*/
|
|
375
417
|
get hasLights() {
|
|
376
418
|
|
|
@@ -386,6 +428,7 @@ export default LightsNode;
|
|
|
386
428
|
* TSL function for creating an instance of `LightsNode` and configuring
|
|
387
429
|
* it with the given array of lights.
|
|
388
430
|
*
|
|
431
|
+
* @tsl
|
|
389
432
|
* @function
|
|
390
433
|
* @param {Array<Light>} lights - An array of lights.
|
|
391
434
|
* @return {LightsNode} The created lights node.
|
|
@@ -1,38 +1,25 @@
|
|
|
1
1
|
import AnalyticLightNode from './AnalyticLightNode.js';
|
|
2
2
|
import { getDistanceAttenuation } from './LightUtils.js';
|
|
3
3
|
import { uniform } from '../core/UniformNode.js';
|
|
4
|
-
import { lightViewPosition } from '../accessors/Lights.js';
|
|
5
|
-
import { positionView } from '../accessors/Position.js';
|
|
6
|
-
import { Fn } from '../tsl/TSLBase.js';
|
|
7
4
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
8
5
|
import { pointShadow } from './PointShadowNode.js';
|
|
9
6
|
|
|
10
|
-
export const directPointLight =
|
|
7
|
+
export const directPointLight = ( { color, lightVector, cutoffDistance, decayExponent } ) => {
|
|
11
8
|
|
|
12
|
-
const
|
|
9
|
+
const lightDirection = lightVector.normalize();
|
|
10
|
+
const lightDistance = lightVector.length();
|
|
13
11
|
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
const lightDirection = lVector.normalize();
|
|
17
|
-
const lightDistance = lVector.length();
|
|
18
|
-
|
|
19
|
-
const lightAttenuation = getDistanceAttenuation( {
|
|
12
|
+
const attenuation = getDistanceAttenuation( {
|
|
20
13
|
lightDistance,
|
|
21
14
|
cutoffDistance,
|
|
22
15
|
decayExponent
|
|
23
16
|
} );
|
|
24
17
|
|
|
25
|
-
const lightColor = color.mul(
|
|
18
|
+
const lightColor = color.mul( attenuation );
|
|
26
19
|
|
|
27
|
-
|
|
20
|
+
return { lightDirection, lightColor };
|
|
28
21
|
|
|
29
|
-
|
|
30
|
-
lightDirection,
|
|
31
|
-
lightColor,
|
|
32
|
-
reflectedLight
|
|
33
|
-
}, builder.stack, builder );
|
|
34
|
-
|
|
35
|
-
} );
|
|
22
|
+
};
|
|
36
23
|
|
|
37
24
|
/**
|
|
38
25
|
* Module for representing point lights as nodes.
|
|
@@ -50,7 +37,7 @@ class PointLightNode extends AnalyticLightNode {
|
|
|
50
37
|
/**
|
|
51
38
|
* Constructs a new point light node.
|
|
52
39
|
*
|
|
53
|
-
* @param {PointLight
|
|
40
|
+
* @param {?PointLight} [light=null] - The point light source.
|
|
54
41
|
*/
|
|
55
42
|
constructor( light = null ) {
|
|
56
43
|
|
|
@@ -99,16 +86,14 @@ class PointLightNode extends AnalyticLightNode {
|
|
|
99
86
|
|
|
100
87
|
}
|
|
101
88
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
super.setup( builder );
|
|
89
|
+
setupDirect( builder ) {
|
|
105
90
|
|
|
106
|
-
directPointLight( {
|
|
91
|
+
return directPointLight( {
|
|
107
92
|
color: this.colorNode,
|
|
108
|
-
|
|
93
|
+
lightVector: this.getLightVector( builder ),
|
|
109
94
|
cutoffDistance: this.cutoffDistanceNode,
|
|
110
95
|
decayExponent: this.decayExponentNode
|
|
111
|
-
} )
|
|
96
|
+
} );
|
|
112
97
|
|
|
113
98
|
}
|
|
114
99
|
|
|
@@ -11,8 +11,6 @@ import { Vector4 } from '../../math/Vector4.js';
|
|
|
11
11
|
import { Color } from '../../math/Color.js';
|
|
12
12
|
import { BasicShadowMap } from '../../constants.js';
|
|
13
13
|
|
|
14
|
-
/** @module PointShadowNode **/
|
|
15
|
-
|
|
16
14
|
const _clearColor = /*@__PURE__*/ new Color();
|
|
17
15
|
|
|
18
16
|
// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D
|
|
@@ -163,7 +161,7 @@ const _shadowMapSize = /*@__PURE__*/ new Vector2();
|
|
|
163
161
|
/**
|
|
164
162
|
* Represents the shadow implementation for point light nodes.
|
|
165
163
|
*
|
|
166
|
-
* @augments
|
|
164
|
+
* @augments ShadowNode
|
|
167
165
|
*/
|
|
168
166
|
class PointShadowNode extends ShadowNode {
|
|
169
167
|
|
|
@@ -177,7 +175,7 @@ class PointShadowNode extends ShadowNode {
|
|
|
177
175
|
* Constructs a new point shadow node.
|
|
178
176
|
*
|
|
179
177
|
* @param {PointLight} light - The shadow casting point light.
|
|
180
|
-
* @param {PointLightShadow
|
|
178
|
+
* @param {?PointLightShadow} [shadow=null] - An optional point light shadow.
|
|
181
179
|
*/
|
|
182
180
|
constructor( light, shadow = null ) {
|
|
183
181
|
|
|
@@ -189,7 +187,7 @@ class PointShadowNode extends ShadowNode {
|
|
|
189
187
|
* Overwrites the default implementation to return point light shadow specific
|
|
190
188
|
* filtering functions.
|
|
191
189
|
*
|
|
192
|
-
* @param {
|
|
190
|
+
* @param {number} type - The shadow type.
|
|
193
191
|
* @return {Function} The filtering function.
|
|
194
192
|
*/
|
|
195
193
|
getShadowFilterFn( type ) {
|
|
@@ -299,9 +297,10 @@ export default PointShadowNode;
|
|
|
299
297
|
/**
|
|
300
298
|
* TSL function for creating an instance of `PointShadowNode`.
|
|
301
299
|
*
|
|
300
|
+
* @tsl
|
|
302
301
|
* @function
|
|
303
302
|
* @param {PointLight} light - The shadow casting point light.
|
|
304
|
-
* @param {PointLightShadow
|
|
303
|
+
* @param {?PointLightShadow} [shadow=null] - An optional point light shadow.
|
|
305
304
|
* @return {PointShadowNode} The created point shadow node.
|
|
306
305
|
*/
|
|
307
306
|
export const pointShadow = ( light, shadow ) => nodeObject( new PointShadowNode( light, shadow ) );
|
|
@@ -29,7 +29,7 @@ class RectAreaLightNode extends AnalyticLightNode {
|
|
|
29
29
|
/**
|
|
30
30
|
* Constructs a new rect area light node.
|
|
31
31
|
*
|
|
32
|
-
* @param {RectAreaLight
|
|
32
|
+
* @param {?RectAreaLight} [light=null] - The rect area light source.
|
|
33
33
|
*/
|
|
34
34
|
constructor( light = null ) {
|
|
35
35
|
|
|
@@ -53,7 +53,7 @@ class RectAreaLightNode extends AnalyticLightNode {
|
|
|
53
53
|
* The `updateType` is set to `NodeUpdateType.RENDER` since the light
|
|
54
54
|
* relies on `viewMatrix` which might vary per render call.
|
|
55
55
|
*
|
|
56
|
-
* @type {
|
|
56
|
+
* @type {string}
|
|
57
57
|
* @default 'render'
|
|
58
58
|
*/
|
|
59
59
|
this.updateType = NodeUpdateType.RENDER;
|
|
@@ -86,9 +86,7 @@ class RectAreaLightNode extends AnalyticLightNode {
|
|
|
86
86
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
super.setup( builder );
|
|
89
|
+
setupDirectRectArea( builder ) {
|
|
92
90
|
|
|
93
91
|
let ltc_1, ltc_2;
|
|
94
92
|
|
|
@@ -105,20 +103,17 @@ class RectAreaLightNode extends AnalyticLightNode {
|
|
|
105
103
|
}
|
|
106
104
|
|
|
107
105
|
const { colorNode, light } = this;
|
|
108
|
-
const lightingModel = builder.context.lightingModel;
|
|
109
106
|
|
|
110
107
|
const lightPosition = lightViewPosition( light );
|
|
111
|
-
const reflectedLight = builder.context.reflectedLight;
|
|
112
108
|
|
|
113
|
-
|
|
109
|
+
return {
|
|
114
110
|
lightColor: colorNode,
|
|
115
111
|
lightPosition,
|
|
116
112
|
halfWidth: this.halfWidth,
|
|
117
113
|
halfHeight: this.halfHeight,
|
|
118
|
-
reflectedLight,
|
|
119
114
|
ltc_1,
|
|
120
115
|
ltc_2
|
|
121
|
-
}
|
|
116
|
+
};
|
|
122
117
|
|
|
123
118
|
}
|
|
124
119
|
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
-
import {
|
|
3
|
+
import { property } from '../tsl/TSLBase.js';
|
|
4
4
|
import { positionWorld } from '../accessors/Position.js';
|
|
5
5
|
|
|
6
|
-
/** @module ShadowBaseNode **/
|
|
7
|
-
|
|
8
6
|
/**
|
|
9
7
|
* Base class for all shadow nodes.
|
|
10
8
|
*
|
|
@@ -41,7 +39,7 @@ class ShadowBaseNode extends Node {
|
|
|
41
39
|
/**
|
|
42
40
|
* Overwritten since shadows are updated by default per render.
|
|
43
41
|
*
|
|
44
|
-
* @type {
|
|
42
|
+
* @type {string}
|
|
45
43
|
* @default 'render'
|
|
46
44
|
*/
|
|
47
45
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
@@ -49,7 +47,7 @@ class ShadowBaseNode extends Node {
|
|
|
49
47
|
/**
|
|
50
48
|
* This flag can be used for type testing.
|
|
51
49
|
*
|
|
52
|
-
* @type {
|
|
50
|
+
* @type {boolean}
|
|
53
51
|
* @readonly
|
|
54
52
|
* @default true
|
|
55
53
|
*/
|
|
@@ -60,13 +58,13 @@ class ShadowBaseNode extends Node {
|
|
|
60
58
|
/**
|
|
61
59
|
* Setups the shadow position node which is by default the predefined TSL node object `shadowPositionWorld`.
|
|
62
60
|
*
|
|
63
|
-
* @param {
|
|
61
|
+
* @param {NodeBuilder} object - A configuration object that must at least hold a material reference.
|
|
64
62
|
*/
|
|
65
|
-
setupShadowPosition( { material } ) {
|
|
63
|
+
setupShadowPosition( { context, material } ) {
|
|
66
64
|
|
|
67
65
|
// Use assign inside an Fn()
|
|
68
66
|
|
|
69
|
-
shadowPositionWorld.assign( material.shadowPositionNode || positionWorld );
|
|
67
|
+
shadowPositionWorld.assign( material.shadowPositionNode || context.shadowPositionWorld || positionWorld );
|
|
70
68
|
|
|
71
69
|
}
|
|
72
70
|
|
|
@@ -86,8 +84,9 @@ class ShadowBaseNode extends Node {
|
|
|
86
84
|
/**
|
|
87
85
|
* TSL object that represents the vertex position in world space during the shadow pass.
|
|
88
86
|
*
|
|
87
|
+
* @tsl
|
|
89
88
|
* @type {Node<vec3>}
|
|
90
89
|
*/
|
|
91
|
-
export const shadowPositionWorld = /*@__PURE__*/
|
|
90
|
+
export const shadowPositionWorld = /*@__PURE__*/ property( 'vec3', 'shadowPositionWorld' );
|
|
92
91
|
|
|
93
92
|
export default ShadowBaseNode;
|
|
@@ -19,8 +19,6 @@ import { lightShadowMatrix } from '../accessors/Lights.js';
|
|
|
19
19
|
import { resetRendererAndSceneState, restoreRendererAndSceneState } from '../../renderers/common/RendererUtils.js';
|
|
20
20
|
import { getDataFromObject } from '../core/NodeUtils.js';
|
|
21
21
|
|
|
22
|
-
/** @module ShadowNode **/
|
|
23
|
-
|
|
24
22
|
const shadowMaterialLib = /*@__PURE__*/ new WeakMap();
|
|
25
23
|
const linearDistance = /*@__PURE__*/ Fn( ( [ position, cameraNear, cameraFar ] ) => {
|
|
26
24
|
|
|
@@ -314,7 +312,7 @@ const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
|
314
312
|
/**
|
|
315
313
|
* Represents the default shadow implementation for lighting nodes.
|
|
316
314
|
*
|
|
317
|
-
* @augments
|
|
315
|
+
* @augments ShadowBaseNode
|
|
318
316
|
*/
|
|
319
317
|
class ShadowNode extends ShadowBaseNode {
|
|
320
318
|
|
|
@@ -328,7 +326,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
328
326
|
* Constructs a new shadow node.
|
|
329
327
|
*
|
|
330
328
|
* @param {Light} light - The shadow casting light.
|
|
331
|
-
* @param {LightShadow
|
|
329
|
+
* @param {?LightShadow} [shadow=null] - An optional light shadow.
|
|
332
330
|
*/
|
|
333
331
|
constructor( light, shadow = null ) {
|
|
334
332
|
|
|
@@ -338,7 +336,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
338
336
|
* The light shadow which defines the properties light's
|
|
339
337
|
* shadow.
|
|
340
338
|
*
|
|
341
|
-
* @type {LightShadow
|
|
339
|
+
* @type {?LightShadow}
|
|
342
340
|
* @default null
|
|
343
341
|
*/
|
|
344
342
|
this.shadow = shadow || light.shadow;
|
|
@@ -346,7 +344,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
346
344
|
/**
|
|
347
345
|
* A reference to the shadow map which is a render target.
|
|
348
346
|
*
|
|
349
|
-
* @type {RenderTarget
|
|
347
|
+
* @type {?RenderTarget}
|
|
350
348
|
* @default null
|
|
351
349
|
*/
|
|
352
350
|
this.shadowMap = null;
|
|
@@ -355,7 +353,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
355
353
|
* Only relevant for VSM shadows. Render target for the
|
|
356
354
|
* first VSM render pass.
|
|
357
355
|
*
|
|
358
|
-
* @type {RenderTarget
|
|
356
|
+
* @type {?RenderTarget}
|
|
359
357
|
* @default null
|
|
360
358
|
*/
|
|
361
359
|
this.vsmShadowMapVertical = null;
|
|
@@ -364,7 +362,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
364
362
|
* Only relevant for VSM shadows. Render target for the
|
|
365
363
|
* second VSM render pass.
|
|
366
364
|
*
|
|
367
|
-
* @type {RenderTarget
|
|
365
|
+
* @type {?RenderTarget}
|
|
368
366
|
* @default null
|
|
369
367
|
*/
|
|
370
368
|
this.vsmShadowMapHorizontal = null;
|
|
@@ -373,7 +371,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
373
371
|
* Only relevant for VSM shadows. Node material which
|
|
374
372
|
* is used to render the first VSM pass.
|
|
375
373
|
*
|
|
376
|
-
* @type {NodeMaterial
|
|
374
|
+
* @type {?NodeMaterial}
|
|
377
375
|
* @default null
|
|
378
376
|
*/
|
|
379
377
|
this.vsmMaterialVertical = null;
|
|
@@ -382,7 +380,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
382
380
|
* Only relevant for VSM shadows. Node material which
|
|
383
381
|
* is used to render the second VSM pass.
|
|
384
382
|
*
|
|
385
|
-
* @type {NodeMaterial
|
|
383
|
+
* @type {?NodeMaterial}
|
|
386
384
|
* @default null
|
|
387
385
|
*/
|
|
388
386
|
this.vsmMaterialHorizontal = null;
|
|
@@ -391,16 +389,18 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
391
389
|
* A reference to the output node which defines the
|
|
392
390
|
* final result of this shadow node.
|
|
393
391
|
*
|
|
394
|
-
* @type {Node
|
|
392
|
+
* @type {?Node}
|
|
395
393
|
* @private
|
|
396
394
|
* @default null
|
|
397
395
|
*/
|
|
398
396
|
this._node = null;
|
|
399
397
|
|
|
398
|
+
this._cameraFrameId = new WeakMap();
|
|
399
|
+
|
|
400
400
|
/**
|
|
401
401
|
* This flag can be used for type testing.
|
|
402
402
|
*
|
|
403
|
-
* @type {
|
|
403
|
+
* @type {boolean}
|
|
404
404
|
* @readonly
|
|
405
405
|
* @default true
|
|
406
406
|
*/
|
|
@@ -490,7 +490,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
490
490
|
/**
|
|
491
491
|
* Returns the shadow filtering function for the given shadow type.
|
|
492
492
|
*
|
|
493
|
-
* @param {
|
|
493
|
+
* @param {number} type - The shadow type.
|
|
494
494
|
* @return {Function} The filtering function.
|
|
495
495
|
*/
|
|
496
496
|
getShadowFilterFn( type ) {
|
|
@@ -768,7 +768,19 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
768
768
|
|
|
769
769
|
const { shadow } = this;
|
|
770
770
|
|
|
771
|
-
|
|
771
|
+
let needsUpdate = shadow.needsUpdate || shadow.autoUpdate;
|
|
772
|
+
|
|
773
|
+
if ( needsUpdate ) {
|
|
774
|
+
|
|
775
|
+
if ( this._cameraFrameId[ frame.camera ] === frame.frameId ) {
|
|
776
|
+
|
|
777
|
+
needsUpdate = false;
|
|
778
|
+
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
this._cameraFrameId[ frame.camera ] = frame.frameId;
|
|
782
|
+
|
|
783
|
+
}
|
|
772
784
|
|
|
773
785
|
if ( needsUpdate ) {
|
|
774
786
|
|
|
@@ -791,9 +803,10 @@ export default ShadowNode;
|
|
|
791
803
|
/**
|
|
792
804
|
* TSL function for creating an instance of `ShadowNode`.
|
|
793
805
|
*
|
|
806
|
+
* @tsl
|
|
794
807
|
* @function
|
|
795
808
|
* @param {Light} light - The shadow casting light.
|
|
796
|
-
* @param {LightShadow} shadow - The light shadow.
|
|
809
|
+
* @param {?LightShadow} [shadow] - The light shadow.
|
|
797
810
|
* @return {ShadowNode} The created shadow node.
|
|
798
811
|
*/
|
|
799
812
|
export const shadow = ( light, shadow ) => nodeObject( new ShadowNode( light, shadow ) );
|
|
@@ -2,9 +2,8 @@ import AnalyticLightNode from './AnalyticLightNode.js';
|
|
|
2
2
|
import { getDistanceAttenuation } from './LightUtils.js';
|
|
3
3
|
import { uniform } from '../core/UniformNode.js';
|
|
4
4
|
import { smoothstep } from '../math/MathNode.js';
|
|
5
|
-
import { positionView } from '../accessors/Position.js';
|
|
6
5
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
7
|
-
import {
|
|
6
|
+
import { lightTargetDirection, lightProjectionUV } from '../accessors/Lights.js';
|
|
8
7
|
import { texture } from '../accessors/TextureNode.js';
|
|
9
8
|
|
|
10
9
|
/**
|
|
@@ -23,7 +22,7 @@ class SpotLightNode extends AnalyticLightNode {
|
|
|
23
22
|
/**
|
|
24
23
|
* Constructs a new spot light node.
|
|
25
24
|
*
|
|
26
|
-
* @param {SpotLight
|
|
25
|
+
* @param {?SpotLight} [light=null] - The spot light source.
|
|
27
26
|
*/
|
|
28
27
|
constructor( light = null ) {
|
|
29
28
|
|
|
@@ -92,21 +91,17 @@ class SpotLightNode extends AnalyticLightNode {
|
|
|
92
91
|
|
|
93
92
|
}
|
|
94
93
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
super.setup( builder );
|
|
98
|
-
|
|
99
|
-
const lightingModel = builder.context.lightingModel;
|
|
94
|
+
setupDirect( builder ) {
|
|
100
95
|
|
|
101
96
|
const { colorNode, cutoffDistanceNode, decayExponentNode, light } = this;
|
|
102
97
|
|
|
103
|
-
const
|
|
98
|
+
const lightVector = this.getLightVector( builder );
|
|
104
99
|
|
|
105
|
-
const lightDirection =
|
|
100
|
+
const lightDirection = lightVector.normalize();
|
|
106
101
|
const angleCos = lightDirection.dot( lightTargetDirection( light ) );
|
|
107
102
|
const spotAttenuation = this.getSpotAttenuation( angleCos );
|
|
108
103
|
|
|
109
|
-
const lightDistance =
|
|
104
|
+
const lightDistance = lightVector.length();
|
|
110
105
|
|
|
111
106
|
const lightAttenuation = getDistanceAttenuation( {
|
|
112
107
|
lightDistance,
|
|
@@ -118,7 +113,7 @@ class SpotLightNode extends AnalyticLightNode {
|
|
|
118
113
|
|
|
119
114
|
if ( light.map ) {
|
|
120
115
|
|
|
121
|
-
const spotLightCoord = lightProjectionUV( light );
|
|
116
|
+
const spotLightCoord = lightProjectionUV( light, builder.context.positionWorld );
|
|
122
117
|
const projectedTexture = texture( light.map, spotLightCoord.xy ).onRenderUpdate( () => light.map );
|
|
123
118
|
|
|
124
119
|
const inSpotLightMap = spotLightCoord.mul( 2. ).sub( 1. ).abs().lessThan( 1. ).all();
|
|
@@ -127,13 +122,7 @@ class SpotLightNode extends AnalyticLightNode {
|
|
|
127
122
|
|
|
128
123
|
}
|
|
129
124
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
lightingModel.direct( {
|
|
133
|
-
lightDirection,
|
|
134
|
-
lightColor,
|
|
135
|
-
reflectedLight
|
|
136
|
-
}, builder.stack, builder );
|
|
125
|
+
return { lightColor, lightDirection };
|
|
137
126
|
|
|
138
127
|
}
|
|
139
128
|
|