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
|
@@ -28,8 +28,21 @@ const getGradientIrradiance = /*@__PURE__*/ Fn( ( { normal, lightDirection, buil
|
|
|
28
28
|
|
|
29
29
|
} );
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Represents the lighting model for a toon material. Used in {@link MeshToonNodeMaterial}.
|
|
33
|
+
*
|
|
34
|
+
* @augments LightingModel
|
|
35
|
+
*/
|
|
31
36
|
class ToonLightingModel extends LightingModel {
|
|
32
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Implements the direct lighting. Instead of using a conventional smooth irradiance, the irradiance is
|
|
40
|
+
* reduced to a small number of discrete shades to create a comic-like, flat look.
|
|
41
|
+
*
|
|
42
|
+
* @param {Object} input - The input data.
|
|
43
|
+
* @param {StackNode} stack - The current stack.
|
|
44
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
45
|
+
*/
|
|
33
46
|
direct( { lightDirection, lightColor, reflectedLight }, stack, builder ) {
|
|
34
47
|
|
|
35
48
|
const irradiance = getGradientIrradiance( { normal: normalGeometry, lightDirection, builder } ).mul( lightColor );
|
|
@@ -38,6 +51,13 @@ class ToonLightingModel extends LightingModel {
|
|
|
38
51
|
|
|
39
52
|
}
|
|
40
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Implements the indirect lighting.
|
|
56
|
+
*
|
|
57
|
+
* @param {ContextNode} input - The current node context.
|
|
58
|
+
* @param {StackNode} stack - The current stack.
|
|
59
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
60
|
+
*/
|
|
41
61
|
indirect( { ambientOcclusion, irradiance, reflectedLight } ) {
|
|
42
62
|
|
|
43
63
|
reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { abs, add, ceil, clamp, dFdx, dFdy, exp2, float, floor, Fn, fract, length, log2, max, min, mul, sin, sub, vec2, vec3 } from '../../tsl/TSLBase.js';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
* See: https://casual-effects.com/research/Wyman2017Hashed/index.html
|
|
5
|
-
*/
|
|
3
|
+
// See: https://casual-effects.com/research/Wyman2017Hashed/index.html
|
|
6
4
|
|
|
7
5
|
const ALPHA_HASH_SCALE = 0.05; // Derived from trials only, and may be changed.
|
|
8
6
|
|
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
import { positionWorld } from '../../accessors/Position.js';
|
|
2
2
|
import { float, Fn, min, normalize, sub, vec3 } from '../../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/** @module getParallaxCorrectNormal **/
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* This computes a parallax corrected normal which is used for box-projected cube mapping (BPCEM).
|
|
8
|
+
*
|
|
9
|
+
* Reference: {@link https://devlog-martinsh.blogspot.com/2011/09/box-projected-cube-environment-mapping.html}
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const uvNode = getParallaxCorrectNormal( reflectVector, vec3( 200, 100, 100 ), vec3( 0, - 50, 0 ) );
|
|
13
|
+
* material.envNode = pmremTexture( renderTarget.texture, uvNode );
|
|
14
|
+
* ```
|
|
15
|
+
* @function
|
|
16
|
+
* @param {Node<vec3>} normal - The normal to correct.
|
|
17
|
+
* @param {Node<vec3>} cubeSize - The cube size should reflect the size of the environment (BPCEM is usually applied in closed environments like rooms).
|
|
18
|
+
* @param {Node<vec3>} cubePos - The cube position.
|
|
19
|
+
* @return {Node<vec3>} The parallax corrected normal.
|
|
20
|
+
*/
|
|
6
21
|
const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos ] ) => {
|
|
7
22
|
|
|
8
23
|
const nDir = normalize( normal ).toVar( 'nDir' );
|
|
@@ -9,9 +9,22 @@ import { Vector4 } from '../../math/Vector4.js';
|
|
|
9
9
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
10
10
|
import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
|
|
11
11
|
|
|
12
|
+
/** @module RangeNode **/
|
|
13
|
+
|
|
12
14
|
let min = null;
|
|
13
15
|
let max = null;
|
|
14
16
|
|
|
17
|
+
/**
|
|
18
|
+
* `RangeNode` generates random instanced attribute data in a defined range.
|
|
19
|
+
* An exemplary use case for this utility node is to generate random per-instance
|
|
20
|
+
* colors:
|
|
21
|
+
* ```js
|
|
22
|
+
* const material = new MeshBasicNodeMaterial();
|
|
23
|
+
* material.colorNode = range( new Color( 0x000000 ), new Color( 0xFFFFFF ) );
|
|
24
|
+
* const mesh = new InstancedMesh( geometry, material, count );
|
|
25
|
+
* ```
|
|
26
|
+
* @augments Node
|
|
27
|
+
*/
|
|
15
28
|
class RangeNode extends Node {
|
|
16
29
|
|
|
17
30
|
static get type() {
|
|
@@ -20,15 +33,40 @@ class RangeNode extends Node {
|
|
|
20
33
|
|
|
21
34
|
}
|
|
22
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Constructs a new range node.
|
|
38
|
+
*
|
|
39
|
+
* @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
|
|
40
|
+
* @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
|
|
41
|
+
*/
|
|
23
42
|
constructor( minNode = float(), maxNode = float() ) {
|
|
24
43
|
|
|
25
44
|
super();
|
|
26
45
|
|
|
46
|
+
/**
|
|
47
|
+
* A node defining the lower bound of the range.
|
|
48
|
+
*
|
|
49
|
+
* @type {Node<any>}
|
|
50
|
+
* @default float()
|
|
51
|
+
*/
|
|
27
52
|
this.minNode = minNode;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A node defining the upper bound of the range.
|
|
56
|
+
*
|
|
57
|
+
* @type {Node<any>}
|
|
58
|
+
* @default float()
|
|
59
|
+
*/
|
|
28
60
|
this.maxNode = maxNode;
|
|
29
61
|
|
|
30
62
|
}
|
|
31
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Returns the vector length which is computed based on the range definition.
|
|
66
|
+
*
|
|
67
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
68
|
+
* @return {Number} The vector length.
|
|
69
|
+
*/
|
|
32
70
|
getVectorLength( builder ) {
|
|
33
71
|
|
|
34
72
|
const minLength = builder.getTypeLength( getValueType( this.minNode.value ) );
|
|
@@ -38,6 +76,12 @@ class RangeNode extends Node {
|
|
|
38
76
|
|
|
39
77
|
}
|
|
40
78
|
|
|
79
|
+
/**
|
|
80
|
+
* This method is overwritten since the node type is inferred from range definition.
|
|
81
|
+
*
|
|
82
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
83
|
+
* @return {String} The node type.
|
|
84
|
+
*/
|
|
41
85
|
getNodeType( builder ) {
|
|
42
86
|
|
|
43
87
|
return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
|
|
@@ -65,11 +109,11 @@ class RangeNode extends Node {
|
|
|
65
109
|
max.setScalar( 0 );
|
|
66
110
|
|
|
67
111
|
if ( minLength === 1 ) min.setScalar( minValue );
|
|
68
|
-
else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b );
|
|
112
|
+
else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b, 1 );
|
|
69
113
|
else min.set( minValue.x, minValue.y, minValue.z || 0, minValue.w || 0 );
|
|
70
114
|
|
|
71
115
|
if ( maxLength === 1 ) max.setScalar( maxValue );
|
|
72
|
-
else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b );
|
|
116
|
+
else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b, 1 );
|
|
73
117
|
else max.set( maxValue.x, maxValue.y, maxValue.z || 0, maxValue.w || 0 );
|
|
74
118
|
|
|
75
119
|
const stride = 4;
|
|
@@ -118,4 +162,12 @@ class RangeNode extends Node {
|
|
|
118
162
|
|
|
119
163
|
export default RangeNode;
|
|
120
164
|
|
|
165
|
+
/**
|
|
166
|
+
* TSL function for creating a range node.
|
|
167
|
+
*
|
|
168
|
+
* @function
|
|
169
|
+
* @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
|
|
170
|
+
* @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
|
|
171
|
+
* @returns {RangeNode}
|
|
172
|
+
*/
|
|
121
173
|
export const range = /*@__PURE__*/ nodeProxy( RangeNode );
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module AtomicFunctionNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `AtomicFunctionNode` represents any function that can operate on atomic variable types
|
|
8
|
+
* within a shader. In an atomic function, any modifiation to an atomic variable will
|
|
9
|
+
* occur as an indivisble step with a defined order relative to other modifications.
|
|
10
|
+
* Accordingly, even if multiple atomic functions are modifying an atomic variable at once
|
|
11
|
+
* atomic operations will not interfer with each other.
|
|
12
|
+
*
|
|
13
|
+
* This node can only be used with a WebGPU backend.
|
|
14
|
+
*
|
|
15
|
+
* @augments TempNode
|
|
16
|
+
*/
|
|
4
17
|
class AtomicFunctionNode extends TempNode {
|
|
5
18
|
|
|
6
19
|
static get type() {
|
|
@@ -9,24 +22,68 @@ class AtomicFunctionNode extends TempNode {
|
|
|
9
22
|
|
|
10
23
|
}
|
|
11
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new atomic function node.
|
|
27
|
+
*
|
|
28
|
+
* @param {String} method - The signature of the atomic function to construct.
|
|
29
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
30
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
31
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
32
|
+
*/
|
|
12
33
|
constructor( method, pointerNode, valueNode, storeNode = null ) {
|
|
13
34
|
|
|
14
35
|
super( 'uint' );
|
|
15
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The signature of the atomic function to construct.
|
|
39
|
+
*
|
|
40
|
+
* @type {String}
|
|
41
|
+
*/
|
|
16
42
|
this.method = method;
|
|
17
43
|
|
|
44
|
+
/**
|
|
45
|
+
* An atomic variable or element of an atomic buffer.
|
|
46
|
+
*
|
|
47
|
+
* @type {Node}
|
|
48
|
+
*/
|
|
18
49
|
this.pointerNode = pointerNode;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A value that modifies the atomic variable.
|
|
53
|
+
*
|
|
54
|
+
* @type {Node}
|
|
55
|
+
*/
|
|
19
56
|
this.valueNode = valueNode;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
60
|
+
*
|
|
61
|
+
* @type {Node?}
|
|
62
|
+
* @default null
|
|
63
|
+
*/
|
|
20
64
|
this.storeNode = storeNode;
|
|
21
65
|
|
|
22
66
|
}
|
|
23
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Overwrites the default implementation to return the type of
|
|
70
|
+
* the pointer node.
|
|
71
|
+
*
|
|
72
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
73
|
+
* @return {String} The input type.
|
|
74
|
+
*/
|
|
24
75
|
getInputType( builder ) {
|
|
25
76
|
|
|
26
77
|
return this.pointerNode.getNodeType( builder );
|
|
27
78
|
|
|
28
79
|
}
|
|
29
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Overwritten since the node type is inferred from the input type.
|
|
83
|
+
*
|
|
84
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
85
|
+
* @return {String} The node type.
|
|
86
|
+
*/
|
|
30
87
|
getNodeType( builder ) {
|
|
31
88
|
|
|
32
89
|
return this.getInputType( builder );
|
|
@@ -78,9 +135,29 @@ AtomicFunctionNode.ATOMIC_XOR = 'atomicXor';
|
|
|
78
135
|
|
|
79
136
|
export default AtomicFunctionNode;
|
|
80
137
|
|
|
138
|
+
/**
|
|
139
|
+
* TSL function for creating an atomic function node.
|
|
140
|
+
*
|
|
141
|
+
* @function
|
|
142
|
+
* @param {String} method - The signature of the atomic function to construct.
|
|
143
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
144
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
145
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
146
|
+
* @returns {AtomicFunctionNode}
|
|
147
|
+
*/
|
|
81
148
|
const atomicNode = nodeProxy( AtomicFunctionNode );
|
|
82
149
|
|
|
83
|
-
|
|
150
|
+
/**
|
|
151
|
+
* TSL function for appending an atomic function call into the programmatic flow of a compute shader.
|
|
152
|
+
*
|
|
153
|
+
* @function
|
|
154
|
+
* @param {String} method - The signature of the atomic function to construct.
|
|
155
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
156
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
157
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
158
|
+
* @returns {AtomicFunctionNode}
|
|
159
|
+
*/
|
|
160
|
+
export const atomicFunc = ( method, pointerNode, valueNode, storeNode = null ) => {
|
|
84
161
|
|
|
85
162
|
const node = atomicNode( method, pointerNode, valueNode, storeNode );
|
|
86
163
|
node.append();
|
|
@@ -89,11 +166,90 @@ export const atomicFunc = ( method, pointerNode, valueNode, storeNode ) => {
|
|
|
89
166
|
|
|
90
167
|
};
|
|
91
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Stores a value in the atomic variable.
|
|
171
|
+
*
|
|
172
|
+
* @function
|
|
173
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
174
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
175
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
176
|
+
* @returns {AtomicFunctionNode}
|
|
177
|
+
*/
|
|
92
178
|
export const atomicStore = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_STORE, pointerNode, valueNode, storeNode );
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Increments the value stored in the atomic variable.
|
|
182
|
+
*
|
|
183
|
+
* @function
|
|
184
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
185
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
186
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
187
|
+
* @returns {AtomicFunctionNode}
|
|
188
|
+
*/
|
|
93
189
|
export const atomicAdd = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_ADD, pointerNode, valueNode, storeNode );
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Decrements the value stored in the atomic variable.
|
|
193
|
+
*
|
|
194
|
+
* @function
|
|
195
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
196
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
197
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
198
|
+
* @returns {AtomicFunctionNode}
|
|
199
|
+
*/
|
|
94
200
|
export const atomicSub = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_SUB, pointerNode, valueNode, storeNode );
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Stores in an atomic variable the maximum between its current value and a parameter.
|
|
204
|
+
*
|
|
205
|
+
* @function
|
|
206
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
207
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
208
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
209
|
+
* @returns {AtomicFunctionNode}
|
|
210
|
+
*/
|
|
95
211
|
export const atomicMax = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_MAX, pointerNode, valueNode, storeNode );
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Stores in an atomic variable the minimum between its current value and a parameter.
|
|
215
|
+
*
|
|
216
|
+
* @function
|
|
217
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
218
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
219
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
220
|
+
* @returns {AtomicFunctionNode}
|
|
221
|
+
*/
|
|
96
222
|
export const atomicMin = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_MIN, pointerNode, valueNode, storeNode );
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Stores in an atomic variable the bitwise AND of its value with a parameter.
|
|
226
|
+
*
|
|
227
|
+
* @function
|
|
228
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
229
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
230
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
231
|
+
* @returns {AtomicFunctionNode}
|
|
232
|
+
*/
|
|
97
233
|
export const atomicAnd = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_AND, pointerNode, valueNode, storeNode );
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Stores in an atomic variable the bitwise OR of its value with a parameter.
|
|
237
|
+
*
|
|
238
|
+
* @function
|
|
239
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
240
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
241
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
242
|
+
* @returns {AtomicFunctionNode}
|
|
243
|
+
*/
|
|
98
244
|
export const atomicOr = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_OR, pointerNode, valueNode, storeNode );
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Stores in an atomic variable the bitwise XOR of its value with a parameter.
|
|
248
|
+
*
|
|
249
|
+
* @function
|
|
250
|
+
* @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
|
|
251
|
+
* @param {Node} valueNode - The value that mutates the atomic variable.
|
|
252
|
+
* @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
|
|
253
|
+
* @returns {AtomicFunctionNode}
|
|
254
|
+
*/
|
|
99
255
|
export const atomicXor = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_XOR, pointerNode, valueNode, storeNode );
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module BarrierNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Represents a GPU control barrier that synchronizes compute operations within a given scope.
|
|
8
|
+
*
|
|
9
|
+
* This node can only be used with a WebGPU backend.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
4
13
|
class BarrierNode extends Node {
|
|
5
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Constructs a new barrier node.
|
|
17
|
+
*
|
|
18
|
+
* @param {String} scope - The scope defines the behavior of the node.
|
|
19
|
+
*/
|
|
6
20
|
constructor( scope ) {
|
|
7
21
|
|
|
8
22
|
super();
|
|
@@ -32,9 +46,42 @@ class BarrierNode extends Node {
|
|
|
32
46
|
|
|
33
47
|
export default BarrierNode;
|
|
34
48
|
|
|
49
|
+
/**
|
|
50
|
+
* TSL function for creating a barrier node.
|
|
51
|
+
*
|
|
52
|
+
* @function
|
|
53
|
+
* @param {String} scope - The scope defines the behavior of the node..
|
|
54
|
+
* @returns {BarrierNode}
|
|
55
|
+
*/
|
|
35
56
|
const barrier = nodeProxy( BarrierNode );
|
|
36
57
|
|
|
58
|
+
/**
|
|
59
|
+
* TSL function for creating a workgroup barrier. All compute shader
|
|
60
|
+
* invocations must wait for each invocation within a workgroup to
|
|
61
|
+
* complete before the barrier can be surpassed.
|
|
62
|
+
*
|
|
63
|
+
* @function
|
|
64
|
+
* @returns {BarrierNode}
|
|
65
|
+
*/
|
|
37
66
|
export const workgroupBarrier = () => barrier( 'workgroup' ).append();
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* TSL function for creating a storage barrier. All invocations must
|
|
70
|
+
* wait for each access to variables within the 'storage' address space
|
|
71
|
+
* to complete before the barrier can be passed.
|
|
72
|
+
*
|
|
73
|
+
* @function
|
|
74
|
+
* @returns {BarrierNode}
|
|
75
|
+
*/
|
|
38
76
|
export const storageBarrier = () => barrier( 'storage' ).append();
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* TSL function for creating a texture barrier. All invocations must
|
|
80
|
+
* wait for each access to variables within the 'texture' address space
|
|
81
|
+
* to complete before the barrier can be passed.
|
|
82
|
+
*
|
|
83
|
+
* @function
|
|
84
|
+
* @returns {BarrierNode}
|
|
85
|
+
*/
|
|
39
86
|
export const textureBarrier = () => barrier( 'texture' ).append();
|
|
40
87
|
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module ComputeBuiltinNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `ComputeBuiltinNode` represents a compute-scope builtin value that expose information
|
|
8
|
+
* about the currently running dispatch and/or the device it is running on.
|
|
9
|
+
*
|
|
10
|
+
* This node can only be used with a WebGPU backend.
|
|
11
|
+
*
|
|
12
|
+
* @augments Node
|
|
13
|
+
*/
|
|
4
14
|
class ComputeBuiltinNode extends Node {
|
|
5
15
|
|
|
6
16
|
static get type() {
|
|
@@ -9,26 +19,56 @@ class ComputeBuiltinNode extends Node {
|
|
|
9
19
|
|
|
10
20
|
}
|
|
11
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new compute builtin node.
|
|
24
|
+
*
|
|
25
|
+
* @param {String} builtinName - The built-in name.
|
|
26
|
+
* @param {String} nodeType - The node type.
|
|
27
|
+
*/
|
|
12
28
|
constructor( builtinName, nodeType ) {
|
|
13
29
|
|
|
14
30
|
super( nodeType );
|
|
15
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The built-in name.
|
|
34
|
+
*
|
|
35
|
+
* @private
|
|
36
|
+
* @type {String}
|
|
37
|
+
*/
|
|
16
38
|
this._builtinName = builtinName;
|
|
17
39
|
|
|
18
40
|
}
|
|
19
41
|
|
|
42
|
+
/**
|
|
43
|
+
* This method is overwritten since hash is derived from the built-in name.
|
|
44
|
+
*
|
|
45
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
46
|
+
* @return {String} The hash.
|
|
47
|
+
*/
|
|
20
48
|
getHash( builder ) {
|
|
21
49
|
|
|
22
50
|
return this.getBuiltinName( builder );
|
|
23
51
|
|
|
24
52
|
}
|
|
25
53
|
|
|
54
|
+
/**
|
|
55
|
+
* This method is overwritten since the node type is simply derived from `nodeType`..
|
|
56
|
+
*
|
|
57
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
58
|
+
* @return {String} The node type.
|
|
59
|
+
*/
|
|
26
60
|
getNodeType( /*builder*/ ) {
|
|
27
61
|
|
|
28
62
|
return this.nodeType;
|
|
29
63
|
|
|
30
64
|
}
|
|
31
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Sets the builtin name.
|
|
68
|
+
*
|
|
69
|
+
* @param {String} builtinName - The built-in name.
|
|
70
|
+
* @return {ComputeBuiltinNode} A reference to this node.
|
|
71
|
+
*/
|
|
32
72
|
setBuiltinName( builtinName ) {
|
|
33
73
|
|
|
34
74
|
this._builtinName = builtinName;
|
|
@@ -37,12 +77,23 @@ class ComputeBuiltinNode extends Node {
|
|
|
37
77
|
|
|
38
78
|
}
|
|
39
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Returns the builtin name.
|
|
82
|
+
*
|
|
83
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
84
|
+
* @return {String} The builtin name.
|
|
85
|
+
*/
|
|
40
86
|
getBuiltinName( /*builder*/ ) {
|
|
41
87
|
|
|
42
88
|
return this._builtinName;
|
|
43
89
|
|
|
44
90
|
}
|
|
45
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Whether the current node builder has the builtin or not.
|
|
94
|
+
*
|
|
95
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
96
|
+
*/
|
|
46
97
|
hasBuiltin( builder ) {
|
|
47
98
|
|
|
48
99
|
builder.hasBuiltin( this._builtinName );
|
|
@@ -89,10 +140,85 @@ class ComputeBuiltinNode extends Node {
|
|
|
89
140
|
|
|
90
141
|
export default ComputeBuiltinNode;
|
|
91
142
|
|
|
143
|
+
/**
|
|
144
|
+
* TSL function for creating a compute builtin node.
|
|
145
|
+
*
|
|
146
|
+
* @function
|
|
147
|
+
* @param {String} name - The built-in name.
|
|
148
|
+
* @param {String} nodeType - The node type.
|
|
149
|
+
* @returns {ComputeBuiltinNode}
|
|
150
|
+
*/
|
|
92
151
|
const computeBuiltin = ( name, nodeType ) => nodeObject( new ComputeBuiltinNode( name, nodeType ) );
|
|
93
152
|
|
|
153
|
+
/**
|
|
154
|
+
* TSL function for creating a `numWorkgroups` builtin node.
|
|
155
|
+
* Represents the number of workgroups dispatched by the compute shader.
|
|
156
|
+
* ```js
|
|
157
|
+
* // Run 512 invocations/threads with a workgroup size of 128.
|
|
158
|
+
* const computeFn = Fn(() => {
|
|
159
|
+
*
|
|
160
|
+
* // numWorkgroups.x = 4
|
|
161
|
+
* storageBuffer.element(0).assign(numWorkgroups.x)
|
|
162
|
+
*
|
|
163
|
+
* })().compute(512, [128]);
|
|
164
|
+
*
|
|
165
|
+
* // Run 512 invocations/threads with the default workgroup size of 64.
|
|
166
|
+
* const computeFn = Fn(() => {
|
|
167
|
+
*
|
|
168
|
+
* // numWorkgroups.x = 8
|
|
169
|
+
* storageBuffer.element(0).assign(numWorkgroups.x)
|
|
170
|
+
*
|
|
171
|
+
* })().compute(512);
|
|
172
|
+
* ```
|
|
173
|
+
*
|
|
174
|
+
* @function
|
|
175
|
+
* @returns {ComputeBuiltinNode<uvec3>}
|
|
176
|
+
*/
|
|
94
177
|
export const numWorkgroups = /*@__PURE__*/ computeBuiltin( 'numWorkgroups', 'uvec3' );
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* TSL function for creating a `workgroupId` builtin node.
|
|
181
|
+
* Represents the 3-dimensional index of the workgroup the current compute invocation belongs to.
|
|
182
|
+
* ```js
|
|
183
|
+
* // Execute 12 compute threads with a workgroup size of 3.
|
|
184
|
+
* const computeFn = Fn( () => {
|
|
185
|
+
*
|
|
186
|
+
* If( workgroupId.x.modInt( 2 ).equal( 0 ), () => {
|
|
187
|
+
*
|
|
188
|
+
* storageBuffer.element( instanceIndex ).assign( instanceIndex );
|
|
189
|
+
*
|
|
190
|
+
* } ).Else( () => {
|
|
191
|
+
*
|
|
192
|
+
* storageBuffer.element( instanceIndex ).assign( 0 );
|
|
193
|
+
*
|
|
194
|
+
* } );
|
|
195
|
+
*
|
|
196
|
+
* } )().compute( 12, [ 3 ] );
|
|
197
|
+
*
|
|
198
|
+
* // workgroupId.x = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3];
|
|
199
|
+
* // Buffer Output = [0, 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0];
|
|
200
|
+
* ```
|
|
201
|
+
*
|
|
202
|
+
* @function
|
|
203
|
+
* @returns {ComputeBuiltinNode<uvec3>}
|
|
204
|
+
*/
|
|
95
205
|
export const workgroupId = /*@__PURE__*/ computeBuiltin( 'workgroupId', 'uvec3' );
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* TSL function for creating a `localId` builtin node. A non-linearized 3-dimensional
|
|
209
|
+
* representation of the current invocation's position within a 3D workgroup grid.
|
|
210
|
+
*
|
|
211
|
+
* @function
|
|
212
|
+
* @returns {ComputeBuiltinNode<uvec3>}
|
|
213
|
+
*/
|
|
96
214
|
export const localId = /*@__PURE__*/ computeBuiltin( 'localId', 'uvec3' );
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* TSL function for creating a `subgroupSize` builtin node. A device dependent variable
|
|
218
|
+
* that exposes the size of the current invocation's subgroup.
|
|
219
|
+
*
|
|
220
|
+
* @function
|
|
221
|
+
* @returns {ComputeBuiltinNode<uint>}
|
|
222
|
+
*/
|
|
97
223
|
export const subgroupSize = /*@__PURE__*/ computeBuiltin( 'subgroupSize', 'uint' );
|
|
98
224
|
|