super-three 0.171.0 → 0.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -1,5 +1,41 @@
|
|
|
1
|
+
|
|
1
2
|
import Node from './Node.js';
|
|
3
|
+
import { getLengthFromType } from './NodeUtils.js';
|
|
4
|
+
|
|
5
|
+
/** @module StructTypeNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Generates a layout for struct members.
|
|
9
|
+
* This function takes an object representing struct members and returns an array of member layouts.
|
|
10
|
+
* Each member layout includes the member's name, type, and whether it is atomic.
|
|
11
|
+
*
|
|
12
|
+
* @param {Object.<string, string|Object>} members - An object where keys are member names and values are either types (as strings) or objects with type and atomic properties.
|
|
13
|
+
* @returns {Array.<{name: string, type: string, atomic: boolean}>} An array of member layouts.
|
|
14
|
+
*/
|
|
15
|
+
function getMembersLayout( members ) {
|
|
16
|
+
|
|
17
|
+
return Object.entries( members ).map( ( [ name, value ] ) => {
|
|
18
|
+
|
|
19
|
+
if ( typeof value === 'string' ) {
|
|
20
|
+
|
|
21
|
+
return { name, type: value, atomic: false };
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return { name, type: value.type, atomic: value.atomic || false };
|
|
2
26
|
|
|
27
|
+
} );
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Represents a struct type node in the node-based system.
|
|
33
|
+
* This class is used to define and manage the layout and types of struct members.
|
|
34
|
+
* It extends the base Node class and provides methods to get the length of the struct,
|
|
35
|
+
* retrieve member types, and generate the struct type for a builder.
|
|
36
|
+
*
|
|
37
|
+
* @augments Node
|
|
38
|
+
*/
|
|
3
39
|
class StructTypeNode extends Node {
|
|
4
40
|
|
|
5
41
|
static get type() {
|
|
@@ -8,18 +44,81 @@ class StructTypeNode extends Node {
|
|
|
8
44
|
|
|
9
45
|
}
|
|
10
46
|
|
|
11
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Creates an instance of StructTypeNode.
|
|
49
|
+
*
|
|
50
|
+
* @param {Object} membersLayout - The layout of the members for the struct.
|
|
51
|
+
* @param {string} [name=null] - The optional name of the struct.
|
|
52
|
+
*/
|
|
53
|
+
constructor( membersLayout, name = null ) {
|
|
54
|
+
|
|
55
|
+
super( 'struct' );
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The layout of the members for the struct
|
|
59
|
+
*
|
|
60
|
+
* @type {Array.<{name: string, type: string, atomic: boolean}>}
|
|
61
|
+
*/
|
|
62
|
+
this.membersLayout = getMembersLayout( membersLayout );
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The name of the struct.
|
|
66
|
+
*
|
|
67
|
+
* @type {String}
|
|
68
|
+
* @default null
|
|
69
|
+
*/
|
|
70
|
+
this.name = name;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* This flag can be used for type testing.
|
|
74
|
+
*
|
|
75
|
+
* @type {Boolean}
|
|
76
|
+
* @readonly
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
79
|
+
this.isStructLayoutNode = true;
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Returns the length of the struct.
|
|
85
|
+
* The length is calculated by summing the lengths of the struct's members.
|
|
86
|
+
*
|
|
87
|
+
* @returns {Number} The length of the struct.
|
|
88
|
+
*/
|
|
89
|
+
getLength() {
|
|
90
|
+
|
|
91
|
+
let length = 0;
|
|
92
|
+
|
|
93
|
+
for ( const member of this.membersLayout ) {
|
|
94
|
+
|
|
95
|
+
length += getLengthFromType( member.type );
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return length;
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
getMemberType( builder, name ) {
|
|
104
|
+
|
|
105
|
+
const member = this.membersLayout.find( m => m.name === name );
|
|
106
|
+
|
|
107
|
+
return member ? member.type : 'void';
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
getNodeType( builder ) {
|
|
12
112
|
|
|
13
|
-
|
|
113
|
+
const structType = builder.getStructTypeFromNode( this, this.membersLayout, this.name );
|
|
14
114
|
|
|
15
|
-
|
|
16
|
-
this.isStructTypeNode = true;
|
|
115
|
+
return structType.name;
|
|
17
116
|
|
|
18
117
|
}
|
|
19
118
|
|
|
20
|
-
|
|
119
|
+
generate( builder ) {
|
|
21
120
|
|
|
22
|
-
return this.
|
|
121
|
+
return this.getNodeType( builder );
|
|
23
122
|
|
|
24
123
|
}
|
|
25
124
|
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This module uses cache management to create temporary variables
|
|
5
|
+
* if the node is used more than once to prevent duplicate calculations.
|
|
6
|
+
*
|
|
7
|
+
* The class acts as a base class for many other nodes types.
|
|
8
|
+
*
|
|
9
|
+
* @augments Node
|
|
10
|
+
*/
|
|
3
11
|
class TempNode extends Node {
|
|
4
12
|
|
|
5
13
|
static get type() {
|
|
@@ -8,14 +16,32 @@ class TempNode extends Node {
|
|
|
8
16
|
|
|
9
17
|
}
|
|
10
18
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a temp node.
|
|
21
|
+
*
|
|
22
|
+
* @param {String?} nodeType - The node type.
|
|
23
|
+
*/
|
|
24
|
+
constructor( nodeType = null ) {
|
|
25
|
+
|
|
26
|
+
super( nodeType );
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* This flag can be used for type testing.
|
|
30
|
+
*
|
|
31
|
+
* @type {Boolean}
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
15
35
|
this.isTempNode = true;
|
|
16
36
|
|
|
17
37
|
}
|
|
18
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Whether this node is used more than once in context of other nodes.
|
|
41
|
+
*
|
|
42
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
43
|
+
* @return {Boolean} A flag that indicates if there is more than one dependency to other nodes.
|
|
44
|
+
*/
|
|
19
45
|
hasDependencies( builder ) {
|
|
20
46
|
|
|
21
47
|
return builder.getDataFromNode( this ).usageCount > 1;
|
|
@@ -42,7 +68,7 @@ class TempNode extends Node {
|
|
|
42
68
|
const nodeVar = builder.getVarFromNode( this, null, type );
|
|
43
69
|
const propertyName = builder.getPropertyName( nodeVar );
|
|
44
70
|
|
|
45
|
-
builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
|
|
71
|
+
builder.addLineFlowCode( `${ propertyName } = ${ snippet }`, this );
|
|
46
72
|
|
|
47
73
|
nodeData.snippet = snippet;
|
|
48
74
|
nodeData.propertyName = propertyName;
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
|
|
3
|
+
/** @module UniformGroupNode **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This node can be used to group single instances of {@link UniformNode}
|
|
7
|
+
* and manage them as a uniform buffer.
|
|
8
|
+
*
|
|
9
|
+
* In most cases, the predefined nodes `objectGroup`, `renderGroup` and `frameGroup`
|
|
10
|
+
* will be used when defining the {@link UniformNode#groupNode} property.
|
|
11
|
+
*
|
|
12
|
+
* - `objectGroup`: Uniform buffer per object.
|
|
13
|
+
* - `renderGroup`: Shared uniform buffer, updated once per render call.
|
|
14
|
+
* - `frameGroup`: Shared uniform buffer, updated once per frame.
|
|
15
|
+
*
|
|
16
|
+
* @augments Node
|
|
17
|
+
*/
|
|
3
18
|
class UniformGroupNode extends Node {
|
|
4
19
|
|
|
5
20
|
static get type() {
|
|
@@ -8,22 +23,49 @@ class UniformGroupNode extends Node {
|
|
|
8
23
|
|
|
9
24
|
}
|
|
10
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new uniform group node.
|
|
28
|
+
*
|
|
29
|
+
* @param {String} name - The name of the uniform group node.
|
|
30
|
+
* @param {Boolean} [shared=false] - Whether this uniform group node is shared or not.
|
|
31
|
+
* @param {Number} [order=1] - Influences the internal sorting.
|
|
32
|
+
*/
|
|
11
33
|
constructor( name, shared = false, order = 1 ) {
|
|
12
34
|
|
|
13
35
|
super( 'string' );
|
|
14
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The name of the uniform group node.
|
|
39
|
+
*
|
|
40
|
+
* @type {String}
|
|
41
|
+
*/
|
|
15
42
|
this.name = name;
|
|
16
|
-
this.version = 0;
|
|
17
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Whether this uniform group node is shared or not.
|
|
46
|
+
*
|
|
47
|
+
* @type {Boolean}
|
|
48
|
+
* @default false
|
|
49
|
+
*/
|
|
18
50
|
this.shared = shared;
|
|
19
|
-
this.order = order;
|
|
20
|
-
this.isUniformGroup = true;
|
|
21
51
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Influences the internal sorting.
|
|
54
|
+
* TODO: Add details when this property should be changed.
|
|
55
|
+
*
|
|
56
|
+
* @type {Number}
|
|
57
|
+
* @default 1
|
|
58
|
+
*/
|
|
59
|
+
this.order = order;
|
|
25
60
|
|
|
26
|
-
|
|
61
|
+
/**
|
|
62
|
+
* This flag can be used for type testing.
|
|
63
|
+
*
|
|
64
|
+
* @type {Boolean}
|
|
65
|
+
* @readonly
|
|
66
|
+
* @default true
|
|
67
|
+
*/
|
|
68
|
+
this.isUniformGroup = true;
|
|
27
69
|
|
|
28
70
|
}
|
|
29
71
|
|
|
@@ -51,9 +93,42 @@ class UniformGroupNode extends Node {
|
|
|
51
93
|
|
|
52
94
|
export default UniformGroupNode;
|
|
53
95
|
|
|
96
|
+
/**
|
|
97
|
+
* TSL function for creating a uniform group node with the given name.
|
|
98
|
+
*
|
|
99
|
+
* @function
|
|
100
|
+
* @param {String} name - The name of the uniform group node.
|
|
101
|
+
* @returns {UniformGroupNode}
|
|
102
|
+
*/
|
|
54
103
|
export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* TSL function for creating a shared uniform group node with the given name and order.
|
|
107
|
+
*
|
|
108
|
+
* @function
|
|
109
|
+
* @param {String} name - The name of the uniform group node.
|
|
110
|
+
* @param {Number} [order=0] - Influences the internal sorting.
|
|
111
|
+
* @returns {UniformGroupNode}
|
|
112
|
+
*/
|
|
55
113
|
export const sharedUniformGroup = ( name, order = 0 ) => new UniformGroupNode( name, true, order );
|
|
56
114
|
|
|
115
|
+
/**
|
|
116
|
+
* TSL object that represents a shared uniform group node which is updated once per frame.
|
|
117
|
+
*
|
|
118
|
+
* @type {UniformGroupNode}
|
|
119
|
+
*/
|
|
57
120
|
export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* TSL object that represents a shared uniform group node which is updated once per render.
|
|
124
|
+
*
|
|
125
|
+
* @type {UniformGroupNode}
|
|
126
|
+
*/
|
|
58
127
|
export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* TSL object that represents a uniform group node which is updated once per object.
|
|
131
|
+
*
|
|
132
|
+
* @type {UniformGroupNode}
|
|
133
|
+
*/
|
|
59
134
|
export const objectGroup = /*@__PURE__*/ uniformGroup( 'object' );
|
|
@@ -2,6 +2,13 @@ import InputNode from './InputNode.js';
|
|
|
2
2
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
3
|
import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
|
+
/** @module UniformNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Class for representing a uniform.
|
|
9
|
+
*
|
|
10
|
+
* @augments InputNode
|
|
11
|
+
*/
|
|
5
12
|
class UniformNode extends InputNode {
|
|
6
13
|
|
|
7
14
|
static get type() {
|
|
@@ -10,17 +17,50 @@ class UniformNode extends InputNode {
|
|
|
10
17
|
|
|
11
18
|
}
|
|
12
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new uniform node.
|
|
22
|
+
*
|
|
23
|
+
* @param {Any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).
|
|
24
|
+
* @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
25
|
+
*/
|
|
13
26
|
constructor( value, nodeType = null ) {
|
|
14
27
|
|
|
15
28
|
super( value, nodeType );
|
|
16
29
|
|
|
30
|
+
/**
|
|
31
|
+
* This flag can be used for type testing.
|
|
32
|
+
*
|
|
33
|
+
* @type {Boolean}
|
|
34
|
+
* @readonly
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
17
37
|
this.isUniformNode = true;
|
|
18
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The name or label of the uniform.
|
|
41
|
+
*
|
|
42
|
+
* @type {String}
|
|
43
|
+
* @default ''
|
|
44
|
+
*/
|
|
19
45
|
this.name = '';
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The uniform group of this uniform. By default, uniforms are
|
|
49
|
+
* managed per object but they might belong to a shared group
|
|
50
|
+
* which is updated per frame or render call.
|
|
51
|
+
*
|
|
52
|
+
* @type {UniformGroupNode}
|
|
53
|
+
*/
|
|
20
54
|
this.groupNode = objectGroup;
|
|
21
55
|
|
|
22
56
|
}
|
|
23
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Sets the {@link UniformNode#name} property.
|
|
60
|
+
*
|
|
61
|
+
* @param {String} name - The name of the uniform.
|
|
62
|
+
* @return {UniformNode} A reference to this node.
|
|
63
|
+
*/
|
|
24
64
|
label( name ) {
|
|
25
65
|
|
|
26
66
|
this.name = name;
|
|
@@ -29,6 +69,12 @@ class UniformNode extends InputNode {
|
|
|
29
69
|
|
|
30
70
|
}
|
|
31
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Sets the {@link UniformNode#groupNode} property.
|
|
74
|
+
*
|
|
75
|
+
* @param {UniformGroupNode} group - The uniform group.
|
|
76
|
+
* @return {UniformNode} A reference to this node.
|
|
77
|
+
*/
|
|
32
78
|
setGroup( group ) {
|
|
33
79
|
|
|
34
80
|
this.groupNode = group;
|
|
@@ -37,12 +83,24 @@ class UniformNode extends InputNode {
|
|
|
37
83
|
|
|
38
84
|
}
|
|
39
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Returns the {@link UniformNode#groupNode}.
|
|
88
|
+
*
|
|
89
|
+
* @return {UniformGroupNode} The uniform group.
|
|
90
|
+
*/
|
|
40
91
|
getGroup() {
|
|
41
92
|
|
|
42
93
|
return this.groupNode;
|
|
43
94
|
|
|
44
95
|
}
|
|
45
96
|
|
|
97
|
+
/**
|
|
98
|
+
* By default, this method returns the result of {@link Node#getHash} but derived
|
|
99
|
+
* classes might overwrite this method with a different implementation.
|
|
100
|
+
*
|
|
101
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
102
|
+
* @return {String} The uniform hash.
|
|
103
|
+
*/
|
|
46
104
|
getUniformHash( builder ) {
|
|
47
105
|
|
|
48
106
|
return this.getHash( builder );
|
|
@@ -100,6 +158,14 @@ class UniformNode extends InputNode {
|
|
|
100
158
|
|
|
101
159
|
export default UniformNode;
|
|
102
160
|
|
|
161
|
+
/**
|
|
162
|
+
* TSL function for creating a uniform node.
|
|
163
|
+
*
|
|
164
|
+
* @function
|
|
165
|
+
* @param {Any} arg1 - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).
|
|
166
|
+
* @param {String?} arg2 - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
167
|
+
* @returns {UniformNode}
|
|
168
|
+
*/
|
|
103
169
|
export const uniform = ( arg1, arg2 ) => {
|
|
104
170
|
|
|
105
171
|
const nodeType = getConstNodeType( arg2 || arg1 );
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module VarNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Class for representing shader variables as nodes. Variables are created from
|
|
8
|
+
* existing nodes like the following:
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* const depth = sampleDepth( uvNode ).toVar( 'depth' );
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @augments Node
|
|
15
|
+
*/
|
|
4
16
|
class VarNode extends Node {
|
|
5
17
|
|
|
6
18
|
static get type() {
|
|
@@ -9,17 +21,59 @@ class VarNode extends Node {
|
|
|
9
21
|
|
|
10
22
|
}
|
|
11
23
|
|
|
12
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new variable node.
|
|
26
|
+
*
|
|
27
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
28
|
+
* @param {String?} name - The name of the variable in the shader.
|
|
29
|
+
* @param {Boolean?} readOnly - The read-only flag.
|
|
30
|
+
*/
|
|
31
|
+
constructor( node, name = null, readOnly = false ) {
|
|
13
32
|
|
|
14
33
|
super();
|
|
15
34
|
|
|
35
|
+
/**
|
|
36
|
+
* The node for which a variable should be created.
|
|
37
|
+
*
|
|
38
|
+
* @type {Node}
|
|
39
|
+
*/
|
|
16
40
|
this.node = node;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The name of the variable in the shader. If no name is defined,
|
|
44
|
+
* the node system auto-generates one.
|
|
45
|
+
*
|
|
46
|
+
* @type {String?}
|
|
47
|
+
* @default null
|
|
48
|
+
*/
|
|
17
49
|
this.name = name;
|
|
18
50
|
|
|
51
|
+
/**
|
|
52
|
+
* `VarNode` sets this property to `true` by default.
|
|
53
|
+
*
|
|
54
|
+
* @type {Boolean}
|
|
55
|
+
* @default true
|
|
56
|
+
*/
|
|
19
57
|
this.global = true;
|
|
20
58
|
|
|
59
|
+
/**
|
|
60
|
+
* This flag can be used for type testing.
|
|
61
|
+
*
|
|
62
|
+
* @type {Boolean}
|
|
63
|
+
* @readonly
|
|
64
|
+
* @default true
|
|
65
|
+
*/
|
|
21
66
|
this.isVarNode = true;
|
|
22
67
|
|
|
68
|
+
/**
|
|
69
|
+
*
|
|
70
|
+
* The read-only flag.
|
|
71
|
+
*
|
|
72
|
+
* @type {Boolean}
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
this.readOnly = readOnly;
|
|
76
|
+
|
|
23
77
|
}
|
|
24
78
|
|
|
25
79
|
getHash( builder ) {
|
|
@@ -28,6 +82,18 @@ class VarNode extends Node {
|
|
|
28
82
|
|
|
29
83
|
}
|
|
30
84
|
|
|
85
|
+
getMemberType( builder, name ) {
|
|
86
|
+
|
|
87
|
+
return this.node.getMemberType( builder, name );
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
getElementType( builder ) {
|
|
92
|
+
|
|
93
|
+
return this.node.getElementType( builder );
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
31
97
|
getNodeType( builder ) {
|
|
32
98
|
|
|
33
99
|
return this.node.getNodeType( builder );
|
|
@@ -36,15 +102,50 @@ class VarNode extends Node {
|
|
|
36
102
|
|
|
37
103
|
generate( builder ) {
|
|
38
104
|
|
|
39
|
-
const { node, name } = this;
|
|
105
|
+
const { node, name, readOnly } = this;
|
|
106
|
+
const { renderer } = builder;
|
|
107
|
+
|
|
108
|
+
const isWebGPUBackend = renderer.backend.isWebGPUBackend === true;
|
|
109
|
+
|
|
110
|
+
let isDeterministic = false;
|
|
111
|
+
let shouldTreatAsReadOnly = false;
|
|
112
|
+
|
|
113
|
+
if ( readOnly ) {
|
|
40
114
|
|
|
41
|
-
|
|
115
|
+
isDeterministic = builder.isDeterministic( node );
|
|
116
|
+
|
|
117
|
+
shouldTreatAsReadOnly = isWebGPUBackend ? readOnly : isDeterministic;
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const vectorType = builder.getVectorType( this.getNodeType( builder ) );
|
|
122
|
+
const snippet = node.build( builder, vectorType );
|
|
123
|
+
|
|
124
|
+
const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, shouldTreatAsReadOnly );
|
|
42
125
|
|
|
43
126
|
const propertyName = builder.getPropertyName( nodeVar );
|
|
44
127
|
|
|
45
|
-
|
|
128
|
+
let declarationPrefix = propertyName;
|
|
129
|
+
|
|
130
|
+
if ( shouldTreatAsReadOnly ) {
|
|
131
|
+
|
|
132
|
+
if ( isWebGPUBackend ) {
|
|
133
|
+
|
|
134
|
+
declarationPrefix = isDeterministic
|
|
135
|
+
? `const ${ propertyName }`
|
|
136
|
+
: `let ${ propertyName }`;
|
|
137
|
+
|
|
138
|
+
} else {
|
|
139
|
+
|
|
140
|
+
const count = builder.getArrayCount( node );
|
|
141
|
+
|
|
142
|
+
declarationPrefix = `const ${ builder.getVar( nodeVar.type, propertyName, count ) }`;
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
}
|
|
46
147
|
|
|
47
|
-
builder.addLineFlowCode( `${
|
|
148
|
+
builder.addLineFlowCode( `${ declarationPrefix } = ${ snippet }`, this );
|
|
48
149
|
|
|
49
150
|
return propertyName;
|
|
50
151
|
|
|
@@ -54,15 +155,53 @@ class VarNode extends Node {
|
|
|
54
155
|
|
|
55
156
|
export default VarNode;
|
|
56
157
|
|
|
158
|
+
/**
|
|
159
|
+
* TSL function for creating a var node.
|
|
160
|
+
*
|
|
161
|
+
* @function
|
|
162
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
163
|
+
* @param {String?} name - The name of the variable in the shader.
|
|
164
|
+
* @returns {VarNode}
|
|
165
|
+
*/
|
|
57
166
|
const createVar = /*@__PURE__*/ nodeProxy( VarNode );
|
|
58
167
|
|
|
59
|
-
|
|
168
|
+
/**
|
|
169
|
+
* TSL function for creating a var node.
|
|
170
|
+
*
|
|
171
|
+
* @function
|
|
172
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
173
|
+
* @param {String?} name - The name of the variable in the shader.
|
|
174
|
+
* @returns {VarNode}
|
|
175
|
+
*/
|
|
176
|
+
export const Var = ( node, name = null ) => createVar( node, name ).append();
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* TSL function for creating a const node.
|
|
180
|
+
*
|
|
181
|
+
* @function
|
|
182
|
+
* @param {Node} node - The node for which a constant should be created.
|
|
183
|
+
* @param {String?} name - The name of the constant in the shader.
|
|
184
|
+
* @returns {VarNode}
|
|
185
|
+
*/
|
|
186
|
+
export const Const = ( node, name = null ) => createVar( node, name, true ).append();
|
|
187
|
+
|
|
188
|
+
// Method chaining
|
|
189
|
+
|
|
190
|
+
addMethodChaining( 'toVar', Var );
|
|
191
|
+
addMethodChaining( 'toConst', Const );
|
|
60
192
|
|
|
61
193
|
// Deprecated
|
|
62
194
|
|
|
195
|
+
/**
|
|
196
|
+
* @function
|
|
197
|
+
* @deprecated since r170. Use `Var( node )` or `node.toVar()` instead.
|
|
198
|
+
*
|
|
199
|
+
* @param {Any} node
|
|
200
|
+
* @returns {VarNode}
|
|
201
|
+
*/
|
|
63
202
|
export const temp = ( node ) => { // @deprecated, r170
|
|
64
203
|
|
|
65
|
-
console.warn( 'TSL: "temp" is deprecated. Use ".toVar()" instead.' );
|
|
204
|
+
console.warn( 'TSL: "temp( node )" is deprecated. Use "Var( node )" or "node.toVar()" instead.' );
|
|
66
205
|
|
|
67
206
|
return createVar( node );
|
|
68
207
|
|