super-three 0.177.0 → 0.181.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 +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
|
+
import { warn } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* This node can be used as a context management component for another node.
|
|
@@ -78,11 +79,22 @@ class ContextNode extends Node {
|
|
|
78
79
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
|
-
|
|
82
|
+
/**
|
|
83
|
+
* This method is overwritten to ensure it returns the member type of {@link ContextNode#node}.
|
|
84
|
+
*
|
|
85
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
86
|
+
* @param {string} name - The member name.
|
|
87
|
+
* @returns {string} The member type.
|
|
88
|
+
*/
|
|
89
|
+
getMemberType( builder, name ) {
|
|
90
|
+
|
|
91
|
+
return this.node.getMemberType( builder, name );
|
|
82
92
|
|
|
83
|
-
|
|
93
|
+
}
|
|
84
94
|
|
|
85
|
-
|
|
95
|
+
analyze( builder ) {
|
|
96
|
+
|
|
97
|
+
const previousContext = builder.addContext( this.value );
|
|
86
98
|
|
|
87
99
|
this.node.build( builder );
|
|
88
100
|
|
|
@@ -92,9 +104,7 @@ class ContextNode extends Node {
|
|
|
92
104
|
|
|
93
105
|
setup( builder ) {
|
|
94
106
|
|
|
95
|
-
const previousContext = builder.
|
|
96
|
-
|
|
97
|
-
builder.setContext( { ...builder.context, ...this.value } );
|
|
107
|
+
const previousContext = builder.addContext( this.value );
|
|
98
108
|
|
|
99
109
|
this.node.build( builder );
|
|
100
110
|
|
|
@@ -104,9 +114,7 @@ class ContextNode extends Node {
|
|
|
104
114
|
|
|
105
115
|
generate( builder, output ) {
|
|
106
116
|
|
|
107
|
-
const previousContext = builder.
|
|
108
|
-
|
|
109
|
-
builder.setContext( { ...builder.context, ...this.value } );
|
|
117
|
+
const previousContext = builder.addContext( this.value );
|
|
110
118
|
|
|
111
119
|
const snippet = this.node.build( builder, output );
|
|
112
120
|
|
|
@@ -131,16 +139,46 @@ export default ContextNode;
|
|
|
131
139
|
*/
|
|
132
140
|
export const context = /*@__PURE__*/ nodeProxy( ContextNode ).setParameterLength( 1, 2 );
|
|
133
141
|
|
|
142
|
+
/**
|
|
143
|
+
* TSL function for defining a uniformFlow context value for a given node.
|
|
144
|
+
*
|
|
145
|
+
* @tsl
|
|
146
|
+
* @function
|
|
147
|
+
* @param {Node} node - The node whose dependencies should all execute within a uniform control-flow path.
|
|
148
|
+
* @returns {ContextNode}
|
|
149
|
+
*/
|
|
150
|
+
export const uniformFlow = ( node ) => context( node, { uniformFlow: true } );
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* TSL function for defining a name for the context value for a given node.
|
|
154
|
+
*
|
|
155
|
+
* @tsl
|
|
156
|
+
* @function
|
|
157
|
+
* @param {Node} node - The node whose context should be modified.
|
|
158
|
+
* @param {string} name - The name to set.
|
|
159
|
+
* @returns {ContextNode}
|
|
160
|
+
*/
|
|
161
|
+
export const setName = ( node, name ) => context( node, { nodeName: name } );
|
|
162
|
+
|
|
134
163
|
/**
|
|
135
164
|
* TSL function for defining a label context value for a given node.
|
|
136
165
|
*
|
|
137
166
|
* @tsl
|
|
138
167
|
* @function
|
|
168
|
+
* @deprecated
|
|
139
169
|
* @param {Node} node - The node whose context should be modified.
|
|
140
170
|
* @param {string} name - The name/label to set.
|
|
141
171
|
* @returns {ContextNode}
|
|
142
172
|
*/
|
|
143
|
-
export
|
|
173
|
+
export function label( node, name ) {
|
|
174
|
+
|
|
175
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
176
|
+
|
|
177
|
+
return setName( node, name );
|
|
178
|
+
|
|
179
|
+
}
|
|
144
180
|
|
|
145
181
|
addMethodChaining( 'context', context );
|
|
146
182
|
addMethodChaining( 'label', label );
|
|
183
|
+
addMethodChaining( 'uniformFlow', uniformFlow );
|
|
184
|
+
addMethodChaining( 'setName', setName );
|
|
@@ -10,7 +10,7 @@ import { nodeImmutable, varying } from '../tsl/TSLBase.js';
|
|
|
10
10
|
* - `drawIndex`: The index of a draw call.
|
|
11
11
|
* - `invocationLocalIndex`: The index of a compute invocation within the scope of a workgroup load.
|
|
12
12
|
* - `invocationSubgroupIndex`: The index of a compute invocation within the scope of a subgroup.
|
|
13
|
-
* - `subgroupIndex`: The index of
|
|
13
|
+
* - `subgroupIndex`: The index of a compute invocation's subgroup within its workgroup.
|
|
14
14
|
*
|
|
15
15
|
* @augments Node
|
|
16
16
|
*/
|
|
@@ -25,7 +25,7 @@ class IndexNode extends Node {
|
|
|
25
25
|
/**
|
|
26
26
|
* Constructs a new index node.
|
|
27
27
|
*
|
|
28
|
-
* @param {('vertex'|'instance'|'subgroup'|'invocationLocal'|'invocationSubgroup'|'draw')} scope - The scope of the index node.
|
|
28
|
+
* @param {('vertex'|'instance'|'subgroup'|'invocationLocal'|'invocationGlobal'|'invocationSubgroup'|'draw')} scope - The scope of the index node.
|
|
29
29
|
*/
|
|
30
30
|
constructor( scope ) {
|
|
31
31
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { getValueType, getValueFromType, arrayBufferToBase64 } from './NodeUtils.js';
|
|
3
|
+
import { warn } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Base class for representing data input nodes.
|
|
@@ -126,7 +127,7 @@ class InputNode extends Node {
|
|
|
126
127
|
|
|
127
128
|
generate( /*builder, output*/ ) {
|
|
128
129
|
|
|
129
|
-
|
|
130
|
+
warn( 'Abstract function.' );
|
|
130
131
|
|
|
131
132
|
}
|
|
132
133
|
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import Node from './Node.js';
|
|
2
|
+
import InspectorBase from '../../renderers/common/InspectorBase.js';
|
|
3
|
+
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
4
|
+
import { NodeUpdateType } from './constants.js';
|
|
5
|
+
import { warnOnce } from '../../utils.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* InspectorNode is a wrapper node that allows inspection of node values during rendering.
|
|
9
|
+
* It can be used to debug or analyze node outputs in the rendering pipeline.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
13
|
+
class InspectorNode extends Node {
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Returns the type of the node.
|
|
17
|
+
*
|
|
18
|
+
* @returns {string}
|
|
19
|
+
*/
|
|
20
|
+
static get type() {
|
|
21
|
+
|
|
22
|
+
return 'InspectorNode';
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Creates an InspectorNode.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node} node - The node to inspect.
|
|
30
|
+
* @param {string} [name=''] - Optional name for the inspector node.
|
|
31
|
+
* @param {Function|null} [callback=null] - Optional callback to modify the node during setup.
|
|
32
|
+
*/
|
|
33
|
+
constructor( node, name = '', callback = null ) {
|
|
34
|
+
|
|
35
|
+
super();
|
|
36
|
+
|
|
37
|
+
this.node = node;
|
|
38
|
+
this.name = name;
|
|
39
|
+
this.callback = callback;
|
|
40
|
+
|
|
41
|
+
this.updateType = NodeUpdateType.FRAME;
|
|
42
|
+
|
|
43
|
+
this.isInspectorNode = true;
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Returns the name of the inspector node.
|
|
49
|
+
*
|
|
50
|
+
* @returns {string}
|
|
51
|
+
*/
|
|
52
|
+
getName() {
|
|
53
|
+
|
|
54
|
+
return this.name || this.node.name;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Updates the inspector node, allowing inspection of the wrapped node.
|
|
60
|
+
*
|
|
61
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
62
|
+
*/
|
|
63
|
+
update( frame ) {
|
|
64
|
+
|
|
65
|
+
frame.renderer.inspector.inspect( this );
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Returns the type of the wrapped node.
|
|
71
|
+
*
|
|
72
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
73
|
+
* @returns {string}
|
|
74
|
+
*/
|
|
75
|
+
getNodeType( builder ) {
|
|
76
|
+
|
|
77
|
+
return this.node.getNodeType( builder );
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Sets up the inspector node.
|
|
83
|
+
*
|
|
84
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
85
|
+
* @returns {Node} The setup node.
|
|
86
|
+
*/
|
|
87
|
+
setup( builder ) {
|
|
88
|
+
|
|
89
|
+
let node = this.node;
|
|
90
|
+
|
|
91
|
+
if ( builder.context.inspector === true && this.callback !== null ) {
|
|
92
|
+
|
|
93
|
+
node = this.callback( node );
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if ( builder.renderer.backend.isWebGPUBackend !== true && builder.renderer.inspector.constructor !== InspectorBase ) {
|
|
98
|
+
|
|
99
|
+
warnOnce( 'TSL: ".toInspector()" is only available with WebGPU.' );
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return node;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export default InspectorNode;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Creates an inspector node to wrap around a given node for inspection purposes.
|
|
113
|
+
*
|
|
114
|
+
* @tsl
|
|
115
|
+
* @param {Node} node - The node to inspect.
|
|
116
|
+
* @param {string} [name=''] - Optional name for the inspector node.
|
|
117
|
+
* @param {Function|null} [callback=null] - Optional callback to modify the node during setup.
|
|
118
|
+
* @returns {Node} The inspector node.
|
|
119
|
+
*/
|
|
120
|
+
export function inspector( node, name = '', callback = null ) {
|
|
121
|
+
|
|
122
|
+
node = nodeObject( node );
|
|
123
|
+
|
|
124
|
+
return node.before( new InspectorNode( node, name, callback ) );
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
addMethodChaining( 'toInspector', inspector );
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
3
|
+
import { warn } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* This node can be used as a cache management component for another node.
|
|
@@ -8,11 +9,11 @@ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
|
8
9
|
*
|
|
9
10
|
* @augments Node
|
|
10
11
|
*/
|
|
11
|
-
class
|
|
12
|
+
class IsolateNode extends Node {
|
|
12
13
|
|
|
13
14
|
static get type() {
|
|
14
15
|
|
|
15
|
-
return '
|
|
16
|
+
return 'IsolateNode';
|
|
16
17
|
|
|
17
18
|
}
|
|
18
19
|
|
|
@@ -48,7 +49,7 @@ class CacheNode extends Node {
|
|
|
48
49
|
* @readonly
|
|
49
50
|
* @default true
|
|
50
51
|
*/
|
|
51
|
-
this.
|
|
52
|
+
this.isIsolateNode = true;
|
|
52
53
|
|
|
53
54
|
}
|
|
54
55
|
|
|
@@ -82,9 +83,23 @@ class CacheNode extends Node {
|
|
|
82
83
|
|
|
83
84
|
}
|
|
84
85
|
|
|
86
|
+
setParent( parent ) {
|
|
87
|
+
|
|
88
|
+
this.parent = parent;
|
|
89
|
+
|
|
90
|
+
return this;
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
getParent() {
|
|
95
|
+
|
|
96
|
+
return this.parent;
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
85
100
|
}
|
|
86
101
|
|
|
87
|
-
export default
|
|
102
|
+
export default IsolateNode;
|
|
88
103
|
|
|
89
104
|
/**
|
|
90
105
|
* TSL function for creating a cache node.
|
|
@@ -92,23 +107,27 @@ export default CacheNode;
|
|
|
92
107
|
* @tsl
|
|
93
108
|
* @function
|
|
94
109
|
* @param {Node} node - The node that should be cached.
|
|
95
|
-
* @
|
|
96
|
-
* @returns {CacheNode}
|
|
110
|
+
* @returns {IsolateNode}
|
|
97
111
|
*/
|
|
98
|
-
export const
|
|
112
|
+
export const isolate = ( node ) => new IsolateNode( nodeObject( node ) );
|
|
99
113
|
|
|
100
114
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* Important for TSL functions that use `.once( namespace )` to ensure that the namespace will run twice,
|
|
104
|
-
* once when the node is build in the specific namespace and once when the node is built in the others namespace.
|
|
105
|
-
*
|
|
106
|
-
* This is useful for nodes like `positionWorld` that need to be re-updated if used in `material.positionNode` and outside of it in the same material.
|
|
115
|
+
* TSL function for creating a cache node.
|
|
107
116
|
*
|
|
108
|
-
* @
|
|
109
|
-
* @
|
|
110
|
-
* @
|
|
117
|
+
* @tsl
|
|
118
|
+
* @function
|
|
119
|
+
* @deprecated
|
|
120
|
+
* @param {Node} node - The node that should be cached.
|
|
121
|
+
* @param {boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
|
|
122
|
+
* @returns {IsolateNode}
|
|
111
123
|
*/
|
|
112
|
-
export
|
|
124
|
+
export function cache( node, parent = true ) {
|
|
125
|
+
|
|
126
|
+
warn( 'TSL: "cache()" has been deprecated. Use "isolate()" instead.' ); // @deprecated r181
|
|
127
|
+
|
|
128
|
+
return isolate( node ).setParent( parent );
|
|
129
|
+
|
|
130
|
+
}
|
|
113
131
|
|
|
114
132
|
addMethodChaining( 'cache', cache );
|
|
133
|
+
addMethodChaining( 'isolate', isolate );
|
package/src/nodes/core/Node.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { NodeUpdateType } from './constants.js';
|
|
2
|
-
import {
|
|
2
|
+
import { hash, hashArray, hashString } from './NodeUtils.js';
|
|
3
3
|
|
|
4
4
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
5
5
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
6
|
+
import { warn, error } from '../../utils.js';
|
|
6
7
|
|
|
7
8
|
const _parentBuildStage = {
|
|
8
9
|
analyze: 'setup',
|
|
@@ -82,6 +83,14 @@ class Node extends EventDispatcher {
|
|
|
82
83
|
*/
|
|
83
84
|
this.version = 0;
|
|
84
85
|
|
|
86
|
+
/**
|
|
87
|
+
* The name of the node.
|
|
88
|
+
*
|
|
89
|
+
* @type {string}
|
|
90
|
+
* @default ''
|
|
91
|
+
*/
|
|
92
|
+
this.name = '';
|
|
93
|
+
|
|
85
94
|
/**
|
|
86
95
|
* Whether this node is global or not. This property is relevant for the internal
|
|
87
96
|
* node caching system. All nodes which should be declared just once should
|
|
@@ -111,6 +120,8 @@ class Node extends EventDispatcher {
|
|
|
111
120
|
|
|
112
121
|
// private
|
|
113
122
|
|
|
123
|
+
this._beforeNodes = null;
|
|
124
|
+
|
|
114
125
|
/**
|
|
115
126
|
* The cache key of this node.
|
|
116
127
|
*
|
|
@@ -172,7 +183,7 @@ class Node extends EventDispatcher {
|
|
|
172
183
|
onUpdate( callback, updateType ) {
|
|
173
184
|
|
|
174
185
|
this.updateType = updateType;
|
|
175
|
-
this.update = callback.bind( this
|
|
186
|
+
this.update = callback.bind( this );
|
|
176
187
|
|
|
177
188
|
return this;
|
|
178
189
|
|
|
@@ -225,26 +236,12 @@ class Node extends EventDispatcher {
|
|
|
225
236
|
*/
|
|
226
237
|
onReference( callback ) {
|
|
227
238
|
|
|
228
|
-
this.updateReference = callback.bind( this
|
|
239
|
+
this.updateReference = callback.bind( this );
|
|
229
240
|
|
|
230
241
|
return this;
|
|
231
242
|
|
|
232
243
|
}
|
|
233
244
|
|
|
234
|
-
/**
|
|
235
|
-
* The `this` reference might point to a Proxy so this method can be used
|
|
236
|
-
* to get the reference to the actual node instance.
|
|
237
|
-
*
|
|
238
|
-
* @return {Node} A reference to the node.
|
|
239
|
-
*/
|
|
240
|
-
getSelf() {
|
|
241
|
-
|
|
242
|
-
// Returns non-node object.
|
|
243
|
-
|
|
244
|
-
return this.self || this;
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
|
|
248
245
|
/**
|
|
249
246
|
* Nodes might refer to other objects like materials. This method allows to dynamically update the reference
|
|
250
247
|
* to such objects based on a given state (e.g. the current node frame or builder).
|
|
@@ -280,7 +277,7 @@ class Node extends EventDispatcher {
|
|
|
280
277
|
*/
|
|
281
278
|
* getChildren() {
|
|
282
279
|
|
|
283
|
-
for ( const { childNode } of
|
|
280
|
+
for ( const { childNode } of this._getChildren() ) {
|
|
284
281
|
|
|
285
282
|
yield childNode;
|
|
286
283
|
|
|
@@ -322,19 +319,100 @@ class Node extends EventDispatcher {
|
|
|
322
319
|
|
|
323
320
|
}
|
|
324
321
|
|
|
322
|
+
/**
|
|
323
|
+
* Returns the child nodes of this node.
|
|
324
|
+
*
|
|
325
|
+
* @private
|
|
326
|
+
* @param {Set<Node>} [ignores=new Set()] - A set of nodes to ignore during the search to avoid circular references.
|
|
327
|
+
* @returns {Array<Object>} An array of objects describing the child nodes.
|
|
328
|
+
*/
|
|
329
|
+
_getChildren( ignores = new Set() ) {
|
|
330
|
+
|
|
331
|
+
const children = [];
|
|
332
|
+
|
|
333
|
+
// avoid circular references
|
|
334
|
+
ignores.add( this );
|
|
335
|
+
|
|
336
|
+
for ( const property of Object.getOwnPropertyNames( this ) ) {
|
|
337
|
+
|
|
338
|
+
const object = this[ property ];
|
|
339
|
+
|
|
340
|
+
// Ignore private properties and ignored nodes.
|
|
341
|
+
if ( property.startsWith( '_' ) === true || ignores.has( object ) ) continue;
|
|
342
|
+
|
|
343
|
+
if ( Array.isArray( object ) === true ) {
|
|
344
|
+
|
|
345
|
+
for ( let i = 0; i < object.length; i ++ ) {
|
|
346
|
+
|
|
347
|
+
const child = object[ i ];
|
|
348
|
+
|
|
349
|
+
if ( child && child.isNode === true ) {
|
|
350
|
+
|
|
351
|
+
children.push( { property, index: i, childNode: child } );
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
} else if ( object && object.isNode === true ) {
|
|
358
|
+
|
|
359
|
+
children.push( { property, childNode: object } );
|
|
360
|
+
|
|
361
|
+
} else if ( object && Object.getPrototypeOf( object ) === Object.prototype ) {
|
|
362
|
+
|
|
363
|
+
for ( const subProperty in object ) {
|
|
364
|
+
|
|
365
|
+
// Ignore private sub-properties.
|
|
366
|
+
if ( subProperty.startsWith( '_' ) === true ) continue;
|
|
367
|
+
|
|
368
|
+
const child = object[ subProperty ];
|
|
369
|
+
|
|
370
|
+
if ( child && child.isNode === true ) {
|
|
371
|
+
|
|
372
|
+
children.push( { property, index: subProperty, childNode: child } );
|
|
373
|
+
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
//
|
|
383
|
+
|
|
384
|
+
return children;
|
|
385
|
+
|
|
386
|
+
}
|
|
387
|
+
|
|
325
388
|
/**
|
|
326
389
|
* Returns the cache key for this node.
|
|
327
390
|
*
|
|
328
391
|
* @param {boolean} [force=false] - When set to `true`, a recomputation of the cache key is forced.
|
|
392
|
+
* @param {Set<Node>} [ignores=null] - A set of nodes to ignore during the computation of the cache key.
|
|
329
393
|
* @return {number} The cache key of the node.
|
|
330
394
|
*/
|
|
331
|
-
getCacheKey( force = false ) {
|
|
395
|
+
getCacheKey( force = false, ignores = null ) {
|
|
332
396
|
|
|
333
397
|
force = force || this.version !== this._cacheKeyVersion;
|
|
334
398
|
|
|
335
399
|
if ( force === true || this._cacheKey === null ) {
|
|
336
400
|
|
|
337
|
-
|
|
401
|
+
if ( ignores === null ) ignores = new Set();
|
|
402
|
+
|
|
403
|
+
//
|
|
404
|
+
|
|
405
|
+
const values = [];
|
|
406
|
+
|
|
407
|
+
for ( const { property, childNode } of this._getChildren( ignores ) ) {
|
|
408
|
+
|
|
409
|
+
values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey( force, ignores ) );
|
|
410
|
+
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
//
|
|
414
|
+
|
|
415
|
+
this._cacheKey = hash( hashArray( values ), this.customCacheKey() );
|
|
338
416
|
this._cacheKeyVersion = this.version;
|
|
339
417
|
|
|
340
418
|
}
|
|
@@ -350,7 +428,7 @@ class Node extends EventDispatcher {
|
|
|
350
428
|
*/
|
|
351
429
|
customCacheKey() {
|
|
352
430
|
|
|
353
|
-
return
|
|
431
|
+
return this.id;
|
|
354
432
|
|
|
355
433
|
}
|
|
356
434
|
|
|
@@ -480,10 +558,22 @@ class Node extends EventDispatcher {
|
|
|
480
558
|
|
|
481
559
|
}
|
|
482
560
|
|
|
561
|
+
/**
|
|
562
|
+
* Returns the number of elements in the node array.
|
|
563
|
+
*
|
|
564
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
565
|
+
* @return {?number} The number of elements in the node array.
|
|
566
|
+
*/
|
|
567
|
+
getArrayCount( /*builder*/ ) {
|
|
568
|
+
|
|
569
|
+
return null;
|
|
570
|
+
|
|
571
|
+
}
|
|
572
|
+
|
|
483
573
|
/**
|
|
484
574
|
* Represents the setup stage which is the first step of the build process, see {@link Node#build} method.
|
|
485
|
-
* This method is often overwritten in derived modules to prepare the node which is used as
|
|
486
|
-
*
|
|
575
|
+
* This method is often overwritten in derived modules to prepare the node which is used as a node's output/result.
|
|
576
|
+
* If an output node is prepared, then it must be returned in the `return` statement of the derived module's setup function.
|
|
487
577
|
*
|
|
488
578
|
* @param {NodeBuilder} builder - The current node builder.
|
|
489
579
|
* @return {?Node} The output node.
|
|
@@ -551,7 +641,7 @@ class Node extends EventDispatcher {
|
|
|
551
641
|
* This state builds the output node and returns the resulting shader string.
|
|
552
642
|
*
|
|
553
643
|
* @param {NodeBuilder} builder - The current node builder.
|
|
554
|
-
* @param {?string} output - Can be used to define the output type.
|
|
644
|
+
* @param {?string} [output] - Can be used to define the output type.
|
|
555
645
|
* @return {?string} The generated shader string.
|
|
556
646
|
*/
|
|
557
647
|
generate( builder, output ) {
|
|
@@ -576,7 +666,7 @@ class Node extends EventDispatcher {
|
|
|
576
666
|
*/
|
|
577
667
|
updateBefore( /*frame*/ ) {
|
|
578
668
|
|
|
579
|
-
|
|
669
|
+
warn( 'Abstract function.' );
|
|
580
670
|
|
|
581
671
|
}
|
|
582
672
|
|
|
@@ -590,7 +680,7 @@ class Node extends EventDispatcher {
|
|
|
590
680
|
*/
|
|
591
681
|
updateAfter( /*frame*/ ) {
|
|
592
682
|
|
|
593
|
-
|
|
683
|
+
warn( 'Abstract function.' );
|
|
594
684
|
|
|
595
685
|
}
|
|
596
686
|
|
|
@@ -604,7 +694,17 @@ class Node extends EventDispatcher {
|
|
|
604
694
|
*/
|
|
605
695
|
update( /*frame*/ ) {
|
|
606
696
|
|
|
607
|
-
|
|
697
|
+
warn( 'Abstract function.' );
|
|
698
|
+
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
before( node ) {
|
|
702
|
+
|
|
703
|
+
if ( this._beforeNodes === null ) this._beforeNodes = [];
|
|
704
|
+
|
|
705
|
+
this._beforeNodes.push( node );
|
|
706
|
+
|
|
707
|
+
return this;
|
|
608
708
|
|
|
609
709
|
}
|
|
610
710
|
|
|
@@ -615,8 +715,8 @@ class Node extends EventDispatcher {
|
|
|
615
715
|
* - **generate**: Generates the shader code for the node. Returns the generated shader string.
|
|
616
716
|
*
|
|
617
717
|
* @param {NodeBuilder} builder - The current node builder.
|
|
618
|
-
* @param {string|Node
|
|
619
|
-
* @return {Node|string
|
|
718
|
+
* @param {?(string|Node)} [output=null] - Can be used to define the output type.
|
|
719
|
+
* @return {?(Node|string)} The result of the build process, depending on the build stage.
|
|
620
720
|
*/
|
|
621
721
|
build( builder, output = null ) {
|
|
622
722
|
|
|
@@ -630,6 +730,24 @@ class Node extends EventDispatcher {
|
|
|
630
730
|
|
|
631
731
|
//
|
|
632
732
|
|
|
733
|
+
if ( this._beforeNodes !== null ) {
|
|
734
|
+
|
|
735
|
+
const currentBeforeNodes = this._beforeNodes;
|
|
736
|
+
|
|
737
|
+
this._beforeNodes = null;
|
|
738
|
+
|
|
739
|
+
for ( const beforeNode of currentBeforeNodes ) {
|
|
740
|
+
|
|
741
|
+
beforeNode.build( builder, output );
|
|
742
|
+
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
this._beforeNodes = currentBeforeNodes;
|
|
746
|
+
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
//
|
|
750
|
+
|
|
633
751
|
const nodeData = builder.getDataFromNode( this );
|
|
634
752
|
nodeData.buildStages = nodeData.buildStages || {};
|
|
635
753
|
nodeData.buildStages[ builder.buildStage ] = true;
|
|
@@ -712,7 +830,12 @@ class Node extends EventDispatcher {
|
|
|
712
830
|
|
|
713
831
|
} else if ( buildStage === 'generate' ) {
|
|
714
832
|
|
|
715
|
-
|
|
833
|
+
// If generate has just one argument, it means the output type is not required.
|
|
834
|
+
// This means that the node does not handle output conversions internally,
|
|
835
|
+
// so the value is stored in a cache and the builder handles the conversion
|
|
836
|
+
// for all requested output types.
|
|
837
|
+
|
|
838
|
+
const isGenerateOnce = this.generate.length < 2;
|
|
716
839
|
|
|
717
840
|
if ( isGenerateOnce ) {
|
|
718
841
|
|
|
@@ -733,9 +856,9 @@ class Node extends EventDispatcher {
|
|
|
733
856
|
|
|
734
857
|
} else {
|
|
735
858
|
|
|
736
|
-
|
|
859
|
+
warn( 'Node: Recursion detected.', this );
|
|
737
860
|
|
|
738
|
-
result = '';
|
|
861
|
+
result = '/* Recursion detected. */';
|
|
739
862
|
|
|
740
863
|
}
|
|
741
864
|
|
|
@@ -753,6 +876,16 @@ class Node extends EventDispatcher {
|
|
|
753
876
|
|
|
754
877
|
}
|
|
755
878
|
|
|
879
|
+
if ( result === '' && output !== null && output !== 'void' && output !== 'OutputType' ) {
|
|
880
|
+
|
|
881
|
+
// if no snippet is generated, return a default value
|
|
882
|
+
|
|
883
|
+
error( `TSL: Invalid generated code, expected a "${ output }".` );
|
|
884
|
+
|
|
885
|
+
result = builder.generateConst( output );
|
|
886
|
+
|
|
887
|
+
}
|
|
888
|
+
|
|
756
889
|
}
|
|
757
890
|
|
|
758
891
|
builder.removeChain( this );
|
|
@@ -765,11 +898,11 @@ class Node extends EventDispatcher {
|
|
|
765
898
|
/**
|
|
766
899
|
* Returns the child nodes as a JSON object.
|
|
767
900
|
*
|
|
768
|
-
* @return {
|
|
901
|
+
* @return {Generator<Object>} An iterable list of serialized child objects as JSON.
|
|
769
902
|
*/
|
|
770
903
|
getSerializeChildren() {
|
|
771
904
|
|
|
772
|
-
return
|
|
905
|
+
return this._getChildren();
|
|
773
906
|
|
|
774
907
|
}
|
|
775
908
|
|