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
|
@@ -8,6 +8,16 @@ import { smoothstep } from '../math/MathNode.js';
|
|
|
8
8
|
import { uniformArray } from './UniformArrayNode.js';
|
|
9
9
|
import { builtin } from './BuiltinNode.js';
|
|
10
10
|
|
|
11
|
+
/** @module ClippingNode **/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* ```
|
|
15
|
+
* This node is used in {@link NodeMaterial} to setup the clipping
|
|
16
|
+
* which can happen hardware-accelerated (if supported) and optionally
|
|
17
|
+
* use alpha-to-coverage for anti-aliasing clipped edges.
|
|
18
|
+
* ```
|
|
19
|
+
* @augments Node
|
|
20
|
+
*/
|
|
11
21
|
class ClippingNode extends Node {
|
|
12
22
|
|
|
13
23
|
static get type() {
|
|
@@ -16,14 +26,32 @@ class ClippingNode extends Node {
|
|
|
16
26
|
|
|
17
27
|
}
|
|
18
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new clipping node.
|
|
31
|
+
*
|
|
32
|
+
* @param {('default'|'hardware'|'alphaToCoverage')} [scope='default'] - The node's scope. Similar to other nodes,
|
|
33
|
+
* the selected scope influences the behavior of the node and what type of code is generated.
|
|
34
|
+
*/
|
|
19
35
|
constructor( scope = ClippingNode.DEFAULT ) {
|
|
20
36
|
|
|
21
37
|
super();
|
|
22
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The node's scope. Similar to other nodes, the selected scope influences
|
|
41
|
+
* the behavior of the node and what type of code is generated.
|
|
42
|
+
*
|
|
43
|
+
* @type {('default'|'hardware'|'alphaToCoverage')}
|
|
44
|
+
*/
|
|
23
45
|
this.scope = scope;
|
|
24
46
|
|
|
25
47
|
}
|
|
26
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Setups the node depending on the selected scope.
|
|
51
|
+
*
|
|
52
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
53
|
+
* @return {Node} The result node.
|
|
54
|
+
*/
|
|
27
55
|
setup( builder ) {
|
|
28
56
|
|
|
29
57
|
super.setup( builder );
|
|
@@ -49,6 +77,13 @@ class ClippingNode extends Node {
|
|
|
49
77
|
|
|
50
78
|
}
|
|
51
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Setups alpha to coverage.
|
|
82
|
+
*
|
|
83
|
+
* @param {Array<Vector4>} intersectionPlanes - The intersection planes.
|
|
84
|
+
* @param {Array<Vector4>} unionPlanes - The union planes.
|
|
85
|
+
* @return {Node} The result node.
|
|
86
|
+
*/
|
|
52
87
|
setupAlphaToCoverage( intersectionPlanes, unionPlanes ) {
|
|
53
88
|
|
|
54
89
|
return Fn( () => {
|
|
@@ -60,7 +95,7 @@ class ClippingNode extends Node {
|
|
|
60
95
|
|
|
61
96
|
const numUnionPlanes = unionPlanes.length;
|
|
62
97
|
|
|
63
|
-
if (
|
|
98
|
+
if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
|
|
64
99
|
|
|
65
100
|
const clippingPlanes = uniformArray( unionPlanes );
|
|
66
101
|
|
|
@@ -107,13 +142,20 @@ class ClippingNode extends Node {
|
|
|
107
142
|
|
|
108
143
|
}
|
|
109
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Setups the default clipping.
|
|
147
|
+
*
|
|
148
|
+
* @param {Array<Vector4>} intersectionPlanes - The intersection planes.
|
|
149
|
+
* @param {Array<Vector4>} unionPlanes - The union planes.
|
|
150
|
+
* @return {Node} The result node.
|
|
151
|
+
*/
|
|
110
152
|
setupDefault( intersectionPlanes, unionPlanes ) {
|
|
111
153
|
|
|
112
154
|
return Fn( () => {
|
|
113
155
|
|
|
114
156
|
const numUnionPlanes = unionPlanes.length;
|
|
115
157
|
|
|
116
|
-
if (
|
|
158
|
+
if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
|
|
117
159
|
|
|
118
160
|
const clippingPlanes = uniformArray( unionPlanes );
|
|
119
161
|
|
|
@@ -148,6 +190,13 @@ class ClippingNode extends Node {
|
|
|
148
190
|
|
|
149
191
|
}
|
|
150
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Setups hardware clipping.
|
|
195
|
+
*
|
|
196
|
+
* @param {Array<Vector4>} unionPlanes - The union planes.
|
|
197
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
198
|
+
* @return {Node} The result node.
|
|
199
|
+
*/
|
|
151
200
|
setupHardwareClipping( unionPlanes, builder ) {
|
|
152
201
|
|
|
153
202
|
const numUnionPlanes = unionPlanes.length;
|
|
@@ -180,6 +229,26 @@ ClippingNode.HARDWARE = 'hardware';
|
|
|
180
229
|
|
|
181
230
|
export default ClippingNode;
|
|
182
231
|
|
|
232
|
+
/**
|
|
233
|
+
* TSL function for setting up the default clipping logic.
|
|
234
|
+
*
|
|
235
|
+
* @function
|
|
236
|
+
* @returns {ClippingNode}
|
|
237
|
+
*/
|
|
183
238
|
export const clipping = () => nodeObject( new ClippingNode() );
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* TSL function for setting up alpha to coverage.
|
|
242
|
+
*
|
|
243
|
+
* @function
|
|
244
|
+
* @returns {ClippingNode}
|
|
245
|
+
*/
|
|
184
246
|
export const clippingAlpha = () => nodeObject( new ClippingNode( ClippingNode.ALPHA_TO_COVERAGE ) );
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* TSL function for setting up hardware-based clipping.
|
|
250
|
+
*
|
|
251
|
+
* @function
|
|
252
|
+
* @returns {ClippingNode}
|
|
253
|
+
*/
|
|
185
254
|
export const hardwareClipping = () => nodeObject( new ClippingNode( ClippingNode.HARDWARE ) );
|
|
@@ -4,6 +4,13 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
|
4
4
|
|
|
5
5
|
import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem } from '../../constants.js';
|
|
6
6
|
|
|
7
|
+
/** @module CubeTextureNode **/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This type of uniform node represents a cube texture.
|
|
11
|
+
*
|
|
12
|
+
* @augments module:TextureNode~TextureNode
|
|
13
|
+
*/
|
|
7
14
|
class CubeTextureNode extends TextureNode {
|
|
8
15
|
|
|
9
16
|
static get type() {
|
|
@@ -12,20 +19,46 @@ class CubeTextureNode extends TextureNode {
|
|
|
12
19
|
|
|
13
20
|
}
|
|
14
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new cube texture node.
|
|
24
|
+
*
|
|
25
|
+
* @param {CubeTexture} value - The cube texture.
|
|
26
|
+
* @param {Node<vec3>?} [uvNode=null] - The uv node.
|
|
27
|
+
* @param {Node<int>?} [levelNode=null] - The level node.
|
|
28
|
+
* @param {Node<float>?} [biasNode=null] - The bias node.
|
|
29
|
+
*/
|
|
15
30
|
constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
|
|
16
31
|
|
|
17
32
|
super( value, uvNode, levelNode, biasNode );
|
|
18
33
|
|
|
34
|
+
/**
|
|
35
|
+
* This flag can be used for type testing.
|
|
36
|
+
*
|
|
37
|
+
* @type {Boolean}
|
|
38
|
+
* @readonly
|
|
39
|
+
* @default true
|
|
40
|
+
*/
|
|
19
41
|
this.isCubeTextureNode = true;
|
|
20
42
|
|
|
21
43
|
}
|
|
22
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Overwrites the default implementation to return a fixed value `'cubeTexture'`.
|
|
47
|
+
*
|
|
48
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
49
|
+
* @return {String} The input type.
|
|
50
|
+
*/
|
|
23
51
|
getInputType( /*builder*/ ) {
|
|
24
52
|
|
|
25
53
|
return 'cubeTexture';
|
|
26
54
|
|
|
27
55
|
}
|
|
28
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Returns a default uvs based on the mapping type of the cube texture.
|
|
59
|
+
*
|
|
60
|
+
* @return {Node<vec3>} The default uv attribute.
|
|
61
|
+
*/
|
|
29
62
|
getDefaultUV() {
|
|
30
63
|
|
|
31
64
|
const texture = this.value;
|
|
@@ -48,8 +81,22 @@ class CubeTextureNode extends TextureNode {
|
|
|
48
81
|
|
|
49
82
|
}
|
|
50
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Overwritten with an empty implementation since the `updateMatrix` flag is ignored
|
|
86
|
+
* for cube textures. The uv transformation matrix is not applied to cube textures.
|
|
87
|
+
*
|
|
88
|
+
* @param {Boolean} value - The update toggle.
|
|
89
|
+
*/
|
|
51
90
|
setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode
|
|
52
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Setups the uv node. Depending on the backend as well as the texture type, it might be necessary
|
|
94
|
+
* to modify the uv node for correct sampling.
|
|
95
|
+
*
|
|
96
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
97
|
+
* @param {Node} uvNode - The uv node to setup.
|
|
98
|
+
* @return {Node} The updated uv node.
|
|
99
|
+
*/
|
|
53
100
|
setupUV( builder, uvNode ) {
|
|
54
101
|
|
|
55
102
|
const texture = this.value;
|
|
@@ -66,6 +113,13 @@ class CubeTextureNode extends TextureNode {
|
|
|
66
113
|
|
|
67
114
|
}
|
|
68
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Generates the uv code snippet.
|
|
118
|
+
*
|
|
119
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
120
|
+
* @param {Node} cubeUV - The uv node to generate code for.
|
|
121
|
+
* @return {String} The generated code snippet.
|
|
122
|
+
*/
|
|
69
123
|
generateUV( builder, cubeUV ) {
|
|
70
124
|
|
|
71
125
|
return cubeUV.build( builder, 'vec3' );
|
|
@@ -76,4 +130,14 @@ class CubeTextureNode extends TextureNode {
|
|
|
76
130
|
|
|
77
131
|
export default CubeTextureNode;
|
|
78
132
|
|
|
133
|
+
/**
|
|
134
|
+
* TSL function for creating a cube texture node.
|
|
135
|
+
*
|
|
136
|
+
* @function
|
|
137
|
+
* @param {CubeTexture} value - The cube texture.
|
|
138
|
+
* @param {Node<vec3>?} [uvNode=null] - The uv node.
|
|
139
|
+
* @param {Node<int>?} [levelNode=null] - The level node.
|
|
140
|
+
* @param {Node<float>?} [biasNode=null] - The bias node.
|
|
141
|
+
* @returns {CubeTextureNode}
|
|
142
|
+
*/
|
|
79
143
|
export const cubeTexture = /*@__PURE__*/ nodeProxy( CubeTextureNode );
|
|
@@ -12,6 +12,16 @@ import { InstancedInterleavedBuffer } from '../../core/InstancedInterleavedBuffe
|
|
|
12
12
|
import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
|
|
13
13
|
import { DynamicDrawUsage } from '../../constants.js';
|
|
14
14
|
|
|
15
|
+
/** @module InstanceNode **/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* This node implements the vertex shader logic which is required
|
|
19
|
+
* when rendering 3D objects via instancing. The code makes sure
|
|
20
|
+
* vertex positions, normals and colors can be modified via instanced
|
|
21
|
+
* data.
|
|
22
|
+
*
|
|
23
|
+
* @augments Node
|
|
24
|
+
*/
|
|
15
25
|
class InstanceNode extends Node {
|
|
16
26
|
|
|
17
27
|
static get type() {
|
|
@@ -20,25 +30,84 @@ class InstanceNode extends Node {
|
|
|
20
30
|
|
|
21
31
|
}
|
|
22
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a new instance node.
|
|
35
|
+
*
|
|
36
|
+
* @param {Number} count - The number of instances.
|
|
37
|
+
* @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
38
|
+
* @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
39
|
+
*/
|
|
23
40
|
constructor( count, instanceMatrix, instanceColor ) {
|
|
24
41
|
|
|
25
42
|
super( 'void' );
|
|
26
43
|
|
|
44
|
+
/**
|
|
45
|
+
* The number of instances.
|
|
46
|
+
*
|
|
47
|
+
* @type {Number}
|
|
48
|
+
*/
|
|
27
49
|
this.count = count;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Instanced buffer attribute representing the transformation of instances.
|
|
53
|
+
*
|
|
54
|
+
* @type {InstancedBufferAttribute}
|
|
55
|
+
*/
|
|
28
56
|
this.instanceMatrix = instanceMatrix;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Instanced buffer attribute representing the color of instances.
|
|
60
|
+
*
|
|
61
|
+
* @type {InstancedBufferAttribute}
|
|
62
|
+
*/
|
|
29
63
|
this.instanceColor = instanceColor;
|
|
30
64
|
|
|
65
|
+
/**
|
|
66
|
+
* The node that represents the instance matrix data.
|
|
67
|
+
*
|
|
68
|
+
* @type {Node}
|
|
69
|
+
*/
|
|
31
70
|
this.instanceMatrixNode = null;
|
|
32
71
|
|
|
72
|
+
/**
|
|
73
|
+
* The node that represents the instance color data.
|
|
74
|
+
*
|
|
75
|
+
* @type {Node}
|
|
76
|
+
*/
|
|
33
77
|
this.instanceColorNode = null;
|
|
34
78
|
|
|
79
|
+
/**
|
|
80
|
+
* The update type is set to `frame` since an update
|
|
81
|
+
* of instanced buffer data must be checked per frame.
|
|
82
|
+
*
|
|
83
|
+
* @type {String}
|
|
84
|
+
* @default 'frame'
|
|
85
|
+
*/
|
|
35
86
|
this.updateType = NodeUpdateType.FRAME;
|
|
36
87
|
|
|
88
|
+
/**
|
|
89
|
+
* A reference to a buffer that is used by `instanceMatrixNode`.
|
|
90
|
+
*
|
|
91
|
+
* @type {InstancedInterleavedBuffer}
|
|
92
|
+
*/
|
|
37
93
|
this.buffer = null;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* A reference to a buffer that is used by `instanceColorNode`.
|
|
97
|
+
*
|
|
98
|
+
* @type {InstancedInterleavedBuffer}
|
|
99
|
+
*/
|
|
38
100
|
this.bufferColor = null;
|
|
39
101
|
|
|
40
102
|
}
|
|
41
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Setups the internal buffers and nodes and assigns the transformed vertex data
|
|
106
|
+
* to predefined node variables for accumulation. That follows the same patterns
|
|
107
|
+
* like with morph and skinning nodes.
|
|
108
|
+
*
|
|
109
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
110
|
+
*/
|
|
42
111
|
setup( builder ) {
|
|
43
112
|
|
|
44
113
|
const { count, instanceMatrix, instanceColor } = this;
|
|
@@ -118,15 +187,20 @@ class InstanceNode extends Node {
|
|
|
118
187
|
|
|
119
188
|
}
|
|
120
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Checks if the internal buffers required an update.
|
|
192
|
+
*
|
|
193
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
194
|
+
*/
|
|
121
195
|
update( /*frame*/ ) {
|
|
122
196
|
|
|
123
|
-
if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer
|
|
197
|
+
if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer !== null && this.instanceMatrix.version !== this.buffer.version ) {
|
|
124
198
|
|
|
125
199
|
this.buffer.version = this.instanceMatrix.version;
|
|
126
200
|
|
|
127
201
|
}
|
|
128
202
|
|
|
129
|
-
if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor
|
|
203
|
+
if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor !== null && this.instanceColor.version !== this.bufferColor.version ) {
|
|
130
204
|
|
|
131
205
|
this.bufferColor.version = this.instanceColor.version;
|
|
132
206
|
|
|
@@ -138,4 +212,13 @@ class InstanceNode extends Node {
|
|
|
138
212
|
|
|
139
213
|
export default InstanceNode;
|
|
140
214
|
|
|
215
|
+
/**
|
|
216
|
+
* TSL function for creating an instance node.
|
|
217
|
+
*
|
|
218
|
+
* @function
|
|
219
|
+
* @param {Number} count - The number of instances.
|
|
220
|
+
* @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
221
|
+
* @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
222
|
+
* @returns {InstanceNode}
|
|
223
|
+
*/
|
|
141
224
|
export const instance = /*@__PURE__*/ nodeProxy( InstanceNode );
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import InstanceNode from './InstanceNode.js';
|
|
2
2
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module InstancedMeshNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This is a special version of `InstanceNode` which requires the usage of {@link InstancedMesh}.
|
|
8
|
+
* It allows an easier setup of the instance node.
|
|
9
|
+
*
|
|
10
|
+
* @augments module:InstanceNode~InstanceNode
|
|
11
|
+
*/
|
|
4
12
|
class InstancedMeshNode extends InstanceNode {
|
|
5
13
|
|
|
6
14
|
static get type() {
|
|
@@ -9,13 +17,23 @@ class InstancedMeshNode extends InstanceNode {
|
|
|
9
17
|
|
|
10
18
|
}
|
|
11
19
|
|
|
12
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new instanced mesh node.
|
|
22
|
+
*
|
|
23
|
+
* @param {InstancedMesh} instancedMesh - The instanced mesh.
|
|
24
|
+
*/
|
|
25
|
+
constructor( instancedMesh ) {
|
|
13
26
|
|
|
14
|
-
const { count, instanceMatrix, instanceColor } =
|
|
27
|
+
const { count, instanceMatrix, instanceColor } = instancedMesh;
|
|
15
28
|
|
|
16
29
|
super( count, instanceMatrix, instanceColor );
|
|
17
30
|
|
|
18
|
-
|
|
31
|
+
/**
|
|
32
|
+
* A reference to the instanced mesh.
|
|
33
|
+
*
|
|
34
|
+
* @type {InstancedMesh}
|
|
35
|
+
*/
|
|
36
|
+
this.instancedMesh = instancedMesh;
|
|
19
37
|
|
|
20
38
|
}
|
|
21
39
|
|
|
@@ -23,4 +41,11 @@ class InstancedMeshNode extends InstanceNode {
|
|
|
23
41
|
|
|
24
42
|
export default InstancedMeshNode;
|
|
25
43
|
|
|
44
|
+
/**
|
|
45
|
+
* TSL function for creating an instanced mesh node.
|
|
46
|
+
*
|
|
47
|
+
* @function
|
|
48
|
+
* @param {InstancedMesh} instancedMesh - The instancedMesh.
|
|
49
|
+
* @returns {InstancedMeshNode}
|
|
50
|
+
*/
|
|
26
51
|
export const instancedMesh = /*@__PURE__*/ nodeProxy( InstancedMeshNode );
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import MaterialNode from './MaterialNode.js';
|
|
2
2
|
import { nodeImmutable } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module InstancedPointsMaterialNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* An extension of material node to provide pre-defined
|
|
8
|
+
* TSL objects in context of `InstancedPointsNodeMaterial`.
|
|
9
|
+
*
|
|
10
|
+
* @augments module:MaterialNode~MaterialNode
|
|
11
|
+
*/
|
|
4
12
|
class InstancedPointsMaterialNode extends MaterialNode {
|
|
5
13
|
|
|
6
14
|
static get type() {
|
|
@@ -21,4 +29,9 @@ InstancedPointsMaterialNode.POINT_WIDTH = 'pointWidth';
|
|
|
21
29
|
|
|
22
30
|
export default InstancedPointsMaterialNode;
|
|
23
31
|
|
|
32
|
+
/**
|
|
33
|
+
* TSL object that represents the point width of the current points material.
|
|
34
|
+
*
|
|
35
|
+
* @type {InstancedPointsMaterialNode<float>}
|
|
36
|
+
*/
|
|
24
37
|
export const materialPointWidth = /*@__PURE__*/ nodeImmutable( InstancedPointsMaterialNode, InstancedPointsMaterialNode.POINT_WIDTH );
|
|
@@ -4,6 +4,8 @@ import { Vector3 } from '../../math/Vector3.js';
|
|
|
4
4
|
import { cameraViewMatrix } from './Camera.js';
|
|
5
5
|
import { positionWorld } from './Position.js';
|
|
6
6
|
|
|
7
|
+
/** @module Lights **/
|
|
8
|
+
|
|
7
9
|
let uniformsLib;
|
|
8
10
|
|
|
9
11
|
function getLightData( light ) {
|
|
@@ -18,13 +20,24 @@ function getLightData( light ) {
|
|
|
18
20
|
|
|
19
21
|
}
|
|
20
22
|
|
|
23
|
+
/**
|
|
24
|
+
* TSL function for getting a shadow matrix uniform node for the given light.
|
|
25
|
+
*
|
|
26
|
+
* @function
|
|
27
|
+
* @param {Light} light -The light source.
|
|
28
|
+
* @returns {UniformNode<mat4>} The shadow matrix uniform node.
|
|
29
|
+
*/
|
|
21
30
|
export function lightShadowMatrix( light ) {
|
|
22
31
|
|
|
23
32
|
const data = getLightData( light );
|
|
24
33
|
|
|
25
34
|
return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( () => {
|
|
26
35
|
|
|
27
|
-
|
|
36
|
+
if ( light.castShadow !== true ) {
|
|
37
|
+
|
|
38
|
+
light.shadow.updateMatrices( light );
|
|
39
|
+
|
|
40
|
+
}
|
|
28
41
|
|
|
29
42
|
return light.shadow.matrix;
|
|
30
43
|
|
|
@@ -32,6 +45,14 @@ export function lightShadowMatrix( light ) {
|
|
|
32
45
|
|
|
33
46
|
}
|
|
34
47
|
|
|
48
|
+
/**
|
|
49
|
+
* TSL function for getting projected uv coordinates for the given light.
|
|
50
|
+
* Relevant when using maps with spot lights.
|
|
51
|
+
*
|
|
52
|
+
* @function
|
|
53
|
+
* @param {Light} light -The light source.
|
|
54
|
+
* @returns {Node<vec3>} The projected uvs.
|
|
55
|
+
*/
|
|
35
56
|
export function lightProjectionUV( light ) {
|
|
36
57
|
|
|
37
58
|
const data = getLightData( light );
|
|
@@ -49,6 +70,13 @@ export function lightProjectionUV( light ) {
|
|
|
49
70
|
|
|
50
71
|
}
|
|
51
72
|
|
|
73
|
+
/**
|
|
74
|
+
* TSL function for getting the position in world space for the given light.
|
|
75
|
+
*
|
|
76
|
+
* @function
|
|
77
|
+
* @param {Light} light -The light source.
|
|
78
|
+
* @returns {UniformNode<vec3>} The light's position in world space.
|
|
79
|
+
*/
|
|
52
80
|
export function lightPosition( light ) {
|
|
53
81
|
|
|
54
82
|
const data = getLightData( light );
|
|
@@ -57,6 +85,13 @@ export function lightPosition( light ) {
|
|
|
57
85
|
|
|
58
86
|
}
|
|
59
87
|
|
|
88
|
+
/**
|
|
89
|
+
* TSL function for getting the light target position in world space for the given light.
|
|
90
|
+
*
|
|
91
|
+
* @function
|
|
92
|
+
* @param {Light} light -The light source.
|
|
93
|
+
* @returns {UniformNode<vec3>} The light target position in world space.
|
|
94
|
+
*/
|
|
60
95
|
export function lightTargetPosition( light ) {
|
|
61
96
|
|
|
62
97
|
const data = getLightData( light );
|
|
@@ -65,6 +100,13 @@ export function lightTargetPosition( light ) {
|
|
|
65
100
|
|
|
66
101
|
}
|
|
67
102
|
|
|
103
|
+
/**
|
|
104
|
+
* TSL function for getting the position in view space for the given light.
|
|
105
|
+
*
|
|
106
|
+
* @function
|
|
107
|
+
* @param {Light} light -The light source.
|
|
108
|
+
* @returns {UniformNode<vec3>} The light's position in view space.
|
|
109
|
+
*/
|
|
68
110
|
export function lightViewPosition( light ) {
|
|
69
111
|
|
|
70
112
|
const data = getLightData( light );
|
|
@@ -80,4 +122,11 @@ export function lightViewPosition( light ) {
|
|
|
80
122
|
|
|
81
123
|
}
|
|
82
124
|
|
|
125
|
+
/**
|
|
126
|
+
* TSL function for getting the light target direction for the given light.
|
|
127
|
+
*
|
|
128
|
+
* @function
|
|
129
|
+
* @param {Light} light -The light source.
|
|
130
|
+
* @returns {Node<vec3>} The light's target direction.
|
|
131
|
+
*/
|
|
83
132
|
export const lightTargetDirection = ( light ) => cameraViewMatrix.transformDirection( lightPosition( light ).sub( lightTargetPosition( light ) ) );
|