1
0
Mr.doob 19 цаг өмнө
parent
commit
2dbf388df8
100 өөрчлөгдсөн 3701 нэмэгдсэн , 762 устгасан
  1. 350 109
      build/three.cjs
  2. 368 109
      build/three.core.js
  3. 0 0
      build/three.core.min.js
  4. 0 0
      build/three.module.js
  5. 0 0
      build/three.module.min.js
  6. 6 0
      build/three.tsl.js
  7. 0 0
      build/three.tsl.min.js
  8. 0 0
      build/three.webgpu.js
  9. 0 0
      build/three.webgpu.min.js
  10. 0 0
      build/three.webgpu.nodes.js
  11. 0 0
      build/three.webgpu.nodes.min.js
  12. 3 3
      docs/TSL.md
  13. 33 1
      docs/index.html
  14. 27 11
      docs/llms-full.txt
  15. 2 2
      docs/llms.txt
  16. 34 0
      docs/pages/AmbientLightDataNode.html
  17. 13 0
      docs/pages/AmbientLightDataNode.html.md
  18. 16 16
      docs/pages/ArrayElementNode.html
  19. 12 12
      docs/pages/ArrayElementNode.html.md
  20. 24 24
      docs/pages/ArrayNode.html
  21. 12 12
      docs/pages/ArrayNode.html.md
  22. 10 10
      docs/pages/AtomicFunctionNode.html
  23. 8 8
      docs/pages/AtomicFunctionNode.html.md
  24. 2 2
      docs/pages/AudioContext.html
  25. 2 2
      docs/pages/AudioContext.html.md
  26. 6 0
      docs/pages/BufferAttribute.html
  27. 4 0
      docs/pages/BufferAttribute.html.md
  28. 14 14
      docs/pages/BufferAttributeNode.html
  29. 12 12
      docs/pages/BufferAttributeNode.html.md
  30. 0 32
      docs/pages/ChromaticAberrationNode.html
  31. 0 18
      docs/pages/ChromaticAberrationNode.html.md
  32. 13 13
      docs/pages/ComputeBuiltinNode.html
  33. 12 12
      docs/pages/ComputeBuiltinNode.html.md
  34. 25 34
      docs/pages/ComputeNode.html
  35. 18 22
      docs/pages/ComputeNode.html.md
  36. 2 2
      docs/pages/ConditionalNode.html
  37. 2 2
      docs/pages/ConditionalNode.html.md
  38. 24 24
      docs/pages/ContextNode.html
  39. 12 12
      docs/pages/ContextNode.html.md
  40. 2 2
      docs/pages/ConvertNode.html
  41. 2 2
      docs/pages/ConvertNode.html.md
  42. 34 0
      docs/pages/DirectionalLightDataNode.html
  43. 13 0
      docs/pages/DirectionalLightDataNode.html.md
  44. 152 0
      docs/pages/DynamicLighting.html
  45. 90 0
      docs/pages/DynamicLighting.html.md
  46. 96 0
      docs/pages/DynamicLightsNode.html
  47. 55 0
      docs/pages/DynamicLightsNode.html.md
  48. 29 1
      docs/pages/EXRLoader.html
  49. 17 1
      docs/pages/EXRLoader.html.md
  50. 201 0
      docs/pages/FSR1Node.html
  51. 116 0
      docs/pages/FSR1Node.html.md
  52. 1 4
      docs/pages/FileLoader.html
  53. 1 3
      docs/pages/FileLoader.html.md
  54. 0 10
      docs/pages/FirstPersonControls.html
  55. 0 8
      docs/pages/FirstPersonControls.html.md
  56. 2 2
      docs/pages/FlipNode.html
  57. 2 2
      docs/pages/FlipNode.html.md
  58. 16 16
      docs/pages/FunctionCallNode.html
  59. 12 12
      docs/pages/FunctionCallNode.html.md
  60. 24 24
      docs/pages/FunctionNode.html
  61. 12 12
      docs/pages/FunctionNode.html.md
  62. 10 10
      docs/pages/FunctionOverloadingNode.html
  63. 8 8
      docs/pages/FunctionOverloadingNode.html.md
  64. 0 36
      docs/pages/GLSLNodeBuilder.html
  65. 0 20
      docs/pages/GLSLNodeBuilder.html.md
  66. 1 0
      docs/pages/GLTFExporter.html
  67. 1 0
      docs/pages/GLTFExporter.html.md
  68. 6 2
      docs/pages/GLTFLoader.html
  69. 6 2
      docs/pages/GLTFLoader.html.md
  70. 2 1
      docs/pages/GTAONode.html
  71. 2 1
      docs/pages/GTAONode.html.md
  72. 131 0
      docs/pages/HTMLTexture.html
  73. 77 0
      docs/pages/HTMLTexture.html.md
  74. 34 0
      docs/pages/HemisphereLightDataNode.html
  75. 13 0
      docs/pages/HemisphereLightDataNode.html.md
  76. 3 4
      docs/pages/ImageBitmapLoader.html
  77. 3 3
      docs/pages/ImageBitmapLoader.html.md
  78. 346 1
      docs/pages/Info.html
  79. 158 1
      docs/pages/Info.html.md
  80. 1 0
      docs/pages/InspectorBase.html
  81. 2 0
      docs/pages/InspectorBase.html.md
  82. 8 8
      docs/pages/InspectorNode.html
  83. 6 6
      docs/pages/InspectorNode.html.md
  84. 21 6
      docs/pages/InstancedMesh.html
  85. 16 6
      docs/pages/InstancedMesh.html.md
  86. 147 0
      docs/pages/InteractionManager.html
  87. 90 0
      docs/pages/InteractionManager.html.md
  88. 2 2
      docs/pages/JoinNode.html
  89. 2 2
      docs/pages/JoinNode.html.md
  90. 283 0
      docs/pages/LightProbeGrid.html
  91. 172 0
      docs/pages/LightProbeGrid.html.md
  92. 92 0
      docs/pages/LightProbeGridHelper.html
  93. 60 0
      docs/pages/LightProbeGridHelper.html.md
  94. 24 0
      docs/pages/Line2NodeMaterial.html
  95. 12 0
      docs/pages/Line2NodeMaterial.html.md
  96. 1 1
      docs/pages/LineMaterial.html
  97. 1 1
      docs/pages/LineMaterial.html.md
  98. 9 9
      docs/pages/MathNode.html
  99. 8 8
      docs/pages/MathNode.html.md
  100. 0 7
      docs/pages/Matrix2.html

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 350 - 109
build/three.cjs


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 368 - 109
build/three.core.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/three.core.min.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/three.module.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/three.module.min.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 6 - 0
build/three.tsl.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/three.tsl.min.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/three.webgpu.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/three.webgpu.min.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/three.webgpu.nodes.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/three.webgpu.nodes.min.js


+ 3 - 3
docs/TSL.md

@@ -1483,11 +1483,11 @@ Example:
 ```js
 import { billboarding } from 'three/tsl';
 
-// Full billboarding (like particles) - faces camera in all directions
+// Default: Horizontal only (like trees) - rotates around Y axis only
 material.vertexNode = billboarding();
 
-// Horizontal only (like trees) - rotates around Y axis only
-material.vertexNode = billboarding( { horizontal: true, vertical: false } );
+// Full billboarding (like particles) - faces camera in all directions
+material.vertexNode = billboarding( { horizontal: true, vertical: true } );
 ```
 
 ## NodeMaterial

+ 33 - 1
docs/index.html

@@ -392,7 +392,6 @@
 						<li><a href="ReferenceElementNode.html">ReferenceElementNode</a></li>
 						<li><a href="ReferenceNode.html">ReferenceNode</a></li>
 						<li><a href="ReflectorNode.html">ReflectorNode</a></li>
-						<li><a href="RemapNode.html">RemapNode</a></li>
 						<li><a href="RenderOutputNode.html">RenderOutputNode</a></li>
 						<li><a href="RendererReferenceNode.html">RendererReferenceNode</a></li>
 						<li><a href="RotateNode.html">RotateNode</a></li>
@@ -468,6 +467,7 @@
 						<li><a href="InspectorBase.html">InspectorBase</a></li>
 						<li><a href="PostProcessing.html">PostProcessing</a></li>
 						<li><a href="QuadMesh.html">QuadMesh</a></li>
+						<li><a href="ReadbackBuffer.html">ReadbackBuffer</a></li>
 						<li><a href="RenderPipeline.html">RenderPipeline</a></li>
 						<li><a href="Renderer.html">Renderer</a></li>
 						<li><a href="Storage3DTexture.html">Storage3DTexture</a></li>
@@ -512,6 +512,7 @@
 						<li><a href="DepthTexture.html">DepthTexture</a></li>
 						<li><a href="ExternalTexture.html">ExternalTexture</a></li>
 						<li><a href="FramebufferTexture.html">FramebufferTexture</a></li>
+						<li><a href="HTMLTexture.html">HTMLTexture</a></li>
 						<li><a href="Source.html">Source</a></li>
 						<li><a href="Texture.html">Texture</a></li>
 						<li><a href="VideoFrameTexture.html">VideoFrameTexture</a></li>
@@ -613,6 +614,7 @@
 					<h3>Helpers</h3>
 					<ul>
 						<li><a href="AnimationPathHelper.html">AnimationPathHelper</a></li>
+						<li><a href="LightProbeGridHelper.html">LightProbeGridHelper</a></li>
 						<li><a href="LightProbeHelper.html">LightProbeHelper</a></li>
 						<li><a href="OctreeHelper.html">OctreeHelper</a></li>
 						<li><a href="PositionalAudioHelper.html">PositionalAudioHelper</a></li>
@@ -627,6 +629,10 @@
 					<ul>
 						<li><a href="Tab.html">Tab</a></li>
 					</ul>
+					<h3>Interaction</h3>
+					<ul>
+						<li><a href="InteractionManager.html">InteractionManager</a></li>
+					</ul>
 					<h3>Interactive</h3>
 					<ul>
 						<li><a href="HTMLMesh.html">HTMLMesh</a></li>
@@ -636,6 +642,8 @@
 					</ul>
 					<h3>Lighting</h3>
 					<ul>
+						<li><a href="DynamicLighting.html">DynamicLighting</a></li>
+						<li><a href="LightProbeGrid.html">LightProbeGrid</a></li>
 						<li><a href="TiledLighting.html">TiledLighting</a></li>
 					</ul>
 					<h3>Lights</h3>
@@ -876,6 +884,7 @@
 					<h3>TSL</h3>
 					<ul>
 						<li><a href="AfterImageNode.html">AfterImageNode</a></li>
+						<li><a href="AmbientLightDataNode.html">AmbientLightDataNode</a></li>
 						<li><a href="AnaglyphPassNode.html">AnaglyphPassNode</a></li>
 						<li><a href="AnamorphicNode.html">AnamorphicNode</a></li>
 						<li><a href="BilateralBlurNode.html">BilateralBlurNode</a></li>
@@ -883,18 +892,23 @@
 						<li><a href="ChromaticAberrationNode.html">ChromaticAberrationNode</a></li>
 						<li><a href="DenoiseNode.html">DenoiseNode</a></li>
 						<li><a href="DepthOfFieldNode.html">DepthOfFieldNode</a></li>
+						<li><a href="DirectionalLightDataNode.html">DirectionalLightDataNode</a></li>
 						<li><a href="DotScreenNode.html">DotScreenNode</a></li>
+						<li><a href="DynamicLightsNode.html">DynamicLightsNode</a></li>
+						<li><a href="FSR1Node.html">FSR1Node</a></li>
 						<li><a href="FXAANode.html">FXAANode</a></li>
 						<li><a href="FilmNode.html">FilmNode</a></li>
 						<li><a href="GTAONode.html">GTAONode</a></li>
 						<li><a href="GaussianBlurNode.html">GaussianBlurNode</a></li>
 						<li><a href="GodraysNode.html">GodraysNode</a></li>
+						<li><a href="HemisphereLightDataNode.html">HemisphereLightDataNode</a></li>
 						<li><a href="LensflareNode.html">LensflareNode</a></li>
 						<li><a href="Lut3DNode.html">Lut3DNode</a></li>
 						<li><a href="OutlineNode.html">OutlineNode</a></li>
 						<li><a href="ParallaxBarrierPassNode.html">ParallaxBarrierPassNode</a></li>
 						<li><a href="PixelationNode.html">PixelationNode</a></li>
 						<li><a href="PixelationPassNode.html">PixelationPassNode</a></li>
+						<li><a href="PointLightDataNode.html">PointLightDataNode</a></li>
 						<li><a href="RGBShiftNode.html">RGBShiftNode</a></li>
 						<li><a href="RetroPassNode.html">RetroPassNode</a></li>
 						<li><a href="SMAANode.html">SMAANode</a></li>
@@ -902,14 +916,18 @@
 						<li><a href="SSGINode.html">SSGINode</a></li>
 						<li><a href="SSRNode.html">SSRNode</a></li>
 						<li><a href="SSSNode.html">SSSNode</a></li>
+						<li><a href="SharpenNode.html">SharpenNode</a></li>
 						<li><a href="SobelOperatorNode.html">SobelOperatorNode</a></li>
+						<li><a href="SpotLightDataNode.html">SpotLightDataNode</a></li>
 						<li><a href="StereoCompositePassNode.html">StereoCompositePassNode</a></li>
 						<li><a href="StereoPassNode.html">StereoPassNode</a></li>
+						<li><a href="TAAUNode.html">TAAUNode</a></li>
 						<li><a href="TRAANode.html">TRAANode</a></li>
 						<li><a href="TileShadowNode.html">TileShadowNode</a></li>
 						<li><a href="TileShadowNodeHelper.html">TileShadowNodeHelper</a></li>
 						<li><a href="TiledLightsNode.html">TiledLightsNode</a></li>
 						<li><a href="TransitionNode.html">TransitionNode</a></li>
+						<li><a href="WebGLNodesHandler.html">WebGLNodesHandler</a></li>
 						<li><a href="module-Bayer.html">Bayer</a></li>
 						<li><a href="module-Raymarching.html">Raymarching</a></li>
 					</ul>
@@ -929,6 +947,7 @@
 						<li><a href="WorkerPool.html">WorkerPool</a></li>
 						<li><a href="module-BufferGeometryUtils.html">BufferGeometryUtils</a></li>
 						<li><a href="module-CameraUtils.html">CameraUtils</a></li>
+						<li><a href="module-ColorUtils.html">ColorUtils</a></li>
 						<li><a href="module-GeometryCompressionUtils.html">GeometryCompressionUtils</a></li>
 						<li><a href="module-GeometryUtils.html">GeometryUtils</a></li>
 						<li><a href="module-SceneUtils.html">SceneUtils</a></li>
@@ -977,6 +996,7 @@
 						<li><a href="TSL.html#abs">abs</a></li>
 						<li><a href="TSL.html#acesFilmicToneMapping">acesFilmicToneMapping</a></li>
 						<li><a href="TSL.html#acos">acos</a></li>
+						<li><a href="TSL.html#acosh">acosh</a></li>
 						<li><a href="TSL.html#add">add</a></li>
 						<li><a href="TSL.html#afterImage">afterImage</a></li>
 						<li><a href="TSL.html#agxToneMapping">agxToneMapping</a></li>
@@ -993,8 +1013,10 @@
 						<li><a href="TSL.html#append">append</a></li>
 						<li><a href="TSL.html#array">array</a></li>
 						<li><a href="TSL.html#asin">asin</a></li>
+						<li><a href="TSL.html#asinh">asinh</a></li>
 						<li><a href="TSL.html#assign">assign</a></li>
 						<li><a href="TSL.html#atan">atan</a></li>
+						<li><a href="TSL.html#atanh">atanh</a></li>
 						<li><a href="TSL.html#atomicAdd">atomicAdd</a></li>
 						<li><a href="TSL.html#atomicAnd">atomicAnd</a></li>
 						<li><a href="TSL.html#atomicFunc">atomicFunc</a></li>
@@ -1083,6 +1105,7 @@
 						<li><a href="TSL.html#convertColorSpace">convertColorSpace</a></li>
 						<li><a href="TSL.html#convertToTexture">convertToTexture</a></li>
 						<li><a href="TSL.html#cos">cos</a></li>
+						<li><a href="TSL.html#cosh">cosh</a></li>
 						<li><a href="TSL.html#countLeadingZeros">countLeadingZeros</a></li>
 						<li><a href="TSL.html#countOneBits">countOneBits</a></li>
 						<li><a href="TSL.html#countTrailingZeros">countTrailingZeros</a></li>
@@ -1118,6 +1141,7 @@
 						<li><a href="TSL.html#dotScreen">dotScreen</a></li>
 						<li><a href="TSL.html#drawIndex">drawIndex</a></li>
 						<li><a href="TSL.html#dynamicBufferAttribute">dynamicBufferAttribute</a></li>
+						<li><a href="TSL.html#dynamicLights">dynamicLights</a></li>
 						<li><a href="TSL.html#emissive">emissive</a></li>
 						<li><a href="TSL.html#equal">equal</a></li>
 						<li><a href="TSL.html#equirectUV">equirectUV</a></li>
@@ -1136,6 +1160,7 @@
 						<li><a href="TSL.html#frameGroup">frameGroup</a></li>
 						<li><a href="TSL.html#frameId">frameId</a></li>
 						<li><a href="TSL.html#frontFacing">frontFacing</a></li>
+						<li><a href="TSL.html#fsr1">fsr1</a></li>
 						<li><a href="TSL.html#fwidth">fwidth</a></li>
 						<li><a href="TSL.html#fxaa">fxaa</a></li>
 						<li><a href="TSL.html#gain">gain</a></li>
@@ -1382,6 +1407,7 @@
 						<li><a href="TSL.html#shadowPositionWorld">shadowPositionWorld</a></li>
 						<li><a href="TSL.html#shapeCircle">shapeCircle</a></li>
 						<li><a href="TSL.html#sharedUniformGroup">sharedUniformGroup</a></li>
+						<li><a href="TSL.html#sharpen">sharpen</a></li>
 						<li><a href="TSL.html#sheen">sheen</a></li>
 						<li><a href="TSL.html#sheenRoughness">sheenRoughness</a></li>
 						<li><a href="TSL.html#shiftLeft">shiftLeft</a></li>
@@ -1390,6 +1416,7 @@
 						<li><a href="TSL.html#sign">sign</a></li>
 						<li><a href="TSL.html#sin">sin</a></li>
 						<li><a href="TSL.html#sinc">sinc</a></li>
+						<li><a href="TSL.html#sinh">sinh</a></li>
 						<li><a href="TSL.html#skinning">skinning</a></li>
 						<li><a href="TSL.html#smaa">smaa</a></li>
 						<li><a href="TSL.html#smoothstep">smoothstep</a></li>
@@ -1439,12 +1466,14 @@
 						<li><a href="TSL.html#subgroupShuffleXor">subgroupShuffleXor</a></li>
 						<li><a href="TSL.html#subgroupSize">subgroupSize</a></li>
 						<li><a href="TSL.html#subgroupXor">subgroupXor</a></li>
+						<li><a href="TSL.html#taau">taau</a></li>
 						<li><a href="TSL.html#tan">tan</a></li>
 						<li><a href="TSL.html#tangentGeometry">tangentGeometry</a></li>
 						<li><a href="TSL.html#tangentLocal">tangentLocal</a></li>
 						<li><a href="TSL.html#tangentView">tangentView</a></li>
 						<li><a href="TSL.html#tangentViewFrame">tangentViewFrame</a></li>
 						<li><a href="TSL.html#tangentWorld">tangentWorld</a></li>
+						<li><a href="TSL.html#tanh">tanh</a></li>
 						<li><a href="TSL.html#texture">texture</a></li>
 						<li><a href="TSL.html#texture3D">texture3D</a></li>
 						<li><a href="TSL.html#texture3DLevel">texture3DLevel</a></li>
@@ -1643,8 +1672,10 @@
 						<li><a href="global.html#NotEqualDepth">NotEqualDepth</a></li>
 						<li><a href="global.html#NotEqualStencilFunc">NotEqualStencilFunc</a></li>
 						<li><a href="global.html#ObjectSpaceNormalMap">ObjectSpaceNormalMap</a></li>
+						<li><a href="global.html#OnBeforeFrameUpdate">OnBeforeFrameUpdate</a></li>
 						<li><a href="global.html#OnBeforeMaterialUpdate">OnBeforeMaterialUpdate</a></li>
 						<li><a href="global.html#OnBeforeObjectUpdate">OnBeforeObjectUpdate</a></li>
+						<li><a href="global.html#OnFrameUpdate">OnFrameUpdate</a></li>
 						<li><a href="global.html#OnMaterialUpdate">OnMaterialUpdate</a></li>
 						<li><a href="global.html#OnObjectUpdate">OnObjectUpdate</a></li>
 						<li><a href="global.html#OneFactor">OneFactor</a></li>
@@ -1815,6 +1846,7 @@
 						<li><a href="global.html#viewportResolution">viewportResolution</a></li>
 						<li><a href="global.html#warn">warn</a></li>
 						<li><a href="global.html#warnOnce">warnOnce</a></li>
+						<li><a href="global.html#yieldToMain">yieldToMain</a></li>
 					</ul>
 
 				</div>

+ 27 - 11
docs/llms-full.txt

@@ -18,8 +18,8 @@ CORRECT - modern pattern (always use latest version):
 <script type="importmap">
 {
   "imports": {
-    "three": "https://cdn.jsdelivr.net/npm/three@0.183.1/build/three.module.js",
-    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.183.1/examples/jsm/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/"
   }
 }
 </script>
@@ -100,8 +100,8 @@ When using TSL, use node-based materials:
 <script type="importmap">
 {
   "imports": {
-    "three": "https://cdn.jsdelivr.net/npm/three@0.183.1/build/three.module.js",
-    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.183.1/examples/jsm/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/"
   }
 }
 </script>
@@ -175,9 +175,9 @@ renderer.setAnimationLoop( animate );
 <script type="importmap">
 {
   "imports": {
-    "three": "https://cdn.jsdelivr.net/npm/three@0.183.1/build/three.webgpu.js",
-    "three/tsl": "https://cdn.jsdelivr.net/npm/three@0.183.1/build/three.tsl.js",
-    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.183.1/examples/jsm/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.webgpu.js",
+    "three/tsl": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.tsl.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/"
   }
 }
 </script>
@@ -1753,11 +1753,11 @@ Example:
 ```js
 import { billboarding } from 'three/tsl';
 
-// Full billboarding (like particles) - faces camera in all directions
+// Default: Horizontal only (like trees) - rotates around Y axis only
 material.vertexNode = billboarding();
 
-// Horizontal only (like trees) - rotates around Y axis only
-material.vertexNode = billboarding( { horizontal: true, vertical: false } );
+// Full billboarding (like particles) - faces camera in all directions
+material.vertexNode = billboarding( { horizontal: true, vertical: true } );
 ```
 
 ## NodeMaterial
@@ -1940,6 +1940,7 @@ The following documentation pages are available in markdown format at `https://t
 - [DecoratedTorusKnot5c](https://threejs.org/docs/pages/DecoratedTorusKnot5c.html.md)
 - [DirectionalLightShadow](https://threejs.org/docs/pages/DirectionalLightShadow.html.md)
 - [DiscreteInterpolant](https://threejs.org/docs/pages/DiscreteInterpolant.html.md)
+- [DynamicLighting](https://threejs.org/docs/pages/DynamicLighting.html.md)
 - [Earcut](https://threejs.org/docs/pages/Earcut.html.md)
 - [EdgeSplitModifier](https://threejs.org/docs/pages/EdgeSplitModifier.html.md)
 - [EffectComposer](https://threejs.org/docs/pages/EffectComposer.html.md)
@@ -1975,6 +1976,7 @@ The following documentation pages are available in markdown format at `https://t
 - [Int16BufferAttribute](https://threejs.org/docs/pages/Int16BufferAttribute.html.md)
 - [Int32BufferAttribute](https://threejs.org/docs/pages/Int32BufferAttribute.html.md)
 - [Int8BufferAttribute](https://threejs.org/docs/pages/Int8BufferAttribute.html.md)
+- [InteractionManager](https://threejs.org/docs/pages/InteractionManager.html.md)
 - [InteractiveGroup](https://threejs.org/docs/pages/InteractiveGroup.html.md)
 - [InterleavedBuffer](https://threejs.org/docs/pages/InterleavedBuffer.html.md)
 - [InterleavedBufferAttribute](https://threejs.org/docs/pages/InterleavedBufferAttribute.html.md)
@@ -1990,6 +1992,7 @@ The following documentation pages are available in markdown format at `https://t
 - [LensflareMesh](https://threejs.org/docs/pages/LensflareMesh.html.md)
 - [LightProbe](https://threejs.org/docs/pages/LightProbe.html.md)
 - [LightProbeGenerator](https://threejs.org/docs/pages/LightProbeGenerator.html.md)
+- [LightProbeGrid](https://threejs.org/docs/pages/LightProbeGrid.html.md)
 - [LightShadow](https://threejs.org/docs/pages/LightShadow.html.md)
 - [LightingModel](https://threejs.org/docs/pages/LightingModel.html.md)
 - [Line](https://threejs.org/docs/pages/Line.html.md)
@@ -2046,6 +2049,7 @@ The following documentation pages are available in markdown format at `https://t
 - [PropertyMixer](https://threejs.org/docs/pages/PropertyMixer.html.md)
 - [QuadMesh](https://threejs.org/docs/pages/QuadMesh.html.md)
 - [RapierPhysics](https://threejs.org/docs/pages/RapierPhysics.html.md)
+- [ReadbackBuffer](https://threejs.org/docs/pages/ReadbackBuffer.html.md)
 - [RectAreaLightTexturesLib](https://threejs.org/docs/pages/RectAreaLightTexturesLib.html.md)
 - [RectAreaLightUniformsLib](https://threejs.org/docs/pages/RectAreaLightUniformsLib.html.md)
 - [Reflector](https://threejs.org/docs/pages/Reflector.html.md)
@@ -2117,6 +2121,7 @@ The following documentation pages are available in markdown format at `https://t
 - [WebGL3DRenderTarget](https://threejs.org/docs/pages/WebGL3DRenderTarget.html.md)
 - [WebGLArrayRenderTarget](https://threejs.org/docs/pages/WebGLArrayRenderTarget.html.md)
 - [WebGLCubeRenderTarget](https://threejs.org/docs/pages/WebGLCubeRenderTarget.html.md)
+- [WebGLNodesHandler](https://threejs.org/docs/pages/WebGLNodesHandler.html.md)
 - [WebGLRenderTarget](https://threejs.org/docs/pages/WebGLRenderTarget.html.md)
 - [WebGLRenderer](https://threejs.org/docs/pages/WebGLRenderer.html.md)
 - [WebGLTimestampQueryPool](https://threejs.org/docs/pages/WebGLTimestampQueryPool.html.md)
@@ -2245,6 +2250,7 @@ The following documentation pages are available in markdown format at `https://t
 - [ExternalTexture](https://threejs.org/docs/pages/ExternalTexture.html.md)
 - [FlakesTexture](https://threejs.org/docs/pages/FlakesTexture.html.md)
 - [FramebufferTexture](https://threejs.org/docs/pages/FramebufferTexture.html.md)
+- [HTMLTexture](https://threejs.org/docs/pages/HTMLTexture.html.md)
 - [Storage3DTexture](https://threejs.org/docs/pages/Storage3DTexture.html.md)
 - [StorageArrayTexture](https://threejs.org/docs/pages/StorageArrayTexture.html.md)
 - [StorageTexture](https://threejs.org/docs/pages/StorageTexture.html.md)
@@ -2343,6 +2349,7 @@ The following documentation pages are available in markdown format at `https://t
 - [DirectionalLightHelper](https://threejs.org/docs/pages/DirectionalLightHelper.html.md)
 - [GridHelper](https://threejs.org/docs/pages/GridHelper.html.md)
 - [HemisphereLightHelper](https://threejs.org/docs/pages/HemisphereLightHelper.html.md)
+- [LightProbeGridHelper](https://threejs.org/docs/pages/LightProbeGridHelper.html.md)
 - [LightProbeHelper](https://threejs.org/docs/pages/LightProbeHelper.html.md)
 - [OctreeHelper](https://threejs.org/docs/pages/OctreeHelper.html.md)
 - [PlaneHelper](https://threejs.org/docs/pages/PlaneHelper.html.md)
@@ -2476,6 +2483,7 @@ The following documentation pages are available in markdown format at `https://t
 
 - [AONode](https://threejs.org/docs/pages/AONode.html.md)
 - [AfterImageNode](https://threejs.org/docs/pages/AfterImageNode.html.md)
+- [AmbientLightDataNode](https://threejs.org/docs/pages/AmbientLightDataNode.html.md)
 - [AmbientLightNode](https://threejs.org/docs/pages/AmbientLightNode.html.md)
 - [AnalyticLightNode](https://threejs.org/docs/pages/AnalyticLightNode.html.md)
 - [AnamorphicNode](https://threejs.org/docs/pages/AnamorphicNode.html.md)
@@ -2512,11 +2520,14 @@ The following documentation pages are available in markdown format at `https://t
 - [CubeTextureNode](https://threejs.org/docs/pages/CubeTextureNode.html.md)
 - [DenoiseNode](https://threejs.org/docs/pages/DenoiseNode.html.md)
 - [DepthOfFieldNode](https://threejs.org/docs/pages/DepthOfFieldNode.html.md)
+- [DirectionalLightDataNode](https://threejs.org/docs/pages/DirectionalLightDataNode.html.md)
 - [DirectionalLightNode](https://threejs.org/docs/pages/DirectionalLightNode.html.md)
 - [DotScreenNode](https://threejs.org/docs/pages/DotScreenNode.html.md)
+- [DynamicLightsNode](https://threejs.org/docs/pages/DynamicLightsNode.html.md)
 - [EnvironmentNode](https://threejs.org/docs/pages/EnvironmentNode.html.md)
 - [EventNode](https://threejs.org/docs/pages/EventNode.html.md)
 - [ExpressionNode](https://threejs.org/docs/pages/ExpressionNode.html.md)
+- [FSR1Node](https://threejs.org/docs/pages/FSR1Node.html.md)
 - [FXAANode](https://threejs.org/docs/pages/FXAANode.html.md)
 - [FilmNode](https://threejs.org/docs/pages/FilmNode.html.md)
 - [FlipNode](https://threejs.org/docs/pages/FlipNode.html.md)
@@ -2527,6 +2538,7 @@ The following documentation pages are available in markdown format at `https://t
 - [GTAONode](https://threejs.org/docs/pages/GTAONode.html.md)
 - [GaussianBlurNode](https://threejs.org/docs/pages/GaussianBlurNode.html.md)
 - [GodraysNode](https://threejs.org/docs/pages/GodraysNode.html.md)
+- [HemisphereLightDataNode](https://threejs.org/docs/pages/HemisphereLightDataNode.html.md)
 - [HemisphereLightNode](https://threejs.org/docs/pages/HemisphereLightNode.html.md)
 - [IESSpotLightNode](https://threejs.org/docs/pages/IESSpotLightNode.html.md)
 - [IndexNode](https://threejs.org/docs/pages/IndexNode.html.md)
@@ -2564,6 +2576,7 @@ The following documentation pages are available in markdown format at `https://t
 - [PassMultipleTextureNode](https://threejs.org/docs/pages/PassMultipleTextureNode.html.md)
 - [PassTextureNode](https://threejs.org/docs/pages/PassTextureNode.html.md)
 - [PixelationNode](https://threejs.org/docs/pages/PixelationNode.html.md)
+- [PointLightDataNode](https://threejs.org/docs/pages/PointLightDataNode.html.md)
 - [PointLightNode](https://threejs.org/docs/pages/PointLightNode.html.md)
 - [PointShadowNode](https://threejs.org/docs/pages/PointShadowNode.html.md)
 - [PointUVNode](https://threejs.org/docs/pages/PointUVNode.html.md)
@@ -2577,7 +2590,6 @@ The following documentation pages are available in markdown format at `https://t
 - [ReferenceElementNode](https://threejs.org/docs/pages/ReferenceElementNode.html.md)
 - [ReferenceNode](https://threejs.org/docs/pages/ReferenceNode.html.md)
 - [ReflectorNode](https://threejs.org/docs/pages/ReflectorNode.html.md)
-- [RemapNode](https://threejs.org/docs/pages/RemapNode.html.md)
 - [RenderOutputNode](https://threejs.org/docs/pages/RenderOutputNode.html.md)
 - [RendererReferenceNode](https://threejs.org/docs/pages/RendererReferenceNode.html.md)
 - [RotateNode](https://threejs.org/docs/pages/RotateNode.html.md)
@@ -2590,9 +2602,11 @@ The following documentation pages are available in markdown format at `https://t
 - [SetNode](https://threejs.org/docs/pages/SetNode.html.md)
 - [ShadowBaseNode](https://threejs.org/docs/pages/ShadowBaseNode.html.md)
 - [ShadowNode](https://threejs.org/docs/pages/ShadowNode.html.md)
+- [SharpenNode](https://threejs.org/docs/pages/SharpenNode.html.md)
 - [SkinningNode](https://threejs.org/docs/pages/SkinningNode.html.md)
 - [SobelOperatorNode](https://threejs.org/docs/pages/SobelOperatorNode.html.md)
 - [SplitNode](https://threejs.org/docs/pages/SplitNode.html.md)
+- [SpotLightDataNode](https://threejs.org/docs/pages/SpotLightDataNode.html.md)
 - [SpotLightNode](https://threejs.org/docs/pages/SpotLightNode.html.md)
 - [StackNode](https://threejs.org/docs/pages/StackNode.html.md)
 - [StorageArrayElementNode](https://threejs.org/docs/pages/StorageArrayElementNode.html.md)
@@ -2602,6 +2616,7 @@ The following documentation pages are available in markdown format at `https://t
 - [StructTypeNode](https://threejs.org/docs/pages/StructTypeNode.html.md)
 - [SubBuildNode](https://threejs.org/docs/pages/SubBuildNode.html.md)
 - [SubgroupFunctionNode](https://threejs.org/docs/pages/SubgroupFunctionNode.html.md)
+- [TAAUNode](https://threejs.org/docs/pages/TAAUNode.html.md)
 - [TRAANode](https://threejs.org/docs/pages/TRAANode.html.md)
 - [TempNode](https://threejs.org/docs/pages/TempNode.html.md)
 - [Texture3DNode](https://threejs.org/docs/pages/Texture3DNode.html.md)
@@ -2659,6 +2674,7 @@ The following documentation pages are available in markdown format at `https://t
 - [module-CameraUtils](https://threejs.org/docs/pages/module-CameraUtils.html.md)
 - [module-ColorCorrectionShader](https://threejs.org/docs/pages/module-ColorCorrectionShader.html.md)
 - [module-ColorSpaces](https://threejs.org/docs/pages/module-ColorSpaces.html.md)
+- [module-ColorUtils](https://threejs.org/docs/pages/module-ColorUtils.html.md)
 - [module-ColorifyShader](https://threejs.org/docs/pages/module-ColorifyShader.html.md)
 - [module-ConvolutionShader](https://threejs.org/docs/pages/module-ConvolutionShader.html.md)
 - [module-CopyShader](https://threejs.org/docs/pages/module-CopyShader.html.md)

+ 2 - 2
docs/llms.txt

@@ -18,8 +18,8 @@ CORRECT - modern pattern (always use latest version):
 <script type="importmap">
 {
   "imports": {
-    "three": "https://cdn.jsdelivr.net/npm/three@0.183.1/build/three.module.js",
-    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.183.1/examples/jsm/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/"
   }
 }
 </script>

+ 34 - 0
docs/pages/AmbientLightDataNode.html

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>AmbientLightDataNode - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → </p>
+	<h1 translate="no">AmbientLightDataNode</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Batched data node for ambient lights in dynamic lighting mode.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="AmbientLightDataNode" translate="no">new <a href="#AmbientLightDataNode">AmbientLightDataNode</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/lighting/data/AmbientLightDataNode.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 13 - 0
docs/pages/AmbientLightDataNode.html.md

@@ -0,0 +1,13 @@
+*Inheritance: EventDispatcher → Node →*
+
+# AmbientLightDataNode
+
+Batched data node for ambient lights in dynamic lighting mode.
+
+## Constructor
+
+### new AmbientLightDataNode()
+
+## Source
+
+[examples/jsm/tsl/lighting/data/AmbientLightDataNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js)

+ 16 - 16
docs/pages/ArrayElementNode.html

@@ -67,10 +67,10 @@ node data structures.</p></div>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getMemberType" translate="no">.<a href="#getMemberType">getMemberType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, name : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>This method is overwritten since the member type is inferred from the array-like node.</p>
+							<p>This method is overwritten since the node type is inferred from the array-like node.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -82,27 +82,19 @@ node data structures.</p></div>
 										<p>The current node builder.</p>
 									</td>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">name</strong>
-									</td>
-									<td class="description last">
-										<p>The member name.</p>
-									</td>
-								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getMemberType">Node#getMemberType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#generateNodeType">Node#generateNodeType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The member type.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getMemberType" translate="no">.<a href="#getMemberType">getMemberType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, name : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>This method is overwritten since the node type is inferred from the array-like node.</p>
+							<p>This method is overwritten since the member type is inferred from the array-like node.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -114,13 +106,21 @@ node data structures.</p></div>
 										<p>The current node builder.</p>
 									</td>
 								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The member name.</p>
+									</td>
+								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getNodeType">Node#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getMemberType">Node#getMemberType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The member type.</dt>
 						</dl>
 					</div>
 				<h2 class="subsection-title">Source</h2>

+ 12 - 12
docs/pages/ArrayElementNode.html.md

@@ -36,33 +36,33 @@ The array-like node.
 
 ## Methods
 
-### .getMemberType( builder : NodeBuilder, name : string ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
-This method is overwritten since the member type is inferred from the array-like node.
+This method is overwritten since the node type is inferred from the array-like node.
 
 **builder**
 
 The current node builder.
 
-**name**
-
-The member name.
-
-**Overrides:** [Node#getMemberType](Node.html#getMemberType)
+**Overrides:** [Node#generateNodeType](Node.html#generateNodeType)
 
-**Returns:** The member type.
+**Returns:** The node type.
 
-### .getNodeType( builder : NodeBuilder ) : string
+### .getMemberType( builder : NodeBuilder, name : string ) : string
 
-This method is overwritten since the node type is inferred from the array-like node.
+This method is overwritten since the member type is inferred from the array-like node.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [Node#getNodeType](Node.html#getNodeType)
+**name**
 
-**Returns:** The node type.
+The member name.
+
+**Overrides:** [Node#getMemberType](Node.html#getMemberType)
+
+**Returns:** The member type.
 
 ## Source
 

+ 24 - 24
docs/pages/ArrayNode.html

@@ -107,10 +107,10 @@ const redColor = tintColors.element( 0 );
 							<dt class="tag-returns"><strong>Returns:</strong> The generated shader string.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getArrayCount" translate="no">.<a href="#getArrayCount">getArrayCount</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : number</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns the number of elements in the node array.</p>
+							<p>Returns the node's type.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -125,16 +125,16 @@ const redColor = tintColors.element( 0 );
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getArrayCount">TempNode#getArrayCount</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#generateNodeType">TempNode#generateNodeType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The number of elements in the node array.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The type of the node.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getElementType" translate="no">.<a href="#getElementType">getElementType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getArrayCount" translate="no">.<a href="#getArrayCount">getArrayCount</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : number</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns the node's type.</p>
+							<p>Returns the number of elements in the node array.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -149,16 +149,16 @@ const redColor = tintColors.element( 0 );
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getElementType">TempNode#getElementType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getArrayCount">TempNode#getArrayCount</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The type of the node.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The number of elements in the node array.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getMemberType" translate="no">.<a href="#getMemberType">getMemberType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, name : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getElementType" translate="no">.<a href="#getElementType">getElementType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns the type of a member variable.</p>
+							<p>Returns the node's type.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -170,27 +170,19 @@ const redColor = tintColors.element( 0 );
 										<p>The current node builder.</p>
 									</td>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">name</strong>
-									</td>
-									<td class="description last">
-										<p>The name of the member variable.</p>
-									</td>
-								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getMemberType">TempNode#getMemberType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getElementType">TempNode#getElementType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The type of the member variable.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The type of the node.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getMemberType" translate="no">.<a href="#getMemberType">getMemberType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, name : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns the node's type.</p>
+							<p>Returns the type of a member variable.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -202,13 +194,21 @@ const redColor = tintColors.element( 0 );
 										<p>The current node builder.</p>
 									</td>
 								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The name of the member variable.</p>
+									</td>
+								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getNodeType">TempNode#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getMemberType">TempNode#getMemberType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The type of the node.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The type of the member variable.</dt>
 						</dl>
 					</div>
 				<h2 class="subsection-title">Source</h2>

+ 12 - 12
docs/pages/ArrayNode.html.md

@@ -65,6 +65,18 @@ The current node builder.
 
 **Returns:** The generated shader string.
 
+### .generateNodeType( builder : NodeBuilder ) : string
+
+Returns the node's type.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [TempNode#generateNodeType](TempNode.html#generateNodeType)
+
+**Returns:** The type of the node.
+
 ### .getArrayCount( builder : NodeBuilder ) : number
 
 Returns the number of elements in the node array.
@@ -105,18 +117,6 @@ The name of the member variable.
 
 **Returns:** The type of the member variable.
 
-### .getNodeType( builder : NodeBuilder ) : string
-
-Returns the node's type.
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [TempNode#getNodeType](TempNode.html#getNodeType)
-
-**Returns:** The type of the node.
-
 ## Source
 
 [src/nodes/core/ArrayNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/core/ArrayNode.js)

+ 10 - 10
docs/pages/AtomicFunctionNode.html

@@ -88,11 +88,10 @@ atomic operations will not interfere with each other.</p>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getInputType" translate="no">.<a href="#getInputType">getInputType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Overwrites the default implementation to return the type of
-the pointer node.</p>
+							<p>Overwritten since the node type is inferred from the input type.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -107,13 +106,17 @@ the pointer node.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The input type.</dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#generateNodeType">Node#generateNodeType</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getInputType" translate="no">.<a href="#getInputType">getInputType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Overwritten since the node type is inferred from the input type.</p>
+							<p>Overwrites the default implementation to return the type of
+the pointer node.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -128,10 +131,7 @@ the pointer node.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getNodeType">Node#getNodeType</a></dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The input type.</dt>
 						</dl>
 					</div>
 				<h2 class="subsection-title">Source</h2>

+ 8 - 8
docs/pages/AtomicFunctionNode.html.md

@@ -48,27 +48,27 @@ A value that modifies the atomic variable.
 
 ## Methods
 
-### .getInputType( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
-Overwrites the default implementation to return the type of the pointer node.
+Overwritten since the node type is inferred from the input type.
 
 **builder**
 
 The current node builder.
 
-**Returns:** The input type.
+**Overrides:** [Node#generateNodeType](Node.html#generateNodeType)
 
-### .getNodeType( builder : NodeBuilder ) : string
+**Returns:** The node type.
 
-Overwritten since the node type is inferred from the input type.
+### .getInputType( builder : NodeBuilder ) : string
+
+Overwrites the default implementation to return the type of the pointer node.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [Node#getNodeType](Node.html#getNodeType)
-
-**Returns:** The node type.
+**Returns:** The input type.
 
 ## Source
 

+ 2 - 2
docs/pages/AudioContext.html

@@ -20,7 +20,7 @@
 					</div>
 				</div>
 				<h2 class="subsection-title">Static Methods</h2>
-					<h3 class="name name-method" id=".getContext" translate="no">.<a href="#.getContext">getContext</a><span class="signature">()</span><span class="type-signature"> : <a href="AudioContext.html">AudioContext</a></span> </h3>
+					<h3 class="name name-method" id=".getContext" translate="no">.<a href="#.getContext">getContext</a><span class="signature">()</span><span class="type-signature"> : Window.AudioContext</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Returns the global native audio context.</p>
@@ -29,7 +29,7 @@
 							<dt class="tag-returns"><strong>Returns:</strong> The native audio context.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id=".setContext" translate="no">.<a href="#.setContext">setContext</a><span class="signature">( value : <span class="param-type"><a href="AudioContext.html">AudioContext</a></span> )</span> </h3>
+					<h3 class="name name-method" id=".setContext" translate="no">.<a href="#.setContext">setContext</a><span class="signature">( value : <span class="param-type">Window.AudioContext</span> )</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Allows to set the global native audio context from outside.</p>

+ 2 - 2
docs/pages/AudioContext.html.md

@@ -4,13 +4,13 @@ Manages the global audio context in the engine.
 
 ## Static Methods
 
-### .getContext() : AudioContext
+### .getContext() : Window.AudioContext
 
 Returns the global native audio context.
 
 **Returns:** The native audio context.
 
-### .setContext( value : AudioContext )
+### .setContext( value : Window.AudioContext )
 
 Allows to set the global native audio context from outside.
 

+ 6 - 0
docs/pages/BufferAttribute.html

@@ -337,6 +337,12 @@ given indices.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this instance.</dt>
 						</dl>
 					</div>
+					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Disposes of the buffer attribute. Available only in <a href="WebGPURenderer.html">WebGPURenderer</a>.</p>
+						</div>
+					</div>
 					<h3 class="name name-method" id="getComponent" translate="no">.<a href="#getComponent">getComponent</a><span class="signature">( index : <span class="param-type">number</span>, component : <span class="param-type">number</span> )</span><span class="type-signature"> : number</span> </h3>
 					<div class="method">
 						<div class="description">

+ 4 - 0
docs/pages/BufferAttribute.html.md

@@ -178,6 +178,10 @@ The source index into the given buffer attribute.
 
 **Returns:** A reference to this instance.
 
+### .dispose()
+
+Disposes of the buffer attribute. Available only in [WebGPURenderer](WebGPURenderer.html).
+
 ### .getComponent( index : number, component : number ) : number
 
 Returns the given component of the vector at the given index.

+ 14 - 14
docs/pages/BufferAttributeNode.html

@@ -165,11 +165,11 @@ if you are planning to update the attribute data per frame.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The generated code snippet.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getHash" translate="no">.<a href="#getHash">getHash</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>This method is overwritten since the attribute data might be shared
-and thus the hash should be shared as well.</p>
+							<p>This method is overwritten since the node type is inferred from
+the buffer attribute.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -184,16 +184,17 @@ and thus the hash should be shared as well.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="InputNode.html#getHash">InputNode#getHash</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="InputNode.html#generateNodeType">InputNode#generateNodeType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The hash.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getInputType" translate="no">.<a href="#getInputType">getInputType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getHash" translate="no">.<a href="#getHash">getHash</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Overwrites the default implementation to return a fixed value <code>'bufferAttribute'</code>.</p>
+							<p>This method is overwritten since the attribute data might be shared
+and thus the hash should be shared as well.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -208,17 +209,16 @@ and thus the hash should be shared as well.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="InputNode.html#getInputType">InputNode#getInputType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="InputNode.html#getHash">InputNode#getHash</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The input type.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The hash.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getInputType" translate="no">.<a href="#getInputType">getInputType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>This method is overwritten since the node type is inferred from
-the buffer attribute.</p>
+							<p>Overwrites the default implementation to return a fixed value <code>'bufferAttribute'</code>.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -233,10 +233,10 @@ the buffer attribute.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="InputNode.html#getNodeType">InputNode#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="InputNode.html#getInputType">InputNode#getInputType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The input type.</dt>
 						</dl>
 					</div>
 					<h3 class="name name-method" id="setInstanced" translate="no">.<a href="#setInstanced">setInstanced</a><span class="signature">( value : <span class="param-type">boolean</span> )</span><span class="type-signature"> : <a href="BufferAttributeNode.html">BufferAttributeNode</a></span> </h3>

+ 12 - 12
docs/pages/BufferAttributeNode.html.md

@@ -116,41 +116,41 @@ The current node builder.
 
 **Returns:** The generated code snippet.
 
-### .getHash( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
-This method is overwritten since the attribute data might be shared and thus the hash should be shared as well.
+This method is overwritten since the node type is inferred from the buffer attribute.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [InputNode#getHash](InputNode.html#getHash)
+**Overrides:** [InputNode#generateNodeType](InputNode.html#generateNodeType)
 
-**Returns:** The hash.
+**Returns:** The node type.
 
-### .getInputType( builder : NodeBuilder ) : string
+### .getHash( builder : NodeBuilder ) : string
 
-Overwrites the default implementation to return a fixed value `'bufferAttribute'`.
+This method is overwritten since the attribute data might be shared and thus the hash should be shared as well.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [InputNode#getInputType](InputNode.html#getInputType)
+**Overrides:** [InputNode#getHash](InputNode.html#getHash)
 
-**Returns:** The input type.
+**Returns:** The hash.
 
-### .getNodeType( builder : NodeBuilder ) : string
+### .getInputType( builder : NodeBuilder ) : string
 
-This method is overwritten since the node type is inferred from the buffer attribute.
+Overwrites the default implementation to return a fixed value `'bufferAttribute'`.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [InputNode#getNodeType](InputNode.html#getNodeType)
+**Overrides:** [InputNode#getInputType](InputNode.html#getInputType)
 
-**Returns:** The node type.
+**Returns:** The input type.
 
 ### .setInstanced( value : boolean ) : BufferAttributeNode
 

+ 0 - 32
docs/pages/ChromaticAberrationNode.html

@@ -91,17 +91,6 @@ by separating and offsetting the red, green, and blue channels.</p></div>
 						<p>The texture node that represents the input of the effect.</p>
 					</div>
 				</div>
-				<div class="member">
-					<h3 class="name" id="updateBeforeType" translate="no">.<a href="#updateBeforeType">updateBeforeType</a><span class="type-signature"> : string</span> </h3>
-					<div class="description">
-						<p>The <code>updateBeforeType</code> is set to <code>NodeUpdateType.FRAME</code> since the node updates
-its internal uniforms once per frame in <code>updateBefore()</code>.</p>
-						<p>Default is <code>'frame'</code>.</p>
-					</div>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#updateBeforeType">TempNode#updateBeforeType</a></dt>
-						</dl>
-				</div>
 				<h2 class="subsection-title">Methods</h2>
 					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : ShaderCallNodeInternal</span> </h3>
 					<div class="method">
@@ -124,27 +113,6 @@ its internal uniforms once per frame in <code>updateBefore()</code>.</p>
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#setup">TempNode#setup</a></dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="updateBefore" translate="no">.<a href="#updateBefore">updateBefore</a><span class="signature">( frame : <span class="param-type"><a href="NodeFrame.html">NodeFrame</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>This method is used to update the effect's uniforms once per frame.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">frame</strong>
-									</td>
-									<td class="description last">
-										<p>The current node frame.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#updateBefore">TempNode#updateBefore</a></dt>
-						</dl>
-					</div>
 				<h2 class="subsection-title">Source</h2>
 				<p>
 					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/ChromaticAberrationNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/display/ChromaticAberrationNode.js</a>

+ 0 - 18
docs/pages/ChromaticAberrationNode.html.md

@@ -52,14 +52,6 @@ A node holding the strength of the effect.
 
 The texture node that represents the input of the effect.
 
-### .updateBeforeType : string
-
-The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates its internal uniforms once per frame in `updateBefore()`.
-
-Default is `'frame'`.
-
-**Overrides:** [TempNode#updateBeforeType](TempNode.html#updateBeforeType)
-
 ## Methods
 
 ### .setup( builder : NodeBuilder ) : ShaderCallNodeInternal
@@ -72,16 +64,6 @@ The current node builder.
 
 **Overrides:** [TempNode#setup](TempNode.html#setup)
 
-### .updateBefore( frame : NodeFrame )
-
-This method is used to update the effect's uniforms once per frame.
-
-**frame**
-
-The current node frame.
-
-**Overrides:** [TempNode#updateBefore](TempNode.html#updateBefore)
-
 ## Source
 
 [examples/jsm/tsl/display/ChromaticAberrationNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/ChromaticAberrationNode.js)

+ 13 - 13
docs/pages/ComputeBuiltinNode.html

@@ -48,10 +48,10 @@ about the currently running dispatch and/or the device it is running on.</p>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getBuiltinName" translate="no">.<a href="#getBuiltinName">getBuiltinName</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns the builtin name.</p>
+							<p>This method is overwritten since the node type is simply derived from <code>nodeType</code>..</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -66,13 +66,16 @@ about the currently running dispatch and/or the device it is running on.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The builtin name.</dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#generateNodeType">Node#generateNodeType</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getHash" translate="no">.<a href="#getHash">getHash</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getBuiltinName" translate="no">.<a href="#getBuiltinName">getBuiltinName</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>This method is overwritten since hash is derived from the built-in name.</p>
+							<p>Returns the builtin name.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -87,16 +90,13 @@ about the currently running dispatch and/or the device it is running on.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getHash">Node#getHash</a></dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The hash.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The builtin name.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getHash" translate="no">.<a href="#getHash">getHash</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>This method is overwritten since the node type is simply derived from <code>nodeType</code>..</p>
+							<p>This method is overwritten since hash is derived from the built-in name.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -111,10 +111,10 @@ about the currently running dispatch and/or the device it is running on.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getNodeType">Node#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getHash">Node#getHash</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The hash.</dt>
 						</dl>
 					</div>
 					<h3 class="name name-method" id="hasBuiltin" translate="no">.<a href="#hasBuiltin">hasBuiltin</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : boolean</span> </h3>

+ 12 - 12
docs/pages/ComputeBuiltinNode.html.md

@@ -22,39 +22,39 @@ The node type.
 
 ## Methods
 
-### .getBuiltinName( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
-Returns the builtin name.
+This method is overwritten since the node type is simply derived from `nodeType`..
 
 **builder**
 
 The current node builder.
 
-**Returns:** The builtin name.
+**Overrides:** [Node#generateNodeType](Node.html#generateNodeType)
 
-### .getHash( builder : NodeBuilder ) : string
+**Returns:** The node type.
 
-This method is overwritten since hash is derived from the built-in name.
+### .getBuiltinName( builder : NodeBuilder ) : string
+
+Returns the builtin name.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [Node#getHash](Node.html#getHash)
-
-**Returns:** The hash.
+**Returns:** The builtin name.
 
-### .getNodeType( builder : NodeBuilder ) : string
+### .getHash( builder : NodeBuilder ) : string
 
-This method is overwritten since the node type is simply derived from `nodeType`..
+This method is overwritten since hash is derived from the built-in name.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [Node#getNodeType](Node.html#getNodeType)
+**Overrides:** [Node#getHash](Node.html#getHash)
 
-**Returns:** The node type.
+**Returns:** The hash.
 
 ### .hasBuiltin( builder : NodeBuilder ) : boolean
 

+ 25 - 34
docs/pages/ComputeNode.html

@@ -13,7 +13,7 @@
 	<h1 translate="no">ComputeNode</h1>
 		<section>
 			<header>
-				<div class="class-description"><p>TODO</p></div>
+				<div class="class-description"><p>Represents a compute shader node.</p></div>
 			</header>
 			<article>
 				<div class="container-overview">
@@ -30,7 +30,7 @@
 										<strong translate="no">computeNode</strong>
 									</td>
 									<td class="description last">
-										<p>TODO</p>
+										<p>The node that defines the compute shader logic.</p>
 									</td>
 								</tr>
 								<tr>
@@ -38,7 +38,7 @@
 										<strong translate="no">workgroupSize</strong>
 									</td>
 									<td class="description last">
-										<p>TODO.</p>
+										<p>An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.</p>
 									</td>
 								</tr>
 							</tbody>
@@ -49,13 +49,28 @@
 				<div class="member">
 					<h3 class="name" id="computeNode" translate="no">.<a href="#computeNode">computeNode</a><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
 					<div class="description">
-						<p>TODO</p>
+						<p>The node that defines the compute shader logic.</p>
 					</div>
 				</div>
 				<div class="member">
 					<h3 class="name" id="count" translate="no">.<a href="#count">count</a><span class="type-signature"> : number | Array.&lt;number></span> </h3>
 					<div class="description">
-						<p>TODO</p>
+						<p>The total number of threads (invocations) to execute. If it is a number, it will be used
+to automatically generate bounds checking against <code>instanceIndex</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="countNode" translate="no">.<a href="#countNode">countNode</a><span class="type-signature"> : <a href="UniformNode.html">UniformNode</a></span> </h3>
+					<div class="description">
+						<p>A uniform node holding the dispatch count for bounds checking.
+Created automatically when <code>count</code> is a number.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="dispatchSize" translate="no">.<a href="#dispatchSize">dispatchSize</a><span class="type-signature"> : number | Array.&lt;number></span> </h3>
+					<div class="description">
+						<p>The dispatch size for workgroups on X, Y, and Z axes.
+Used directly if <code>count</code> is not provided.</p>
 					</div>
 				</div>
 				<div class="member">
@@ -78,7 +93,7 @@
 				<div class="member">
 					<h3 class="name" id="onInitFunction" translate="no">.<a href="#onInitFunction">onInitFunction</a><span class="type-signature"> : function</span> </h3>
 					<div class="description">
-						<p>TODO</p>
+						<p>A callback executed when the compute node finishes initialization.</p>
 					</div>
 				</div>
 				<div class="member">
@@ -95,7 +110,7 @@ is executed once per object by default.</p>
 				<div class="member">
 					<h3 class="name" id="version" translate="no">.<a href="#version">version</a><span class="type-signature"> : number</span> </h3>
 					<div class="description">
-						<p>TODO</p>
+						<p>The version of the node.</p>
 					</div>
 						<dl class="details">
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#version">Node#version</a></dt>
@@ -104,7 +119,7 @@ is executed once per object by default.</p>
 				<div class="member">
 					<h3 class="name" id="workgroupSize" translate="no">.<a href="#workgroupSize">workgroupSize</a><span class="type-signature"> : Array.&lt;number></span> </h3>
 					<div class="description">
-						<p>TODO</p>
+						<p>An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.</p>
 						<p>Default is <code>[ 64 ]</code>.</p>
 					</div>
 				</div>
@@ -118,12 +133,6 @@ is executed once per object by default.</p>
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#dispose">Node#dispose</a></dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getCount" translate="no">.<a href="#getCount">getCount</a><span class="signature">()</span><span class="type-signature"> : number | Array.&lt;number></span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>TODO</p>
-						</div>
-					</div>
 					<h3 class="name name-method" id="label" translate="no">.<a href="#label">label</a><span class="signature">( name : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="ComputeNode.html">ComputeNode</a></span> </h3>
 					<div class="method">
 						<div class="description">
@@ -151,7 +160,7 @@ is executed once per object by default.</p>
 					<h3 class="name name-method" id="onInit" translate="no">.<a href="#onInit">onInit</a><span class="signature">( callback : <span class="param-type">function</span> )</span><span class="type-signature"> : <a href="ComputeNode.html">ComputeNode</a></span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>TODO</p>
+							<p>Sets the callback to run during initialization.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -160,7 +169,7 @@ is executed once per object by default.</p>
 										<strong translate="no">callback</strong>
 									</td>
 									<td class="description last">
-										<p>TODO.</p>
+										<p>The callback function.</p>
 									</td>
 								</tr>
 							</tbody>
@@ -169,24 +178,6 @@ is executed once per object by default.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this node.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="setCount" translate="no">.<a href="#setCount">setCount</a><span class="signature">( count : <span class="param-type">number | Array.&lt;number></span> )</span><span class="type-signature"> : <a href="ComputeNode.html">ComputeNode</a></span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>TODO</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">count</strong>
-									</td>
-									<td class="description last">
-										<p>Array with [ x, y, z ] values for dispatch or a single number for the count</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
 					<h3 class="name name-method" id="setName" translate="no">.<a href="#setName">setName</a><span class="signature">( name : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="ComputeNode.html">ComputeNode</a></span> </h3>
 					<div class="method">
 						<div class="description">

+ 18 - 22
docs/pages/ComputeNode.html.md

@@ -2,7 +2,7 @@
 
 # ComputeNode
 
-TODO
+Represents a compute shader node.
 
 ## Constructor
 
@@ -12,21 +12,29 @@ Constructs a new compute node.
 
 **computeNode**
 
-TODO
+The node that defines the compute shader logic.
 
 **workgroupSize**
 
-TODO.
+An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
 
 ## Properties
 
 ### .computeNode : Node
 
-TODO
+The node that defines the compute shader logic.
 
 ### .count : number | Array.<number>
 
-TODO
+The total number of threads (invocations) to execute. If it is a number, it will be used to automatically generate bounds checking against `instanceIndex`.
+
+### .countNode : UniformNode
+
+A uniform node holding the dispatch count for bounds checking. Created automatically when `count` is a number.
+
+### .dispatchSize : number | Array.<number>
+
+The dispatch size for workgroups on X, Y, and Z axes. Used directly if `count` is not provided.
 
 ### .isComputeNode : boolean (readonly)
 
@@ -44,7 +52,7 @@ Default is `''`.
 
 ### .onInitFunction : function
 
-TODO
+A callback executed when the compute node finishes initialization.
 
 ### .updateBeforeType : string
 
@@ -56,13 +64,13 @@ Default is `'object'`.
 
 ### .version : number
 
-TODO
+The version of the node.
 
 **Overrides:** [Node#version](Node.html#version)
 
 ### .workgroupSize : Array.<number>
 
-TODO
+An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
 
 Default is `[ 64 ]`.
 
@@ -74,10 +82,6 @@ Executes the `dispose` event for this node.
 
 **Overrides:** [Node#dispose](Node.html#dispose)
 
-### .getCount() : number | Array.<number>
-
-TODO
-
 ### .label( name : string ) : ComputeNode
 
 Sets the [ComputeNode#name](ComputeNode.html#name) property.
@@ -92,22 +96,14 @@ The name of the uniform.
 
 ### .onInit( callback : function ) : ComputeNode
 
-TODO
+Sets the callback to run during initialization.
 
 **callback**
 
-TODO.
+The callback function.
 
 **Returns:** A reference to this node.
 
-### .setCount( count : number | Array.<number> ) : ComputeNode
-
-TODO
-
-**count**
-
-Array with \[ x, y, z \] values for dispatch or a single number for the count
-
 ### .setName( name : string ) : ComputeNode
 
 Sets the [ComputeNode#name](ComputeNode.html#name) property.

+ 2 - 2
docs/pages/ConditionalNode.html

@@ -82,7 +82,7 @@ determine the outcome of the entire statement.</p></div>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>This method is overwritten since the node type is inferred from the if/else
@@ -101,7 +101,7 @@ nodes.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getNodeType">Node#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#generateNodeType">Node#generateNodeType</a></dt>
 						</dl>
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>

+ 2 - 2
docs/pages/ConditionalNode.html.md

@@ -52,7 +52,7 @@ The node that is evaluate when the condition ends up `true`.
 
 ## Methods
 
-### .getNodeType( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
 This method is overwritten since the node type is inferred from the if/else nodes.
 
@@ -60,7 +60,7 @@ This method is overwritten since the node type is inferred from the if/else node
 
 The current node builder.
 
-**Overrides:** [Node#getNodeType](Node.html#getNodeType)
+**Overrides:** [Node#generateNodeType](Node.html#generateNodeType)
 
 **Returns:** The node type.
 

+ 24 - 24
docs/pages/ContextNode.html

@@ -80,6 +80,30 @@ scenePass.contextNode = context( { getUV: () => customCoord } );
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is overwritten to ensure it returns the type of <a href="ContextNode.html#node">ContextNode#node</a>.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">builder</strong>
+									</td>
+									<td class="description last">
+										<p>The current node builder.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#generateNodeType">Node#generateNodeType</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="getFlowContextData" translate="no">.<a href="#getFlowContextData">getFlowContextData</a><span class="signature">()</span><span class="type-signature"> : Object</span> </h3>
 					<div class="method">
 						<div class="description">
@@ -121,30 +145,6 @@ scenePass.contextNode = context( { getUV: () => customCoord } );
 							<dt class="tag-returns"><strong>Returns:</strong> The member type.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>This method is overwritten to ensure it returns the type of <a href="ContextNode.html#node">ContextNode#node</a>.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">builder</strong>
-									</td>
-									<td class="description last">
-										<p>The current node builder.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getNodeType">Node#getNodeType</a></dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
-						</dl>
-					</div>
 					<h3 class="name name-method" id="getScope" translate="no">.<a href="#getScope">getScope</a><span class="signature">()</span><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
 					<div class="method">
 						<div class="description">

+ 12 - 12
docs/pages/ContextNode.html.md

@@ -54,6 +54,18 @@ Default is `{}`.
 
 ## Methods
 
+### .generateNodeType( builder : NodeBuilder ) : string
+
+This method is overwritten to ensure it returns the type of [ContextNode#node](ContextNode.html#node).
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [Node#generateNodeType](Node.html#generateNodeType)
+
+**Returns:** The node type.
+
 ### .getFlowContextData() : Object
 
 Gathers the context data from all parent context nodes.
@@ -76,18 +88,6 @@ The member name.
 
 **Returns:** The member type.
 
-### .getNodeType( builder : NodeBuilder ) : string
-
-This method is overwritten to ensure it returns the type of [ContextNode#node](ContextNode.html#node).
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [Node#getNodeType](Node.html#getNodeType)
-
-**Returns:** The node type.
-
 ### .getScope() : Node
 
 This method is overwritten to ensure it returns the reference to [ContextNode#node](ContextNode.html#node).

+ 2 - 2
docs/pages/ConvertNode.html

@@ -61,7 +61,7 @@ meaning it converts the data type of a node to a target data type.</p></div>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>This method is overwritten since the implementation tries to infer the best
@@ -80,7 +80,7 @@ matching type from the <a href="ConvertNode.html#convertTo">ConvertNode#convertT
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getNodeType">Node#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#generateNodeType">Node#generateNodeType</a></dt>
 						</dl>
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>

+ 2 - 2
docs/pages/ConvertNode.html.md

@@ -30,7 +30,7 @@ The node which type should be converted.
 
 ## Methods
 
-### .getNodeType( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
 This method is overwritten since the implementation tries to infer the best matching type from the [ConvertNode#convertTo](ConvertNode.html#convertTo) property.
 
@@ -38,7 +38,7 @@ This method is overwritten since the implementation tries to infer the best matc
 
 The current node builder.
 
-**Overrides:** [Node#getNodeType](Node.html#getNodeType)
+**Overrides:** [Node#generateNodeType](Node.html#generateNodeType)
 
 **Returns:** The node type.
 

+ 34 - 0
docs/pages/DirectionalLightDataNode.html

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>DirectionalLightDataNode - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → </p>
+	<h1 translate="no">DirectionalLightDataNode</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Batched data node for directional lights in dynamic lighting mode.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="DirectionalLightDataNode" translate="no">new <a href="#DirectionalLightDataNode">DirectionalLightDataNode</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 13 - 0
docs/pages/DirectionalLightDataNode.html.md

@@ -0,0 +1,13 @@
+*Inheritance: EventDispatcher → Node →*
+
+# DirectionalLightDataNode
+
+Batched data node for directional lights in dynamic lighting mode.
+
+## Constructor
+
+### new DirectionalLightDataNode()
+
+## Source
+
+[examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js)

+ 152 - 0
docs/pages/DynamicLighting.html

@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>DynamicLighting - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="Lighting.html">Lighting</a> → </p>
+	<h1 translate="no">DynamicLighting</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>A custom lighting implementation that batches supported analytic lights into
+uniform arrays so light count changes do not recompile materials.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const lighting = new DynamicLighting( { maxPointLights: 64 } );
+renderer.lighting = lighting;
+</code></pre></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">DynamicLighting</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
+				<pre><code class="language-js">import { DynamicLighting } from 'three/addons/lighting/DynamicLighting.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="DynamicLighting" translate="no">new <a href="#DynamicLighting">DynamicLighting</a><span class="signature">( options : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new dynamic lighting system.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>Dynamic lighting configuration.</p>
+										<p>Default is <code>{}</code>.</p>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxDirectionalLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of batched directional lights.</p>
+										<p>Default is <code>8</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxPointLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of batched point lights.</p>
+										<p>Default is <code>16</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxSpotLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of batched spot lights.</p>
+										<p>Default is <code>16</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxHemisphereLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of batched hemisphere lights.</p>
+										<p>Default is <code>4</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Classes</h2>
+				<dl>
+					<dt><a href="DynamicLighting.html">DynamicLighting</a></dt>
+					<dd></dd>
+				</dl>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="createNode" translate="no">.<a href="#createNode">createNode</a><span class="signature">( lights : <span class="param-type">Array.&lt;<a href="Light.html">Light</a>></span> )</span><span class="type-signature"> : <a href="DynamicLightsNode.html">DynamicLightsNode</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a new dynamic lights node for the given array of lights.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">lights</strong>
+									</td>
+									<td class="description last">
+										<p>The lights to bind to the node.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Lighting.html#createNode">Lighting#createNode</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The dynamic lights node.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getNode" translate="no">.<a href="#getNode">getNode</a><span class="signature">( scene : <span class="param-type"><a href="Scene.html">Scene</a></span> )</span><span class="type-signature"> : <a href="LightsNode.html">LightsNode</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns a lights node for the given scene.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">scene</strong>
+									</td>
+									<td class="description last">
+										<p>The scene.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Lighting.html#getNode">Lighting#getNode</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The lights node.</dt>
+						</dl>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/lighting/DynamicLighting.js" translate="no" target="_blank" rel="noopener">examples/jsm/lighting/DynamicLighting.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 90 - 0
docs/pages/DynamicLighting.html.md

@@ -0,0 +1,90 @@
+*Inheritance: Lighting →*
+
+# DynamicLighting
+
+A custom lighting implementation that batches supported analytic lights into uniform arrays so light count changes do not recompile materials.
+
+## Code Example
+
+```js
+const lighting = new DynamicLighting( { maxPointLights: 64 } );
+renderer.lighting = lighting;
+```
+
+## Import
+
+DynamicLighting is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { DynamicLighting } from 'three/addons/lighting/DynamicLighting.js';
+```
+
+## Constructor
+
+### new DynamicLighting( options : Object )
+
+Constructs a new dynamic lighting system.
+
+**options**
+
+Dynamic lighting configuration.
+
+Default is `{}`.
+
+**maxDirectionalLights**
+
+Maximum number of batched directional lights.
+
+Default is `8`.
+
+**maxPointLights**
+
+Maximum number of batched point lights.
+
+Default is `16`.
+
+**maxSpotLights**
+
+Maximum number of batched spot lights.
+
+Default is `16`.
+
+**maxHemisphereLights**
+
+Maximum number of batched hemisphere lights.
+
+Default is `4`.
+
+## Classes
+
+[DynamicLighting](DynamicLighting.html)
+
+## Methods
+
+### .createNode( lights : Array.<Light> ) : DynamicLightsNode
+
+Creates a new dynamic lights node for the given array of lights.
+
+**lights**
+
+The lights to bind to the node.
+
+**Overrides:** [Lighting#createNode](Lighting.html#createNode)
+
+**Returns:** The dynamic lights node.
+
+### .getNode( scene : Scene ) : LightsNode
+
+Returns a lights node for the given scene.
+
+**scene**
+
+The scene.
+
+**Overrides:** [Lighting#getNode](Lighting.html#getNode)
+
+**Returns:** The lights node.
+
+## Source
+
+[examples/jsm/lighting/DynamicLighting.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/lighting/DynamicLighting.js)

+ 96 - 0
docs/pages/DynamicLightsNode.html

@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>DynamicLightsNode - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → <a href="LightsNode.html">LightsNode</a> → </p>
+	<h1 translate="no">DynamicLightsNode</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>A custom version of <code>LightsNode</code> that batches supported analytic lights into
+uniform arrays and loops.</p>
+<p>Unsupported lights, node lights, shadow-casting lights, and projected spot
+lights keep the default per-light path.</p></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">DynamicLightsNode</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
+				<pre><code class="language-js">import { DynamicLightsNode } from 'three/addons/tsl/lighting/DynamicLightsNode.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="DynamicLightsNode" translate="no">new <a href="#DynamicLightsNode">DynamicLightsNode</a><span class="signature">( options : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new dynamic lights node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>Dynamic lighting configuration.</p>
+										<p>Default is <code>{}</code>.</p>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxDirectionalLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of batched directional lights.</p>
+										<p>Default is <code>8</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxPointLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of batched point lights.</p>
+										<p>Default is <code>16</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxSpotLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of batched spot lights.</p>
+										<p>Default is <code>16</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxHemisphereLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of batched hemisphere lights.</p>
+										<p>Default is <code>4</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/DynamicLightsNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/lighting/DynamicLightsNode.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 55 - 0
docs/pages/DynamicLightsNode.html.md

@@ -0,0 +1,55 @@
+*Inheritance: EventDispatcher → Node → LightsNode →*
+
+# DynamicLightsNode
+
+A custom version of `LightsNode` that batches supported analytic lights into uniform arrays and loops.
+
+Unsupported lights, node lights, shadow-casting lights, and projected spot lights keep the default per-light path.
+
+## Import
+
+DynamicLightsNode is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { DynamicLightsNode } from 'three/addons/tsl/lighting/DynamicLightsNode.js';
+```
+
+## Constructor
+
+### new DynamicLightsNode( options : Object )
+
+Constructs a new dynamic lights node.
+
+**options**
+
+Dynamic lighting configuration.
+
+Default is `{}`.
+
+**maxDirectionalLights**
+
+Maximum number of batched directional lights.
+
+Default is `8`.
+
+**maxPointLights**
+
+Maximum number of batched point lights.
+
+Default is `16`.
+
+**maxSpotLights**
+
+Maximum number of batched spot lights.
+
+Default is `16`.
+
+**maxHemisphereLights**
+
+Maximum number of batched hemisphere lights.
+
+Default is `4`.
+
+## Source
+
+[examples/jsm/tsl/lighting/DynamicLightsNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/DynamicLightsNode.js)

+ 29 - 1
docs/pages/EXRLoader.html

@@ -14,7 +14,7 @@
 		<section>
 			<header>
 				<div class="class-description"><p>A loader for the OpenEXR texture format.</p>
-<p><code>EXRLoader</code> currently supports uncompressed, ZIP(S), RLE, PIZ and DWA/B compression.
+<p><code>EXRLoader</code> currently supports uncompressed, ZIP(S), RLE, PIZ, B44/A and DWA/B compression.
 Supports reading as UnsignedByte, HalfFloat and Float type data texture.</p></div>
 				<h2>Code Example</h2>
 				<div translate="no"><pre><code class="language-js">const loader = new EXRLoader();
@@ -54,6 +54,13 @@ const texture = await loader.loadAsync( 'textures/memorial.exr' );
 						<p>Default is <code>RGBAFormat</code>.</p>
 					</div>
 				</div>
+				<div class="member">
+					<h3 class="name" id="part" translate="no">.<a href="#part">part</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>For multi-part EXR files, the index of the part to load.</p>
+						<p>Default is <code>0</code>.</p>
+					</div>
+				</div>
 				<div class="member">
 					<h3 class="name" id="type" translate="no">.<a href="#type">type</a><span class="type-signature"> : <a href="global.html#HalfFloatType">HalfFloatType</a> | <a href="global.html#FloatType">FloatType</a></span> </h3>
 					<div class="description">
@@ -128,6 +135,27 @@ const texture = await loader.loadAsync( 'textures/memorial.exr' );
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this loader.</dt>
 						</dl>
 					</div>
+					<h3 class="name name-method" id="setPart" translate="no">.<a href="#setPart">setPart</a><span class="signature">( value : <span class="param-type">number</span> )</span><span class="type-signature"> : <a href="EXRLoader.html">EXRLoader</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>For multi-part EXR files, sets which part to load.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">value</strong>
+									</td>
+									<td class="description last">
+										<p>The part index to load.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this loader.</dt>
+						</dl>
+					</div>
 				<h2 class="subsection-title">Source</h2>
 				<p>
 					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/EXRLoader.js" translate="no" target="_blank" rel="noopener">examples/jsm/loaders/EXRLoader.js</a>

+ 17 - 1
docs/pages/EXRLoader.html.md

@@ -4,7 +4,7 @@
 
 A loader for the OpenEXR texture format.
 
-`EXRLoader` currently supports uncompressed, ZIP(S), RLE, PIZ and DWA/B compression. Supports reading as UnsignedByte, HalfFloat and Float type data texture.
+`EXRLoader` currently supports uncompressed, ZIP(S), RLE, PIZ, B44/A and DWA/B compression. Supports reading as UnsignedByte, HalfFloat and Float type data texture.
 
 ## Code Example
 
@@ -39,6 +39,12 @@ Texture output format.
 
 Default is `RGBAFormat`.
 
+### .part : number
+
+For multi-part EXR files, the index of the part to load.
+
+Default is `0`.
+
 ### .type : HalfFloatType | FloatType
 
 The texture type.
@@ -79,6 +85,16 @@ Texture output format.
 
 **Returns:** A reference to this loader.
 
+### .setPart( value : number ) : EXRLoader
+
+For multi-part EXR files, sets which part to load.
+
+**value**
+
+The part index to load.
+
+**Returns:** A reference to this loader.
+
 ## Source
 
 [examples/jsm/loaders/EXRLoader.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/EXRLoader.js)

+ 201 - 0
docs/pages/FSR1Node.html

@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>FSR1Node - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → <a href="TempNode.html">TempNode</a> → </p>
+	<h1 translate="no">FSR1Node</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Post processing node for applying AMD FidelityFX Super Resolution 1 (FSR 1).</p>
+<p>Combines two passes:</p>
+<ul>
+<li><strong>EASU</strong> (Edge-Adaptive Spatial Upsampling): Uses 12 texture samples in a cross pattern
+to detect local edge direction, then shapes an approximate Lanczos2 kernel into an
+ellipse aligned with the detected edge.</li>
+<li><strong>RCAS</strong> (Robust Contrast-Adaptive Sharpening): Uses a 5-tap cross pattern to apply
+contrast-aware sharpening that is automatically limited per-pixel to avoid artifacts.</li>
+</ul>
+<p>Note: Only use FSR 1 if your application is fragment-shader bound and cannot afford to render
+at full resolution. FSR 1 adds its own overhead, so simply shaded scenes will render faster
+at native resolution without it. Besides, FSR 1 should always be used with an anti-aliased
+source image.</p>
+<p>Reference: <a href="https://gpuopen.com/fidelityfx-superresolution/" target="_blank" rel="noopener">https://gpuopen.com/fidelityfx-superresolution/</a>.</p></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">FSR1Node</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
+				<pre><code class="language-js">import { fsr1 } from 'three/addons/tsl/display/fsr1/FSR1Node.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="FSR1Node" translate="no">new <a href="#FSR1Node">FSR1Node</a><span class="signature">( textureNode : <span class="param-type"><a href="TextureNode.html">TextureNode</a></span>, sharpness : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span>, denoise : <span class="param-type"><a href="Node.html">Node</a>.&lt;bool></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new FSR 1 node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">textureNode</strong>
+									</td>
+									<td class="description last">
+										<p>The texture node that represents the input of the effect.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">sharpness</strong>
+									</td>
+									<td class="description last">
+										<p>RCAS sharpening strength. 0 = maximum sharpening, 2 = no sharpening.</p>
+										<p>Default is <code>0.2</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">denoise</strong>
+									</td>
+									<td class="description last">
+										<p>Whether to attenuate RCAS sharpening in noisy areas.</p>
+										<p>Default is <code>false</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="denoise" translate="no">.<a href="#denoise">denoise</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;bool></span> </h3>
+					<div class="description">
+						<p>Whether to attenuate RCAS sharpening in noisy areas.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="sharpness" translate="no">.<a href="#sharpness">sharpness</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
+					<div class="description">
+						<p>RCAS sharpening strength. 0 = maximum, 2 = none.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="textureNode" translate="no">.<a href="#textureNode">textureNode</a><span class="type-signature"> : <a href="TextureNode.html">TextureNode</a></span> </h3>
+					<div class="description">
+						<p>The texture node that represents the input of the effect.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="updateBeforeType" translate="no">.<a href="#updateBeforeType">updateBeforeType</a><span class="type-signature"> : string</span> </h3>
+					<div class="description">
+						<p>The <code>updateBeforeType</code> is set to <code>NodeUpdateType.FRAME</code> since the node renders
+its effect once per frame in <code>updateBefore()</code>.</p>
+						<p>Default is <code>'frame'</code>.</p>
+					</div>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#updateBeforeType">TempNode#updateBeforeType</a></dt>
+						</dl>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Frees internal resources. This method should be called
+when the effect is no longer required.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#dispose">TempNode#dispose</a></dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getTextureNode" translate="no">.<a href="#getTextureNode">getTextureNode</a><span class="signature">()</span><span class="type-signature"> : <a href="PassTextureNode.html">PassTextureNode</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the result of the effect as a texture node.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A texture node that represents the result of the effect.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="setSize" translate="no">.<a href="#setSize">setSize</a><span class="signature">( width : <span class="param-type">number</span>, height : <span class="param-type">number</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets the output size of the effect.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">width</strong>
+									</td>
+									<td class="description last">
+										<p>The width in pixels.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">height</strong>
+									</td>
+									<td class="description last">
+										<p>The height in pixels.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="PassTextureNode.html">PassTextureNode</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is used to setup the effect's TSL code.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">builder</strong>
+									</td>
+									<td class="description last">
+										<p>The current node builder.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#setup">TempNode#setup</a></dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="updateBefore" translate="no">.<a href="#updateBefore">updateBefore</a><span class="signature">( frame : <span class="param-type"><a href="NodeFrame.html">NodeFrame</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is used to render the effect once per frame.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">frame</strong>
+									</td>
+									<td class="description last">
+										<p>The current node frame.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#updateBefore">TempNode#updateBefore</a></dt>
+						</dl>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/FSR1Node.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/display/FSR1Node.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 116 - 0
docs/pages/FSR1Node.html.md

@@ -0,0 +1,116 @@
+*Inheritance: EventDispatcher → Node → TempNode →*
+
+# FSR1Node
+
+Post processing node for applying AMD FidelityFX Super Resolution 1 (FSR 1).
+
+Combines two passes:
+
+*   **EASU** (Edge-Adaptive Spatial Upsampling): Uses 12 texture samples in a cross pattern to detect local edge direction, then shapes an approximate Lanczos2 kernel into an ellipse aligned with the detected edge.
+*   **RCAS** (Robust Contrast-Adaptive Sharpening): Uses a 5-tap cross pattern to apply contrast-aware sharpening that is automatically limited per-pixel to avoid artifacts.
+
+Note: Only use FSR 1 if your application is fragment-shader bound and cannot afford to render at full resolution. FSR 1 adds its own overhead, so simply shaded scenes will render faster at native resolution without it. Besides, FSR 1 should always be used with an anti-aliased source image.
+
+Reference: [https://gpuopen.com/fidelityfx-superresolution/](https://gpuopen.com/fidelityfx-superresolution/).
+
+## Import
+
+FSR1Node is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { fsr1 } from 'three/addons/tsl/display/fsr1/FSR1Node.js';
+```
+
+## Constructor
+
+### new FSR1Node( textureNode : TextureNode, sharpness : Node.<float>, denoise : Node.<bool> )
+
+Constructs a new FSR 1 node.
+
+**textureNode**
+
+The texture node that represents the input of the effect.
+
+**sharpness**
+
+RCAS sharpening strength. 0 = maximum sharpening, 2 = no sharpening.
+
+Default is `0.2`.
+
+**denoise**
+
+Whether to attenuate RCAS sharpening in noisy areas.
+
+Default is `false`.
+
+## Properties
+
+### .denoise : Node.<bool>
+
+Whether to attenuate RCAS sharpening in noisy areas.
+
+### .sharpness : Node.<float>
+
+RCAS sharpening strength. 0 = maximum, 2 = none.
+
+### .textureNode : TextureNode
+
+The texture node that represents the input of the effect.
+
+### .updateBeforeType : string
+
+The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders its effect once per frame in `updateBefore()`.
+
+Default is `'frame'`.
+
+**Overrides:** [TempNode#updateBeforeType](TempNode.html#updateBeforeType)
+
+## Methods
+
+### .dispose()
+
+Frees internal resources. This method should be called when the effect is no longer required.
+
+**Overrides:** [TempNode#dispose](TempNode.html#dispose)
+
+### .getTextureNode() : PassTextureNode
+
+Returns the result of the effect as a texture node.
+
+**Returns:** A texture node that represents the result of the effect.
+
+### .setSize( width : number, height : number )
+
+Sets the output size of the effect.
+
+**width**
+
+The width in pixels.
+
+**height**
+
+The height in pixels.
+
+### .setup( builder : NodeBuilder ) : PassTextureNode
+
+This method is used to setup the effect's TSL code.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [TempNode#setup](TempNode.html#setup)
+
+### .updateBefore( frame : NodeFrame )
+
+This method is used to render the effect once per frame.
+
+**frame**
+
+The current node frame.
+
+**Overrides:** [TempNode#updateBefore](TempNode.html#updateBefore)
+
+## Source
+
+[examples/jsm/tsl/display/FSR1Node.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/FSR1Node.js)

+ 1 - 4
docs/pages/FileLoader.html

@@ -73,7 +73,7 @@ const data = await loader.loadAsync( 'example.txt' );
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this instance.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="load" translate="no">.<a href="#load">load</a><span class="signature">( url : <span class="param-type">string</span>, onLoad : <span class="param-type">function</span>, onProgress : <span class="param-type"><a href="global.html#onProgressCallback">onProgressCallback</a></span>, onError : <span class="param-type"><a href="global.html#onErrorCallback">onErrorCallback</a></span> )</span><span class="type-signature"> : <a href="global.html#any">any</a> | undefined</span> </h3>
+					<h3 class="name name-method" id="load" translate="no">.<a href="#load">load</a><span class="signature">( url : <span class="param-type">string</span>, onLoad : <span class="param-type">function</span>, onProgress : <span class="param-type"><a href="global.html#onProgressCallback">onProgressCallback</a></span>, onError : <span class="param-type"><a href="global.html#onErrorCallback">onErrorCallback</a></span> )</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Starts loading from the given URL and pass the loaded response to the <code>onLoad()</code> callback.</p>
@@ -117,9 +117,6 @@ const data = await loader.loadAsync( 'example.txt' );
 						<dl class="details">
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Loader.html#load">Loader#load</a></dt>
 						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The cached resource if available.</dt>
-						</dl>
 					</div>
 					<h3 class="name name-method" id="setMimeType" translate="no">.<a href="#setMimeType">setMimeType</a><span class="signature">( value : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="FileLoader.html">FileLoader</a></span> </h3>
 					<div class="method">

+ 1 - 3
docs/pages/FileLoader.html.md

@@ -45,7 +45,7 @@ Aborts ongoing fetch requests.
 
 **Returns:** A reference to this instance.
 
-### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback ) : any | undefined
+### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )
 
 Starts loading from the given URL and pass the loaded response to the `onLoad()` callback.
 
@@ -67,8 +67,6 @@ Executed when errors occur.
 
 **Overrides:** [Loader#load](Loader.html#load)
 
-**Returns:** The cached resource if available.
-
 ### .setMimeType( value : string ) : FileLoader
 
 Sets the expected mime type of the loaded file.

+ 0 - 10
docs/pages/FirstPersonControls.html

@@ -50,13 +50,6 @@
 					</div>
 				</div>
 				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="activeLook" translate="no">.<a href="#activeLook">activeLook</a><span class="type-signature"> : boolean</span> </h3>
-					<div class="description">
-						<p>Whether it's possible to look around or not.</p>
-						<p>Default is <code>true</code>.</p>
-					</div>
-				</div>
 				<div class="member">
 					<h3 class="name" id="autoForward" translate="no">.<a href="#autoForward">autoForward</a><span class="type-signature"> : boolean</span> </h3>
 					<div class="description">
@@ -145,9 +138,6 @@ Use the properties <code>heightCoef</code>, <code>heightMin</code> and <code>hei
 				<h2 class="subsection-title">Methods</h2>
 					<h3 class="name name-method" id="handleResize" translate="no">.<a href="#handleResize">handleResize</a><span class="signature">()</span> </h3>
 					<div class="method">
-						<div class="description">
-							<p>Must be called if the application window is resized.</p>
-						</div>
 					</div>
 					<h3 class="name name-method" id="lookAt" translate="no">.<a href="#lookAt">lookAt</a><span class="signature">( x : <span class="param-type">number | <a href="Vector3.html">Vector3</a></span>, y : <span class="param-type">number</span>, z : <span class="param-type">number</span> )</span><span class="type-signature"> : <a href="FirstPersonControls.html">FirstPersonControls</a></span> </h3>
 					<div class="method">

+ 0 - 8
docs/pages/FirstPersonControls.html.md

@@ -30,12 +30,6 @@ Default is `null`.
 
 ## Properties
 
-### .activeLook : boolean
-
-Whether it's possible to look around or not.
-
-Default is `true`.
-
 ### .autoForward : boolean
 
 Whether the camera is automatically moved forward or not.
@@ -112,8 +106,6 @@ Default is `0`.
 
 ### .handleResize()
 
-Must be called if the application window is resized.
-
 ### .lookAt( x : number | Vector3, y : number, z : number ) : FirstPersonControls
 
 Rotates the camera towards the defined target position.

+ 2 - 2
docs/pages/FlipNode.html

@@ -68,7 +68,7 @@ meaning it flips normalized values with the following formula:</p>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>This method is overwritten since the node type is inferred from the source node.</p>
@@ -86,7 +86,7 @@ meaning it flips normalized values with the following formula:</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getNodeType">TempNode#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#generateNodeType">TempNode#generateNodeType</a></dt>
 						</dl>
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>

+ 2 - 2
docs/pages/FlipNode.html.md

@@ -42,7 +42,7 @@ The node which component(s) should be flipped.
 
 ## Methods
 
-### .getNodeType( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
 This method is overwritten since the node type is inferred from the source node.
 
@@ -50,7 +50,7 @@ This method is overwritten since the node type is inferred from the source node.
 
 The current node builder.
 
-**Overrides:** [TempNode#getNodeType](TempNode.html#getNodeType)
+**Overrides:** [TempNode#generateNodeType](TempNode.html#generateNodeType)
 
 **Returns:** The node type.
 

+ 16 - 16
docs/pages/FunctionCallNode.html

@@ -65,10 +65,10 @@ this logic.</p></div>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getMemberType" translate="no">.<a href="#getMemberType">getMemberType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, name : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns the function node of this function call node.</p>
+							<p>Returns the type of this function call node.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -80,27 +80,19 @@ this logic.</p></div>
 										<p>The current node builder.</p>
 									</td>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">name</strong>
-									</td>
-									<td class="description last">
-										<p>The name of the member.</p>
-									</td>
-								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getMemberType">TempNode#getMemberType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#generateNodeType">TempNode#generateNodeType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The type of the member.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The type of this node.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getMemberType" translate="no">.<a href="#getMemberType">getMemberType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, name : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns the type of this function call node.</p>
+							<p>Returns the function node of this function call node.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -112,13 +104,21 @@ this logic.</p></div>
 										<p>The current node builder.</p>
 									</td>
 								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The name of the member.</p>
+									</td>
+								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getNodeType">TempNode#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getMemberType">TempNode#getMemberType</a></dt>
 						</dl>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The type of this node.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The type of the member.</dt>
 						</dl>
 					</div>
 					<h3 class="name name-method" id="getParameters" translate="no">.<a href="#getParameters">getParameters</a><span class="signature">()</span><span class="type-signature"> : Object.&lt;string, <a href="Node.html">Node</a>></span> </h3>

+ 12 - 12
docs/pages/FunctionCallNode.html.md

@@ -38,33 +38,33 @@ Default is `{}`.
 
 ## Methods
 
-### .getMemberType( builder : NodeBuilder, name : string ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
-Returns the function node of this function call node.
+Returns the type of this function call node.
 
 **builder**
 
 The current node builder.
 
-**name**
-
-The name of the member.
-
-**Overrides:** [TempNode#getMemberType](TempNode.html#getMemberType)
+**Overrides:** [TempNode#generateNodeType](TempNode.html#generateNodeType)
 
-**Returns:** The type of the member.
+**Returns:** The type of this node.
 
-### .getNodeType( builder : NodeBuilder ) : string
+### .getMemberType( builder : NodeBuilder, name : string ) : string
 
-Returns the type of this function call node.
+Returns the function node of this function call node.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [TempNode#getNodeType](TempNode.html#getNodeType)
+**name**
 
-**Returns:** The type of this node.
+The name of the member.
+
+**Overrides:** [TempNode#getMemberType](TempNode.html#getMemberType)
+
+**Returns:** The type of the member.
 
 ### .getParameters() : Object.<string, Node>
 

+ 24 - 24
docs/pages/FunctionNode.html

@@ -78,6 +78,30 @@ material.colorNode = someWGSLFn( { color: texture( map ) } );
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the type of this function node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">builder</strong>
+									</td>
+									<td class="description last">
+										<p>The current node builder.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="CodeNode.html#generateNodeType">CodeNode#generateNodeType</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The type.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="getInputs" translate="no">.<a href="#getInputs">getInputs</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : Array.&lt;<a href="NodeFunctionInput.html">NodeFunctionInput</a>></span> </h3>
 					<div class="method">
 						<div class="description">
@@ -152,30 +176,6 @@ material.colorNode = someWGSLFn( { color: texture( map ) } );
 							<dt class="tag-returns"><strong>Returns:</strong> The node function.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Returns the type of this function node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">builder</strong>
-									</td>
-									<td class="description last">
-										<p>The current node builder.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="CodeNode.html#getNodeType">CodeNode#getNodeType</a></dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The type.</dt>
-						</dl>
-					</div>
 				<h2 class="subsection-title">Source</h2>
 				<p>
 					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/code/FunctionNode.js" translate="no" target="_blank" rel="noopener">src/nodes/code/FunctionNode.js</a>

+ 12 - 12
docs/pages/FunctionNode.html.md

@@ -52,6 +52,18 @@ Default is `''`.
 
 ## Methods
 
+### .generateNodeType( builder : NodeBuilder ) : string
+
+Returns the type of this function node.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [CodeNode#generateNodeType](CodeNode.html#generateNodeType)
+
+**Returns:** The type.
+
 ### .getInputs( builder : NodeBuilder ) : Array.<NodeFunctionInput>
 
 Returns the inputs of this function node.
@@ -88,18 +100,6 @@ The current node builder.
 
 **Returns:** The node function.
 
-### .getNodeType( builder : NodeBuilder ) : string
-
-Returns the type of this function node.
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [CodeNode#getNodeType](CodeNode.html#getNodeType)
-
-**Returns:** The type.
-
 ## Source
 
 [src/nodes/code/FunctionNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/code/FunctionNode.js)

+ 10 - 10
docs/pages/FunctionOverloadingNode.html

@@ -71,10 +71,11 @@ call, the node picks the best-fit overloaded version.</p></div>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getCandidateFn" translate="no">.<a href="#getCandidateFn">getCandidateFn</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="FunctionNode.html">FunctionNode</a></span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns the candidate function for the current parameters.</p>
+							<p>This method is overwritten since the node type is inferred from
+the function's return type.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -89,14 +90,16 @@ call, the node picks the best-fit overloaded version.</p></div>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The candidate function.</dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#generateNodeType">Node#generateNodeType</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getCandidateFn" translate="no">.<a href="#getCandidateFn">getCandidateFn</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="FunctionNode.html">FunctionNode</a></span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>This method is overwritten since the node type is inferred from
-the function's return type.</p>
+							<p>Returns the candidate function for the current parameters.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -111,10 +114,7 @@ the function's return type.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getNodeType">Node#getNodeType</a></dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The candidate function.</dt>
 						</dl>
 					</div>
 					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>

+ 8 - 8
docs/pages/FunctionOverloadingNode.html.md

@@ -38,27 +38,27 @@ A list of parameter nodes.
 
 ## Methods
 
-### .getCandidateFn( builder : NodeBuilder ) : FunctionNode
+### .generateNodeType( builder : NodeBuilder ) : string
 
-Returns the candidate function for the current parameters.
+This method is overwritten since the node type is inferred from the function's return type.
 
 **builder**
 
 The current node builder.
 
-**Returns:** The candidate function.
+**Overrides:** [Node#generateNodeType](Node.html#generateNodeType)
 
-### .getNodeType( builder : NodeBuilder ) : string
+**Returns:** The node type.
 
-This method is overwritten since the node type is inferred from the function's return type.
+### .getCandidateFn( builder : NodeBuilder ) : FunctionNode
+
+Returns the candidate function for the current parameters.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [Node#getNodeType](Node.html#getNodeType)
-
-**Returns:** The node type.
+**Returns:** The candidate function.
 
 ### .setup( builder : NodeBuilder ) : Node
 

+ 0 - 36
docs/pages/GLSLNodeBuilder.html

@@ -965,18 +965,6 @@ or the linearized index of an compute invocation within a grid of workgroups.</p
 							<dt class="tag-returns"><strong>Returns:</strong> The type.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getUniformBufferLimit" translate="no">.<a href="#getUniformBufferLimit">getUniformBufferLimit</a><span class="signature">()</span><span class="type-signature"> : number</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Returns the maximum number of bytes available for uniform buffers.</p>
-						</div>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="NodeBuilder.html#getUniformBufferLimit">NodeBuilder#getUniformBufferLimit</a></dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The maximum number of bytes available for uniform buffers.</dt>
-						</dl>
-					</div>
 					<h3 class="name name-method" id="getUniformFromNode" translate="no">.<a href="#getUniformFromNode">getUniformFromNode</a><span class="signature">( node : <span class="param-type"><a href="UniformNode.html">UniformNode</a></span>, type : <span class="param-type">string</span>, shaderStage : <span class="param-type">string</span>, name : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="NodeUniform.html">NodeUniform</a></span> </h3>
 					<div class="method">
 						<div class="description">
@@ -1053,30 +1041,6 @@ and layouts.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The GLSL snippet that defines the uniforms.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getVars" translate="no">.<a href="#getVars">getVars</a><span class="signature">( shaderStage : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Returns the variables of the given shader stage as a GLSL string.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">shaderStage</strong>
-									</td>
-									<td class="description last">
-										<p>The shader stage.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="NodeBuilder.html#getVars">NodeBuilder#getVars</a></dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The GLSL snippet that defines the variables.</dt>
-						</dl>
-					</div>
 					<h3 class="name name-method" id="getVaryings" translate="no">.<a href="#getVaryings">getVaryings</a><span class="signature">( shaderStage : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">

+ 0 - 20
docs/pages/GLSLNodeBuilder.html.md

@@ -498,14 +498,6 @@ The buffer attribute.
 
 **Returns:** The type.
 
-### .getUniformBufferLimit() : number
-
-Returns the maximum number of bytes available for uniform buffers.
-
-**Overrides:** [NodeBuilder#getUniformBufferLimit](NodeBuilder.html#getUniformBufferLimit)
-
-**Returns:** The maximum number of bytes available for uniform buffers.
-
 ### .getUniformFromNode( node : UniformNode, type : string, shaderStage : string, name : string ) : NodeUniform
 
 This method is one of the more important ones since it's responsible for generating a matching binding instance for the given uniform node.
@@ -546,18 +538,6 @@ The shader stage.
 
 **Returns:** The GLSL snippet that defines the uniforms.
 
-### .getVars( shaderStage : string ) : string
-
-Returns the variables of the given shader stage as a GLSL string.
-
-**shaderStage**
-
-The shader stage.
-
-**Overrides:** [NodeBuilder#getVars](NodeBuilder.html#getVars)
-
-**Returns:** The GLSL snippet that defines the variables.
-
 ### .getVaryings( shaderStage : string ) : string
 
 Returns the varyings of the given shader stage as a GLSL string.

+ 1 - 0
docs/pages/GLTFExporter.html

@@ -35,6 +35,7 @@ textures, skins, skeletons, morph targets, animations, lights, and/or cameras.</
 <li>KHR_texture_transform</li>
 <li>EXT_materials_bump</li>
 <li>EXT_mesh_gpu_instancing</li>
+<li>EXT_texture_webp</li>
 </ul>
 <p>The following glTF 2.0 extension is supported by an external user plugin:</p>
 <ul>

+ 1 - 0
docs/pages/GLTFExporter.html.md

@@ -21,6 +21,7 @@ GLTFExporter supports the [glTF 2.0 extensions](https://github.com/KhronosGroup/
 *   KHR\_texture\_transform
 *   EXT\_materials\_bump
 *   EXT\_mesh\_gpu\_instancing
+*   EXT\_texture\_webp
 
 The following glTF 2.0 extension is supported by an external user plugin:
 

+ 6 - 2
docs/pages/GLTFLoader.html

@@ -20,8 +20,11 @@ the disposal process.</p>
 <p><code>GLTFLoader</code> supports the following glTF 2.0 extensions:</p>
 <ul>
 <li>KHR_draco_mesh_compression</li>
+<li>KHR_lights_punctual</li>
+<li>KHR_materials_anisotropy</li>
 <li>KHR_materials_clearcoat</li>
 <li>KHR_materials_dispersion</li>
+<li>KHR_materials_emissive_strength</li>
 <li>KHR_materials_ior</li>
 <li>KHR_materials_specular</li>
 <li>KHR_materials_transmission</li>
@@ -30,12 +33,13 @@ the disposal process.</p>
 <li>KHR_materials_volume</li>
 <li>KHR_mesh_quantization</li>
 <li>KHR_meshopt_compression</li>
-<li>KHR_lights_punctual</li>
 <li>KHR_texture_basisu</li>
 <li>KHR_texture_transform</li>
-<li>EXT_texture_webp</li>
+<li>EXT_materials_bump</li>
 <li>EXT_meshopt_compression</li>
 <li>EXT_mesh_gpu_instancing</li>
+<li>EXT_texture_avif</li>
+<li>EXT_texture_webp</li>
 </ul>
 <p>The following glTF 2.0 extension is supported by an external user plugin:</p>
 <ul>

+ 6 - 2
docs/pages/GLTFLoader.html.md

@@ -9,8 +9,11 @@ A loader for the glTF 2.0 format.
 `GLTFLoader` supports the following glTF 2.0 extensions:
 
 *   KHR\_draco\_mesh\_compression
+*   KHR\_lights\_punctual
+*   KHR\_materials\_anisotropy
 *   KHR\_materials\_clearcoat
 *   KHR\_materials\_dispersion
+*   KHR\_materials\_emissive\_strength
 *   KHR\_materials\_ior
 *   KHR\_materials\_specular
 *   KHR\_materials\_transmission
@@ -19,12 +22,13 @@ A loader for the glTF 2.0 format.
 *   KHR\_materials\_volume
 *   KHR\_mesh\_quantization
 *   KHR\_meshopt\_compression
-*   KHR\_lights\_punctual
 *   KHR\_texture\_basisu
 *   KHR\_texture\_transform
-*   EXT\_texture\_webp
+*   EXT\_materials\_bump
 *   EXT\_meshopt\_compression
 *   EXT\_mesh\_gpu\_instancing
+*   EXT\_texture\_avif
+*   EXT\_texture\_webp
 
 The following glTF 2.0 extension is supported by an external user plugin:
 

+ 2 - 1
docs/pages/GTAONode.html

@@ -26,7 +26,8 @@ const scenePassColor = scenePass.getTextureNode( 'output' );
 const scenePassNormal = scenePass.getTextureNode( 'normal' );
 const scenePassDepth = scenePass.getTextureNode( 'depth' );
 const aoPass = ao( scenePassDepth, scenePassNormal, camera );
-renderPipeline.outputNode = aoPass.getTextureNode().mul( scenePassColor );
+const aoPassOutput = aoPass.getTextureNode();
+renderPipeline.outputNode = scenePassColor.mul( vec4( vec3( aoPassOutput.r ), 1 ) );
 </code></pre></div>
 			</header>
 			<article>

+ 2 - 1
docs/pages/GTAONode.html.md

@@ -19,7 +19,8 @@ const scenePassColor = scenePass.getTextureNode( 'output' );
 const scenePassNormal = scenePass.getTextureNode( 'normal' );
 const scenePassDepth = scenePass.getTextureNode( 'depth' );
 const aoPass = ao( scenePassDepth, scenePassNormal, camera );
-renderPipeline.outputNode = aoPass.getTextureNode().mul( scenePassColor );
+const aoPassOutput = aoPass.getTextureNode();
+renderPipeline.outputNode = scenePassColor.mul( vec4( vec3( aoPassOutput.r ), 1 ) );
 ```
 
 ## Import

+ 131 - 0
docs/pages/HTMLTexture.html

@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>HTMLTexture - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Texture.html">Texture</a> → </p>
+	<h1 translate="no">HTMLTexture</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Creates a texture from an HTML element.</p>
+<p>This is almost the same as the base texture class, except that it sets <a href="Texture.html#needsUpdate">Texture#needsUpdate</a>
+to <code>true</code> immediately and listens for the parent canvas's paint events to trigger updates.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="HTMLTexture" translate="no">new <a href="#HTMLTexture">HTMLTexture</a><span class="signature">( element : <span class="param-type">HTMLElement</span>, mapping : <span class="param-type">number</span>, wrapS : <span class="param-type">number</span>, wrapT : <span class="param-type">number</span>, magFilter : <span class="param-type">number</span>, minFilter : <span class="param-type">number</span>, format : <span class="param-type">number</span>, type : <span class="param-type">number</span>, anisotropy : <span class="param-type">number</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">element</strong>
+									</td>
+									<td class="description last">
+										<p>The HTML element.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">mapping</strong>
+									</td>
+									<td class="description last">
+										<p>The texture mapping.</p>
+										<p>Default is <code>Texture.DEFAULT_MAPPING</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">wrapS</strong>
+									</td>
+									<td class="description last">
+										<p>The wrapS value.</p>
+										<p>Default is <code>ClampToEdgeWrapping</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">wrapT</strong>
+									</td>
+									<td class="description last">
+										<p>The wrapT value.</p>
+										<p>Default is <code>ClampToEdgeWrapping</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">magFilter</strong>
+									</td>
+									<td class="description last">
+										<p>The mag filter value.</p>
+										<p>Default is <code>LinearFilter</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">minFilter</strong>
+									</td>
+									<td class="description last">
+										<p>The min filter value.</p>
+										<p>Default is <code>LinearMipmapLinearFilter</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">format</strong>
+									</td>
+									<td class="description last">
+										<p>The texture format.</p>
+										<p>Default is <code>RGBAFormat</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">type</strong>
+									</td>
+									<td class="description last">
+										<p>The texture type.</p>
+										<p>Default is <code>UnsignedByteType</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">anisotropy</strong>
+									</td>
+									<td class="description last">
+										<p>The anisotropy value.</p>
+										<p>Default is <code>Texture.DEFAULT_ANISOTROPY</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="isHTMLTexture" translate="no">.<a href="#isHTMLTexture">isHTMLTexture</a><span class="type-signature"> : boolean</span> <span class="type-signature">(readonly) </span></h3>
+					<div class="description">
+						<p>This flag can be used for type testing.</p>
+						<p>Default is <code>true</code>.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/src/textures/HTMLTexture.js" translate="no" target="_blank" rel="noopener">src/textures/HTMLTexture.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 77 - 0
docs/pages/HTMLTexture.html.md

@@ -0,0 +1,77 @@
+*Inheritance: EventDispatcher → Texture →*
+
+# HTMLTexture
+
+Creates a texture from an HTML element.
+
+This is almost the same as the base texture class, except that it sets [Texture#needsUpdate](Texture.html#needsUpdate) to `true` immediately and listens for the parent canvas's paint events to trigger updates.
+
+## Constructor
+
+### new HTMLTexture( element : HTMLElement, mapping : number, wrapS : number, wrapT : number, magFilter : number, minFilter : number, format : number, type : number, anisotropy : number )
+
+Constructs a new texture.
+
+**element**
+
+The HTML element.
+
+**mapping**
+
+The texture mapping.
+
+Default is `Texture.DEFAULT_MAPPING`.
+
+**wrapS**
+
+The wrapS value.
+
+Default is `ClampToEdgeWrapping`.
+
+**wrapT**
+
+The wrapT value.
+
+Default is `ClampToEdgeWrapping`.
+
+**magFilter**
+
+The mag filter value.
+
+Default is `LinearFilter`.
+
+**minFilter**
+
+The min filter value.
+
+Default is `LinearMipmapLinearFilter`.
+
+**format**
+
+The texture format.
+
+Default is `RGBAFormat`.
+
+**type**
+
+The texture type.
+
+Default is `UnsignedByteType`.
+
+**anisotropy**
+
+The anisotropy value.
+
+Default is `Texture.DEFAULT_ANISOTROPY`.
+
+## Properties
+
+### .isHTMLTexture : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+## Source
+
+[src/textures/HTMLTexture.js](https://github.com/mrdoob/three.js/blob/master/src/textures/HTMLTexture.js)

+ 34 - 0
docs/pages/HemisphereLightDataNode.html

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>HemisphereLightDataNode - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → </p>
+	<h1 translate="no">HemisphereLightDataNode</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Batched data node for hemisphere lights in dynamic lighting mode.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="HemisphereLightDataNode" translate="no">new <a href="#HemisphereLightDataNode">HemisphereLightDataNode</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 13 - 0
docs/pages/HemisphereLightDataNode.html.md

@@ -0,0 +1,13 @@
+*Inheritance: EventDispatcher → Node →*
+
+# HemisphereLightDataNode
+
+Batched data node for hemisphere lights in dynamic lighting mode.
+
+## Constructor
+
+### new HemisphereLightDataNode()
+
+## Source
+
+[examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js)

+ 3 - 4
docs/pages/ImageBitmapLoader.html

@@ -81,7 +81,7 @@ texture.needsUpdate = true;
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this instance.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="load" translate="no">.<a href="#load">load</a><span class="signature">( url : <span class="param-type">string</span>, onLoad : <span class="param-type">function</span>, onProgress : <span class="param-type"><a href="global.html#onProgressCallback">onProgressCallback</a></span>, onError : <span class="param-type"><a href="global.html#onErrorCallback">onErrorCallback</a></span> )</span><span class="type-signature"> : ImageBitmap | undefined</span> </h3>
+					<h3 class="name name-method" id="load" translate="no">.<a href="#load">load</a><span class="signature">( url : <span class="param-type">string</span>, onLoad : <span class="param-type">function</span>, onProgress : <span class="param-type"><a href="global.html#onProgressCallback">onProgressCallback</a></span>, onError : <span class="param-type"><a href="global.html#onErrorCallback">onErrorCallback</a></span> )</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Starts loading from the given URL and pass the loaded image bitmap to the <code>onLoad()</code> callback.</p>
@@ -125,15 +125,14 @@ texture.needsUpdate = true;
 						<dl class="details">
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Loader.html#load">Loader#load</a></dt>
 						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The image bitmap.</dt>
-						</dl>
 					</div>
 					<h3 class="name name-method" id="setOptions" translate="no">.<a href="#setOptions">setOptions</a><span class="signature">( options : <span class="param-type">Object</span> )</span><span class="type-signature"> : <a href="ImageBitmapLoader.html">ImageBitmapLoader</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Sets the given loader options. The structure of the object must match the <code>options</code> parameter of
 <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/createImageBitmap" target="_blank" rel="noopener">createImageBitmap</a>.</p>
+<p>Note: When caching is enabled, the cache key is based on the URL only. Loading the same URL with
+different options will return the cached result of the first request.</p>
 						</div>
 						<table class="params">
 							<tbody>

+ 3 - 3
docs/pages/ImageBitmapLoader.html.md

@@ -58,7 +58,7 @@ Aborts ongoing fetch requests.
 
 **Returns:** A reference to this instance.
 
-### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback ) : ImageBitmap | undefined
+### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )
 
 Starts loading from the given URL and pass the loaded image bitmap to the `onLoad()` callback.
 
@@ -80,12 +80,12 @@ Executed when errors occur.
 
 **Overrides:** [Loader#load](Loader.html#load)
 
-**Returns:** The image bitmap.
-
 ### .setOptions( options : Object ) : ImageBitmapLoader
 
 Sets the given loader options. The structure of the object must match the `options` parameter of [createImageBitmap](https://developer.mozilla.org/en-US/docs/Web/API/Window/createImageBitmap).
 
+Note: When caching is enabled, the cache key is based on the URL only. Loading the same URL with different options will return the cached result of the first request.
+
 **options**
 
 The loader options to set.

+ 346 - 1
docs/pages/Info.html

@@ -112,7 +112,7 @@ by <code>NodeFrame</code>.</p>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>frameCalls</strong>
+					<strong>textures</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
@@ -120,6 +120,156 @@ by <code>NodeFrame</code>.</p>
 				<p>The number of active textures.</p>
 			</td>
 		</tr>
+		<tr>
+				<td class="name">
+					<strong>attributes</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The number of active attributes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>indexAttributes</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The number of active index attributes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>storageAttributes</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The number of active storage attributes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>indirectStorageAttributes</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The number of active indirect storage attributes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>readbackBuffers</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The number of active readback buffers.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>programs</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The number of active programs.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>renderTargets</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The number of active renderTargets.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>total</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The total memory size in bytes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>texturesSize</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The memory size of active textures in bytes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>attributesSize</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The memory size of active attributes in bytes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>indexAttributesSize</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The memory size of active index attributes in bytes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>storageAttributesSize</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The memory size of active storage attributes in bytes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>indirectStorageAttributesSize</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The memory size of active indirect storage attributes in bytes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>readbackBuffersSize</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The memory size of active readback buffers in bytes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>programsSize</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The memory size of active programs in bytes.</p>
+			</td>
+		</tr>
 	</tbody>
 </table>
 				</div>
@@ -204,6 +354,201 @@ by <code>NodeFrame</code>.</p>
 </table>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="createAttribute" translate="no">.<a href="#createAttribute">createAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks a regular attribute memory explicitly.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The attribute to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createIndexAttribute" translate="no">.<a href="#createIndexAttribute">createIndexAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks an index attribute memory explicitly.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The index attribute to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createIndirectStorageAttribute" translate="no">.<a href="#createIndirectStorageAttribute">createIndirectStorageAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks an indirect storage attribute memory explicitly.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The indirect storage attribute to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createProgram" translate="no">.<a href="#createProgram">createProgram</a><span class="signature">( program : <span class="param-type"><a href="ProgrammableStage.html">ProgrammableStage</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks program memory explicitly, updating counts and byte tracking.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">program</strong>
+									</td>
+									<td class="description last">
+										<p>The program to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createReadbackBuffer" translate="no">.<a href="#createReadbackBuffer">createReadbackBuffer</a><span class="signature">( readbackBuffer : <span class="param-type"><a href="ReadbackBuffer.html">ReadbackBuffer</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks a readback buffer memory explicitly.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">readbackBuffer</strong>
+									</td>
+									<td class="description last">
+										<p>The readback buffer to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createStorageAttribute" translate="no">.<a href="#createStorageAttribute">createStorageAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks a storage attribute memory explicitly.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The storage attribute to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createTexture" translate="no">.<a href="#createTexture">createTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks texture memory explicitly, updating counts and byte tracking.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyAttribute" translate="no">.<a href="#destroyAttribute">destroyAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks attribute memory explicitly, updating counts and byte tracking.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyProgram" translate="no">.<a href="#destroyProgram">destroyProgram</a><span class="signature">( program : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks program memory explicitly, updating counts and byte tracking.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">program</strong>
+									</td>
+									<td class="description last">
+										<p>The program to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyReadbackBuffer" translate="no">.<a href="#destroyReadbackBuffer">destroyReadbackBuffer</a><span class="signature">( readbackBuffer : <span class="param-type"><a href="ReadbackBuffer.html">ReadbackBuffer</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks a readback buffer memory explicitly.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">readbackBuffer</strong>
+									</td>
+									<td class="description last">
+										<p>The readback buffer to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyTexture" translate="no">.<a href="#destroyTexture">destroyTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks texture memory explicitly, updating counts and byte tracking.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
 					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
 					<div class="method">
 						<div class="description">

+ 158 - 1
docs/pages/Info.html.md

@@ -56,11 +56,86 @@ number
 
 The number of active geometries.
 
-**frameCalls**  
+**textures**  
 number
 
 The number of active textures.
 
+**attributes**  
+number
+
+The number of active attributes.
+
+**indexAttributes**  
+number
+
+The number of active index attributes.
+
+**storageAttributes**  
+number
+
+The number of active storage attributes.
+
+**indirectStorageAttributes**  
+number
+
+The number of active indirect storage attributes.
+
+**readbackBuffers**  
+number
+
+The number of active readback buffers.
+
+**programs**  
+number
+
+The number of active programs.
+
+**renderTargets**  
+number
+
+The number of active renderTargets.
+
+**total**  
+number
+
+The total memory size in bytes.
+
+**texturesSize**  
+number
+
+The memory size of active textures in bytes.
+
+**attributesSize**  
+number
+
+The memory size of active attributes in bytes.
+
+**indexAttributesSize**  
+number
+
+The memory size of active index attributes in bytes.
+
+**storageAttributesSize**  
+number
+
+The memory size of active storage attributes in bytes.
+
+**indirectStorageAttributesSize**  
+number
+
+The memory size of active indirect storage attributes in bytes.
+
+**readbackBuffersSize**  
+number
+
+The memory size of active readback buffers in bytes.
+
+**programsSize**  
+number
+
+The memory size of active programs in bytes.
+
 ### .render : Object (readonly)
 
 Render related metrics.
@@ -102,6 +177,88 @@ The timestamp of the frame.
 
 ## Methods
 
+### .createAttribute( attribute : BufferAttribute )
+
+Tracks a regular attribute memory explicitly.
+
+**attribute**
+
+The attribute to track.
+
+### .createIndexAttribute( attribute : BufferAttribute )
+
+Tracks an index attribute memory explicitly.
+
+**attribute**
+
+The index attribute to track.
+
+### .createIndirectStorageAttribute( attribute : BufferAttribute )
+
+Tracks an indirect storage attribute memory explicitly.
+
+**attribute**
+
+The indirect storage attribute to track.
+
+### .createProgram( program : ProgrammableStage )
+
+Tracks program memory explicitly, updating counts and byte tracking.
+
+**program**
+
+The program to track.
+
+### .createReadbackBuffer( readbackBuffer : ReadbackBuffer )
+
+Tracks a readback buffer memory explicitly.
+
+**readbackBuffer**
+
+The readback buffer to track.
+
+### .createStorageAttribute( attribute : BufferAttribute )
+
+Tracks a storage attribute memory explicitly.
+
+**attribute**
+
+The storage attribute to track.
+
+### .createTexture( texture : Texture )
+
+Tracks texture memory explicitly, updating counts and byte tracking.
+
+**texture**
+
+### .destroyAttribute( attribute : BufferAttribute )
+
+Tracks attribute memory explicitly, updating counts and byte tracking.
+
+**attribute**
+
+### .destroyProgram( program : Object )
+
+Tracks program memory explicitly, updating counts and byte tracking.
+
+**program**
+
+The program to track.
+
+### .destroyReadbackBuffer( readbackBuffer : ReadbackBuffer )
+
+Tracks a readback buffer memory explicitly.
+
+**readbackBuffer**
+
+The readback buffer to track.
+
+### .destroyTexture( texture : Texture )
+
+Tracks texture memory explicitly, updating counts and byte tracking.
+
+**texture**
+
 ### .dispose()
 
 Performs a complete reset of the object.

+ 1 - 0
docs/pages/InspectorBase.html

@@ -9,6 +9,7 @@
 	<link type="text/css" rel="stylesheet" href="../styles/page.css">
 </head>
 <body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → </p>
 	<h1 translate="no">InspectorBase</h1>
 		<section>
 			<header>

+ 2 - 0
docs/pages/InspectorBase.html.md

@@ -1,3 +1,5 @@
+*Inheritance: EventDispatcher →*
+
 # InspectorBase
 
 ### new InspectorBase()

+ 8 - 8
docs/pages/InspectorNode.html

@@ -64,13 +64,7 @@ It can be used to debug or analyze node outputs in the rendering pipeline.</p></
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getName" translate="no">.<a href="#getName">getName</a><span class="signature">()</span><span class="type-signature"> : string</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Returns the name of the inspector node.</p>
-						</div>
-					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Returns the type of the wrapped node.</p>
@@ -88,9 +82,15 @@ It can be used to debug or analyze node outputs in the rendering pipeline.</p></
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#getNodeType">Node#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#generateNodeType">Node#generateNodeType</a></dt>
 						</dl>
 					</div>
+					<h3 class="name name-method" id="getName" translate="no">.<a href="#getName">getName</a><span class="signature">()</span><span class="type-signature"> : string</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the name of the inspector node.</p>
+						</div>
+					</div>
 					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
 					<div class="method">
 						<div class="description">

+ 6 - 6
docs/pages/InspectorNode.html.md

@@ -34,11 +34,7 @@ Returns the type of the node.
 
 ## Methods
 
-### .getName() : string
-
-Returns the name of the inspector node.
-
-### .getNodeType( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
 Returns the type of the wrapped node.
 
@@ -46,7 +42,11 @@ Returns the type of the wrapped node.
 
 The node builder.
 
-**Overrides:** [Node#getNodeType](Node.html#getNodeType)
+**Overrides:** [Node#generateNodeType](Node.html#generateNodeType)
+
+### .getName() : string
+
+Returns the name of the inspector node.
 
 ### .setup( builder : NodeBuilder ) : Node
 

+ 21 - 6
docs/pages/InstancedMesh.html

@@ -146,7 +146,7 @@ You may need to recompute the bounding sphere if an instance is transformed via
 method whenever this instance is no longer used in your app.</p>
 						</div>
 					</div>
-					<h3 class="name name-method" id="getColorAt" translate="no">.<a href="#getColorAt">getColorAt</a><span class="signature">( index : <span class="param-type">number</span>, color : <span class="param-type"><a href="Color.html">Color</a></span> )</span> </h3>
+					<h3 class="name name-method" id="getColorAt" translate="no">.<a href="#getColorAt">getColorAt</a><span class="signature">( index : <span class="param-type">number</span>, color : <span class="param-type"><a href="Color.html">Color</a></span> )</span><span class="type-signature"> : <a href="Color.html">Color</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Gets the color of the defined instance.</p>
@@ -171,8 +171,11 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 							</tbody>
 						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to the target color.</dt>
+						</dl>
 					</div>
-					<h3 class="name name-method" id="getMatrixAt" translate="no">.<a href="#getMatrixAt">getMatrixAt</a><span class="signature">( index : <span class="param-type">number</span>, matrix : <span class="param-type"><a href="Matrix4.html">Matrix4</a></span> )</span> </h3>
+					<h3 class="name name-method" id="getMatrixAt" translate="no">.<a href="#getMatrixAt">getMatrixAt</a><span class="signature">( index : <span class="param-type">number</span>, matrix : <span class="param-type"><a href="Matrix4.html">Matrix4</a></span> )</span><span class="type-signature"> : <a href="Matrix4.html">Matrix4</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Gets the local transformation matrix of the defined instance.</p>
@@ -197,6 +200,9 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 							</tbody>
 						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to the target matrix.</dt>
+						</dl>
 					</div>
 					<h3 class="name name-method" id="getMorphAt" translate="no">.<a href="#getMorphAt">getMorphAt</a><span class="signature">( index : <span class="param-type">number</span>, object : <span class="param-type"><a href="Mesh.html">Mesh</a></span> )</span> </h3>
 					<div class="method">
@@ -224,7 +230,7 @@ method whenever this instance is no longer used in your app.</p>
 							</tbody>
 						</table>
 					</div>
-					<h3 class="name name-method" id="setColorAt" translate="no">.<a href="#setColorAt">setColorAt</a><span class="signature">( index : <span class="param-type">number</span>, color : <span class="param-type"><a href="Color.html">Color</a></span> )</span> </h3>
+					<h3 class="name name-method" id="setColorAt" translate="no">.<a href="#setColorAt">setColorAt</a><span class="signature">( index : <span class="param-type">number</span>, color : <span class="param-type"><a href="Color.html">Color</a></span> )</span><span class="type-signature"> : <a href="InstancedMesh.html">InstancedMesh</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Sets the given color to the defined instance. Make sure you set the <code>needsUpdate</code> flag of
@@ -250,12 +256,15 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 							</tbody>
 						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this instanced mesh.</dt>
+						</dl>
 					</div>
-					<h3 class="name name-method" id="setMatrixAt" translate="no">.<a href="#setMatrixAt">setMatrixAt</a><span class="signature">( index : <span class="param-type">number</span>, matrix : <span class="param-type"><a href="Matrix4.html">Matrix4</a></span> )</span> </h3>
+					<h3 class="name name-method" id="setMatrixAt" translate="no">.<a href="#setMatrixAt">setMatrixAt</a><span class="signature">( index : <span class="param-type">number</span>, matrix : <span class="param-type"><a href="Matrix4.html">Matrix4</a></span> )</span><span class="type-signature"> : <a href="InstancedMesh.html">InstancedMesh</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Sets the given local transformation matrix to the defined instance. Make sure you set the <code>needsUpdate</code> flag of
-<a href="InstancedMesh.html#instanceMatrix">InstancedMesh#instanceMatrix</a> to <code>true</code> after updating all the colors.</p>
+<a href="InstancedMesh.html#instanceMatrix">InstancedMesh#instanceMatrix</a> to <code>true</code> after updating all the matrices.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -277,8 +286,11 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 							</tbody>
 						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this instanced mesh.</dt>
+						</dl>
 					</div>
-					<h3 class="name name-method" id="setMorphAt" translate="no">.<a href="#setMorphAt">setMorphAt</a><span class="signature">( index : <span class="param-type">number</span>, object : <span class="param-type"><a href="Mesh.html">Mesh</a></span> )</span> </h3>
+					<h3 class="name name-method" id="setMorphAt" translate="no">.<a href="#setMorphAt">setMorphAt</a><span class="signature">( index : <span class="param-type">number</span>, object : <span class="param-type"><a href="Mesh.html">Mesh</a></span> )</span><span class="type-signature"> : <a href="InstancedMesh.html">InstancedMesh</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Sets the morph target weights to the defined instance. Make sure you set the <code>needsUpdate</code> flag of
@@ -305,6 +317,9 @@ of a single instance.</p>
 								</tr>
 							</tbody>
 						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this instanced mesh.</dt>
+						</dl>
 					</div>
 				<h2 class="subsection-title">Source</h2>
 				<p>

+ 16 - 6
docs/pages/InstancedMesh.html.md

@@ -84,7 +84,7 @@ Computes the bounding sphere of the instanced mesh, and updates [InstancedMesh#b
 
 Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
 
-### .getColorAt( index : number, color : Color )
+### .getColorAt( index : number, color : Color ) : Color
 
 Gets the color of the defined instance.
 
@@ -96,7 +96,9 @@ The instance index.
 
 The target object that is used to store the method's result.
 
-### .getMatrixAt( index : number, matrix : Matrix4 )
+**Returns:** A reference to the target color.
+
+### .getMatrixAt( index : number, matrix : Matrix4 ) : Matrix4
 
 Gets the local transformation matrix of the defined instance.
 
@@ -108,6 +110,8 @@ The instance index.
 
 The target object that is used to store the method's result.
 
+**Returns:** A reference to the target matrix.
+
 ### .getMorphAt( index : number, object : Mesh )
 
 Gets the morph target weights of the defined instance.
@@ -120,7 +124,7 @@ The instance index.
 
 The target object that is used to store the method's result.
 
-### .setColorAt( index : number, color : Color )
+### .setColorAt( index : number, color : Color ) : InstancedMesh
 
 Sets the given color to the defined instance. Make sure you set the `needsUpdate` flag of [InstancedMesh#instanceColor](InstancedMesh.html#instanceColor) to `true` after updating all the colors.
 
@@ -132,9 +136,11 @@ The instance index.
 
 The instance color.
 
-### .setMatrixAt( index : number, matrix : Matrix4 )
+**Returns:** A reference to this instanced mesh.
+
+### .setMatrixAt( index : number, matrix : Matrix4 ) : InstancedMesh
 
-Sets the given local transformation matrix to the defined instance. Make sure you set the `needsUpdate` flag of [InstancedMesh#instanceMatrix](InstancedMesh.html#instanceMatrix) to `true` after updating all the colors.
+Sets the given local transformation matrix to the defined instance. Make sure you set the `needsUpdate` flag of [InstancedMesh#instanceMatrix](InstancedMesh.html#instanceMatrix) to `true` after updating all the matrices.
 
 **index**
 
@@ -144,7 +150,9 @@ The instance index.
 
 The local transformation.
 
-### .setMorphAt( index : number, object : Mesh )
+**Returns:** A reference to this instanced mesh.
+
+### .setMorphAt( index : number, object : Mesh ) : InstancedMesh
 
 Sets the morph target weights to the defined instance. Make sure you set the `needsUpdate` flag of [InstancedMesh#morphTexture](InstancedMesh.html#morphTexture) to `true` after updating all the influences.
 
@@ -156,6 +164,8 @@ The instance index.
 
 A mesh which `morphTargetInfluences` property containing the morph target weights of a single instance.
 
+**Returns:** A reference to this instanced mesh.
+
 ## Source
 
 [src/objects/InstancedMesh.js](https://github.com/mrdoob/three.js/blob/master/src/objects/InstancedMesh.js)

+ 147 - 0
docs/pages/InteractionManager.html

@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>InteractionManager - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+	<h1 translate="no">InteractionManager</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Manages interaction for 3D objects independently of the scene graph.</p>
+<p>For objects with an <a href="HTMLTexture.html">HTMLTexture</a>, the manager computes CSS <code>matrix3d</code>
+transforms each frame so the underlying HTML elements stay aligned with
+their meshes. Because the elements are children of the canvas, the browser
+dispatches pointer events to them natively.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const interactions = new InteractionManager();
+interactions.connect( renderer, camera );
+// Objects live anywhere in the scene graph
+scene.add( mesh );
+// Register for interaction separately
+interactions.add( mesh );
+// In the animation loop
+interactions.update();
+</code></pre></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">InteractionManager</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
+				<pre><code class="language-js">import { InteractionManager } from 'three/addons/interaction/InteractionManager.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="InteractionManager" translate="no">new <a href="#InteractionManager">InteractionManager</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="camera" translate="no">.<a href="#camera">camera</a><span class="type-signature"> : <a href="Camera.html">Camera</a></span> </h3>
+					<div class="description">
+						<p>The camera used for computing the element transforms.</p>
+						<p>Default is <code>null</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="element" translate="no">.<a href="#element">element</a><span class="type-signature"> : HTMLCanvasElement</span> </h3>
+					<div class="description">
+						<p>The canvas element.</p>
+						<p>Default is <code>null</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="objects" translate="no">.<a href="#objects">objects</a><span class="type-signature"> : Array.&lt;<a href="Object3D.html">Object3D</a>></span> </h3>
+					<div class="description">
+						<p>The registered interactive objects.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="add" translate="no">.<a href="#add">add</a><span class="signature">( &hellip;objects : <span class="param-type"><a href="Object3D.html">Object3D</a></span> )</span><span class="type-signature"> : this</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Adds one or more objects to the manager.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">objects</strong>
+									</td>
+									<td class="description last">
+										<p>The objects to add.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="connect" translate="no">.<a href="#connect">connect</a><span class="signature">( renderer : <span class="param-type"><a href="WebGPURenderer.html">WebGPURenderer</a> | <a href="WebGLRenderer.html">WebGLRenderer</a></span>, camera : <span class="param-type"><a href="Camera.html">Camera</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Stores the renderer and camera needed for computing element transforms.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderer</strong>
+									</td>
+									<td class="description last">
+										<p>The renderer.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">camera</strong>
+									</td>
+									<td class="description last">
+										<p>The camera.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="disconnect" translate="no">.<a href="#disconnect">disconnect</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Disconnects this manager, clearing the renderer and camera references.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="remove" translate="no">.<a href="#remove">remove</a><span class="signature">( &hellip;objects : <span class="param-type"><a href="Object3D.html">Object3D</a></span> )</span><span class="type-signature"> : this</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Removes one or more objects from the manager.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">objects</strong>
+									</td>
+									<td class="description last">
+										<p>The objects to remove.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="update" translate="no">.<a href="#update">update</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the element transforms for all registered objects.
+Call this once per frame in the animation loop.</p>
+						</div>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/interaction/InteractionManager.js" translate="no" target="_blank" rel="noopener">examples/jsm/interaction/InteractionManager.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 90 - 0
docs/pages/InteractionManager.html.md

@@ -0,0 +1,90 @@
+# InteractionManager
+
+Manages interaction for 3D objects independently of the scene graph.
+
+For objects with an [HTMLTexture](HTMLTexture.html), the manager computes CSS `matrix3d` transforms each frame so the underlying HTML elements stay aligned with their meshes. Because the elements are children of the canvas, the browser dispatches pointer events to them natively.
+
+## Code Example
+
+```js
+const interactions = new InteractionManager();
+interactions.connect( renderer, camera );
+// Objects live anywhere in the scene graph
+scene.add( mesh );
+// Register for interaction separately
+interactions.add( mesh );
+// In the animation loop
+interactions.update();
+```
+
+## Import
+
+InteractionManager is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { InteractionManager } from 'three/addons/interaction/InteractionManager.js';
+```
+
+## Constructor
+
+### new InteractionManager()
+
+## Properties
+
+### .camera : Camera
+
+The camera used for computing the element transforms.
+
+Default is `null`.
+
+### .element : HTMLCanvasElement
+
+The canvas element.
+
+Default is `null`.
+
+### .objects : Array.<Object3D>
+
+The registered interactive objects.
+
+## Methods
+
+### .add( …objects : Object3D ) : this
+
+Adds one or more objects to the manager.
+
+**objects**
+
+The objects to add.
+
+### .connect( renderer : WebGPURenderer | WebGLRenderer, camera : Camera )
+
+Stores the renderer and camera needed for computing element transforms.
+
+**renderer**
+
+The renderer.
+
+**camera**
+
+The camera.
+
+### .disconnect()
+
+Disconnects this manager, clearing the renderer and camera references.
+
+### .remove( …objects : Object3D ) : this
+
+Removes one or more objects from the manager.
+
+**objects**
+
+The objects to remove.
+
+### .update()
+
+Updates the element transforms for all registered objects. Call this once per frame in the animation loop.
+
+## Source
+
+[examples/jsm/interaction/InteractionManager.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/interaction/InteractionManager.js)

+ 2 - 2
docs/pages/JoinNode.html

@@ -56,7 +56,7 @@ For example in can compose/join two single floats into a <code>vec2</code> type.
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>This method is overwritten since the node type must be inferred from the
@@ -75,7 +75,7 @@ joined data length if not explicitly defined.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getNodeType">TempNode#getNodeType</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#generateNodeType">TempNode#generateNodeType</a></dt>
 						</dl>
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>

+ 2 - 2
docs/pages/JoinNode.html.md

@@ -28,7 +28,7 @@ An array of nodes that should be joined.
 
 ## Methods
 
-### .getNodeType( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
 This method is overwritten since the node type must be inferred from the joined data length if not explicitly defined.
 
@@ -36,7 +36,7 @@ This method is overwritten since the node type must be inferred from the joined
 
 The current node builder.
 
-**Overrides:** [TempNode#getNodeType](TempNode.html#getNodeType)
+**Overrides:** [TempNode#generateNodeType](TempNode.html#generateNodeType)
 
 **Returns:** The node type.
 

+ 283 - 0
docs/pages/LightProbeGrid.html

@@ -0,0 +1,283 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>LightProbeGrid - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+	<h1 translate="no">LightProbeGrid</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>A 3D grid of L2 Spherical Harmonic irradiance probes that provides
+position-dependent diffuse global illumination.</p>
+<p>All seven packed SH sub-volumes are stored in a <strong>single</strong> RGBA
+<code>WebGL3DRenderTarget</code> using a texture-atlas layout along the Z axis.
+Each sub-volume occupies <code>( nz + 2 )</code> atlas slices: one padding slice at
+each end (a copy of the nearest edge data slice) to prevent color bleeding
+when the hardware trilinear filter reads across a sub-volume boundary.</p>
+<p>Atlas layout (nz = resolution.z, PADDING = 1):</p>
+<p>Total atlas depth = <code>7 * ( nz + 2 )</code>.</p>
+<p>Baking is fully GPU-resident: cubemap rendering, SH projection, and
+texture packing all happen on the GPU with zero CPU readback.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre class="prettyprint source"><code>  slice   0              : padding  (copy of sub-volume 0, data slice 0)
+  slices  1 … nz         : sub-volume 0 data
+  slice   nz + 1         : padding  (copy of sub-volume 0, data slice nz-1)
+  slice   nz + 2         : padding  (copy of sub-volume 1, data slice 0)
+  slices  nz+3 … 2*nz+2  : sub-volume 1 data
+  …
+</code></pre></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">LightProbeGrid</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
+				<pre><code class="language-js">import { LightProbeGrid } from 'three/addons/lighting/LightProbeGrid.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="LightProbeGrid" translate="no">new <a href="#LightProbeGrid">LightProbeGrid</a><span class="signature">( width : <span class="param-type">number</span>, height : <span class="param-type">number</span>, depth : <span class="param-type">number</span>, widthProbes : <span class="param-type">number</span>, heightProbes : <span class="param-type">number</span>, depthProbes : <span class="param-type">number</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new irradiance probe grid.</p>
+<p>The volume is centered at the object's position.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">width</strong>
+									</td>
+									<td class="description last">
+										<p>Full width of the volume along X.</p>
+										<p>Default is <code>1</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">height</strong>
+									</td>
+									<td class="description last">
+										<p>Full height of the volume along Y.</p>
+										<p>Default is <code>1</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">depth</strong>
+									</td>
+									<td class="description last">
+										<p>Full depth of the volume along Z.</p>
+										<p>Default is <code>1</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">widthProbes</strong>
+									</td>
+									<td class="description last">
+										<p>Number of probes along X. Defaults to <code>Math.max( 2, Math.round( width ) + 1 )</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">heightProbes</strong>
+									</td>
+									<td class="description last">
+										<p>Number of probes along Y. Defaults to <code>Math.max( 2, Math.round( height ) + 1 )</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">depthProbes</strong>
+									</td>
+									<td class="description last">
+										<p>Number of probes along Z. Defaults to <code>Math.max( 2, Math.round( depth ) + 1 )</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="boundingBox" translate="no">.<a href="#boundingBox">boundingBox</a><span class="type-signature"> : <a href="Box3.html">Box3</a></span> </h3>
+					<div class="description">
+						<p>The world-space bounding box for the grid. Updated automatically
+by <a href="LightProbeGrid.html#bake">LightProbeGrid#bake</a>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="depth" translate="no">.<a href="#depth">depth</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>The full depth of the volume along Z.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="height" translate="no">.<a href="#height">height</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>The full height of the volume along Y.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="isLightProbeGrid" translate="no">.<a href="#isLightProbeGrid">isLightProbeGrid</a><span class="type-signature"> : boolean</span> <span class="type-signature">(readonly) </span></h3>
+					<div class="description">
+						<p>This flag can be used for type testing.</p>
+						<p>Default is <code>true</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="resolution" translate="no">.<a href="#resolution">resolution</a><span class="type-signature"> : <a href="Vector3.html">Vector3</a></span> </h3>
+					<div class="description">
+						<p>The number of probes along each axis.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="texture" translate="no">.<a href="#texture">texture</a><span class="type-signature"> : <a href="Data3DTexture.html">Data3DTexture</a></span> </h3>
+					<div class="description">
+						<p>The single RGBA atlas 3D texture storing all seven packed SH sub-volumes.</p>
+						<p>Default is <code>null</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="width" translate="no">.<a href="#width">width</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>The full width of the volume along X.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="bake" translate="no">.<a href="#bake">bake</a><span class="signature">( renderer : <span class="param-type"><a href="WebGLRenderer.html">WebGLRenderer</a></span>, scene : <span class="param-type"><a href="Scene.html">Scene</a></span>, options : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Bakes all probes by rendering cubemaps at each probe position
+and projecting to L2 SH. Fully GPU-resident with zero CPU readback.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderer</strong>
+									</td>
+									<td class="description last">
+										<p>The renderer.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">scene</strong>
+									</td>
+									<td class="description last">
+										<p>The scene to render.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>Bake options.</p>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">cubemapSize</strong>
+									</td>
+									<td class="description last">
+										<p>Resolution of each cubemap face.</p>
+										<p>Default is <code>8</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">near</strong>
+									</td>
+									<td class="description last">
+										<p>Near plane for the cube camera.</p>
+										<p>Default is <code>0.1</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">far</strong>
+									</td>
+									<td class="description last">
+										<p>Far plane for the cube camera.</p>
+										<p>Default is <code>100</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Frees GPU resources.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="getProbePosition" translate="no">.<a href="#getProbePosition">getProbePosition</a><span class="signature">( ix : <span class="param-type">number</span>, iy : <span class="param-type">number</span>, iz : <span class="param-type">number</span>, target : <span class="param-type"><a href="Vector3.html">Vector3</a></span> )</span><span class="type-signature"> : <a href="Vector3.html">Vector3</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the world-space position of the probe at grid indices (ix, iy, iz).</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">ix</strong>
+									</td>
+									<td class="description last">
+										<p>X index.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">iy</strong>
+									</td>
+									<td class="description last">
+										<p>Y index.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">iz</strong>
+									</td>
+									<td class="description last">
+										<p>Z index.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">target</strong>
+									</td>
+									<td class="description last">
+										<p>The target vector.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The world-space position.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="updateBoundingBox" translate="no">.<a href="#updateBoundingBox">updateBoundingBox</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the world-space bounding box from the current position and size.</p>
+						</div>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/lighting/LightProbeGrid.js" translate="no" target="_blank" rel="noopener">examples/jsm/lighting/LightProbeGrid.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 172 - 0
docs/pages/LightProbeGrid.html.md

@@ -0,0 +1,172 @@
+# LightProbeGrid
+
+A 3D grid of L2 Spherical Harmonic irradiance probes that provides position-dependent diffuse global illumination.
+
+All seven packed SH sub-volumes are stored in a **single** RGBA `WebGL3DRenderTarget` using a texture-atlas layout along the Z axis. Each sub-volume occupies `( nz + 2 )` atlas slices: one padding slice at each end (a copy of the nearest edge data slice) to prevent color bleeding when the hardware trilinear filter reads across a sub-volume boundary.
+
+Atlas layout (nz = resolution.z, PADDING = 1):
+
+Total atlas depth = `7 * ( nz + 2 )`.
+
+Baking is fully GPU-resident: cubemap rendering, SH projection, and texture packing all happen on the GPU with zero CPU readback.
+
+## Code Example
+
+```js
+slice   0              : padding  (copy of sub-volume 0, data slice 0)
+  slices  1 … nz         : sub-volume 0 data
+  slice   nz + 1         : padding  (copy of sub-volume 0, data slice nz-1)
+  slice   nz + 2         : padding  (copy of sub-volume 1, data slice 0)
+  slices  nz+3 … 2*nz+2  : sub-volume 1 data
+  …
+```
+
+## Import
+
+LightProbeGrid is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { LightProbeGrid } from 'three/addons/lighting/LightProbeGrid.js';
+```
+
+## Constructor
+
+### new LightProbeGrid( width : number, height : number, depth : number, widthProbes : number, heightProbes : number, depthProbes : number )
+
+Constructs a new irradiance probe grid.
+
+The volume is centered at the object's position.
+
+**width**
+
+Full width of the volume along X.
+
+Default is `1`.
+
+**height**
+
+Full height of the volume along Y.
+
+Default is `1`.
+
+**depth**
+
+Full depth of the volume along Z.
+
+Default is `1`.
+
+**widthProbes**
+
+Number of probes along X. Defaults to `Math.max( 2, Math.round( width ) + 1 )`.
+
+**heightProbes**
+
+Number of probes along Y. Defaults to `Math.max( 2, Math.round( height ) + 1 )`.
+
+**depthProbes**
+
+Number of probes along Z. Defaults to `Math.max( 2, Math.round( depth ) + 1 )`.
+
+## Properties
+
+### .boundingBox : Box3
+
+The world-space bounding box for the grid. Updated automatically by [LightProbeGrid#bake](LightProbeGrid.html#bake).
+
+### .depth : number
+
+The full depth of the volume along Z.
+
+### .height : number
+
+The full height of the volume along Y.
+
+### .isLightProbeGrid : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .resolution : Vector3
+
+The number of probes along each axis.
+
+### .texture : Data3DTexture
+
+The single RGBA atlas 3D texture storing all seven packed SH sub-volumes.
+
+Default is `null`.
+
+### .width : number
+
+The full width of the volume along X.
+
+## Methods
+
+### .bake( renderer : WebGLRenderer, scene : Scene, options : Object )
+
+Bakes all probes by rendering cubemaps at each probe position and projecting to L2 SH. Fully GPU-resident with zero CPU readback.
+
+**renderer**
+
+The renderer.
+
+**scene**
+
+The scene to render.
+
+**options**
+
+Bake options.
+
+**cubemapSize**
+
+Resolution of each cubemap face.
+
+Default is `8`.
+
+**near**
+
+Near plane for the cube camera.
+
+Default is `0.1`.
+
+**far**
+
+Far plane for the cube camera.
+
+Default is `100`.
+
+### .dispose()
+
+Frees GPU resources.
+
+### .getProbePosition( ix : number, iy : number, iz : number, target : Vector3 ) : Vector3
+
+Returns the world-space position of the probe at grid indices (ix, iy, iz).
+
+**ix**
+
+X index.
+
+**iy**
+
+Y index.
+
+**iz**
+
+Z index.
+
+**target**
+
+The target vector.
+
+**Returns:** The world-space position.
+
+### .updateBoundingBox()
+
+Updates the world-space bounding box from the current position and size.
+
+## Source
+
+[examples/jsm/lighting/LightProbeGrid.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/lighting/LightProbeGrid.js)

+ 92 - 0
docs/pages/LightProbeGridHelper.html

@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>LightProbeGridHelper - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Object3D.html">Object3D</a> → <a href="Mesh.html">Mesh</a> → <a href="InstancedMesh.html">InstancedMesh</a> → </p>
+	<h1 translate="no">LightProbeGridHelper</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Visualizes an <a href="LightProbeGrid.html">LightProbeGrid</a> by rendering a sphere at each
+probe position, shaded with the probe's L1 spherical harmonics.</p>
+<p>Uses a single <code>InstancedMesh</code> draw call for all probes.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const helper = new LightProbeGridHelper( probes );
+scene.add( helper );
+</code></pre></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">LightProbeGridHelper</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
+				<pre><code class="language-js">import { LightProbeGridHelper } from 'three/addons/helpers/LightProbeGridHelper.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="LightProbeGridHelper" translate="no">new <a href="#LightProbeGridHelper">LightProbeGridHelper</a><span class="signature">( probes : <span class="param-type"><a href="LightProbeGrid.html">LightProbeGrid</a></span>, sphereSize : <span class="param-type">number</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new irradiance probe grid helper.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">probes</strong>
+									</td>
+									<td class="description last">
+										<p>The probe grid to visualize.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">sphereSize</strong>
+									</td>
+									<td class="description last">
+										<p>The radius of each probe sphere.</p>
+										<p>Default is <code>0.12</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="probes" translate="no">.<a href="#probes">probes</a><span class="type-signature"> : <a href="LightProbeGrid.html">LightProbeGrid</a></span> </h3>
+					<div class="description">
+						<p>The probe grid to visualize.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Frees the GPU-related resources allocated by this instance. Call this
+method whenever this instance is no longer used in your app.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="InstancedMesh.html#dispose">InstancedMesh#dispose</a></dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="update" translate="no">.<a href="#update">update</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Rebuilds instance matrices and UVW attributes from the current probe grid.
+Call this after changing <code>probes</code> or after re-baking.</p>
+						</div>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/helpers/LightProbeGridHelper.js" translate="no" target="_blank" rel="noopener">examples/jsm/helpers/LightProbeGridHelper.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 60 - 0
docs/pages/LightProbeGridHelper.html.md

@@ -0,0 +1,60 @@
+*Inheritance: EventDispatcher → Object3D → Mesh → InstancedMesh →*
+
+# LightProbeGridHelper
+
+Visualizes an [LightProbeGrid](LightProbeGrid.html) by rendering a sphere at each probe position, shaded with the probe's L1 spherical harmonics.
+
+Uses a single `InstancedMesh` draw call for all probes.
+
+## Code Example
+
+```js
+const helper = new LightProbeGridHelper( probes );
+scene.add( helper );
+```
+
+## Import
+
+LightProbeGridHelper is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { LightProbeGridHelper } from 'three/addons/helpers/LightProbeGridHelper.js';
+```
+
+## Constructor
+
+### new LightProbeGridHelper( probes : LightProbeGrid, sphereSize : number )
+
+Constructs a new irradiance probe grid helper.
+
+**probes**
+
+The probe grid to visualize.
+
+**sphereSize**
+
+The radius of each probe sphere.
+
+Default is `0.12`.
+
+## Properties
+
+### .probes : LightProbeGrid
+
+The probe grid to visualize.
+
+## Methods
+
+### .dispose()
+
+Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
+
+**Overrides:** [InstancedMesh#dispose](InstancedMesh.html#dispose)
+
+### .update()
+
+Rebuilds instance matrices and UVW attributes from the current probe grid. Call this after changing `probes` or after re-baking.
+
+## Source
+
+[examples/jsm/helpers/LightProbeGridHelper.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/helpers/LightProbeGridHelper.js)

+ 24 - 0
docs/pages/Line2NodeMaterial.html

@@ -136,6 +136,30 @@ When set to <code>false</code> the unit is pixel.</p>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="copy" translate="no">.<a href="#copy">copy</a><span class="signature">( source : <span class="param-type"><a href="Line2NodeMaterial.html">Line2NodeMaterial</a></span> )</span><span class="type-signature"> : <a href="Line2NodeMaterial.html">Line2NodeMaterial</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Copies the properties of the given material to this instance.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">source</strong>
+									</td>
+									<td class="description last">
+										<p>The material to copy.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="NodeMaterial.html#copy">NodeMaterial#copy</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this material.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span> </h3>
 					<div class="method">
 						<div class="description">

+ 12 - 0
docs/pages/Line2NodeMaterial.html.md

@@ -98,6 +98,18 @@ Default is `false`.
 
 ## Methods
 
+### .copy( source : Line2NodeMaterial ) : Line2NodeMaterial
+
+Copies the properties of the given material to this instance.
+
+**source**
+
+The material to copy.
+
+**Overrides:** [NodeMaterial#copy](NodeMaterial.html#copy)
+
+**Returns:** A reference to this material.
+
 ### .setup( builder : NodeBuilder )
 
 Setups the vertex and fragment stage of this node material.

+ 1 - 1
docs/pages/LineMaterial.html

@@ -133,7 +133,7 @@ or in world units when <code>worldUnits</code> is <code>true</code>.</p>
 					<h3 class="name" id="resolution" translate="no">.<a href="#resolution">resolution</a><span class="type-signature"> : <a href="Vector2.html">Vector2</a></span> </h3>
 					<div class="description">
 						<p>The size of the viewport, in screen pixels. This must be kept updated to make
-screen-space rendering accurate.The <code>LineSegments2.onBeforeRender</code> callback
+screen-space rendering accurate. The <code>LineSegments2.onBeforeRender</code> callback
 performs the update for visible objects.</p>
 					</div>
 				</div>

+ 1 - 1
docs/pages/LineMaterial.html.md

@@ -94,7 +94,7 @@ Default is `1`.
 
 ### .resolution : Vector2
 
-The size of the viewport, in screen pixels. This must be kept updated to make screen-space rendering accurate.The `LineSegments2.onBeforeRender` callback performs the update for visible objects.
+The size of the viewport, in screen pixels. This must be kept updated to make screen-space rendering accurate. The `LineSegments2.onBeforeRender` callback performs the update for visible objects.
 
 ### .worldUnits : boolean
 

+ 9 - 9
docs/pages/MathNode.html

@@ -104,10 +104,10 @@ They are divided into three categories:</p>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getInputType" translate="no">.<a href="#getInputType">getInputType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="generateNodeType" translate="no">.<a href="#generateNodeType">generateNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>The input type is inferred from the node types of the input nodes.</p>
+							<p>The selected method as well as the input type determine the node type of this node.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -122,13 +122,16 @@ They are divided into three categories:</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The input type.</dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#generateNodeType">TempNode#generateNodeType</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getNodeType" translate="no">.<a href="#getNodeType">getNodeType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<h3 class="name name-method" id="getInputType" translate="no">.<a href="#getInputType">getInputType</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>The selected method as well as the input type determine the node type of this node.</p>
+							<p>The input type is inferred from the node types of the input nodes.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -143,10 +146,7 @@ They are divided into three categories:</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#getNodeType">TempNode#getNodeType</a></dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The node type.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The input type.</dt>
 						</dl>
 					</div>
 				<h2 class="subsection-title">Source</h2>

+ 8 - 8
docs/pages/MathNode.html.md

@@ -64,27 +64,27 @@ The method name.
 
 ## Methods
 
-### .getInputType( builder : NodeBuilder ) : string
+### .generateNodeType( builder : NodeBuilder ) : string
 
-The input type is inferred from the node types of the input nodes.
+The selected method as well as the input type determine the node type of this node.
 
 **builder**
 
 The current node builder.
 
-**Returns:** The input type.
+**Overrides:** [TempNode#generateNodeType](TempNode.html#generateNodeType)
 
-### .getNodeType( builder : NodeBuilder ) : string
+**Returns:** The node type.
 
-The selected method as well as the input type determine the node type of this node.
+### .getInputType( builder : NodeBuilder ) : string
+
+The input type is inferred from the node types of the input nodes.
 
 **builder**
 
 The current node builder.
 
-**Overrides:** [TempNode#getNodeType](TempNode.html#getNodeType)
-
-**Returns:** The node type.
+**Returns:** The input type.
 
 ## Source
 

+ 0 - 7
docs/pages/Matrix2.html

@@ -94,13 +94,6 @@ initializes the matrix as an identity matrix.</p>
 						<p>A column-major list of matrix values.</p>
 					</div>
 				</div>
-				<div class="member">
-					<h3 class="name" id="isMatrix2" translate="no">.<a href="#isMatrix2">isMatrix2</a><span class="type-signature"> : boolean</span> <span class="type-signature">(readonly) </span></h3>
-					<div class="description">
-						<p>This flag can be used for type testing.</p>
-						<p>Default is <code>true</code>.</p>
-					</div>
-				</div>
 				<h2 class="subsection-title">Methods</h2>
 					<h3 class="name name-method" id="fromArray" translate="no">.<a href="#fromArray">fromArray</a><span class="signature">( array : <span class="param-type">Array.&lt;number></span>, offset : <span class="param-type">number</span> )</span><span class="type-signature"> : <a href="Matrix2.html">Matrix2</a></span> </h3>
 					<div class="method">

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно

粤ICP备19079148号