super-three 0.170.1 → 0.172.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -1
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +49 -0
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +24 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +93 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +40 -0
- package/src/nodes/utils/Timer.js +19 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +189 -0
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +327 -60
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { nodeObject, varying } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module AttributeNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Base class for representing shader attributes as nodes.
|
|
8
|
+
*
|
|
9
|
+
* @augments Node
|
|
10
|
+
*/
|
|
4
11
|
class AttributeNode extends Node {
|
|
5
12
|
|
|
6
13
|
static get type() {
|
|
@@ -9,10 +16,22 @@ class AttributeNode extends Node {
|
|
|
9
16
|
|
|
10
17
|
}
|
|
11
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new attribute node.
|
|
21
|
+
*
|
|
22
|
+
* @param {String} attributeName - The name of the attribute.
|
|
23
|
+
* @param {String?} nodeType - The node type.
|
|
24
|
+
*/
|
|
12
25
|
constructor( attributeName, nodeType = null ) {
|
|
13
26
|
|
|
14
27
|
super( nodeType );
|
|
15
28
|
|
|
29
|
+
/**
|
|
30
|
+
* `AttributeNode` sets this property to `true` by default.
|
|
31
|
+
*
|
|
32
|
+
* @type {Boolean}
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
16
35
|
this.global = true;
|
|
17
36
|
|
|
18
37
|
this._attributeName = attributeName;
|
|
@@ -51,6 +70,14 @@ class AttributeNode extends Node {
|
|
|
51
70
|
|
|
52
71
|
}
|
|
53
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Sets the attribute name to the given value. The method can be
|
|
75
|
+
* overwritten in derived classes if the final name must be computed
|
|
76
|
+
* analytically.
|
|
77
|
+
*
|
|
78
|
+
* @param {String} attributeName - The name of the attribute.
|
|
79
|
+
* @return {AttributeNode} A reference to this node.
|
|
80
|
+
*/
|
|
54
81
|
setAttributeName( attributeName ) {
|
|
55
82
|
|
|
56
83
|
this._attributeName = attributeName;
|
|
@@ -59,6 +86,14 @@ class AttributeNode extends Node {
|
|
|
59
86
|
|
|
60
87
|
}
|
|
61
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Returns the attribute name of this node. The method can be
|
|
91
|
+
* overwritten in derived classes if the final name must be computed
|
|
92
|
+
* analytically.
|
|
93
|
+
*
|
|
94
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
95
|
+
* @return {String} The attribute name.
|
|
96
|
+
*/
|
|
62
97
|
getAttributeName( /*builder*/ ) {
|
|
63
98
|
|
|
64
99
|
return this._attributeName;
|
|
@@ -122,4 +157,12 @@ class AttributeNode extends Node {
|
|
|
122
157
|
|
|
123
158
|
export default AttributeNode;
|
|
124
159
|
|
|
160
|
+
/**
|
|
161
|
+
* TSL function for creating an attribute node.
|
|
162
|
+
*
|
|
163
|
+
* @function
|
|
164
|
+
* @param {String} name - The name of the attribute.
|
|
165
|
+
* @param {String?} nodeType - The node type.
|
|
166
|
+
* @returns {AttributeNode}
|
|
167
|
+
*/
|
|
125
168
|
export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module BypassNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The class generates the code of a given node but returns another node in the output.
|
|
8
|
+
* This can be used to call a method or node that does not return a value, i.e.
|
|
9
|
+
* type `void` on an input where returning a value is required. Example:
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* material.colorNode = myColor.bypass( runVoidFn() )
|
|
13
|
+
*```
|
|
14
|
+
*
|
|
15
|
+
* @augments Node
|
|
16
|
+
*/
|
|
4
17
|
class BypassNode extends Node {
|
|
5
18
|
|
|
6
19
|
static get type() {
|
|
@@ -9,13 +22,37 @@ class BypassNode extends Node {
|
|
|
9
22
|
|
|
10
23
|
}
|
|
11
24
|
|
|
12
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new bypass node.
|
|
27
|
+
*
|
|
28
|
+
* @param {Node} outputNode - The output node.
|
|
29
|
+
* @param {Node} callNode - The call node.
|
|
30
|
+
*/
|
|
31
|
+
constructor( outputNode, callNode ) {
|
|
13
32
|
|
|
14
33
|
super();
|
|
15
34
|
|
|
35
|
+
/**
|
|
36
|
+
* This flag can be used for type testing.
|
|
37
|
+
*
|
|
38
|
+
* @type {Boolean}
|
|
39
|
+
* @readonly
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
16
42
|
this.isBypassNode = true;
|
|
17
43
|
|
|
18
|
-
|
|
44
|
+
/**
|
|
45
|
+
* The output node.
|
|
46
|
+
*
|
|
47
|
+
* @type {Node}
|
|
48
|
+
*/
|
|
49
|
+
this.outputNode = outputNode;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The call node.
|
|
53
|
+
*
|
|
54
|
+
* @type {Node}
|
|
55
|
+
*/
|
|
19
56
|
this.callNode = callNode;
|
|
20
57
|
|
|
21
58
|
}
|
|
@@ -44,6 +81,14 @@ class BypassNode extends Node {
|
|
|
44
81
|
|
|
45
82
|
export default BypassNode;
|
|
46
83
|
|
|
84
|
+
/**
|
|
85
|
+
* TSL function for creating a bypass node.
|
|
86
|
+
*
|
|
87
|
+
* @function
|
|
88
|
+
* @param {Node} outputNode - The output node.
|
|
89
|
+
* @param {Node} callNode - The call node.
|
|
90
|
+
* @returns {BypassNode}
|
|
91
|
+
*/
|
|
47
92
|
export const bypass = /*@__PURE__*/ nodeProxy( BypassNode );
|
|
48
93
|
|
|
49
94
|
addMethodChaining( 'bypass', bypass );
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module CacheNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This node can be used as a cache management component for another node.
|
|
8
|
+
* Caching is in general used by default in {@link NodeBuilder} but this node
|
|
9
|
+
* allows the usage of a shared parent cache during the build process.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
4
13
|
class CacheNode extends Node {
|
|
5
14
|
|
|
6
15
|
static get type() {
|
|
@@ -9,20 +18,54 @@ class CacheNode extends Node {
|
|
|
9
18
|
|
|
10
19
|
}
|
|
11
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new cache node.
|
|
23
|
+
*
|
|
24
|
+
* @param {Node} node - The node that should be cached.
|
|
25
|
+
* @param {Boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
|
|
26
|
+
*/
|
|
12
27
|
constructor( node, parent = true ) {
|
|
13
28
|
|
|
14
29
|
super();
|
|
15
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The node that should be cached.
|
|
33
|
+
*
|
|
34
|
+
* @type {Node}
|
|
35
|
+
*/
|
|
16
36
|
this.node = node;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Whether this node refers to a shared parent cache or not.
|
|
40
|
+
*
|
|
41
|
+
* @type {Boolean}
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
17
44
|
this.parent = parent;
|
|
18
45
|
|
|
46
|
+
/**
|
|
47
|
+
* This flag can be used for type testing.
|
|
48
|
+
*
|
|
49
|
+
* @type {Boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
19
53
|
this.isCacheNode = true;
|
|
20
54
|
|
|
21
55
|
}
|
|
22
56
|
|
|
23
57
|
getNodeType( builder ) {
|
|
24
58
|
|
|
25
|
-
|
|
59
|
+
const previousCache = builder.getCache();
|
|
60
|
+
const cache = builder.getCacheFromNode( this, this.parent );
|
|
61
|
+
|
|
62
|
+
builder.setCache( cache );
|
|
63
|
+
|
|
64
|
+
const nodeType = this.node.getNodeType( builder );
|
|
65
|
+
|
|
66
|
+
builder.setCache( previousCache );
|
|
67
|
+
|
|
68
|
+
return nodeType;
|
|
26
69
|
|
|
27
70
|
}
|
|
28
71
|
|
|
@@ -45,6 +88,14 @@ class CacheNode extends Node {
|
|
|
45
88
|
|
|
46
89
|
export default CacheNode;
|
|
47
90
|
|
|
48
|
-
|
|
91
|
+
/**
|
|
92
|
+
* TSL function for creating a cache node.
|
|
93
|
+
*
|
|
94
|
+
* @function
|
|
95
|
+
* @param {Node} node - The node that should be cached.
|
|
96
|
+
* @param {Boolean} parent - Whether this node refers to a shared parent cache or not.
|
|
97
|
+
* @returns {CacheNode}
|
|
98
|
+
*/
|
|
99
|
+
export const cache = ( node, parent ) => nodeObject( new CacheNode( nodeObject( node ), parent ) );
|
|
49
100
|
|
|
50
101
|
addMethodChaining( 'cache', cache );
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import InputNode from './InputNode.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Class for representing a constant value in the shader.
|
|
5
|
+
*
|
|
6
|
+
* @augments InputNode
|
|
7
|
+
*/
|
|
3
8
|
class ConstNode extends InputNode {
|
|
4
9
|
|
|
5
10
|
static get type() {
|
|
@@ -8,14 +13,33 @@ class ConstNode extends InputNode {
|
|
|
8
13
|
|
|
9
14
|
}
|
|
10
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Constructs a new input node.
|
|
18
|
+
*
|
|
19
|
+
* @param {Any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color).
|
|
20
|
+
* @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
21
|
+
*/
|
|
11
22
|
constructor( value, nodeType = null ) {
|
|
12
23
|
|
|
13
24
|
super( value, nodeType );
|
|
14
25
|
|
|
26
|
+
/**
|
|
27
|
+
* This flag can be used for type testing.
|
|
28
|
+
*
|
|
29
|
+
* @type {Boolean}
|
|
30
|
+
* @readonly
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
15
33
|
this.isConstNode = true;
|
|
16
34
|
|
|
17
35
|
}
|
|
18
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Generates the shader string of the value with the current node builder.
|
|
39
|
+
*
|
|
40
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
41
|
+
* @return {String} The generated value as a shader string.
|
|
42
|
+
*/
|
|
19
43
|
generateConst( builder ) {
|
|
20
44
|
|
|
21
45
|
return builder.generateConst( this.getNodeType( builder ), this.value );
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module ContextNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This node can be used as a context management component for another node.
|
|
8
|
+
* {@link NodeBuilder} performs its node building process in a specific context and
|
|
9
|
+
* this node allows the modify the context. A typical use case is to overwrite `getUV()` e.g.:
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
*node.context( { getUV: () => customCoord } );
|
|
13
|
+
*```
|
|
14
|
+
* @augments Node
|
|
15
|
+
*/
|
|
4
16
|
class ContextNode extends Node {
|
|
5
17
|
|
|
6
18
|
static get type() {
|
|
@@ -9,23 +21,59 @@ class ContextNode extends Node {
|
|
|
9
21
|
|
|
10
22
|
}
|
|
11
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new context node.
|
|
26
|
+
*
|
|
27
|
+
* @param {Node} node - The node whose context should be modified.
|
|
28
|
+
* @param {Object} [value={}] - The modified context data.
|
|
29
|
+
*/
|
|
12
30
|
constructor( node, value = {} ) {
|
|
13
31
|
|
|
14
32
|
super();
|
|
15
33
|
|
|
34
|
+
/**
|
|
35
|
+
* This flag can be used for type testing.
|
|
36
|
+
*
|
|
37
|
+
* @type {Boolean}
|
|
38
|
+
* @readonly
|
|
39
|
+
* @default true
|
|
40
|
+
*/
|
|
16
41
|
this.isContextNode = true;
|
|
17
42
|
|
|
43
|
+
/**
|
|
44
|
+
* The node whose context should be modified.
|
|
45
|
+
*
|
|
46
|
+
* @type {Node}
|
|
47
|
+
*/
|
|
18
48
|
this.node = node;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The modified context data.
|
|
52
|
+
*
|
|
53
|
+
* @type {Object}
|
|
54
|
+
* @default {}
|
|
55
|
+
*/
|
|
19
56
|
this.value = value;
|
|
20
57
|
|
|
21
58
|
}
|
|
22
59
|
|
|
60
|
+
/**
|
|
61
|
+
* This method is overwritten to ensure it returns the reference to {@link module:ContextNode~ContextNode#node}.
|
|
62
|
+
*
|
|
63
|
+
* @return {Node} A reference to {@link module:ContextNode~ContextNode#node}.
|
|
64
|
+
*/
|
|
23
65
|
getScope() {
|
|
24
66
|
|
|
25
67
|
return this.node.getScope();
|
|
26
68
|
|
|
27
69
|
}
|
|
28
70
|
|
|
71
|
+
/**
|
|
72
|
+
* This method is overwritten to ensure it returns the type of {@link module:ContextNode~ContextNode#node}.
|
|
73
|
+
*
|
|
74
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
75
|
+
* @return {String} The node type.
|
|
76
|
+
*/
|
|
29
77
|
getNodeType( builder ) {
|
|
30
78
|
|
|
31
79
|
return this.node.getNodeType( builder );
|
|
@@ -70,7 +118,24 @@ class ContextNode extends Node {
|
|
|
70
118
|
|
|
71
119
|
export default ContextNode;
|
|
72
120
|
|
|
121
|
+
/**
|
|
122
|
+
* TSL function for creating a context node.
|
|
123
|
+
*
|
|
124
|
+
* @function
|
|
125
|
+
* @param {Node} node - The node whose context should be modified.
|
|
126
|
+
* @param {Object} [value={}] - The modified context data.
|
|
127
|
+
* @returns {ContextNode}
|
|
128
|
+
*/
|
|
73
129
|
export const context = /*@__PURE__*/ nodeProxy( ContextNode );
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* TSL function for defining a label context value for a given node.
|
|
133
|
+
*
|
|
134
|
+
* @function
|
|
135
|
+
* @param {Node} node - The node whose context should be modified.
|
|
136
|
+
* @param {String} name - The name/label to set.
|
|
137
|
+
* @returns {ContextNode}
|
|
138
|
+
*/
|
|
74
139
|
export const label = ( node, name ) => context( node, { label: name } );
|
|
75
140
|
|
|
76
141
|
addMethodChaining( 'context', context );
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { nodeImmutable, varying } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module IndexNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This class represents shader indices of different types. The following predefined node
|
|
8
|
+
* objects cover frequent use cases:
|
|
9
|
+
*
|
|
10
|
+
* - `vertexIndex`: The index of a vertex within a mesh.
|
|
11
|
+
* - `instanceIndex`: The index of either a mesh instance or an invocation of a compute shader.
|
|
12
|
+
* - `drawIndex`: The index of a draw call.
|
|
13
|
+
* - `invocationLocalIndex`: The index of a compute invocation within the scope of a workgroup load.
|
|
14
|
+
* - `invocationSubgroupIndex`: The index of a compute invocation within the scope of a subgroup.
|
|
15
|
+
* - `subgroupIndex`: The index of the subgroup the current compute invocation belongs to.
|
|
16
|
+
*
|
|
17
|
+
* @augments Node
|
|
18
|
+
*/
|
|
4
19
|
class IndexNode extends Node {
|
|
5
20
|
|
|
6
21
|
static get type() {
|
|
@@ -9,13 +24,30 @@ class IndexNode extends Node {
|
|
|
9
24
|
|
|
10
25
|
}
|
|
11
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new index node.
|
|
29
|
+
*
|
|
30
|
+
* @param {('vertex'|'instance'|'subgroup'|'invocationLocal'|'invocationSubgroup'|'draw')} scope - The scope of the index node.
|
|
31
|
+
*/
|
|
12
32
|
constructor( scope ) {
|
|
13
33
|
|
|
14
34
|
super( 'uint' );
|
|
15
35
|
|
|
36
|
+
/**
|
|
37
|
+
* The scope of the index node.
|
|
38
|
+
*
|
|
39
|
+
* @type {String}
|
|
40
|
+
*/
|
|
16
41
|
this.scope = scope;
|
|
17
42
|
|
|
18
|
-
|
|
43
|
+
/**
|
|
44
|
+
* This flag can be used for type testing.
|
|
45
|
+
*
|
|
46
|
+
* @type {Boolean}
|
|
47
|
+
* @readonly
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
50
|
+
this.isIndexNode = true;
|
|
19
51
|
|
|
20
52
|
}
|
|
21
53
|
|
|
@@ -28,32 +60,26 @@ class IndexNode extends Node {
|
|
|
28
60
|
|
|
29
61
|
if ( scope === IndexNode.VERTEX ) {
|
|
30
62
|
|
|
31
|
-
// The index of a vertex within a mesh.
|
|
32
63
|
propertyName = builder.getVertexIndex();
|
|
33
64
|
|
|
34
65
|
} else if ( scope === IndexNode.INSTANCE ) {
|
|
35
66
|
|
|
36
|
-
// The index of either a mesh instance or an invocation of a compute shader.
|
|
37
67
|
propertyName = builder.getInstanceIndex();
|
|
38
68
|
|
|
39
69
|
} else if ( scope === IndexNode.DRAW ) {
|
|
40
70
|
|
|
41
|
-
// The index of a draw call.
|
|
42
71
|
propertyName = builder.getDrawIndex();
|
|
43
72
|
|
|
44
73
|
} else if ( scope === IndexNode.INVOCATION_LOCAL ) {
|
|
45
74
|
|
|
46
|
-
// The index of a compute invocation within the scope of a workgroup load.
|
|
47
75
|
propertyName = builder.getInvocationLocalIndex();
|
|
48
76
|
|
|
49
77
|
} else if ( scope === IndexNode.INVOCATION_SUBGROUP ) {
|
|
50
78
|
|
|
51
|
-
// The index of a compute invocation within the scope of a subgroup.
|
|
52
79
|
propertyName = builder.getInvocationSubgroupIndex();
|
|
53
80
|
|
|
54
81
|
} else if ( scope === IndexNode.SUBGROUP ) {
|
|
55
82
|
|
|
56
|
-
// The index of the subgroup the current compute invocation belongs to.
|
|
57
83
|
propertyName = builder.getSubgroupIndex();
|
|
58
84
|
|
|
59
85
|
} else {
|
|
@@ -91,9 +117,44 @@ IndexNode.DRAW = 'draw';
|
|
|
91
117
|
|
|
92
118
|
export default IndexNode;
|
|
93
119
|
|
|
120
|
+
/**
|
|
121
|
+
* TSL object that represents the index of a vertex within a mesh.
|
|
122
|
+
*
|
|
123
|
+
* @type {IndexNode}
|
|
124
|
+
*/
|
|
94
125
|
export const vertexIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.VERTEX );
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* TSL object that represents the index of either a mesh instance or an invocation of a compute shader.
|
|
129
|
+
*
|
|
130
|
+
* @type {IndexNode}
|
|
131
|
+
*/
|
|
95
132
|
export const instanceIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INSTANCE );
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* TSL object that represents the index of the subgroup the current compute invocation belongs to.
|
|
136
|
+
*
|
|
137
|
+
* @type {IndexNode}
|
|
138
|
+
*/
|
|
96
139
|
export const subgroupIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.SUBGROUP );
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* TSL object that represents the index of a compute invocation within the scope of a subgroup.
|
|
143
|
+
*
|
|
144
|
+
* @type {IndexNode}
|
|
145
|
+
*/
|
|
97
146
|
export const invocationSubgroupIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INVOCATION_SUBGROUP );
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* TSL object that represents the index of a compute invocation within the scope of a workgroup load.
|
|
150
|
+
*
|
|
151
|
+
* @type {IndexNode}
|
|
152
|
+
*/
|
|
98
153
|
export const invocationLocalIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INVOCATION_LOCAL );
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* TSL object that represents the index of a draw call.
|
|
157
|
+
*
|
|
158
|
+
* @type {IndexNode}
|
|
159
|
+
*/
|
|
99
160
|
export const drawIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.DRAW );
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { getValueType, getValueFromType, arrayBufferToBase64 } from './NodeUtils.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Base class for representing data input nodes.
|
|
6
|
+
*
|
|
7
|
+
* @augments Node
|
|
8
|
+
*/
|
|
4
9
|
class InputNode extends Node {
|
|
5
10
|
|
|
6
11
|
static get type() {
|
|
@@ -9,13 +14,38 @@ class InputNode extends Node {
|
|
|
9
14
|
|
|
10
15
|
}
|
|
11
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new input node.
|
|
19
|
+
*
|
|
20
|
+
* @param {Any} value - The value of this node. This can be a any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
|
|
21
|
+
* @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
22
|
+
*/
|
|
12
23
|
constructor( value, nodeType = null ) {
|
|
13
24
|
|
|
14
25
|
super( nodeType );
|
|
15
26
|
|
|
27
|
+
/**
|
|
28
|
+
* This flag can be used for type testing.
|
|
29
|
+
*
|
|
30
|
+
* @type {Boolean}
|
|
31
|
+
* @readonly
|
|
32
|
+
* @default true
|
|
33
|
+
*/
|
|
16
34
|
this.isInputNode = true;
|
|
17
35
|
|
|
36
|
+
/**
|
|
37
|
+
* The value of this node. This can be a any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
|
|
38
|
+
*
|
|
39
|
+
* @type {Any}
|
|
40
|
+
*/
|
|
18
41
|
this.value = value;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The precision of the value in the shader.
|
|
45
|
+
*
|
|
46
|
+
* @type {('low'|'medium'|'high')?}
|
|
47
|
+
* @default null
|
|
48
|
+
*/
|
|
19
49
|
this.precision = null;
|
|
20
50
|
|
|
21
51
|
}
|
|
@@ -32,12 +62,30 @@ class InputNode extends Node {
|
|
|
32
62
|
|
|
33
63
|
}
|
|
34
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Returns the input type of the node which is by default the node type. Derived modules
|
|
67
|
+
* might overwrite this method and use a fixed type or compute one analytically.
|
|
68
|
+
*
|
|
69
|
+
* A typical example for different input and node types are textures. The input type of a
|
|
70
|
+
* normal RGBA texture is `texture` whereas its node type is `vec4`.
|
|
71
|
+
*
|
|
72
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
73
|
+
* @return {String} The input type.
|
|
74
|
+
*/
|
|
35
75
|
getInputType( builder ) {
|
|
36
76
|
|
|
37
77
|
return this.getNodeType( builder );
|
|
38
78
|
|
|
39
79
|
}
|
|
40
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Sets the precision to the given value. The method can be
|
|
83
|
+
* overwritten in derived classes if the final precision must be computed
|
|
84
|
+
* analytically.
|
|
85
|
+
*
|
|
86
|
+
* @param {('low'|'medium'|'high')} precision - The precision of the input value in the shader.
|
|
87
|
+
* @return {InputNode} A reference to this node.
|
|
88
|
+
*/
|
|
41
89
|
setPrecision( precision ) {
|
|
42
90
|
|
|
43
91
|
this.precision = precision;
|
|
@@ -1,15 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract class for implementing lighting models. The module defines
|
|
3
|
+
* multiple methods that concrete lighting models can implement. These
|
|
4
|
+
* methods are executed at different points during the light evaluation
|
|
5
|
+
* process.
|
|
6
|
+
*/
|
|
1
7
|
class LightingModel {
|
|
2
8
|
|
|
9
|
+
/**
|
|
10
|
+
* This method is intended for setting up lighting model and context data
|
|
11
|
+
* which are later used in the evaluation process.
|
|
12
|
+
*
|
|
13
|
+
* @abstract
|
|
14
|
+
* @param {ContextNode} input - The current node context.
|
|
15
|
+
* @param {StackNode} stack - The current stack.
|
|
16
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
17
|
+
*/
|
|
3
18
|
start( /*input, stack, builder*/ ) { }
|
|
4
19
|
|
|
20
|
+
/**
|
|
21
|
+
* This method is intended for executing final tasks like final updates
|
|
22
|
+
* to the outgoing light.
|
|
23
|
+
*
|
|
24
|
+
* @abstract
|
|
25
|
+
* @param {ContextNode} input - The current node context.
|
|
26
|
+
* @param {StackNode} stack - The current stack.
|
|
27
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
28
|
+
*/
|
|
5
29
|
finish( /*input, stack, builder*/ ) { }
|
|
6
30
|
|
|
31
|
+
/**
|
|
32
|
+
* This method is intended for implementing the direct light term and
|
|
33
|
+
* executed during the build process of directional, point and spot light nodes.
|
|
34
|
+
*
|
|
35
|
+
* @abstract
|
|
36
|
+
* @param {Object} input - The input data.
|
|
37
|
+
* @param {StackNode} stack - The current stack.
|
|
38
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
39
|
+
*/
|
|
7
40
|
direct( /*input, stack, builder*/ ) { }
|
|
8
41
|
|
|
42
|
+
/**
|
|
43
|
+
* This method is intended for implementing the direct light term for
|
|
44
|
+
* rect area light nodes.
|
|
45
|
+
*
|
|
46
|
+
* @abstract
|
|
47
|
+
* @param {Object} input - The input data.
|
|
48
|
+
* @param {StackNode} stack - The current stack.
|
|
49
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
50
|
+
*/
|
|
9
51
|
directRectArea( /*input, stack, builder*/ ) {}
|
|
10
52
|
|
|
53
|
+
/**
|
|
54
|
+
* This method is intended for implementing the indirect light term.
|
|
55
|
+
*
|
|
56
|
+
* @abstract
|
|
57
|
+
* @param {ContextNode} input - The current node context.
|
|
58
|
+
* @param {StackNode} stack - The current stack.
|
|
59
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
60
|
+
*/
|
|
11
61
|
indirect( /*input, stack, builder*/ ) { }
|
|
12
62
|
|
|
63
|
+
/**
|
|
64
|
+
* This method is intended for implementing the ambient occlusion term.
|
|
65
|
+
* Unlike other methods, this method must be called manually by the lighting
|
|
66
|
+
* model in its indirect term.
|
|
67
|
+
*
|
|
68
|
+
* @abstract
|
|
69
|
+
* @param {ContextNode} input - The current node context.
|
|
70
|
+
* @param {StackNode} stack - The current stack.
|
|
71
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
72
|
+
*/
|
|
13
73
|
ambientOcclusion( /*input, stack, builder*/ ) { }
|
|
14
74
|
|
|
15
75
|
}
|