super-three 0.171.0 → 0.172.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 (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -3,34 +3,96 @@ import ChainMap from '../ChainMap.js';
3
3
  import NodeBuilderState from './NodeBuilderState.js';
4
4
  import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
5
5
  import { NodeFrame } from '../../../nodes/Nodes.js';
6
- import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, rangeFog, densityFog, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
6
+ import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
7
7
 
8
8
  import { CubeUVReflectionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
9
9
  import { hashArray } from '../../../nodes/core/NodeUtils.js';
10
10
 
11
- const outputNodeMap = new WeakMap();
11
+ const _outputNodeMap = new WeakMap();
12
12
 
13
+ /**
14
+ * This renderer module manages node-related objects and is the
15
+ * primary interface between the renderer and the node system.
16
+ *
17
+ * @private
18
+ * @augments DataMap
19
+ */
13
20
  class Nodes extends DataMap {
14
21
 
22
+ /**
23
+ * Constructs a new nodes management component.
24
+ *
25
+ * @param {Renderer} renderer - The renderer.
26
+ * @param {Backend} backend - The renderer's backend.
27
+ */
15
28
  constructor( renderer, backend ) {
16
29
 
17
30
  super();
18
31
 
32
+ /**
33
+ * The renderer.
34
+ *
35
+ * @type {Renderer}
36
+ */
19
37
  this.renderer = renderer;
38
+
39
+ /**
40
+ * The renderer's backend.
41
+ *
42
+ * @type {Backend}
43
+ */
20
44
  this.backend = backend;
45
+
46
+ /**
47
+ * The node frame.
48
+ *
49
+ * @type {Renderer}
50
+ */
21
51
  this.nodeFrame = new NodeFrame();
52
+
53
+ /**
54
+ * A cache for managing node builder states.
55
+ *
56
+ * @type {Map<Number,NodeBuilderState>}
57
+ */
22
58
  this.nodeBuilderCache = new Map();
59
+
60
+ /**
61
+ * A cache for managing data cache key data.
62
+ *
63
+ * @type {ChainMap}
64
+ */
23
65
  this.callHashCache = new ChainMap();
66
+
67
+ /**
68
+ * A cache for managing node uniforms group data.
69
+ *
70
+ * @type {ChainMap}
71
+ */
24
72
  this.groupsData = new ChainMap();
25
73
 
74
+ /**
75
+ * A cache for managing node objects of
76
+ * scene properties like fog or environments.
77
+ *
78
+ * @type {Object<String,WeakMap>}
79
+ */
80
+ this.cacheLib = {};
81
+
26
82
  }
27
83
 
84
+ /**
85
+ * Returns `true` if the given node uniforms group must be updated or not.
86
+ *
87
+ * @param {NodeUniformsGroup} nodeUniformsGroup - The node uniforms group.
88
+ * @return {Boolean} Whether the node uniforms group requires an update or not.
89
+ */
28
90
  updateGroup( nodeUniformsGroup ) {
29
91
 
30
92
  const groupNode = nodeUniformsGroup.groupNode;
31
93
  const name = groupNode.name;
32
94
 
33
- // objectGroup is every updated
95
+ // objectGroup is always updated
34
96
 
35
97
  if ( name === objectGroup.name ) return true;
36
98
 
@@ -91,12 +153,24 @@ class Nodes extends DataMap {
91
153
 
92
154
  }
93
155
 
156
+ /**
157
+ * Returns the cache key for the given render object.
158
+ *
159
+ * @param {RenderObject} renderObject - The render object.
160
+ * @return {Number} The cache key.
161
+ */
94
162
  getForRenderCacheKey( renderObject ) {
95
163
 
96
164
  return renderObject.initialCacheKey;
97
165
 
98
166
  }
99
167
 
168
+ /**
169
+ * Returns a node builder state for the given render object.
170
+ *
171
+ * @param {RenderObject} renderObject - The render object.
172
+ * @return {NodeBuilderState} The node builder state.
173
+ */
100
174
  getForRender( renderObject ) {
101
175
 
102
176
  const renderObjectData = this.get( renderObject );
@@ -140,6 +214,12 @@ class Nodes extends DataMap {
140
214
 
141
215
  }
142
216
 
217
+ /**
218
+ * Deletes the given object from the internal data map
219
+ *
220
+ * @param {Any} object - The object to delete.
221
+ * @return {Object?} The deleted dictionary.
222
+ */
143
223
  delete( object ) {
144
224
 
145
225
  if ( object.isRenderObject ) {
@@ -159,6 +239,12 @@ class Nodes extends DataMap {
159
239
 
160
240
  }
161
241
 
242
+ /**
243
+ * Returns a node builder state for the given compute node.
244
+ *
245
+ * @param {Node} computeNode - The compute node.
246
+ * @return {NodeBuilderState} The node builder state.
247
+ */
162
248
  getForCompute( computeNode ) {
163
249
 
164
250
  const computeData = this.get( computeNode );
@@ -180,6 +266,13 @@ class Nodes extends DataMap {
180
266
 
181
267
  }
182
268
 
269
+ /**
270
+ * Creates a node builder state for the given node builder.
271
+ *
272
+ * @private
273
+ * @param {NodeBuilder} nodeBuilder - The node builder.
274
+ * @return {NodeBuilderState} The node builder state.
275
+ */
183
276
  _createNodeBuilderState( nodeBuilder ) {
184
277
 
185
278
  return new NodeBuilderState(
@@ -197,24 +290,96 @@ class Nodes extends DataMap {
197
290
 
198
291
  }
199
292
 
293
+ /**
294
+ * Returns an environment node for the current configured
295
+ * scene environment.
296
+ *
297
+ * @param {Scene} scene - The scene.
298
+ * @return {Node} A node representing the current scene environment.
299
+ */
200
300
  getEnvironmentNode( scene ) {
201
301
 
202
- return scene.environmentNode || this.get( scene ).environmentNode || null;
302
+ this.updateEnvironment( scene );
303
+
304
+ let environmentNode = null;
305
+
306
+ if ( scene.environmentNode && scene.environmentNode.isNode ) {
307
+
308
+ environmentNode = scene.environmentNode;
309
+
310
+ } else {
311
+
312
+ const sceneData = this.get( scene );
313
+
314
+ if ( sceneData.environmentNode ) {
315
+
316
+ environmentNode = sceneData.environmentNode;
317
+
318
+ }
319
+
320
+ }
321
+
322
+ return environmentNode;
203
323
 
204
324
  }
205
325
 
326
+ /**
327
+ * Returns a background node for the current configured
328
+ * scene background.
329
+ *
330
+ * @param {Scene} scene - The scene.
331
+ * @return {Node} A node representing the current scene background.
332
+ */
206
333
  getBackgroundNode( scene ) {
207
334
 
208
- return scene.backgroundNode || this.get( scene ).backgroundNode || null;
335
+ this.updateBackground( scene );
336
+
337
+ let backgroundNode = null;
338
+
339
+ if ( scene.backgroundNode && scene.backgroundNode.isNode ) {
340
+
341
+ backgroundNode = scene.backgroundNode;
342
+
343
+ } else {
344
+
345
+ const sceneData = this.get( scene );
346
+
347
+ if ( sceneData.backgroundNode ) {
348
+
349
+ backgroundNode = sceneData.backgroundNode;
350
+
351
+ }
352
+
353
+ }
354
+
355
+ return backgroundNode;
209
356
 
210
357
  }
211
358
 
359
+ /**
360
+ * Returns a fog node for the current configured scene fog.
361
+ *
362
+ * @param {Scene} scene - The scene.
363
+ * @return {Node} A node representing the current scene fog.
364
+ */
212
365
  getFogNode( scene ) {
213
366
 
367
+ this.updateFog( scene );
368
+
214
369
  return scene.fogNode || this.get( scene ).fogNode || null;
215
370
 
216
371
  }
217
372
 
373
+ /**
374
+ * Returns a cache key for the given scene and lights node.
375
+ * This key is used by `RenderObject` as a part of the dynamic
376
+ * cache key (a key that must be checked every time the render
377
+ * objects is drawn).
378
+ *
379
+ * @param {Scene} scene - The scene.
380
+ * @param {LightsNode} lightsNode - The lights node.
381
+ * @return {Number} The cache key.
382
+ */
218
383
  getCacheKey( scene, lightsNode ) {
219
384
 
220
385
  const chain = [ scene, lightsNode ];
@@ -248,20 +413,24 @@ class Nodes extends DataMap {
248
413
 
249
414
  }
250
415
 
251
- updateScene( scene ) {
252
-
253
- this.updateEnvironment( scene );
254
- this.updateFog( scene );
255
- this.updateBackground( scene );
256
-
257
- }
258
-
416
+ /**
417
+ * A boolean that indicates whether tone mapping should be enabled
418
+ * or not.
419
+ *
420
+ * @type {Boolean}
421
+ */
259
422
  get isToneMappingState() {
260
423
 
261
424
  return this.renderer.getRenderTarget() ? false : true;
262
425
 
263
426
  }
264
427
 
428
+ /**
429
+ * If a scene background is configured, this method makes sure to
430
+ * represent the background with a corresponding node-based implementation.
431
+ *
432
+ * @param {Scene} scene - The scene.
433
+ */
265
434
  updateBackground( scene ) {
266
435
 
267
436
  const sceneData = this.get( scene );
@@ -273,41 +442,43 @@ class Nodes extends DataMap {
273
442
 
274
443
  if ( sceneData.background !== background || forceUpdate ) {
275
444
 
276
- let backgroundNode = null;
445
+ const backgroundNode = this.getCacheNode( 'background', background, () => {
277
446
 
278
- if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping || background.mapping === CubeUVReflectionMapping ) ) {
447
+ if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping || background.mapping === CubeUVReflectionMapping ) ) {
279
448
 
280
- if ( scene.backgroundBlurriness > 0 || background.mapping === CubeUVReflectionMapping ) {
449
+ if ( scene.backgroundBlurriness > 0 || background.mapping === CubeUVReflectionMapping ) {
281
450
 
282
- backgroundNode = pmremTexture( background );
451
+ return pmremTexture( background );
283
452
 
284
- } else {
453
+ } else {
285
454
 
286
- let envMap;
455
+ let envMap;
287
456
 
288
- if ( background.isCubeTexture === true ) {
457
+ if ( background.isCubeTexture === true ) {
289
458
 
290
- envMap = cubeTexture( background );
459
+ envMap = cubeTexture( background );
291
460
 
292
- } else {
461
+ } else {
293
462
 
294
- envMap = texture( background );
463
+ envMap = texture( background );
295
464
 
296
- }
465
+ }
297
466
 
298
- backgroundNode = cubeMapNode( envMap );
467
+ return cubeMapNode( envMap );
299
468
 
300
- }
469
+ }
301
470
 
302
- } else if ( background.isTexture === true ) {
471
+ } else if ( background.isTexture === true ) {
303
472
 
304
- backgroundNode = texture( background, screenUV.flipY() ).setUpdateMatrix( true );
473
+ return texture( background, screenUV.flipY() ).setUpdateMatrix( true );
305
474
 
306
- } else if ( background.isColor !== true ) {
475
+ } else if ( background.isColor !== true ) {
307
476
 
308
- console.error( 'WebGPUNodes: Unsupported background configuration.', background );
477
+ console.error( 'WebGPUNodes: Unsupported background configuration.', background );
478
+
479
+ }
309
480
 
310
- }
481
+ }, forceUpdate );
311
482
 
312
483
  sceneData.backgroundNode = backgroundNode;
313
484
  sceneData.background = background;
@@ -324,40 +495,75 @@ class Nodes extends DataMap {
324
495
 
325
496
  }
326
497
 
498
+ /**
499
+ * This method is part of the caching of nodes which are used to represents the
500
+ * scene's background, fog or environment.
501
+ *
502
+ * @param {String} type - The type of object to cache.
503
+ * @param {Object} object - The object.
504
+ * @param {Function} callback - A callback that produces a node representation for the given object.
505
+ * @param {Boolean} [forceUpdate=false] - Whether an update should be enforced or not.
506
+ * @return {Node} The node representation.
507
+ */
508
+ getCacheNode( type, object, callback, forceUpdate = false ) {
509
+
510
+ const nodeCache = this.cacheLib[ type ] || ( this.cacheLib[ type ] = new WeakMap() );
511
+
512
+ let node = nodeCache.get( object );
513
+
514
+ if ( node === undefined || forceUpdate ) {
515
+
516
+ node = callback();
517
+ nodeCache.set( object, node );
518
+
519
+ }
520
+
521
+ return node;
522
+
523
+ }
524
+
525
+ /**
526
+ * If a scene fog is configured, this method makes sure to
527
+ * represent the fog with a corresponding node-based implementation.
528
+ *
529
+ * @param {Scene} scene - The scene.
530
+ */
327
531
  updateFog( scene ) {
328
532
 
329
533
  const sceneData = this.get( scene );
330
- const fog = scene.fog;
534
+ const sceneFog = scene.fog;
331
535
 
332
- if ( fog ) {
536
+ if ( sceneFog ) {
333
537
 
334
- if ( sceneData.fog !== fog ) {
538
+ if ( sceneData.fog !== sceneFog ) {
335
539
 
336
- let fogNode = null;
540
+ const fogNode = this.getCacheNode( 'fog', sceneFog, () => {
337
541
 
338
- if ( fog.isFogExp2 ) {
542
+ if ( sceneFog.isFogExp2 ) {
339
543
 
340
- const color = reference( 'color', 'color', fog ).setGroup( renderGroup );
341
- const density = reference( 'density', 'float', fog ).setGroup( renderGroup );
544
+ const color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );
545
+ const density = reference( 'density', 'float', sceneFog ).setGroup( renderGroup );
342
546
 
343
- fogNode = densityFog( color, density );
547
+ return fog( color, densityFogFactor( density ) );
344
548
 
345
- } else if ( fog.isFog ) {
549
+ } else if ( sceneFog.isFog ) {
346
550
 
347
- const color = reference( 'color', 'color', fog ).setGroup( renderGroup );
348
- const near = reference( 'near', 'float', fog ).setGroup( renderGroup );
349
- const far = reference( 'far', 'float', fog ).setGroup( renderGroup );
551
+ const color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );
552
+ const near = reference( 'near', 'float', sceneFog ).setGroup( renderGroup );
553
+ const far = reference( 'far', 'float', sceneFog ).setGroup( renderGroup );
350
554
 
351
- fogNode = rangeFog( color, near, far );
555
+ return fog( color, rangeFogFactor( near, far ) );
556
+
557
+ } else {
352
558
 
353
- } else {
559
+ console.error( 'THREE.Renderer: Unsupported fog configuration.', sceneFog );
354
560
 
355
- console.error( 'WebGPUNodes: Unsupported fog configuration.', fog );
561
+ }
356
562
 
357
- }
563
+ } );
358
564
 
359
565
  sceneData.fogNode = fogNode;
360
- sceneData.fog = fog;
566
+ sceneData.fog = sceneFog;
361
567
 
362
568
  }
363
569
 
@@ -370,6 +576,12 @@ class Nodes extends DataMap {
370
576
 
371
577
  }
372
578
 
579
+ /**
580
+ * If a scene environment is configured, this method makes sure to
581
+ * represent the environment with a corresponding node-based implementation.
582
+ *
583
+ * @param {Scene} scene - The scene.
584
+ */
373
585
  updateEnvironment( scene ) {
374
586
 
375
587
  const sceneData = this.get( scene );
@@ -379,21 +591,23 @@ class Nodes extends DataMap {
379
591
 
380
592
  if ( sceneData.environment !== environment ) {
381
593
 
382
- let environmentNode = null;
594
+ const environmentNode = this.getCacheNode( 'environment', environment, () => {
595
+
596
+ if ( environment.isCubeTexture === true ) {
383
597
 
384
- if ( environment.isCubeTexture === true ) {
598
+ return cubeTexture( environment );
385
599
 
386
- environmentNode = cubeTexture( environment );
600
+ } else if ( environment.isTexture === true ) {
387
601
 
388
- } else if ( environment.isTexture === true ) {
602
+ return texture( environment );
389
603
 
390
- environmentNode = texture( environment );
604
+ } else {
391
605
 
392
- } else {
606
+ console.error( 'Nodes: Unsupported environment configuration.', environment );
393
607
 
394
- console.error( 'Nodes: Unsupported environment configuration.', environment );
608
+ }
395
609
 
396
- }
610
+ } );
397
611
 
398
612
  sceneData.environmentNode = environmentNode;
399
613
  sceneData.environment = environment;
@@ -428,6 +642,11 @@ class Nodes extends DataMap {
428
642
 
429
643
  }
430
644
 
645
+ /**
646
+ * Returns the current output cache key.
647
+ *
648
+ * @return {String} The output cache key.
649
+ */
431
650
  getOutputCacheKey() {
432
651
 
433
652
  const renderer = this.renderer;
@@ -436,27 +655,47 @@ class Nodes extends DataMap {
436
655
 
437
656
  }
438
657
 
658
+ /**
659
+ * Checks if the output configuration (tone mapping and color space) for
660
+ * the given target has changed.
661
+ *
662
+ * @param {Texture} outputTarget - The output target.
663
+ * @return {Boolean} Whether the output configuration has changed or not.
664
+ */
439
665
  hasOutputChange( outputTarget ) {
440
666
 
441
- const cacheKey = outputNodeMap.get( outputTarget );
667
+ const cacheKey = _outputNodeMap.get( outputTarget );
442
668
 
443
669
  return cacheKey !== this.getOutputCacheKey();
444
670
 
445
671
  }
446
672
 
447
- getOutputNode( outputTexture ) {
673
+ /**
674
+ * Returns a node that represents the output configuration (tone mapping and
675
+ * color space) for the current target.
676
+ *
677
+ * @param {Texture} outputTarget - The output target.
678
+ * @return {Node} The output node.
679
+ */
680
+ getOutputNode( outputTarget ) {
448
681
 
449
682
  const renderer = this.renderer;
450
683
  const cacheKey = this.getOutputCacheKey();
451
684
 
452
- const output = texture( outputTexture, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
685
+ const output = texture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
453
686
 
454
- outputNodeMap.set( outputTexture, cacheKey );
687
+ _outputNodeMap.set( outputTarget, cacheKey );
455
688
 
456
689
  return output;
457
690
 
458
691
  }
459
692
 
693
+ /**
694
+ * Triggers the call of `updateBefore()` methods
695
+ * for all nodes of the given render object.
696
+ *
697
+ * @param {RenderObject} renderObject - The render object.
698
+ */
460
699
  updateBefore( renderObject ) {
461
700
 
462
701
  const nodeBuilder = renderObject.getNodeBuilderState();
@@ -471,6 +710,12 @@ class Nodes extends DataMap {
471
710
 
472
711
  }
473
712
 
713
+ /**
714
+ * Triggers the call of `updateAfter()` methods
715
+ * for all nodes of the given render object.
716
+ *
717
+ * @param {RenderObject} renderObject - The render object.
718
+ */
474
719
  updateAfter( renderObject ) {
475
720
 
476
721
  const nodeBuilder = renderObject.getNodeBuilderState();
@@ -485,6 +730,12 @@ class Nodes extends DataMap {
485
730
 
486
731
  }
487
732
 
733
+ /**
734
+ * Triggers the call of `update()` methods
735
+ * for all nodes of the given compute node.
736
+ *
737
+ * @param {Node} computeNode - The compute node.
738
+ */
488
739
  updateForCompute( computeNode ) {
489
740
 
490
741
  const nodeFrame = this.getNodeFrame();
@@ -498,6 +749,12 @@ class Nodes extends DataMap {
498
749
 
499
750
  }
500
751
 
752
+ /**
753
+ * Triggers the call of `update()` methods
754
+ * for all nodes of the given compute node.
755
+ *
756
+ * @param {RenderObject} renderObject - The render object.
757
+ */
501
758
  updateForRender( renderObject ) {
502
759
 
503
760
  const nodeFrame = this.getNodeFrameForRender( renderObject );
@@ -511,6 +768,12 @@ class Nodes extends DataMap {
511
768
 
512
769
  }
513
770
 
771
+ /**
772
+ * Returns `true` if the given render object requires a refresh.
773
+ *
774
+ * @param {RenderObject} renderObject - The render object.
775
+ * @return {Boolean} Whether the given render object requires a refresh or not.
776
+ */
514
777
  needsRefresh( renderObject ) {
515
778
 
516
779
  const nodeFrame = this.getNodeFrameForRender( renderObject );
@@ -520,12 +783,16 @@ class Nodes extends DataMap {
520
783
 
521
784
  }
522
785
 
786
+ /**
787
+ * Frees the intenral resources.
788
+ */
523
789
  dispose() {
524
790
 
525
791
  super.dispose();
526
792
 
527
793
  this.nodeFrame = new NodeFrame();
528
794
  this.nodeBuilderCache = new Map();
795
+ this.cacheLib = {};
529
796
 
530
797
  }
531
798
 
@@ -286,7 +286,7 @@ vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in m
286
286
  float result = LTC_ClippedSphereFormFactor( vectorFormFactor );
287
287
 
288
288
  /*
289
- // alternate method of adjusting for horizon clipping (see referece)
289
+ // alternate method of adjusting for horizon clipping (see reference)
290
290
  // refactoring required
291
291
  float len = length( vectorFormFactor );
292
292
  float z = vectorFormFactor.z / len;
@@ -351,7 +351,7 @@ vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 no
351
351
 
352
352
  #endif
353
353
 
354
- // This is a curve-fit approxmation to the "Charlie sheen" BRDF integrated over the hemisphere from
354
+ // This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
355
355
  // Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found
356
356
  // in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
357
357
  float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
@@ -123,7 +123,7 @@ export default /* glsl */`
123
123
  // Direction of refracted light.
124
124
  vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
125
125
 
126
- // Compute rotation-independant scaling of the model matrix.
126
+ // Compute rotation-independent scaling of the model matrix.
127
127
  vec3 modelScale;
128
128
  modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
129
129
  modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
@@ -184,13 +184,13 @@ export default /* glsl */`
184
184
 
185
185
  vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );
186
186
  vec3 refractedRayExit = position + transmissionRay;
187
-
187
+
188
188
  // Project refracted vector on the framebuffer, while mapping to normalized device coordinates.
189
189
  vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
190
190
  vec2 refractionCoords = ndcPos.xy / ndcPos.w;
191
191
  refractionCoords += 1.0;
192
192
  refractionCoords /= 2.0;
193
-
193
+
194
194
  // Sample framebuffer to get pixel the refracted ray hits.
195
195
  vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );
196
196
  transmittedLight[ i ] = transmissionSample[ i ];
@@ -201,9 +201,9 @@ export default /* glsl */`
201
201
  }
202
202
 
203
203
  transmittedLight.a /= 3.0;
204
-
204
+
205
205
  #else
206
-
206
+
207
207
  vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
208
208
  vec3 refractedRayExit = position + transmissionRay;
209
209
 
@@ -216,7 +216,7 @@ export default /* glsl */`
216
216
  // Sample framebuffer to get pixel the refracted ray hits.
217
217
  transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );
218
218
  transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );
219
-
219
+
220
220
  #endif
221
221
 
222
222
  vec3 attenuatedColor = transmittance * transmittedLight.rgb;
@@ -224,7 +224,7 @@ export default /* glsl */`
224
224
  // Get the specular component.
225
225
  vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );
226
226
 
227
- // As less light is transmitted, the opacity should be increased. This simple approximation does a decent job
227
+ // As less light is transmitted, the opacity should be increased. This simple approximation does a decent job
228
228
  // of modulating a CSS background, and has no effect when the buffer is opaque, due to a solid object or clear color.
229
229
  float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;
230
230