super-three 0.171.0 → 0.173.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 +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- 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 +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -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 +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- 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 -2
- 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/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- 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 +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.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/OutputPass.js +2 -0
- 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/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- 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 +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- 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/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- 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/ImageUtils.js +1 -11
- 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/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 +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- 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 +113 -3
- 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/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- 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 +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -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 +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -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/ArrayNode.js +125 -0
- 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 +32 -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 +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- 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 +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- 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 +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -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 +110 -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 +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -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 +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- 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 +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- 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 +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -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 +54 -0
- package/src/nodes/utils/Timer.js +40 -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 +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -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 +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -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 +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- 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 +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -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 +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -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 +243 -2
- 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 +352 -78
- 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/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -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 +674 -52
- 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 +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -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/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- 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
|
@@ -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 ) );
|
|
@@ -11,8 +11,13 @@ import { NodeUpdateType } from '../core/constants.js';
|
|
|
11
11
|
const _matrix41 = /*@__PURE__*/ new Matrix4();
|
|
12
12
|
const _matrix42 = /*@__PURE__*/ new Matrix4();
|
|
13
13
|
|
|
14
|
-
let
|
|
14
|
+
let _ltcLib = null;
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Module for representing rect area lights as nodes.
|
|
18
|
+
*
|
|
19
|
+
* @augments AnalyticLightNode
|
|
20
|
+
*/
|
|
16
21
|
class RectAreaLightNode extends AnalyticLightNode {
|
|
17
22
|
|
|
18
23
|
static get type() {
|
|
@@ -21,17 +26,45 @@ class RectAreaLightNode extends AnalyticLightNode {
|
|
|
21
26
|
|
|
22
27
|
}
|
|
23
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new rect area light node.
|
|
31
|
+
*
|
|
32
|
+
* @param {RectAreaLight?} [light=null] - The rect area light source.
|
|
33
|
+
*/
|
|
24
34
|
constructor( light = null ) {
|
|
25
35
|
|
|
26
36
|
super( light );
|
|
27
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Uniform node representing the half height of the are light.
|
|
40
|
+
*
|
|
41
|
+
* @type {UniformNode<vec3>}
|
|
42
|
+
*/
|
|
28
43
|
this.halfHeight = uniform( new Vector3() ).setGroup( renderGroup );
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Uniform node representing the half width of the are light.
|
|
47
|
+
*
|
|
48
|
+
* @type {UniformNode<vec3>}
|
|
49
|
+
*/
|
|
29
50
|
this.halfWidth = uniform( new Vector3() ).setGroup( renderGroup );
|
|
30
51
|
|
|
52
|
+
/**
|
|
53
|
+
* The `updateType` is set to `NodeUpdateType.RENDER` since the light
|
|
54
|
+
* relies on `viewMatrix` which might vary per render call.
|
|
55
|
+
*
|
|
56
|
+
* @type {String}
|
|
57
|
+
* @default 'render'
|
|
58
|
+
*/
|
|
31
59
|
this.updateType = NodeUpdateType.RENDER;
|
|
32
60
|
|
|
33
61
|
}
|
|
34
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Overwritten to updated rect area light specific uniforms.
|
|
65
|
+
*
|
|
66
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
67
|
+
*/
|
|
35
68
|
update( frame ) {
|
|
36
69
|
|
|
37
70
|
super.update( frame );
|
|
@@ -61,13 +94,13 @@ class RectAreaLightNode extends AnalyticLightNode {
|
|
|
61
94
|
|
|
62
95
|
if ( builder.isAvailable( 'float32Filterable' ) ) {
|
|
63
96
|
|
|
64
|
-
ltc_1 = texture(
|
|
65
|
-
ltc_2 = texture(
|
|
97
|
+
ltc_1 = texture( _ltcLib.LTC_FLOAT_1 );
|
|
98
|
+
ltc_2 = texture( _ltcLib.LTC_FLOAT_2 );
|
|
66
99
|
|
|
67
100
|
} else {
|
|
68
101
|
|
|
69
|
-
ltc_1 = texture(
|
|
70
|
-
ltc_2 = texture(
|
|
102
|
+
ltc_1 = texture( _ltcLib.LTC_HALF_1 );
|
|
103
|
+
ltc_2 = texture( _ltcLib.LTC_HALF_2 );
|
|
71
104
|
|
|
72
105
|
}
|
|
73
106
|
|
|
@@ -89,9 +122,14 @@ class RectAreaLightNode extends AnalyticLightNode {
|
|
|
89
122
|
|
|
90
123
|
}
|
|
91
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Used to configure the internal BRDF approximation texture data.
|
|
127
|
+
*
|
|
128
|
+
* @param {RectAreaLightTexturesLib} ltc - The BRDF approximation texture data.
|
|
129
|
+
*/
|
|
92
130
|
static setLTC( ltc ) {
|
|
93
131
|
|
|
94
|
-
|
|
132
|
+
_ltcLib = ltc;
|
|
95
133
|
|
|
96
134
|
}
|
|
97
135
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
+
import { vec3 } from '../tsl/TSLBase.js';
|
|
4
|
+
import { positionWorld } from '../accessors/Position.js';
|
|
5
|
+
|
|
6
|
+
/** @module ShadowBaseNode **/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Base class for all shadow nodes.
|
|
10
|
+
*
|
|
11
|
+
* Shadow nodes encapsulate shadow related logic and are always coupled to lighting nodes.
|
|
12
|
+
* Lighting nodes might share the same shadow node type or use specific ones depending on
|
|
13
|
+
* their requirements.
|
|
14
|
+
*
|
|
15
|
+
* @augments Node
|
|
16
|
+
*/
|
|
17
|
+
class ShadowBaseNode extends Node {
|
|
18
|
+
|
|
19
|
+
static get type() {
|
|
20
|
+
|
|
21
|
+
return 'ShadowBaseNode';
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new shadow base node.
|
|
27
|
+
*
|
|
28
|
+
* @param {Light} light - The shadow casting light.
|
|
29
|
+
*/
|
|
30
|
+
constructor( light ) {
|
|
31
|
+
|
|
32
|
+
super();
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The shadow casting light.
|
|
36
|
+
*
|
|
37
|
+
* @type {Light}
|
|
38
|
+
*/
|
|
39
|
+
this.light = light;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Overwritten since shadows are updated by default per render.
|
|
43
|
+
*
|
|
44
|
+
* @type {String}
|
|
45
|
+
* @default 'render'
|
|
46
|
+
*/
|
|
47
|
+
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* This flag can be used for type testing.
|
|
51
|
+
*
|
|
52
|
+
* @type {Boolean}
|
|
53
|
+
* @readonly
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
this.isShadowBaseNode = true;
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Setups the shadow position node which is by default the predefined TSL node object `shadowPositionWorld`.
|
|
62
|
+
*
|
|
63
|
+
* @param {(NodeBuilder|{Material})} object - A configuration object that must at least hold a material reference.
|
|
64
|
+
*/
|
|
65
|
+
setupShadowPosition( { material } ) {
|
|
66
|
+
|
|
67
|
+
// Use assign inside an Fn()
|
|
68
|
+
|
|
69
|
+
shadowPositionWorld.assign( material.shadowPositionNode || positionWorld );
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Can be called when the shadow isn't required anymore. That can happen when
|
|
75
|
+
* a lighting node stops casting shadows by setting {@link Object3D#castShadow}
|
|
76
|
+
* to `false`.
|
|
77
|
+
*/
|
|
78
|
+
dispose() {
|
|
79
|
+
|
|
80
|
+
this.updateBeforeType = NodeUpdateType.NONE;
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* TSL object that represents the vertex position in world space during the shadow pass.
|
|
88
|
+
*
|
|
89
|
+
* @type {Node<vec3>}
|
|
90
|
+
*/
|
|
91
|
+
export const shadowPositionWorld = /*@__PURE__*/ vec3().toVar( 'shadowPositionWorld' );
|
|
92
|
+
|
|
93
|
+
export default ShadowBaseNode;
|