@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.
Files changed (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. 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.push( node );
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.intent === true ) {
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
- get hasOutput() {
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
- const buildStage = builder.buildStage;
331
+ //
305
332
 
306
- for ( const node of this.nodes ) {
333
+ const buildNode = ( node ) => {
307
334
 
308
- if ( node.isVarNode && node.intent === true ) {
335
+ this._currentNode = node;
336
+
337
+ if ( node.isVarNode && node.isIntent( builder ) ) {
309
338
 
310
339
  if ( node.isAssign( builder ) !== true ) {
311
340
 
312
- continue;
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
- continue; // skip var nodes that are only used in .toVarying()
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 nodeObject( new StructNode( structLayout, values ) );
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 { getByteBoundaryFromType, getMemoryLengthFromType } from './NodeUtils.js';
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 bytes
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 ) * BYTES_PER_ELEMENT;
99
- const boundary = getByteBoundaryFromType( type );
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
- // Check for chunk overflow
108
- if ( chunkStart !== 0 && ( GPU_CHUNK_BYTES - chunkStart ) < itemSize ) {
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
- // Add padding to the end of the chunk
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 / GPU_CHUNK_BYTES ) * GPU_CHUNK_BYTES ) / BYTES_PER_ELEMENT;
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 ) => nodeObject( new SubBuildNode( nodeObject( node ), name, type ) );
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 { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
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
- // @TODO: get ConstNode from .traverse() in the future
239
- value = ( value && value.isNode === true ) ? ( value.node && value.node.value ) || value.value : value;
239
+ if ( value && value.isNode === true ) {
240
240
 
241
- return nodeObject( new UniformNode( value, nodeType ) );
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 properties = builder.getNodeProperties( this );
168
+ const data = builder.getDataFromNode( this );
153
169
 
154
- let assign = properties.assign;
170
+ return data.assign;
155
171
 
156
- if ( assign !== true ) {
172
+ }
157
173
 
158
- if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
174
+ build( ...params ) {
159
175
 
160
- if ( builder.fnCall && builder.fnCall.shaderNode ) {
176
+ const builder = params[ 0 ];
161
177
 
162
- const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
178
+ if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
163
179
 
164
- if ( shaderNodeData.hasLoop ) {
180
+ if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
165
181
 
166
- assign = true;
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
- return assign;
192
+ const data = builder.getDataFromNode( this );
193
+ data.forceDeclaration = true;
177
194
 
178
- }
195
+ addBefore = true;
179
196
 
180
- build( ...params ) {
197
+ }
181
198
 
182
- const builder = params[ 0 ];
199
+ }
183
200
 
184
- if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
201
+ }
185
202
 
186
- if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
203
+ const baseStack = builder.getBaseStack();
204
+
205
+ if ( addBefore ) {
206
+
207
+ baseStack.addToStackBefore( this );
187
208
 
188
- builder.getBaseStack().addToStack( this );
209
+ } else {
210
+
211
+ baseStack.addToStack( this );
212
+
213
+ }
189
214
 
190
215
  }
191
216
 
192
217
  }
193
218
 
194
- if ( this.intent === true ) {
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.intent !== true ) {
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
- };