@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -1,10 +1,12 @@
1
1
 
2
- import { float, Fn, ivec2, int, If, uniform } from '../tsl/TSLBase.js';
2
+ import { float, Fn, ivec2, int, If, uniform, vec4 } from '../tsl/TSLBase.js';
3
3
  import { Loop } from '../utils/LoopNode.js';
4
4
  import { OnObjectUpdate } from '../utils/EventNode.js';
5
5
  import { textureLoad } from './TextureNode.js';
6
6
  import { positionLocal } from './Position.js';
7
7
  import { normalLocal } from './Normal.js';
8
+ import { property } from '../core/PropertyNode.js';
9
+ import { varying } from '../core/VaryingNode.js';
8
10
  import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
9
11
 
10
12
  import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
@@ -18,7 +20,7 @@ const _morphVec4 = /*@__PURE__*/ new Vector4();
18
20
  const _morphInfluencesData = /*@__PURE__*/ new WeakMap();
19
21
 
20
22
  /**
21
- * TSL function that retrieves and scales the morphed attribute (position or normal) texel value.
23
+ * TSL function that retrieves and scales the morphed attribute (position, normal or color) texel value.
22
24
  *
23
25
  * @param {Object} params - The parameter object.
24
26
  * @param {Node<texture>} params.bufferMap - The morph target data array texture.
@@ -26,8 +28,8 @@ const _morphInfluencesData = /*@__PURE__*/ new WeakMap();
26
28
  * @param {number} params.stride - The vertex data stride (e.g. 1 or 2).
27
29
  * @param {Node<int>} params.width - The texture width limit.
28
30
  * @param {Node<int>} params.depth - The target layer index (morph target index).
29
- * @param {Node<int>} params.offset - The texture offset (e.g. 0 for position, 1 for normal).
30
- * @returns {Node<vec3>} The scaled morph target translation value.
31
+ * @param {Node<int>} params.offset - The texture offset (e.g. 0 for position, 1 for normal, 2 for color).
32
+ * @returns {Node<vec4>} The scaled morph target value.
31
33
  */
32
34
  const getMorph = /*@__PURE__*/ Fn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
33
35
 
@@ -36,12 +38,52 @@ const getMorph = /*@__PURE__*/ Fn( ( { bufferMap, influence, stride, width, dept
36
38
  const y = texelIndex.div( width );
37
39
  const x = texelIndex.sub( y.mul( width ) );
38
40
 
39
- const bufferAttrib = textureLoad( bufferMap, ivec2( x, y ) ).depth( depth ).xyz;
41
+ const bufferAttrib = textureLoad( bufferMap, ivec2( x, y ) ).depth( depth );
40
42
 
41
43
  return bufferAttrib.mul( influence );
42
44
 
43
45
  } );
44
46
 
47
+ /**
48
+ * The morph target base influence. It is `1` when `morphTargetsRelative`
49
+ * is `true`, otherwise `1 - sum( influences )`.
50
+ *
51
+ * @type {UniformNode<float>}
52
+ */
53
+ const morphBase = /*@__PURE__*/ uniform( 1 ).onObjectUpdate( ( { object } ) => {
54
+
55
+ return object.geometry.morphTargetsRelative ? 1 : 1 - object.morphTargetInfluences.reduce( ( a, b ) => a + b, 0 );
56
+
57
+ } );
58
+
59
+ /**
60
+ * The sum of the weighted color morph targets.
61
+ *
62
+ * @type {PropertyNode<vec4>}
63
+ */
64
+ const morphColorSum = /*@__PURE__*/ property( 'vec4', 'morphColorSum' );
65
+
66
+ /**
67
+ * TSL function that applies the color morph targets to the given color.
68
+ * The result is computed in the vertex stage.
69
+ *
70
+ * @tsl
71
+ * @function
72
+ * @param {Node<vec4>} color - The color to morph. Must be available in the vertex stage.
73
+ * @returns {Node<vec4>} The morphed color.
74
+ */
75
+ export const morphColor = /*@__PURE__*/ Fn( ( [ color ], { geometry } ) => {
76
+
77
+ if ( geometry.morphAttributes.color[ 0 ].itemSize === 4 ) {
78
+
79
+ return varying( color.mul( morphBase ).add( morphColorSum ) );
80
+
81
+ }
82
+
83
+ return varying( vec4( color.rgb.mul( morphBase ).add( morphColorSum.rgb ), color.a ) );
84
+
85
+ } );
86
+
45
87
  /**
46
88
  * Resolves or creates a compiled DataArrayTexture containing encoded vertex morph targets data for WebGL2/WebGPU.
47
89
  *
@@ -182,18 +224,22 @@ function getEntry( geometry ) {
182
224
  * @function
183
225
  * @param {Mesh} mesh - The mesh.
184
226
  */
185
- export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
227
+ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ], builder ) => {
186
228
 
187
229
  const { geometry } = mesh;
188
230
 
189
231
  const hasMorphPosition = geometry.morphAttributes.position !== undefined;
190
232
  const hasMorphNormals = geometry.hasAttribute( 'normal' ) && geometry.morphAttributes.normal !== undefined;
233
+ const hasMorphColors = builder.material.vertexColors === true && geometry.morphAttributes.color !== undefined;
234
+ const hasColorAlpha = hasMorphColors === true && geometry.morphAttributes.color[ 0 ].itemSize === 4;
191
235
 
192
236
  const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
193
237
  const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
194
238
 
195
239
  if ( morphTargetsCount === 0 ) return;
196
240
 
241
+ if ( mesh.morphTexture ) builder.objectSpecific = true;
242
+
197
243
  // Init
198
244
 
199
245
  let morphInfluenceData = _morphInfluencesData.get( mesh );
@@ -201,7 +247,6 @@ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
201
247
  if ( morphInfluenceData === undefined || morphInfluenceData.count !== morphTargetsCount ) {
202
248
 
203
249
  morphInfluenceData = {
204
- base: uniform( 1 ),
205
250
  influences: mesh.morphTargetInfluences ? uniformArray( mesh.morphTargetInfluences, 'float' ) : null,
206
251
  count: morphTargetsCount
207
252
  };
@@ -210,14 +255,15 @@ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
210
255
 
211
256
  }
212
257
 
213
- const { base, influences } = morphInfluenceData;
258
+ const { influences } = morphInfluenceData;
214
259
 
215
260
  // Shader
216
261
 
217
262
  const { texture: bufferMap, stride, size } = getEntry( geometry );
218
263
 
219
- if ( hasMorphPosition === true ) positionLocal.mulAssign( base );
220
- if ( hasMorphNormals === true ) normalLocal.mulAssign( base );
264
+ if ( hasMorphPosition === true ) positionLocal.mulAssign( morphBase );
265
+ if ( hasMorphNormals === true ) normalLocal.mulAssign( morphBase );
266
+ if ( hasMorphColors === true ) morphColorSum.assign( 0 );
221
267
 
222
268
  const width = int( size.width );
223
269
 
@@ -246,7 +292,7 @@ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
246
292
  width,
247
293
  depth: i,
248
294
  offset: int( 0 )
249
- } ) );
295
+ } ).xyz );
250
296
 
251
297
  }
252
298
 
@@ -259,29 +305,42 @@ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
259
305
  width,
260
306
  depth: i,
261
307
  offset: int( 1 )
262
- } ) );
308
+ } ).xyz );
263
309
 
264
310
  }
265
311
 
266
- } );
312
+ if ( hasMorphColors === true ) {
267
313
 
268
- } );
314
+ const morph = getMorph( {
315
+ bufferMap,
316
+ influence,
317
+ stride,
318
+ width,
319
+ depth: i,
320
+ offset: int( 2 )
321
+ } );
269
322
 
270
- // Update
323
+ if ( hasColorAlpha === true ) {
271
324
 
272
- OnObjectUpdate( ( { object } ) => {
325
+ morphColorSum.addAssign( morph );
273
326
 
274
- const { base, influences } = morphInfluenceData;
327
+ } else {
275
328
 
276
- if ( object.geometry.morphTargetsRelative ) {
329
+ morphColorSum.rgb.addAssign( morph.rgb );
277
330
 
278
- base.value = 1;
331
+ }
279
332
 
280
- } else {
333
+ }
281
334
 
282
- base.value = 1 - object.morphTargetInfluences.reduce( ( a, b ) => a + b, 0 );
335
+ } );
283
336
 
284
- }
337
+ } );
338
+
339
+ // Update
340
+
341
+ OnObjectUpdate( ( { object } ) => {
342
+
343
+ const { influences } = morphInfluenceData;
285
344
 
286
345
  if ( influences ) {
287
346
 
@@ -198,46 +198,4 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
198
198
 
199
199
  } );
200
200
 
201
- // Deprecated
202
201
 
203
- /**
204
- * TSL object that represents the transformed vertex normal of the current rendered object in view space.
205
- *
206
- * @tsl
207
- * @type {Node<vec3>}
208
- * @deprecated since r178. Use `normalView` instead.
209
- */
210
- export const transformedNormalView = ( Fn( () => { // @deprecated, r177
211
-
212
- warn( 'TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
213
- return normalView;
214
-
215
- } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
216
-
217
- /**
218
- * TSL object that represents the transformed vertex normal of the current rendered object in world space.
219
- *
220
- * @tsl
221
- * @type {Node<vec3>}
222
- * @deprecated since r178. Use `normalWorld` instead.
223
- */
224
- export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
225
-
226
- warn( 'TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
227
- return normalWorld;
228
-
229
- } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
230
-
231
- /**
232
- * TSL object that represents the transformed clearcoat vertex normal of the current rendered object in view space.
233
- *
234
- * @tsl
235
- * @type {Node<vec3>}
236
- * @deprecated since r178. Use `clearcoatNormalView` instead.
237
- */
238
- export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
239
-
240
- warn( 'TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
241
- return clearcoatNormalView;
242
-
243
- } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -70,6 +70,12 @@ class Object3DNode extends Node {
70
70
 
71
71
  }
72
72
 
73
+ isCacheable( /*builder*/ ) {
74
+
75
+ return false;
76
+
77
+ }
78
+
73
79
  /**
74
80
  * Overwritten since the node type is inferred from the scope.
75
81
  *
@@ -36,6 +36,12 @@ class PointUVNode extends Node {
36
36
 
37
37
  }
38
38
 
39
+ isCacheable( /*builder*/ ) {
40
+
41
+ return false;
42
+
43
+ }
44
+
39
45
  generate( /*builder*/ ) {
40
46
 
41
47
  return 'vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )';
@@ -0,0 +1,279 @@
1
+ import Node from '../core/Node.js';
2
+ import BufferAttributeNode from './BufferAttributeNode.js';
3
+ import { storage } from './StorageBufferNode.js';
4
+ import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
5
+ import { mat3, mat4 } from '../tsl/TSLBase.js';
6
+ import { getLengthFromType } from '../core/NodeUtils.js';
7
+
8
+ import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js';
9
+
10
+ const _columns = /*@__PURE__*/ new WeakMap();
11
+
12
+ /**
13
+ * Returns a column of the given buffer attribute, like a column of the matrices of an
14
+ * instanced mesh. The column views the attribute itself, so both share the same GPU buffer.
15
+ *
16
+ * @private
17
+ * @param {BufferAttribute} attribute - The buffer attribute.
18
+ * @param {string} type - The type of the column (e.g. `'vec4'`).
19
+ * @param {number} offset - The offset of the column.
20
+ * @return {InterleavedBufferAttribute} The column.
21
+ */
22
+ function getAttributeColumn( attribute, type, offset ) {
23
+
24
+ let columns = _columns.get( attribute );
25
+
26
+ if ( columns === undefined ) {
27
+
28
+ columns = [];
29
+
30
+ _columns.set( attribute, columns );
31
+
32
+ }
33
+
34
+ return columns[ offset ] || ( columns[ offset ] = new InterleavedBufferAttribute( attribute, getLengthFromType( type ), offset ) );
35
+
36
+ }
37
+
38
+ /**
39
+ * A buffer attribute node that binds the attribute of the rendered object
40
+ * referred to by a {@link ReferenceAttributeNode}.
41
+ *
42
+ * @private
43
+ * @augments BufferAttributeNode
44
+ */
45
+ class ReferenceBufferAttributeNode extends BufferAttributeNode {
46
+
47
+ static get type() {
48
+
49
+ return 'ReferenceBufferAttributeNode';
50
+
51
+ }
52
+
53
+ /**
54
+ * Constructs a new reference buffer attribute node.
55
+ *
56
+ * @param {ReferenceAttributeNode} referenceNode - The reference attribute node.
57
+ * @param {string} bufferType - The buffer type (e.g. `'vec3'`).
58
+ * @param {number} [bufferStride=0] - The buffer stride, when binding a column of the attribute.
59
+ * @param {number} [bufferOffset=0] - The buffer offset, when binding a column of the attribute.
60
+ */
61
+ constructor( referenceNode, bufferType, bufferStride = 0, bufferOffset = 0 ) {
62
+
63
+ super( null, bufferType, bufferStride, bufferOffset );
64
+
65
+ /**
66
+ * The reference attribute node.
67
+ *
68
+ * @type {ReferenceAttributeNode}
69
+ */
70
+ this.referenceNode = referenceNode;
71
+
72
+ /**
73
+ * This flag can be used for type testing.
74
+ *
75
+ * @type {boolean}
76
+ * @readonly
77
+ * @default true
78
+ */
79
+ this.isReferenceBufferAttributeNode = true;
80
+
81
+ }
82
+
83
+ /**
84
+ * Overwritten since the node has no attribute data of its own.
85
+ *
86
+ * @return {string} The hash.
87
+ */
88
+ getHash() {
89
+
90
+ return String( this.id );
91
+
92
+ }
93
+
94
+ /**
95
+ * Returns the referred attribute of the given object, or its column.
96
+ *
97
+ * @param {Object3D} object - The rendered object.
98
+ * @return {?(BufferAttribute|InterleavedBufferAttribute)} The buffer attribute.
99
+ */
100
+ getObjectAttribute( object ) {
101
+
102
+ const attribute = this.referenceNode.getAttribute( object );
103
+
104
+ if ( ! attribute || this.bufferStride === 0 ) return attribute;
105
+
106
+ return getAttributeColumn( attribute, this.bufferType, this.bufferOffset );
107
+
108
+ }
109
+
110
+ /**
111
+ * The attribute of the object the program is built for defines the layout.
112
+ *
113
+ * @param {NodeBuilder} builder - The current node builder.
114
+ */
115
+ setup( builder ) {
116
+
117
+ this.attribute = this.getObjectAttribute( builder.object );
118
+
119
+ }
120
+
121
+ }
122
+
123
+ /**
124
+ * This node binds a buffer attribute that is a property of the rendered object, like the
125
+ * matrices of an instanced mesh. Unlike {@link BufferAttributeNode}, the attribute isn't part
126
+ * of the program: each object binds its own attribute, so objects can share a program.
127
+ * ```js
128
+ * const matrix = referenceAttribute( 'instanceMatrix', 'mat4' );
129
+ * const color = referenceAttribute( 'instanceColor' );
130
+ * ```
131
+ * Matrices are bound as columns. Storage buffer attributes are bound as storage buffers.
132
+ *
133
+ * @augments Node
134
+ */
135
+ class ReferenceAttributeNode extends Node {
136
+
137
+ static get type() {
138
+
139
+ return 'ReferenceAttributeNode';
140
+
141
+ }
142
+
143
+ /**
144
+ * Constructs a new reference attribute node.
145
+ *
146
+ * @param {string} property - The name of the property the node refers to.
147
+ * @param {?string} [nodeType=null] - The node type. Inferred from the attribute if not set.
148
+ * @param {?Object} [object=null] - The object the property belongs to. The rendered object if not set.
149
+ */
150
+ constructor( property, nodeType = null, object = null ) {
151
+
152
+ super( nodeType );
153
+
154
+ /**
155
+ * The name of the property the node refers to.
156
+ *
157
+ * @type {string}
158
+ */
159
+ this.property = property;
160
+
161
+ /**
162
+ * The property name might have dots so nested properties can be referred.
163
+ * The hierarchy of the names is stored inside this array.
164
+ *
165
+ * @type {Array<string>}
166
+ */
167
+ this.properties = property.split( '.' );
168
+
169
+ /**
170
+ * The object the property belongs to. If `null`, the rendered object is used.
171
+ *
172
+ * @type {?Object}
173
+ * @default null
174
+ */
175
+ this.object = object;
176
+
177
+ }
178
+
179
+ /**
180
+ * Returns the value of the referred property of the given object.
181
+ *
182
+ * @param {Object} object - The object.
183
+ * @return {?(BufferAttribute|InterleavedBufferAttribute)} The value of the referred property.
184
+ */
185
+ getValueFromReference( object ) {
186
+
187
+ let value = object;
188
+
189
+ for ( const property of this.properties ) {
190
+
191
+ if ( value === undefined || value === null ) break;
192
+
193
+ value = value[ property ];
194
+
195
+ }
196
+
197
+ return value;
198
+
199
+ }
200
+
201
+ /**
202
+ * Returns the attribute the node binds when rendering the given object.
203
+ *
204
+ * @param {Object3D} object - The rendered object.
205
+ * @return {?(BufferAttribute|InterleavedBufferAttribute)} The buffer attribute.
206
+ */
207
+ getAttribute( object ) {
208
+
209
+ return this.getValueFromReference( this.object !== null ? this.object : object );
210
+
211
+ }
212
+
213
+ /**
214
+ * Returns the node type, inferred from the attribute if not set.
215
+ *
216
+ * @param {NodeBuilder} builder - The current node builder.
217
+ * @return {string} The node type.
218
+ */
219
+ generateNodeType( builder ) {
220
+
221
+ if ( this.nodeType !== null ) return this.nodeType;
222
+
223
+ const attribute = this.getAttribute( builder.object );
224
+
225
+ return attribute ? builder.getTypeFromAttribute( attribute ) : 'float';
226
+
227
+ }
228
+
229
+ /**
230
+ * Sets up the attribute nodes.
231
+ *
232
+ * @param {NodeBuilder} builder - The current node builder.
233
+ * @return {Node} The attribute node.
234
+ */
235
+ setup( builder ) {
236
+
237
+ const attribute = this.getAttribute( builder.object );
238
+
239
+ if ( ! attribute ) throw new Error( `THREE.ReferenceAttributeNode: Attribute "${ this.property }" not found.` );
240
+
241
+ const type = this.getNodeType( builder );
242
+
243
+ if ( attribute.isStorageBufferAttribute === true || attribute.isStorageInstancedBufferAttribute === true ) {
244
+
245
+ const index = attribute.isStorageInstancedBufferAttribute === true ? instanceIndex : vertexIndex;
246
+
247
+ return storage( attribute, type, Math.max( attribute.count, 1 ) ).onObjectUpdate( ( { object } ) => this.getAttribute( object ) ).element( index );
248
+
249
+ }
250
+
251
+ if ( type === 'mat4' ) {
252
+
253
+ return mat4( ...[ 0, 4, 8, 12 ].map( ( offset ) => new ReferenceBufferAttributeNode( this, 'vec4', 16, offset ) ) );
254
+
255
+ } else if ( type === 'mat3' ) {
256
+
257
+ return mat3( ...[ 0, 3, 6 ].map( ( offset ) => new ReferenceBufferAttributeNode( this, 'vec3', 9, offset ) ) );
258
+
259
+ }
260
+
261
+ return new ReferenceBufferAttributeNode( this, type );
262
+
263
+ }
264
+
265
+ }
266
+
267
+ export default ReferenceAttributeNode;
268
+
269
+ /**
270
+ * TSL function for creating a reference attribute node.
271
+ *
272
+ * @tsl
273
+ * @function
274
+ * @param {string} name - The name of the property the node refers to.
275
+ * @param {?string} [type=null] - The node type. Inferred from the attribute if not set.
276
+ * @param {?Object} [object=null] - The object the property belongs to. The rendered object if not set.
277
+ * @returns {ReferenceAttributeNode}
278
+ */
279
+ export const referenceAttribute = ( name, type = null, object = null ) => new ReferenceAttributeNode( name, type, object );
@@ -107,6 +107,12 @@ class ReferenceBaseNode extends Node {
107
107
 
108
108
  }
109
109
 
110
+ isCacheable( /*builder*/ ) {
111
+
112
+ return false;
113
+
114
+ }
115
+
110
116
  /**
111
117
  * Sets the uniform group for this reference node.
112
118
  *
@@ -120,6 +120,12 @@ class ReferenceNode extends Node {
120
120
 
121
121
  }
122
122
 
123
+ isCacheable( /*builder*/ ) {
124
+
125
+ return false;
126
+
127
+ }
128
+
123
129
  /**
124
130
  * When the referred property is array-like, this method can be used
125
131
  * to access elements via an index node.