@plastic-software/three 0.181.3 → 0.183.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 +3 -4
- package/build/three.cjs +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +1 -1
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +3 -3
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -20
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +273 -125
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +98 -12
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportTextureNode.js +21 -4
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
+
import StackTrace from '../core/StackTrace.js';
|
|
2
3
|
import { select } from '../math/ConditionalNode.js';
|
|
3
4
|
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, nodeObject } from '../tsl/TSLBase.js';
|
|
4
5
|
import { error } from '../../utils.js';
|
|
@@ -68,6 +69,15 @@ class StackNode extends Node {
|
|
|
68
69
|
*/
|
|
69
70
|
this._expressionNode = null;
|
|
70
71
|
|
|
72
|
+
/**
|
|
73
|
+
* The current node being processed.
|
|
74
|
+
*
|
|
75
|
+
* @private
|
|
76
|
+
* @type {Node}
|
|
77
|
+
* @default null
|
|
78
|
+
*/
|
|
79
|
+
this._currentNode = null;
|
|
80
|
+
|
|
71
81
|
/**
|
|
72
82
|
* This flag can be used for type testing.
|
|
73
83
|
*
|
|
@@ -81,19 +91,19 @@ class StackNode extends Node {
|
|
|
81
91
|
|
|
82
92
|
getElementType( builder ) {
|
|
83
93
|
|
|
84
|
-
return this.hasOutput ? this.outputNode.getElementType( builder ) : 'void';
|
|
94
|
+
return this.hasOutput( builder ) ? this.outputNode.getElementType( builder ) : 'void';
|
|
85
95
|
|
|
86
96
|
}
|
|
87
97
|
|
|
88
98
|
getNodeType( builder ) {
|
|
89
99
|
|
|
90
|
-
return this.hasOutput ? this.outputNode.getNodeType( builder ) : 'void';
|
|
100
|
+
return this.hasOutput( builder ) ? this.outputNode.getNodeType( builder ) : 'void';
|
|
91
101
|
|
|
92
102
|
}
|
|
93
103
|
|
|
94
104
|
getMemberType( builder, name ) {
|
|
95
105
|
|
|
96
|
-
return this.hasOutput ? this.outputNode.getMemberType( builder, name ) : 'void';
|
|
106
|
+
return this.hasOutput( builder ) ? this.outputNode.getMemberType( builder, name ) : 'void';
|
|
97
107
|
|
|
98
108
|
}
|
|
99
109
|
|
|
@@ -101,23 +111,38 @@ class StackNode extends Node {
|
|
|
101
111
|
* Adds a node to this stack.
|
|
102
112
|
*
|
|
103
113
|
* @param {Node} node - The node to add.
|
|
114
|
+
* @param {number} [index=this.nodes.length] - The index where the node should be added.
|
|
104
115
|
* @return {StackNode} A reference to this stack node.
|
|
105
116
|
*/
|
|
106
|
-
addToStack( node ) {
|
|
117
|
+
addToStack( node, index = this.nodes.length ) {
|
|
107
118
|
|
|
108
119
|
if ( node.isNode !== true ) {
|
|
109
120
|
|
|
110
|
-
error( 'TSL: Invalid node added to stack.' );
|
|
121
|
+
error( 'TSL: Invalid node added to stack.', new StackTrace() );
|
|
111
122
|
return this;
|
|
112
123
|
|
|
113
124
|
}
|
|
114
125
|
|
|
115
|
-
this.nodes.
|
|
126
|
+
this.nodes.splice( index, 0, node );
|
|
116
127
|
|
|
117
128
|
return this;
|
|
118
129
|
|
|
119
130
|
}
|
|
120
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Adds a node to the stack before the current node.
|
|
134
|
+
*
|
|
135
|
+
* @param {Node} node - The node to add.
|
|
136
|
+
* @return {StackNode} A reference to this stack node.
|
|
137
|
+
*/
|
|
138
|
+
addToStackBefore( node ) {
|
|
139
|
+
|
|
140
|
+
const index = this._currentNode ? this.nodes.indexOf( this._currentNode ) : 0;
|
|
141
|
+
|
|
142
|
+
return this.addToStack( node, index );
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
121
146
|
/**
|
|
122
147
|
* Represent an `if` statement in TSL.
|
|
123
148
|
*
|
|
@@ -205,7 +230,7 @@ class StackNode extends Node {
|
|
|
205
230
|
|
|
206
231
|
} else {
|
|
207
232
|
|
|
208
|
-
error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
|
|
233
|
+
error( 'TSL: Invalid parameter length. Case() requires at least two parameters.', new StackTrace() );
|
|
209
234
|
|
|
210
235
|
}
|
|
211
236
|
|
|
@@ -267,7 +292,7 @@ class StackNode extends Node {
|
|
|
267
292
|
|
|
268
293
|
for ( const childNode of this.getChildren() ) {
|
|
269
294
|
|
|
270
|
-
if ( childNode.isVarNode && childNode.
|
|
295
|
+
if ( childNode.isVarNode && childNode.isIntent( builder ) ) {
|
|
271
296
|
|
|
272
297
|
if ( childNode.isAssign( builder ) !== true ) {
|
|
273
298
|
|
|
@@ -287,9 +312,9 @@ class StackNode extends Node {
|
|
|
287
312
|
|
|
288
313
|
}
|
|
289
314
|
|
|
290
|
-
|
|
315
|
+
hasOutput( builder ) {
|
|
291
316
|
|
|
292
|
-
return this.outputNode && this.outputNode.isNode;
|
|
317
|
+
return this.outputNode && this.outputNode.isNode && this.outputNode.getNodeType( builder ) !== 'void';
|
|
293
318
|
|
|
294
319
|
}
|
|
295
320
|
|
|
@@ -297,19 +322,23 @@ class StackNode extends Node {
|
|
|
297
322
|
|
|
298
323
|
const previousStack = getCurrentStack();
|
|
299
324
|
|
|
325
|
+
const buildStage = builder.buildStage;
|
|
326
|
+
|
|
300
327
|
setCurrentStack( this );
|
|
301
328
|
|
|
302
329
|
builder.setActiveStack( this );
|
|
303
330
|
|
|
304
|
-
|
|
331
|
+
//
|
|
305
332
|
|
|
306
|
-
|
|
333
|
+
const buildNode = ( node ) => {
|
|
307
334
|
|
|
308
|
-
|
|
335
|
+
this._currentNode = node;
|
|
336
|
+
|
|
337
|
+
if ( node.isVarNode && node.isIntent( builder ) ) {
|
|
309
338
|
|
|
310
339
|
if ( node.isAssign( builder ) !== true ) {
|
|
311
340
|
|
|
312
|
-
|
|
341
|
+
return;
|
|
313
342
|
|
|
314
343
|
}
|
|
315
344
|
|
|
@@ -330,7 +359,7 @@ class StackNode extends Node {
|
|
|
330
359
|
|
|
331
360
|
if ( node.isVarNode && parents && parents.length === 1 && parents[ 0 ] && parents[ 0 ].isStackNode ) {
|
|
332
361
|
|
|
333
|
-
|
|
362
|
+
return; // skip var nodes that are only used in .toVarying()
|
|
334
363
|
|
|
335
364
|
}
|
|
336
365
|
|
|
@@ -338,13 +367,33 @@ class StackNode extends Node {
|
|
|
338
367
|
|
|
339
368
|
}
|
|
340
369
|
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
//
|
|
373
|
+
|
|
374
|
+
const nodes = [ ...this.nodes ];
|
|
375
|
+
|
|
376
|
+
for ( const node of nodes ) {
|
|
377
|
+
|
|
378
|
+
buildNode( node );
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
this._currentNode = null;
|
|
383
|
+
|
|
384
|
+
const newNodes = this.nodes.filter( ( node ) => nodes.indexOf( node ) === - 1 );
|
|
385
|
+
|
|
386
|
+
for ( const node of newNodes ) {
|
|
387
|
+
|
|
388
|
+
buildNode( node );
|
|
389
|
+
|
|
341
390
|
}
|
|
342
391
|
|
|
343
392
|
//
|
|
344
393
|
|
|
345
394
|
let result;
|
|
346
395
|
|
|
347
|
-
if ( this.hasOutput ) {
|
|
396
|
+
if ( this.hasOutput( builder ) ) {
|
|
348
397
|
|
|
349
398
|
result = this.outputNode.build( builder, ...params );
|
|
350
399
|
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// Pre-compiled RegExp patterns for ignored files
|
|
2
|
+
const IGNORED_FILES = [
|
|
3
|
+
/^StackTrace\.js$/,
|
|
4
|
+
/^TSLCore\.js$/,
|
|
5
|
+
/^.*Node\.js$/,
|
|
6
|
+
/^three\.webgpu.*\.js$/
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Parses the stack trace and filters out ignored files.
|
|
11
|
+
* Returns an array with function name, file, line, and column.
|
|
12
|
+
*/
|
|
13
|
+
function getFilteredStack( stack ) {
|
|
14
|
+
|
|
15
|
+
// Pattern to extract function name, file, line, and column from different browsers
|
|
16
|
+
// Chrome: "at functionName (file.js:1:2)" or "at file.js:1:2"
|
|
17
|
+
// Firefox: "functionName@file.js:1:2"
|
|
18
|
+
const regex = /(?:at\s+(.+?)\s+\()?(?:(.+?)@)?([^@\s()]+):(\d+):(\d+)/;
|
|
19
|
+
|
|
20
|
+
return stack.split( '\n' )
|
|
21
|
+
.map( line => {
|
|
22
|
+
|
|
23
|
+
const match = line.match( regex );
|
|
24
|
+
if ( ! match ) return null; // Skip if line format is invalid
|
|
25
|
+
|
|
26
|
+
// Chrome: match[1], Firefox: match[2]
|
|
27
|
+
const fn = match[ 1 ] || match[ 2 ] || '';
|
|
28
|
+
const file = match[ 3 ].split( '?' )[ 0 ]; // Clean file name (Vite/HMR)
|
|
29
|
+
const lineNum = parseInt( match[ 4 ], 10 );
|
|
30
|
+
const column = parseInt( match[ 5 ], 10 );
|
|
31
|
+
|
|
32
|
+
// Extract only the filename from full path
|
|
33
|
+
const fileName = file.split( '/' ).pop();
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
fn: fn,
|
|
37
|
+
file: fileName,
|
|
38
|
+
line: lineNum,
|
|
39
|
+
column: column
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
} )
|
|
43
|
+
.filter( frame => {
|
|
44
|
+
|
|
45
|
+
// Only keep frames that are valid and not in the ignore list
|
|
46
|
+
return frame && ! IGNORED_FILES.some( regex => regex.test( frame.file ) );
|
|
47
|
+
|
|
48
|
+
} );
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Class representing a stack trace for debugging purposes.
|
|
54
|
+
*/
|
|
55
|
+
class StackTrace {
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Creates a StackTrace instance by capturing and filtering the current stack trace.
|
|
59
|
+
*
|
|
60
|
+
* @param {Error|string|null} stackMessage - An optional stack trace to use instead of capturing a new one.
|
|
61
|
+
*/
|
|
62
|
+
constructor( stackMessage = null ) {
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* This flag can be used for type testing.
|
|
66
|
+
*
|
|
67
|
+
* @type {boolean}
|
|
68
|
+
* @readonly
|
|
69
|
+
* @default true
|
|
70
|
+
*/
|
|
71
|
+
this.isStackTrace = true;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The stack trace.
|
|
75
|
+
*
|
|
76
|
+
* @type {Array<{fn: string, file: string, line: number, column: number}>}
|
|
77
|
+
*/
|
|
78
|
+
this.stack = getFilteredStack( stackMessage ? stackMessage : new Error().stack );
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Returns a formatted location string of the top stack frame.
|
|
84
|
+
*
|
|
85
|
+
* @returns {string} The formatted stack trace message.
|
|
86
|
+
*/
|
|
87
|
+
getLocation() {
|
|
88
|
+
|
|
89
|
+
if ( this.stack.length === 0 ) {
|
|
90
|
+
|
|
91
|
+
return '[Unknown location]';
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const mainStack = this.stack[ 0 ];
|
|
96
|
+
|
|
97
|
+
const fn = mainStack.fn;
|
|
98
|
+
const fnName = fn ? `"${ fn }()" at ` : '';
|
|
99
|
+
|
|
100
|
+
return `${fnName}"${mainStack.file}:${mainStack.line}"`; // :${mainStack.column}
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Returns the full error message including the stack trace.
|
|
106
|
+
*
|
|
107
|
+
* @param {string} message - The error message.
|
|
108
|
+
* @returns {string} The full error message with stack trace.
|
|
109
|
+
*/
|
|
110
|
+
getError( message ) {
|
|
111
|
+
|
|
112
|
+
if ( this.stack.length === 0 ) {
|
|
113
|
+
|
|
114
|
+
return message;
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Output: "Error: message\n at functionName (file.js:line:column)"
|
|
119
|
+
const stackString = this.stack.map( frame => {
|
|
120
|
+
|
|
121
|
+
const location = `${ frame.file }:${ frame.line }:${ frame.column }`;
|
|
122
|
+
|
|
123
|
+
if ( frame.fn ) {
|
|
124
|
+
|
|
125
|
+
return ` at ${ frame.fn } (${ location })`;
|
|
126
|
+
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return ` at ${ location }`;
|
|
130
|
+
|
|
131
|
+
} ).join( '\n' );
|
|
132
|
+
|
|
133
|
+
return `${ message }\n${ stackString }`;
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export default StackTrace;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import StructTypeNode from './StructTypeNode.js';
|
|
3
|
-
import { nodeObject } from '../tsl/TSLCore.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* StructNode allows to create custom structures with multiple members.
|
|
@@ -53,6 +52,21 @@ class StructNode extends Node {
|
|
|
53
52
|
|
|
54
53
|
}
|
|
55
54
|
|
|
55
|
+
_getChildren() {
|
|
56
|
+
|
|
57
|
+
// Ensure struct type is the last child for correct code generation order
|
|
58
|
+
|
|
59
|
+
const children = super._getChildren();
|
|
60
|
+
|
|
61
|
+
const structTypeProperty = children.find( child => child.childNode === this.structTypeNode );
|
|
62
|
+
|
|
63
|
+
children.splice( children.indexOf( structTypeProperty ), 1 );
|
|
64
|
+
children.push( structTypeProperty );
|
|
65
|
+
|
|
66
|
+
return children;
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
56
70
|
generate( builder ) {
|
|
57
71
|
|
|
58
72
|
const nodeVar = builder.getVarFromNode( this );
|
|
@@ -108,7 +122,7 @@ export const struct = ( membersLayout, name = null ) => {
|
|
|
108
122
|
|
|
109
123
|
}
|
|
110
124
|
|
|
111
|
-
return
|
|
125
|
+
return new StructNode( structLayout, values );
|
|
112
126
|
|
|
113
127
|
};
|
|
114
128
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import Node from './Node.js';
|
|
3
|
-
import {
|
|
3
|
+
import { getAlignmentFromType, getMemoryLengthFromType } from './NodeUtils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Generates a layout for struct members.
|
|
@@ -86,29 +86,23 @@ class StructTypeNode extends Node {
|
|
|
86
86
|
*/
|
|
87
87
|
getLength() {
|
|
88
88
|
|
|
89
|
-
const GPU_CHUNK_BYTES = 8;
|
|
90
89
|
const BYTES_PER_ELEMENT = Float32Array.BYTES_PER_ELEMENT;
|
|
91
|
-
|
|
92
|
-
let offset = 0; // global buffer offset in
|
|
90
|
+
let maxAlignment = 1; // maximum alignment value in this struct
|
|
91
|
+
let offset = 0; // global buffer offset in 4 byte elements
|
|
93
92
|
|
|
94
93
|
for ( const member of this.membersLayout ) {
|
|
95
94
|
|
|
96
95
|
const type = member.type;
|
|
97
96
|
|
|
98
|
-
const itemSize = getMemoryLengthFromType( type )
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
const chunkOffset = offset % GPU_CHUNK_BYTES; // offset in the current chunk
|
|
102
|
-
const chunkPadding = chunkOffset % boundary; // required padding to match boundary
|
|
103
|
-
const chunkStart = chunkOffset + chunkPadding; // start position in the current chunk for the data
|
|
104
|
-
|
|
105
|
-
offset += chunkPadding;
|
|
97
|
+
const itemSize = getMemoryLengthFromType( type );
|
|
98
|
+
const alignment = getAlignmentFromType( type ) / BYTES_PER_ELEMENT;
|
|
99
|
+
maxAlignment = Math.max( maxAlignment, alignment );
|
|
106
100
|
|
|
107
|
-
//
|
|
108
|
-
|
|
101
|
+
const chunkOffset = offset % maxAlignment; // offset in the current chunk of maxAlignment elements
|
|
102
|
+
const overhang = chunkOffset % alignment; // distance from the last aligned offset
|
|
103
|
+
if ( overhang !== 0 ) {
|
|
109
104
|
|
|
110
|
-
|
|
111
|
-
offset += ( GPU_CHUNK_BYTES - chunkStart );
|
|
105
|
+
offset += alignment - overhang; // move to next aligned offset
|
|
112
106
|
|
|
113
107
|
}
|
|
114
108
|
|
|
@@ -116,7 +110,7 @@ class StructTypeNode extends Node {
|
|
|
116
110
|
|
|
117
111
|
}
|
|
118
112
|
|
|
119
|
-
return ( Math.ceil( offset /
|
|
113
|
+
return ( Math.ceil( offset / maxAlignment ) * maxAlignment ); // ensure length is a multiple of maxAlignment
|
|
120
114
|
|
|
121
115
|
}
|
|
122
116
|
|
|
@@ -86,4 +86,4 @@ export default SubBuildNode;
|
|
|
86
86
|
* @param {?string} [type=null] - The type of the node, if known.
|
|
87
87
|
* @returns {Node} A node object wrapping the SubBuildNode instance.
|
|
88
88
|
*/
|
|
89
|
-
export const subBuild = ( node, name, type = null ) =>
|
|
89
|
+
export const subBuild = ( node, name, type = null ) => new SubBuildNode( nodeObject( node ), name, type );
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import InputNode from './InputNode.js';
|
|
2
|
+
import StackTrace from '../core/StackTrace.js';
|
|
2
3
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
|
-
import {
|
|
4
|
+
import { getConstNodeType } from '../tsl/TSLCore.js';
|
|
4
5
|
import { getValueFromType } from './NodeUtils.js';
|
|
5
6
|
import { warn } from '../../utils.js';
|
|
6
7
|
|
|
@@ -78,7 +79,7 @@ class UniformNode extends InputNode {
|
|
|
78
79
|
*/
|
|
79
80
|
label( name ) {
|
|
80
81
|
|
|
81
|
-
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
82
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
|
|
82
83
|
|
|
83
84
|
return this.setName( name );
|
|
84
85
|
|
|
@@ -235,9 +236,24 @@ export const uniform = ( value, type ) => {
|
|
|
235
236
|
|
|
236
237
|
}
|
|
237
238
|
|
|
238
|
-
|
|
239
|
-
value = ( value && value.isNode === true ) ? ( value.node && value.node.value ) || value.value : value;
|
|
239
|
+
if ( value && value.isNode === true ) {
|
|
240
240
|
|
|
241
|
-
|
|
241
|
+
let v = value.value;
|
|
242
|
+
|
|
243
|
+
value.traverse( n => {
|
|
244
|
+
|
|
245
|
+
if ( n.isConstNode === true ) {
|
|
246
|
+
|
|
247
|
+
v = n.value;
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
} );
|
|
252
|
+
|
|
253
|
+
value = v;
|
|
254
|
+
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return new UniformNode( value, nodeType );
|
|
242
258
|
|
|
243
259
|
};
|
|
@@ -112,6 +112,22 @@ class VarNode extends Node {
|
|
|
112
112
|
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Checks if this node is used for intent.
|
|
117
|
+
*
|
|
118
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
119
|
+
* @returns {boolean} Whether this node is used for intent.
|
|
120
|
+
*/
|
|
121
|
+
isIntent( builder ) {
|
|
122
|
+
|
|
123
|
+
const data = builder.getDataFromNode( this );
|
|
124
|
+
|
|
125
|
+
if ( data.forceDeclaration === true ) return false;
|
|
126
|
+
|
|
127
|
+
return this.intent;
|
|
128
|
+
|
|
129
|
+
}
|
|
130
|
+
|
|
115
131
|
/**
|
|
116
132
|
* Returns the intent flag of this node.
|
|
117
133
|
*
|
|
@@ -149,49 +165,58 @@ class VarNode extends Node {
|
|
|
149
165
|
|
|
150
166
|
isAssign( builder ) {
|
|
151
167
|
|
|
152
|
-
const
|
|
168
|
+
const data = builder.getDataFromNode( this );
|
|
153
169
|
|
|
154
|
-
|
|
170
|
+
return data.assign;
|
|
155
171
|
|
|
156
|
-
|
|
172
|
+
}
|
|
157
173
|
|
|
158
|
-
|
|
174
|
+
build( ...params ) {
|
|
159
175
|
|
|
160
|
-
|
|
176
|
+
const builder = params[ 0 ];
|
|
161
177
|
|
|
162
|
-
|
|
178
|
+
if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
|
|
163
179
|
|
|
164
|
-
|
|
180
|
+
if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
|
|
165
181
|
|
|
166
|
-
|
|
182
|
+
let addBefore = false;
|
|
167
183
|
|
|
168
|
-
|
|
184
|
+
if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
|
|
169
185
|
|
|
170
|
-
|
|
186
|
+
if ( builder.fnCall && builder.fnCall.shaderNode ) {
|
|
171
187
|
|
|
172
|
-
|
|
188
|
+
const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
|
|
173
189
|
|
|
174
|
-
|
|
190
|
+
if ( shaderNodeData.hasLoop ) {
|
|
175
191
|
|
|
176
|
-
|
|
192
|
+
const data = builder.getDataFromNode( this );
|
|
193
|
+
data.forceDeclaration = true;
|
|
177
194
|
|
|
178
|
-
|
|
195
|
+
addBefore = true;
|
|
179
196
|
|
|
180
|
-
|
|
197
|
+
}
|
|
181
198
|
|
|
182
|
-
|
|
199
|
+
}
|
|
183
200
|
|
|
184
|
-
|
|
201
|
+
}
|
|
185
202
|
|
|
186
|
-
|
|
203
|
+
const baseStack = builder.getBaseStack();
|
|
204
|
+
|
|
205
|
+
if ( addBefore ) {
|
|
206
|
+
|
|
207
|
+
baseStack.addToStackBefore( this );
|
|
187
208
|
|
|
188
|
-
|
|
209
|
+
} else {
|
|
210
|
+
|
|
211
|
+
baseStack.addToStack( this );
|
|
212
|
+
|
|
213
|
+
}
|
|
189
214
|
|
|
190
215
|
}
|
|
191
216
|
|
|
192
217
|
}
|
|
193
218
|
|
|
194
|
-
if ( this.
|
|
219
|
+
if ( this.isIntent( builder ) ) {
|
|
195
220
|
|
|
196
221
|
if ( this.isAssign( builder ) !== true ) {
|
|
197
222
|
|
|
@@ -227,9 +252,9 @@ class VarNode extends Node {
|
|
|
227
252
|
|
|
228
253
|
if ( nodeType == 'void' ) {
|
|
229
254
|
|
|
230
|
-
if ( this.
|
|
255
|
+
if ( this.isIntent( builder ) !== true ) {
|
|
231
256
|
|
|
232
|
-
error( 'TSL: ".toVar()" can not be used with void type.' );
|
|
257
|
+
error( 'TSL: ".toVar()" can not be used with void type.', this.stackTrace );
|
|
233
258
|
|
|
234
259
|
}
|
|
235
260
|
|
|
@@ -2,7 +2,6 @@ import Node from './Node.js';
|
|
|
2
2
|
import { NodeShaderStage } from './constants.js';
|
|
3
3
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
4
4
|
import { subBuild } from './SubBuildNode.js';
|
|
5
|
-
import { warn } from '../../utils.js';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* Class for representing shader varyings as nodes. Varyings are create from
|
|
@@ -37,7 +36,7 @@ class VaryingNode extends Node {
|
|
|
37
36
|
*
|
|
38
37
|
* @type {Node}
|
|
39
38
|
*/
|
|
40
|
-
this.node = node;
|
|
39
|
+
this.node = subBuild( node, 'VERTEX' );
|
|
41
40
|
|
|
42
41
|
/**
|
|
43
42
|
* The name of the varying in the shader. If no name is defined,
|
|
@@ -209,19 +208,3 @@ export const vertexStage = ( node ) => varying( node );
|
|
|
209
208
|
|
|
210
209
|
addMethodChaining( 'toVarying', varying );
|
|
211
210
|
addMethodChaining( 'toVertexStage', vertexStage );
|
|
212
|
-
|
|
213
|
-
// Deprecated
|
|
214
|
-
|
|
215
|
-
addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
|
|
216
|
-
|
|
217
|
-
warn( 'TSL: .varying() has been renamed to .toVarying().' );
|
|
218
|
-
return varying( ...params );
|
|
219
|
-
|
|
220
|
-
} );
|
|
221
|
-
|
|
222
|
-
addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
|
|
223
|
-
|
|
224
|
-
warn( 'TSL: .vertexStage() has been renamed to .toVertexStage().' );
|
|
225
|
-
return varying( ...params );
|
|
226
|
-
|
|
227
|
-
} );
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Fn, If, vec4 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { mix, min, step } from '../math/MathNode.js';
|
|
3
|
-
import { warn } from '../../utils.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Represents a "Color Burn" blend mode.
|
|
@@ -170,66 +169,3 @@ export const unpremultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
|
170
169
|
return vec4( color.rgb.div( color.a ), color.a );
|
|
171
170
|
|
|
172
171
|
}, { color: 'vec4', return: 'vec4' } );
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
// Deprecated
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* @tsl
|
|
179
|
-
* @function
|
|
180
|
-
* @deprecated since r171. Use {@link blendBurn} instead.
|
|
181
|
-
*
|
|
182
|
-
* @param {...any} params
|
|
183
|
-
* @returns {Function}
|
|
184
|
-
*/
|
|
185
|
-
export const burn = ( ...params ) => { // @deprecated, r171
|
|
186
|
-
|
|
187
|
-
warn( 'TSL: "burn" has been renamed. Use "blendBurn" instead.' );
|
|
188
|
-
return blendBurn( params );
|
|
189
|
-
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* @tsl
|
|
194
|
-
* @function
|
|
195
|
-
* @deprecated since r171. Use {@link blendDodge} instead.
|
|
196
|
-
*
|
|
197
|
-
* @param {...any} params
|
|
198
|
-
* @returns {Function}
|
|
199
|
-
*/
|
|
200
|
-
export const dodge = ( ...params ) => { // @deprecated, r171
|
|
201
|
-
|
|
202
|
-
warn( 'TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
|
|
203
|
-
return blendDodge( params );
|
|
204
|
-
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* @tsl
|
|
209
|
-
* @function
|
|
210
|
-
* @deprecated since r171. Use {@link blendScreen} instead.
|
|
211
|
-
*
|
|
212
|
-
* @param {...any} params
|
|
213
|
-
* @returns {Function}
|
|
214
|
-
*/
|
|
215
|
-
export const screen = ( ...params ) => { // @deprecated, r171
|
|
216
|
-
|
|
217
|
-
warn( 'TSL: "screen" has been renamed. Use "blendScreen" instead.' );
|
|
218
|
-
return blendScreen( params );
|
|
219
|
-
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* @tsl
|
|
224
|
-
* @function
|
|
225
|
-
* @deprecated since r171. Use {@link blendOverlay} instead.
|
|
226
|
-
*
|
|
227
|
-
* @param {...any} params
|
|
228
|
-
* @returns {Function}
|
|
229
|
-
*/
|
|
230
|
-
export const overlay = ( ...params ) => { // @deprecated, r171
|
|
231
|
-
|
|
232
|
-
warn( 'TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
|
|
233
|
-
return blendOverlay( params );
|
|
234
|
-
|
|
235
|
-
};
|