@gnsx/three 0.185.15 → 0.186.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 (417) hide show
  1. package/build/three.cjs +10 -82600
  2. package/build/three.core.js +1303 -728
  3. package/build/three.module.js +439 -338
  4. package/build/three.tsl.js +74 -44
  5. package/build/three.webgpu.js +6036 -2184
  6. package/build/three.webgpu.nodes.js +6020 -2184
  7. package/examples/jsm/Addons.js +6 -6
  8. package/examples/jsm/controls/ArcballControls.js +1 -1
  9. package/examples/jsm/controls/FirstPersonControls.js +44 -20
  10. package/examples/jsm/controls/OrbitControls.js +9 -0
  11. package/examples/jsm/controls/TrackballControls.js +109 -4
  12. package/examples/jsm/csm/CSMShadowNode.js +13 -0
  13. package/examples/jsm/exporters/GLTFExporter.js +23 -7
  14. package/examples/jsm/exporters/USDZExporter.js +2 -2
  15. package/examples/jsm/generators/CityGenerator.js +377 -45
  16. package/examples/jsm/generators/ForestGenerator.js +12 -12
  17. package/examples/jsm/generators/TerrainGenerator.js +49 -37
  18. package/examples/jsm/generators/TreeGenerator.js +70 -76
  19. package/examples/jsm/generators/city/BenchGenerator.js +127 -0
  20. package/examples/jsm/generators/city/CarGenerator.js +479 -0
  21. package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
  22. package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
  23. package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
  24. package/examples/jsm/generators/city/PersonGenerator.js +447 -0
  25. package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
  26. package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
  27. package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
  28. package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
  29. package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
  30. package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
  31. package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
  34. package/examples/jsm/gpgpu/CountingSort.js +271 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
  36. package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
  37. package/examples/jsm/inspector/Extension.js +94 -0
  38. package/examples/jsm/inspector/Inspector.js +145 -41
  39. package/examples/jsm/inspector/RendererInspector.js +100 -52
  40. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
  41. package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
  42. package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
  43. package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
  44. package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
  45. package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
  46. package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
  47. package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
  48. package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
  49. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
  50. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
  51. package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
  52. package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
  53. package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
  54. package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
  55. package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
  56. package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
  57. package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
  58. package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
  59. package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
  60. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
  61. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
  62. package/examples/jsm/inspector/tabs/Memory.js +0 -2
  63. package/examples/jsm/inspector/tabs/Settings.js +4 -0
  64. package/examples/jsm/inspector/tabs/Timeline.js +223 -171
  65. package/examples/jsm/inspector/tabs/Viewer.js +515 -21
  66. package/examples/jsm/inspector/ui/List.js +15 -9
  67. package/examples/jsm/inspector/ui/Profiler.js +170 -14
  68. package/examples/jsm/inspector/ui/Style.js +269 -23
  69. package/examples/jsm/inspector/ui/Tab.js +2 -0
  70. package/examples/jsm/inspector/ui/Values.js +14 -2
  71. package/examples/jsm/interactive/HTMLMesh.js +19 -3
  72. package/examples/jsm/lighting/LightProbeGrid.js +484 -889
  73. package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
  74. package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
  75. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
  76. package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
  77. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
  78. package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
  79. package/examples/jsm/lights/SunLight.js +95 -0
  80. package/examples/jsm/lights/SunLightNode.js +56 -0
  81. package/examples/jsm/lights/SunLightShadow.js +319 -0
  82. package/examples/jsm/lights/SunShadowNode.js +312 -0
  83. package/examples/jsm/loaders/3DMLoader.js +150 -49
  84. package/examples/jsm/loaders/3MFLoader.js +202 -1
  85. package/examples/jsm/loaders/FBXLoader.js +81 -5
  86. package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
  87. package/examples/jsm/loaders/GLTFLoader.js +79 -14
  88. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
  89. package/examples/jsm/loaders/KSPLATLoader.js +463 -0
  90. package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
  91. package/examples/jsm/loaders/PCDLoader.js +1 -1
  92. package/examples/jsm/loaders/SPLATLoader.js +139 -0
  93. package/examples/jsm/loaders/SPZLoader.js +561 -0
  94. package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
  95. package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
  96. package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
  97. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
  98. package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
  99. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
  100. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
  101. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
  102. package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
  103. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
  104. package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
  105. package/examples/jsm/loaders/usd/USDAParser.js +15 -2
  106. package/examples/jsm/loaders/usd/USDCParser.js +1 -4
  107. package/examples/jsm/loaders/usd/USDComposer.js +80 -42
  108. package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
  109. package/examples/jsm/misc/RollerCoaster.js +2 -2
  110. package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
  111. package/examples/jsm/misc/Sculptor.js +1679 -0
  112. package/examples/jsm/misc/SculptorMesh.js +1504 -0
  113. package/examples/jsm/misc/SculptorTools.js +1180 -0
  114. package/examples/jsm/misc/SculptorUtils.js +345 -0
  115. package/examples/jsm/misc/TubePainter.js +28 -16
  116. package/examples/jsm/misc/VolumeSlice.js +24 -24
  117. package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
  118. package/examples/jsm/objects/GaussianSplat.js +1039 -0
  119. package/examples/jsm/objects/Sky.js +66 -45
  120. package/examples/jsm/objects/SkyMesh.js +70 -51
  121. package/examples/jsm/physics/JoltPhysics.js +1 -1
  122. package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
  123. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  124. package/examples/jsm/postprocessing/GTAOPass.js +1 -1
  125. package/examples/jsm/postprocessing/OutlinePass.js +5 -5
  126. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  128. package/examples/jsm/postprocessing/SSRPass.js +4 -2
  129. package/examples/jsm/postprocessing/SavePass.js +1 -1
  130. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  131. package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
  132. package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
  133. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  134. package/examples/jsm/shaders/ExposureShader.js +1 -1
  135. package/examples/jsm/shaders/FilmShader.js +2 -1
  136. package/examples/jsm/transpiler/AST.js +21 -2
  137. package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
  138. package/examples/jsm/transpiler/TSLEncoder.js +82 -10
  139. package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
  140. package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
  141. package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
  142. package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
  143. package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
  144. package/examples/jsm/tsl/display/BloomNode.js +55 -30
  145. package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
  146. package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
  147. package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
  148. package/examples/jsm/tsl/display/FSR1Node.js +8 -4
  149. package/examples/jsm/tsl/display/GTAONode.js +199 -86
  150. package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
  151. package/examples/jsm/tsl/display/GodraysNode.js +5 -2
  152. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
  153. package/examples/jsm/tsl/display/LensflareNode.js +5 -2
  154. package/examples/jsm/tsl/display/OITPassNode.js +352 -0
  155. package/examples/jsm/tsl/display/OutlineNode.js +2 -0
  156. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
  157. package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
  158. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
  159. package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
  160. package/examples/jsm/tsl/display/SMAANode.js +22 -61
  161. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
  162. package/examples/jsm/tsl/display/SSAONode.js +436 -0
  163. package/examples/jsm/tsl/display/SSGINode.js +5 -2
  164. package/examples/jsm/tsl/display/SSRNode.js +7 -2
  165. package/examples/jsm/tsl/display/SSSNode.js +5 -2
  166. package/examples/jsm/tsl/display/SharpenNode.js +5 -4
  167. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
  168. package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
  169. package/examples/jsm/tsl/display/TAAUNode.js +22 -125
  170. package/examples/jsm/tsl/display/TRAANode.js +16 -142
  171. package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
  172. package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
  173. package/examples/jsm/tsl/display/hashBlur.js +3 -2
  174. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
  175. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
  176. package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
  177. package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
  178. package/examples/jsm/tsl/utils/Raymarching.js +5 -5
  179. package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
  180. package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
  181. package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
  182. package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
  183. package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
  186. package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
  187. package/package.json +9 -16
  188. package/src/Three.Core.js +2 -1
  189. package/src/Three.TSL.js +73 -43
  190. package/src/Three.WebGPU.Nodes.js +1 -0
  191. package/src/Three.WebGPU.js +1 -0
  192. package/src/animation/AnimationClip.js +15 -2
  193. package/src/animation/AnimationObjectGroup.js +18 -6
  194. package/src/animation/AnimationUtils.js +26 -0
  195. package/src/animation/KeyframeTrack.js +37 -0
  196. package/src/constants.js +23 -1
  197. package/src/core/BufferAttribute.js +3 -2
  198. package/src/core/BufferGeometry.js +1 -1
  199. package/src/core/InterleavedBuffer.js +5 -1
  200. package/src/core/Object3D.js +40 -12
  201. package/src/core/Raycaster.js +4 -0
  202. package/src/core/RenderTarget.js +99 -9
  203. package/src/core/RenderTarget3D.js +12 -8
  204. package/src/extras/Controls.js +0 -8
  205. package/src/extras/PMREMGenerator.js +99 -205
  206. package/src/geometries/TorusGeometry.js +1 -1
  207. package/src/helpers/ArrowHelper.js +2 -0
  208. package/src/helpers/AxesHelper.js +2 -0
  209. package/src/helpers/Box3Helper.js +2 -0
  210. package/src/helpers/BoxHelper.js +2 -0
  211. package/src/helpers/CameraHelper.js +2 -0
  212. package/src/helpers/DirectionalLightHelper.js +2 -0
  213. package/src/helpers/GridHelper.js +2 -0
  214. package/src/helpers/HemisphereLightHelper.js +2 -0
  215. package/src/helpers/PlaneHelper.js +2 -0
  216. package/src/helpers/PointLightHelper.js +2 -0
  217. package/src/helpers/PolarGridHelper.js +2 -0
  218. package/src/helpers/SkeletonHelper.js +2 -0
  219. package/src/helpers/SpotLightHelper.js +2 -0
  220. package/src/lights/Light.js +0 -10
  221. package/src/lights/LightShadow.js +43 -12
  222. package/src/lights/SpotLightShadow.js +18 -0
  223. package/src/loaders/BufferGeometryLoader.js +5 -0
  224. package/src/loaders/ImageBitmapLoader.js +3 -1
  225. package/src/loaders/ObjectLoader.js +8 -5
  226. package/src/materials/Material.js +80 -57
  227. package/src/materials/MeshPhysicalMaterial.js +32 -0
  228. package/src/materials/nodes/Line2NodeMaterial.js +17 -8
  229. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
  230. package/src/materials/nodes/NodeMaterial.js +19 -13
  231. package/src/materials/nodes/PointsNodeMaterial.js +2 -1
  232. package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
  233. package/src/math/Frustum.js +9 -0
  234. package/src/math/FrustumArray.js +1 -1
  235. package/src/math/MathUtils.js +5 -3
  236. package/src/math/Matrix4.js +2 -9
  237. package/src/math/Plane.js +30 -1
  238. package/src/math/Quaternion.js +0 -10
  239. package/src/math/Ray.js +95 -45
  240. package/src/math/Triangle.js +0 -2
  241. package/src/math/Vector3.js +2 -2
  242. package/src/math/Vector4.js +0 -4
  243. package/src/math/interpolants/BezierInterpolant.js +36 -23
  244. package/src/nodes/Nodes.js +2 -0
  245. package/src/nodes/TSL.js +11 -3
  246. package/src/nodes/accessors/Batch.js +85 -13
  247. package/src/nodes/accessors/BufferAttributeNode.js +1 -1
  248. package/src/nodes/accessors/BuiltinNode.js +1 -1
  249. package/src/nodes/accessors/Instance.js +19 -18
  250. package/src/nodes/accessors/MaterialNode.js +9 -0
  251. package/src/nodes/accessors/ModelNode.js +85 -9
  252. package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
  253. package/src/nodes/accessors/ReferenceElementNode.js +72 -0
  254. package/src/nodes/accessors/ReferenceNode.js +1 -70
  255. package/src/nodes/accessors/Skinning.js +124 -12
  256. package/src/nodes/accessors/StorageTextureNode.js +7 -3
  257. package/src/nodes/accessors/Texture3DNode.js +1 -1
  258. package/src/nodes/accessors/TextureNode.js +51 -21
  259. package/src/nodes/accessors/TextureSizeNode.js +4 -2
  260. package/src/nodes/accessors/UniformArrayNode.js +30 -5
  261. package/src/nodes/code/CodeNode.js +1 -1
  262. package/src/nodes/code/FunctionNode.js +12 -2
  263. package/src/nodes/core/ArrayNode.js +2 -2
  264. package/src/nodes/core/ContextNode.js +57 -4
  265. package/src/nodes/core/IndexNode.js +69 -4
  266. package/src/nodes/core/InspectorNode.js +2 -2
  267. package/src/nodes/core/MRTNode.js +44 -2
  268. package/src/nodes/core/Node.js +6 -3
  269. package/src/nodes/core/NodeBuilder.js +65 -50
  270. package/src/nodes/core/NodeFrame.js +11 -3
  271. package/src/nodes/core/NodeUtils.js +88 -0
  272. package/src/nodes/core/PropertyNode.js +8 -0
  273. package/src/nodes/core/StackNode.js +0 -1
  274. package/src/nodes/core/StructNode.js +4 -3
  275. package/src/nodes/core/UniformGroupNode.js +3 -2
  276. package/src/nodes/core/UniformNode.js +26 -12
  277. package/src/nodes/core/VarNode.js +0 -1
  278. package/src/nodes/display/BumpMapNode.js +2 -2
  279. package/src/nodes/display/ColorAdjustment.js +1 -1
  280. package/src/nodes/display/PassNode.js +76 -15
  281. package/src/nodes/display/ScreenNode.js +22 -65
  282. package/src/nodes/fog/Fog.js +4 -4
  283. package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
  284. package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
  285. package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
  286. package/src/nodes/functions/BSDF/LTC.js +1 -1
  287. package/src/nodes/functions/PhongLightingModel.js +1 -1
  288. package/src/nodes/functions/PhysicalLightingModel.js +83 -25
  289. package/src/nodes/functions/ToonLightingModel.js +2 -2
  290. package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
  291. package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
  292. package/src/nodes/gpgpu/BarrierNode.js +13 -4
  293. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  294. package/src/nodes/gpgpu/ComputeNode.js +20 -17
  295. package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
  296. package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
  297. package/src/nodes/lighting/EnvironmentNode.js +40 -4
  298. package/src/nodes/lighting/LightsNode.js +20 -4
  299. package/src/nodes/lighting/ShadowBaseNode.js +158 -1
  300. package/src/nodes/lighting/ShadowFilterNode.js +2 -106
  301. package/src/nodes/lighting/ShadowNode.js +22 -91
  302. package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
  303. package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
  304. package/src/nodes/materialx/MaterialXCore.js +37 -0
  305. package/src/nodes/materialx/MaterialXNodes.js +64 -72
  306. package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
  307. package/src/nodes/math/BitcountNode.js +24 -4
  308. package/src/nodes/math/MathNode.js +4 -4
  309. package/src/nodes/math/MathUtils.js +15 -4
  310. package/src/nodes/math/OperatorNode.js +2 -2
  311. package/src/nodes/math/PackFloatNode.js +29 -1
  312. package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
  313. package/src/nodes/math/UnpackFloatNode.js +30 -2
  314. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  315. package/src/nodes/pmrem/PMREMNode.js +1 -1
  316. package/src/nodes/pmrem/PMREMUtils.js +31 -74
  317. package/src/nodes/shapes/Shapes.js +1 -1
  318. package/src/nodes/tsl/TSLCore.js +1 -31
  319. package/src/nodes/utils/EventNode.js +75 -0
  320. package/src/nodes/utils/LoopNode.js +54 -13
  321. package/src/nodes/utils/PostProcessingUtils.js +23 -2
  322. package/src/nodes/utils/RTTNode.js +97 -32
  323. package/src/nodes/utils/ReflectorNode.js +8 -4
  324. package/src/nodes/utils/RotateNode.js +85 -8
  325. package/src/nodes/utils/SpriteUtils.js +58 -23
  326. package/src/objects/BatchedMesh.js +6 -0
  327. package/src/objects/InstancedMesh.js +1 -1
  328. package/src/objects/LOD.js +1 -1
  329. package/src/objects/Line.js +12 -0
  330. package/src/objects/Mesh.js +12 -0
  331. package/src/objects/Points.js +12 -0
  332. package/src/objects/Sprite.js +12 -0
  333. package/src/renderers/WebGLRenderer.js +93 -27
  334. package/src/renderers/common/Animation.js +12 -2
  335. package/src/renderers/common/Backend.js +38 -10
  336. package/src/renderers/common/BindGroup.js +0 -1
  337. package/src/renderers/common/Bindings.js +50 -4
  338. package/src/renderers/common/BundleGroup.js +4 -0
  339. package/src/renderers/common/ClippingContext.js +11 -1
  340. package/src/renderers/common/Color4.js +9 -0
  341. package/src/renderers/common/Constants.js +0 -5
  342. package/src/renderers/common/DirectRenderPipeline.js +233 -0
  343. package/src/renderers/common/Geometries.js +24 -3
  344. package/src/renderers/common/Info.js +3 -3
  345. package/src/renderers/common/InspectorBase.js +37 -8
  346. package/src/renderers/common/Lighting.js +11 -4
  347. package/src/renderers/common/Pipelines.js +6 -4
  348. package/src/renderers/common/QuadMesh.js +16 -2
  349. package/src/renderers/common/RenderContext.js +8 -0
  350. package/src/renderers/common/RenderList.js +53 -19
  351. package/src/renderers/common/RenderLists.js +58 -11
  352. package/src/renderers/common/RenderObject.js +14 -0
  353. package/src/renderers/common/RenderObjects.js +14 -9
  354. package/src/renderers/common/RenderPipeline.js +52 -44
  355. package/src/renderers/common/Renderer.js +226 -55
  356. package/src/renderers/common/Storage3DTexture.js +16 -0
  357. package/src/renderers/common/Textures.js +3 -3
  358. package/src/renderers/common/XRManager.js +79 -72
  359. package/src/renderers/common/extras/PMREMGenerator.js +76 -144
  360. package/src/renderers/common/nodes/NodeManager.js +144 -6
  361. package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
  362. package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
  363. package/src/renderers/shaders/DFGLUTData.js +2 -1
  364. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
  365. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
  371. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
  372. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
  375. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  376. package/src/renderers/shaders/ShaderLib.js +1 -0
  377. package/src/renderers/shaders/UniformsLib.js +16 -0
  378. package/src/renderers/webgl/WebGLAnimation.js +2 -2
  379. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  380. package/src/renderers/webgl/WebGLLights.js +74 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +6 -0
  382. package/src/renderers/webgl/WebGLOutput.js +36 -24
  383. package/src/renderers/webgl/WebGLProgram.js +3 -0
  384. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  385. package/src/renderers/webgl/WebGLRenderLists.js +6 -10
  386. package/src/renderers/webgl/WebGLShadowMap.js +47 -44
  387. package/src/renderers/webgl/WebGLTextures.js +7 -7
  388. package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
  389. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
  390. package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
  391. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
  392. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
  393. package/src/renderers/webgpu/WebGPUBackend.js +513 -145
  394. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
  395. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
  396. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
  397. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
  398. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
  399. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
  400. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
  401. package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
  402. package/src/renderers/webxr/WebXRManager.js +25 -2
  403. package/src/scenes/Scene.js +3 -3
  404. package/src/textures/CompressedArrayTexture.js +16 -0
  405. package/src/textures/Data3DTexture.js +16 -0
  406. package/src/textures/DataArrayTexture.js +16 -0
  407. package/src/textures/DepthTexture.js +3 -3
  408. package/src/textures/Texture.js +3 -3
  409. package/src/textures/{Source.js → TextureSource.js} +39 -8
  410. package/build/three.core.min.js +0 -6
  411. package/build/three.module.min.js +0 -6
  412. package/build/three.tsl.min.js +0 -6
  413. package/build/three.webgpu.min.js +0 -6
  414. package/build/three.webgpu.nodes.min.js +0 -6
  415. package/examples/jsm/libs/ecsy.module.js +0 -1792
  416. package/examples/jsm/loaders/LottieLoader.js +0 -130
  417. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
@@ -8,7 +8,7 @@ import ParameterNode from './ParameterNode.js';
8
8
  import StructType from './StructType.js';
9
9
  import FunctionNode from '../code/FunctionNode.js';
10
10
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
11
- import { getDataFromObject, getTypeFromLength, hashString } from './NodeUtils.js';
11
+ import { getDataFromObject, getTypeFromLength, getTextureType, hashString } from './NodeUtils.js';
12
12
  import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
13
13
 
14
14
  import {
@@ -23,7 +23,7 @@ import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
23
23
 
24
24
  import BindGroup from '../../renderers/common/BindGroup.js';
25
25
 
26
- import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending, RedFormat, RGFormat, RGBFormat, RedIntegerFormat, RGIntegerFormat, RGBIntegerFormat } from '../../constants.js';
26
+ import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending } from '../../constants.js';
27
27
  import { RenderTarget } from '../../core/RenderTarget.js';
28
28
  import { Color } from '../../math/Color.js';
29
29
  import { Vector2 } from '../../math/Vector2.js';
@@ -123,6 +123,14 @@ class NodeBuilder {
123
123
  */
124
124
  this.geometry = ( object && object.geometry ) || null;
125
125
 
126
+ /**
127
+ * The compute node, if building for compute.
128
+ *
129
+ * @type {?ComputeNode}
130
+ * @default null
131
+ */
132
+ this.compute = null;
133
+
126
134
  /**
127
135
  * The current renderer.
128
136
  *
@@ -573,50 +581,15 @@ class NodeBuilder {
573
581
  */
574
582
  getOutputType( index = 0 ) {
575
583
 
576
- let type = 'vec4';
577
-
578
584
  const renderTarget = this.renderer.getRenderTarget();
579
585
 
580
586
  if ( renderTarget !== null ) {
581
587
 
582
- const renderTargetType = renderTarget.textures[ index ].type;
583
- const renderTargetFormat = renderTarget.textures[ index ].format;
584
-
585
- let typeStr = 'vec';
586
-
587
- if ( renderTargetType === IntType ) {
588
-
589
- typeStr = 'ivec';
590
-
591
- } else if ( renderTargetType === UnsignedIntType ) {
592
-
593
- typeStr = 'uvec';
594
-
595
- }
596
-
597
- if ( renderTargetFormat === RedFormat || renderTargetFormat === RedIntegerFormat ) {
598
-
599
- if ( renderTargetType === IntType ) type = 'int';
600
- else if ( renderTargetType === UnsignedIntType ) type = 'uint';
601
- else type = 'float';
602
-
603
- } else if ( renderTargetFormat === RGFormat || renderTargetFormat === RGIntegerFormat ) {
604
-
605
- type = `${ typeStr }2`;
606
-
607
- } else if ( renderTargetFormat === RGBFormat || renderTargetFormat === RGBIntegerFormat ) {
608
-
609
- type = `${ typeStr }3`;
610
-
611
- } else {
612
-
613
- type = `${ typeStr }4`;
614
-
615
- }
588
+ return getTextureType( renderTarget.textures[ index ] );
616
589
 
617
590
  }
618
591
 
619
- return type;
592
+ return 'vec4';
620
593
 
621
594
  }
622
595
 
@@ -865,8 +838,8 @@ class NodeBuilder {
865
838
  */
866
839
  addSequentialNode( node ) {
867
840
 
868
- const updateBeforeType = node.getUpdateBeforeType();
869
- const updateAfterType = node.getUpdateAfterType();
841
+ const updateBeforeType = node.updateBeforeType;
842
+ const updateAfterType = node.updateAfterType;
870
843
 
871
844
  if ( updateBeforeType !== NodeUpdateType.NONE || updateAfterType !== NodeUpdateType.NONE ) {
872
845
 
@@ -883,7 +856,7 @@ class NodeBuilder {
883
856
 
884
857
  for ( const node of this.nodes ) {
885
858
 
886
- const updateType = node.getUpdateType();
859
+ const updateType = node.updateType;
887
860
 
888
861
  if ( updateType !== NodeUpdateType.NONE ) {
889
862
 
@@ -895,8 +868,8 @@ class NodeBuilder {
895
868
 
896
869
  for ( const node of this.sequentialNodes ) {
897
870
 
898
- const updateBeforeType = node.getUpdateBeforeType();
899
- const updateAfterType = node.getUpdateAfterType();
871
+ const updateBeforeType = node.updateBeforeType;
872
+ const updateAfterType = node.updateAfterType;
900
873
 
901
874
  if ( updateBeforeType !== NodeUpdateType.NONE ) {
902
875
 
@@ -926,6 +899,17 @@ class NodeBuilder {
926
899
 
927
900
  }
928
901
 
902
+ /**
903
+ * A reference to the render pipeline.
904
+ *
905
+ * @type {RenderPipeline}
906
+ */
907
+ get renderPipeline() {
908
+
909
+ return this.context.renderPipeline;
910
+
911
+ }
912
+
929
913
  /**
930
914
  * Whether the given texture is filtered or not.
931
915
  *
@@ -1098,6 +1082,7 @@ class NodeBuilder {
1098
1082
  delete context.getOutput;
1099
1083
  delete context.getTextureLevel;
1100
1084
  delete context.getAO;
1085
+ delete context.getGI;
1101
1086
  delete context.getShadow;
1102
1087
 
1103
1088
  return context;
@@ -1328,6 +1313,21 @@ class NodeBuilder {
1328
1313
 
1329
1314
  }
1330
1315
 
1316
+ /**
1317
+ * Generates a texture size shader string for the given texture data.
1318
+ *
1319
+ * @abstract
1320
+ * @param {Texture} texture - The texture.
1321
+ * @param {string} textureProperty - The texture property name.
1322
+ * @param {string} levelSnippet - Snippet defining the mip level.
1323
+ * @return {string} The generated shader string.
1324
+ */
1325
+ generateTextureSize( /* texture, textureProperty, levelSnippet */ ) {
1326
+
1327
+ warn( 'Abstract function.' );
1328
+
1329
+ }
1330
+
1331
1331
  /**
1332
1332
  * Generates the array declaration string.
1333
1333
  *
@@ -1542,6 +1542,20 @@ class NodeBuilder {
1542
1542
 
1543
1543
  }
1544
1544
 
1545
+ /**
1546
+ * Returns whether the given name is a reserved keyword of the backend's
1547
+ * shading language. Backends override this method to provide their
1548
+ * language-specific keywords.
1549
+ *
1550
+ * @param {string} name - The name to test.
1551
+ * @return {boolean} Whether the name is a reserved keyword or not.
1552
+ */
1553
+ isReservedKeyword( /* name */ ) {
1554
+
1555
+ return false;
1556
+
1557
+ }
1558
+
1545
1559
  /**
1546
1560
  * Whether the given type is a vector type or not.
1547
1561
  *
@@ -2267,6 +2281,7 @@ class NodeBuilder {
2267
2281
 
2268
2282
  const shaderStage = this.shaderStage;
2269
2283
  const declarations = this.declarations[ shaderStage ] || ( this.declarations[ shaderStage ] = {} );
2284
+ const checkKeywords = this.renderer.debug.diagnostics.keywords;
2270
2285
 
2271
2286
  const baseName = node.name;
2272
2287
 
@@ -2274,9 +2289,9 @@ class NodeBuilder {
2274
2289
  let property = this.getPropertyName( node );
2275
2290
  let index = 1;
2276
2291
 
2277
- // Automatically renames the property if the name is already in use.
2292
+ // Automatically renames the property if the name is already in use or reserved.
2278
2293
 
2279
- while ( declarations[ property ] !== undefined ) {
2294
+ while ( ( checkKeywords && this.isReservedKeyword( name ) ) || declarations[ property ] !== undefined ) {
2280
2295
 
2281
2296
  name = baseName + '_' + index ++;
2282
2297
  node.name = name;
@@ -2286,7 +2301,7 @@ class NodeBuilder {
2286
2301
 
2287
2302
  if ( name !== baseName ) {
2288
2303
 
2289
- warn( `TSL: Declaration name '${ baseName }' of '${ node.type }' already in use. Renamed to '${ name }'.` );
2304
+ warn( `TSL: Declaration name '${ baseName }' of '${ node.type }' is a reserved keyword or already in use. Renamed to '${ name }'.` );
2290
2305
 
2291
2306
  }
2292
2307
 
@@ -3104,7 +3119,7 @@ class NodeBuilder {
3104
3119
  */
3105
3120
  prebuild() {
3106
3121
 
3107
- const { object, renderer, material } = this;
3122
+ const { renderer, material } = this;
3108
3123
 
3109
3124
  // < renderer.contextNode >
3110
3125
 
@@ -3152,7 +3167,7 @@ class NodeBuilder {
3152
3167
 
3153
3168
  } else {
3154
3169
 
3155
- this.addFlow( 'compute', object );
3170
+ this.addFlow( 'compute', this.compute );
3156
3171
 
3157
3172
  }
3158
3173
 
@@ -3450,7 +3465,7 @@ class NodeBuilder {
3450
3465
 
3451
3466
  const mrt = this.renderer.getMRT();
3452
3467
 
3453
- return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( this.object ).useVelocity === true;
3468
+ return ( mrt && mrt.has( 'velocity' ) ) || ( this.object !== null && getDataFromObject( this.object ).useVelocity === true );
3454
3469
 
3455
3470
  }
3456
3471
 
@@ -110,6 +110,14 @@ class NodeFrame {
110
110
  */
111
111
  this.scene = null;
112
112
 
113
+ /**
114
+ * A reference to the current compute node.
115
+ *
116
+ * @type {?ComputeNode}
117
+ * @default null
118
+ */
119
+ this.compute = null;
120
+
113
121
  }
114
122
 
115
123
  /**
@@ -155,7 +163,7 @@ class NodeFrame {
155
163
  ProfilerService.begin( label );
156
164
  // !WITH_GENESYS
157
165
 
158
- const updateType = node.getUpdateBeforeType();
166
+ const updateType = node.getUpdateBeforeType( this );
159
167
  const reference = node.updateReference( this );
160
168
 
161
169
  if ( updateType === NodeUpdateType.FRAME ) {
@@ -221,7 +229,7 @@ class NodeFrame {
221
229
  ProfilerService.begin( label );
222
230
  // !WITH_GENESYS
223
231
 
224
- const updateType = node.getUpdateAfterType();
232
+ const updateType = node.getUpdateAfterType( this );
225
233
  const reference = node.updateReference( this );
226
234
 
227
235
  if ( updateType === NodeUpdateType.FRAME ) {
@@ -274,7 +282,7 @@ class NodeFrame {
274
282
  */
275
283
  updateNode( node ) {
276
284
 
277
- const updateType = node.getUpdateType();
285
+ const updateType = node.getUpdateType( this );
278
286
  const reference = node.updateReference( this );
279
287
 
280
288
  if ( updateType === NodeUpdateType.FRAME ) {
@@ -6,6 +6,20 @@ import { Vector2 } from '../../math/Vector2.js';
6
6
  import { Vector3 } from '../../math/Vector3.js';
7
7
  import { Vector4 } from '../../math/Vector4.js';
8
8
 
9
+ import {
10
+ IntType,
11
+ UnsignedIntType,
12
+ AlphaFormat,
13
+ RedFormat,
14
+ RedIntegerFormat,
15
+ RGFormat,
16
+ RGIntegerFormat,
17
+ RGBFormat,
18
+ RGBIntegerFormat,
19
+ DepthFormat,
20
+ DepthStencilFormat
21
+ } from '../../constants.js';
22
+
9
23
  import { error } from '../../utils.js';
10
24
  import StackTrace from '../core/StackTrace.js';
11
25
 
@@ -276,6 +290,74 @@ export function getValueType( value ) {
276
290
 
277
291
  }
278
292
 
293
+ /**
294
+ * Returns the node data type for the given texture.
295
+ *
296
+ * @private
297
+ * @method
298
+ * @param {Texture} texture - The texture.
299
+ * @return {string} The data type.
300
+ */
301
+ export function getTextureType( texture ) {
302
+
303
+ if ( texture.isDepthTexture === true ) {
304
+
305
+ return 'float';
306
+
307
+ }
308
+
309
+ const format = texture.format;
310
+
311
+ let length;
312
+
313
+ if ( format === RedFormat || format === RedIntegerFormat || format === DepthFormat || format === DepthStencilFormat || format === AlphaFormat ) {
314
+
315
+ length = 1;
316
+
317
+ } else if ( format === RGFormat || format === RGIntegerFormat ) {
318
+
319
+ length = 2;
320
+
321
+ } else if ( format === RGBFormat || format === RGBIntegerFormat ) {
322
+
323
+ length = 3;
324
+
325
+ } else {
326
+
327
+ length = 4;
328
+
329
+ }
330
+
331
+ let componentType;
332
+
333
+ if ( texture.type === UnsignedIntType ) {
334
+
335
+ componentType = 'uint';
336
+
337
+ } else if ( texture.type === IntType ) {
338
+
339
+ componentType = 'int';
340
+
341
+ } else {
342
+
343
+ componentType = 'float';
344
+
345
+ }
346
+
347
+ if ( length === 1 ) return componentType;
348
+
349
+ let baseType = getTypeFromLength( length );
350
+
351
+ if ( componentType !== 'float' ) {
352
+
353
+ baseType = componentType[ 0 ] + baseType;
354
+
355
+ }
356
+
357
+ return baseType;
358
+
359
+ }
360
+
279
361
  /**
280
362
  * Returns the value/object for the given data type and parameters.
281
363
  *
@@ -406,3 +488,9 @@ export function base64ToArrayBuffer( base64 ) {
406
488
  return Uint8Array.from( atob( base64 ), c => c.charCodeAt( 0 ) ).buffer;
407
489
 
408
490
  }
491
+
492
+ export function isArrayAsParameter( params ) {
493
+
494
+ return ( params[ 0 ] !== undefined && params[ 0 ] !== null ) && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );
495
+
496
+ }
@@ -403,6 +403,14 @@ export const attenuationColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'colo
403
403
  */
404
404
  export const dispersion = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Dispersion' );
405
405
 
406
+ /**
407
+ * TSL object that represents the shader variable `Retroreflectivity`.
408
+ *
409
+ * @tsl
410
+ * @type {PropertyNode<float>}
411
+ */
412
+ export const retroreflectivity = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Retroreflectivity' );
413
+
406
414
  /**
407
415
  * TSL object that represents the shader variable `AmbientOcclusion`.
408
416
  * If no value is assigned to this property, it defaults to a placeholder value of `1.0`.
@@ -233,7 +233,6 @@ class StackNode extends Node {
233
233
  * Represents a `switch` statement in TSL.
234
234
  *
235
235
  * @param {any} expression - Represents the expression.
236
- * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
237
236
  * @return {StackNode} A reference to this stack node.
238
237
  */
239
238
  Switch( expression ) {
@@ -1,6 +1,7 @@
1
1
  import Node from './Node.js';
2
2
  import StructTypeNode from './StructTypeNode.js';
3
- import { nodeProxyConstructor } from '../tsl/TSLCore.js';
3
+ import { nodeObject, nodeProxyConstructor } from '../tsl/TSLCore.js';
4
+ import { isArrayAsParameter } from './NodeUtils.js';
4
5
 
5
6
  /**
6
7
  * StructNode allows to create custom structures with multiple members.
@@ -103,7 +104,7 @@ export const struct = ( membersLayout, name = null ) => {
103
104
 
104
105
  if ( params.length > 0 ) {
105
106
 
106
- if ( params[ 0 ].isNode ) {
107
+ if ( isArrayAsParameter( params ) ) {
107
108
 
108
109
  values = {};
109
110
 
@@ -111,7 +112,7 @@ export const struct = ( membersLayout, name = null ) => {
111
112
 
112
113
  for ( let i = 0; i < params.length; i ++ ) {
113
114
 
114
- values[ names[ i ] ] = params[ i ];
115
+ values[ names[ i ] ] = nodeObject( params[ i ] );
115
116
 
116
117
  }
117
118
 
@@ -50,8 +50,9 @@ class UniformGroupNode extends Node {
50
50
  this.shared = shared;
51
51
 
52
52
  /**
53
- * Influences the internal sorting.
54
- * TODO: Add details when this property should be changed.
53
+ * The sort key that determines the order of this group relative to other
54
+ * uniform groups. Groups with a lower order are placed first. Shared groups
55
+ * typically use a lower order so they precede regular per-object groups.
55
56
  *
56
57
  * @type {number}
57
58
  * @default 1
@@ -123,6 +123,31 @@ class UniformNode extends InputNode {
123
123
 
124
124
  }
125
125
 
126
+ /**
127
+ * Uniform nodes with the same hash share a single uniform. This method returns the node
128
+ * the shared uniform refers to which is the first node registered for the hash.
129
+ *
130
+ * @param {NodeBuilder} builder - The current node builder.
131
+ * @return {UniformNode} The node the shared uniform refers to.
132
+ */
133
+ getSharedNode( builder ) {
134
+
135
+ const hash = this.getUniformHash( builder );
136
+
137
+ let sharedNode = builder.getNodeFromHash( hash );
138
+
139
+ if ( sharedNode === undefined ) {
140
+
141
+ builder.setHashNode( this, hash );
142
+
143
+ sharedNode = this;
144
+
145
+ }
146
+
147
+ return sharedNode;
148
+
149
+ }
150
+
126
151
  onUpdate( callback, updateType ) {
127
152
 
128
153
  callback = callback.bind( this );
@@ -159,18 +184,7 @@ class UniformNode extends InputNode {
159
184
 
160
185
  const type = this.getNodeType( builder );
161
186
 
162
- const hash = this.getUniformHash( builder );
163
-
164
- let sharedNode = builder.getNodeFromHash( hash );
165
-
166
- if ( sharedNode === undefined ) {
167
-
168
- builder.setHashNode( this, hash );
169
-
170
- sharedNode = this;
171
-
172
- }
173
-
187
+ const sharedNode = this.getSharedNode( builder );
174
188
  const sharedNodeType = sharedNode.getInputType( builder );
175
189
 
176
190
  const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.nodeName );
@@ -359,7 +359,6 @@ export const Const = ( node, name = null ) => createVar( node, name, true ).toSt
359
359
  * @tsl
360
360
  * @function
361
361
  * @param {Node} node - The node for which a variable should be created.
362
- * @param {?string} name - The name of the variable in the shader.
363
362
  * @returns {VarNode}
364
363
  */
365
364
  export const VarIntent = ( node ) => {
@@ -8,7 +8,7 @@ import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
8
8
  // Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
9
9
  // https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
10
10
 
11
- const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
11
+ const dHdxy_fwd = /*@__PURE__*/ Fn( ( { textureNode, bumpScale } ) => {
12
12
 
13
13
  // It's used to preserve the same TextureNode instance
14
14
  const sampleTexture = ( callback ) => textureNode.isolate().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv() ), forceUVContext: true } );
@@ -24,7 +24,7 @@ const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
24
24
 
25
25
  // Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)
26
26
 
27
- const perturbNormalArb = Fn( ( inputs ) => {
27
+ const perturbNormalArb = /*@__PURE__*/ Fn( ( inputs ) => {
28
28
 
29
29
  const { surf_pos, surf_norm, dHdxy } = inputs;
30
30
 
@@ -151,7 +151,7 @@ export const cdl = /*@__PURE__*/ Fn( ( [
151
151
  * @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
152
152
  * @returns {Node} The posterized color.
153
153
  */
154
- export const posterize = Fn( ( [ source, steps ] ) => {
154
+ export const posterize = /*@__PURE__*/ Fn( ( [ source, steps ] ) => {
155
155
 
156
156
  return source.mul( steps ).floor().div( steps );
157
157
 
@@ -250,7 +250,7 @@ class PassNode extends TempNode {
250
250
 
251
251
  if ( this.scope === PassNode.DEPTH || options.depthBuffer !== false ) {
252
252
 
253
- depthTexture = new DepthTexture();
253
+ depthTexture = options.depthTexture || new DepthTexture();
254
254
  depthTexture.isRenderTargetTexture = true;
255
255
  //depthTexture.type = FloatType;
256
256
  depthTexture.name = 'depth';
@@ -289,6 +289,40 @@ class PassNode extends TempNode {
289
289
  */
290
290
  this.opaque = true;
291
291
 
292
+ this.lighting = null;
293
+
294
+ /**
295
+ * Whether the renderer should automatically clear before rendering the pass.
296
+ *
297
+ * @type {boolean}
298
+ * @default true
299
+ */
300
+ this.autoClear = options.autoClear !== undefined ? options.autoClear : true;
301
+
302
+ /**
303
+ * Whether the color buffer should be cleared.
304
+ *
305
+ * @type {boolean}
306
+ * @default true
307
+ */
308
+ this.autoClearColor = options.autoClearColor !== undefined ? options.autoClearColor : true;
309
+
310
+ /**
311
+ * Whether the depth buffer should be cleared.
312
+ *
313
+ * @type {boolean}
314
+ * @default true
315
+ */
316
+ this.autoClearDepth = options.autoClearDepth !== undefined ? options.autoClearDepth : true;
317
+
318
+ /**
319
+ * Whether the stencil buffer should be cleared.
320
+ *
321
+ * @type {boolean}
322
+ * @default true
323
+ */
324
+ this.autoClearStencil = options.autoClearStencil !== undefined ? options.autoClearStencil : true;
325
+
292
326
  /**
293
327
  * An optional global context for the pass.
294
328
  *
@@ -807,8 +841,12 @@ class PassNode extends TempNode {
807
841
  const currentRenderTarget = renderer.getRenderTarget();
808
842
  const currentMRT = renderer.getMRT();
809
843
  const currentAutoClear = renderer.autoClear;
844
+ const currentAutoClearColor = renderer.autoClearColor;
845
+ const currentAutoClearDepth = renderer.autoClearDepth;
846
+ const currentAutoClearStencil = renderer.autoClearStencil;
810
847
  const currentTransparent = renderer.transparent;
811
848
  const currentOpaque = renderer.opaque;
849
+ const currentLighting = renderer.lighting;
812
850
  const currentMask = camera.layers.mask;
813
851
  const currentContextNode = renderer.contextNode;
814
852
  const currentOverrideMaterial = scene.overrideMaterial;
@@ -836,10 +874,19 @@ class PassNode extends TempNode {
836
874
 
837
875
  renderer.setRenderTarget( this.renderTarget );
838
876
  renderer.setMRT( this._mrt );
839
- renderer.autoClear = true;
877
+ renderer.autoClear = this.autoClear;
878
+ renderer.autoClearColor = this.autoClearColor;
879
+ renderer.autoClearDepth = this.autoClearDepth;
880
+ renderer.autoClearStencil = this.autoClearStencil;
840
881
  renderer.transparent = this.transparent;
841
882
  renderer.opaque = this.opaque;
842
883
 
884
+ if ( this.lighting !== null ) {
885
+
886
+ renderer.lighting = this.lighting;
887
+
888
+ }
889
+
843
890
  if ( this.contextNode !== null ) {
844
891
 
845
892
  if ( this._contextNodeCache === null || this._contextNodeCache.version !== this.version ) {
@@ -867,9 +914,13 @@ class PassNode extends TempNode {
867
914
  renderer.setRenderTarget( currentRenderTarget );
868
915
  renderer.setMRT( currentMRT );
869
916
  renderer.autoClear = currentAutoClear;
917
+ renderer.autoClearColor = currentAutoClearColor;
918
+ renderer.autoClearDepth = currentAutoClearDepth;
919
+ renderer.autoClearStencil = currentAutoClearStencil;
870
920
  renderer.transparent = currentTransparent;
871
921
  renderer.opaque = currentOpaque;
872
922
  renderer.contextNode = currentContextNode;
923
+ renderer.lighting = currentLighting;
873
924
 
874
925
  camera.layers.mask = currentMask;
875
926
 
@@ -988,26 +1039,36 @@ class PassNode extends TempNode {
988
1039
  */
989
1040
  dispose() {
990
1041
 
1042
+ super.dispose();
1043
+
991
1044
  this.renderTarget.dispose();
992
1045
 
993
1046
  }
994
1047
 
995
1048
 
996
- }
1049
+ /**
1050
+ * @static
1051
+ * @type {'color'}
1052
+ * @default 'color'
1053
+ */
1054
+ static get COLOR() {
997
1055
 
998
- /**
999
- * @static
1000
- * @type {'color'}
1001
- * @default 'color'
1002
- */
1003
- PassNode.COLOR = 'color';
1056
+ return 'color';
1004
1057
 
1005
- /**
1006
- * @static
1007
- * @type {'depth'}
1008
- * @default 'depth'
1009
- */
1010
- PassNode.DEPTH = 'depth';
1058
+ }
1059
+
1060
+ /**
1061
+ * @static
1062
+ * @type {'depth'}
1063
+ * @default 'depth'
1064
+ */
1065
+ static get DEPTH() {
1066
+
1067
+ return 'depth';
1068
+
1069
+ }
1070
+
1071
+ }
1011
1072
 
1012
1073
  export default PassNode;
1013
1074