super-three 0.171.0 → 0.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -2,6 +2,14 @@ import TempNode from '../core/TempNode.js';
|
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
import { vectorComponents } from '../core/constants.js';
|
|
4
4
|
|
|
5
|
+
/** @module AssignNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* These node represents an assign operation. Meaning a node is assigned
|
|
9
|
+
* to another node.
|
|
10
|
+
*
|
|
11
|
+
* @augments TempNode
|
|
12
|
+
*/
|
|
5
13
|
class AssignNode extends TempNode {
|
|
6
14
|
|
|
7
15
|
static get type() {
|
|
@@ -10,15 +18,38 @@ class AssignNode extends TempNode {
|
|
|
10
18
|
|
|
11
19
|
}
|
|
12
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new assign node.
|
|
23
|
+
*
|
|
24
|
+
* @param {Node} targetNode - The target node.
|
|
25
|
+
* @param {Node} sourceNode - The source type.
|
|
26
|
+
*/
|
|
13
27
|
constructor( targetNode, sourceNode ) {
|
|
14
28
|
|
|
15
29
|
super();
|
|
16
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The target node.
|
|
33
|
+
*
|
|
34
|
+
* @type {Node}
|
|
35
|
+
*/
|
|
17
36
|
this.targetNode = targetNode;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The source node.
|
|
40
|
+
*
|
|
41
|
+
* @type {Node}
|
|
42
|
+
*/
|
|
18
43
|
this.sourceNode = sourceNode;
|
|
19
44
|
|
|
20
45
|
}
|
|
21
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Whether this node is used more than once in context of other nodes. This method
|
|
49
|
+
* is overwritten since it always returns `false` (assigns are unique).
|
|
50
|
+
*
|
|
51
|
+
* @return {Boolean} A flag that indicates if there is more than one dependency to other nodes. Always `false`.
|
|
52
|
+
*/
|
|
22
53
|
hasDependencies() {
|
|
23
54
|
|
|
24
55
|
return false;
|
|
@@ -31,6 +62,13 @@ class AssignNode extends TempNode {
|
|
|
31
62
|
|
|
32
63
|
}
|
|
33
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Whether a split is required when assigning source to target. This can happen when the component length of
|
|
67
|
+
* target and source data type does not match.
|
|
68
|
+
*
|
|
69
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
70
|
+
* @return {Boolean} Whether a split is required when assigning source to target.
|
|
71
|
+
*/
|
|
34
72
|
needsSplitAssign( builder ) {
|
|
35
73
|
|
|
36
74
|
const { targetNode } = this;
|
|
@@ -38,9 +76,9 @@ class AssignNode extends TempNode {
|
|
|
38
76
|
if ( builder.isAvailable( 'swizzleAssign' ) === false && targetNode.isSplitNode && targetNode.components.length > 1 ) {
|
|
39
77
|
|
|
40
78
|
const targetLength = builder.getTypeLength( targetNode.node.getNodeType( builder ) );
|
|
41
|
-
const
|
|
79
|
+
const assignDifferentVector = vectorComponents.join( '' ).slice( 0, targetLength ) !== targetNode.components;
|
|
42
80
|
|
|
43
|
-
return
|
|
81
|
+
return assignDifferentVector;
|
|
44
82
|
|
|
45
83
|
}
|
|
46
84
|
|
|
@@ -126,6 +164,14 @@ class AssignNode extends TempNode {
|
|
|
126
164
|
|
|
127
165
|
export default AssignNode;
|
|
128
166
|
|
|
167
|
+
/**
|
|
168
|
+
* TSL function for creating an assign node.
|
|
169
|
+
*
|
|
170
|
+
* @function
|
|
171
|
+
* @param {Node} targetNode - The target node.
|
|
172
|
+
* @param {Node} sourceNode - The source type.
|
|
173
|
+
* @returns {AssignNode}
|
|
174
|
+
*/
|
|
129
175
|
export const assign = /*@__PURE__*/ nodeProxy( AssignNode );
|
|
130
176
|
|
|
131
177
|
addMethodChaining( 'assign', assign );
|
|
@@ -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,12 @@
|
|
|
1
1
|
import InputNode from './InputNode.js';
|
|
2
2
|
|
|
3
|
+
const _regNum = /float|u?int/;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Class for representing a constant value in the shader.
|
|
7
|
+
*
|
|
8
|
+
* @augments InputNode
|
|
9
|
+
*/
|
|
3
10
|
class ConstNode extends InputNode {
|
|
4
11
|
|
|
5
12
|
static get type() {
|
|
@@ -8,14 +15,33 @@ class ConstNode extends InputNode {
|
|
|
8
15
|
|
|
9
16
|
}
|
|
10
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new input node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color).
|
|
22
|
+
* @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
23
|
+
*/
|
|
11
24
|
constructor( value, nodeType = null ) {
|
|
12
25
|
|
|
13
26
|
super( value, nodeType );
|
|
14
27
|
|
|
28
|
+
/**
|
|
29
|
+
* This flag can be used for type testing.
|
|
30
|
+
*
|
|
31
|
+
* @type {Boolean}
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
15
35
|
this.isConstNode = true;
|
|
16
36
|
|
|
17
37
|
}
|
|
18
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Generates the shader string of the value with the current node builder.
|
|
41
|
+
*
|
|
42
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
43
|
+
* @return {String} The generated value as a shader string.
|
|
44
|
+
*/
|
|
19
45
|
generateConst( builder ) {
|
|
20
46
|
|
|
21
47
|
return builder.generateConst( this.getNodeType( builder ), this.value );
|
|
@@ -26,6 +52,12 @@ class ConstNode extends InputNode {
|
|
|
26
52
|
|
|
27
53
|
const type = this.getNodeType( builder );
|
|
28
54
|
|
|
55
|
+
if ( _regNum.test( type ) && _regNum.test( output ) ) {
|
|
56
|
+
|
|
57
|
+
return builder.generateConst( output, this.value );
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
29
61
|
return builder.format( this.generateConst( builder ), type, output );
|
|
30
62
|
|
|
31
63
|
}
|
|
@@ -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;
|