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
package/src/nodes/tsl/TSLBase.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
export * from './TSLCore.js'; // float(), vec2(), vec3(), vec4(), mat3(), mat4(), Fn(), If(), element(), nodeObject(), nodeProxy(), ...
|
|
5
5
|
export * from '../core/UniformNode.js'; // uniform()
|
|
6
|
-
export * from '../core/PropertyNode.js'; // property() <-> TODO:
|
|
6
|
+
export * from '../core/PropertyNode.js'; // property() <-> TODO: Separate Material Properties in other file
|
|
7
7
|
export * from '../core/AssignNode.js'; // .assign()
|
|
8
8
|
export * from '../code/FunctionCallNode.js'; // .call()
|
|
9
9
|
export * from '../math/OperatorNode.js'; // .add(), .sub(), ...
|
|
@@ -11,7 +11,7 @@ export * from '../math/MathNode.js'; // abs(), floor(), ...
|
|
|
11
11
|
export * from '../math/ConditionalNode.js'; // select(), ...
|
|
12
12
|
export * from '../core/ContextNode.js'; // .context()
|
|
13
13
|
export * from '../core/VarNode.js'; // .var() -> TODO: Maybe rename .toVar() -> .var()
|
|
14
|
-
export * from '../core/VaryingNode.js'; // varying()
|
|
14
|
+
export * from '../core/VaryingNode.js'; // varying(), vertexStage()
|
|
15
15
|
export * from '../display/ColorSpaceNode.js'; // .toColorSpace()
|
|
16
16
|
export * from '../display/ToneMappingNode.js'; // .toToneMapping()
|
|
17
17
|
export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
|
|
@@ -1,24 +1,60 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Base class for representing element access on an array-like
|
|
5
|
+
* node data structures.
|
|
6
|
+
*
|
|
7
|
+
* @augments Node
|
|
8
|
+
*/
|
|
9
|
+
class ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute
|
|
4
10
|
|
|
5
11
|
static get type() {
|
|
6
12
|
|
|
7
13
|
return 'ArrayElementNode';
|
|
8
14
|
|
|
9
|
-
}
|
|
15
|
+
}
|
|
10
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs an array element node.
|
|
19
|
+
*
|
|
20
|
+
* @param {Node} node - The array-like node.
|
|
21
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
22
|
+
*/
|
|
11
23
|
constructor( node, indexNode ) {
|
|
12
24
|
|
|
13
25
|
super();
|
|
14
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The array-like node.
|
|
29
|
+
*
|
|
30
|
+
* @type {Node}
|
|
31
|
+
*/
|
|
15
32
|
this.node = node;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The index node that defines the element access.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
16
39
|
this.indexNode = indexNode;
|
|
17
40
|
|
|
41
|
+
/**
|
|
42
|
+
* This flag can be used for type testing.
|
|
43
|
+
*
|
|
44
|
+
* @type {Boolean}
|
|
45
|
+
* @readonly
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
18
48
|
this.isArrayElementNode = true;
|
|
19
49
|
|
|
20
50
|
}
|
|
21
51
|
|
|
52
|
+
/**
|
|
53
|
+
* This method is overwritten since the node type is inferred from the array-like node.
|
|
54
|
+
*
|
|
55
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
56
|
+
* @return {String} The node type.
|
|
57
|
+
*/
|
|
22
58
|
getNodeType( builder ) {
|
|
23
59
|
|
|
24
60
|
return this.node.getElementType( builder );
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
5
|
+
* It represents a convert operation during the shader generation process
|
|
6
|
+
* meaning it converts the data type of a node to a target data type.
|
|
7
|
+
*
|
|
8
|
+
* @augments Node
|
|
9
|
+
*/
|
|
3
10
|
class ConvertNode extends Node {
|
|
4
11
|
|
|
5
12
|
static get type() {
|
|
@@ -8,15 +15,39 @@ class ConvertNode extends Node {
|
|
|
8
15
|
|
|
9
16
|
}
|
|
10
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new convert node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Node} node - The node which type should be converted.
|
|
22
|
+
* @param {String} convertTo - The target node type. Multiple types can be defined by separating them with a `|` sign.
|
|
23
|
+
*/
|
|
11
24
|
constructor( node, convertTo ) {
|
|
12
25
|
|
|
13
26
|
super();
|
|
14
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The node which type should be converted.
|
|
30
|
+
*
|
|
31
|
+
* @type {Node}
|
|
32
|
+
*/
|
|
15
33
|
this.node = node;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The target node type. Multiple types can be defined by separating them with a `|` sign.
|
|
37
|
+
*
|
|
38
|
+
* @type {String}
|
|
39
|
+
*/
|
|
16
40
|
this.convertTo = convertTo;
|
|
17
41
|
|
|
18
42
|
}
|
|
19
43
|
|
|
44
|
+
/**
|
|
45
|
+
* This method is overwritten since the implementation tries to infer the best
|
|
46
|
+
* matching type from the {@link ConvertNode#convertTo} property.
|
|
47
|
+
*
|
|
48
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
49
|
+
* @return {String} The node type.
|
|
50
|
+
*/
|
|
20
51
|
getNodeType( builder ) {
|
|
21
52
|
|
|
22
53
|
const requestType = this.node.getNodeType( builder );
|
|
@@ -6,8 +6,16 @@ import { cubeTexture } from '../accessors/CubeTextureNode.js';
|
|
|
6
6
|
import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
|
|
7
7
|
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
|
|
8
8
|
|
|
9
|
+
/** @module CubeMapNode **/
|
|
10
|
+
|
|
9
11
|
const _cache = new WeakMap();
|
|
10
12
|
|
|
13
|
+
/**
|
|
14
|
+
* This node can be used to automatically convert environment maps in the
|
|
15
|
+
* equirectangular format into the cube map format.
|
|
16
|
+
*
|
|
17
|
+
* @augments TempNode
|
|
18
|
+
*/
|
|
11
19
|
class CubeMapNode extends TempNode {
|
|
12
20
|
|
|
13
21
|
static get type() {
|
|
@@ -16,20 +24,59 @@ class CubeMapNode extends TempNode {
|
|
|
16
24
|
|
|
17
25
|
}
|
|
18
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new cube map node.
|
|
29
|
+
*
|
|
30
|
+
* @param {Node} envNode - The node representing the environment map.
|
|
31
|
+
*/
|
|
19
32
|
constructor( envNode ) {
|
|
20
33
|
|
|
21
34
|
super( 'vec3' );
|
|
22
35
|
|
|
36
|
+
/**
|
|
37
|
+
* The node representing the environment map.
|
|
38
|
+
*
|
|
39
|
+
* @type {Node}
|
|
40
|
+
*/
|
|
23
41
|
this.envNode = envNode;
|
|
24
42
|
|
|
43
|
+
/**
|
|
44
|
+
* A reference to the internal cube texture.
|
|
45
|
+
*
|
|
46
|
+
* @private
|
|
47
|
+
* @type {CubeTexture}
|
|
48
|
+
* @default null
|
|
49
|
+
*/
|
|
25
50
|
this._cubeTexture = null;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* A reference to the internal cube texture node.
|
|
54
|
+
*
|
|
55
|
+
* @private
|
|
56
|
+
* @type {CubeTextureNode}
|
|
57
|
+
*/
|
|
26
58
|
this._cubeTextureNode = cubeTexture();
|
|
27
59
|
|
|
28
60
|
const defaultTexture = new CubeTexture();
|
|
29
61
|
defaultTexture.isRenderTargetTexture = true;
|
|
30
62
|
|
|
63
|
+
/**
|
|
64
|
+
* A default cube texture that acts as a placeholder.
|
|
65
|
+
* It is used when the conversion from equirectangular to cube
|
|
66
|
+
* map has not finished yet for a given texture.
|
|
67
|
+
*
|
|
68
|
+
* @private
|
|
69
|
+
* @type {CubeTexture}
|
|
70
|
+
*/
|
|
31
71
|
this._defaultTexture = defaultTexture;
|
|
32
72
|
|
|
73
|
+
/**
|
|
74
|
+
* The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates
|
|
75
|
+
* the texture once per render in its {@link CubeMapNode#updateBefore} method.
|
|
76
|
+
*
|
|
77
|
+
* @type {String}
|
|
78
|
+
* @default 'render'
|
|
79
|
+
*/
|
|
33
80
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
34
81
|
|
|
35
82
|
}
|
|
@@ -117,6 +164,14 @@ class CubeMapNode extends TempNode {
|
|
|
117
164
|
|
|
118
165
|
export default CubeMapNode;
|
|
119
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Returns true if the given equirectangular image has been fully loaded
|
|
169
|
+
* and is ready for further processing.
|
|
170
|
+
*
|
|
171
|
+
* @private
|
|
172
|
+
* @param {Image} image - The equirectangular image to check.
|
|
173
|
+
* @return {Boolean} Whether the image is ready or not.
|
|
174
|
+
*/
|
|
120
175
|
function isEquirectangularMapReady( image ) {
|
|
121
176
|
|
|
122
177
|
if ( image === null || image === undefined ) return false;
|
|
@@ -125,6 +180,14 @@ function isEquirectangularMapReady( image ) {
|
|
|
125
180
|
|
|
126
181
|
}
|
|
127
182
|
|
|
183
|
+
/**
|
|
184
|
+
* This function is executed when `dispose()` is called on the equirectangular
|
|
185
|
+
* texture. In this case, the generated cube map with its render target
|
|
186
|
+
* is deleted as well.
|
|
187
|
+
*
|
|
188
|
+
* @private
|
|
189
|
+
* @param {Object} event - The event object.
|
|
190
|
+
*/
|
|
128
191
|
function onTextureDispose( event ) {
|
|
129
192
|
|
|
130
193
|
const texture = event.target;
|
|
@@ -143,6 +206,14 @@ function onTextureDispose( event ) {
|
|
|
143
206
|
|
|
144
207
|
}
|
|
145
208
|
|
|
209
|
+
/**
|
|
210
|
+
* This function makes sure the generated cube map uses the correct
|
|
211
|
+
* texture mapping that corresponds to the equirectangular original.
|
|
212
|
+
*
|
|
213
|
+
* @private
|
|
214
|
+
* @param {Texture} texture - The cube texture.
|
|
215
|
+
* @param {Number} mapping - The original texture mapping.
|
|
216
|
+
*/
|
|
146
217
|
function mapTextureMapping( texture, mapping ) {
|
|
147
218
|
|
|
148
219
|
if ( mapping === EquirectangularReflectionMapping ) {
|
|
@@ -157,4 +228,11 @@ function mapTextureMapping( texture, mapping ) {
|
|
|
157
228
|
|
|
158
229
|
}
|
|
159
230
|
|
|
231
|
+
/**
|
|
232
|
+
* TSL function for creating a cube map node.
|
|
233
|
+
*
|
|
234
|
+
* @function
|
|
235
|
+
* @param {Node} envNode - The node representing the environment map.
|
|
236
|
+
* @returns {CubeMapNode}
|
|
237
|
+
*/
|
|
160
238
|
export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode );
|
|
@@ -2,7 +2,23 @@ import { select } from '../math/ConditionalNode.js';
|
|
|
2
2
|
import { expression } from '../code/ExpressionNode.js';
|
|
3
3
|
import { addMethodChaining } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
|
+
/** @module Discard **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Represents a `discard` shader operation in TSL.
|
|
9
|
+
*
|
|
10
|
+
* @method
|
|
11
|
+
* @param {ConditionalNode?} conditional - An optional conditional node. It allows to decide whether the discard should be executed or not.
|
|
12
|
+
* @return {Node} The `discard` expression.
|
|
13
|
+
*/
|
|
5
14
|
export const Discard = ( conditional ) => ( conditional ? select( conditional, expression( 'discard' ) ) : expression( 'discard' ) ).append();
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Represents a `return` shader operation in TSL.
|
|
18
|
+
*
|
|
19
|
+
* @method
|
|
20
|
+
* @return {ExpressionNode} The `return` expression.
|
|
21
|
+
*/
|
|
6
22
|
export const Return = () => expression( 'return' ).append();
|
|
7
23
|
|
|
8
24
|
addMethodChaining( 'discard', Discard );
|
|
@@ -2,6 +2,19 @@ import TempNode from '../core/TempNode.js';
|
|
|
2
2
|
import { positionWorldDirection } from '../accessors/Position.js';
|
|
3
3
|
import { nodeProxy, vec2 } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/** @module EquirectUVNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Can be used to compute texture coordinates for projecting an
|
|
9
|
+
* equirectangular texture onto a mesh for using it as the scene's
|
|
10
|
+
* background.
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* scene.backgroundNode = texture( equirectTexture, equirectUV() );
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @augments TempNode
|
|
17
|
+
*/
|
|
5
18
|
class EquirectUVNode extends TempNode {
|
|
6
19
|
|
|
7
20
|
static get type() {
|
|
@@ -10,10 +23,20 @@ class EquirectUVNode extends TempNode {
|
|
|
10
23
|
|
|
11
24
|
}
|
|
12
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new equirect uv node.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
30
|
+
*/
|
|
13
31
|
constructor( dirNode = positionWorldDirection ) {
|
|
14
32
|
|
|
15
33
|
super( 'vec2' );
|
|
16
34
|
|
|
35
|
+
/**
|
|
36
|
+
* A direction vector for sampling why is by default `positionWorldDirection`.
|
|
37
|
+
*
|
|
38
|
+
* @type {Node<vec3>}
|
|
39
|
+
*/
|
|
17
40
|
this.dirNode = dirNode;
|
|
18
41
|
|
|
19
42
|
}
|
|
@@ -22,7 +45,7 @@ class EquirectUVNode extends TempNode {
|
|
|
22
45
|
|
|
23
46
|
const dir = this.dirNode;
|
|
24
47
|
|
|
25
|
-
const u = dir.z.
|
|
48
|
+
const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
|
|
26
49
|
const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
|
|
27
50
|
|
|
28
51
|
return vec2( u, v );
|
|
@@ -33,4 +56,11 @@ class EquirectUVNode extends TempNode {
|
|
|
33
56
|
|
|
34
57
|
export default EquirectUVNode;
|
|
35
58
|
|
|
59
|
+
/**
|
|
60
|
+
* TSL function for creating an equirect uv node.
|
|
61
|
+
*
|
|
62
|
+
* @function
|
|
63
|
+
* @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
64
|
+
* @returns {EquirectUVNode}
|
|
65
|
+
*/
|
|
36
66
|
export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode );
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { vectorComponents } from '../core/constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
6
|
+
* It represents a flip operation during the shader generation process
|
|
7
|
+
* meaning it flips normalized values with the following formula:
|
|
8
|
+
* ```
|
|
9
|
+
* x = 1 - x;
|
|
10
|
+
* ```
|
|
11
|
+
* `FlipNode` is internally used to implement any `flipXYZW()`, `flipRGBA()` and
|
|
12
|
+
* `flipSTPQ()` method invocations on node objects. For example:
|
|
13
|
+
* ```js
|
|
14
|
+
* uvNode = uvNode.flipY();
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @augments TempNode
|
|
18
|
+
*/
|
|
4
19
|
class FlipNode extends TempNode {
|
|
5
20
|
|
|
6
21
|
static get type() {
|
|
@@ -9,15 +24,38 @@ class FlipNode extends TempNode {
|
|
|
9
24
|
|
|
10
25
|
}
|
|
11
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new flip node.
|
|
29
|
+
*
|
|
30
|
+
* @param {Node} sourceNode - The node which component(s) should be flipped.
|
|
31
|
+
* @param {String} components - The components that should be flipped e.g. `'x'` or `'xy'`.
|
|
32
|
+
*/
|
|
12
33
|
constructor( sourceNode, components ) {
|
|
13
34
|
|
|
14
35
|
super();
|
|
15
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The node which component(s) should be flipped.
|
|
39
|
+
*
|
|
40
|
+
* @type {Node}
|
|
41
|
+
*/
|
|
16
42
|
this.sourceNode = sourceNode;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The components that should be flipped e.g. `'x'` or `'xy'`.
|
|
46
|
+
*
|
|
47
|
+
* @type {String}
|
|
48
|
+
*/
|
|
17
49
|
this.components = components;
|
|
18
50
|
|
|
19
51
|
}
|
|
20
52
|
|
|
53
|
+
/**
|
|
54
|
+
* This method is overwritten since the node type is inferred from the source node.
|
|
55
|
+
*
|
|
56
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
57
|
+
* @return {String} The node type.
|
|
58
|
+
*/
|
|
21
59
|
getNodeType( builder ) {
|
|
22
60
|
|
|
23
61
|
return this.sourceNode.getNodeType( builder );
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
-
import { nodeProxy } from '../tsl/
|
|
2
|
+
import { nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module FunctionOverloadingNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This class allows to define multiple overloaded versions
|
|
8
|
+
* of the same function. Depending on the parameters of the function
|
|
9
|
+
* call, the node picks the best-fit overloaded version.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
4
13
|
class FunctionOverloadingNode extends Node {
|
|
5
14
|
|
|
6
15
|
static get type() {
|
|
@@ -9,19 +18,55 @@ class FunctionOverloadingNode extends Node {
|
|
|
9
18
|
|
|
10
19
|
}
|
|
11
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new function overloading node.
|
|
23
|
+
*
|
|
24
|
+
* @param {Array<Function>} functionNodes - Array of `Fn` function definitions.
|
|
25
|
+
* @param {...Node} parametersNodes - A list of parameter nodes.
|
|
26
|
+
*/
|
|
12
27
|
constructor( functionNodes = [], ...parametersNodes ) {
|
|
13
28
|
|
|
14
29
|
super();
|
|
15
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Array of `Fn` function definitions.
|
|
33
|
+
*
|
|
34
|
+
* @type {Array<Function>}
|
|
35
|
+
*/
|
|
16
36
|
this.functionNodes = functionNodes;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A list of parameter nodes.
|
|
40
|
+
*
|
|
41
|
+
* @type {Array<Node>}
|
|
42
|
+
*/
|
|
17
43
|
this.parametersNodes = parametersNodes;
|
|
18
44
|
|
|
45
|
+
/**
|
|
46
|
+
* The selected overloaded function call.
|
|
47
|
+
*
|
|
48
|
+
* @private
|
|
49
|
+
* @type {ShaderCallNodeInternal}
|
|
50
|
+
*/
|
|
19
51
|
this._candidateFnCall = null;
|
|
20
52
|
|
|
53
|
+
/**
|
|
54
|
+
* This node is marked as global.
|
|
55
|
+
*
|
|
56
|
+
* @type {Boolean}
|
|
57
|
+
* @default true
|
|
58
|
+
*/
|
|
21
59
|
this.global = true;
|
|
22
60
|
|
|
23
61
|
}
|
|
24
62
|
|
|
63
|
+
/**
|
|
64
|
+
* This method is overwritten since the node type is inferred from
|
|
65
|
+
* the function's return type.
|
|
66
|
+
*
|
|
67
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
68
|
+
* @return {String} The node type.
|
|
69
|
+
*/
|
|
25
70
|
getNodeType() {
|
|
26
71
|
|
|
27
72
|
return this.functionNodes[ 0 ].shaderNode.layout.type;
|
|
@@ -98,4 +143,11 @@ export default FunctionOverloadingNode;
|
|
|
98
143
|
|
|
99
144
|
const overloadingBaseFn = /*@__PURE__*/ nodeProxy( FunctionOverloadingNode );
|
|
100
145
|
|
|
146
|
+
/**
|
|
147
|
+
* TSL function for creating a function overloading node.
|
|
148
|
+
*
|
|
149
|
+
* @function
|
|
150
|
+
* @param {Array<Function>} functionNodes - Array of `Fn` function definitions.
|
|
151
|
+
* @returns {FunctionOverloadingNode}
|
|
152
|
+
*/
|
|
101
153
|
export const overloadingFn = ( functionNodes ) => ( ...params ) => overloadingBaseFn( functionNodes, ...params );
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
5
|
+
* It represents a join operation during the shader generation process.
|
|
6
|
+
* For example in can compose/join two single floats into a `vec2` type.
|
|
7
|
+
*
|
|
8
|
+
* @augments TempNode
|
|
9
|
+
*/
|
|
3
10
|
class JoinNode extends TempNode {
|
|
4
11
|
|
|
5
12
|
static get type() {
|
|
@@ -8,14 +15,32 @@ class JoinNode extends TempNode {
|
|
|
8
15
|
|
|
9
16
|
}
|
|
10
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new join node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Array<Node>} nodes - An array of nodes that should be joined.
|
|
22
|
+
* @param {String?} [nodeType=null] - The node type.
|
|
23
|
+
*/
|
|
11
24
|
constructor( nodes = [], nodeType = null ) {
|
|
12
25
|
|
|
13
26
|
super( nodeType );
|
|
14
27
|
|
|
28
|
+
/**
|
|
29
|
+
* An array of nodes that should be joined.
|
|
30
|
+
*
|
|
31
|
+
* @type {Array<Node>}
|
|
32
|
+
*/
|
|
15
33
|
this.nodes = nodes;
|
|
16
34
|
|
|
17
35
|
}
|
|
18
36
|
|
|
37
|
+
/**
|
|
38
|
+
* This method is overwritten since the node type must be inferred from the
|
|
39
|
+
* joined data length if not explicitly defined.
|
|
40
|
+
*
|
|
41
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
42
|
+
* @return {String} The node type.
|
|
43
|
+
*/
|
|
19
44
|
getNodeType( builder ) {
|
|
20
45
|
|
|
21
46
|
if ( this.nodeType !== null ) {
|
|
@@ -2,6 +2,34 @@ import Node from '../core/Node.js';
|
|
|
2
2
|
import { expression } from '../code/ExpressionNode.js';
|
|
3
3
|
import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/** @module LoopNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
|
|
9
|
+
* ```js
|
|
10
|
+
* Loop( count, ( { i } ) => {
|
|
11
|
+
*
|
|
12
|
+
* } );
|
|
13
|
+
* ```
|
|
14
|
+
* However, it is also possible to define a start and end ranges, data types and loop conditions:
|
|
15
|
+
* ```js
|
|
16
|
+
* Loop( { start: int( 0 ), end: int( 10 ), type: 'int', condition: '<' }, ( { i } ) => {
|
|
17
|
+
*
|
|
18
|
+
* } );
|
|
19
|
+
*```
|
|
20
|
+
* Nested loops can be defined in a compacted form:
|
|
21
|
+
* ```js
|
|
22
|
+
* Loop( 10, 5, ( { i, j } ) => {
|
|
23
|
+
*
|
|
24
|
+
* } );
|
|
25
|
+
* ```
|
|
26
|
+
* Loops that should run backwards can be defined like so:
|
|
27
|
+
* ```js
|
|
28
|
+
* Loop( { start: 10 }, () => {} );
|
|
29
|
+
* ```
|
|
30
|
+
* The module also provides `Break()` and `Continue()` TSL expression for loop control.
|
|
31
|
+
* @augments Node
|
|
32
|
+
*/
|
|
5
33
|
class LoopNode extends Node {
|
|
6
34
|
|
|
7
35
|
static get type() {
|
|
@@ -10,6 +38,11 @@ class LoopNode extends Node {
|
|
|
10
38
|
|
|
11
39
|
}
|
|
12
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Constructs a new loop node.
|
|
43
|
+
*
|
|
44
|
+
* @param {Array<Any>} params - Depending on the loop type, array holds different parameterization values for the loop.
|
|
45
|
+
*/
|
|
13
46
|
constructor( params = [] ) {
|
|
14
47
|
|
|
15
48
|
super();
|
|
@@ -18,12 +51,25 @@ class LoopNode extends Node {
|
|
|
18
51
|
|
|
19
52
|
}
|
|
20
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Returns a loop variable name based on an index. The pattern is
|
|
56
|
+
* `0` = `i`, `1`= `j`, `2`= `k` and so on.
|
|
57
|
+
*
|
|
58
|
+
* @param {Number} index - The index.
|
|
59
|
+
* @return {String} The loop variable name.
|
|
60
|
+
*/
|
|
21
61
|
getVarName( index ) {
|
|
22
62
|
|
|
23
|
-
return String.fromCharCode( 'i'.charCodeAt() + index );
|
|
63
|
+
return String.fromCharCode( 'i'.charCodeAt( 0 ) + index );
|
|
24
64
|
|
|
25
65
|
}
|
|
26
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Returns properties about this node.
|
|
69
|
+
*
|
|
70
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
71
|
+
* @return {Object} The node properties.
|
|
72
|
+
*/
|
|
27
73
|
getProperties( builder ) {
|
|
28
74
|
|
|
29
75
|
const properties = builder.getNodeProperties( this );
|
|
@@ -56,6 +102,12 @@ class LoopNode extends Node {
|
|
|
56
102
|
|
|
57
103
|
}
|
|
58
104
|
|
|
105
|
+
/**
|
|
106
|
+
* This method is overwritten since the node type is inferred based on the loop configuration.
|
|
107
|
+
*
|
|
108
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
109
|
+
* @return {String} The node type.
|
|
110
|
+
*/
|
|
59
111
|
getNodeType( builder ) {
|
|
60
112
|
|
|
61
113
|
const { returnsNode } = this.getProperties( builder );
|
|
@@ -197,8 +249,29 @@ class LoopNode extends Node {
|
|
|
197
249
|
|
|
198
250
|
export default LoopNode;
|
|
199
251
|
|
|
252
|
+
/**
|
|
253
|
+
* TSL function for creating a loop node.
|
|
254
|
+
*
|
|
255
|
+
* @function
|
|
256
|
+
* @param {...Any} params - A list of parameters.
|
|
257
|
+
* @returns {LoopNode}
|
|
258
|
+
*/
|
|
200
259
|
export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).append();
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* TSL function for creating a `Continue()` expression.
|
|
263
|
+
*
|
|
264
|
+
* @function
|
|
265
|
+
* @returns {ExpressionNode}
|
|
266
|
+
*/
|
|
201
267
|
export const Continue = () => expression( 'continue' ).append();
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* TSL function for creating a `Break()` expression.
|
|
271
|
+
*
|
|
272
|
+
* @function
|
|
273
|
+
* @returns {ExpressionNode}
|
|
274
|
+
*/
|
|
202
275
|
export const Break = () => expression( 'break' ).append();
|
|
203
276
|
|
|
204
277
|
//
|
|
@@ -3,6 +3,14 @@ import { transformedNormalView } from '../accessors/Normal.js';
|
|
|
3
3
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
4
4
|
import { nodeImmutable, vec2, vec3 } from '../tsl/TSLBase.js';
|
|
5
5
|
|
|
6
|
+
/** @module MatcapUVNode **/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Can be used to compute texture coordinates for projecting a
|
|
10
|
+
* matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
|
|
11
|
+
*
|
|
12
|
+
* @augments TempNode
|
|
13
|
+
*/
|
|
6
14
|
class MatcapUVNode extends TempNode {
|
|
7
15
|
|
|
8
16
|
static get type() {
|
|
@@ -11,6 +19,9 @@ class MatcapUVNode extends TempNode {
|
|
|
11
19
|
|
|
12
20
|
}
|
|
13
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new matcap uv node.
|
|
24
|
+
*/
|
|
14
25
|
constructor() {
|
|
15
26
|
|
|
16
27
|
super( 'vec2' );
|
|
@@ -30,4 +41,10 @@ class MatcapUVNode extends TempNode {
|
|
|
30
41
|
|
|
31
42
|
export default MatcapUVNode;
|
|
32
43
|
|
|
44
|
+
/**
|
|
45
|
+
* TSL function for creating a matcap uv node.
|
|
46
|
+
*
|
|
47
|
+
* @function
|
|
48
|
+
* @returns {MatcapUVNode}
|
|
49
|
+
*/
|
|
33
50
|
export const matcapUV = /*@__PURE__*/ nodeImmutable( MatcapUVNode );
|