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
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { float, addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module RemapNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This node allows to remap a node value from one range into another. E.g a value of
|
|
8
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
9
|
+
* `RemapNode` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
4
13
|
class RemapNode extends Node {
|
|
5
14
|
|
|
6
15
|
static get type() {
|
|
@@ -9,16 +18,63 @@ class RemapNode extends Node {
|
|
|
9
18
|
|
|
10
19
|
}
|
|
11
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new remap node.
|
|
23
|
+
*
|
|
24
|
+
* @param {Node} node - The node that should be remapped.
|
|
25
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
26
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
27
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
28
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
29
|
+
*/
|
|
12
30
|
constructor( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
|
|
13
31
|
|
|
14
32
|
super();
|
|
15
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The node that should be remapped.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
16
39
|
this.node = node;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The source or current lower bound of the range.
|
|
43
|
+
*
|
|
44
|
+
* @type {Node}
|
|
45
|
+
*/
|
|
17
46
|
this.inLowNode = inLowNode;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The source or current upper bound of the range.
|
|
50
|
+
*
|
|
51
|
+
* @type {Node}
|
|
52
|
+
*/
|
|
18
53
|
this.inHighNode = inHighNode;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The target lower bound of the range.
|
|
57
|
+
*
|
|
58
|
+
* @type {Node}
|
|
59
|
+
* @default float(0)
|
|
60
|
+
*/
|
|
19
61
|
this.outLowNode = outLowNode;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The target upper bound of the range.
|
|
65
|
+
*
|
|
66
|
+
* @type {Node}
|
|
67
|
+
* @default float(1)
|
|
68
|
+
*/
|
|
20
69
|
this.outHighNode = outHighNode;
|
|
21
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Whether the node value should be clamped before
|
|
73
|
+
* remapping it to the target range.
|
|
74
|
+
*
|
|
75
|
+
* @type {Boolean}
|
|
76
|
+
* @default true
|
|
77
|
+
*/
|
|
22
78
|
this.doClamp = true;
|
|
23
79
|
|
|
24
80
|
}
|
|
@@ -39,7 +95,30 @@ class RemapNode extends Node {
|
|
|
39
95
|
|
|
40
96
|
export default RemapNode;
|
|
41
97
|
|
|
98
|
+
/**
|
|
99
|
+
* TSL function for creating a remap node.
|
|
100
|
+
*
|
|
101
|
+
* @function
|
|
102
|
+
* @param {Node} node - The node that should be remapped.
|
|
103
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
104
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
105
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
106
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
107
|
+
* @returns {RemapNode}
|
|
108
|
+
*/
|
|
42
109
|
export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } );
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* TSL function for creating a remap node, but with enabled clamping.
|
|
113
|
+
*
|
|
114
|
+
* @function
|
|
115
|
+
* @param {Node} node - The node that should be remapped.
|
|
116
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
117
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
118
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
119
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
120
|
+
* @returns {RemapNode}
|
|
121
|
+
*/
|
|
43
122
|
export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode );
|
|
44
123
|
|
|
45
124
|
addMethodChaining( 'remap', remap );
|
|
@@ -2,6 +2,13 @@ import TempNode from '../core/TempNode.js';
|
|
|
2
2
|
import { nodeProxy, vec4, mat2, mat4 } from '../tsl/TSLBase.js';
|
|
3
3
|
import { cos, sin } from '../math/MathNode.js';
|
|
4
4
|
|
|
5
|
+
/** @module RotateNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Applies a rotation to the given position node.
|
|
9
|
+
*
|
|
10
|
+
* @augments TempNode
|
|
11
|
+
*/
|
|
5
12
|
class RotateNode extends TempNode {
|
|
6
13
|
|
|
7
14
|
static get type() {
|
|
@@ -10,15 +17,40 @@ class RotateNode extends TempNode {
|
|
|
10
17
|
|
|
11
18
|
}
|
|
12
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new rotate node.
|
|
22
|
+
*
|
|
23
|
+
* @param {Node} positionNode - The position node.
|
|
24
|
+
* @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
|
|
25
|
+
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
26
|
+
*/
|
|
13
27
|
constructor( positionNode, rotationNode ) {
|
|
14
28
|
|
|
15
29
|
super();
|
|
16
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The position node.
|
|
33
|
+
*
|
|
34
|
+
* @type {Node}
|
|
35
|
+
*/
|
|
17
36
|
this.positionNode = positionNode;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Represents the rotation that is applied to the position node.
|
|
40
|
+
* Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
41
|
+
*
|
|
42
|
+
* @type {Node}
|
|
43
|
+
*/
|
|
18
44
|
this.rotationNode = rotationNode;
|
|
19
45
|
|
|
20
46
|
}
|
|
21
47
|
|
|
48
|
+
/**
|
|
49
|
+
* The type of the {@link RotateNode#positionNode} defines the node's type.
|
|
50
|
+
*
|
|
51
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
52
|
+
* @return {String} The node's type.
|
|
53
|
+
*/
|
|
22
54
|
getNodeType( builder ) {
|
|
23
55
|
|
|
24
56
|
return this.positionNode.getNodeType( builder );
|
|
@@ -60,4 +92,13 @@ class RotateNode extends TempNode {
|
|
|
60
92
|
|
|
61
93
|
export default RotateNode;
|
|
62
94
|
|
|
95
|
+
/**
|
|
96
|
+
* TSL function for creating a rotate node.
|
|
97
|
+
*
|
|
98
|
+
* @function
|
|
99
|
+
* @param {Node} positionNode - The position node.
|
|
100
|
+
* @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
|
|
101
|
+
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
102
|
+
* @returns {RotateNode}
|
|
103
|
+
*/
|
|
63
104
|
export const rotate = /*@__PURE__*/ nodeProxy( RotateNode );
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { vectorComponents } from '../core/constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
6
|
+
* `SetNode` represents a set operation which means it is used to implement any
|
|
7
|
+
* `setXYZW()`, `setRGBA()` and `setSTPQ()` method invocations on node objects.
|
|
8
|
+
* For example:
|
|
9
|
+
* ```js
|
|
10
|
+
* materialLine.colorNode = color( 0, 0, 0 ).setR( float( 1 ) );
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @augments TempNode
|
|
14
|
+
*/
|
|
4
15
|
class SetNode extends TempNode {
|
|
5
16
|
|
|
6
17
|
static get type() {
|
|
@@ -9,16 +20,46 @@ class SetNode extends TempNode {
|
|
|
9
20
|
|
|
10
21
|
}
|
|
11
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new set node.
|
|
25
|
+
*
|
|
26
|
+
* @param {Node} sourceNode - The node that should be updated.
|
|
27
|
+
* @param {String} components - The components that should be updated.
|
|
28
|
+
* @param {Node} targetNode - The value node.
|
|
29
|
+
*/
|
|
12
30
|
constructor( sourceNode, components, targetNode ) {
|
|
13
31
|
|
|
14
32
|
super();
|
|
15
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The node that should be updated.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
16
39
|
this.sourceNode = sourceNode;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The components that should be updated.
|
|
43
|
+
*
|
|
44
|
+
* @type {String}
|
|
45
|
+
*/
|
|
17
46
|
this.components = components;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The value node.
|
|
50
|
+
*
|
|
51
|
+
* @type {Node}
|
|
52
|
+
*/
|
|
18
53
|
this.targetNode = targetNode;
|
|
19
54
|
|
|
20
55
|
}
|
|
21
56
|
|
|
57
|
+
/**
|
|
58
|
+
* This method is overwritten since the node type is inferred from {@link SetNode#sourceNode}.
|
|
59
|
+
*
|
|
60
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
61
|
+
* @return {String} The node type.
|
|
62
|
+
*/
|
|
22
63
|
getNodeType( builder ) {
|
|
23
64
|
|
|
24
65
|
return this.sourceNode.getNodeType( builder );
|
|
@@ -30,7 +71,9 @@ class SetNode extends TempNode {
|
|
|
30
71
|
const { sourceNode, components, targetNode } = this;
|
|
31
72
|
|
|
32
73
|
const sourceType = this.getNodeType( builder );
|
|
33
|
-
|
|
74
|
+
|
|
75
|
+
const componentType = builder.getComponentType( targetNode.getNodeType( builder ) );
|
|
76
|
+
const targetType = builder.getTypeFromLength( components.length, componentType );
|
|
34
77
|
|
|
35
78
|
const targetSnippet = targetNode.build( builder, targetType );
|
|
36
79
|
const sourceSnippet = sourceNode.build( builder, sourceType );
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { vectorComponents } from '../core/constants.js';
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
|
|
4
|
+
const _stringVectorComponents = vectorComponents.join( '' );
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
8
|
+
* `SplitNode` represents a property access operation which means it is
|
|
9
|
+
* used to implement any `.xyzw`, `.rgba` and `stpq` usage on node objects.
|
|
10
|
+
* For example:
|
|
11
|
+
* ```js
|
|
12
|
+
* const redValue = color.r;
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @augments Node
|
|
16
|
+
*/
|
|
6
17
|
class SplitNode extends Node {
|
|
7
18
|
|
|
8
19
|
static get type() {
|
|
@@ -11,17 +22,46 @@ class SplitNode extends Node {
|
|
|
11
22
|
|
|
12
23
|
}
|
|
13
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new split node.
|
|
27
|
+
*
|
|
28
|
+
* @param {Node} node - The node that should be accessed.
|
|
29
|
+
* @param {String} [components='x'] - The components that should be accessed.
|
|
30
|
+
*/
|
|
14
31
|
constructor( node, components = 'x' ) {
|
|
15
32
|
|
|
16
33
|
super();
|
|
17
34
|
|
|
35
|
+
/**
|
|
36
|
+
* The node that should be accessed.
|
|
37
|
+
*
|
|
38
|
+
* @type {Node}
|
|
39
|
+
*/
|
|
18
40
|
this.node = node;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The components that should be accessed.
|
|
44
|
+
*
|
|
45
|
+
* @type {string}
|
|
46
|
+
*/
|
|
19
47
|
this.components = components;
|
|
20
48
|
|
|
49
|
+
/**
|
|
50
|
+
* This flag can be used for type testing.
|
|
51
|
+
*
|
|
52
|
+
* @type {Boolean}
|
|
53
|
+
* @readonly
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
21
56
|
this.isSplitNode = true;
|
|
22
57
|
|
|
23
58
|
}
|
|
24
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Returns the vector length which is computed based on the requested components.
|
|
62
|
+
*
|
|
63
|
+
* @return {Number} The vector length.
|
|
64
|
+
*/
|
|
25
65
|
getVectorLength() {
|
|
26
66
|
|
|
27
67
|
let vectorLength = this.components.length;
|
|
@@ -36,12 +76,24 @@ class SplitNode extends Node {
|
|
|
36
76
|
|
|
37
77
|
}
|
|
38
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Returns the component type of the node's type.
|
|
81
|
+
*
|
|
82
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
83
|
+
* @return {String} The component type.
|
|
84
|
+
*/
|
|
39
85
|
getComponentType( builder ) {
|
|
40
86
|
|
|
41
87
|
return builder.getComponentType( this.node.getNodeType( builder ) );
|
|
42
88
|
|
|
43
89
|
}
|
|
44
90
|
|
|
91
|
+
/**
|
|
92
|
+
* This method is overwritten since the node type is inferred from requested components.
|
|
93
|
+
*
|
|
94
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
95
|
+
* @return {String} The node type.
|
|
96
|
+
*/
|
|
45
97
|
getNodeType( builder ) {
|
|
46
98
|
|
|
47
99
|
return builder.getTypeFromLength( this.components.length, this.getComponentType( builder ) );
|
|
@@ -71,7 +123,7 @@ class SplitNode extends Node {
|
|
|
71
123
|
|
|
72
124
|
const nodeSnippet = node.build( builder, type );
|
|
73
125
|
|
|
74
|
-
if ( this.components.length === nodeTypeLength && this.components ===
|
|
126
|
+
if ( this.components.length === nodeTypeLength && this.components === _stringVectorComponents.slice( 0, this.components.length ) ) {
|
|
75
127
|
|
|
76
128
|
// unnecessary swizzle
|
|
77
129
|
|
|
@@ -2,6 +2,19 @@ import Node from '../core/Node.js';
|
|
|
2
2
|
import { uv } from '../accessors/UV.js';
|
|
3
3
|
import { nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/** @module SpriteSheetUVNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Can be used to compute texture coordinates for animated sprite sheets.
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* const uvNode = spritesheetUV( vec2( 6, 6 ), uv(), time.mul( animationSpeed ) );
|
|
12
|
+
*
|
|
13
|
+
* material.colorNode = texture( spriteSheet, uvNode );
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @augments Node
|
|
17
|
+
*/
|
|
5
18
|
class SpriteSheetUVNode extends Node {
|
|
6
19
|
|
|
7
20
|
static get type() {
|
|
@@ -10,12 +23,36 @@ class SpriteSheetUVNode extends Node {
|
|
|
10
23
|
|
|
11
24
|
}
|
|
12
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new sprite sheet uv node.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
|
|
30
|
+
* @param {Node<vec2>} [uvNode=uv()] - The uv node.
|
|
31
|
+
* @param {Node<float>} [frameNode=float()] - The node that defines the current frame/sprite.
|
|
32
|
+
*/
|
|
13
33
|
constructor( countNode, uvNode = uv(), frameNode = float( 0 ) ) {
|
|
14
34
|
|
|
15
35
|
super( 'vec2' );
|
|
16
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The node that defines the number of sprites in the x and y direction (e.g 6x6).
|
|
39
|
+
*
|
|
40
|
+
* @type {Node<vec2>}
|
|
41
|
+
*/
|
|
17
42
|
this.countNode = countNode;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The uv node.
|
|
46
|
+
*
|
|
47
|
+
* @type {Node<vec2>}
|
|
48
|
+
*/
|
|
18
49
|
this.uvNode = uvNode;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The node that defines the current frame/sprite.
|
|
53
|
+
*
|
|
54
|
+
* @type {Node<float>}
|
|
55
|
+
*/
|
|
19
56
|
this.frameNode = frameNode;
|
|
20
57
|
|
|
21
58
|
}
|
|
@@ -42,4 +79,13 @@ class SpriteSheetUVNode extends Node {
|
|
|
42
79
|
|
|
43
80
|
export default SpriteSheetUVNode;
|
|
44
81
|
|
|
82
|
+
/**
|
|
83
|
+
* TSL function for creating a sprite sheet uv node.
|
|
84
|
+
*
|
|
85
|
+
* @function
|
|
86
|
+
* @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
|
|
87
|
+
* @param {Node<vec2>} [uvNode=uv()] - The uv node.
|
|
88
|
+
* @param {Node<float>} [frameNode=float()] - The node that defines the current frame/sprite.
|
|
89
|
+
* @returns {SpriteSheetUVNode}
|
|
90
|
+
*/
|
|
45
91
|
export const spritesheetUV = /*@__PURE__*/ nodeProxy( SpriteSheetUVNode );
|
|
@@ -3,6 +3,23 @@ import { cameraViewMatrix, cameraProjectionMatrix } from '../accessors/Camera.js
|
|
|
3
3
|
import { positionLocal } from '../accessors/Position.js';
|
|
4
4
|
import { Fn, defined } from '../tsl/TSLBase.js';
|
|
5
5
|
|
|
6
|
+
/** @module SpriteUtils **/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* This can be used to achieve a billboarding behavior for flat meshes. That means they are
|
|
10
|
+
* oriented always towards the camera.
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* material.vertexNode = billboarding();
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @method
|
|
17
|
+
* @param {Object} config - The configuration object.
|
|
18
|
+
* @param {Node<vec3>?} [config.position=null] - Can be used to define the vertex positions in world space.
|
|
19
|
+
* @param {Boolean} [config.horizontal=true] - Whether to follow the camera rotation horizontally or not.
|
|
20
|
+
* @param {Boolean} [config.vertical=false] - Whether to follow the camera rotation vertically or not.
|
|
21
|
+
* @return {Node<vec3>} The updated vertex position in clip space.
|
|
22
|
+
*/
|
|
6
23
|
export const billboarding = /*@__PURE__*/ Fn( ( { position = null, horizontal = true, vertical = false } ) => {
|
|
7
24
|
|
|
8
25
|
let worldMatrix;
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
2
2
|
import ArrayElementNode from './ArrayElementNode.js';
|
|
3
3
|
|
|
4
|
+
/** @module StorageArrayElementNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This class enables element access on instances of {@link StorageBufferNode}.
|
|
8
|
+
* In most cases, it is indirectly used when accessing elements with the
|
|
9
|
+
* {@link StorageBufferNode#element} method.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const position = positionStorage.element( instanceIndex );
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @augments ArrayElementNode
|
|
16
|
+
*/
|
|
4
17
|
class StorageArrayElementNode extends ArrayElementNode {
|
|
5
18
|
|
|
6
19
|
static get type() {
|
|
@@ -9,14 +22,33 @@ class StorageArrayElementNode extends ArrayElementNode {
|
|
|
9
22
|
|
|
10
23
|
}
|
|
11
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs storage buffer element node.
|
|
27
|
+
*
|
|
28
|
+
* @param {StorageBufferNode} storageBufferNode - The storage buffer node.
|
|
29
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
30
|
+
*/
|
|
12
31
|
constructor( storageBufferNode, indexNode ) {
|
|
13
32
|
|
|
14
33
|
super( storageBufferNode, indexNode );
|
|
15
34
|
|
|
35
|
+
/**
|
|
36
|
+
* This flag can be used for type testing.
|
|
37
|
+
*
|
|
38
|
+
* @type {Boolean}
|
|
39
|
+
* @readonly
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
16
42
|
this.isStorageArrayElementNode = true;
|
|
17
43
|
|
|
18
44
|
}
|
|
19
45
|
|
|
46
|
+
/**
|
|
47
|
+
* The storage buffer node.
|
|
48
|
+
*
|
|
49
|
+
* @param {Node} value
|
|
50
|
+
* @type {StorageBufferNode}
|
|
51
|
+
*/
|
|
20
52
|
set storageBufferNode( value ) {
|
|
21
53
|
|
|
22
54
|
this.node = value;
|
|
@@ -87,4 +119,12 @@ class StorageArrayElementNode extends ArrayElementNode {
|
|
|
87
119
|
|
|
88
120
|
export default StorageArrayElementNode;
|
|
89
121
|
|
|
122
|
+
/**
|
|
123
|
+
* TSL function for creating a storage element node.
|
|
124
|
+
*
|
|
125
|
+
* @function
|
|
126
|
+
* @param {StorageBufferNode} storageBufferNode - The storage buffer node.
|
|
127
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
128
|
+
* @returns {StorageArrayElementNode}
|
|
129
|
+
*/
|
|
90
130
|
export const storageElement = /*@__PURE__*/ nodeProxy( StorageArrayElementNode );
|
package/src/nodes/utils/Timer.js
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
2
2
|
import { uniform } from '../core/UniformNode.js';
|
|
3
3
|
|
|
4
|
+
/** @module Timer **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Represents the elapsed time in seconds.
|
|
8
|
+
*
|
|
9
|
+
* @type {UniformNode<float>}
|
|
10
|
+
*/
|
|
4
11
|
export const time = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.time );
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Represents the delta time in seconds.
|
|
15
|
+
*
|
|
16
|
+
* @type {UniformNode<float>}
|
|
17
|
+
*/
|
|
5
18
|
export const deltaTime = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.deltaTime );
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Represents the current frame ID.
|
|
22
|
+
*
|
|
23
|
+
* @type {UniformNode<uint>}
|
|
24
|
+
*/
|
|
6
25
|
export const frameId = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.frameId );
|
|
7
26
|
|
|
8
27
|
// Deprecated
|
|
@@ -5,6 +5,17 @@ import { positionLocal } from '../accessors/Position.js';
|
|
|
5
5
|
import { texture } from '../accessors/TextureNode.js';
|
|
6
6
|
import { nodeProxy, float, vec3 } from '../tsl/TSLBase.js';
|
|
7
7
|
|
|
8
|
+
/** @module TriplanarTexturesNode **/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Can be used for triplanar texture mapping.
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* material.colorNode = triplanarTexture( texture( diffuseMap ) );
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @augments Node
|
|
18
|
+
*/
|
|
8
19
|
class TriplanarTexturesNode extends Node {
|
|
9
20
|
|
|
10
21
|
static get type() {
|
|
@@ -13,17 +24,65 @@ class TriplanarTexturesNode extends Node {
|
|
|
13
24
|
|
|
14
25
|
}
|
|
15
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new triplanar textures node.
|
|
29
|
+
*
|
|
30
|
+
* @param {Node} textureXNode - First texture node.
|
|
31
|
+
* @param {Node?} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
32
|
+
* @param {Node?} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
33
|
+
* @param {Node<float>?} [scaleNode=float(1)] - The scale node.
|
|
34
|
+
* @param {Node<vec3>?} [positionNode=positionLocal] - Vertex positions in local space.
|
|
35
|
+
* @param {Node<vec3>?} [normalNode=normalLocal] - Normals in local space.
|
|
36
|
+
*/
|
|
16
37
|
constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ) {
|
|
17
38
|
|
|
18
39
|
super( 'vec4' );
|
|
19
40
|
|
|
41
|
+
/**
|
|
42
|
+
* First texture node.
|
|
43
|
+
*
|
|
44
|
+
* @type {Node}
|
|
45
|
+
*/
|
|
20
46
|
this.textureXNode = textureXNode;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
50
|
+
*
|
|
51
|
+
* @type {Node}
|
|
52
|
+
* @default null
|
|
53
|
+
*/
|
|
21
54
|
this.textureYNode = textureYNode;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
58
|
+
*
|
|
59
|
+
* @type {Node}
|
|
60
|
+
* @default null
|
|
61
|
+
*/
|
|
22
62
|
this.textureZNode = textureZNode;
|
|
23
63
|
|
|
64
|
+
/**
|
|
65
|
+
* The scale node.
|
|
66
|
+
*
|
|
67
|
+
* @type {Node<float>}
|
|
68
|
+
* @default float(1)
|
|
69
|
+
*/
|
|
24
70
|
this.scaleNode = scaleNode;
|
|
25
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Vertex positions in local space.
|
|
74
|
+
*
|
|
75
|
+
* @type {Node<vec3>}
|
|
76
|
+
* @default positionLocal
|
|
77
|
+
*/
|
|
26
78
|
this.positionNode = positionNode;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Normals in local space.
|
|
82
|
+
*
|
|
83
|
+
* @type {Node<vec3>}
|
|
84
|
+
* @default normalLocal
|
|
85
|
+
*/
|
|
27
86
|
this.normalNode = normalNode;
|
|
28
87
|
|
|
29
88
|
}
|
|
@@ -60,5 +119,30 @@ class TriplanarTexturesNode extends Node {
|
|
|
60
119
|
|
|
61
120
|
export default TriplanarTexturesNode;
|
|
62
121
|
|
|
122
|
+
/**
|
|
123
|
+
* TSL function for creating a triplanar textures node.
|
|
124
|
+
*
|
|
125
|
+
* @function
|
|
126
|
+
* @param {Node} textureXNode - First texture node.
|
|
127
|
+
* @param {Node?} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
128
|
+
* @param {Node?} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
129
|
+
* @param {Node<float>?} [scaleNode=float(1)] - The scale node.
|
|
130
|
+
* @param {Node<vec3>?} [positionNode=positionLocal] - Vertex positions in local space.
|
|
131
|
+
* @param {Node<vec3>?} [normalNode=normalLocal] - Normals in local space.
|
|
132
|
+
* @returns {TriplanarTexturesNode}
|
|
133
|
+
*/
|
|
63
134
|
export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode );
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* TSL function for creating a triplanar textures node.
|
|
138
|
+
*
|
|
139
|
+
* @function
|
|
140
|
+
* @param {Node} textureXNode - First texture node.
|
|
141
|
+
* @param {Node?} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
142
|
+
* @param {Node?} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
143
|
+
* @param {Node<float>?} [scaleNode=float(1)] - The scale node.
|
|
144
|
+
* @param {Node<vec3>?} [positionNode=positionLocal] - Vertex positions in local space.
|
|
145
|
+
* @param {Node<vec3>?} [normalNode=normalLocal] - Normals in local space.
|
|
146
|
+
* @returns {TriplanarTexturesNode}
|
|
147
|
+
*/
|
|
64
148
|
export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
|
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
import { Fn, vec2 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { rotate } from './RotateNode.js';
|
|
3
3
|
|
|
4
|
+
/** @module UVUtils **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Rotates the given uv coordinates around a center point
|
|
8
|
+
*
|
|
9
|
+
* @method
|
|
10
|
+
* @param {Node<vec2>} uv - The uv coordinates.
|
|
11
|
+
* @param {Node<float>} rotation - The rotation defined in radians.
|
|
12
|
+
* @param {Node<vec2>} center - The center of rotation
|
|
13
|
+
* @return {Node<vec2>} The rotated uv coordinates.
|
|
14
|
+
*/
|
|
4
15
|
export const rotateUV = /*@__PURE__*/ Fn( ( [ uv, rotation, center = vec2( 0.5 ) ] ) => {
|
|
5
16
|
|
|
6
17
|
return rotate( uv.sub( center ), rotation ).add( center );
|
|
7
18
|
|
|
8
19
|
} );
|
|
9
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Applies a spherical warping effect to the given uv coordinates.
|
|
23
|
+
*
|
|
24
|
+
* @method
|
|
25
|
+
* @param {Node<vec2>} uv - The uv coordinates.
|
|
26
|
+
* @param {Node<float>} strength - The strength of the effect.
|
|
27
|
+
* @param {Node<vec2>} center - The center point
|
|
28
|
+
* @return {Node<vec2>} The updated uv coordinates.
|
|
29
|
+
*/
|
|
10
30
|
export const spherizeUV = /*@__PURE__*/ Fn( ( [ uv, strength, center = vec2( 0.5 ) ] ) => {
|
|
11
31
|
|
|
12
32
|
const delta = uv.sub( center );
|