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
|
@@ -3,6 +3,13 @@ import { scriptableValue } from './ScriptableValueNode.js';
|
|
|
3
3
|
import { nodeProxy, float } from '../tsl/TSLBase.js';
|
|
4
4
|
import { hashArray, hashString } from '../core/NodeUtils.js';
|
|
5
5
|
|
|
6
|
+
/** @module ScriptableNode **/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A Map-like data structure for managing resources of scriptable nodes.
|
|
10
|
+
*
|
|
11
|
+
* @augments Map
|
|
12
|
+
*/
|
|
6
13
|
class Resources extends Map {
|
|
7
14
|
|
|
8
15
|
get( key, callback = null, ...params ) {
|
|
@@ -58,8 +65,49 @@ class Parameters {
|
|
|
58
65
|
|
|
59
66
|
}
|
|
60
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Defines the resouces (e.g. namespaces) of scriptable nodes.
|
|
70
|
+
*
|
|
71
|
+
* @type {Resources}
|
|
72
|
+
*/
|
|
61
73
|
export const ScriptableNodeResources = new Resources();
|
|
62
74
|
|
|
75
|
+
/**
|
|
76
|
+
* This type of node allows to implement nodes with custom scripts. The script
|
|
77
|
+
* section is represented as an instance of `CodeNode` written with JavaScript.
|
|
78
|
+
* The script itself must adhere to a specific structure.
|
|
79
|
+
*
|
|
80
|
+
* - main(): Executed once by default and every time `node.needsUpdate` is set.
|
|
81
|
+
* - layout: The layout object defines the script's interface (inputs and outputs).
|
|
82
|
+
*
|
|
83
|
+
* ```js
|
|
84
|
+
* ScriptableNodeResources.set( 'TSL', TSL );
|
|
85
|
+
*
|
|
86
|
+
* const scriptableNode = scriptable( js( `
|
|
87
|
+
* layout = {
|
|
88
|
+
* outputType: 'node',
|
|
89
|
+
* elements: [
|
|
90
|
+
* { name: 'source', inputType: 'node' },
|
|
91
|
+
* ]
|
|
92
|
+
* };
|
|
93
|
+
*
|
|
94
|
+
* const { mul, oscSine } = TSL;
|
|
95
|
+
*
|
|
96
|
+
* function main() {
|
|
97
|
+
* const source = parameters.get( 'source' ) || float();
|
|
98
|
+
* return mul( source, oscSine() ) );
|
|
99
|
+
* }
|
|
100
|
+
*
|
|
101
|
+
* ` ) );
|
|
102
|
+
*
|
|
103
|
+
* scriptableNode.setParameter( 'source', color( 1, 0, 0 ) );
|
|
104
|
+
*
|
|
105
|
+
* const material = new THREE.MeshBasicNodeMaterial();
|
|
106
|
+
* material.colorNode = scriptableNode;
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* @augments Node
|
|
110
|
+
*/
|
|
63
111
|
class ScriptableNode extends Node {
|
|
64
112
|
|
|
65
113
|
static get type() {
|
|
@@ -68,11 +116,30 @@ class ScriptableNode extends Node {
|
|
|
68
116
|
|
|
69
117
|
}
|
|
70
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Constructs a new scriptable node.
|
|
121
|
+
*
|
|
122
|
+
* @param {CodeNode?} [codeNode=null] - The code node.
|
|
123
|
+
* @param {Object} [parameters={}] - The parameters definition.
|
|
124
|
+
*/
|
|
71
125
|
constructor( codeNode = null, parameters = {} ) {
|
|
72
126
|
|
|
73
127
|
super();
|
|
74
128
|
|
|
129
|
+
/**
|
|
130
|
+
* The code node.
|
|
131
|
+
*
|
|
132
|
+
* @type {CodeNode?}
|
|
133
|
+
* @default null
|
|
134
|
+
*/
|
|
75
135
|
this.codeNode = codeNode;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* The parameters definition.
|
|
139
|
+
*
|
|
140
|
+
* @type {Object}
|
|
141
|
+
* @default {}
|
|
142
|
+
*/
|
|
76
143
|
this.parameters = parameters;
|
|
77
144
|
|
|
78
145
|
this._local = new Resources();
|
|
@@ -86,34 +153,68 @@ class ScriptableNode extends Node {
|
|
|
86
153
|
|
|
87
154
|
this.onRefresh = this.onRefresh.bind( this );
|
|
88
155
|
|
|
156
|
+
/**
|
|
157
|
+
* This flag can be used for type testing.
|
|
158
|
+
*
|
|
159
|
+
* @type {Boolean}
|
|
160
|
+
* @readonly
|
|
161
|
+
* @default true
|
|
162
|
+
*/
|
|
89
163
|
this.isScriptableNode = true;
|
|
90
164
|
|
|
91
165
|
}
|
|
92
166
|
|
|
167
|
+
/**
|
|
168
|
+
* The source code of the scriptable node.
|
|
169
|
+
*
|
|
170
|
+
* @type {String}
|
|
171
|
+
*/
|
|
93
172
|
get source() {
|
|
94
173
|
|
|
95
174
|
return this.codeNode ? this.codeNode.code : '';
|
|
96
175
|
|
|
97
176
|
}
|
|
98
177
|
|
|
178
|
+
/**
|
|
179
|
+
* Sets the reference of a local script variable.
|
|
180
|
+
*
|
|
181
|
+
* @param {String} name - The variable name.
|
|
182
|
+
* @param {Object} value - The reference to set.
|
|
183
|
+
* @return {Resources} The resource map
|
|
184
|
+
*/
|
|
99
185
|
setLocal( name, value ) {
|
|
100
186
|
|
|
101
187
|
return this._local.set( name, value );
|
|
102
188
|
|
|
103
189
|
}
|
|
104
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Gets the value of a local script variable.
|
|
193
|
+
*
|
|
194
|
+
* @param {String} name - The variable name.
|
|
195
|
+
* @return {Object} The value.
|
|
196
|
+
*/
|
|
105
197
|
getLocal( name ) {
|
|
106
198
|
|
|
107
199
|
return this._local.get( name );
|
|
108
200
|
|
|
109
201
|
}
|
|
110
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Event listener for the `refresh` event.
|
|
205
|
+
*/
|
|
111
206
|
onRefresh() {
|
|
112
207
|
|
|
113
208
|
this._refresh();
|
|
114
209
|
|
|
115
210
|
}
|
|
116
211
|
|
|
212
|
+
/**
|
|
213
|
+
* Returns an input from the layout with the given id/name.
|
|
214
|
+
*
|
|
215
|
+
* @param {String} id - The id/name of the input.
|
|
216
|
+
* @return {Object} The element entry.
|
|
217
|
+
*/
|
|
117
218
|
getInputLayout( id ) {
|
|
118
219
|
|
|
119
220
|
for ( const element of this.getLayout() ) {
|
|
@@ -128,6 +229,12 @@ class ScriptableNode extends Node {
|
|
|
128
229
|
|
|
129
230
|
}
|
|
130
231
|
|
|
232
|
+
/**
|
|
233
|
+
* Returns an output from the layout with the given id/name.
|
|
234
|
+
*
|
|
235
|
+
* @param {String} id - The id/name of the output.
|
|
236
|
+
* @return {Object} The element entry.
|
|
237
|
+
*/
|
|
131
238
|
getOutputLayout( id ) {
|
|
132
239
|
|
|
133
240
|
for ( const element of this.getLayout() ) {
|
|
@@ -142,6 +249,13 @@ class ScriptableNode extends Node {
|
|
|
142
249
|
|
|
143
250
|
}
|
|
144
251
|
|
|
252
|
+
/**
|
|
253
|
+
* Defines a script output for the given name and value.
|
|
254
|
+
*
|
|
255
|
+
* @param {String} name - The name of the output.
|
|
256
|
+
* @param {Node} value - The node value.
|
|
257
|
+
* @return {ScriptableNode} A reference to this node.
|
|
258
|
+
*/
|
|
145
259
|
setOutput( name, value ) {
|
|
146
260
|
|
|
147
261
|
const outputs = this._outputs;
|
|
@@ -160,18 +274,37 @@ class ScriptableNode extends Node {
|
|
|
160
274
|
|
|
161
275
|
}
|
|
162
276
|
|
|
277
|
+
/**
|
|
278
|
+
* Returns a script output for the given name.
|
|
279
|
+
*
|
|
280
|
+
* @param {String} name - The name of the output.
|
|
281
|
+
* @return {ScriptableValueNode} The node value.
|
|
282
|
+
*/
|
|
163
283
|
getOutput( name ) {
|
|
164
284
|
|
|
165
285
|
return this._outputs[ name ];
|
|
166
286
|
|
|
167
287
|
}
|
|
168
288
|
|
|
289
|
+
/**
|
|
290
|
+
* Returns a paramater for the given name
|
|
291
|
+
*
|
|
292
|
+
* @param {String} name - The name of the parameter.
|
|
293
|
+
* @return {ScriptableValueNode} The node value.
|
|
294
|
+
*/
|
|
169
295
|
getParameter( name ) {
|
|
170
296
|
|
|
171
297
|
return this.parameters[ name ];
|
|
172
298
|
|
|
173
299
|
}
|
|
174
300
|
|
|
301
|
+
/**
|
|
302
|
+
* Sets a value for the given parameter name.
|
|
303
|
+
*
|
|
304
|
+
* @param {String} name - The parameter name.
|
|
305
|
+
* @param {Any} value - The parameter value.
|
|
306
|
+
* @return {ScriptableNode} A reference to this node.
|
|
307
|
+
*/
|
|
175
308
|
setParameter( name, value ) {
|
|
176
309
|
|
|
177
310
|
const parameters = this.parameters;
|
|
@@ -205,12 +338,24 @@ class ScriptableNode extends Node {
|
|
|
205
338
|
|
|
206
339
|
}
|
|
207
340
|
|
|
341
|
+
/**
|
|
342
|
+
* Returns the value of this node which is the value of
|
|
343
|
+
* the default output.
|
|
344
|
+
*
|
|
345
|
+
* @return {Node} The value.
|
|
346
|
+
*/
|
|
208
347
|
getValue() {
|
|
209
348
|
|
|
210
349
|
return this.getDefaultOutput().getValue();
|
|
211
350
|
|
|
212
351
|
}
|
|
213
352
|
|
|
353
|
+
/**
|
|
354
|
+
* Deletes a parameter from the script.
|
|
355
|
+
*
|
|
356
|
+
* @param {String} name - The parameter to remove.
|
|
357
|
+
* @return {ScriptableNode} A reference to this node.
|
|
358
|
+
*/
|
|
214
359
|
deleteParameter( name ) {
|
|
215
360
|
|
|
216
361
|
let valueNode = this.parameters[ name ];
|
|
@@ -227,6 +372,11 @@ class ScriptableNode extends Node {
|
|
|
227
372
|
|
|
228
373
|
}
|
|
229
374
|
|
|
375
|
+
/**
|
|
376
|
+
* Deletes all parameters from the script.
|
|
377
|
+
*
|
|
378
|
+
* @return {ScriptableNode} A reference to this node.
|
|
379
|
+
*/
|
|
230
380
|
clearParameters() {
|
|
231
381
|
|
|
232
382
|
for ( const name of Object.keys( this.parameters ) ) {
|
|
@@ -241,6 +391,13 @@ class ScriptableNode extends Node {
|
|
|
241
391
|
|
|
242
392
|
}
|
|
243
393
|
|
|
394
|
+
/**
|
|
395
|
+
* Calls a function from the script.
|
|
396
|
+
*
|
|
397
|
+
* @param {String} name - The function name.
|
|
398
|
+
* @param {...Any} params - A list of parameters.
|
|
399
|
+
* @return {Any} The result of the function call.
|
|
400
|
+
*/
|
|
244
401
|
call( name, ...params ) {
|
|
245
402
|
|
|
246
403
|
const object = this.getObject();
|
|
@@ -254,6 +411,13 @@ class ScriptableNode extends Node {
|
|
|
254
411
|
|
|
255
412
|
}
|
|
256
413
|
|
|
414
|
+
/**
|
|
415
|
+
* Asynchronously calls a function from the script.
|
|
416
|
+
*
|
|
417
|
+
* @param {String} name - The function name.
|
|
418
|
+
* @param {...Any} params - A list of parameters.
|
|
419
|
+
* @return {Any} The result of the function call.
|
|
420
|
+
*/
|
|
257
421
|
async callAsync( name, ...params ) {
|
|
258
422
|
|
|
259
423
|
const object = this.getObject();
|
|
@@ -267,12 +431,23 @@ class ScriptableNode extends Node {
|
|
|
267
431
|
|
|
268
432
|
}
|
|
269
433
|
|
|
434
|
+
/**
|
|
435
|
+
* Overwritten since the node types is inferred from the script's output.
|
|
436
|
+
*
|
|
437
|
+
* @param {NodeBuilder} builder - The current node builder
|
|
438
|
+
* @return {String} The node type.
|
|
439
|
+
*/
|
|
270
440
|
getNodeType( builder ) {
|
|
271
441
|
|
|
272
442
|
return this.getDefaultOutputNode().getNodeType( builder );
|
|
273
443
|
|
|
274
444
|
}
|
|
275
445
|
|
|
446
|
+
/**
|
|
447
|
+
* Refreshes the script node.
|
|
448
|
+
*
|
|
449
|
+
* @param {String?} [output=null] - An optional output.
|
|
450
|
+
*/
|
|
276
451
|
refresh( output = null ) {
|
|
277
452
|
|
|
278
453
|
if ( output !== null ) {
|
|
@@ -287,6 +462,11 @@ class ScriptableNode extends Node {
|
|
|
287
462
|
|
|
288
463
|
}
|
|
289
464
|
|
|
465
|
+
/**
|
|
466
|
+
* Returns an object representation of the script.
|
|
467
|
+
*
|
|
468
|
+
* @return {Object} The result object.
|
|
469
|
+
*/
|
|
290
470
|
getObject() {
|
|
291
471
|
|
|
292
472
|
if ( this.needsUpdate ) this.dispose();
|
|
@@ -302,7 +482,7 @@ class ScriptableNode extends Node {
|
|
|
302
482
|
const THREE = ScriptableNodeResources.get( 'THREE' );
|
|
303
483
|
const TSL = ScriptableNodeResources.get( 'TSL' );
|
|
304
484
|
|
|
305
|
-
const method = this.getMethod(
|
|
485
|
+
const method = this.getMethod();
|
|
306
486
|
const params = [ parameters, this._local, ScriptableNodeResources, refresh, setOutput, THREE, TSL ];
|
|
307
487
|
|
|
308
488
|
this._object = method( ...params );
|
|
@@ -368,12 +548,22 @@ class ScriptableNode extends Node {
|
|
|
368
548
|
|
|
369
549
|
}
|
|
370
550
|
|
|
551
|
+
/**
|
|
552
|
+
* Returns the layout of the script.
|
|
553
|
+
*
|
|
554
|
+
* @return {Object} The script's layout.
|
|
555
|
+
*/
|
|
371
556
|
getLayout() {
|
|
372
557
|
|
|
373
558
|
return this.getObject().layout;
|
|
374
559
|
|
|
375
560
|
}
|
|
376
561
|
|
|
562
|
+
/**
|
|
563
|
+
* Returns default node output of the script.
|
|
564
|
+
*
|
|
565
|
+
* @return {Node} The default node output.
|
|
566
|
+
*/
|
|
377
567
|
getDefaultOutputNode() {
|
|
378
568
|
|
|
379
569
|
const output = this.getDefaultOutput().value;
|
|
@@ -388,12 +578,22 @@ class ScriptableNode extends Node {
|
|
|
388
578
|
|
|
389
579
|
}
|
|
390
580
|
|
|
581
|
+
/**
|
|
582
|
+
* Returns default output of the script.
|
|
583
|
+
*
|
|
584
|
+
* @return {ScriptableValueNode} The default output.
|
|
585
|
+
*/
|
|
391
586
|
getDefaultOutput() {
|
|
392
587
|
|
|
393
588
|
return this._exec()._output;
|
|
394
589
|
|
|
395
590
|
}
|
|
396
591
|
|
|
592
|
+
/**
|
|
593
|
+
* Returns a function created from the node's script.
|
|
594
|
+
*
|
|
595
|
+
* @return {Function} The function representing the node's code.
|
|
596
|
+
*/
|
|
397
597
|
getMethod() {
|
|
398
598
|
|
|
399
599
|
if ( this.needsUpdate ) this.dispose();
|
|
@@ -418,6 +618,9 @@ class ScriptableNode extends Node {
|
|
|
418
618
|
|
|
419
619
|
}
|
|
420
620
|
|
|
621
|
+
/**
|
|
622
|
+
* Frees all internal resources.
|
|
623
|
+
*/
|
|
421
624
|
dispose() {
|
|
422
625
|
|
|
423
626
|
if ( this._method === null ) return;
|
|
@@ -470,6 +673,12 @@ class ScriptableNode extends Node {
|
|
|
470
673
|
|
|
471
674
|
}
|
|
472
675
|
|
|
676
|
+
/**
|
|
677
|
+
* Executes the `main` function of the script.
|
|
678
|
+
*
|
|
679
|
+
* @private
|
|
680
|
+
* @return {ScriptableNode} A reference to this node.
|
|
681
|
+
*/
|
|
473
682
|
_exec() {
|
|
474
683
|
|
|
475
684
|
if ( this.codeNode === null ) return this;
|
|
@@ -488,6 +697,11 @@ class ScriptableNode extends Node {
|
|
|
488
697
|
|
|
489
698
|
}
|
|
490
699
|
|
|
700
|
+
/**
|
|
701
|
+
* Executes the refresh.
|
|
702
|
+
*
|
|
703
|
+
* @private
|
|
704
|
+
*/
|
|
491
705
|
_refresh() {
|
|
492
706
|
|
|
493
707
|
this.needsUpdate = true;
|
|
@@ -502,4 +716,12 @@ class ScriptableNode extends Node {
|
|
|
502
716
|
|
|
503
717
|
export default ScriptableNode;
|
|
504
718
|
|
|
719
|
+
/**
|
|
720
|
+
* TSL function for creating a scriptable node.
|
|
721
|
+
*
|
|
722
|
+
* @function
|
|
723
|
+
* @param {CodeNode?} [codeNode=null] - The code node.
|
|
724
|
+
* @param {Object} [parameters={}] - The parameters definition.
|
|
725
|
+
* @returns {ScriptableNode}
|
|
726
|
+
*/
|
|
505
727
|
export const scriptable = /*@__PURE__*/ nodeProxy( ScriptableNode );
|
|
@@ -4,6 +4,13 @@ import { nodeProxy, float } from '../tsl/TSLBase.js';
|
|
|
4
4
|
|
|
5
5
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
6
6
|
|
|
7
|
+
/** @module ScriptableValueNode **/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `ScriptableNode` uses this class to manage script inputs and outputs.
|
|
11
|
+
*
|
|
12
|
+
* @augments Node
|
|
13
|
+
*/
|
|
7
14
|
class ScriptableValueNode extends Node {
|
|
8
15
|
|
|
9
16
|
static get type() {
|
|
@@ -12,22 +19,72 @@ class ScriptableValueNode extends Node {
|
|
|
12
19
|
|
|
13
20
|
}
|
|
14
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new scriptable node.
|
|
24
|
+
*
|
|
25
|
+
* @param {Any} [value=null] - The value.
|
|
26
|
+
*/
|
|
15
27
|
constructor( value = null ) {
|
|
16
28
|
|
|
17
29
|
super();
|
|
18
30
|
|
|
31
|
+
/**
|
|
32
|
+
* A reference to the value.
|
|
33
|
+
*
|
|
34
|
+
* @private
|
|
35
|
+
* @default null
|
|
36
|
+
*/
|
|
19
37
|
this._value = value;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Depending on the type of `_value`, this property might cache parsed data.
|
|
41
|
+
*
|
|
42
|
+
* @private
|
|
43
|
+
* @default null
|
|
44
|
+
*/
|
|
20
45
|
this._cache = null;
|
|
21
46
|
|
|
47
|
+
/**
|
|
48
|
+
* If this node represents an input, this property represents the input type.
|
|
49
|
+
*
|
|
50
|
+
* @type {String?}
|
|
51
|
+
* @default null
|
|
52
|
+
*/
|
|
22
53
|
this.inputType = null;
|
|
23
|
-
this.outpuType = null;
|
|
24
54
|
|
|
55
|
+
/**
|
|
56
|
+
* If this node represents an output, this property represents the output type.
|
|
57
|
+
*
|
|
58
|
+
* @type {String?}
|
|
59
|
+
* @default null
|
|
60
|
+
*/
|
|
61
|
+
this.outputType = null;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* An event dispatcher for managing events.
|
|
65
|
+
*
|
|
66
|
+
* @type {EventDispatcher}
|
|
67
|
+
*/
|
|
25
68
|
this.events = new EventDispatcher();
|
|
26
69
|
|
|
70
|
+
/**
|
|
71
|
+
* This flag can be used for type testing.
|
|
72
|
+
*
|
|
73
|
+
* @type {Boolean}
|
|
74
|
+
* @readonly
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
27
77
|
this.isScriptableValueNode = true;
|
|
28
78
|
|
|
29
79
|
}
|
|
30
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Whether this node represents an output or not.
|
|
83
|
+
*
|
|
84
|
+
* @type {Boolean}
|
|
85
|
+
* @readonly
|
|
86
|
+
* @default true
|
|
87
|
+
*/
|
|
31
88
|
get isScriptableOutputNode() {
|
|
32
89
|
|
|
33
90
|
return this.outputType !== null;
|
|
@@ -54,18 +111,32 @@ class ScriptableValueNode extends Node {
|
|
|
54
111
|
|
|
55
112
|
}
|
|
56
113
|
|
|
114
|
+
/**
|
|
115
|
+
* The node's value.
|
|
116
|
+
*
|
|
117
|
+
* @type {Any}
|
|
118
|
+
*/
|
|
57
119
|
get value() {
|
|
58
120
|
|
|
59
121
|
return this._value;
|
|
60
122
|
|
|
61
123
|
}
|
|
62
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Dispatches the `refresh` event.
|
|
127
|
+
*/
|
|
63
128
|
refresh() {
|
|
64
129
|
|
|
65
130
|
this.events.dispatchEvent( { type: 'refresh' } );
|
|
66
131
|
|
|
67
132
|
}
|
|
68
133
|
|
|
134
|
+
/**
|
|
135
|
+
* The `value` property usually represents a node or even binary data in form of array buffers.
|
|
136
|
+
* In this case, this method tries to return the actual value behind the complex type.
|
|
137
|
+
*
|
|
138
|
+
* @return {Any} The value.
|
|
139
|
+
*/
|
|
69
140
|
getValue() {
|
|
70
141
|
|
|
71
142
|
const value = this.value;
|
|
@@ -93,6 +164,12 @@ class ScriptableValueNode extends Node {
|
|
|
93
164
|
|
|
94
165
|
}
|
|
95
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Overwritten since the node type is inferred from the value.
|
|
169
|
+
*
|
|
170
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
171
|
+
* @return {String} The node type.
|
|
172
|
+
*/
|
|
96
173
|
getNodeType( builder ) {
|
|
97
174
|
|
|
98
175
|
return this.value && this.value.isNode ? this.value.getNodeType( builder ) : 'float';
|
|
@@ -167,4 +244,11 @@ class ScriptableValueNode extends Node {
|
|
|
167
244
|
|
|
168
245
|
export default ScriptableValueNode;
|
|
169
246
|
|
|
247
|
+
/**
|
|
248
|
+
* TSL function for creating a scriptable value node.
|
|
249
|
+
*
|
|
250
|
+
* @function
|
|
251
|
+
* @param {Any} [value=null] - The value.
|
|
252
|
+
* @returns {ScriptableValueNode}
|
|
253
|
+
*/
|
|
170
254
|
export const scriptableValue = /*@__PURE__*/ nodeProxy( ScriptableValueNode );
|
|
@@ -2,6 +2,14 @@ import TempNode from '../core/TempNode.js';
|
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
import { vectorComponents } from '../core/constants.js';
|
|
4
4
|
|
|
5
|
+
/** @module AssignNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* These node represents an assign operation. Meaning a node is assigned
|
|
9
|
+
* to another node.
|
|
10
|
+
*
|
|
11
|
+
* @augments TempNode
|
|
12
|
+
*/
|
|
5
13
|
class AssignNode extends TempNode {
|
|
6
14
|
|
|
7
15
|
static get type() {
|
|
@@ -10,15 +18,38 @@ class AssignNode extends TempNode {
|
|
|
10
18
|
|
|
11
19
|
}
|
|
12
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new assign node.
|
|
23
|
+
*
|
|
24
|
+
* @param {Node} targetNode - The target node.
|
|
25
|
+
* @param {Node} sourceNode - The source type.
|
|
26
|
+
*/
|
|
13
27
|
constructor( targetNode, sourceNode ) {
|
|
14
28
|
|
|
15
29
|
super();
|
|
16
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The target node.
|
|
33
|
+
*
|
|
34
|
+
* @type {Node}
|
|
35
|
+
*/
|
|
17
36
|
this.targetNode = targetNode;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The source node.
|
|
40
|
+
*
|
|
41
|
+
* @type {Node}
|
|
42
|
+
*/
|
|
18
43
|
this.sourceNode = sourceNode;
|
|
19
44
|
|
|
20
45
|
}
|
|
21
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Whether this node is used more than once in context of other nodes. This method
|
|
49
|
+
* is overwritten since it always returns `false` (assigns are unique).
|
|
50
|
+
*
|
|
51
|
+
* @return {Boolean} A flag that indicates if there is more than one dependency to other nodes. Always `false`.
|
|
52
|
+
*/
|
|
22
53
|
hasDependencies() {
|
|
23
54
|
|
|
24
55
|
return false;
|
|
@@ -31,6 +62,13 @@ class AssignNode extends TempNode {
|
|
|
31
62
|
|
|
32
63
|
}
|
|
33
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Whether a split is required when assigning source to target. This can happen when the component length of
|
|
67
|
+
* target and source data type does not match.
|
|
68
|
+
*
|
|
69
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
70
|
+
* @return {Boolean} Whether a split is required when assigning source to target.
|
|
71
|
+
*/
|
|
34
72
|
needsSplitAssign( builder ) {
|
|
35
73
|
|
|
36
74
|
const { targetNode } = this;
|
|
@@ -38,9 +76,9 @@ class AssignNode extends TempNode {
|
|
|
38
76
|
if ( builder.isAvailable( 'swizzleAssign' ) === false && targetNode.isSplitNode && targetNode.components.length > 1 ) {
|
|
39
77
|
|
|
40
78
|
const targetLength = builder.getTypeLength( targetNode.node.getNodeType( builder ) );
|
|
41
|
-
const
|
|
79
|
+
const assignDifferentVector = vectorComponents.join( '' ).slice( 0, targetLength ) !== targetNode.components;
|
|
42
80
|
|
|
43
|
-
return
|
|
81
|
+
return assignDifferentVector;
|
|
44
82
|
|
|
45
83
|
}
|
|
46
84
|
|
|
@@ -126,6 +164,14 @@ class AssignNode extends TempNode {
|
|
|
126
164
|
|
|
127
165
|
export default AssignNode;
|
|
128
166
|
|
|
167
|
+
/**
|
|
168
|
+
* TSL function for creating an assign node.
|
|
169
|
+
*
|
|
170
|
+
* @function
|
|
171
|
+
* @param {Node} targetNode - The target node.
|
|
172
|
+
* @param {Node} sourceNode - The source type.
|
|
173
|
+
* @returns {AssignNode}
|
|
174
|
+
*/
|
|
129
175
|
export const assign = /*@__PURE__*/ nodeProxy( AssignNode );
|
|
130
176
|
|
|
131
177
|
addMethodChaining( 'assign', assign );
|