super-three 0.170.1 → 0.172.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/README.md +1 -1
- package/build/three.cjs +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -1
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +49 -0
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +24 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +93 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +40 -0
- package/src/nodes/utils/Timer.js +19 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +189 -0
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +327 -60
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -7,6 +7,11 @@ import { renderGroup } from '../core/UniformGroupNode.js';
|
|
|
7
7
|
|
|
8
8
|
import { Color } from '../../math/Color.js';
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Module for representing hemisphere lights as nodes.
|
|
12
|
+
*
|
|
13
|
+
* @augments AnalyticLightNode
|
|
14
|
+
*/
|
|
10
15
|
class HemisphereLightNode extends AnalyticLightNode {
|
|
11
16
|
|
|
12
17
|
static get type() {
|
|
@@ -15,17 +20,43 @@ class HemisphereLightNode extends AnalyticLightNode {
|
|
|
15
20
|
|
|
16
21
|
}
|
|
17
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new hemisphere light node.
|
|
25
|
+
*
|
|
26
|
+
* @param {HemisphereLight?} [light=null] - The hemisphere light source.
|
|
27
|
+
*/
|
|
18
28
|
constructor( light = null ) {
|
|
19
29
|
|
|
20
30
|
super( light );
|
|
21
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Uniform node representing the light's position.
|
|
34
|
+
*
|
|
35
|
+
* @type {UniformNode<vec3>}
|
|
36
|
+
*/
|
|
22
37
|
this.lightPositionNode = lightPosition( light );
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A node representing the light's direction.
|
|
41
|
+
*
|
|
42
|
+
* @type {Node<vec3>}
|
|
43
|
+
*/
|
|
23
44
|
this.lightDirectionNode = this.lightPositionNode.normalize();
|
|
24
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Uniform node representing the light's ground color.
|
|
48
|
+
*
|
|
49
|
+
* @type {UniformNode<vec3>}
|
|
50
|
+
*/
|
|
25
51
|
this.groundColorNode = uniform( new Color() ).setGroup( renderGroup );
|
|
26
52
|
|
|
27
53
|
}
|
|
28
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Overwritten to updated hemisphere light specific uniforms.
|
|
57
|
+
*
|
|
58
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
59
|
+
*/
|
|
29
60
|
update( frame ) {
|
|
30
61
|
|
|
31
62
|
const { light } = this;
|
|
@@ -2,6 +2,11 @@ import SpotLightNode from './SpotLightNode.js';
|
|
|
2
2
|
import { texture } from '../accessors/TextureNode.js';
|
|
3
3
|
import { vec2 } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* An IES version of the default spot light node.
|
|
7
|
+
*
|
|
8
|
+
* @augments SpotLightNode
|
|
9
|
+
*/
|
|
5
10
|
class IESSpotLightNode extends SpotLightNode {
|
|
6
11
|
|
|
7
12
|
static get type() {
|
|
@@ -10,6 +15,12 @@ class IESSpotLightNode extends SpotLightNode {
|
|
|
10
15
|
|
|
11
16
|
}
|
|
12
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Overwrites the default implementation to compute an IES conform spot attenuation.
|
|
20
|
+
*
|
|
21
|
+
* @param {Node<float>} angleCosine - The angle to compute the spot attenuation for.
|
|
22
|
+
* @return {Node<float>} The spot attenuation.
|
|
23
|
+
*/
|
|
13
24
|
getSpotAttenuation( angleCosine ) {
|
|
14
25
|
|
|
15
26
|
const iesMap = this.light.iesMap;
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import LightingNode from './LightingNode.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A generic class that can be used by nodes which contribute
|
|
5
|
+
* irradiance to the scene. E.g. a light map node can be used
|
|
6
|
+
* as input for this module. Used in {@link NodeMaterial}.
|
|
7
|
+
*
|
|
8
|
+
* @augments LightingNode
|
|
9
|
+
*/
|
|
3
10
|
class IrradianceNode extends LightingNode {
|
|
4
11
|
|
|
5
12
|
static get type() {
|
|
@@ -8,10 +15,20 @@ class IrradianceNode extends LightingNode {
|
|
|
8
15
|
|
|
9
16
|
}
|
|
10
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new irradiance node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Node<vec3>} node - A node contributing irradiance.
|
|
22
|
+
*/
|
|
11
23
|
constructor( node ) {
|
|
12
24
|
|
|
13
25
|
super();
|
|
14
26
|
|
|
27
|
+
/**
|
|
28
|
+
* A node contributing irradiance.
|
|
29
|
+
*
|
|
30
|
+
* @type {Node<vec3>}
|
|
31
|
+
*/
|
|
15
32
|
this.node = node;
|
|
16
33
|
|
|
17
34
|
}
|
|
@@ -4,6 +4,11 @@ import { uniformArray } from '../accessors/UniformArrayNode.js';
|
|
|
4
4
|
import { Vector3 } from '../../math/Vector3.js';
|
|
5
5
|
import getShIrradianceAt from '../functions/material/getShIrradianceAt.js';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Module for representing light probes as nodes.
|
|
9
|
+
*
|
|
10
|
+
* @augments AnalyticLightNode
|
|
11
|
+
*/
|
|
7
12
|
class LightProbeNode extends AnalyticLightNode {
|
|
8
13
|
|
|
9
14
|
static get type() {
|
|
@@ -12,6 +17,11 @@ class LightProbeNode extends AnalyticLightNode {
|
|
|
12
17
|
|
|
13
18
|
}
|
|
14
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new light probe node.
|
|
22
|
+
*
|
|
23
|
+
* @param {LightProbe?} [light=null] - The light probe.
|
|
24
|
+
*/
|
|
15
25
|
constructor( light = null ) {
|
|
16
26
|
|
|
17
27
|
super( light );
|
|
@@ -20,10 +30,20 @@ class LightProbeNode extends AnalyticLightNode {
|
|
|
20
30
|
|
|
21
31
|
for ( let i = 0; i < 9; i ++ ) array.push( new Vector3() );
|
|
22
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Light probe represented as a uniform of spherical harmonics.
|
|
35
|
+
*
|
|
36
|
+
* @type {UniformArrayNode}
|
|
37
|
+
*/
|
|
23
38
|
this.lightProbe = uniformArray( array );
|
|
24
39
|
|
|
25
40
|
}
|
|
26
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Overwritten to updated light probe specific uniforms.
|
|
44
|
+
*
|
|
45
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
46
|
+
*/
|
|
27
47
|
update( frame ) {
|
|
28
48
|
|
|
29
49
|
const { light } = this;
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { Fn } from '../tsl/TSLBase.js';
|
|
2
2
|
|
|
3
|
+
/** @module LightUtils **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Represents a `discard` shader operation in TSL.
|
|
7
|
+
*
|
|
8
|
+
* @method
|
|
9
|
+
* @param {Object} inputs - The input parameter object.
|
|
10
|
+
* @param {Node<float>} inputs.lightDistance - The distance of the light's position to the current fragment position.
|
|
11
|
+
* @param {Node<float>} inputs.cutoffDistance - The light's cutoff distance.
|
|
12
|
+
* @param {Node<float>} inputs.decayExponent - The light's decay exponent.
|
|
13
|
+
* @return {Node<float>} The distance falloff.
|
|
14
|
+
*/
|
|
3
15
|
export const getDistanceAttenuation = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
4
16
|
|
|
5
17
|
const { lightDistance, cutoffDistance, decayExponent } = inputs;
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import ContextNode from '../core/ContextNode.js';
|
|
2
2
|
import { nodeProxy, float, vec3 } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* `LightingContextNode` represents an extension of the {@link module:ContextNode~ContextNode} module
|
|
6
|
+
* by adding lighting specific context data. It represents the runtime context of
|
|
7
|
+
* {@link LightsNode}.
|
|
8
|
+
*
|
|
9
|
+
* @augments ContextNode
|
|
10
|
+
*/
|
|
4
11
|
class LightingContextNode extends ContextNode {
|
|
5
12
|
|
|
6
13
|
static get type() {
|
|
@@ -9,18 +16,59 @@ class LightingContextNode extends ContextNode {
|
|
|
9
16
|
|
|
10
17
|
}
|
|
11
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new lighting context node.
|
|
21
|
+
*
|
|
22
|
+
* @param {LightsNode} node - The lights node.
|
|
23
|
+
* @param {LightingModel?} [lightingModel=null] - The current lighting model.
|
|
24
|
+
* @param {Node<vec3>?} [backdropNode=null] - A backdrop node.
|
|
25
|
+
* @param {Node<float>?} [backdropAlphaNode=null] - A backdrop alpha node.
|
|
26
|
+
*/
|
|
12
27
|
constructor( node, lightingModel = null, backdropNode = null, backdropAlphaNode = null ) {
|
|
13
28
|
|
|
14
29
|
super( node );
|
|
15
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The current lighting model.
|
|
33
|
+
*
|
|
34
|
+
* @type {LightingModel?}
|
|
35
|
+
* @default null
|
|
36
|
+
*/
|
|
16
37
|
this.lightingModel = lightingModel;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A backdrop node.
|
|
41
|
+
*
|
|
42
|
+
* @type {Node<vec3>?}
|
|
43
|
+
* @default null
|
|
44
|
+
*/
|
|
17
45
|
this.backdropNode = backdropNode;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* A backdrop alpha node.
|
|
49
|
+
*
|
|
50
|
+
* @type {Node<float>?}
|
|
51
|
+
* @default null
|
|
52
|
+
*/
|
|
18
53
|
this.backdropAlphaNode = backdropAlphaNode;
|
|
19
54
|
|
|
20
55
|
this._value = null;
|
|
21
56
|
|
|
22
57
|
}
|
|
23
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Returns a lighting context object.
|
|
61
|
+
*
|
|
62
|
+
* @return {{
|
|
63
|
+
* radiance: Node<vec3>,
|
|
64
|
+
* irradiance: Node<vec3>,
|
|
65
|
+
* iblIrradiance: Node<vec3>,
|
|
66
|
+
* ambientOcclusion: Node<float>,
|
|
67
|
+
* reflectedLight: {directDiffuse: Node<vec3>, directSpecular: Node<vec3>, indirectDiffuse: Node<vec3>, indirectSpecular: Node<vec3>},
|
|
68
|
+
* backdrop: Node<vec3>,
|
|
69
|
+
* backdropAlpha: Node<float>
|
|
70
|
+
* }} The lighting context object.
|
|
71
|
+
*/
|
|
24
72
|
getContext() {
|
|
25
73
|
|
|
26
74
|
const { backdropNode, backdropAlphaNode } = this;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Base class for lighting nodes.
|
|
5
|
+
*
|
|
6
|
+
* @augments Node
|
|
7
|
+
*/
|
|
3
8
|
class LightingNode extends Node {
|
|
4
9
|
|
|
5
10
|
static get type() {
|
|
@@ -8,20 +13,24 @@ class LightingNode extends Node {
|
|
|
8
13
|
|
|
9
14
|
}
|
|
10
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Constructs a new lighting node.
|
|
18
|
+
*/
|
|
11
19
|
constructor() {
|
|
12
20
|
|
|
13
21
|
super( 'vec3' );
|
|
14
22
|
|
|
23
|
+
/**
|
|
24
|
+
* This flag can be used for type testing.
|
|
25
|
+
*
|
|
26
|
+
* @type {Boolean}
|
|
27
|
+
* @readonly
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
15
30
|
this.isLightingNode = true;
|
|
16
31
|
|
|
17
32
|
}
|
|
18
33
|
|
|
19
|
-
generate( /*builder*/ ) {
|
|
20
|
-
|
|
21
|
-
console.warn( 'Abstract function.' );
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
34
|
}
|
|
26
35
|
|
|
27
36
|
export default LightingNode;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { nodeObject, vec3 } from '../tsl/TSLBase.js';
|
|
3
|
+
import { hashArray } from '../core/NodeUtils.js';
|
|
4
|
+
|
|
5
|
+
/** @module LightsNode **/
|
|
3
6
|
|
|
4
7
|
const sortLights = ( lights ) => {
|
|
5
8
|
|
|
@@ -25,6 +28,13 @@ const getLightNodeById = ( id, lightNodes ) => {
|
|
|
25
28
|
|
|
26
29
|
const _lightsNodeRef = /*@__PURE__*/ new WeakMap();
|
|
27
30
|
|
|
31
|
+
/**
|
|
32
|
+
* This node represents the scene's lighting and manages the lighting model's life cycle
|
|
33
|
+
* for the current build 3D object. It is responsible for computing the total outgoing
|
|
34
|
+
* light in a given lighting context.
|
|
35
|
+
*
|
|
36
|
+
* @augments Node
|
|
37
|
+
*/
|
|
28
38
|
class LightsNode extends Node {
|
|
29
39
|
|
|
30
40
|
static get type() {
|
|
@@ -33,24 +43,98 @@ class LightsNode extends Node {
|
|
|
33
43
|
|
|
34
44
|
}
|
|
35
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Constructs a new lights node.
|
|
48
|
+
*/
|
|
36
49
|
constructor() {
|
|
37
50
|
|
|
38
51
|
super( 'vec3' );
|
|
39
52
|
|
|
53
|
+
/**
|
|
54
|
+
* A node representing the total diffuse light.
|
|
55
|
+
*
|
|
56
|
+
* @type {Node<vec3>}
|
|
57
|
+
*/
|
|
40
58
|
this.totalDiffuseNode = vec3().toVar( 'totalDiffuse' );
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* A node representing the total specular light.
|
|
62
|
+
*
|
|
63
|
+
* @type {Node<vec3>}
|
|
64
|
+
*/
|
|
41
65
|
this.totalSpecularNode = vec3().toVar( 'totalSpecular' );
|
|
42
66
|
|
|
67
|
+
/**
|
|
68
|
+
* A node representing the outgoing light.
|
|
69
|
+
*
|
|
70
|
+
* @type {Node<vec3>}
|
|
71
|
+
*/
|
|
43
72
|
this.outgoingLightNode = vec3().toVar( 'outgoingLight' );
|
|
44
73
|
|
|
74
|
+
/**
|
|
75
|
+
* An array representing the lights in the scene.
|
|
76
|
+
*
|
|
77
|
+
* @private
|
|
78
|
+
* @type {Array<Light>}
|
|
79
|
+
*/
|
|
45
80
|
this._lights = [];
|
|
46
81
|
|
|
82
|
+
/**
|
|
83
|
+
* For each light in the scene, this node will create a
|
|
84
|
+
* corresponding light node.
|
|
85
|
+
*
|
|
86
|
+
* @private
|
|
87
|
+
* @type {Array<LightingNode>?}
|
|
88
|
+
* @default null
|
|
89
|
+
*/
|
|
47
90
|
this._lightNodes = null;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* A hash for identifying the current light nodes setup.
|
|
94
|
+
*
|
|
95
|
+
* @private
|
|
96
|
+
* @type {String?}
|
|
97
|
+
* @default null
|
|
98
|
+
*/
|
|
48
99
|
this._lightNodesHash = null;
|
|
49
100
|
|
|
101
|
+
/**
|
|
102
|
+
* `LightsNode` sets this property to `true` by default.
|
|
103
|
+
*
|
|
104
|
+
* @type {Boolean}
|
|
105
|
+
* @default true
|
|
106
|
+
*/
|
|
50
107
|
this.global = true;
|
|
51
108
|
|
|
52
109
|
}
|
|
53
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Overwrites the default {@link Node#customCacheKey} implementation by including the
|
|
113
|
+
* light IDs into the cache key.
|
|
114
|
+
*
|
|
115
|
+
* @return {Number} The custom cache key.
|
|
116
|
+
*/
|
|
117
|
+
customCacheKey() {
|
|
118
|
+
|
|
119
|
+
const lightIDs = [];
|
|
120
|
+
const lights = this._lights;
|
|
121
|
+
|
|
122
|
+
for ( let i = 0; i < lights.length; i ++ ) {
|
|
123
|
+
|
|
124
|
+
lightIDs.push( lights[ i ].id );
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return hashArray( lightIDs );
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Computes a hash value for identifying the current light nodes setup.
|
|
134
|
+
*
|
|
135
|
+
* @param {NodeBuilder} builder - A reference to the current node builder.
|
|
136
|
+
* @return {String} The computed hash.
|
|
137
|
+
*/
|
|
54
138
|
getHash( builder ) {
|
|
55
139
|
|
|
56
140
|
if ( this._lightNodesHash === null ) {
|
|
@@ -85,6 +169,12 @@ class LightsNode extends Node {
|
|
|
85
169
|
|
|
86
170
|
}
|
|
87
171
|
|
|
172
|
+
/**
|
|
173
|
+
* Creates lighting nodes for each scene light. This makes it possible to further
|
|
174
|
+
* process lights in the node system.
|
|
175
|
+
*
|
|
176
|
+
* @param {NodeBuilder} builder - A reference to the current node builder.
|
|
177
|
+
*/
|
|
88
178
|
setupLightsNode( builder ) {
|
|
89
179
|
|
|
90
180
|
const lightNodes = [];
|
|
@@ -106,12 +196,14 @@ class LightsNode extends Node {
|
|
|
106
196
|
|
|
107
197
|
if ( previousLightNodes !== null ) {
|
|
108
198
|
|
|
109
|
-
lightNode = getLightNodeById( light.id, previousLightNodes ); //
|
|
199
|
+
lightNode = getLightNodeById( light.id, previousLightNodes ); // reuse existing light node
|
|
110
200
|
|
|
111
201
|
}
|
|
112
202
|
|
|
113
203
|
if ( lightNode === null ) {
|
|
114
204
|
|
|
205
|
+
// find the corresponding node type for a given light
|
|
206
|
+
|
|
115
207
|
const lightNodeClass = nodeLibrary.getLightNodeClass( light.constructor );
|
|
116
208
|
|
|
117
209
|
if ( lightNodeClass === null ) {
|
|
@@ -146,6 +238,13 @@ class LightsNode extends Node {
|
|
|
146
238
|
|
|
147
239
|
}
|
|
148
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Setups the internal lights by building all respective
|
|
243
|
+
* light nodes.
|
|
244
|
+
*
|
|
245
|
+
* @param {NodeBuilder} builder - A reference to the current node builder.
|
|
246
|
+
* @param {Array<LightingNode>} lightNodes - An array of lighting nodes.
|
|
247
|
+
*/
|
|
149
248
|
setupLights( builder, lightNodes ) {
|
|
150
249
|
|
|
151
250
|
for ( const lightNode of lightNodes ) {
|
|
@@ -156,6 +255,14 @@ class LightsNode extends Node {
|
|
|
156
255
|
|
|
157
256
|
}
|
|
158
257
|
|
|
258
|
+
/**
|
|
259
|
+
* The implementation makes sure that for each light in the scene
|
|
260
|
+
* there is a corresponding light node. By building the light nodes
|
|
261
|
+
* and evaluating the lighting model the outgoing light is computed.
|
|
262
|
+
*
|
|
263
|
+
* @param {NodeBuilder} builder - A reference to the current node builder.
|
|
264
|
+
* @return {Node<vec3>} A node representing the outgoing light.
|
|
265
|
+
*/
|
|
159
266
|
setup( builder ) {
|
|
160
267
|
|
|
161
268
|
if ( this._lightNodes === null ) this.setupLightsNode( builder );
|
|
@@ -232,6 +339,12 @@ class LightsNode extends Node {
|
|
|
232
339
|
|
|
233
340
|
}
|
|
234
341
|
|
|
342
|
+
/**
|
|
343
|
+
* Configures this node with an array of lights.
|
|
344
|
+
*
|
|
345
|
+
* @param {Array<Light>} lights - An array of lights.
|
|
346
|
+
* @return {LightsNode} A reference to this node.
|
|
347
|
+
*/
|
|
235
348
|
setLights( lights ) {
|
|
236
349
|
|
|
237
350
|
this._lights = lights;
|
|
@@ -243,12 +356,22 @@ class LightsNode extends Node {
|
|
|
243
356
|
|
|
244
357
|
}
|
|
245
358
|
|
|
359
|
+
/**
|
|
360
|
+
* Returns an array of the scene's lights.
|
|
361
|
+
*
|
|
362
|
+
* @return {Array<Light>} The scene's lights.
|
|
363
|
+
*/
|
|
246
364
|
getLights() {
|
|
247
365
|
|
|
248
366
|
return this._lights;
|
|
249
367
|
|
|
250
368
|
}
|
|
251
369
|
|
|
370
|
+
/**
|
|
371
|
+
* Whether the scene has lights or not.
|
|
372
|
+
*
|
|
373
|
+
* @type {Boolean}
|
|
374
|
+
*/
|
|
252
375
|
get hasLights() {
|
|
253
376
|
|
|
254
377
|
return this._lights.length > 0;
|
|
@@ -259,4 +382,12 @@ class LightsNode extends Node {
|
|
|
259
382
|
|
|
260
383
|
export default LightsNode;
|
|
261
384
|
|
|
385
|
+
/**
|
|
386
|
+
* TSL function for creating an instance of `LightsNode` and configuring
|
|
387
|
+
* it with the given array of lights.
|
|
388
|
+
*
|
|
389
|
+
* @function
|
|
390
|
+
* @param {Array<Light>} lights - An array of lights.
|
|
391
|
+
* @return {LightsNode} The created lights node.
|
|
392
|
+
*/
|
|
262
393
|
export const lights = ( lights = [] ) => nodeObject( new LightsNode() ).setLights( lights );
|
|
@@ -34,6 +34,11 @@ export const directPointLight = Fn( ( { color, lightViewPosition, cutoffDistance
|
|
|
34
34
|
|
|
35
35
|
} );
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Module for representing point lights as nodes.
|
|
39
|
+
*
|
|
40
|
+
* @augments AnalyticLightNode
|
|
41
|
+
*/
|
|
37
42
|
class PointLightNode extends AnalyticLightNode {
|
|
38
43
|
|
|
39
44
|
static get type() {
|
|
@@ -42,15 +47,36 @@ class PointLightNode extends AnalyticLightNode {
|
|
|
42
47
|
|
|
43
48
|
}
|
|
44
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Constructs a new point light node.
|
|
52
|
+
*
|
|
53
|
+
* @param {PointLight?} [light=null] - The point light source.
|
|
54
|
+
*/
|
|
45
55
|
constructor( light = null ) {
|
|
46
56
|
|
|
47
57
|
super( light );
|
|
48
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Uniform node representing the cutoff distance.
|
|
61
|
+
*
|
|
62
|
+
* @type {UniformNode<float>}
|
|
63
|
+
*/
|
|
49
64
|
this.cutoffDistanceNode = uniform( 0 ).setGroup( renderGroup );
|
|
50
|
-
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Uniform node representing the decay exponent.
|
|
68
|
+
*
|
|
69
|
+
* @type {UniformNode<float>}
|
|
70
|
+
*/
|
|
71
|
+
this.decayExponentNode = uniform( 2 ).setGroup( renderGroup );
|
|
51
72
|
|
|
52
73
|
}
|
|
53
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Overwritten to updated point light specific uniforms.
|
|
77
|
+
*
|
|
78
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
79
|
+
*/
|
|
54
80
|
update( frame ) {
|
|
55
81
|
|
|
56
82
|
const { light } = this;
|
|
@@ -62,6 +88,11 @@ class PointLightNode extends AnalyticLightNode {
|
|
|
62
88
|
|
|
63
89
|
}
|
|
64
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Overwritten to setup point light specific shadow.
|
|
93
|
+
*
|
|
94
|
+
* @return {PointShadowNode}
|
|
95
|
+
*/
|
|
65
96
|
setupShadowNode() {
|
|
66
97
|
|
|
67
98
|
return pointShadow( this.light );
|
|
@@ -11,6 +11,8 @@ import { Vector4 } from '../../math/Vector4.js';
|
|
|
11
11
|
import { Color } from '../../math/Color.js';
|
|
12
12
|
import { BasicShadowMap } from '../../constants.js';
|
|
13
13
|
|
|
14
|
+
/** @module PointShadowNode **/
|
|
15
|
+
|
|
14
16
|
const _clearColor = /*@__PURE__*/ new Color();
|
|
15
17
|
|
|
16
18
|
// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D
|
|
@@ -157,8 +159,12 @@ const _viewport = /*@__PURE__*/ new Vector4();
|
|
|
157
159
|
const _viewportSize = /*@__PURE__*/ new Vector2();
|
|
158
160
|
const _shadowMapSize = /*@__PURE__*/ new Vector2();
|
|
159
161
|
|
|
160
|
-
//
|
|
161
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Represents the shadow implementation for point light nodes.
|
|
165
|
+
*
|
|
166
|
+
* @augments module:ShadowNode~ShadowNode
|
|
167
|
+
*/
|
|
162
168
|
class PointShadowNode extends ShadowNode {
|
|
163
169
|
|
|
164
170
|
static get type() {
|
|
@@ -167,30 +173,69 @@ class PointShadowNode extends ShadowNode {
|
|
|
167
173
|
|
|
168
174
|
}
|
|
169
175
|
|
|
176
|
+
/**
|
|
177
|
+
* Constructs a new point shadow node.
|
|
178
|
+
*
|
|
179
|
+
* @param {PointLight} light - The shadow casting point light.
|
|
180
|
+
* @param {PointLightShadow?} [shadow=null] - An optional point light shadow.
|
|
181
|
+
*/
|
|
170
182
|
constructor( light, shadow = null ) {
|
|
171
183
|
|
|
172
184
|
super( light, shadow );
|
|
173
185
|
|
|
174
186
|
}
|
|
175
187
|
|
|
188
|
+
/**
|
|
189
|
+
* Overwrites the default implementation to return point light shadow specific
|
|
190
|
+
* filtering functions.
|
|
191
|
+
*
|
|
192
|
+
* @param {Number} type - The shadow type.
|
|
193
|
+
* @return {Function} The filtering function.
|
|
194
|
+
*/
|
|
176
195
|
getShadowFilterFn( type ) {
|
|
177
196
|
|
|
178
197
|
return type === BasicShadowMap ? BasicPointShadowFilter : PointShadowFilter;
|
|
179
198
|
|
|
180
199
|
}
|
|
181
200
|
|
|
201
|
+
/**
|
|
202
|
+
* Overwrites the default implementation so the unaltered shadow position is used.
|
|
203
|
+
*
|
|
204
|
+
* @param {NodeBuilder} builder - A reference to the current node builder.
|
|
205
|
+
* @param {Node<vec3>} shadowPosition - A node representing the shadow position.
|
|
206
|
+
* @return {Node<vec3>} The shadow coordinates.
|
|
207
|
+
*/
|
|
182
208
|
setupShadowCoord( builder, shadowPosition ) {
|
|
183
209
|
|
|
184
210
|
return shadowPosition;
|
|
185
211
|
|
|
186
212
|
}
|
|
187
213
|
|
|
214
|
+
/**
|
|
215
|
+
* Overwrites the default implementation to only use point light specific
|
|
216
|
+
* shadow filter functions.
|
|
217
|
+
*
|
|
218
|
+
* @param {NodeBuilder} builder - A reference to the current node builder.
|
|
219
|
+
* @param {Object} inputs - A configuration object that defines the shadow filtering.
|
|
220
|
+
* @param {Function} inputs.filterFn - This function defines the filtering type of the shadow map e.g. PCF.
|
|
221
|
+
* @param {Texture} inputs.shadowTexture - A reference to the shadow map's texture.
|
|
222
|
+
* @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.
|
|
223
|
+
* @param {Node<vec3>} inputs.shadowCoord - Shadow coordinates which are used to sample from the shadow map.
|
|
224
|
+
* @param {LightShadow} inputs.shadow - The light shadow.
|
|
225
|
+
* @return {Node<float>} The result node of the shadow filtering.
|
|
226
|
+
*/
|
|
188
227
|
setupShadowFilter( builder, { filterFn, shadowTexture, depthTexture, shadowCoord, shadow } ) {
|
|
189
228
|
|
|
190
229
|
return pointShadowFilter( { filterFn, shadowTexture, depthTexture, shadowCoord, shadow } );
|
|
191
230
|
|
|
192
231
|
}
|
|
193
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Overwrites the default implementation with point light specific
|
|
235
|
+
* rendering code.
|
|
236
|
+
*
|
|
237
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
238
|
+
*/
|
|
194
239
|
renderShadow( frame ) {
|
|
195
240
|
|
|
196
241
|
const { shadow, shadowMap, light } = this;
|
|
@@ -251,4 +296,12 @@ class PointShadowNode extends ShadowNode {
|
|
|
251
296
|
|
|
252
297
|
export default PointShadowNode;
|
|
253
298
|
|
|
299
|
+
/**
|
|
300
|
+
* TSL function for creating an instance of `PointShadowNode`.
|
|
301
|
+
*
|
|
302
|
+
* @function
|
|
303
|
+
* @param {PointLight} light - The shadow casting point light.
|
|
304
|
+
* @param {PointLightShadow?} [shadow=null] - An optional point light shadow.
|
|
305
|
+
* @return {PointShadowNode} The created point shadow node.
|
|
306
|
+
*/
|
|
254
307
|
export const pointShadow = ( light, shadow ) => nodeObject( new PointShadowNode( light, shadow ) );
|