super-three 0.181.0 → 0.185.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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +4 -19
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -38,15 +38,19 @@ class VolumetricLightingModel extends LightingModel {
|
|
|
38
38
|
// This approach dynamically changes the direction of the ray,
|
|
39
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
40
|
|
|
41
|
+
const isFrontToBack = property( 'bool' );
|
|
42
|
+
|
|
41
43
|
If( cameraPosition.sub( positionWorld ).length().greaterThan( modelRadius.mul( 2 ) ), () => {
|
|
42
44
|
|
|
43
45
|
startPos.assign( cameraPosition );
|
|
44
46
|
endPos.assign( positionWorld );
|
|
47
|
+
isFrontToBack.assign( true );
|
|
45
48
|
|
|
46
49
|
} ).Else( () => {
|
|
47
50
|
|
|
48
51
|
startPos.assign( positionWorld );
|
|
49
52
|
endPos.assign( cameraPosition );
|
|
53
|
+
isFrontToBack.assign( false );
|
|
50
54
|
|
|
51
55
|
} );
|
|
52
56
|
|
|
@@ -90,12 +94,17 @@ class VolumetricLightingModel extends LightingModel {
|
|
|
90
94
|
scatteringDensity.assign( 0 );
|
|
91
95
|
|
|
92
96
|
let scatteringNode;
|
|
97
|
+
let scatteringEmissiveNode;
|
|
93
98
|
|
|
94
99
|
if ( material.scatteringNode ) {
|
|
95
100
|
|
|
96
|
-
scatteringNode = material.scatteringNode( {
|
|
97
|
-
|
|
98
|
-
|
|
101
|
+
scatteringNode = material.scatteringNode( { positionRay } );
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if ( material.scatteringEmissiveNode ) {
|
|
106
|
+
|
|
107
|
+
scatteringEmissiveNode = material.scatteringEmissiveNode( { positionRay } );
|
|
99
108
|
|
|
100
109
|
}
|
|
101
110
|
|
|
@@ -107,9 +116,28 @@ class VolumetricLightingModel extends LightingModel {
|
|
|
107
116
|
|
|
108
117
|
}
|
|
109
118
|
|
|
119
|
+
const stepLight = scatteringDensity.mul( 0.01 ).toVar();
|
|
120
|
+
|
|
121
|
+
if ( scatteringEmissiveNode ) {
|
|
122
|
+
|
|
123
|
+
stepLight.addAssign( scatteringEmissiveNode.mul( 0.01 ) );
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
|
|
110
127
|
// beer's law
|
|
111
128
|
|
|
112
129
|
const falloff = scatteringDensity.mul( .01 ).negate().mul( stepSize ).exp();
|
|
130
|
+
|
|
131
|
+
If( isFrontToBack, () => {
|
|
132
|
+
|
|
133
|
+
outgoingRayLight.addAssign( stepLight.mul( transmittance ).mul( stepSize ) );
|
|
134
|
+
|
|
135
|
+
} ).Else( () => {
|
|
136
|
+
|
|
137
|
+
outgoingRayLight.assign( outgoingRayLight.mul( falloff ).add( stepLight.mul( stepSize ) ) );
|
|
138
|
+
|
|
139
|
+
} );
|
|
140
|
+
|
|
113
141
|
transmittance.mulAssign( falloff );
|
|
114
142
|
|
|
115
143
|
// move along the ray
|
|
@@ -118,7 +146,7 @@ class VolumetricLightingModel extends LightingModel {
|
|
|
118
146
|
|
|
119
147
|
} );
|
|
120
148
|
|
|
121
|
-
|
|
149
|
+
|
|
122
150
|
|
|
123
151
|
}
|
|
124
152
|
|
|
@@ -144,14 +172,19 @@ class VolumetricLightingModel extends LightingModel {
|
|
|
144
172
|
|
|
145
173
|
direct( { lightNode, lightColor }, builder ) {
|
|
146
174
|
|
|
147
|
-
// Ignore lights with infinite distance
|
|
175
|
+
// Ignore non-analytical lights and lights with infinite distance
|
|
148
176
|
|
|
149
|
-
if ( lightNode.light.distance === undefined ) return;
|
|
177
|
+
if ( lightNode.isAnalyticLightNode !== true || lightNode.light.distance === undefined ) return;
|
|
150
178
|
|
|
151
179
|
// TODO: We need a viewportOpaque*() ( output, depth ) to fit with modern rendering approaches
|
|
152
180
|
|
|
153
181
|
const directLight = lightColor.xyz.toVar();
|
|
154
|
-
|
|
182
|
+
|
|
183
|
+
if ( lightNode.shadowNode !== null ) {
|
|
184
|
+
|
|
185
|
+
directLight.mulAssign( lightNode.shadowNode ); // it no should be necessary if used in the same render pass
|
|
186
|
+
|
|
187
|
+
}
|
|
155
188
|
|
|
156
189
|
this.scatteringLight( directLight, builder );
|
|
157
190
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
+
import NodeError from '../core/NodeError.js';
|
|
2
3
|
import { getValueType } from '../core/NodeUtils.js';
|
|
3
4
|
import { buffer } from '../accessors/BufferNode.js';
|
|
4
5
|
import { instancedBufferAttribute } from '../accessors/BufferAttributeNode.js';
|
|
@@ -83,7 +84,7 @@ class RangeNode extends Node {
|
|
|
83
84
|
* @param {NodeBuilder} builder - The current node builder.
|
|
84
85
|
* @return {string} The node type.
|
|
85
86
|
*/
|
|
86
|
-
|
|
87
|
+
generateNodeType( builder ) {
|
|
87
88
|
|
|
88
89
|
return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
|
|
89
90
|
|
|
@@ -111,7 +112,7 @@ class RangeNode extends Node {
|
|
|
111
112
|
|
|
112
113
|
if ( output === null ) {
|
|
113
114
|
|
|
114
|
-
throw new
|
|
115
|
+
throw new NodeError( 'THREE.TSL: No "ConstNode" found in node graph.', this.stackTrace );
|
|
115
116
|
|
|
116
117
|
}
|
|
117
118
|
|
|
@@ -167,8 +168,9 @@ class RangeNode extends Node {
|
|
|
167
168
|
}
|
|
168
169
|
|
|
169
170
|
const nodeType = this.getNodeType( builder );
|
|
171
|
+
const uniformBufferSize = object.count * 4 * 4; // count * 4 components * 4 bytes (float)
|
|
170
172
|
|
|
171
|
-
if (
|
|
173
|
+
if ( uniformBufferSize <= builder.getUniformBufferLimit() ) {
|
|
172
174
|
|
|
173
175
|
output = buffer( array, 'vec4', object.count ).element( instanceIndex ).convert( nodeType );
|
|
174
176
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
import { warn } from '../../utils.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -56,7 +55,7 @@ class ComputeBuiltinNode extends Node {
|
|
|
56
55
|
* @param {NodeBuilder} builder - The current node builder.
|
|
57
56
|
* @return {string} The node type.
|
|
58
57
|
*/
|
|
59
|
-
|
|
58
|
+
generateNodeType( /*builder*/ ) {
|
|
60
59
|
|
|
61
60
|
return this.nodeType;
|
|
62
61
|
|
|
@@ -149,7 +148,7 @@ export default ComputeBuiltinNode;
|
|
|
149
148
|
* @param {string} nodeType - The node type.
|
|
150
149
|
* @returns {ComputeBuiltinNode}
|
|
151
150
|
*/
|
|
152
|
-
const computeBuiltin = ( name, nodeType ) =>
|
|
151
|
+
const computeBuiltin = ( name, nodeType ) => new ComputeBuiltinNode( name, nodeType );
|
|
153
152
|
|
|
154
153
|
/**
|
|
155
154
|
* Represents the number of workgroups dispatched by the compute shader.
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
+
import { instanceIndex } from '../core/IndexNode.js';
|
|
3
|
+
import StackTrace from '../core/StackTrace.js';
|
|
4
|
+
import { uniform } from '../core/UniformNode.js';
|
|
2
5
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
6
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
4
7
|
import { warn, error } from '../../utils.js';
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
|
-
*
|
|
10
|
+
* Represents a compute shader node.
|
|
8
11
|
*
|
|
9
12
|
* @augments Node
|
|
10
13
|
*/
|
|
@@ -19,8 +22,8 @@ class ComputeNode extends Node {
|
|
|
19
22
|
/**
|
|
20
23
|
* Constructs a new compute node.
|
|
21
24
|
*
|
|
22
|
-
* @param {Node} computeNode -
|
|
23
|
-
* @param {Array<number>} workgroupSize -
|
|
25
|
+
* @param {Node} computeNode - The node that defines the compute shader logic.
|
|
26
|
+
* @param {Array<number>} workgroupSize - An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
|
|
24
27
|
*/
|
|
25
28
|
constructor( computeNode, workgroupSize ) {
|
|
26
29
|
|
|
@@ -36,15 +39,14 @@ class ComputeNode extends Node {
|
|
|
36
39
|
this.isComputeNode = true;
|
|
37
40
|
|
|
38
41
|
/**
|
|
39
|
-
*
|
|
42
|
+
* The node that defines the compute shader logic.
|
|
40
43
|
*
|
|
41
44
|
* @type {Node}
|
|
42
45
|
*/
|
|
43
46
|
this.computeNode = computeNode;
|
|
44
47
|
|
|
45
|
-
|
|
46
48
|
/**
|
|
47
|
-
*
|
|
49
|
+
* An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
|
|
48
50
|
*
|
|
49
51
|
* @type {Array<number>}
|
|
50
52
|
* @default [ 64 ]
|
|
@@ -52,14 +54,23 @@ class ComputeNode extends Node {
|
|
|
52
54
|
this.workgroupSize = workgroupSize;
|
|
53
55
|
|
|
54
56
|
/**
|
|
55
|
-
*
|
|
57
|
+
* The total number of threads (invocations) to execute. If it is a number, it will be used
|
|
58
|
+
* to automatically generate bounds checking against `instanceIndex`.
|
|
56
59
|
*
|
|
57
60
|
* @type {number|Array<number>}
|
|
58
61
|
*/
|
|
59
62
|
this.count = null;
|
|
60
63
|
|
|
61
64
|
/**
|
|
62
|
-
*
|
|
65
|
+
* The dispatch size for workgroups on X, Y, and Z axes.
|
|
66
|
+
* Used directly if `count` is not provided.
|
|
67
|
+
*
|
|
68
|
+
* @type {number|Array<number>}
|
|
69
|
+
*/
|
|
70
|
+
this.dispatchSize = null;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The version of the node.
|
|
63
74
|
*
|
|
64
75
|
* @type {number}
|
|
65
76
|
*/
|
|
@@ -83,36 +94,19 @@ class ComputeNode extends Node {
|
|
|
83
94
|
this.updateBeforeType = NodeUpdateType.OBJECT;
|
|
84
95
|
|
|
85
96
|
/**
|
|
86
|
-
*
|
|
97
|
+
* A callback executed when the compute node finishes initialization.
|
|
87
98
|
*
|
|
88
99
|
* @type {?Function}
|
|
89
100
|
*/
|
|
90
101
|
this.onInitFunction = null;
|
|
91
102
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
*/
|
|
100
|
-
setCount( count ) {
|
|
101
|
-
|
|
102
|
-
this.count = count;
|
|
103
|
-
|
|
104
|
-
return this;
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* TODO
|
|
110
|
-
*
|
|
111
|
-
* @return {number|Array<number>}
|
|
112
|
-
*/
|
|
113
|
-
getCount() {
|
|
114
|
-
|
|
115
|
-
return this.count;
|
|
103
|
+
/**
|
|
104
|
+
* A uniform node holding the dispatch count for bounds checking.
|
|
105
|
+
* Created automatically when `count` is a number.
|
|
106
|
+
*
|
|
107
|
+
* @type {?UniformNode}
|
|
108
|
+
*/
|
|
109
|
+
this.countNode = null;
|
|
116
110
|
|
|
117
111
|
}
|
|
118
112
|
|
|
@@ -148,16 +142,16 @@ class ComputeNode extends Node {
|
|
|
148
142
|
*/
|
|
149
143
|
label( name ) {
|
|
150
144
|
|
|
151
|
-
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
145
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
|
|
152
146
|
|
|
153
147
|
return this.setName( name );
|
|
154
148
|
|
|
155
149
|
}
|
|
156
150
|
|
|
157
151
|
/**
|
|
158
|
-
*
|
|
152
|
+
* Sets the callback to run during initialization.
|
|
159
153
|
*
|
|
160
|
-
* @param {Function} callback -
|
|
154
|
+
* @param {Function} callback - The callback function.
|
|
161
155
|
* @return {ComputeNode} A reference to this node.
|
|
162
156
|
*/
|
|
163
157
|
onInit( callback ) {
|
|
@@ -181,6 +175,12 @@ class ComputeNode extends Node {
|
|
|
181
175
|
|
|
182
176
|
setup( builder ) {
|
|
183
177
|
|
|
178
|
+
if ( this.count !== null && this.countNode === null ) {
|
|
179
|
+
|
|
180
|
+
this.countNode = uniform( this.count, 'uint' ).onObjectUpdate( () => this.count );
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
|
|
184
184
|
const result = this.computeNode.build( builder );
|
|
185
185
|
|
|
186
186
|
if ( result ) {
|
|
@@ -210,6 +210,16 @@ class ComputeNode extends Node {
|
|
|
210
210
|
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
+
if ( this.count !== null && builder.allowEarlyReturns === true ) {
|
|
214
|
+
|
|
215
|
+
const countSnippet = this.countNode.build( builder, 'uint' );
|
|
216
|
+
const indexSnippet = instanceIndex.build( builder, 'uint' );
|
|
217
|
+
|
|
218
|
+
builder.flow.code = `${ builder.tab }if ( ${ indexSnippet } >= ${ countSnippet } ) { return; }\n\n${ builder.flow.code }`;
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
|
|
213
223
|
} else {
|
|
214
224
|
|
|
215
225
|
const properties = builder.getNodeProperties( this );
|
|
@@ -234,15 +244,15 @@ export default ComputeNode;
|
|
|
234
244
|
*
|
|
235
245
|
* @tsl
|
|
236
246
|
* @function
|
|
237
|
-
* @param {Node} node -
|
|
238
|
-
* @param {Array<number>} [workgroupSize=[64]] -
|
|
239
|
-
* @returns {
|
|
247
|
+
* @param {Node} node - The TSL logic for the compute shader.
|
|
248
|
+
* @param {Array<number>} [workgroupSize=[64]] - The workgroup size.
|
|
249
|
+
* @returns {ComputeNode}
|
|
240
250
|
*/
|
|
241
251
|
export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
242
252
|
|
|
243
253
|
if ( workgroupSize.length === 0 || workgroupSize.length > 3 ) {
|
|
244
254
|
|
|
245
|
-
error( 'TSL: compute() workgroupSize must have 1, 2, or 3 elements' );
|
|
255
|
+
error( 'TSL: compute() workgroupSize must have 1, 2, or 3 elements', new StackTrace() );
|
|
246
256
|
|
|
247
257
|
}
|
|
248
258
|
|
|
@@ -252,7 +262,7 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
252
262
|
|
|
253
263
|
if ( typeof val !== 'number' || val <= 0 || ! Number.isInteger( val ) ) {
|
|
254
264
|
|
|
255
|
-
error( `TSL: compute() workgroupSize element at index [ ${ i } ] must be a positive integer
|
|
265
|
+
error( `TSL: compute() workgroupSize element at index [ ${ i } ] must be a positive integer`, new StackTrace() );
|
|
256
266
|
|
|
257
267
|
}
|
|
258
268
|
|
|
@@ -264,7 +274,7 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
264
274
|
|
|
265
275
|
//
|
|
266
276
|
|
|
267
|
-
return
|
|
277
|
+
return new ComputeNode( nodeObject( node ), workgroupSize );
|
|
268
278
|
|
|
269
279
|
};
|
|
270
280
|
|
|
@@ -273,12 +283,28 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
273
283
|
*
|
|
274
284
|
* @tsl
|
|
275
285
|
* @function
|
|
276
|
-
* @param {Node} node -
|
|
277
|
-
* @param {number|Array<number>} count -
|
|
278
|
-
* @param {Array<number>} [workgroupSize=[64]] -
|
|
279
|
-
* @returns {
|
|
280
|
-
|
|
281
|
-
export const compute = ( node, count, workgroupSize ) =>
|
|
286
|
+
* @param {Node} node - The TSL logic for the compute shader.
|
|
287
|
+
* @param {number|Array<number>} count - The compute count or dispatch size.
|
|
288
|
+
* @param {Array<number>} [workgroupSize=[64]] - The workgroup size.
|
|
289
|
+
* @returns {ComputeNode}
|
|
290
|
+
, */
|
|
291
|
+
export const compute = ( node, count, workgroupSize ) => {
|
|
292
|
+
|
|
293
|
+
const computeNode = computeKernel( node, workgroupSize );
|
|
294
|
+
|
|
295
|
+
if ( typeof count === 'number' ) {
|
|
296
|
+
|
|
297
|
+
computeNode.count = count;
|
|
298
|
+
|
|
299
|
+
} else {
|
|
300
|
+
|
|
301
|
+
computeNode.dispatchSize = count;
|
|
302
|
+
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
return computeNode;
|
|
306
|
+
|
|
307
|
+
};
|
|
282
308
|
|
|
283
309
|
addMethodChaining( 'compute', compute );
|
|
284
310
|
addMethodChaining( 'computeKernel', computeKernel );
|
|
@@ -35,7 +35,7 @@ class SubgroupFunctionNode extends TempNode {
|
|
|
35
35
|
/**
|
|
36
36
|
* The subgroup/wave intrinsic method to construct.
|
|
37
37
|
*
|
|
38
|
-
* @type {
|
|
38
|
+
* @type {string}
|
|
39
39
|
*/
|
|
40
40
|
this.method = method;
|
|
41
41
|
|
|
@@ -75,7 +75,7 @@ class SubgroupFunctionNode extends TempNode {
|
|
|
75
75
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
generateNodeType( builder ) {
|
|
79
79
|
|
|
80
80
|
const method = this.method;
|
|
81
81
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
2
|
import Node from '../core/Node.js';
|
|
4
3
|
import { warn } from '../../utils.js';
|
|
4
|
+
import StackTrace from '../core/StackTrace.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Represents an element of a 'workgroup' scoped buffer.
|
|
@@ -35,7 +35,7 @@ class WorkgroupInfoElementNode extends ArrayElementNode {
|
|
|
35
35
|
|
|
36
36
|
let snippet;
|
|
37
37
|
|
|
38
|
-
const isAssignContext = builder.
|
|
38
|
+
const isAssignContext = builder.isContextAssign();
|
|
39
39
|
snippet = super.generate( builder );
|
|
40
40
|
|
|
41
41
|
if ( isAssignContext !== true ) {
|
|
@@ -150,7 +150,7 @@ class WorkgroupInfoNode extends Node {
|
|
|
150
150
|
*/
|
|
151
151
|
label( name ) {
|
|
152
152
|
|
|
153
|
-
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
153
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
|
|
154
154
|
|
|
155
155
|
return this.setName( name );
|
|
156
156
|
|
|
@@ -203,7 +203,7 @@ class WorkgroupInfoNode extends Node {
|
|
|
203
203
|
*/
|
|
204
204
|
element( indexNode ) {
|
|
205
205
|
|
|
206
|
-
return
|
|
206
|
+
return new WorkgroupInfoElementNode( this, indexNode );
|
|
207
207
|
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -229,6 +229,6 @@ export default WorkgroupInfoNode;
|
|
|
229
229
|
* @param {number} [count=0] - The number of elements in the buffer.
|
|
230
230
|
* @returns {WorkgroupInfoNode}
|
|
231
231
|
*/
|
|
232
|
-
export const workgroupArray = ( type, count ) =>
|
|
232
|
+
export const workgroupArray = ( type, count ) => new WorkgroupInfoNode( 'Workgroup', type, count );
|
|
233
233
|
|
|
234
234
|
|
|
@@ -96,6 +96,53 @@ class AnalyticLightNode extends LightingNode {
|
|
|
96
96
|
*/
|
|
97
97
|
this.updateType = NodeUpdateType.FRAME;
|
|
98
98
|
|
|
99
|
+
if ( light && light.shadow ) {
|
|
100
|
+
|
|
101
|
+
this._shadowDisposeListener = () => {
|
|
102
|
+
|
|
103
|
+
this.disposeShadow();
|
|
104
|
+
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
light.addEventListener( 'dispose', this._shadowDisposeListener );
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
dispose() {
|
|
114
|
+
|
|
115
|
+
if ( this._shadowDisposeListener ) {
|
|
116
|
+
|
|
117
|
+
this.light.removeEventListener( 'dispose', this._shadowDisposeListener );
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
super.dispose();
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Frees internal resources related to shadows.
|
|
127
|
+
*/
|
|
128
|
+
disposeShadow() {
|
|
129
|
+
|
|
130
|
+
if ( this.shadowNode !== null ) {
|
|
131
|
+
|
|
132
|
+
this.shadowNode.dispose();
|
|
133
|
+
this.shadowNode = null;
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
this.shadowColorNode = null;
|
|
138
|
+
|
|
139
|
+
if ( this.baseColorNode !== null ) {
|
|
140
|
+
|
|
141
|
+
this.colorNode = this.baseColorNode;
|
|
142
|
+
this.baseColorNode = null;
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
99
146
|
}
|
|
100
147
|
|
|
101
148
|
getHash() {
|
|
@@ -188,6 +235,12 @@ class AnalyticLightNode extends LightingNode {
|
|
|
188
235
|
|
|
189
236
|
//
|
|
190
237
|
|
|
238
|
+
if ( builder.context.getShadow ) {
|
|
239
|
+
|
|
240
|
+
shadowColorNode = builder.context.getShadow( this, builder );
|
|
241
|
+
|
|
242
|
+
}
|
|
243
|
+
|
|
191
244
|
this.colorNode = shadowColorNode;
|
|
192
245
|
|
|
193
246
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import LightingNode from './LightingNode.js';
|
|
2
2
|
import { isolate } from '../core/IsolateNode.js';
|
|
3
3
|
import { roughness, clearcoatRoughness } from '../core/PropertyNode.js';
|
|
4
|
-
import {
|
|
4
|
+
import { cameraWorldMatrix } from '../accessors/Camera.js';
|
|
5
5
|
import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
|
|
6
6
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
7
7
|
import { float, pow4 } from '../tsl/TSLBase.js';
|
|
@@ -9,7 +9,7 @@ import { bentNormalView } from '../accessors/AccessorsUtils.js';
|
|
|
9
9
|
import { pmremTexture } from '../pmrem/PMREMNode.js';
|
|
10
10
|
import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
|
|
11
11
|
|
|
12
|
-
const
|
|
12
|
+
const _rendererCache = new WeakMap();
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Represents a physical model for Image-based lighting (IBL). The environment
|
|
@@ -55,13 +55,15 @@ class EnvironmentNode extends LightingNode {
|
|
|
55
55
|
|
|
56
56
|
const value = ( envNode.isTextureNode ) ? envNode.value : material[ envNode.property ];
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
const cache = this._getPMREMNodeCache( builder.renderer );
|
|
59
|
+
|
|
60
|
+
let cacheEnvNode = cache.get( value );
|
|
59
61
|
|
|
60
62
|
if ( cacheEnvNode === undefined ) {
|
|
61
63
|
|
|
62
64
|
cacheEnvNode = pmremTexture( value );
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
cache.set( value, cacheEnvNode );
|
|
65
67
|
|
|
66
68
|
}
|
|
67
69
|
|
|
@@ -101,6 +103,29 @@ class EnvironmentNode extends LightingNode {
|
|
|
101
103
|
|
|
102
104
|
}
|
|
103
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Returns the PMREM node cache of the current renderer.
|
|
108
|
+
*
|
|
109
|
+
* @private
|
|
110
|
+
* @param {Renderer} renderer - The current renderer.
|
|
111
|
+
* @return {WeakMap} The node cache.
|
|
112
|
+
*/
|
|
113
|
+
_getPMREMNodeCache( renderer ) {
|
|
114
|
+
|
|
115
|
+
let pmremCache = _rendererCache.get( renderer );
|
|
116
|
+
|
|
117
|
+
if ( pmremCache === undefined ) {
|
|
118
|
+
|
|
119
|
+
pmremCache = new WeakMap();
|
|
120
|
+
|
|
121
|
+
_rendererCache.set( renderer, pmremCache );
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return pmremCache;
|
|
126
|
+
|
|
127
|
+
}
|
|
128
|
+
|
|
104
129
|
}
|
|
105
130
|
|
|
106
131
|
export default EnvironmentNode;
|
|
@@ -119,7 +144,7 @@ const createRadianceContext = ( roughnessNode, normalViewNode ) => {
|
|
|
119
144
|
// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.
|
|
120
145
|
reflectVec = pow4( roughnessNode ).mix( reflectVec, normalViewNode ).normalize();
|
|
121
146
|
|
|
122
|
-
reflectVec = reflectVec.transformDirection(
|
|
147
|
+
reflectVec = reflectVec.transformDirection( cameraWorldMatrix );
|
|
123
148
|
|
|
124
149
|
}
|
|
125
150
|
|
|
@@ -15,6 +15,25 @@ class IESSpotLightNode extends SpotLightNode {
|
|
|
15
15
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new IES spot light node.
|
|
20
|
+
*
|
|
21
|
+
* @param {?SpotLight} [light=null] - The spot light source.
|
|
22
|
+
*/
|
|
23
|
+
constructor( light = null ) {
|
|
24
|
+
|
|
25
|
+
super( light );
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The texture node representing the IES texture.
|
|
29
|
+
*
|
|
30
|
+
* @type {?TextureNode}
|
|
31
|
+
* @default null
|
|
32
|
+
*/
|
|
33
|
+
this._iesTextureNode = null;
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
18
37
|
/**
|
|
19
38
|
* Overwrites the default implementation to compute an IES conform spot attenuation.
|
|
20
39
|
*
|
|
@@ -32,11 +51,13 @@ class IESSpotLightNode extends SpotLightNode {
|
|
|
32
51
|
|
|
33
52
|
const angle = angleCosine.acos().mul( 1.0 / Math.PI );
|
|
34
53
|
|
|
35
|
-
|
|
54
|
+
this._iesTextureNode = texture( iesMap, vec2( angle, 0 ), 0 );
|
|
55
|
+
|
|
56
|
+
spotAttenuation = this._iesTextureNode.r;
|
|
36
57
|
|
|
37
58
|
} else {
|
|
38
59
|
|
|
39
|
-
spotAttenuation = super.getSpotAttenuation( angleCosine );
|
|
60
|
+
spotAttenuation = super.getSpotAttenuation( builder, angleCosine );
|
|
40
61
|
|
|
41
62
|
}
|
|
42
63
|
|
|
@@ -44,6 +65,23 @@ class IESSpotLightNode extends SpotLightNode {
|
|
|
44
65
|
|
|
45
66
|
}
|
|
46
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Overwritten to update the IES spot light texture.
|
|
70
|
+
*
|
|
71
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
72
|
+
*/
|
|
73
|
+
update( frame ) {
|
|
74
|
+
|
|
75
|
+
super.update( frame );
|
|
76
|
+
|
|
77
|
+
if ( this._iesTextureNode !== null && this.light.iesMap ) {
|
|
78
|
+
|
|
79
|
+
this._iesTextureNode.value = this.light.iesMap;
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
47
85
|
}
|
|
48
86
|
|
|
49
87
|
export default IESSpotLightNode;
|