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
|
@@ -352,12 +352,12 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
352
352
|
/**
|
|
353
353
|
* Constructs a new physical lighting model.
|
|
354
354
|
*
|
|
355
|
-
* @param {
|
|
356
|
-
* @param {
|
|
357
|
-
* @param {
|
|
358
|
-
* @param {
|
|
359
|
-
* @param {
|
|
360
|
-
* @param {
|
|
355
|
+
* @param {boolean} [clearcoat=false] - Whether clearcoat is supported or not.
|
|
356
|
+
* @param {boolean} [sheen=false] - Whether sheen is supported or not.
|
|
357
|
+
* @param {boolean} [iridescence=false] - Whether iridescence is supported or not.
|
|
358
|
+
* @param {boolean} [anisotropy=false] - Whether anisotropy is supported or not.
|
|
359
|
+
* @param {boolean} [transmission=false] - Whether transmission is supported or not.
|
|
360
|
+
* @param {boolean} [dispersion=false] - Whether dispersion is supported or not.
|
|
361
361
|
*/
|
|
362
362
|
constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false ) {
|
|
363
363
|
|
|
@@ -366,7 +366,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
366
366
|
/**
|
|
367
367
|
* Whether clearcoat is supported or not.
|
|
368
368
|
*
|
|
369
|
-
* @type {
|
|
369
|
+
* @type {boolean}
|
|
370
370
|
* @default false
|
|
371
371
|
*/
|
|
372
372
|
this.clearcoat = clearcoat;
|
|
@@ -374,7 +374,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
374
374
|
/**
|
|
375
375
|
* Whether sheen is supported or not.
|
|
376
376
|
*
|
|
377
|
-
* @type {
|
|
377
|
+
* @type {boolean}
|
|
378
378
|
* @default false
|
|
379
379
|
*/
|
|
380
380
|
this.sheen = sheen;
|
|
@@ -382,7 +382,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
382
382
|
/**
|
|
383
383
|
* Whether iridescence is supported or not.
|
|
384
384
|
*
|
|
385
|
-
* @type {
|
|
385
|
+
* @type {boolean}
|
|
386
386
|
* @default false
|
|
387
387
|
*/
|
|
388
388
|
this.iridescence = iridescence;
|
|
@@ -390,7 +390,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
390
390
|
/**
|
|
391
391
|
* Whether anisotropy is supported or not.
|
|
392
392
|
*
|
|
393
|
-
* @type {
|
|
393
|
+
* @type {boolean}
|
|
394
394
|
* @default false
|
|
395
395
|
*/
|
|
396
396
|
this.anisotropy = anisotropy;
|
|
@@ -398,7 +398,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
398
398
|
/**
|
|
399
399
|
* Whether transmission is supported or not.
|
|
400
400
|
*
|
|
401
|
-
* @type {
|
|
401
|
+
* @type {boolean}
|
|
402
402
|
* @default false
|
|
403
403
|
*/
|
|
404
404
|
this.transmission = transmission;
|
|
@@ -406,7 +406,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
406
406
|
/**
|
|
407
407
|
* Whether dispersion is supported or not.
|
|
408
408
|
*
|
|
409
|
-
* @type {
|
|
409
|
+
* @type {boolean}
|
|
410
410
|
* @default false
|
|
411
411
|
*/
|
|
412
412
|
this.dispersion = dispersion;
|
|
@@ -414,7 +414,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
414
414
|
/**
|
|
415
415
|
* The clear coat radiance.
|
|
416
416
|
*
|
|
417
|
-
* @type {Node
|
|
417
|
+
* @type {?Node}
|
|
418
418
|
* @default null
|
|
419
419
|
*/
|
|
420
420
|
this.clearcoatRadiance = null;
|
|
@@ -422,7 +422,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
422
422
|
/**
|
|
423
423
|
* The clear coat specular direct.
|
|
424
424
|
*
|
|
425
|
-
* @type {Node
|
|
425
|
+
* @type {?Node}
|
|
426
426
|
* @default null
|
|
427
427
|
*/
|
|
428
428
|
this.clearcoatSpecularDirect = null;
|
|
@@ -430,7 +430,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
430
430
|
/**
|
|
431
431
|
* The clear coat specular indirect.
|
|
432
432
|
*
|
|
433
|
-
* @type {Node
|
|
433
|
+
* @type {?Node}
|
|
434
434
|
* @default null
|
|
435
435
|
*/
|
|
436
436
|
this.clearcoatSpecularIndirect = null;
|
|
@@ -438,7 +438,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
438
438
|
/**
|
|
439
439
|
* The sheen specular direct.
|
|
440
440
|
*
|
|
441
|
-
* @type {Node
|
|
441
|
+
* @type {?Node}
|
|
442
442
|
* @default null
|
|
443
443
|
*/
|
|
444
444
|
this.sheenSpecularDirect = null;
|
|
@@ -446,7 +446,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
446
446
|
/**
|
|
447
447
|
* The sheen specular indirect.
|
|
448
448
|
*
|
|
449
|
-
* @type {Node
|
|
449
|
+
* @type {?Node}
|
|
450
450
|
* @default null
|
|
451
451
|
*/
|
|
452
452
|
this.sheenSpecularIndirect = null;
|
|
@@ -454,7 +454,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
454
454
|
/**
|
|
455
455
|
* The iridescence Fresnel.
|
|
456
456
|
*
|
|
457
|
-
* @type {Node
|
|
457
|
+
* @type {?Node}
|
|
458
458
|
* @default null
|
|
459
459
|
*/
|
|
460
460
|
this.iridescenceFresnel = null;
|
|
@@ -462,7 +462,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
462
462
|
/**
|
|
463
463
|
* The iridescence F0.
|
|
464
464
|
*
|
|
465
|
-
* @type {Node
|
|
465
|
+
* @type {?Node}
|
|
466
466
|
* @default null
|
|
467
467
|
*/
|
|
468
468
|
this.iridescenceF0 = null;
|
|
@@ -473,9 +473,9 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
473
473
|
* Depending on what features are requested, the method prepares certain node variables
|
|
474
474
|
* which are later used for lighting computations.
|
|
475
475
|
*
|
|
476
|
-
* @param {
|
|
476
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
477
477
|
*/
|
|
478
|
-
start(
|
|
478
|
+
start( builder ) {
|
|
479
479
|
|
|
480
480
|
if ( this.clearcoat === true ) {
|
|
481
481
|
|
|
@@ -514,6 +514,8 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
514
514
|
const v = cameraPosition.sub( positionWorld ).normalize(); // TODO: Create Node for this, same issue in MaterialX
|
|
515
515
|
const n = transformedNormalWorld;
|
|
516
516
|
|
|
517
|
+
const context = builder.context;
|
|
518
|
+
|
|
517
519
|
context.backdrop = getIBLVolumeRefraction(
|
|
518
520
|
n,
|
|
519
521
|
v,
|
|
@@ -538,6 +540,8 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
538
540
|
|
|
539
541
|
}
|
|
540
542
|
|
|
543
|
+
super.start( builder );
|
|
544
|
+
|
|
541
545
|
}
|
|
542
546
|
|
|
543
547
|
// Fdez-Agüera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"
|
|
@@ -568,8 +572,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
568
572
|
/**
|
|
569
573
|
* Implements the direct light.
|
|
570
574
|
*
|
|
571
|
-
* @param {Object}
|
|
572
|
-
* @param {StackNode} stack - The current stack.
|
|
575
|
+
* @param {Object} lightData - The light data.
|
|
573
576
|
* @param {NodeBuilder} builder - The current node builder.
|
|
574
577
|
*/
|
|
575
578
|
direct( { lightDirection, lightColor, reflectedLight } ) {
|
|
@@ -603,7 +606,6 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
603
606
|
* rect area light nodes.
|
|
604
607
|
*
|
|
605
608
|
* @param {Object} input - The input data.
|
|
606
|
-
* @param {StackNode} stack - The current stack.
|
|
607
609
|
* @param {NodeBuilder} builder - The current node builder.
|
|
608
610
|
*/
|
|
609
611
|
directRectArea( { lightColor, lightPosition, halfWidth, halfHeight, reflectedLight, ltc_1, ltc_2 } ) {
|
|
@@ -641,26 +643,24 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
641
643
|
/**
|
|
642
644
|
* Implements the indirect lighting.
|
|
643
645
|
*
|
|
644
|
-
* @param {ContextNode} context - The current node context.
|
|
645
|
-
* @param {StackNode} stack - The current stack.
|
|
646
646
|
* @param {NodeBuilder} builder - The current node builder.
|
|
647
647
|
*/
|
|
648
|
-
indirect(
|
|
648
|
+
indirect( builder ) {
|
|
649
649
|
|
|
650
|
-
this.indirectDiffuse(
|
|
651
|
-
this.indirectSpecular(
|
|
652
|
-
this.ambientOcclusion(
|
|
650
|
+
this.indirectDiffuse( builder );
|
|
651
|
+
this.indirectSpecular( builder );
|
|
652
|
+
this.ambientOcclusion( builder );
|
|
653
653
|
|
|
654
654
|
}
|
|
655
655
|
|
|
656
656
|
/**
|
|
657
657
|
* Implements the indirect diffuse term.
|
|
658
658
|
*
|
|
659
|
-
* @param {ContextNode} input - The current node context.
|
|
660
|
-
* @param {StackNode} stack - The current stack.
|
|
661
659
|
* @param {NodeBuilder} builder - The current node builder.
|
|
662
660
|
*/
|
|
663
|
-
indirectDiffuse(
|
|
661
|
+
indirectDiffuse( builder ) {
|
|
662
|
+
|
|
663
|
+
const { irradiance, reflectedLight } = builder.context;
|
|
664
664
|
|
|
665
665
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
666
666
|
|
|
@@ -669,11 +669,11 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
669
669
|
/**
|
|
670
670
|
* Implements the indirect specular term.
|
|
671
671
|
*
|
|
672
|
-
* @param {ContextNode} input - The current node context.
|
|
673
|
-
* @param {StackNode} stack - The current stack.
|
|
674
672
|
* @param {NodeBuilder} builder - The current node builder.
|
|
675
673
|
*/
|
|
676
|
-
indirectSpecular(
|
|
674
|
+
indirectSpecular( builder ) {
|
|
675
|
+
|
|
676
|
+
const { radiance, iblIrradiance, reflectedLight } = builder.context;
|
|
677
677
|
|
|
678
678
|
if ( this.sheen === true ) {
|
|
679
679
|
|
|
@@ -725,11 +725,11 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
725
725
|
/**
|
|
726
726
|
* Implements the ambient occlusion term.
|
|
727
727
|
*
|
|
728
|
-
* @param {ContextNode} input - The current node context.
|
|
729
|
-
* @param {StackNode} stack - The current stack.
|
|
730
728
|
* @param {NodeBuilder} builder - The current node builder.
|
|
731
729
|
*/
|
|
732
|
-
ambientOcclusion(
|
|
730
|
+
ambientOcclusion( builder ) {
|
|
731
|
+
|
|
732
|
+
const { ambientOcclusion, reflectedLight } = builder.context;
|
|
733
733
|
|
|
734
734
|
const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
|
|
735
735
|
|
|
@@ -758,11 +758,9 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
758
758
|
/**
|
|
759
759
|
* Used for final lighting accumulations depending on the requested features.
|
|
760
760
|
*
|
|
761
|
-
* @param {ContextNode} context - The current node context.
|
|
762
|
-
* @param {StackNode} stack - The current stack.
|
|
763
761
|
* @param {NodeBuilder} builder - The current node builder.
|
|
764
762
|
*/
|
|
765
|
-
finish( context ) {
|
|
763
|
+
finish( { context } ) {
|
|
766
764
|
|
|
767
765
|
const { outgoingLight } = context;
|
|
768
766
|
|
|
@@ -30,18 +30,18 @@ class ShadowMaskModel extends LightingModel {
|
|
|
30
30
|
*
|
|
31
31
|
* @param {Object} input - The input data.
|
|
32
32
|
*/
|
|
33
|
-
direct( {
|
|
33
|
+
direct( { lightNode } ) {
|
|
34
34
|
|
|
35
|
-
this.shadowNode.mulAssign(
|
|
35
|
+
this.shadowNode.mulAssign( lightNode.shadowNode );
|
|
36
36
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Uses the shadow mask to produce the final color.
|
|
41
41
|
*
|
|
42
|
-
* @param {
|
|
42
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
43
43
|
*/
|
|
44
|
-
finish( context ) {
|
|
44
|
+
finish( { context } ) {
|
|
45
45
|
|
|
46
46
|
diffuseColor.a.mulAssign( this.shadowNode.oneMinus() );
|
|
47
47
|
|
|
@@ -39,11 +39,10 @@ class ToonLightingModel extends LightingModel {
|
|
|
39
39
|
* Implements the direct lighting. Instead of using a conventional smooth irradiance, the irradiance is
|
|
40
40
|
* reduced to a small number of discrete shades to create a comic-like, flat look.
|
|
41
41
|
*
|
|
42
|
-
* @param {Object}
|
|
43
|
-
* @param {StackNode} stack - The current stack.
|
|
42
|
+
* @param {Object} lightData - The light data.
|
|
44
43
|
* @param {NodeBuilder} builder - The current node builder.
|
|
45
44
|
*/
|
|
46
|
-
direct( { lightDirection, lightColor, reflectedLight },
|
|
45
|
+
direct( { lightDirection, lightColor, reflectedLight }, builder ) {
|
|
47
46
|
|
|
48
47
|
const irradiance = getGradientIrradiance( { normal: normalGeometry, lightDirection, builder } ).mul( lightColor );
|
|
49
48
|
|
|
@@ -54,11 +53,11 @@ class ToonLightingModel extends LightingModel {
|
|
|
54
53
|
/**
|
|
55
54
|
* Implements the indirect lighting.
|
|
56
55
|
*
|
|
57
|
-
* @param {ContextNode} input - The current node context.
|
|
58
|
-
* @param {StackNode} stack - The current stack.
|
|
59
56
|
* @param {NodeBuilder} builder - The current node builder.
|
|
60
57
|
*/
|
|
61
|
-
indirect(
|
|
58
|
+
indirect( builder ) {
|
|
59
|
+
|
|
60
|
+
const { ambientOcclusion, irradiance, reflectedLight } = builder.context;
|
|
62
61
|
|
|
63
62
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
64
63
|
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import LightingModel from '../core/LightingModel.js';
|
|
2
|
+
import { property } from '../core/PropertyNode.js';
|
|
3
|
+
import { float, If, uniform, vec3, vec4 } from '../tsl/TSLBase.js';
|
|
4
|
+
import { positionWorld } from '../accessors/Position.js';
|
|
5
|
+
import { cameraFar, cameraNear, cameraPosition, cameraViewMatrix } from '../accessors/Camera.js';
|
|
6
|
+
import { Loop } from '../utils/LoopNode.js';
|
|
7
|
+
import { linearDepth, viewZToPerspectiveDepth } from '../display/ViewportDepthNode.js';
|
|
8
|
+
import { modelRadius } from '../accessors/ModelNode.js';
|
|
9
|
+
import { LTC_Evaluate_Volume } from './BSDF/LTC.js';
|
|
10
|
+
|
|
11
|
+
const scatteringDensity = property( 'vec3' );
|
|
12
|
+
const linearDepthRay = property( 'vec3' );
|
|
13
|
+
const outgoingRayLight = property( 'vec3' );
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* VolumetricLightingModel class extends the LightingModel to implement volumetric lighting effects.
|
|
17
|
+
* This model calculates the scattering and transmittance of light through a volumetric medium.
|
|
18
|
+
* It dynamically adjusts the direction of the ray based on the camera and object positions.
|
|
19
|
+
* The model supports custom scattering and depth nodes to enhance the lighting effects.
|
|
20
|
+
*
|
|
21
|
+
* @augments LightingModel
|
|
22
|
+
*/
|
|
23
|
+
class VolumetricLightingModel extends LightingModel {
|
|
24
|
+
|
|
25
|
+
constructor() {
|
|
26
|
+
|
|
27
|
+
super();
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
start( builder ) {
|
|
32
|
+
|
|
33
|
+
const { material, context } = builder;
|
|
34
|
+
|
|
35
|
+
const startPos = property( 'vec3' );
|
|
36
|
+
const endPos = property( 'vec3' );
|
|
37
|
+
|
|
38
|
+
// This approach dynamically changes the direction of the ray,
|
|
39
|
+
// prioritizing the ray from the camera to the object if it is inside the mesh, and from the object to the camera if it is far away.
|
|
40
|
+
|
|
41
|
+
If( cameraPosition.sub( positionWorld ).length().greaterThan( modelRadius.mul( 2 ) ), () => {
|
|
42
|
+
|
|
43
|
+
startPos.assign( cameraPosition );
|
|
44
|
+
endPos.assign( positionWorld );
|
|
45
|
+
|
|
46
|
+
} ).Else( () => {
|
|
47
|
+
|
|
48
|
+
startPos.assign( positionWorld );
|
|
49
|
+
endPos.assign( cameraPosition );
|
|
50
|
+
|
|
51
|
+
} );
|
|
52
|
+
|
|
53
|
+
//
|
|
54
|
+
|
|
55
|
+
const viewVector = endPos.sub( startPos );
|
|
56
|
+
|
|
57
|
+
const steps = uniform( 'int' ).onRenderUpdate( ( { material } ) => material.steps );
|
|
58
|
+
const stepSize = viewVector.length().div( steps ).toVar();
|
|
59
|
+
|
|
60
|
+
const rayDir = viewVector.normalize().toVar(); // TODO: toVar() should be automatic here ( in loop )
|
|
61
|
+
|
|
62
|
+
const distTravelled = float( 0.0 ).toVar();
|
|
63
|
+
const transmittance = vec3( 1 ).toVar();
|
|
64
|
+
|
|
65
|
+
if ( material.offsetNode ) {
|
|
66
|
+
|
|
67
|
+
// reduce banding
|
|
68
|
+
|
|
69
|
+
distTravelled.addAssign( material.offsetNode.mul( stepSize ) );
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
Loop( steps, () => {
|
|
74
|
+
|
|
75
|
+
const positionRay = startPos.add( rayDir.mul( distTravelled ) );
|
|
76
|
+
const positionViewRay = cameraViewMatrix.mul( vec4( positionRay, 1 ) ).xyz;
|
|
77
|
+
|
|
78
|
+
if ( material.depthNode !== null ) {
|
|
79
|
+
|
|
80
|
+
linearDepthRay.assign( linearDepth( viewZToPerspectiveDepth( positionViewRay.z, cameraNear, cameraFar ) ) );
|
|
81
|
+
|
|
82
|
+
context.sceneDepthNode = linearDepth( material.depthNode ).toVar();
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
context.positionWorld = positionRay;
|
|
87
|
+
context.shadowPositionWorld = positionRay;
|
|
88
|
+
context.positionView = positionViewRay;
|
|
89
|
+
|
|
90
|
+
scatteringDensity.assign( 0 );
|
|
91
|
+
|
|
92
|
+
let scatteringNode;
|
|
93
|
+
|
|
94
|
+
if ( material.scatteringNode ) {
|
|
95
|
+
|
|
96
|
+
scatteringNode = material.scatteringNode( {
|
|
97
|
+
positionRay
|
|
98
|
+
} );
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
super.start( builder );
|
|
103
|
+
|
|
104
|
+
if ( scatteringNode ) {
|
|
105
|
+
|
|
106
|
+
scatteringDensity.mulAssign( scatteringNode );
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// beer's law
|
|
111
|
+
|
|
112
|
+
const falloff = scatteringDensity.mul( .01 ).negate().mul( stepSize ).exp();
|
|
113
|
+
transmittance.mulAssign( falloff );
|
|
114
|
+
|
|
115
|
+
// move along the ray
|
|
116
|
+
|
|
117
|
+
distTravelled.addAssign( stepSize );
|
|
118
|
+
|
|
119
|
+
} );
|
|
120
|
+
|
|
121
|
+
outgoingRayLight.addAssign( transmittance.saturate().oneMinus() );
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
scatteringLight( lightColor, builder ) {
|
|
126
|
+
|
|
127
|
+
const sceneDepthNode = builder.context.sceneDepthNode;
|
|
128
|
+
|
|
129
|
+
if ( sceneDepthNode ) {
|
|
130
|
+
|
|
131
|
+
If( sceneDepthNode.greaterThanEqual( linearDepthRay ), () => {
|
|
132
|
+
|
|
133
|
+
scatteringDensity.addAssign( lightColor );
|
|
134
|
+
|
|
135
|
+
} );
|
|
136
|
+
|
|
137
|
+
} else {
|
|
138
|
+
|
|
139
|
+
scatteringDensity.addAssign( lightColor );
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
direct( { lightNode, lightColor }, builder ) {
|
|
146
|
+
|
|
147
|
+
// Ignore lights with infinite distance
|
|
148
|
+
|
|
149
|
+
if ( lightNode.light.distance === undefined ) return;
|
|
150
|
+
|
|
151
|
+
// TODO: We need a viewportOpaque*() ( output, depth ) to fit with modern rendering approaches
|
|
152
|
+
|
|
153
|
+
const directLight = lightColor.xyz.toVar();
|
|
154
|
+
directLight.mulAssign( lightNode.shadowNode ); // it no should be necessary if used in the same render pass
|
|
155
|
+
|
|
156
|
+
this.scatteringLight( directLight, builder );
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
directRectArea( { lightColor, lightPosition, halfWidth, halfHeight }, builder ) {
|
|
161
|
+
|
|
162
|
+
const p0 = lightPosition.add( halfWidth ).sub( halfHeight ); // counterclockwise; light shines in local neg z direction
|
|
163
|
+
const p1 = lightPosition.sub( halfWidth ).sub( halfHeight );
|
|
164
|
+
const p2 = lightPosition.sub( halfWidth ).add( halfHeight );
|
|
165
|
+
const p3 = lightPosition.add( halfWidth ).add( halfHeight );
|
|
166
|
+
|
|
167
|
+
const P = builder.context.positionView;
|
|
168
|
+
|
|
169
|
+
const directLight = lightColor.xyz.mul( LTC_Evaluate_Volume( { P, p0, p1, p2, p3 } ) ).pow( 1.5 );
|
|
170
|
+
|
|
171
|
+
this.scatteringLight( directLight, builder );
|
|
172
|
+
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
finish( builder ) {
|
|
176
|
+
|
|
177
|
+
builder.context.outgoingLight.assign( outgoingRayLight );
|
|
178
|
+
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export default VolumetricLightingModel;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { positionWorld } from '../../accessors/Position.js';
|
|
2
2
|
import { float, Fn, min, normalize, sub, vec3 } from '../../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
-
/** @module getParallaxCorrectNormal **/
|
|
5
|
-
|
|
6
4
|
/**
|
|
7
5
|
* This computes a parallax corrected normal which is used for box-projected cube mapping (BPCEM).
|
|
8
6
|
*
|
|
@@ -12,6 +10,8 @@ import { float, Fn, min, normalize, sub, vec3 } from '../../tsl/TSLBase.js';
|
|
|
12
10
|
* const uvNode = getParallaxCorrectNormal( reflectVector, vec3( 200, 100, 100 ), vec3( 0, - 50, 0 ) );
|
|
13
11
|
* material.envNode = pmremTexture( renderTarget.texture, uvNode );
|
|
14
12
|
* ```
|
|
13
|
+
*
|
|
14
|
+
* @tsl
|
|
15
15
|
* @function
|
|
16
16
|
* @param {Node<vec3>} normal - The normal to correct.
|
|
17
17
|
* @param {Node<vec3>} cubeSize - The cube size should reflect the size of the environment (BPCEM is usually applied in closed environments like rooms).
|
|
@@ -20,16 +20,16 @@ import { float, Fn, min, normalize, sub, vec3 } from '../../tsl/TSLBase.js';
|
|
|
20
20
|
*/
|
|
21
21
|
const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos ] ) => {
|
|
22
22
|
|
|
23
|
-
const nDir = normalize( normal ).toVar(
|
|
24
|
-
const rbmax = sub( float( 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar(
|
|
25
|
-
const rbmin = sub( float( - 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar(
|
|
26
|
-
const rbminmax = vec3().toVar(
|
|
23
|
+
const nDir = normalize( normal ).toVar();
|
|
24
|
+
const rbmax = sub( float( 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar();
|
|
25
|
+
const rbmin = sub( float( - 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar();
|
|
26
|
+
const rbminmax = vec3().toVar();
|
|
27
27
|
rbminmax.x = nDir.x.greaterThan( float( 0 ) ).select( rbmax.x, rbmin.x );
|
|
28
28
|
rbminmax.y = nDir.y.greaterThan( float( 0 ) ).select( rbmax.y, rbmin.y );
|
|
29
29
|
rbminmax.z = nDir.z.greaterThan( float( 0 ) ).select( rbmax.z, rbmin.z );
|
|
30
30
|
|
|
31
|
-
const correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z ).toVar(
|
|
32
|
-
const boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar(
|
|
31
|
+
const correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z ).toVar();
|
|
32
|
+
const boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar();
|
|
33
33
|
return boxIntersection.sub( cubePos );
|
|
34
34
|
|
|
35
35
|
} );
|
|
@@ -9,8 +9,6 @@ import { Vector4 } from '../../math/Vector4.js';
|
|
|
9
9
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
10
10
|
import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
|
|
11
11
|
|
|
12
|
-
/** @module RangeNode **/
|
|
13
|
-
|
|
14
12
|
let min = null;
|
|
15
13
|
let max = null;
|
|
16
14
|
|
|
@@ -65,7 +63,7 @@ class RangeNode extends Node {
|
|
|
65
63
|
* Returns the vector length which is computed based on the range definition.
|
|
66
64
|
*
|
|
67
65
|
* @param {NodeBuilder} builder - The current node builder.
|
|
68
|
-
* @return {
|
|
66
|
+
* @return {number} The vector length.
|
|
69
67
|
*/
|
|
70
68
|
getVectorLength( builder ) {
|
|
71
69
|
|
|
@@ -80,7 +78,7 @@ class RangeNode extends Node {
|
|
|
80
78
|
* This method is overwritten since the node type is inferred from range definition.
|
|
81
79
|
*
|
|
82
80
|
* @param {NodeBuilder} builder - The current node builder.
|
|
83
|
-
* @return {
|
|
81
|
+
* @return {string} The node type.
|
|
84
82
|
*/
|
|
85
83
|
getNodeType( builder ) {
|
|
86
84
|
|
|
@@ -165,9 +163,10 @@ export default RangeNode;
|
|
|
165
163
|
/**
|
|
166
164
|
* TSL function for creating a range node.
|
|
167
165
|
*
|
|
166
|
+
* @tsl
|
|
168
167
|
* @function
|
|
169
168
|
* @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
|
|
170
169
|
* @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
|
|
171
170
|
* @returns {RangeNode}
|
|
172
171
|
*/
|
|
173
|
-
export const range = /*@__PURE__*/ nodeProxy( RangeNode );
|
|
172
|
+
export const range = /*@__PURE__*/ nodeProxy( RangeNode ).setParameterLength( 2 );
|