@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
@@ -5,12 +5,15 @@ import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
5
5
  import { expression } from '../code/ExpressionNode.js';
6
6
  import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
7
7
  import { nodeProxy, vec3, nodeObject, int, Fn } from '../tsl/TSLBase.js';
8
+ import { step } from '../math/MathNode.js';
8
9
  import { NodeUpdateType } from '../core/constants.js';
9
10
 
10
- import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
11
+ import { Compatibility, GreaterCompare, GreaterEqualCompare, IntType, LessCompare, LessEqualCompare, NearestFilter, UnsignedIntType } from '../../constants.js';
11
12
 
12
13
  import { Texture } from '../../textures/Texture.js';
13
- import { warn } from '../../utils.js';
14
+ import { warn, warnOnce } from '../../utils.js';
15
+
16
+ import NodeError from '../core/NodeError.js';
14
17
 
15
18
  const EmptyTexture = /*@__PURE__*/ new Texture();
16
19
 
@@ -343,7 +346,7 @@ class TextureNode extends UniformNode {
343
346
 
344
347
  if ( ! texture || texture.isTexture !== true ) {
345
348
 
346
- throw new Error( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().' );
349
+ throw new NodeError( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().', this.stackTrace );
347
350
 
348
351
  }
349
352
 
@@ -391,10 +394,40 @@ class TextureNode extends UniformNode {
391
394
 
392
395
  //
393
396
 
397
+ let compareNode = null;
398
+ let compareStepNode = null;
399
+
400
+ if ( this.compareNode !== null ) {
401
+
402
+ if ( builder.renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
403
+
404
+ compareNode = this.compareNode;
405
+
406
+ } else {
407
+
408
+ const compareFunction = texture.compareFunction;
409
+
410
+ if ( compareFunction === null || compareFunction === LessCompare || compareFunction === LessEqualCompare || compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
411
+
412
+ compareStepNode = this.compareNode;
413
+
414
+ } else {
415
+
416
+ compareNode = this.compareNode;
417
+
418
+ warnOnce( 'TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.' );
419
+
420
+ }
421
+
422
+ }
423
+
424
+ }
425
+
394
426
  properties.uvNode = uvNode;
395
427
  properties.levelNode = levelNode;
396
428
  properties.biasNode = this.biasNode;
397
- properties.compareNode = this.compareNode;
429
+ properties.compareNode = compareNode;
430
+ properties.compareStepNode = compareStepNode;
398
431
  properties.gradNode = this.gradNode;
399
432
  properties.depthNode = this.depthNode;
400
433
  properties.offsetNode = this.offsetNode;
@@ -503,17 +536,20 @@ class TextureNode extends UniformNode {
503
536
 
504
537
  const nodeData = builder.getDataFromNode( this );
505
538
 
539
+ const nodeType = this.getNodeType( builder );
540
+
506
541
  let propertyName = nodeData.propertyName;
507
542
 
508
543
  if ( propertyName === undefined ) {
509
544
 
510
- const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode, offsetNode } = properties;
545
+ const { uvNode, levelNode, biasNode, compareNode, compareStepNode, depthNode, gradNode, offsetNode } = properties;
511
546
 
512
547
  const uvSnippet = this.generateUV( builder, uvNode );
513
548
  const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
514
549
  const biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;
515
550
  const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
516
551
  const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
552
+ const compareStepSnippet = compareStepNode ? compareStepNode.build( builder, 'float' ) : null;
517
553
  const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
518
554
  const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
519
555
 
@@ -521,7 +557,23 @@ class TextureNode extends UniformNode {
521
557
 
522
558
  propertyName = builder.getPropertyName( nodeVar );
523
559
 
524
- const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet );
560
+ let snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet );
561
+
562
+ if ( compareStepSnippet !== null ) {
563
+
564
+ const compareFunction = texture.compareFunction;
565
+
566
+ if ( compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
567
+
568
+ snippet = step( expression( snippet, nodeType ), expression( compareStepSnippet, 'float' ) ).build( builder, nodeType );
569
+
570
+ } else {
571
+
572
+ snippet = step( expression( compareStepSnippet, 'float' ), expression( snippet, nodeType ) ).build( builder, nodeType );
573
+
574
+ }
575
+
576
+ }
525
577
 
526
578
  builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
527
579
 
@@ -531,7 +583,6 @@ class TextureNode extends UniformNode {
531
583
  }
532
584
 
533
585
  let snippet = propertyName;
534
- const nodeType = this.getNodeType( builder );
535
586
 
536
587
  if ( builder.needsToWorkingColorSpace( texture ) ) {
537
588
 
@@ -572,21 +623,6 @@ class TextureNode extends UniformNode {
572
623
 
573
624
  // @TODO: Move to TSL
574
625
 
575
- /**
576
- * @function
577
- * @deprecated since r172. Use {@link TextureNode#sample} instead.
578
- *
579
- * @param {Node} uvNode - The uv node.
580
- * @return {TextureNode} A texture node representing the texture sample.
581
- */
582
- uv( uvNode ) { // @deprecated, r172
583
-
584
- warn( 'TextureNode: .uv() has been renamed. Use .sample() instead.' );
585
-
586
- return this.sample( uvNode );
587
-
588
- }
589
-
590
626
  /**
591
627
  * Samples the texture with the given uv node.
592
628
  *
@@ -315,6 +315,8 @@ class UniformArrayNode extends BufferNode {
315
315
  this.bufferCount = length;
316
316
  this.bufferType = paddedType;
317
317
 
318
+ this.update(); // initialize the buffer values
319
+
318
320
  return super.setup( builder );
319
321
 
320
322
  }
@@ -328,7 +330,7 @@ class UniformArrayNode extends BufferNode {
328
330
  */
329
331
  element( indexNode ) {
330
332
 
331
- return nodeObject( new UniformArrayElementNode( this, nodeObject( indexNode ) ) );
333
+ return new UniformArrayElementNode( this, nodeObject( indexNode ) );
332
334
 
333
335
  }
334
336
 
@@ -345,4 +347,4 @@ export default UniformArrayNode;
345
347
  * @param {?string} [nodeType] - The data type of the array elements.
346
348
  * @returns {UniformArrayNode}
347
349
  */
348
- export const uniformArray = ( values, nodeType ) => nodeObject( new UniformArrayNode( values, nodeType ) );
350
+ export const uniformArray = ( values, nodeType ) => new UniformArrayNode( values, nodeType );
@@ -1,5 +1,4 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
3
2
 
4
3
  /**
5
4
  * A special type of reference node that allows to link values in
@@ -74,4 +73,4 @@ export default UserDataNode;
74
73
  * @param {?Object} userData - A reference to the `userData` object. If not provided, the `userData` property of the 3D object that uses the node material is evaluated.
75
74
  * @returns {UserDataNode}
76
75
  */
77
- export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
76
+ export const userData = ( name, inputType, userData ) => new UserDataNode( name, inputType, userData );
@@ -1,5 +1,4 @@
1
1
  import AttributeNode from '../core/AttributeNode.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
3
2
  import { Vector4 } from '../../math/Vector4.js';
4
3
 
5
4
  /**
@@ -107,4 +106,4 @@ export default VertexColorNode;
107
106
  * @param {number} [index=0] - The attribute index.
108
107
  * @returns {VertexColorNode}
109
108
  */
110
- export const vertexColor = ( index = 0 ) => nodeObject( new VertexColorNode( index ) );
109
+ export const vertexColor = ( index = 0 ) => new VertexColorNode( index );
@@ -1,5 +1,4 @@
1
1
  import CodeNode from './CodeNode.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
3
2
 
4
3
  /**
5
4
  * This class represents a native shader function. It can be used to implement
@@ -170,7 +169,7 @@ const nativeFn = ( code, includes = [], language = '' ) => {
170
169
 
171
170
  }
172
171
 
173
- const functionNode = nodeObject( new FunctionNode( code, includes, language ) );
172
+ const functionNode = new FunctionNode( code, includes, language );
174
173
 
175
174
  const fn = ( ...params ) => functionNode.call( ...params );
176
175
  fn.functionNode = functionNode;
@@ -81,7 +81,7 @@ class ArrayNode extends TempNode {
81
81
 
82
82
  if ( this.nodeType === null ) {
83
83
 
84
- this.nodeType = this.values[ 0 ].getNodeType( builder );
84
+ return this.values[ 0 ].getNodeType( builder );
85
85
 
86
86
  }
87
87
 
@@ -101,6 +101,25 @@ class ArrayNode extends TempNode {
101
101
 
102
102
  }
103
103
 
104
+ /**
105
+ * Returns the type of a member variable.
106
+ *
107
+ * @param {NodeBuilder} builder - The current node builder.
108
+ * @param {string} name - The name of the member variable.
109
+ * @return {string} The type of the member variable.
110
+ */
111
+ getMemberType( builder, name ) {
112
+
113
+ if ( this.nodeType === null ) {
114
+
115
+ return this.values[ 0 ].getMemberType( builder, name );
116
+
117
+ }
118
+
119
+ return super.getMemberType( builder, name );
120
+
121
+ }
122
+
104
123
  /**
105
124
  * This method builds the output node and returns the resulting array as a shader string.
106
125
  *
@@ -99,8 +99,8 @@ class AssignNode extends TempNode {
99
99
 
100
100
  const scope = targetNode.getScope();
101
101
 
102
- const targetProperties = builder.getNodeProperties( scope );
103
- targetProperties.assign = true;
102
+ const scopeData = builder.getDataFromNode( scope );
103
+ scopeData.assign = true;
104
104
 
105
105
  const properties = builder.getNodeProperties( this );
106
106
  properties.sourceNode = sourceNode;
@@ -1,5 +1,5 @@
1
1
  import Node from './Node.js';
2
- import { nodeObject, varying } from '../tsl/TSLBase.js';
2
+ import { varying } from '../tsl/TSLBase.js';
3
3
  import { warn } from '../../utils.js';
4
4
 
5
5
  /**
@@ -165,4 +165,4 @@ export default AttributeNode;
165
165
  * @param {?string} [nodeType=null] - The node type.
166
166
  * @returns {AttributeNode}
167
167
  */
168
- export const attribute = ( name, nodeType = null ) => nodeObject( new AttributeNode( name, nodeType ) );
168
+ export const attribute = ( name, nodeType = null ) => new AttributeNode( name, nodeType );
@@ -1,5 +1,5 @@
1
1
  import Node from './Node.js';
2
- import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
2
+ import { addMethodChaining } from '../tsl/TSLCore.js';
3
3
  import { warn } from '../../utils.js';
4
4
 
5
5
  /**
@@ -9,6 +9,12 @@ import { warn } from '../../utils.js';
9
9
  *
10
10
  * ```js
11
11
  *node.context( { getUV: () => customCoord } );
12
+ *\// or
13
+ *material.contextNode = context( { getUV: () => customCoord } );
14
+ *\// or
15
+ *renderer.contextNode = context( { getUV: () => customCoord } );
16
+ *\// or
17
+ *scenePass.contextNode = context( { getUV: () => customCoord } );
12
18
  *```
13
19
  * @augments Node
14
20
  */
@@ -26,7 +32,7 @@ class ContextNode extends Node {
26
32
  * @param {Node} node - The node whose context should be modified.
27
33
  * @param {Object} [value={}] - The modified context data.
28
34
  */
29
- constructor( node, value = {} ) {
35
+ constructor( node = null, value = {} ) {
30
36
 
31
37
  super();
32
38
 
@@ -79,6 +85,29 @@ class ContextNode extends Node {
79
85
 
80
86
  }
81
87
 
88
+ /**
89
+ * Gathers the context data from all parent context nodes.
90
+ *
91
+ * @return {Object} The gathered context data.
92
+ */
93
+ getFlowContextData() {
94
+
95
+ const children = [];
96
+
97
+ this.traverse( ( node ) => {
98
+
99
+ if ( node.isContextNode === true ) {
100
+
101
+ children.push( node.value );
102
+
103
+ }
104
+
105
+ } );
106
+
107
+ return Object.assign( {}, ...children );
108
+
109
+ }
110
+
82
111
  /**
83
112
  * This method is overwritten to ensure it returns the member type of {@link ContextNode#node}.
84
113
  *
@@ -133,11 +162,24 @@ export default ContextNode;
133
162
  *
134
163
  * @tsl
135
164
  * @function
136
- * @param {Node} node - The node whose context should be modified.
165
+ * @param {Node|Object} [nodeOrValue={}] - The node whose context should be modified or the modified context data.
137
166
  * @param {Object} [value={}] - The modified context data.
138
167
  * @returns {ContextNode}
139
168
  */
140
- export const context = /*@__PURE__*/ nodeProxy( ContextNode ).setParameterLength( 1, 2 );
169
+ export const context = ( nodeOrValue = null, value = {} ) => {
170
+
171
+ let node = nodeOrValue;
172
+
173
+ if ( node === null || node.isNode !== true ) {
174
+
175
+ value = node || value;
176
+ node = null;
177
+
178
+ }
179
+
180
+ return new ContextNode( node, value );
181
+
182
+ };
141
183
 
142
184
  /**
143
185
  * TSL function for defining a uniformFlow context value for a given node.
@@ -160,6 +202,61 @@ export const uniformFlow = ( node ) => context( node, { uniformFlow: true } );
160
202
  */
161
203
  export const setName = ( node, name ) => context( node, { nodeName: name } );
162
204
 
205
+ /**
206
+ * TSL function for defining a built-in shadow context for a given node.
207
+ *
208
+ * @tsl
209
+ * @function
210
+ * @param {ShadowNode} shadowNode - The shadow node representing the light's shadow.
211
+ * @param {Light} light - The light associated with the shadow.
212
+ * @param {Node} [node=null] - The node whose context should be modified.
213
+ * @returns {ContextNode}
214
+ */
215
+ export function builtinShadowContext( shadowNode, light, node = null ) {
216
+
217
+ return context( node, {
218
+
219
+ getShadow: ( { light: shadowLight, shadowColorNode } ) => {
220
+
221
+ if ( light === shadowLight ) {
222
+
223
+ return shadowColorNode.mul( shadowNode );
224
+
225
+ }
226
+
227
+ return shadowColorNode;
228
+
229
+ }
230
+
231
+ } );
232
+
233
+ }
234
+
235
+ /**
236
+ * TSL function for defining a built-in ambient occlusion context for a given node.
237
+ *
238
+ * @tsl
239
+ * @function
240
+ * @param {Node} aoNode - The ambient occlusion value node to apply.
241
+ * @param {Node} [node=null] - The node whose context should be modified.
242
+ * @returns {ContextNode}
243
+ */
244
+ export function builtinAOContext( aoNode, node = null ) {
245
+
246
+ return context( node, {
247
+
248
+ getAO: ( inputNode, { material } ) => {
249
+
250
+ if ( material.transparent === true ) return inputNode;
251
+
252
+ return inputNode !== null ? inputNode.mul( aoNode ) : aoNode;
253
+
254
+ }
255
+
256
+ } );
257
+
258
+ }
259
+
163
260
  /**
164
261
  * TSL function for defining a label context value for a given node.
165
262
  *
@@ -182,3 +279,5 @@ addMethodChaining( 'context', context );
182
279
  addMethodChaining( 'label', label );
183
280
  addMethodChaining( 'uniformFlow', uniformFlow );
184
281
  addMethodChaining( 'setName', setName );
282
+ addMethodChaining( 'builtinShadowContext', ( node, shadowNode, light ) => builtinShadowContext( shadowNode, light, node ) );
283
+ addMethodChaining( 'builtinAOContext', ( node, aoValue ) => builtinAOContext( aoValue, node ) );
@@ -1,5 +1,11 @@
1
1
  import OutputStructNode from './OutputStructNode.js';
2
2
  import { nodeProxy, vec4 } from '../tsl/TSLBase.js';
3
+ import { MaterialBlending, NoBlending } from '../../constants.js';
4
+ import BlendMode from '../../renderers/common/BlendMode.js';
5
+
6
+ // Predefined blend modes for MRT nodes.
7
+ const _noBlending = /**@__PURE__*/ new BlendMode( NoBlending );
8
+ const _materialBlending = /**@__PURE__*/ new BlendMode( MaterialBlending );
3
9
 
4
10
  /**
5
11
  * Returns the MRT texture index for the given name.
@@ -31,7 +37,7 @@ export function getTextureIndex( textures, name ) {
31
37
  * const mrtNode = mrt( {
32
38
  * output: output,
33
39
  * normal: normalView
34
- * } ) );
40
+ * } ) ;
35
41
  * ```
36
42
  * The MRT output is defined as a dictionary.
37
43
  *
@@ -63,6 +69,15 @@ class MRTNode extends OutputStructNode {
63
69
  */
64
70
  this.outputNodes = outputNodes;
65
71
 
72
+ /**
73
+ * A dictionary storing the blend modes for each output.
74
+ *
75
+ * @type {Object<string, BlendMode>}
76
+ */
77
+ this.blendModes = {
78
+ output: _materialBlending
79
+ };
80
+
66
81
  /**
67
82
  * This flag can be used for type testing.
68
83
  *
@@ -74,6 +89,33 @@ class MRTNode extends OutputStructNode {
74
89
 
75
90
  }
76
91
 
92
+ /**
93
+ * Sets the blend mode for the given output name.
94
+ *
95
+ * @param {string} name - The name of the output.
96
+ * @param {BlendMode} blend - The blending mode.
97
+ * @return {MRTNode} The current MRT node.
98
+ */
99
+ setBlendMode( name, blend ) {
100
+
101
+ this.blendModes[ name ] = blend;
102
+
103
+ return this;
104
+
105
+ }
106
+
107
+ /**
108
+ * Returns the blend mode for the given output name.
109
+ *
110
+ * @param {string} name - The name of the output.
111
+ * @return {BlendMode} The blend mode.
112
+ */
113
+ getBlendMode( name ) {
114
+
115
+ return this.blendModes[ name ] || _noBlending;
116
+
117
+ }
118
+
77
119
  /**
78
120
  * Returns `true` if the MRT node has an output with the given name.
79
121
  *
@@ -107,8 +149,12 @@ class MRTNode extends OutputStructNode {
107
149
  merge( mrtNode ) {
108
150
 
109
151
  const outputs = { ...this.outputNodes, ...mrtNode.outputNodes };
152
+ const blendings = { ...this.blendModes, ...mrtNode.blendModes };
153
+
154
+ const mrtTarget = mrt( outputs );
155
+ mrtTarget.blendings = blendings;
110
156
 
111
- return mrt( outputs );
157
+ return mrtTarget;
112
158
 
113
159
  }
114
160
 
@@ -5,6 +5,8 @@ import { EventDispatcher } from '../../core/EventDispatcher.js';
5
5
  import { MathUtils } from '../../math/MathUtils.js';
6
6
  import { warn, error } from '../../utils.js';
7
7
 
8
+ import StackTrace from './StackTrace.js';
9
+
8
10
  const _parentBuildStage = {
9
11
  analyze: 'setup',
10
12
  generate: 'analyze'
@@ -132,7 +134,7 @@ class Node extends EventDispatcher {
132
134
  this._cacheKey = null;
133
135
 
134
136
  /**
135
- * The cache key 's version.
137
+ * The cache key's version.
136
138
  *
137
139
  * @private
138
140
  * @type {number}
@@ -142,6 +144,20 @@ class Node extends EventDispatcher {
142
144
 
143
145
  Object.defineProperty( this, 'id', { value: _nodeId ++ } );
144
146
 
147
+ /**
148
+ * The stack trace of the node for debugging purposes.
149
+ *
150
+ * @type {?string}
151
+ * @default null
152
+ */
153
+ this.stackTrace = null;
154
+
155
+ if ( Node.captureStackTrace === true ) {
156
+
157
+ this.stackTrace = new StackTrace();
158
+
159
+ }
160
+
145
161
  }
146
162
 
147
163
  /**
@@ -770,7 +786,6 @@ class Node extends EventDispatcher {
770
786
 
771
787
  //
772
788
 
773
- builder.addNode( this );
774
789
  builder.addChain( this );
775
790
 
776
791
  /* Build stages expected results:
@@ -784,6 +799,8 @@ class Node extends EventDispatcher {
784
799
 
785
800
  if ( buildStage === 'setup' ) {
786
801
 
802
+ builder.addNode( this );
803
+
787
804
  this.updateReference( builder );
788
805
 
789
806
  const properties = builder.getNodeProperties( this );
@@ -820,6 +837,8 @@ class Node extends EventDispatcher {
820
837
 
821
838
  }
822
839
 
840
+ builder.addSequentialNode( this );
841
+
823
842
  }
824
843
 
825
844
  result = properties.outputNode;
@@ -889,7 +908,6 @@ class Node extends EventDispatcher {
889
908
  }
890
909
 
891
910
  builder.removeChain( this );
892
- builder.addSequentialNode( this );
893
911
 
894
912
  return result;
895
913
 
@@ -1080,4 +1098,12 @@ class Node extends EventDispatcher {
1080
1098
 
1081
1099
  }
1082
1100
 
1101
+ /**
1102
+ * Enables or disables the automatic capturing of stack traces for nodes.
1103
+ *
1104
+ * @type {boolean}
1105
+ * @default false
1106
+ */
1107
+ Node.captureStackTrace = false;
1108
+
1083
1109
  export default Node;