@plastic-software/three 0.167.4 → 0.174.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 +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -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 +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- 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/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- 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 +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- 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 +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -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 +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -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 +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -1,24 +1,131 @@
|
|
|
1
|
-
import Node, { addNodeClass } from './Node.js';
|
|
2
1
|
|
|
2
|
+
import Node from './Node.js';
|
|
3
|
+
import { getLengthFromType } from './NodeUtils.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates a layout for struct members.
|
|
7
|
+
* This function takes an object representing struct members and returns an array of member layouts.
|
|
8
|
+
* Each member layout includes the member's name, type, and whether it is atomic.
|
|
9
|
+
*
|
|
10
|
+
* @param {Object.<string, string|Object>} members - An object where keys are member names and values are either types (as strings) or objects with type and atomic properties.
|
|
11
|
+
* @returns {Array.<{name: string, type: string, atomic: boolean}>} An array of member layouts.
|
|
12
|
+
*/
|
|
13
|
+
function getMembersLayout( members ) {
|
|
14
|
+
|
|
15
|
+
return Object.entries( members ).map( ( [ name, value ] ) => {
|
|
16
|
+
|
|
17
|
+
if ( typeof value === 'string' ) {
|
|
18
|
+
|
|
19
|
+
return { name, type: value, atomic: false };
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return { name, type: value.type, atomic: value.atomic || false };
|
|
24
|
+
|
|
25
|
+
} );
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Represents a struct type node in the node-based system.
|
|
31
|
+
* This class is used to define and manage the layout and types of struct members.
|
|
32
|
+
* It extends the base Node class and provides methods to get the length of the struct,
|
|
33
|
+
* retrieve member types, and generate the struct type for a builder.
|
|
34
|
+
*
|
|
35
|
+
* @augments Node
|
|
36
|
+
*/
|
|
3
37
|
class StructTypeNode extends Node {
|
|
4
38
|
|
|
5
|
-
|
|
39
|
+
static get type() {
|
|
6
40
|
|
|
7
|
-
|
|
41
|
+
return 'StructTypeNode';
|
|
8
42
|
|
|
9
|
-
|
|
10
|
-
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Creates an instance of StructTypeNode.
|
|
47
|
+
*
|
|
48
|
+
* @param {Object} membersLayout - The layout of the members for the struct.
|
|
49
|
+
* @param {string} [name=null] - The optional name of the struct.
|
|
50
|
+
*/
|
|
51
|
+
constructor( membersLayout, name = null ) {
|
|
52
|
+
|
|
53
|
+
super( 'struct' );
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The layout of the members for the struct
|
|
57
|
+
*
|
|
58
|
+
* @type {Array.<{name: string, type: string, atomic: boolean}>}
|
|
59
|
+
*/
|
|
60
|
+
this.membersLayout = getMembersLayout( membersLayout );
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The name of the struct.
|
|
64
|
+
*
|
|
65
|
+
* @type {string}
|
|
66
|
+
* @default null
|
|
67
|
+
*/
|
|
68
|
+
this.name = name;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* This flag can be used for type testing.
|
|
72
|
+
*
|
|
73
|
+
* @type {boolean}
|
|
74
|
+
* @readonly
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
this.isStructLayoutNode = true;
|
|
11
78
|
|
|
12
79
|
}
|
|
13
80
|
|
|
14
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Returns the length of the struct.
|
|
83
|
+
* The length is calculated by summing the lengths of the struct's members.
|
|
84
|
+
*
|
|
85
|
+
* @returns {number} The length of the struct.
|
|
86
|
+
*/
|
|
87
|
+
getLength() {
|
|
88
|
+
|
|
89
|
+
let length = 0;
|
|
90
|
+
|
|
91
|
+
for ( const member of this.membersLayout ) {
|
|
92
|
+
|
|
93
|
+
length += getLengthFromType( member.type );
|
|
94
|
+
|
|
95
|
+
}
|
|
15
96
|
|
|
16
|
-
return
|
|
97
|
+
return length;
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
getMemberType( builder, name ) {
|
|
102
|
+
|
|
103
|
+
const member = this.membersLayout.find( m => m.name === name );
|
|
104
|
+
|
|
105
|
+
return member ? member.type : 'void';
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
getNodeType( builder ) {
|
|
110
|
+
|
|
111
|
+
const structType = builder.getStructTypeFromNode( this, this.membersLayout, this.name );
|
|
112
|
+
|
|
113
|
+
return structType.name;
|
|
114
|
+
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
setup( builder ) {
|
|
118
|
+
|
|
119
|
+
builder.addInclude( this );
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
generate( builder ) {
|
|
124
|
+
|
|
125
|
+
return this.getNodeType( builder );
|
|
17
126
|
|
|
18
127
|
}
|
|
19
128
|
|
|
20
129
|
}
|
|
21
130
|
|
|
22
131
|
export default StructTypeNode;
|
|
23
|
-
|
|
24
|
-
addNodeClass( 'StructTypeNode', StructTypeNode );
|
|
@@ -1,15 +1,47 @@
|
|
|
1
|
-
import Node
|
|
2
|
-
|
|
1
|
+
import Node from './Node.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This module uses cache management to create temporary variables
|
|
5
|
+
* if the node is used more than once to prevent duplicate calculations.
|
|
6
|
+
*
|
|
7
|
+
* The class acts as a base class for many other nodes types.
|
|
8
|
+
*
|
|
9
|
+
* @augments Node
|
|
10
|
+
*/
|
|
3
11
|
class TempNode extends Node {
|
|
4
12
|
|
|
5
|
-
|
|
13
|
+
static get type() {
|
|
14
|
+
|
|
15
|
+
return 'TempNode';
|
|
6
16
|
|
|
7
|
-
|
|
17
|
+
}
|
|
8
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a temp node.
|
|
21
|
+
*
|
|
22
|
+
* @param {?string} nodeType - The node type.
|
|
23
|
+
*/
|
|
24
|
+
constructor( nodeType = null ) {
|
|
25
|
+
|
|
26
|
+
super( nodeType );
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* This flag can be used for type testing.
|
|
30
|
+
*
|
|
31
|
+
* @type {boolean}
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
9
35
|
this.isTempNode = true;
|
|
10
36
|
|
|
11
37
|
}
|
|
12
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Whether this node is used more than once in context of other nodes.
|
|
41
|
+
*
|
|
42
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
43
|
+
* @return {boolean} A flag that indicates if there is more than one dependency to other nodes.
|
|
44
|
+
*/
|
|
13
45
|
hasDependencies( builder ) {
|
|
14
46
|
|
|
15
47
|
return builder.getDataFromNode( this ).usageCount > 1;
|
|
@@ -36,7 +68,7 @@ class TempNode extends Node {
|
|
|
36
68
|
const nodeVar = builder.getVarFromNode( this, null, type );
|
|
37
69
|
const propertyName = builder.getPropertyName( nodeVar );
|
|
38
70
|
|
|
39
|
-
builder.addLineFlowCode( `${propertyName} = ${snippet}
|
|
71
|
+
builder.addLineFlowCode( `${ propertyName } = ${ snippet }`, this );
|
|
40
72
|
|
|
41
73
|
nodeData.snippet = snippet;
|
|
42
74
|
nodeData.propertyName = propertyName;
|
|
@@ -54,5 +86,3 @@ class TempNode extends Node {
|
|
|
54
86
|
}
|
|
55
87
|
|
|
56
88
|
export default TempNode;
|
|
57
|
-
|
|
58
|
-
addNodeClass( 'TempNode', TempNode );
|
|
@@ -1,27 +1,72 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import { addNodeClass } from './Node.js';
|
|
3
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This node can be used to group single instances of {@link UniformNode}
|
|
5
|
+
* and manage them as a uniform buffer.
|
|
6
|
+
*
|
|
7
|
+
* In most cases, the predefined nodes `objectGroup`, `renderGroup` and `frameGroup`
|
|
8
|
+
* will be used when defining the {@link UniformNode#groupNode} property.
|
|
9
|
+
*
|
|
10
|
+
* - `objectGroup`: Uniform buffer per object.
|
|
11
|
+
* - `renderGroup`: Shared uniform buffer, updated once per render call.
|
|
12
|
+
* - `frameGroup`: Shared uniform buffer, updated once per frame.
|
|
13
|
+
*
|
|
14
|
+
* @augments Node
|
|
15
|
+
*/
|
|
4
16
|
class UniformGroupNode extends Node {
|
|
5
17
|
|
|
6
|
-
|
|
18
|
+
static get type() {
|
|
19
|
+
|
|
20
|
+
return 'UniformGroupNode';
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new uniform group node.
|
|
26
|
+
*
|
|
27
|
+
* @param {string} name - The name of the uniform group node.
|
|
28
|
+
* @param {boolean} [shared=false] - Whether this uniform group node is shared or not.
|
|
29
|
+
* @param {number} [order=1] - Influences the internal sorting.
|
|
30
|
+
*/
|
|
31
|
+
constructor( name, shared = false, order = 1 ) {
|
|
7
32
|
|
|
8
33
|
super( 'string' );
|
|
9
34
|
|
|
35
|
+
/**
|
|
36
|
+
* The name of the uniform group node.
|
|
37
|
+
*
|
|
38
|
+
* @type {string}
|
|
39
|
+
*/
|
|
10
40
|
this.name = name;
|
|
11
|
-
this.version = 0;
|
|
12
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Whether this uniform group node is shared or not.
|
|
44
|
+
*
|
|
45
|
+
* @type {boolean}
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
13
48
|
this.shared = shared;
|
|
14
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Influences the internal sorting.
|
|
52
|
+
* TODO: Add details when this property should be changed.
|
|
53
|
+
*
|
|
54
|
+
* @type {number}
|
|
55
|
+
* @default 1
|
|
56
|
+
*/
|
|
57
|
+
this.order = order;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* This flag can be used for type testing.
|
|
61
|
+
*
|
|
62
|
+
* @type {boolean}
|
|
63
|
+
* @readonly
|
|
64
|
+
* @default true
|
|
65
|
+
*/
|
|
15
66
|
this.isUniformGroup = true;
|
|
16
67
|
|
|
17
68
|
}
|
|
18
69
|
|
|
19
|
-
set needsUpdate( value ) {
|
|
20
|
-
|
|
21
|
-
if ( value === true ) this.version ++;
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
70
|
serialize( data ) {
|
|
26
71
|
|
|
27
72
|
super.serialize( data );
|
|
@@ -44,13 +89,49 @@ class UniformGroupNode extends Node {
|
|
|
44
89
|
|
|
45
90
|
}
|
|
46
91
|
|
|
47
|
-
export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
48
|
-
export const sharedUniformGroup = ( name ) => new UniformGroupNode( name, true );
|
|
49
|
-
|
|
50
|
-
export const frameGroup = sharedUniformGroup( 'frame' );
|
|
51
|
-
export const renderGroup = sharedUniformGroup( 'render' );
|
|
52
|
-
export const objectGroup = uniformGroup( 'object' );
|
|
53
|
-
|
|
54
92
|
export default UniformGroupNode;
|
|
55
93
|
|
|
56
|
-
|
|
94
|
+
/**
|
|
95
|
+
* TSL function for creating a uniform group node with the given name.
|
|
96
|
+
*
|
|
97
|
+
* @tsl
|
|
98
|
+
* @function
|
|
99
|
+
* @param {string} name - The name of the uniform group node.
|
|
100
|
+
* @returns {UniformGroupNode}
|
|
101
|
+
*/
|
|
102
|
+
export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* TSL function for creating a shared uniform group node with the given name and order.
|
|
106
|
+
*
|
|
107
|
+
* @tsl
|
|
108
|
+
* @function
|
|
109
|
+
* @param {string} name - The name of the uniform group node.
|
|
110
|
+
* @param {number} [order=0] - Influences the internal sorting.
|
|
111
|
+
* @returns {UniformGroupNode}
|
|
112
|
+
*/
|
|
113
|
+
export const sharedUniformGroup = ( name, order = 0 ) => new UniformGroupNode( name, true, order );
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* TSL object that represents a shared uniform group node which is updated once per frame.
|
|
117
|
+
*
|
|
118
|
+
* @tsl
|
|
119
|
+
* @type {UniformGroupNode}
|
|
120
|
+
*/
|
|
121
|
+
export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* TSL object that represents a shared uniform group node which is updated once per render.
|
|
125
|
+
*
|
|
126
|
+
* @tsl
|
|
127
|
+
* @type {UniformGroupNode}
|
|
128
|
+
*/
|
|
129
|
+
export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* TSL object that represents a uniform group node which is updated once per object.
|
|
133
|
+
*
|
|
134
|
+
* @tsl
|
|
135
|
+
* @type {UniformGroupNode}
|
|
136
|
+
*/
|
|
137
|
+
export const objectGroup = /*@__PURE__*/ uniformGroup( 'object' );
|
|
@@ -1,21 +1,64 @@
|
|
|
1
1
|
import InputNode from './InputNode.js';
|
|
2
2
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
|
-
import {
|
|
4
|
-
import { nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js';
|
|
3
|
+
import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
|
|
5
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Class for representing a uniform.
|
|
7
|
+
*
|
|
8
|
+
* @augments InputNode
|
|
9
|
+
*/
|
|
6
10
|
class UniformNode extends InputNode {
|
|
7
11
|
|
|
12
|
+
static get type() {
|
|
13
|
+
|
|
14
|
+
return 'UniformNode';
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new uniform node.
|
|
20
|
+
*
|
|
21
|
+
* @param {any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).
|
|
22
|
+
* @param {?string} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
23
|
+
*/
|
|
8
24
|
constructor( value, nodeType = null ) {
|
|
9
25
|
|
|
10
26
|
super( value, nodeType );
|
|
11
27
|
|
|
28
|
+
/**
|
|
29
|
+
* This flag can be used for type testing.
|
|
30
|
+
*
|
|
31
|
+
* @type {boolean}
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
12
35
|
this.isUniformNode = true;
|
|
13
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The name or label of the uniform.
|
|
39
|
+
*
|
|
40
|
+
* @type {string}
|
|
41
|
+
* @default ''
|
|
42
|
+
*/
|
|
14
43
|
this.name = '';
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The uniform group of this uniform. By default, uniforms are
|
|
47
|
+
* managed per object but they might belong to a shared group
|
|
48
|
+
* which is updated per frame or render call.
|
|
49
|
+
*
|
|
50
|
+
* @type {UniformGroupNode}
|
|
51
|
+
*/
|
|
15
52
|
this.groupNode = objectGroup;
|
|
16
53
|
|
|
17
54
|
}
|
|
18
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Sets the {@link UniformNode#name} property.
|
|
58
|
+
*
|
|
59
|
+
* @param {string} name - The name of the uniform.
|
|
60
|
+
* @return {UniformNode} A reference to this node.
|
|
61
|
+
*/
|
|
19
62
|
label( name ) {
|
|
20
63
|
|
|
21
64
|
this.name = name;
|
|
@@ -24,6 +67,12 @@ class UniformNode extends InputNode {
|
|
|
24
67
|
|
|
25
68
|
}
|
|
26
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Sets the {@link UniformNode#groupNode} property.
|
|
72
|
+
*
|
|
73
|
+
* @param {UniformGroupNode} group - The uniform group.
|
|
74
|
+
* @return {UniformNode} A reference to this node.
|
|
75
|
+
*/
|
|
27
76
|
setGroup( group ) {
|
|
28
77
|
|
|
29
78
|
this.groupNode = group;
|
|
@@ -32,12 +81,24 @@ class UniformNode extends InputNode {
|
|
|
32
81
|
|
|
33
82
|
}
|
|
34
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Returns the {@link UniformNode#groupNode}.
|
|
86
|
+
*
|
|
87
|
+
* @return {UniformGroupNode} The uniform group.
|
|
88
|
+
*/
|
|
35
89
|
getGroup() {
|
|
36
90
|
|
|
37
91
|
return this.groupNode;
|
|
38
92
|
|
|
39
93
|
}
|
|
40
94
|
|
|
95
|
+
/**
|
|
96
|
+
* By default, this method returns the result of {@link Node#getHash} but derived
|
|
97
|
+
* classes might overwrite this method with a different implementation.
|
|
98
|
+
*
|
|
99
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
100
|
+
* @return {string} The uniform hash.
|
|
101
|
+
*/
|
|
41
102
|
getUniformHash( builder ) {
|
|
42
103
|
|
|
43
104
|
return this.getHash( builder );
|
|
@@ -95,6 +156,15 @@ class UniformNode extends InputNode {
|
|
|
95
156
|
|
|
96
157
|
export default UniformNode;
|
|
97
158
|
|
|
159
|
+
/**
|
|
160
|
+
* TSL function for creating a uniform node.
|
|
161
|
+
*
|
|
162
|
+
* @tsl
|
|
163
|
+
* @function
|
|
164
|
+
* @param {any} arg1 - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).
|
|
165
|
+
* @param {string} [arg2] - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
166
|
+
* @returns {UniformNode}
|
|
167
|
+
*/
|
|
98
168
|
export const uniform = ( arg1, arg2 ) => {
|
|
99
169
|
|
|
100
170
|
const nodeType = getConstNodeType( arg2 || arg1 );
|
|
@@ -105,5 +175,3 @@ export const uniform = ( arg1, arg2 ) => {
|
|
|
105
175
|
return nodeObject( new UniformNode( value, nodeType ) );
|
|
106
176
|
|
|
107
177
|
};
|
|
108
|
-
|
|
109
|
-
addNodeClass( 'UniformNode', UniformNode );
|
|
@@ -1,19 +1,77 @@
|
|
|
1
|
-
import Node
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import Node from './Node.js';
|
|
2
|
+
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Class for representing shader variables as nodes. Variables are created from
|
|
6
|
+
* existing nodes like the following:
|
|
7
|
+
*
|
|
8
|
+
* ```js
|
|
9
|
+
* const depth = sampleDepth( uvNode ).toVar( 'depth' );
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @augments Node
|
|
13
|
+
*/
|
|
4
14
|
class VarNode extends Node {
|
|
5
15
|
|
|
6
|
-
|
|
16
|
+
static get type() {
|
|
17
|
+
|
|
18
|
+
return 'VarNode';
|
|
19
|
+
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new variable node.
|
|
24
|
+
*
|
|
25
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
26
|
+
* @param {?string} name - The name of the variable in the shader.
|
|
27
|
+
* @param {?boolean} readOnly - The read-only flag.
|
|
28
|
+
*/
|
|
29
|
+
constructor( node, name = null, readOnly = false ) {
|
|
7
30
|
|
|
8
31
|
super();
|
|
9
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The node for which a variable should be created.
|
|
35
|
+
*
|
|
36
|
+
* @type {Node}
|
|
37
|
+
*/
|
|
10
38
|
this.node = node;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The name of the variable in the shader. If no name is defined,
|
|
42
|
+
* the node system auto-generates one.
|
|
43
|
+
*
|
|
44
|
+
* @type {?string}
|
|
45
|
+
* @default null
|
|
46
|
+
*/
|
|
11
47
|
this.name = name;
|
|
12
48
|
|
|
49
|
+
/**
|
|
50
|
+
* `VarNode` sets this property to `true` by default.
|
|
51
|
+
*
|
|
52
|
+
* @type {boolean}
|
|
53
|
+
* @default true
|
|
54
|
+
*/
|
|
13
55
|
this.global = true;
|
|
14
56
|
|
|
57
|
+
/**
|
|
58
|
+
* This flag can be used for type testing.
|
|
59
|
+
*
|
|
60
|
+
* @type {boolean}
|
|
61
|
+
* @readonly
|
|
62
|
+
* @default true
|
|
63
|
+
*/
|
|
15
64
|
this.isVarNode = true;
|
|
16
65
|
|
|
66
|
+
/**
|
|
67
|
+
*
|
|
68
|
+
* The read-only flag.
|
|
69
|
+
*
|
|
70
|
+
* @type {boolean}
|
|
71
|
+
* @default false
|
|
72
|
+
*/
|
|
73
|
+
this.readOnly = readOnly;
|
|
74
|
+
|
|
17
75
|
}
|
|
18
76
|
|
|
19
77
|
getHash( builder ) {
|
|
@@ -22,6 +80,18 @@ class VarNode extends Node {
|
|
|
22
80
|
|
|
23
81
|
}
|
|
24
82
|
|
|
83
|
+
getMemberType( builder, name ) {
|
|
84
|
+
|
|
85
|
+
return this.node.getMemberType( builder, name );
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
getElementType( builder ) {
|
|
90
|
+
|
|
91
|
+
return this.node.getElementType( builder );
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
25
95
|
getNodeType( builder ) {
|
|
26
96
|
|
|
27
97
|
return this.node.getNodeType( builder );
|
|
@@ -30,15 +100,50 @@ class VarNode extends Node {
|
|
|
30
100
|
|
|
31
101
|
generate( builder ) {
|
|
32
102
|
|
|
33
|
-
const { node, name } = this;
|
|
103
|
+
const { node, name, readOnly } = this;
|
|
104
|
+
const { renderer } = builder;
|
|
105
|
+
|
|
106
|
+
const isWebGPUBackend = renderer.backend.isWebGPUBackend === true;
|
|
34
107
|
|
|
35
|
-
|
|
108
|
+
let isDeterministic = false;
|
|
109
|
+
let shouldTreatAsReadOnly = false;
|
|
110
|
+
|
|
111
|
+
if ( readOnly ) {
|
|
112
|
+
|
|
113
|
+
isDeterministic = builder.isDeterministic( node );
|
|
114
|
+
|
|
115
|
+
shouldTreatAsReadOnly = isWebGPUBackend ? readOnly : isDeterministic;
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const vectorType = builder.getVectorType( this.getNodeType( builder ) );
|
|
120
|
+
const snippet = node.build( builder, vectorType );
|
|
121
|
+
|
|
122
|
+
const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, shouldTreatAsReadOnly );
|
|
36
123
|
|
|
37
124
|
const propertyName = builder.getPropertyName( nodeVar );
|
|
38
125
|
|
|
39
|
-
|
|
126
|
+
let declarationPrefix = propertyName;
|
|
127
|
+
|
|
128
|
+
if ( shouldTreatAsReadOnly ) {
|
|
129
|
+
|
|
130
|
+
if ( isWebGPUBackend ) {
|
|
40
131
|
|
|
41
|
-
|
|
132
|
+
declarationPrefix = isDeterministic
|
|
133
|
+
? `const ${ propertyName }`
|
|
134
|
+
: `let ${ propertyName }`;
|
|
135
|
+
|
|
136
|
+
} else {
|
|
137
|
+
|
|
138
|
+
const count = builder.getArrayCount( node );
|
|
139
|
+
|
|
140
|
+
declarationPrefix = `const ${ builder.getVar( nodeVar.type, propertyName, count ) }`;
|
|
141
|
+
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
builder.addLineFlowCode( `${ declarationPrefix } = ${ snippet }`, this );
|
|
42
147
|
|
|
43
148
|
return propertyName;
|
|
44
149
|
|
|
@@ -48,9 +153,61 @@ class VarNode extends Node {
|
|
|
48
153
|
|
|
49
154
|
export default VarNode;
|
|
50
155
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
156
|
+
/**
|
|
157
|
+
* TSL function for creating a var node.
|
|
158
|
+
*
|
|
159
|
+
* @tsl
|
|
160
|
+
* @function
|
|
161
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
162
|
+
* @param {?string} name - The name of the variable in the shader.
|
|
163
|
+
* @returns {VarNode}
|
|
164
|
+
*/
|
|
165
|
+
const createVar = /*@__PURE__*/ nodeProxy( VarNode );
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* TSL function for creating a var node.
|
|
169
|
+
*
|
|
170
|
+
* @tsl
|
|
171
|
+
* @function
|
|
172
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
173
|
+
* @param {?string} name - The name of the variable in the shader.
|
|
174
|
+
* @returns {VarNode}
|
|
175
|
+
*/
|
|
176
|
+
export const Var = ( node, name = null ) => createVar( node, name ).append();
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* TSL function for creating a const node.
|
|
180
|
+
*
|
|
181
|
+
* @tsl
|
|
182
|
+
* @function
|
|
183
|
+
* @param {Node} node - The node for which a constant should be created.
|
|
184
|
+
* @param {?string} name - The name of the constant in the shader.
|
|
185
|
+
* @returns {VarNode}
|
|
186
|
+
*/
|
|
187
|
+
export const Const = ( node, name = null ) => createVar( node, name, true ).append();
|
|
188
|
+
|
|
189
|
+
// Method chaining
|
|
190
|
+
|
|
191
|
+
addMethodChaining( 'toVar', Var );
|
|
192
|
+
addMethodChaining( 'toConst', Const );
|
|
193
|
+
|
|
194
|
+
// Deprecated
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* @tsl
|
|
198
|
+
* @function
|
|
199
|
+
* @deprecated since r170. Use `Var( node )` or `node.toVar()` instead.
|
|
200
|
+
*
|
|
201
|
+
* @param {any} node
|
|
202
|
+
* @returns {VarNode}
|
|
203
|
+
*/
|
|
204
|
+
export const temp = ( node ) => { // @deprecated, r170
|
|
205
|
+
|
|
206
|
+
console.warn( 'TSL: "temp( node )" is deprecated. Use "Var( node )" or "node.toVar()" instead.' );
|
|
207
|
+
|
|
208
|
+
return createVar( node );
|
|
209
|
+
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
addMethodChaining( 'temp', temp );
|
|
55
213
|
|
|
56
|
-
addNodeClass( 'VarNode', VarNode );
|