super-three 0.171.0 → 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
|
@@ -2,6 +2,13 @@ import Node from '../core/Node.js';
|
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
|
+
/** @module ComputeNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* TODO
|
|
9
|
+
*
|
|
10
|
+
* @augments Node
|
|
11
|
+
*/
|
|
5
12
|
class ComputeNode extends Node {
|
|
6
13
|
|
|
7
14
|
static get type() {
|
|
@@ -10,39 +17,116 @@ class ComputeNode extends Node {
|
|
|
10
17
|
|
|
11
18
|
}
|
|
12
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new compute node.
|
|
22
|
+
*
|
|
23
|
+
* @param {Node} computeNode - TODO
|
|
24
|
+
* @param {Number} count - TODO.
|
|
25
|
+
* @param {Array<Number>} [workgroupSize=[64]] - TODO.
|
|
26
|
+
*/
|
|
13
27
|
constructor( computeNode, count, workgroupSize = [ 64 ] ) {
|
|
14
28
|
|
|
15
29
|
super( 'void' );
|
|
16
30
|
|
|
31
|
+
/**
|
|
32
|
+
* This flag can be used for type testing.
|
|
33
|
+
*
|
|
34
|
+
* @type {Boolean}
|
|
35
|
+
* @readonly
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
17
38
|
this.isComputeNode = true;
|
|
18
39
|
|
|
40
|
+
/**
|
|
41
|
+
* TODO
|
|
42
|
+
*
|
|
43
|
+
* @type {Node}
|
|
44
|
+
*/
|
|
19
45
|
this.computeNode = computeNode;
|
|
20
46
|
|
|
47
|
+
/**
|
|
48
|
+
* TODO
|
|
49
|
+
*
|
|
50
|
+
* @type {Number}
|
|
51
|
+
*/
|
|
21
52
|
this.count = count;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* TODO
|
|
56
|
+
*
|
|
57
|
+
* @type {Array<Number>}
|
|
58
|
+
* @default [64]
|
|
59
|
+
*/
|
|
22
60
|
this.workgroupSize = workgroupSize;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* TODO
|
|
64
|
+
*
|
|
65
|
+
* @type {Number}
|
|
66
|
+
*/
|
|
23
67
|
this.dispatchCount = 0;
|
|
24
68
|
|
|
69
|
+
/**
|
|
70
|
+
* TODO
|
|
71
|
+
*
|
|
72
|
+
* @type {Number}
|
|
73
|
+
*/
|
|
25
74
|
this.version = 1;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The name or label of the uniform.
|
|
78
|
+
*
|
|
79
|
+
* @type {String}
|
|
80
|
+
* @default ''
|
|
81
|
+
*/
|
|
82
|
+
this.name = '';
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The `updateBeforeType` is set to `NodeUpdateType.OBJECT` since {@link ComputeNode#updateBefore}
|
|
86
|
+
* is executed once per object by default.
|
|
87
|
+
*
|
|
88
|
+
* @type {String}
|
|
89
|
+
* @default 'object'
|
|
90
|
+
*/
|
|
26
91
|
this.updateBeforeType = NodeUpdateType.OBJECT;
|
|
27
92
|
|
|
93
|
+
/**
|
|
94
|
+
* TODO
|
|
95
|
+
*
|
|
96
|
+
* @type {Function}
|
|
97
|
+
*/
|
|
28
98
|
this.onInitFunction = null;
|
|
29
99
|
|
|
30
100
|
this.updateDispatchCount();
|
|
31
101
|
|
|
32
102
|
}
|
|
33
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Executes the `dispose` event for this node.
|
|
106
|
+
*/
|
|
34
107
|
dispose() {
|
|
35
108
|
|
|
36
109
|
this.dispatchEvent( { type: 'dispose' } );
|
|
37
110
|
|
|
38
111
|
}
|
|
39
112
|
|
|
40
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Sets the {@link ComputeNode#name} property.
|
|
115
|
+
*
|
|
116
|
+
* @param {String} name - The name of the uniform.
|
|
117
|
+
* @return {ComputeNode} A reference to this node.
|
|
118
|
+
*/
|
|
119
|
+
label( name ) {
|
|
120
|
+
|
|
121
|
+
this.name = name;
|
|
41
122
|
|
|
42
|
-
|
|
123
|
+
return this;
|
|
43
124
|
|
|
44
125
|
}
|
|
45
126
|
|
|
127
|
+
/**
|
|
128
|
+
* TODO
|
|
129
|
+
*/
|
|
46
130
|
updateDispatchCount() {
|
|
47
131
|
|
|
48
132
|
const { count, workgroupSize } = this;
|
|
@@ -56,6 +140,12 @@ class ComputeNode extends Node {
|
|
|
56
140
|
|
|
57
141
|
}
|
|
58
142
|
|
|
143
|
+
/**
|
|
144
|
+
* TODO
|
|
145
|
+
*
|
|
146
|
+
* @param {Function} callback - TODO.
|
|
147
|
+
* @return {ComputeNode} A reference to this node.
|
|
148
|
+
*/
|
|
59
149
|
onInit( callback ) {
|
|
60
150
|
|
|
61
151
|
this.onInitFunction = callback;
|
|
@@ -64,6 +154,11 @@ class ComputeNode extends Node {
|
|
|
64
154
|
|
|
65
155
|
}
|
|
66
156
|
|
|
157
|
+
/**
|
|
158
|
+
* The method execute the compute for this node.
|
|
159
|
+
*
|
|
160
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
161
|
+
*/
|
|
67
162
|
updateBefore( { renderer } ) {
|
|
68
163
|
|
|
69
164
|
renderer.compute( this );
|
|
@@ -92,6 +187,15 @@ class ComputeNode extends Node {
|
|
|
92
187
|
|
|
93
188
|
export default ComputeNode;
|
|
94
189
|
|
|
190
|
+
/**
|
|
191
|
+
* TSL function for creating a compute node.
|
|
192
|
+
*
|
|
193
|
+
* @function
|
|
194
|
+
* @param {Node} node - TODO
|
|
195
|
+
* @param {Number} count - TODO.
|
|
196
|
+
* @param {Array<Number>} [workgroupSize=[64]] - TODO.
|
|
197
|
+
* @returns {AtomicFunctionNode}
|
|
198
|
+
*/
|
|
95
199
|
export const compute = ( node, count, workgroupSize ) => nodeObject( new ComputeNode( nodeObject( node ), count, workgroupSize ) );
|
|
96
200
|
|
|
97
201
|
addMethodChaining( 'compute', compute );
|
|
@@ -2,12 +2,32 @@ import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
|
2
2
|
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
3
|
import Node from '../core/Node.js';
|
|
4
4
|
|
|
5
|
+
/** @module WorkgroupInfoNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Represents an element of a 'workgroup' scoped buffer.
|
|
9
|
+
*
|
|
10
|
+
* @augments ArrayElementNode
|
|
11
|
+
*/
|
|
5
12
|
class WorkgroupInfoElementNode extends ArrayElementNode {
|
|
6
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new workgroup info element node.
|
|
16
|
+
*
|
|
17
|
+
* @param {Node} workgroupInfoNode - The workgroup info node.
|
|
18
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
19
|
+
*/
|
|
7
20
|
constructor( workgroupInfoNode, indexNode ) {
|
|
8
21
|
|
|
9
22
|
super( workgroupInfoNode, indexNode );
|
|
10
23
|
|
|
24
|
+
/**
|
|
25
|
+
* This flag can be used for type testing.
|
|
26
|
+
*
|
|
27
|
+
* @type {Boolean}
|
|
28
|
+
* @readonly
|
|
29
|
+
* @default true
|
|
30
|
+
*/
|
|
11
31
|
this.isWorkgroupInfoElementNode = true;
|
|
12
32
|
|
|
13
33
|
}
|
|
@@ -35,22 +55,77 @@ class WorkgroupInfoElementNode extends ArrayElementNode {
|
|
|
35
55
|
|
|
36
56
|
}
|
|
37
57
|
|
|
38
|
-
|
|
58
|
+
/**
|
|
59
|
+
* A node allowing the user to create a 'workgroup' scoped buffer within the
|
|
60
|
+
* context of a compute shader. Typically, workgroup scoped buffers are
|
|
61
|
+
* created to hold data that is transfered from a global storage scope into
|
|
62
|
+
* a local workgroup scope. For invocations within a workgroup, data
|
|
63
|
+
* access speeds on 'workgroup' scoped buffers can be significantly faster
|
|
64
|
+
* than similar access operations on globally accessible storage buffers.
|
|
65
|
+
*
|
|
66
|
+
* This node can only be used with a WebGPU backend.
|
|
67
|
+
*
|
|
68
|
+
* @augments Node
|
|
69
|
+
*/
|
|
39
70
|
class WorkgroupInfoNode extends Node {
|
|
40
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Constructs a new buffer scoped to type scope.
|
|
74
|
+
*
|
|
75
|
+
* @param {String} scope - TODO.
|
|
76
|
+
* @param {String} bufferType - The data type of a 'workgroup' scoped buffer element.
|
|
77
|
+
* @param {Number} [bufferCount=0] - The number of elements in the buffer.
|
|
78
|
+
*/
|
|
41
79
|
constructor( scope, bufferType, bufferCount = 0 ) {
|
|
42
80
|
|
|
43
81
|
super( bufferType );
|
|
44
82
|
|
|
83
|
+
/**
|
|
84
|
+
* The buffer type.
|
|
85
|
+
*
|
|
86
|
+
* @type {String}
|
|
87
|
+
*/
|
|
45
88
|
this.bufferType = bufferType;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The buffer count.
|
|
92
|
+
*
|
|
93
|
+
* @type {Number}
|
|
94
|
+
* @default 0
|
|
95
|
+
*/
|
|
46
96
|
this.bufferCount = bufferCount;
|
|
47
97
|
|
|
98
|
+
/**
|
|
99
|
+
* This flag can be used for type testing.
|
|
100
|
+
*
|
|
101
|
+
* @type {Boolean}
|
|
102
|
+
* @readonly
|
|
103
|
+
* @default true
|
|
104
|
+
*/
|
|
48
105
|
this.isWorkgroupInfoNode = true;
|
|
49
106
|
|
|
107
|
+
/**
|
|
108
|
+
* The data type of the array buffer.
|
|
109
|
+
*
|
|
110
|
+
* @type {String}
|
|
111
|
+
*/
|
|
112
|
+
this.elementType = bufferType;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* TODO.
|
|
116
|
+
*
|
|
117
|
+
* @type {String}
|
|
118
|
+
*/
|
|
50
119
|
this.scope = scope;
|
|
51
120
|
|
|
52
121
|
}
|
|
53
122
|
|
|
123
|
+
/**
|
|
124
|
+
* Sets the name/label of this node.
|
|
125
|
+
*
|
|
126
|
+
* @param {String} name - The name to set.
|
|
127
|
+
* @return {WorkgroupInfoNode} A reference to this node.
|
|
128
|
+
*/
|
|
54
129
|
label( name ) {
|
|
55
130
|
|
|
56
131
|
this.name = name;
|
|
@@ -59,26 +134,51 @@ class WorkgroupInfoNode extends Node {
|
|
|
59
134
|
|
|
60
135
|
}
|
|
61
136
|
|
|
62
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Sets the scope of this node.
|
|
139
|
+
*
|
|
140
|
+
* @param {String} scope - The scope to set.
|
|
141
|
+
* @return {WorkgroupInfoNode} A reference to this node.
|
|
142
|
+
*/
|
|
143
|
+
setScope( scope ) {
|
|
144
|
+
|
|
145
|
+
this.scope = scope;
|
|
63
146
|
|
|
64
|
-
return this
|
|
147
|
+
return this;
|
|
65
148
|
|
|
66
149
|
}
|
|
67
150
|
|
|
68
|
-
setScope( scope ) {
|
|
69
151
|
|
|
70
|
-
|
|
152
|
+
/**
|
|
153
|
+
* The data type of the array buffer.
|
|
154
|
+
*
|
|
155
|
+
* @return {String} The element type.
|
|
156
|
+
*/
|
|
157
|
+
getElementType() {
|
|
71
158
|
|
|
72
|
-
return this;
|
|
159
|
+
return this.elementType;
|
|
73
160
|
|
|
74
161
|
}
|
|
75
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Overwrites the default implementation since the input type
|
|
165
|
+
* is inferred from the scope.
|
|
166
|
+
*
|
|
167
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
168
|
+
* @return {String} The input type.
|
|
169
|
+
*/
|
|
76
170
|
getInputType( /*builder*/ ) {
|
|
77
171
|
|
|
78
172
|
return `${this.scope}Array`;
|
|
79
173
|
|
|
80
174
|
}
|
|
81
175
|
|
|
176
|
+
/**
|
|
177
|
+
* This method can be used to access elements via an index node.
|
|
178
|
+
*
|
|
179
|
+
* @param {IndexNode} indexNode - indexNode.
|
|
180
|
+
* @return {WorkgroupInfoElementNode} A reference to an element.
|
|
181
|
+
*/
|
|
82
182
|
element( indexNode ) {
|
|
83
183
|
|
|
84
184
|
return nodeObject( new WorkgroupInfoElementNode( this, indexNode ) );
|
|
@@ -95,6 +195,15 @@ class WorkgroupInfoNode extends Node {
|
|
|
95
195
|
|
|
96
196
|
export default WorkgroupInfoNode;
|
|
97
197
|
|
|
198
|
+
/**
|
|
199
|
+
* TSL function for creating a workgroup info node.
|
|
200
|
+
* Creates a new 'workgroup' scoped array buffer.
|
|
201
|
+
*
|
|
202
|
+
* @function
|
|
203
|
+
* @param {String} type - The data type of a 'workgroup' scoped buffer element.
|
|
204
|
+
* @param {Number} [count=0] - The number of elements in the buffer.
|
|
205
|
+
* @returns {WorkgroupInfoNode}
|
|
206
|
+
*/
|
|
98
207
|
export const workgroupArray = ( type, count ) => nodeObject( new WorkgroupInfoNode( 'Workgroup', type, count ) );
|
|
99
208
|
|
|
100
209
|
|
|
@@ -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
|
+
* ambient occlusion to the scene. E.g. an ambient occlusion map
|
|
6
|
+
* node can be used as input for this module. Used in {@link NodeMaterial}.
|
|
7
|
+
*
|
|
8
|
+
* @augments LightingNode
|
|
9
|
+
*/
|
|
3
10
|
class AONode extends LightingNode {
|
|
4
11
|
|
|
5
12
|
static get type() {
|
|
@@ -8,10 +15,21 @@ class AONode extends LightingNode {
|
|
|
8
15
|
|
|
9
16
|
}
|
|
10
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new AO node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Node<float>?} [aoNode=null] - The ambient occlusion node.
|
|
22
|
+
*/
|
|
11
23
|
constructor( aoNode = null ) {
|
|
12
24
|
|
|
13
25
|
super();
|
|
14
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The ambient occlusion node.
|
|
29
|
+
*
|
|
30
|
+
* @type {Node<float>?}
|
|
31
|
+
* @default null
|
|
32
|
+
*/
|
|
15
33
|
this.aoNode = aoNode;
|
|
16
34
|
|
|
17
35
|
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import AnalyticLightNode from './AnalyticLightNode.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Module for representing ambient lights as nodes.
|
|
5
|
+
*
|
|
6
|
+
* @augments AnalyticLightNode
|
|
7
|
+
*/
|
|
3
8
|
class AmbientLightNode extends AnalyticLightNode {
|
|
4
9
|
|
|
5
10
|
static get type() {
|
|
@@ -8,6 +13,11 @@ class AmbientLightNode extends AnalyticLightNode {
|
|
|
8
13
|
|
|
9
14
|
}
|
|
10
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Constructs a new ambient light node.
|
|
18
|
+
*
|
|
19
|
+
* @param {AmbientLight?} [light=null] - The ambient light source.
|
|
20
|
+
*/
|
|
11
21
|
constructor( light = null ) {
|
|
12
22
|
|
|
13
23
|
super( light );
|
|
@@ -7,6 +7,11 @@ import { hash } from '../core/NodeUtils.js';
|
|
|
7
7
|
import { shadow } from './ShadowNode.js';
|
|
8
8
|
import { nodeObject } from '../tsl/TSLCore.js';
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Base class for analytic light nodes.
|
|
12
|
+
*
|
|
13
|
+
* @augments LightingNode
|
|
14
|
+
*/
|
|
10
15
|
class AnalyticLightNode extends LightingNode {
|
|
11
16
|
|
|
12
17
|
static get type() {
|
|
@@ -15,29 +20,92 @@ class AnalyticLightNode extends LightingNode {
|
|
|
15
20
|
|
|
16
21
|
}
|
|
17
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new analytic light node.
|
|
25
|
+
*
|
|
26
|
+
* @param {Light?} [light=null] - The light source.
|
|
27
|
+
*/
|
|
18
28
|
constructor( light = null ) {
|
|
19
29
|
|
|
20
30
|
super();
|
|
21
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The light source.
|
|
34
|
+
*
|
|
35
|
+
* @type {Light?}
|
|
36
|
+
* @default null
|
|
37
|
+
*/
|
|
22
38
|
this.light = light;
|
|
23
39
|
|
|
40
|
+
/**
|
|
41
|
+
* The light's color value.
|
|
42
|
+
*
|
|
43
|
+
* @type {Color}
|
|
44
|
+
*/
|
|
24
45
|
this.color = new Color();
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The light's color node. Points to `colorNode` of the light source, if set. Otherwise
|
|
49
|
+
* it creates a uniform node based on {@link AnalyticLightNode#color}.
|
|
50
|
+
*
|
|
51
|
+
* @type {Node}
|
|
52
|
+
*/
|
|
25
53
|
this.colorNode = ( light && light.colorNode ) || uniform( this.color ).setGroup( renderGroup );
|
|
26
54
|
|
|
55
|
+
/**
|
|
56
|
+
* This property is used to retain a reference to the original value of {@link AnalyticLightNode#colorNode}.
|
|
57
|
+
* The final color node is represented by a different node when using shadows.
|
|
58
|
+
*
|
|
59
|
+
* @type {Node?}
|
|
60
|
+
* @default null
|
|
61
|
+
*/
|
|
27
62
|
this.baseColorNode = null;
|
|
28
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Represents the light's shadow.
|
|
66
|
+
*
|
|
67
|
+
* @type {ShadowNode?}
|
|
68
|
+
* @default null
|
|
69
|
+
*/
|
|
29
70
|
this.shadowNode = null;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Represents the light's shadow color.
|
|
74
|
+
*
|
|
75
|
+
* @type {Node?}
|
|
76
|
+
* @default null
|
|
77
|
+
*/
|
|
30
78
|
this.shadowColorNode = null;
|
|
31
79
|
|
|
80
|
+
/**
|
|
81
|
+
* This flag can be used for type testing.
|
|
82
|
+
*
|
|
83
|
+
* @type {Boolean}
|
|
84
|
+
* @readonly
|
|
85
|
+
* @default true
|
|
86
|
+
*/
|
|
32
87
|
this.isAnalyticLightNode = true;
|
|
33
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Overwritten since analytic light nodes are updated
|
|
91
|
+
* once per frame.
|
|
92
|
+
*
|
|
93
|
+
* @type {String}
|
|
94
|
+
* @default 'frame'
|
|
95
|
+
*/
|
|
34
96
|
this.updateType = NodeUpdateType.FRAME;
|
|
35
97
|
|
|
36
98
|
}
|
|
37
99
|
|
|
38
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Overwrites the default {@link Node#customCacheKey} implementation by including the
|
|
102
|
+
* `light.id` and `light.castShadow` into the cache key.
|
|
103
|
+
*
|
|
104
|
+
* @return {Number} The custom cache key.
|
|
105
|
+
*/
|
|
106
|
+
customCacheKey() {
|
|
39
107
|
|
|
40
|
-
return hash(
|
|
108
|
+
return hash( this.light.id, this.light.castShadow ? 1 : 0 );
|
|
41
109
|
|
|
42
110
|
}
|
|
43
111
|
|
|
@@ -47,12 +115,25 @@ class AnalyticLightNode extends LightingNode {
|
|
|
47
115
|
|
|
48
116
|
}
|
|
49
117
|
|
|
118
|
+
/**
|
|
119
|
+
* Setups the shadow node for this light. The method exists so concrete light classes
|
|
120
|
+
* can setup different types of shadow nodes.
|
|
121
|
+
*
|
|
122
|
+
* @return {ShadowNode} The created shadow node.
|
|
123
|
+
*/
|
|
50
124
|
setupShadowNode() {
|
|
51
125
|
|
|
52
126
|
return shadow( this.light );
|
|
53
127
|
|
|
54
128
|
}
|
|
55
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Setups the shadow for this light. This method is only executed if the light
|
|
132
|
+
* cast shadows and the current build object receives shadows. It incorporates
|
|
133
|
+
* shadows into the lighting computation.
|
|
134
|
+
*
|
|
135
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
136
|
+
*/
|
|
56
137
|
setupShadow( builder ) {
|
|
57
138
|
|
|
58
139
|
const { renderer } = builder;
|
|
@@ -91,6 +172,13 @@ class AnalyticLightNode extends LightingNode {
|
|
|
91
172
|
|
|
92
173
|
}
|
|
93
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Unlike most other nodes, lighting nodes do not return a output node in {@link Node#setup}.
|
|
177
|
+
* The main purpose of lighting nodes is to configure the current {@link LightingModel} and/or
|
|
178
|
+
* invocate the respective interface methods.
|
|
179
|
+
*
|
|
180
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
181
|
+
*/
|
|
94
182
|
setup( builder ) {
|
|
95
183
|
|
|
96
184
|
this.colorNode = this.baseColorNode || this.colorNode;
|
|
@@ -113,6 +201,13 @@ class AnalyticLightNode extends LightingNode {
|
|
|
113
201
|
|
|
114
202
|
}
|
|
115
203
|
|
|
204
|
+
/**
|
|
205
|
+
* The update method is used to update light uniforms per frame.
|
|
206
|
+
* Potentially overwritten in concrete light nodes to update light
|
|
207
|
+
* specific uniforms.
|
|
208
|
+
*
|
|
209
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
210
|
+
*/
|
|
116
211
|
update( /*frame*/ ) {
|
|
117
212
|
|
|
118
213
|
const { light } = this;
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import LightingNode from './LightingNode.js';
|
|
2
2
|
import { cubeMapNode } from '../utils/CubeMapNode.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Represents a basic model for Image-based lighting (IBL). The environment
|
|
6
|
+
* is defined via environment maps in the equirectangular or cube map format.
|
|
7
|
+
* `BasicEnvironmentNode` is intended for non-PBR materials like {@link MeshBasicNodeMaterial}
|
|
8
|
+
* or {@link MeshPhongNodeMaterial}.
|
|
9
|
+
*
|
|
10
|
+
* @augments LightingNode
|
|
11
|
+
*/
|
|
4
12
|
class BasicEnvironmentNode extends LightingNode {
|
|
5
13
|
|
|
6
14
|
static get type() {
|
|
@@ -9,10 +17,21 @@ class BasicEnvironmentNode extends LightingNode {
|
|
|
9
17
|
|
|
10
18
|
}
|
|
11
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new basic environment node.
|
|
22
|
+
*
|
|
23
|
+
* @param {Node} [envNode=null] - A node representing the environment.
|
|
24
|
+
*/
|
|
12
25
|
constructor( envNode = null ) {
|
|
13
26
|
|
|
14
27
|
super();
|
|
15
28
|
|
|
29
|
+
/**
|
|
30
|
+
* A node representing the environment.
|
|
31
|
+
*
|
|
32
|
+
* @type {Node}
|
|
33
|
+
* @default null
|
|
34
|
+
*/
|
|
16
35
|
this.envNode = envNode;
|
|
17
36
|
|
|
18
37
|
}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import LightingNode from './LightingNode.js';
|
|
2
2
|
import { float } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* A specific version of {@link IrradianceNode} that is only relevant
|
|
6
|
+
* for {@link MeshBasicNodeMaterial}. Since the material is unlit, it
|
|
7
|
+
* requires a special scaling factor for the light map.
|
|
8
|
+
*
|
|
9
|
+
* @augments LightingNode
|
|
10
|
+
*/
|
|
4
11
|
class BasicLightMapNode extends LightingNode {
|
|
5
12
|
|
|
6
13
|
static get type() {
|
|
@@ -9,10 +16,20 @@ class BasicLightMapNode extends LightingNode {
|
|
|
9
16
|
|
|
10
17
|
}
|
|
11
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new basic light map node.
|
|
21
|
+
*
|
|
22
|
+
* @param {Node<vec3>?} [lightMapNode=null] - The light map node.
|
|
23
|
+
*/
|
|
12
24
|
constructor( lightMapNode = null ) {
|
|
13
25
|
|
|
14
26
|
super();
|
|
15
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The light map node.
|
|
30
|
+
*
|
|
31
|
+
* @type {Node<vec3>?}
|
|
32
|
+
*/
|
|
16
33
|
this.lightMapNode = lightMapNode;
|
|
17
34
|
|
|
18
35
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import AnalyticLightNode from './AnalyticLightNode.js';
|
|
2
2
|
import { lightTargetDirection } from '../accessors/Lights.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Module for representing directional lights as nodes.
|
|
6
|
+
*
|
|
7
|
+
* @augments AnalyticLightNode
|
|
8
|
+
*/
|
|
4
9
|
class DirectionalLightNode extends AnalyticLightNode {
|
|
5
10
|
|
|
6
11
|
static get type() {
|
|
@@ -9,6 +14,11 @@ class DirectionalLightNode extends AnalyticLightNode {
|
|
|
9
14
|
|
|
10
15
|
}
|
|
11
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new directional light node.
|
|
19
|
+
*
|
|
20
|
+
* @param {DirectionalLight?} [light=null] - The directional light source.
|
|
21
|
+
*/
|
|
12
22
|
constructor( light = null ) {
|
|
13
23
|
|
|
14
24
|
super( light );
|
|
@@ -11,6 +11,13 @@ import { pmremTexture } from '../pmrem/PMREMNode.js';
|
|
|
11
11
|
|
|
12
12
|
const _envNodeCache = new WeakMap();
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Represents a physical model for Image-based lighting (IBL). The environment
|
|
16
|
+
* is defined via environment maps in the equirectangular, cube map or cubeUV (PMREM) format.
|
|
17
|
+
* `EnvironmentNode` is intended for PBR materials like {@link MeshStandardNodeMaterial}.
|
|
18
|
+
*
|
|
19
|
+
* @augments LightingNode
|
|
20
|
+
*/
|
|
14
21
|
class EnvironmentNode extends LightingNode {
|
|
15
22
|
|
|
16
23
|
static get type() {
|
|
@@ -19,10 +26,21 @@ class EnvironmentNode extends LightingNode {
|
|
|
19
26
|
|
|
20
27
|
}
|
|
21
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new environment node.
|
|
31
|
+
*
|
|
32
|
+
* @param {Node} [envNode=null] - A node representing the environment.
|
|
33
|
+
*/
|
|
22
34
|
constructor( envNode = null ) {
|
|
23
35
|
|
|
24
36
|
super();
|
|
25
37
|
|
|
38
|
+
/**
|
|
39
|
+
* A node representing the environment.
|
|
40
|
+
*
|
|
41
|
+
* @type {Node?}
|
|
42
|
+
* @default null
|
|
43
|
+
*/
|
|
26
44
|
this.envNode = envNode;
|
|
27
45
|
|
|
28
46
|
}
|