Browse Source

Updated docs.

Mr.doob 2 weeks ago
parent
commit
2e1ece1c4e
100 changed files with 3829 additions and 1281 deletions
  1. 68 13
      docs/index.html
  2. 55 18
      docs/llms-full.txt
  3. 2 2
      docs/llms.txt
  4. 1 1
      docs/pages/ARButton.html
  5. 1 1
      docs/pages/ARButton.html.md
  6. 5 5
      docs/pages/AmmoPhysics.html
  7. 3 5
      docs/pages/AmmoPhysics.html.md
  8. 0 222
      docs/pages/AnamorphicNode.html
  9. 0 127
      docs/pages/AnamorphicNode.html.md
  10. 1473 0
      docs/pages/Backend.html
  11. 707 0
      docs/pages/Backend.html.md
  12. 0 89
      docs/pages/BatchNode.html
  13. 0 43
      docs/pages/BatchNode.html.md
  14. 37 0
      docs/pages/BloomNode.html
  15. 20 0
      docs/pages/BloomNode.html.md
  16. 4 0
      docs/pages/Box3.html
  17. 2 0
      docs/pages/Box3.html.md
  18. 43 0
      docs/pages/CityGenerator.html
  19. 20 0
      docs/pages/CityGenerator.html.md
  20. 14 6
      docs/pages/DRACOExporter.html
  21. 11 4
      docs/pages/DRACOExporter.html.md
  22. 7 5
      docs/pages/DRACOLoader.html
  23. 6 5
      docs/pages/DRACOLoader.html.md
  24. 23 0
      docs/pages/DataTextureLoader.html
  25. 10 0
      docs/pages/DataTextureLoader.html.md
  26. 1 3
      docs/pages/ExternalTexture.html
  27. 0 2
      docs/pages/ExternalTexture.html.md
  28. 46 0
      docs/pages/FaceFrame.html
  29. 21 0
      docs/pages/FaceFrame.html.md
  30. 8 0
      docs/pages/FirstPersonControls.html
  31. 6 0
      docs/pages/FirstPersonControls.html.md
  32. 47 0
      docs/pages/ForestGenerator.html
  33. 20 0
      docs/pages/ForestGenerator.html.md
  34. 46 44
      docs/pages/FrustumArray.html
  35. 37 27
      docs/pages/FrustumArray.html.md
  36. 4 1
      docs/pages/GLTFExporter.html
  37. 2 2
      docs/pages/GLTFExporter.html.md
  38. 0 209
      docs/pages/InstanceNode.html
  39. 0 115
      docs/pages/InstanceNode.html.md
  40. 0 8
      docs/pages/InstancedMesh.html
  41. 0 6
      docs/pages/InstancedMesh.html.md
  42. 0 57
      docs/pages/InstancedMeshNode.html
  43. 0 25
      docs/pages/InstancedMeshNode.html.md
  44. 2 2
      docs/pages/KTX2Loader.html
  45. 2 2
      docs/pages/KTX2Loader.html.md
  46. 3 0
      docs/pages/LWOLoader.html
  47. 2 0
      docs/pages/LWOLoader.html.md
  48. 13 1
      docs/pages/LightProbeGrid.html
  49. 7 1
      docs/pages/LightProbeGrid.html.md
  50. 12 1
      docs/pages/LightingContextNode.html
  51. 7 1
      docs/pages/LightingContextNode.html.md
  52. 60 1
      docs/pages/LightsNode.html
  53. 29 1
      docs/pages/LightsNode.html.md
  54. 16 12
      docs/pages/Line2NodeMaterial.html
  55. 11 11
      docs/pages/Line2NodeMaterial.html.md
  56. 3 0
      docs/pages/LineBasicMaterial.html
  57. 2 0
      docs/pages/LineBasicMaterial.html.md
  58. 132 0
      docs/pages/LoftGeometry.html
  59. 80 0
      docs/pages/LoftGeometry.html.md
  60. 29 0
      docs/pages/Material.html
  61. 14 0
      docs/pages/Material.html.md
  62. 27 0
      docs/pages/MaterialLoader.html
  63. 12 0
      docs/pages/MaterialLoader.html.md
  64. 9 0
      docs/pages/Matrix3.html
  65. 6 0
      docs/pages/Matrix3.html.md
  66. 13 0
      docs/pages/Matrix4.html
  67. 10 0
      docs/pages/Matrix4.html.md
  68. 18 0
      docs/pages/MeshBasicMaterial.html
  69. 12 0
      docs/pages/MeshBasicMaterial.html.md
  70. 7 0
      docs/pages/MeshDepthMaterial.html
  71. 6 0
      docs/pages/MeshDepthMaterial.html.md
  72. 7 0
      docs/pages/MeshDistanceMaterial.html
  73. 6 0
      docs/pages/MeshDistanceMaterial.html.md
  74. 27 0
      docs/pages/MeshLambertMaterial.html
  75. 20 0
      docs/pages/MeshLambertMaterial.html.md
  76. 16 0
      docs/pages/MeshMatcapMaterial.html
  77. 12 0
      docs/pages/MeshMatcapMaterial.html.md
  78. 4 0
      docs/pages/MeshNormalMaterial.html
  79. 4 0
      docs/pages/MeshNormalMaterial.html.md
  80. 27 0
      docs/pages/MeshPhongMaterial.html
  81. 20 0
      docs/pages/MeshPhongMaterial.html.md
  82. 26 0
      docs/pages/MeshPhysicalMaterial.html
  83. 24 0
      docs/pages/MeshPhysicalMaterial.html.md
  84. 28 0
      docs/pages/MeshStandardMaterial.html
  85. 22 0
      docs/pages/MeshStandardMaterial.html.md
  86. 22 0
      docs/pages/MeshToonMaterial.html
  87. 18 0
      docs/pages/MeshToonMaterial.html.md
  88. 0 115
      docs/pages/MorphNode.html
  89. 0 57
      docs/pages/MorphNode.html.md
  90. 2 1
      docs/pages/Node.html
  91. 1 1
      docs/pages/Node.html.md
  92. 39 2
      docs/pages/NodeBuilder.html
  93. 24 2
      docs/pages/NodeBuilder.html.md
  94. 40 12
      docs/pages/NodeMaterial.html
  95. 31 9
      docs/pages/NodeMaterial.html.md
  96. 1 1
      docs/pages/NodeMaterialObserver.html
  97. 1 1
      docs/pages/NodeMaterialObserver.html.md
  98. 11 1
      docs/pages/Object3D.html
  99. 7 1
      docs/pages/Object3D.html.md
  100. 95 0
      docs/pages/OverrideContextNode.html

+ 68 - 13
docs/index.html

@@ -292,7 +292,6 @@
 						<li><a href="BasicEnvironmentNode.html">BasicEnvironmentNode</a></li>
 						<li><a href="BasicEnvironmentNode.html">BasicEnvironmentNode</a></li>
 						<li><a href="BasicLightMapNode.html">BasicLightMapNode</a></li>
 						<li><a href="BasicLightMapNode.html">BasicLightMapNode</a></li>
 						<li><a href="BasicLightingModel.html">BasicLightingModel</a></li>
 						<li><a href="BasicLightingModel.html">BasicLightingModel</a></li>
-						<li><a href="BatchNode.html">BatchNode</a></li>
 						<li><a href="BitcastNode.html">BitcastNode</a></li>
 						<li><a href="BitcastNode.html">BitcastNode</a></li>
 						<li><a href="BitcountNode.html">BitcountNode</a></li>
 						<li><a href="BitcountNode.html">BitcountNode</a></li>
 						<li><a href="BufferAttributeNode.html">BufferAttributeNode</a></li>
 						<li><a href="BufferAttributeNode.html">BufferAttributeNode</a></li>
@@ -327,8 +326,6 @@
 						<li><a href="IndexNode.html">IndexNode</a></li>
 						<li><a href="IndexNode.html">IndexNode</a></li>
 						<li><a href="InputNode.html">InputNode</a></li>
 						<li><a href="InputNode.html">InputNode</a></li>
 						<li><a href="InspectorNode.html">InspectorNode</a></li>
 						<li><a href="InspectorNode.html">InspectorNode</a></li>
-						<li><a href="InstanceNode.html">InstanceNode</a></li>
-						<li><a href="InstancedMeshNode.html">InstancedMeshNode</a></li>
 						<li><a href="IrradianceNode.html">IrradianceNode</a></li>
 						<li><a href="IrradianceNode.html">IrradianceNode</a></li>
 						<li><a href="IsolateNode.html">IsolateNode</a></li>
 						<li><a href="IsolateNode.html">IsolateNode</a></li>
 						<li><a href="JoinNode.html">JoinNode</a></li>
 						<li><a href="JoinNode.html">JoinNode</a></li>
@@ -345,7 +342,6 @@
 						<li><a href="MaxMipLevelNode.html">MaxMipLevelNode</a></li>
 						<li><a href="MaxMipLevelNode.html">MaxMipLevelNode</a></li>
 						<li><a href="MemberNode.html">MemberNode</a></li>
 						<li><a href="MemberNode.html">MemberNode</a></li>
 						<li><a href="ModelNode.html">ModelNode</a></li>
 						<li><a href="ModelNode.html">ModelNode</a></li>
-						<li><a href="MorphNode.html">MorphNode</a></li>
 						<li><a href="Node.html">Node</a></li>
 						<li><a href="Node.html">Node</a></li>
 						<li><a href="NodeAttribute.html">NodeAttribute</a></li>
 						<li><a href="NodeAttribute.html">NodeAttribute</a></li>
 						<li><a href="NodeBuilder.html">NodeBuilder</a></li>
 						<li><a href="NodeBuilder.html">NodeBuilder</a></li>
@@ -363,6 +359,7 @@
 						<li><a href="Object3DNode.html">Object3DNode</a></li>
 						<li><a href="Object3DNode.html">Object3DNode</a></li>
 						<li><a href="OperatorNode.html">OperatorNode</a></li>
 						<li><a href="OperatorNode.html">OperatorNode</a></li>
 						<li><a href="OutputStructNode.html">OutputStructNode</a></li>
 						<li><a href="OutputStructNode.html">OutputStructNode</a></li>
+						<li><a href="OverrideContextNode.html">OverrideContextNode</a></li>
 						<li><a href="PMREMNode.html">PMREMNode</a></li>
 						<li><a href="PMREMNode.html">PMREMNode</a></li>
 						<li><a href="PackFloatNode.html">PackFloatNode</a></li>
 						<li><a href="PackFloatNode.html">PackFloatNode</a></li>
 						<li><a href="ParameterNode.html">ParameterNode</a></li>
 						<li><a href="ParameterNode.html">ParameterNode</a></li>
@@ -392,7 +389,6 @@
 						<li><a href="ShadowBaseNode.html">ShadowBaseNode</a></li>
 						<li><a href="ShadowBaseNode.html">ShadowBaseNode</a></li>
 						<li><a href="ShadowMaskModel.html">ShadowMaskModel</a></li>
 						<li><a href="ShadowMaskModel.html">ShadowMaskModel</a></li>
 						<li><a href="ShadowNode.html">ShadowNode</a></li>
 						<li><a href="ShadowNode.html">ShadowNode</a></li>
-						<li><a href="SkinningNode.html">SkinningNode</a></li>
 						<li><a href="SplitNode.html">SplitNode</a></li>
 						<li><a href="SplitNode.html">SplitNode</a></li>
 						<li><a href="SpotLightNode.html">SpotLightNode</a></li>
 						<li><a href="SpotLightNode.html">SpotLightNode</a></li>
 						<li><a href="StackNode.html">StackNode</a></li>
 						<li><a href="StackNode.html">StackNode</a></li>
@@ -449,6 +445,7 @@
 					</ul>
 					</ul>
 					<h3>Renderers</h3>
 					<h3>Renderers</h3>
 					<ul>
 					<ul>
+						<li><a href="Backend.html">Backend</a></li>
 						<li><a href="BlendMode.html">BlendMode</a></li>
 						<li><a href="BlendMode.html">BlendMode</a></li>
 						<li><a href="BundleGroup.html">BundleGroup</a></li>
 						<li><a href="BundleGroup.html">BundleGroup</a></li>
 						<li><a href="CanvasTarget.html">CanvasTarget</a></li>
 						<li><a href="CanvasTarget.html">CanvasTarget</a></li>
@@ -462,6 +459,7 @@
 						<li><a href="ReadbackBuffer.html">ReadbackBuffer</a></li>
 						<li><a href="ReadbackBuffer.html">ReadbackBuffer</a></li>
 						<li><a href="RenderPipeline.html">RenderPipeline</a></li>
 						<li><a href="RenderPipeline.html">RenderPipeline</a></li>
 						<li><a href="Renderer.html">Renderer</a></li>
 						<li><a href="Renderer.html">Renderer</a></li>
+						<li><a href="StandardNodeLibrary.html">StandardNodeLibrary</a></li>
 						<li><a href="Storage3DTexture.html">Storage3DTexture</a></li>
 						<li><a href="Storage3DTexture.html">Storage3DTexture</a></li>
 						<li><a href="StorageArrayTexture.html">StorageArrayTexture</a></li>
 						<li><a href="StorageArrayTexture.html">StorageArrayTexture</a></li>
 						<li><a href="StorageBufferAttribute.html">StorageBufferAttribute</a></li>
 						<li><a href="StorageBufferAttribute.html">StorageBufferAttribute</a></li>
@@ -588,11 +586,22 @@
 						<li><a href="STLExporter.html">STLExporter</a></li>
 						<li><a href="STLExporter.html">STLExporter</a></li>
 						<li><a href="USDZExporter.html">USDZExporter</a></li>
 						<li><a href="USDZExporter.html">USDZExporter</a></li>
 					</ul>
 					</ul>
+					<h3>Generators</h3>
+					<ul>
+						<li><a href="CityGenerator.html">CityGenerator</a></li>
+						<li><a href="FaceFrame.html">FaceFrame</a></li>
+						<li><a href="ForestGenerator.html">ForestGenerator</a></li>
+						<li><a href="SidewalkGenerator.html">SidewalkGenerator</a></li>
+						<li><a href="SkyscraperGenerator.html">SkyscraperGenerator</a></li>
+						<li><a href="TerrainGenerator.html">TerrainGenerator</a></li>
+						<li><a href="TreeGenerator.html">TreeGenerator</a></li>
+					</ul>
 					<h3>Geometries</h3>
 					<h3>Geometries</h3>
 					<ul>
 					<ul>
 						<li><a href="BoxLineGeometry.html">BoxLineGeometry</a></li>
 						<li><a href="BoxLineGeometry.html">BoxLineGeometry</a></li>
 						<li><a href="ConvexGeometry.html">ConvexGeometry</a></li>
 						<li><a href="ConvexGeometry.html">ConvexGeometry</a></li>
 						<li><a href="DecalGeometry.html">DecalGeometry</a></li>
 						<li><a href="DecalGeometry.html">DecalGeometry</a></li>
+						<li><a href="LoftGeometry.html">LoftGeometry</a></li>
 						<li><a href="ParametricGeometry.html">ParametricGeometry</a></li>
 						<li><a href="ParametricGeometry.html">ParametricGeometry</a></li>
 						<li><a href="RoundedBoxGeometry.html">RoundedBoxGeometry</a></li>
 						<li><a href="RoundedBoxGeometry.html">RoundedBoxGeometry</a></li>
 						<li><a href="TeapotGeometry.html">TeapotGeometry</a></li>
 						<li><a href="TeapotGeometry.html">TeapotGeometry</a></li>
@@ -637,7 +646,6 @@
 						<li><a href="ClusteredLighting.html">ClusteredLighting</a></li>
 						<li><a href="ClusteredLighting.html">ClusteredLighting</a></li>
 						<li><a href="DynamicLighting.html">DynamicLighting</a></li>
 						<li><a href="DynamicLighting.html">DynamicLighting</a></li>
 						<li><a href="LightProbeGrid.html">LightProbeGrid</a></li>
 						<li><a href="LightProbeGrid.html">LightProbeGrid</a></li>
-						<li><a href="TiledLighting.html">TiledLighting</a></li>
 					</ul>
 					</ul>
 					<h3>Lights</h3>
 					<h3>Lights</h3>
 					<ul>
 					<ul>
@@ -740,6 +748,7 @@
 						<li><a href="RollerCoasterLiftersGeometry.html">RollerCoasterLiftersGeometry</a></li>
 						<li><a href="RollerCoasterLiftersGeometry.html">RollerCoasterLiftersGeometry</a></li>
 						<li><a href="RollerCoasterShadowGeometry.html">RollerCoasterShadowGeometry</a></li>
 						<li><a href="RollerCoasterShadowGeometry.html">RollerCoasterShadowGeometry</a></li>
 						<li><a href="SkyGeometry.html">SkyGeometry</a></li>
 						<li><a href="SkyGeometry.html">SkyGeometry</a></li>
+						<li><a href="TileCreasedNormalsPlugin.html">TileCreasedNormalsPlugin</a></li>
 						<li><a href="TreesGeometry.html">TreesGeometry</a></li>
 						<li><a href="TreesGeometry.html">TreesGeometry</a></li>
 						<li><a href="TubePainter.html">TubePainter</a></li>
 						<li><a href="TubePainter.html">TubePainter</a></li>
 						<li><a href="Volume.html">Volume</a></li>
 						<li><a href="Volume.html">Volume</a></li>
@@ -879,7 +888,6 @@
 						<li><a href="AfterImageNode.html">AfterImageNode</a></li>
 						<li><a href="AfterImageNode.html">AfterImageNode</a></li>
 						<li><a href="AmbientLightDataNode.html">AmbientLightDataNode</a></li>
 						<li><a href="AmbientLightDataNode.html">AmbientLightDataNode</a></li>
 						<li><a href="AnaglyphPassNode.html">AnaglyphPassNode</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>
 						<li><a href="BilateralBlurNode.html">BilateralBlurNode</a></li>
 						<li><a href="BloomNode.html">BloomNode</a></li>
 						<li><a href="BloomNode.html">BloomNode</a></li>
 						<li><a href="ChromaticAberrationNode.html">ChromaticAberrationNode</a></li>
 						<li><a href="ChromaticAberrationNode.html">ChromaticAberrationNode</a></li>
@@ -919,10 +927,10 @@
 						<li><a href="TRAANode.html">TRAANode</a></li>
 						<li><a href="TRAANode.html">TRAANode</a></li>
 						<li><a href="TileShadowNode.html">TileShadowNode</a></li>
 						<li><a href="TileShadowNode.html">TileShadowNode</a></li>
 						<li><a href="TileShadowNodeHelper.html">TileShadowNodeHelper</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="TransitionNode.html">TransitionNode</a></li>
 						<li><a href="WebGLNodesHandler.html">WebGLNodesHandler</a></li>
 						<li><a href="WebGLNodesHandler.html">WebGLNodesHandler</a></li>
 						<li><a href="module-Bayer.html">Bayer</a></li>
 						<li><a href="module-Bayer.html">Bayer</a></li>
+						<li><a href="module-GroundedSkybox.html">GroundedSkybox</a></li>
 						<li><a href="module-Raymarching.html">Raymarching</a></li>
 						<li><a href="module-Raymarching.html">Raymarching</a></li>
 					</ul>
 					</ul>
 					<h3>Textures</h3>
 					<h3>Textures</h3>
@@ -995,9 +1003,10 @@
 						<li><a href="TSL.html#afterImage">afterImage</a></li>
 						<li><a href="TSL.html#afterImage">afterImage</a></li>
 						<li><a href="TSL.html#agxToneMapping">agxToneMapping</a></li>
 						<li><a href="TSL.html#agxToneMapping">agxToneMapping</a></li>
 						<li><a href="TSL.html#all">all</a></li>
 						<li><a href="TSL.html#all">all</a></li>
+						<li><a href="TSL.html#alphaLine">alphaLine</a></li>
 						<li><a href="TSL.html#alphaT">alphaT</a></li>
 						<li><a href="TSL.html#alphaT">alphaT</a></li>
+						<li><a href="TSL.html#ambientOcclusion">ambientOcclusion</a></li>
 						<li><a href="TSL.html#anaglyphPass">anaglyphPass</a></li>
 						<li><a href="TSL.html#anaglyphPass">anaglyphPass</a></li>
-						<li><a href="TSL.html#anamorphic">anamorphic</a></li>
 						<li><a href="TSL.html#and">and</a></li>
 						<li><a href="TSL.html#and">and</a></li>
 						<li><a href="TSL.html#anisotropy">anisotropy</a></li>
 						<li><a href="TSL.html#anisotropy">anisotropy</a></li>
 						<li><a href="TSL.html#anisotropyB">anisotropyB</a></li>
 						<li><a href="TSL.html#anisotropyB">anisotropyB</a></li>
@@ -1079,7 +1088,6 @@
 						<li><a href="TSL.html#chromaticAberration">chromaticAberration</a></li>
 						<li><a href="TSL.html#chromaticAberration">chromaticAberration</a></li>
 						<li><a href="TSL.html#cineonToneMapping">cineonToneMapping</a></li>
 						<li><a href="TSL.html#cineonToneMapping">cineonToneMapping</a></li>
 						<li><a href="TSL.html#circle">circle</a></li>
 						<li><a href="TSL.html#circle">circle</a></li>
-						<li><a href="TSL.html#circleIntersectsAABB">circleIntersectsAABB</a></li>
 						<li><a href="TSL.html#clamp">clamp</a></li>
 						<li><a href="TSL.html#clamp">clamp</a></li>
 						<li><a href="TSL.html#clearcoat">clearcoat</a></li>
 						<li><a href="TSL.html#clearcoat">clearcoat</a></li>
 						<li><a href="TSL.html#clearcoatNormalView">clearcoatNormalView</a></li>
 						<li><a href="TSL.html#clearcoatNormalView">clearcoatNormalView</a></li>
@@ -1091,7 +1099,7 @@
 						<li><a href="TSL.html#code">code</a></li>
 						<li><a href="TSL.html#code">code</a></li>
 						<li><a href="TSL.html#colorBleeding">colorBleeding</a></li>
 						<li><a href="TSL.html#colorBleeding">colorBleeding</a></li>
 						<li><a href="TSL.html#colorSpaceToWorking">colorSpaceToWorking</a></li>
 						<li><a href="TSL.html#colorSpaceToWorking">colorSpaceToWorking</a></li>
-						<li><a href="TSL.html#unpackRGBToNormal">unpackRGBToNormal</a></li>
+						<li><a href="TSL.html#colorToDirection">colorToDirection</a></li>
 						<li><a href="TSL.html#compute">compute</a></li>
 						<li><a href="TSL.html#compute">compute</a></li>
 						<li><a href="TSL.html#computeBuiltin">computeBuiltin</a></li>
 						<li><a href="TSL.html#computeBuiltin">computeBuiltin</a></li>
 						<li><a href="TSL.html#computeKernel">computeKernel</a></li>
 						<li><a href="TSL.html#computeKernel">computeKernel</a></li>
@@ -1109,6 +1117,7 @@
 						<li><a href="TSL.html#cubeMapNode">cubeMapNode</a></li>
 						<li><a href="TSL.html#cubeMapNode">cubeMapNode</a></li>
 						<li><a href="TSL.html#cubeTexture">cubeTexture</a></li>
 						<li><a href="TSL.html#cubeTexture">cubeTexture</a></li>
 						<li><a href="TSL.html#cubeTextureBase">cubeTextureBase</a></li>
 						<li><a href="TSL.html#cubeTextureBase">cubeTextureBase</a></li>
+						<li><a href="TSL.html#curlNoise">curlNoise</a></li>
 						<li><a href="TSL.html#dFdx">dFdx</a></li>
 						<li><a href="TSL.html#dFdx">dFdx</a></li>
 						<li><a href="TSL.html#dFdy">dFdy</a></li>
 						<li><a href="TSL.html#dFdy">dFdy</a></li>
 						<li><a href="TSL.html#dashSize">dashSize</a></li>
 						<li><a href="TSL.html#dashSize">dashSize</a></li>
@@ -1126,7 +1135,7 @@
 						<li><a href="TSL.html#difference">difference</a></li>
 						<li><a href="TSL.html#difference">difference</a></li>
 						<li><a href="TSL.html#diffuseColor">diffuseColor</a></li>
 						<li><a href="TSL.html#diffuseColor">diffuseColor</a></li>
 						<li><a href="TSL.html#diffuseContribution">diffuseContribution</a></li>
 						<li><a href="TSL.html#diffuseContribution">diffuseContribution</a></li>
-						<li><a href="TSL.html#packNormalToRGB">packNormalToRGB</a></li>
+						<li><a href="TSL.html#directionToColor">directionToColor</a></li>
 						<li><a href="TSL.html#directionToFaceDirection">directionToFaceDirection</a></li>
 						<li><a href="TSL.html#directionToFaceDirection">directionToFaceDirection</a></li>
 						<li><a href="TSL.html#dispersion">dispersion</a></li>
 						<li><a href="TSL.html#dispersion">dispersion</a></li>
 						<li><a href="TSL.html#distance">distance</a></li>
 						<li><a href="TSL.html#distance">distance</a></li>
@@ -1139,6 +1148,7 @@
 						<li><a href="TSL.html#dynamicLights">dynamicLights</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#emissive">emissive</a></li>
 						<li><a href="TSL.html#equal">equal</a></li>
 						<li><a href="TSL.html#equal">equal</a></li>
+						<li><a href="TSL.html#equirectDirection">equirectDirection</a></li>
 						<li><a href="TSL.html#equirectUV">equirectUV</a></li>
 						<li><a href="TSL.html#equirectUV">equirectUV</a></li>
 						<li><a href="TSL.html#exp">exp</a></li>
 						<li><a href="TSL.html#exp">exp</a></li>
 						<li><a href="TSL.html#exp2">exp2</a></li>
 						<li><a href="TSL.html#exp2">exp2</a></li>
@@ -1286,7 +1296,9 @@
 						<li><a href="TSL.html#motionBlur">motionBlur</a></li>
 						<li><a href="TSL.html#motionBlur">motionBlur</a></li>
 						<li><a href="TSL.html#mrt">mrt</a></li>
 						<li><a href="TSL.html#mrt">mrt</a></li>
 						<li><a href="TSL.html#mul">mul</a></li>
 						<li><a href="TSL.html#mul">mul</a></li>
+						<li><a href="TSL.html#mvpLine">mvpLine</a></li>
 						<li><a href="TSL.html#negate">negate</a></li>
 						<li><a href="TSL.html#negate">negate</a></li>
+						<li><a href="TSL.html#negateOnBackSide">negateOnBackSide</a></li>
 						<li><a href="TSL.html#neutralToneMapping">neutralToneMapping</a></li>
 						<li><a href="TSL.html#neutralToneMapping">neutralToneMapping</a></li>
 						<li><a href="TSL.html#normalFlat">normalFlat</a></li>
 						<li><a href="TSL.html#normalFlat">normalFlat</a></li>
 						<li><a href="TSL.html#normalGeometry">normalGeometry</a></li>
 						<li><a href="TSL.html#normalGeometry">normalGeometry</a></li>
@@ -1318,7 +1330,10 @@
 						<li><a href="TSL.html#output">output</a></li>
 						<li><a href="TSL.html#output">output</a></li>
 						<li><a href="TSL.html#outputStruct">outputStruct</a></li>
 						<li><a href="TSL.html#outputStruct">outputStruct</a></li>
 						<li><a href="TSL.html#overloadingFn">overloadingFn</a></li>
 						<li><a href="TSL.html#overloadingFn">overloadingFn</a></li>
+						<li><a href="TSL.html#overrideNode">overrideNode</a></li>
+						<li><a href="TSL.html#overrideNodes">overrideNodes</a></li>
 						<li><a href="TSL.html#packHalf2x16">packHalf2x16</a></li>
 						<li><a href="TSL.html#packHalf2x16">packHalf2x16</a></li>
+						<li><a href="TSL.html#packNormalToRGB">packNormalToRGB</a></li>
 						<li><a href="TSL.html#packSnorm2x16">packSnorm2x16</a></li>
 						<li><a href="TSL.html#packSnorm2x16">packSnorm2x16</a></li>
 						<li><a href="TSL.html#packUnorm2x16">packUnorm2x16</a></li>
 						<li><a href="TSL.html#packUnorm2x16">packUnorm2x16</a></li>
 						<li><a href="TSL.html#parabola">parabola</a></li>
 						<li><a href="TSL.html#parabola">parabola</a></li>
@@ -1329,6 +1344,7 @@
 						<li><a href="TSL.html#pass">pass</a></li>
 						<li><a href="TSL.html#pass">pass</a></li>
 						<li><a href="TSL.html#passTexture">passTexture</a></li>
 						<li><a href="TSL.html#passTexture">passTexture</a></li>
 						<li><a href="TSL.html#pcurve">pcurve</a></li>
 						<li><a href="TSL.html#pcurve">pcurve</a></li>
+						<li><a href="TSL.html#permute">permute</a></li>
 						<li><a href="TSL.html#perspectiveDepthToViewZ">perspectiveDepthToViewZ</a></li>
 						<li><a href="TSL.html#perspectiveDepthToViewZ">perspectiveDepthToViewZ</a></li>
 						<li><a href="TSL.html#pixelationPass">pixelationPass</a></li>
 						<li><a href="TSL.html#pixelationPass">pixelationPass</a></li>
 						<li><a href="TSL.html#pmremTexture">pmremTexture</a></li>
 						<li><a href="TSL.html#pmremTexture">pmremTexture</a></li>
@@ -1415,6 +1431,8 @@
 						<li><a href="TSL.html#smaa">smaa</a></li>
 						<li><a href="TSL.html#smaa">smaa</a></li>
 						<li><a href="TSL.html#smoothstep">smoothstep</a></li>
 						<li><a href="TSL.html#smoothstep">smoothstep</a></li>
 						<li><a href="TSL.html#smoothstepElement">smoothstepElement</a></li>
 						<li><a href="TSL.html#smoothstepElement">smoothstepElement</a></li>
+						<li><a href="TSL.html#snoise">snoise</a></li>
+						<li><a href="TSL.html#snoiseVec3">snoiseVec3</a></li>
 						<li><a href="TSL.html#sobel">sobel</a></li>
 						<li><a href="TSL.html#sobel">sobel</a></li>
 						<li><a href="TSL.html#specularColor">specularColor</a></li>
 						<li><a href="TSL.html#specularColor">specularColor</a></li>
 						<li><a href="TSL.html#specularColorBlended">specularColorBlended</a></li>
 						<li><a href="TSL.html#specularColorBlended">specularColorBlended</a></li>
@@ -1481,7 +1499,6 @@
 						<li><a href="TSL.html#textureSize">textureSize</a></li>
 						<li><a href="TSL.html#textureSize">textureSize</a></li>
 						<li><a href="TSL.html#textureStore">textureStore</a></li>
 						<li><a href="TSL.html#textureStore">textureStore</a></li>
 						<li><a href="TSL.html#thickness">thickness</a></li>
 						<li><a href="TSL.html#thickness">thickness</a></li>
-						<li><a href="TSL.html#tiledLights">tiledLights</a></li>
 						<li><a href="TSL.html#time">time</a></li>
 						<li><a href="TSL.html#time">time</a></li>
 						<li><a href="TSL.html#toneMapping">toneMapping</a></li>
 						<li><a href="TSL.html#toneMapping">toneMapping</a></li>
 						<li><a href="TSL.html#toneMappingExposure">toneMappingExposure</a></li>
 						<li><a href="TSL.html#toneMappingExposure">toneMappingExposure</a></li>
@@ -1489,6 +1506,8 @@
 						<li><a href="TSL.html#traa">traa</a></li>
 						<li><a href="TSL.html#traa">traa</a></li>
 						<li><a href="TSL.html#transformDirection">transformDirection</a></li>
 						<li><a href="TSL.html#transformDirection">transformDirection</a></li>
 						<li><a href="TSL.html#transformNormal">transformNormal</a></li>
 						<li><a href="TSL.html#transformNormal">transformNormal</a></li>
+						<li><a href="TSL.html#transformNormalByInverseViewMatrix">transformNormalByInverseViewMatrix</a></li>
+						<li><a href="TSL.html#transformNormalByViewMatrix">transformNormalByViewMatrix</a></li>
 						<li><a href="TSL.html#transformNormalToView">transformNormalToView</a></li>
 						<li><a href="TSL.html#transformNormalToView">transformNormalToView</a></li>
 						<li><a href="TSL.html#transformedClearcoatNormalView">transformedClearcoatNormalView</a></li>
 						<li><a href="TSL.html#transformedClearcoatNormalView">transformedClearcoatNormalView</a></li>
 						<li><a href="TSL.html#transformedNormalView">transformedNormalView</a></li>
 						<li><a href="TSL.html#transformedNormalView">transformedNormalView</a></li>
@@ -1509,6 +1528,7 @@
 						<li><a href="TSL.html#uniformTexture">uniformTexture</a></li>
 						<li><a href="TSL.html#uniformTexture">uniformTexture</a></li>
 						<li><a href="TSL.html#unpackHalf2x16">unpackHalf2x16</a></li>
 						<li><a href="TSL.html#unpackHalf2x16">unpackHalf2x16</a></li>
 						<li><a href="TSL.html#unpackNormal">unpackNormal</a></li>
 						<li><a href="TSL.html#unpackNormal">unpackNormal</a></li>
+						<li><a href="TSL.html#unpackRGBToNormal">unpackRGBToNormal</a></li>
 						<li><a href="TSL.html#unpackSnorm2x16">unpackSnorm2x16</a></li>
 						<li><a href="TSL.html#unpackSnorm2x16">unpackSnorm2x16</a></li>
 						<li><a href="TSL.html#unpackUnorm2x16">unpackUnorm2x16</a></li>
 						<li><a href="TSL.html#unpackUnorm2x16">unpackUnorm2x16</a></li>
 						<li><a href="TSL.html#unpremultiplyAlpha">unpremultiplyAlpha</a></li>
 						<li><a href="TSL.html#unpremultiplyAlpha">unpremultiplyAlpha</a></li>
@@ -1777,14 +1797,30 @@
 						<li><a href="global.html#ZeroFactor">ZeroFactor</a></li>
 						<li><a href="global.html#ZeroFactor">ZeroFactor</a></li>
 						<li><a href="global.html#ZeroSlopeEnding">ZeroSlopeEnding</a></li>
 						<li><a href="global.html#ZeroSlopeEnding">ZeroSlopeEnding</a></li>
 						<li><a href="global.html#ZeroStencilOp">ZeroStencilOp</a></li>
 						<li><a href="global.html#ZeroStencilOp">ZeroStencilOp</a></li>
+						<li><a href="global.html#addArcade">addArcade</a></li>
+						<li><a href="global.html#addCornice">addCornice</a></li>
+						<li><a href="global.html#addParapet">addParapet</a></li>
+						<li><a href="global.html#addSpandrelBands">addSpandrelBands</a></li>
+						<li><a href="global.html#bakeGroups">bakeGroups</a></li>
+						<li><a href="global.html#batchColor">batchColor</a></li>
 						<li><a href="global.html#buildData3DTexture">buildData3DTexture</a></li>
 						<li><a href="global.html#buildData3DTexture">buildData3DTexture</a></li>
+						<li><a href="global.html#buildFaces">buildFaces</a></li>
+						<li><a href="global.html#buildFootprint">buildFootprint</a></li>
 						<li><a href="global.html#buildMesh">buildMesh</a></li>
 						<li><a href="global.html#buildMesh">buildMesh</a></li>
+						<li><a href="global.html#buildingPalette">buildingPalette</a></li>
 						<li><a href="global.html#ceilPowerOfTwo">ceilPowerOfTwo</a></li>
 						<li><a href="global.html#ceilPowerOfTwo">ceilPowerOfTwo</a></li>
+						<li><a href="global.html#closestLineToLine">closestLineToLine</a></li>
 						<li><a href="global.html#contain">contain</a></li>
 						<li><a href="global.html#contain">contain</a></li>
 						<li><a href="global.html#convertArray">convertArray</a></li>
 						<li><a href="global.html#convertArray">convertArray</a></li>
 						<li><a href="global.html#cover">cover</a></li>
 						<li><a href="global.html#cover">cover</a></li>
+						<li><a href="global.html#createBuildingMaterial">createBuildingMaterial</a></li>
 						<li><a href="global.html#createCanvasElement">createCanvasElement</a></li>
 						<li><a href="global.html#createCanvasElement">createCanvasElement</a></li>
 						<li><a href="global.html#createEvent">createEvent</a></li>
 						<li><a href="global.html#createEvent">createEvent</a></li>
+						<li><a href="global.html#createForestMaterial">createForestMaterial</a></li>
+						<li><a href="global.html#createInstanceMatrixNode">createInstanceMatrixNode</a></li>
+						<li><a href="global.html#createRoadMaterial">createRoadMaterial</a></li>
+						<li><a href="global.html#createSkyscraperMaterial">createSkyscraperMaterial</a></li>
+						<li><a href="global.html#createTreeMaterial">createTreeMaterial</a></li>
 						<li><a href="global.html#damp">damp</a></li>
 						<li><a href="global.html#damp">damp</a></li>
 						<li><a href="global.html#degToRad">degToRad</a></li>
 						<li><a href="global.html#degToRad">degToRad</a></li>
 						<li><a href="global.html#denormalize">denormalize</a></li>
 						<li><a href="global.html#denormalize">denormalize</a></li>
@@ -1800,27 +1836,39 @@
 						<li><a href="global.html#generateMagicSquare">generateMagicSquare</a></li>
 						<li><a href="global.html#generateMagicSquare">generateMagicSquare</a></li>
 						<li><a href="global.html#generateMagicSquareNoise">generateMagicSquareNoise</a></li>
 						<li><a href="global.html#generateMagicSquareNoise">generateMagicSquareNoise</a></li>
 						<li><a href="global.html#generateUUID">generateUUID</a></li>
 						<li><a href="global.html#generateUUID">generateUUID</a></li>
+						<li><a href="global.html#getBatchingColor">getBatchingColor</a></li>
 						<li><a href="global.html#getByteLength">getByteLength</a></li>
 						<li><a href="global.html#getByteLength">getByteLength</a></li>
 						<li><a href="global.html#getCacheKey">getCacheKey</a></li>
 						<li><a href="global.html#getCacheKey">getCacheKey</a></li>
 						<li><a href="global.html#getConsoleFunction">getConsoleFunction</a></li>
 						<li><a href="global.html#getConsoleFunction">getConsoleFunction</a></li>
 						<li><a href="global.html#getDistanceAttenuation">getDistanceAttenuation</a></li>
 						<li><a href="global.html#getDistanceAttenuation">getDistanceAttenuation</a></li>
 						<li><a href="global.html#getElementsByTagName">getElementsByTagName</a></li>
 						<li><a href="global.html#getElementsByTagName">getElementsByTagName</a></li>
+						<li><a href="global.html#getEntry">getEntry</a></li>
 						<li><a href="global.html#getFilteredStack">getFilteredStack</a></li>
 						<li><a href="global.html#getFilteredStack">getFilteredStack</a></li>
 						<li><a href="global.html#getFloatLength">getFloatLength</a></li>
 						<li><a href="global.html#getFloatLength">getFloatLength</a></li>
 						<li><a href="global.html#getFormat">getFormat</a></li>
 						<li><a href="global.html#getFormat">getFormat</a></li>
+						<li><a href="global.html#getIndirectIndex">getIndirectIndex</a></li>
 						<li><a href="global.html#getKeyframeOrder">getKeyframeOrder</a></li>
 						<li><a href="global.html#getKeyframeOrder">getKeyframeOrder</a></li>
 						<li><a href="global.html#getMembersLayout">getMembersLayout</a></li>
 						<li><a href="global.html#getMembersLayout">getMembersLayout</a></li>
+						<li><a href="global.html#getMorph">getMorph</a></li>
+						<li><a href="global.html#getPreviousInstance">getPreviousInstance</a></li>
+						<li><a href="global.html#getPreviousSkinnedPosition">getPreviousSkinnedPosition</a></li>
+						<li><a href="global.html#getSkinnedNormalAndTangent">getSkinnedNormalAndTangent</a></li>
+						<li><a href="global.html#getSkinnedPosition">getSkinnedPosition</a></li>
 						<li><a href="global.html#getStrideLength">getStrideLength</a></li>
 						<li><a href="global.html#getStrideLength">getStrideLength</a></li>
 						<li><a href="global.html#getTextureIndex">getTextureIndex</a></li>
 						<li><a href="global.html#getTextureIndex">getTextureIndex</a></li>
 						<li><a href="global.html#getUniforms">getUniforms</a></li>
 						<li><a href="global.html#getUniforms">getUniforms</a></li>
 						<li><a href="global.html#getVectorLength">getVectorLength</a></li>
 						<li><a href="global.html#getVectorLength">getVectorLength</a></li>
 						<li><a href="global.html#getViewZNode">getViewZNode</a></li>
 						<li><a href="global.html#getViewZNode">getViewZNode</a></li>
+						<li><a href="global.html#instanceColor">instanceColor</a></li>
 						<li><a href="global.html#inverseLerp">inverseLerp</a></li>
 						<li><a href="global.html#inverseLerp">inverseLerp</a></li>
 						<li><a href="global.html#isPowerOfTwo">isPowerOfTwo</a></li>
 						<li><a href="global.html#isPowerOfTwo">isPowerOfTwo</a></li>
 						<li><a href="global.html#isTypedArray">isTypedArray</a></li>
 						<li><a href="global.html#isTypedArray">isTypedArray</a></li>
 						<li><a href="global.html#lerp">lerp</a></li>
 						<li><a href="global.html#lerp">lerp</a></li>
+						<li><a href="global.html#lineDistance">lineDistance</a></li>
 						<li><a href="global.html#makeClipAdditive">makeClipAdditive</a></li>
 						<li><a href="global.html#makeClipAdditive">makeClipAdditive</a></li>
 						<li><a href="global.html#mapLinear">mapLinear</a></li>
 						<li><a href="global.html#mapLinear">mapLinear</a></li>
+						<li><a href="global.html#outgoingLight">outgoingLight</a></li>
+						<li><a href="global.html#pickBuildingColor">pickBuildingColor</a></li>
 						<li><a href="global.html#pingpong">pingpong</a></li>
 						<li><a href="global.html#pingpong">pingpong</a></li>
 						<li><a href="global.html#radToDeg">radToDeg</a></li>
 						<li><a href="global.html#radToDeg">radToDeg</a></li>
 						<li><a href="global.html#randFloat">randFloat</a></li>
 						<li><a href="global.html#randFloat">randFloat</a></li>
@@ -1833,15 +1881,22 @@
 						<li><a href="global.html#setQuaternionFromProperEuler">setQuaternionFromProperEuler</a></li>
 						<li><a href="global.html#setQuaternionFromProperEuler">setQuaternionFromProperEuler</a></li>
 						<li><a href="global.html#setupWebGLXRFallback">setupWebGLXRFallback</a></li>
 						<li><a href="global.html#setupWebGLXRFallback">setupWebGLXRFallback</a></li>
 						<li><a href="global.html#shadowRenderObjectFunction">shadowRenderObjectFunction</a></li>
 						<li><a href="global.html#shadowRenderObjectFunction">shadowRenderObjectFunction</a></li>
+						<li><a href="global.html#slab">slab</a></li>
 						<li><a href="global.html#smootherstep">smootherstep</a></li>
 						<li><a href="global.html#smootherstep">smootherstep</a></li>
 						<li><a href="global.html#sortedArray">sortedArray</a></li>
 						<li><a href="global.html#sortedArray">sortedArray</a></li>
 						<li><a href="global.html#subclip">subclip</a></li>
 						<li><a href="global.html#subclip">subclip</a></li>
 						<li><a href="global.html#toHalfFloat">toHalfFloat</a></li>
 						<li><a href="global.html#toHalfFloat">toHalfFloat</a></li>
+						<li><a href="global.html#totalDiffuse">totalDiffuse</a></li>
+						<li><a href="global.html#totalSpecular">totalSpecular</a></li>
+						<li><a href="global.html#trimSegmentAlpha">trimSegmentAlpha</a></li>
 						<li><a href="global.html#updateCamera">updateCamera</a></li>
 						<li><a href="global.html#updateCamera">updateCamera</a></li>
 						<li><a href="global.html#updateUserCamera">updateUserCamera</a></li>
 						<li><a href="global.html#updateUserCamera">updateUserCamera</a></li>
 						<li><a href="global.html#viewportResolution">viewportResolution</a></li>
 						<li><a href="global.html#viewportResolution">viewportResolution</a></li>
 						<li><a href="global.html#warn">warn</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#warnOnce">warnOnce</a></li>
+						<li><a href="global.html#worldEnd">worldEnd</a></li>
+						<li><a href="global.html#worldPos">worldPos</a></li>
+						<li><a href="global.html#worldStart">worldStart</a></li>
 						<li><a href="global.html#yieldToMain">yieldToMain</a></li>
 						<li><a href="global.html#yieldToMain">yieldToMain</a></li>
 					</ul>
 					</ul>
 
 

+ 55 - 18
docs/llms-full.txt

@@ -18,8 +18,8 @@ CORRECT - modern pattern (always use latest version):
 <script type="importmap">
 <script type="importmap">
 {
 {
   "imports": {
   "imports": {
-    "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/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.185.0/examples/jsm/"
   }
   }
 }
 }
 </script>
 </script>
@@ -100,8 +100,8 @@ When using TSL, use node-based materials:
 <script type="importmap">
 <script type="importmap">
 {
 {
   "imports": {
   "imports": {
-    "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/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.185.0/examples/jsm/"
   }
   }
 }
 }
 </script>
 </script>
@@ -175,9 +175,9 @@ renderer.setAnimationLoop( animate );
 <script type="importmap">
 <script type="importmap">
 {
 {
   "imports": {
   "imports": {
-    "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/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.webgpu.js",
+    "three/tsl": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.tsl.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.185.0/examples/jsm/"
   }
   }
 }
 }
 </script>
 </script>
@@ -322,6 +322,7 @@ An Approach to Productive and Maintainable Shader Creation.
 - [Storage](#storage)
 - [Storage](#storage)
 - [Struct](#struct)
 - [Struct](#struct)
 - [Flow Control](#flow-control)
 - [Flow Control](#flow-control)
+- [Override Node](#override-node)
 - [Fog](#fog)
 - [Fog](#fog)
 - [Color Adjustments](#color-adjustments)
 - [Color Adjustments](#color-adjustments)
 - [Utilities](#utilities)
 - [Utilities](#utilities)
@@ -760,7 +761,7 @@ It's possible use `xyzw`, `rgba` or `stpq`.
 | Name | Description |
 | Name | Description |
 | -- | -- |
 | -- | -- |
 | `.add( node \| value, ... )` | Return the addition of two or more value. |
 | `.add( node \| value, ... )` | Return the addition of two or more value. |
-| `.sub( node \| value )` | Return the subraction of two or more value. |
+| `.sub( node \| value )` | Return the subtraction of two or more value. |
 | `.mul( node \| value )` | Return the multiplication of two or more value. |
 | `.mul( node \| value )` | Return the multiplication of two or more value. |
 | `.div( node \| value )` | Return the division of two or more value. |
 | `.div( node \| value )` | Return the division of two or more value. |
 | `.mod( node \| value )` | Computes the remainder of dividing the first node by the second. |
 | `.mod( node \| value )` | Computes the remainder of dividing the first node by the second. |
@@ -1173,6 +1174,8 @@ The module also provides `Break()` and `Continue()` TSL expression for loop cont
 | `step( edge, x )` | Generate a step function by comparing two values. |
 | `step( edge, x )` | Generate a step function by comparing two values. |
 | `tan( x )` | Return the tangent of the parameter. |
 | `tan( x )` | Return the tangent of the parameter. |
 | `transformDirection( dir, matrix )` | Transform the direction of a vector by a matrix and then normalize the result. |
 | `transformDirection( dir, matrix )` | Transform the direction of a vector by a matrix and then normalize the result. |
+| `transformNormalByViewMatrix( normal, viewMatrix )` | Transform a normal vector (given in world space) by the view matrix and normalize the result. |
+| `transformNormalByInverseViewMatrix( normal, viewMatrix )` | Transform a normal vector (given in view space) by the inverse of the view matrix and normalize the result. |
 | `trunc( x )` | Truncate the parameter, removing the fractional part. |
 | `trunc( x )` | Truncate the parameter, removing the fractional part. |
 
 
 ```js
 ```js
@@ -1356,6 +1359,7 @@ Screen nodes will return the values related to the current `frame buffer`, eithe
 | `spherizeUV( uv, strength, centerNode = vec2( 0.5 ) )` | Distorts UV coordinates with a spherical effect around a center point. | `vec2` |
 | `spherizeUV( uv, strength, centerNode = vec2( 0.5 ) )` | Distorts UV coordinates with a spherical effect around a center point. | `vec2` |
 | `spritesheetUV( count, uv = uv(), frame = float( 0 ) )` | Computes UV coordinates for a sprite sheet based on the number of frames, UV coordinates, and frame index. | `vec2` |
 | `spritesheetUV( count, uv = uv(), frame = float( 0 ) )` | Computes UV coordinates for a sprite sheet based on the number of frames, UV coordinates, and frame index. | `vec2` |
 | `equirectUV( direction = positionWorldDirection )` | Computes UV coordinates for equirectangular mapping based on the direction vector. | `vec2` |
 | `equirectUV( direction = positionWorldDirection )` | Computes UV coordinates for equirectangular mapping based on the direction vector. | `vec2` |
+| `equirectDirection( uv = uv() )` | Computes a direction vector from the given equirectangular UV coordinates (inverse of `equirectUV`). | `vec3` |
 
 
 ```js
 ```js
 import { texture, matcapUV } from 'three/tsl';
 import { texture, matcapUV } from 'three/tsl';
@@ -1404,7 +1408,7 @@ const matcap = texture( matcapMap, matcapUV );
 | Variable | Description | Type |
 | Variable | Description | Type |
 | -- | -- | -- |
 | -- | -- | -- |
 | `packNormalToRGB( value )` | Converts normal vector to color. | `color` |
 | `packNormalToRGB( value )` | Converts normal vector to color. | `color` |
-| `unpackRGBToNormal(  value )` | Converts color to normal vector. | `vec3` |
+| `unpackRGBToNormal( value )` | Converts color to normal vector. | `vec3` |
 
 
 ## Render Pipeline
 ## Render Pipeline
 
 
@@ -1448,7 +1452,7 @@ const scenePass = pass( scene, camera );
 
 
 scenePass.setMRT( mrt( {
 scenePass.setMRT( mrt( {
 	output: output,                          // Final color output
 	output: output,                          // Final color output
-	normal: packNormalToRGB( normalView ),  // View-space normals encoded as colors
+	normal: packNormalToRGB( normalView ),   // View-space normals encoded as colors
 	velocity: velocity                       // Motion vectors for temporal effects
 	velocity: velocity                       // Motion vectors for temporal effects
 } ) );
 } ) );
 ```
 ```
@@ -1690,6 +1694,33 @@ const customFragment = Fn( () => {
 material.colorNode = customFragment();
 material.colorNode = customFragment();
 ```
 ```
 
 
+## Override Node
+
+Override nodes allow you to replace specific target nodes within a node sub-graph or flow dynamically during compilation, without having to reconstruct or duplicate the source nodes. This is useful, for example, to inject a custom `positionLocal` or normal into an existing flow through the material's `contextNode`.
+
+| Name | Description |
+| -- | -- |
+| `overrideNode( targetNode, callback = null, flowNode = null )` | Overrides a single target node. `callback` returns the overriding node (receiving the builder as argument) or can be the overriding node itself. |
+| `overrideNodes( overrides, flowNode = null )` | Overrides multiple target nodes at once using a `Map` or an array of `[ targetNode, callback \| node ]` pairs. |
+
+Example:
+
+```js
+import { overrideNode, overrideNodes, positionLocal, positionView, vec3 } from 'three/tsl';
+
+// Override a single node through the material context
+material.contextNode = overrideNode( positionLocal, () => positionLocal.add( vec3( 1, 0, 0 ) ) );
+
+// Override multiple nodes at once
+material.contextNode = overrideNodes( [
+	[ positionView, customPositionView ], // You can use a node directly like customPositionView.
+	[ positionLocal, ( builder ) => positionLocal.add( vec3( 1, 0, 0 ) ) ]
+] );
+
+// Method chaining is also supported
+node.overrideNode( positionLocal, () => positionLocal.add( vec3( 1, 0, 0 ) ) );
+```
+
 ## Fog
 ## Fog
 
 
 Functions for creating fog effects in the scene. Assign the fog node to `scene.fogNode`.
 Functions for creating fog effects in the scene. Assign the fog node to `scene.fogNode`.
@@ -1747,6 +1778,7 @@ Utility functions for common shader tasks.
 | -- | -- | -- |
 | -- | -- | -- |
 | `billboarding( { position, horizontal, vertical } )` | Orients flat meshes always towards the camera. `position`: vertex positions in world space (default: `null`). `horizontal`: follow camera horizontally (default: `true`). `vertical`: follow camera vertically (default: `false`). | `vec3` |
 | `billboarding( { position, horizontal, vertical } )` | Orients flat meshes always towards the camera. `position`: vertex positions in world space (default: `null`). `horizontal`: follow camera horizontally (default: `true`). `vertical`: follow camera vertically (default: `false`). | `vec3` |
 | `checker( coord )` | Creates a 2x2 checkerboard pattern. | `float` |
 | `checker( coord )` | Creates a 2x2 checkerboard pattern. | `float` |
+| `negateOnBackSide( vector )` | Negates a vector when rendering the back side of a face, according to the material's `side` configuration (`BackSide`, `DoubleSide` or `FrontSide`). | `vec3` |
 
 
 Example:
 Example:
 
 
@@ -1898,6 +1930,7 @@ The following documentation pages are available in markdown format at `https://t
 
 
 - [ARButton](https://threejs.org/docs/pages/ARButton.html.md)
 - [ARButton](https://threejs.org/docs/pages/ARButton.html.md)
 - [AmmoPhysics](https://threejs.org/docs/pages/AmmoPhysics.html.md)
 - [AmmoPhysics](https://threejs.org/docs/pages/AmmoPhysics.html.md)
+- [Backend](https://threejs.org/docs/pages/Backend.html.md)
 - [BasicLightingModel](https://threejs.org/docs/pages/BasicLightingModel.html.md)
 - [BasicLightingModel](https://threejs.org/docs/pages/BasicLightingModel.html.md)
 - [BatchedMesh](https://threejs.org/docs/pages/BatchedMesh.html.md)
 - [BatchedMesh](https://threejs.org/docs/pages/BatchedMesh.html.md)
 - [BezierInterpolant](https://threejs.org/docs/pages/BezierInterpolant.html.md)
 - [BezierInterpolant](https://threejs.org/docs/pages/BezierInterpolant.html.md)
@@ -1919,6 +1952,7 @@ The following documentation pages are available in markdown format at `https://t
 - [CanvasTarget](https://threejs.org/docs/pages/CanvasTarget.html.md)
 - [CanvasTarget](https://threejs.org/docs/pages/CanvasTarget.html.md)
 - [Capsule](https://threejs.org/docs/pages/Capsule.html.md)
 - [Capsule](https://threejs.org/docs/pages/Capsule.html.md)
 - [CinquefoilKnot](https://threejs.org/docs/pages/CinquefoilKnot.html.md)
 - [CinquefoilKnot](https://threejs.org/docs/pages/CinquefoilKnot.html.md)
+- [CityGenerator](https://threejs.org/docs/pages/CityGenerator.html.md)
 - [ClippingGroup](https://threejs.org/docs/pages/ClippingGroup.html.md)
 - [ClippingGroup](https://threejs.org/docs/pages/ClippingGroup.html.md)
 - [Clock](https://threejs.org/docs/pages/Clock.html.md)
 - [Clock](https://threejs.org/docs/pages/Clock.html.md)
 - [ClusteredLighting](https://threejs.org/docs/pages/ClusteredLighting.html.md)
 - [ClusteredLighting](https://threejs.org/docs/pages/ClusteredLighting.html.md)
@@ -1946,6 +1980,7 @@ The following documentation pages are available in markdown format at `https://t
 - [EdgeSplitModifier](https://threejs.org/docs/pages/EdgeSplitModifier.html.md)
 - [EdgeSplitModifier](https://threejs.org/docs/pages/EdgeSplitModifier.html.md)
 - [EffectComposer](https://threejs.org/docs/pages/EffectComposer.html.md)
 - [EffectComposer](https://threejs.org/docs/pages/EffectComposer.html.md)
 - [EventDispatcher](https://threejs.org/docs/pages/EventDispatcher.html.md)
 - [EventDispatcher](https://threejs.org/docs/pages/EventDispatcher.html.md)
+- [FaceFrame](https://threejs.org/docs/pages/FaceFrame.html.md)
 - [FigureEightPolynomialKnot](https://threejs.org/docs/pages/FigureEightPolynomialKnot.html.md)
 - [FigureEightPolynomialKnot](https://threejs.org/docs/pages/FigureEightPolynomialKnot.html.md)
 - [Float16BufferAttribute](https://threejs.org/docs/pages/Float16BufferAttribute.html.md)
 - [Float16BufferAttribute](https://threejs.org/docs/pages/Float16BufferAttribute.html.md)
 - [Float32BufferAttribute](https://threejs.org/docs/pages/Float32BufferAttribute.html.md)
 - [Float32BufferAttribute](https://threejs.org/docs/pages/Float32BufferAttribute.html.md)
@@ -1953,6 +1988,7 @@ The following documentation pages are available in markdown format at `https://t
 - [Fog](https://threejs.org/docs/pages/Fog.html.md)
 - [Fog](https://threejs.org/docs/pages/Fog.html.md)
 - [FogExp2](https://threejs.org/docs/pages/FogExp2.html.md)
 - [FogExp2](https://threejs.org/docs/pages/FogExp2.html.md)
 - [Font](https://threejs.org/docs/pages/Font.html.md)
 - [Font](https://threejs.org/docs/pages/Font.html.md)
+- [ForestGenerator](https://threejs.org/docs/pages/ForestGenerator.html.md)
 - [FullScreenQuad](https://threejs.org/docs/pages/FullScreenQuad.html.md)
 - [FullScreenQuad](https://threejs.org/docs/pages/FullScreenQuad.html.md)
 - [GLBufferAttribute](https://threejs.org/docs/pages/GLBufferAttribute.html.md)
 - [GLBufferAttribute](https://threejs.org/docs/pages/GLBufferAttribute.html.md)
 - [GLSLNodeBuilder](https://threejs.org/docs/pages/GLSLNodeBuilder.html.md)
 - [GLSLNodeBuilder](https://threejs.org/docs/pages/GLSLNodeBuilder.html.md)
@@ -2073,31 +2109,36 @@ The following documentation pages are available in markdown format at `https://t
 - [Shape](https://threejs.org/docs/pages/Shape.html.md)
 - [Shape](https://threejs.org/docs/pages/Shape.html.md)
 - [ShapePath](https://threejs.org/docs/pages/ShapePath.html.md)
 - [ShapePath](https://threejs.org/docs/pages/ShapePath.html.md)
 - [ShapeUtils](https://threejs.org/docs/pages/ShapeUtils.html.md)
 - [ShapeUtils](https://threejs.org/docs/pages/ShapeUtils.html.md)
+- [SidewalkGenerator](https://threejs.org/docs/pages/SidewalkGenerator.html.md)
 - [SimplexNoise](https://threejs.org/docs/pages/SimplexNoise.html.md)
 - [SimplexNoise](https://threejs.org/docs/pages/SimplexNoise.html.md)
 - [SimplifyModifier](https://threejs.org/docs/pages/SimplifyModifier.html.md)
 - [SimplifyModifier](https://threejs.org/docs/pages/SimplifyModifier.html.md)
 - [Skeleton](https://threejs.org/docs/pages/Skeleton.html.md)
 - [Skeleton](https://threejs.org/docs/pages/Skeleton.html.md)
 - [SkinnedMesh](https://threejs.org/docs/pages/SkinnedMesh.html.md)
 - [SkinnedMesh](https://threejs.org/docs/pages/SkinnedMesh.html.md)
 - [Sky](https://threejs.org/docs/pages/Sky.html.md)
 - [Sky](https://threejs.org/docs/pages/Sky.html.md)
 - [SkyMesh](https://threejs.org/docs/pages/SkyMesh.html.md)
 - [SkyMesh](https://threejs.org/docs/pages/SkyMesh.html.md)
+- [SkyscraperGenerator](https://threejs.org/docs/pages/SkyscraperGenerator.html.md)
 - [Source](https://threejs.org/docs/pages/Source.html.md)
 - [Source](https://threejs.org/docs/pages/Source.html.md)
 - [Spherical](https://threejs.org/docs/pages/Spherical.html.md)
 - [Spherical](https://threejs.org/docs/pages/Spherical.html.md)
 - [SphericalHarmonics3](https://threejs.org/docs/pages/SphericalHarmonics3.html.md)
 - [SphericalHarmonics3](https://threejs.org/docs/pages/SphericalHarmonics3.html.md)
 - [SpotLightShadow](https://threejs.org/docs/pages/SpotLightShadow.html.md)
 - [SpotLightShadow](https://threejs.org/docs/pages/SpotLightShadow.html.md)
 - [Sprite](https://threejs.org/docs/pages/Sprite.html.md)
 - [Sprite](https://threejs.org/docs/pages/Sprite.html.md)
 - [StackTrace](https://threejs.org/docs/pages/StackTrace.html.md)
 - [StackTrace](https://threejs.org/docs/pages/StackTrace.html.md)
+- [StandardNodeLibrary](https://threejs.org/docs/pages/StandardNodeLibrary.html.md)
 - [StorageBufferAttribute](https://threejs.org/docs/pages/StorageBufferAttribute.html.md)
 - [StorageBufferAttribute](https://threejs.org/docs/pages/StorageBufferAttribute.html.md)
 - [StorageInstancedBufferAttribute](https://threejs.org/docs/pages/StorageInstancedBufferAttribute.html.md)
 - [StorageInstancedBufferAttribute](https://threejs.org/docs/pages/StorageInstancedBufferAttribute.html.md)
 - [StringKeyframeTrack](https://threejs.org/docs/pages/StringKeyframeTrack.html.md)
 - [StringKeyframeTrack](https://threejs.org/docs/pages/StringKeyframeTrack.html.md)
 - [TSL](https://threejs.org/docs/pages/TSL.html.md)
 - [TSL](https://threejs.org/docs/pages/TSL.html.md)
 - [Tab](https://threejs.org/docs/pages/Tab.html.md)
 - [Tab](https://threejs.org/docs/pages/Tab.html.md)
+- [TerrainGenerator](https://threejs.org/docs/pages/TerrainGenerator.html.md)
 - [TessellateModifier](https://threejs.org/docs/pages/TessellateModifier.html.md)
 - [TessellateModifier](https://threejs.org/docs/pages/TessellateModifier.html.md)
 - [TextureUtils](https://threejs.org/docs/pages/TextureUtils.html.md)
 - [TextureUtils](https://threejs.org/docs/pages/TextureUtils.html.md)
-- [TiledLighting](https://threejs.org/docs/pages/TiledLighting.html.md)
+- [TileCreasedNormalsPlugin](https://threejs.org/docs/pages/TileCreasedNormalsPlugin.html.md)
 - [Timer](https://threejs.org/docs/pages/Timer.html.md)
 - [Timer](https://threejs.org/docs/pages/Timer.html.md)
 - [TimestampQueryPool](https://threejs.org/docs/pages/TimestampQueryPool.html.md)
 - [TimestampQueryPool](https://threejs.org/docs/pages/TimestampQueryPool.html.md)
 - [ToonLightingModel](https://threejs.org/docs/pages/ToonLightingModel.html.md)
 - [ToonLightingModel](https://threejs.org/docs/pages/ToonLightingModel.html.md)
 - [TorusKnot](https://threejs.org/docs/pages/TorusKnot.html.md)
 - [TorusKnot](https://threejs.org/docs/pages/TorusKnot.html.md)
 - [Transpiler](https://threejs.org/docs/pages/Transpiler.html.md)
 - [Transpiler](https://threejs.org/docs/pages/Transpiler.html.md)
+- [TreeGenerator](https://threejs.org/docs/pages/TreeGenerator.html.md)
 - [TrefoilKnot](https://threejs.org/docs/pages/TrefoilKnot.html.md)
 - [TrefoilKnot](https://threejs.org/docs/pages/TrefoilKnot.html.md)
 - [TrefoilPolynomialKnot](https://threejs.org/docs/pages/TrefoilPolynomialKnot.html.md)
 - [TrefoilPolynomialKnot](https://threejs.org/docs/pages/TrefoilPolynomialKnot.html.md)
 - [TubePainter](https://threejs.org/docs/pages/TubePainter.html.md)
 - [TubePainter](https://threejs.org/docs/pages/TubePainter.html.md)
@@ -2215,6 +2256,7 @@ The following documentation pages are available in markdown format at `https://t
 - [LatheGeometry](https://threejs.org/docs/pages/LatheGeometry.html.md)
 - [LatheGeometry](https://threejs.org/docs/pages/LatheGeometry.html.md)
 - [LineGeometry](https://threejs.org/docs/pages/LineGeometry.html.md)
 - [LineGeometry](https://threejs.org/docs/pages/LineGeometry.html.md)
 - [LineSegmentsGeometry](https://threejs.org/docs/pages/LineSegmentsGeometry.html.md)
 - [LineSegmentsGeometry](https://threejs.org/docs/pages/LineSegmentsGeometry.html.md)
+- [LoftGeometry](https://threejs.org/docs/pages/LoftGeometry.html.md)
 - [OctahedronGeometry](https://threejs.org/docs/pages/OctahedronGeometry.html.md)
 - [OctahedronGeometry](https://threejs.org/docs/pages/OctahedronGeometry.html.md)
 - [ParametricGeometry](https://threejs.org/docs/pages/ParametricGeometry.html.md)
 - [ParametricGeometry](https://threejs.org/docs/pages/ParametricGeometry.html.md)
 - [PlaneGeometry](https://threejs.org/docs/pages/PlaneGeometry.html.md)
 - [PlaneGeometry](https://threejs.org/docs/pages/PlaneGeometry.html.md)
@@ -2487,7 +2529,6 @@ The following documentation pages are available in markdown format at `https://t
 - [AmbientLightDataNode](https://threejs.org/docs/pages/AmbientLightDataNode.html.md)
 - [AmbientLightDataNode](https://threejs.org/docs/pages/AmbientLightDataNode.html.md)
 - [AmbientLightNode](https://threejs.org/docs/pages/AmbientLightNode.html.md)
 - [AmbientLightNode](https://threejs.org/docs/pages/AmbientLightNode.html.md)
 - [AnalyticLightNode](https://threejs.org/docs/pages/AnalyticLightNode.html.md)
 - [AnalyticLightNode](https://threejs.org/docs/pages/AnalyticLightNode.html.md)
-- [AnamorphicNode](https://threejs.org/docs/pages/AnamorphicNode.html.md)
 - [ArrayElementNode](https://threejs.org/docs/pages/ArrayElementNode.html.md)
 - [ArrayElementNode](https://threejs.org/docs/pages/ArrayElementNode.html.md)
 - [ArrayNode](https://threejs.org/docs/pages/ArrayNode.html.md)
 - [ArrayNode](https://threejs.org/docs/pages/ArrayNode.html.md)
 - [AssignNode](https://threejs.org/docs/pages/AssignNode.html.md)
 - [AssignNode](https://threejs.org/docs/pages/AssignNode.html.md)
@@ -2496,7 +2537,6 @@ The following documentation pages are available in markdown format at `https://t
 - [BarrierNode](https://threejs.org/docs/pages/BarrierNode.html.md)
 - [BarrierNode](https://threejs.org/docs/pages/BarrierNode.html.md)
 - [BasicEnvironmentNode](https://threejs.org/docs/pages/BasicEnvironmentNode.html.md)
 - [BasicEnvironmentNode](https://threejs.org/docs/pages/BasicEnvironmentNode.html.md)
 - [BasicLightMapNode](https://threejs.org/docs/pages/BasicLightMapNode.html.md)
 - [BasicLightMapNode](https://threejs.org/docs/pages/BasicLightMapNode.html.md)
-- [BatchNode](https://threejs.org/docs/pages/BatchNode.html.md)
 - [BilateralBlurNode](https://threejs.org/docs/pages/BilateralBlurNode.html.md)
 - [BilateralBlurNode](https://threejs.org/docs/pages/BilateralBlurNode.html.md)
 - [BitcastNode](https://threejs.org/docs/pages/BitcastNode.html.md)
 - [BitcastNode](https://threejs.org/docs/pages/BitcastNode.html.md)
 - [BitcountNode](https://threejs.org/docs/pages/BitcountNode.html.md)
 - [BitcountNode](https://threejs.org/docs/pages/BitcountNode.html.md)
@@ -2546,8 +2586,6 @@ The following documentation pages are available in markdown format at `https://t
 - [IndexNode](https://threejs.org/docs/pages/IndexNode.html.md)
 - [IndexNode](https://threejs.org/docs/pages/IndexNode.html.md)
 - [InputNode](https://threejs.org/docs/pages/InputNode.html.md)
 - [InputNode](https://threejs.org/docs/pages/InputNode.html.md)
 - [InspectorNode](https://threejs.org/docs/pages/InspectorNode.html.md)
 - [InspectorNode](https://threejs.org/docs/pages/InspectorNode.html.md)
-- [InstanceNode](https://threejs.org/docs/pages/InstanceNode.html.md)
-- [InstancedMeshNode](https://threejs.org/docs/pages/InstancedMeshNode.html.md)
 - [IrradianceNode](https://threejs.org/docs/pages/IrradianceNode.html.md)
 - [IrradianceNode](https://threejs.org/docs/pages/IrradianceNode.html.md)
 - [IsolateNode](https://threejs.org/docs/pages/IsolateNode.html.md)
 - [IsolateNode](https://threejs.org/docs/pages/IsolateNode.html.md)
 - [JoinNode](https://threejs.org/docs/pages/JoinNode.html.md)
 - [JoinNode](https://threejs.org/docs/pages/JoinNode.html.md)
@@ -2565,13 +2603,13 @@ The following documentation pages are available in markdown format at `https://t
 - [MaxMipLevelNode](https://threejs.org/docs/pages/MaxMipLevelNode.html.md)
 - [MaxMipLevelNode](https://threejs.org/docs/pages/MaxMipLevelNode.html.md)
 - [MemberNode](https://threejs.org/docs/pages/MemberNode.html.md)
 - [MemberNode](https://threejs.org/docs/pages/MemberNode.html.md)
 - [ModelNode](https://threejs.org/docs/pages/ModelNode.html.md)
 - [ModelNode](https://threejs.org/docs/pages/ModelNode.html.md)
-- [MorphNode](https://threejs.org/docs/pages/MorphNode.html.md)
 - [Node](https://threejs.org/docs/pages/Node.html.md)
 - [Node](https://threejs.org/docs/pages/Node.html.md)
 - [NormalMapNode](https://threejs.org/docs/pages/NormalMapNode.html.md)
 - [NormalMapNode](https://threejs.org/docs/pages/NormalMapNode.html.md)
 - [Object3DNode](https://threejs.org/docs/pages/Object3DNode.html.md)
 - [Object3DNode](https://threejs.org/docs/pages/Object3DNode.html.md)
 - [OperatorNode](https://threejs.org/docs/pages/OperatorNode.html.md)
 - [OperatorNode](https://threejs.org/docs/pages/OperatorNode.html.md)
 - [OutlineNode](https://threejs.org/docs/pages/OutlineNode.html.md)
 - [OutlineNode](https://threejs.org/docs/pages/OutlineNode.html.md)
 - [OutputStructNode](https://threejs.org/docs/pages/OutputStructNode.html.md)
 - [OutputStructNode](https://threejs.org/docs/pages/OutputStructNode.html.md)
+- [OverrideContextNode](https://threejs.org/docs/pages/OverrideContextNode.html.md)
 - [PMREMNode](https://threejs.org/docs/pages/PMREMNode.html.md)
 - [PMREMNode](https://threejs.org/docs/pages/PMREMNode.html.md)
 - [PackFloatNode](https://threejs.org/docs/pages/PackFloatNode.html.md)
 - [PackFloatNode](https://threejs.org/docs/pages/PackFloatNode.html.md)
 - [ParameterNode](https://threejs.org/docs/pages/ParameterNode.html.md)
 - [ParameterNode](https://threejs.org/docs/pages/ParameterNode.html.md)
@@ -2605,7 +2643,6 @@ The following documentation pages are available in markdown format at `https://t
 - [ShadowBaseNode](https://threejs.org/docs/pages/ShadowBaseNode.html.md)
 - [ShadowBaseNode](https://threejs.org/docs/pages/ShadowBaseNode.html.md)
 - [ShadowNode](https://threejs.org/docs/pages/ShadowNode.html.md)
 - [ShadowNode](https://threejs.org/docs/pages/ShadowNode.html.md)
 - [SharpenNode](https://threejs.org/docs/pages/SharpenNode.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)
 - [SobelOperatorNode](https://threejs.org/docs/pages/SobelOperatorNode.html.md)
 - [SplitNode](https://threejs.org/docs/pages/SplitNode.html.md)
 - [SplitNode](https://threejs.org/docs/pages/SplitNode.html.md)
 - [SpotLightDataNode](https://threejs.org/docs/pages/SpotLightDataNode.html.md)
 - [SpotLightDataNode](https://threejs.org/docs/pages/SpotLightDataNode.html.md)
@@ -2626,7 +2663,6 @@ The following documentation pages are available in markdown format at `https://t
 - [TextureNode](https://threejs.org/docs/pages/TextureNode.html.md)
 - [TextureNode](https://threejs.org/docs/pages/TextureNode.html.md)
 - [TextureSizeNode](https://threejs.org/docs/pages/TextureSizeNode.html.md)
 - [TextureSizeNode](https://threejs.org/docs/pages/TextureSizeNode.html.md)
 - [TileShadowNode](https://threejs.org/docs/pages/TileShadowNode.html.md)
 - [TileShadowNode](https://threejs.org/docs/pages/TileShadowNode.html.md)
-- [TiledLightsNode](https://threejs.org/docs/pages/TiledLightsNode.html.md)
 - [ToneMappingNode](https://threejs.org/docs/pages/ToneMappingNode.html.md)
 - [ToneMappingNode](https://threejs.org/docs/pages/ToneMappingNode.html.md)
 - [TransitionNode](https://threejs.org/docs/pages/TransitionNode.html.md)
 - [TransitionNode](https://threejs.org/docs/pages/TransitionNode.html.md)
 - [UniformArrayElementNode](https://threejs.org/docs/pages/UniformArrayElementNode.html.md)
 - [UniformArrayElementNode](https://threejs.org/docs/pages/UniformArrayElementNode.html.md)
@@ -2694,6 +2730,7 @@ The following documentation pages are available in markdown format at `https://t
 - [module-GammaCorrectionShader](https://threejs.org/docs/pages/module-GammaCorrectionShader.html.md)
 - [module-GammaCorrectionShader](https://threejs.org/docs/pages/module-GammaCorrectionShader.html.md)
 - [module-GeometryCompressionUtils](https://threejs.org/docs/pages/module-GeometryCompressionUtils.html.md)
 - [module-GeometryCompressionUtils](https://threejs.org/docs/pages/module-GeometryCompressionUtils.html.md)
 - [module-GeometryUtils](https://threejs.org/docs/pages/module-GeometryUtils.html.md)
 - [module-GeometryUtils](https://threejs.org/docs/pages/module-GeometryUtils.html.md)
+- [module-GroundedSkybox](https://threejs.org/docs/pages/module-GroundedSkybox.html.md)
 - [module-HalftoneShader](https://threejs.org/docs/pages/module-HalftoneShader.html.md)
 - [module-HalftoneShader](https://threejs.org/docs/pages/module-HalftoneShader.html.md)
 - [module-HorizontalBlurShader](https://threejs.org/docs/pages/module-HorizontalBlurShader.html.md)
 - [module-HorizontalBlurShader](https://threejs.org/docs/pages/module-HorizontalBlurShader.html.md)
 - [module-HorizontalTiltShiftShader](https://threejs.org/docs/pages/module-HorizontalTiltShiftShader.html.md)
 - [module-HorizontalTiltShiftShader](https://threejs.org/docs/pages/module-HorizontalTiltShiftShader.html.md)

+ 2 - 2
docs/llms.txt

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

+ 1 - 1
docs/pages/ARButton.html

@@ -14,7 +14,7 @@
 			<header>
 			<header>
 				<div class="class-description"><p>A utility class for creating a button that allows to initiate
 				<div class="class-description"><p>A utility class for creating a button that allows to initiate
 immersive AR sessions based on WebXR. The button can be created
 immersive AR sessions based on WebXR. The button can be created
-with a factory method and then appended ot the website's DOM.</p></div>
+with a factory method and then appended to the website's DOM.</p></div>
 				<h2>Code Example</h2>
 				<h2>Code Example</h2>
 				<div translate="no"><pre><code class="language-js">document.body.appendChild( ARButton.createButton( renderer ) );
 				<div translate="no"><pre><code class="language-js">document.body.appendChild( ARButton.createButton( renderer ) );
 </code></pre></div>
 </code></pre></div>

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

@@ -1,6 +1,6 @@
 # ARButton
 # ARButton
 
 
-A utility class for creating a button that allows to initiate immersive AR sessions based on WebXR. The button can be created with a factory method and then appended ot the website's DOM.
+A utility class for creating a button that allows to initiate immersive AR sessions based on WebXR. The button can be created with a factory method and then appended to the website's DOM.
 
 
 ## Code Example
 ## Code Example
 
 

+ 5 - 5
docs/pages/AmmoPhysics.html

@@ -13,11 +13,11 @@
 		<section>
 		<section>
 			<header>
 			<header>
 				<div class="class-description"><p>Can be used to include Ammo.js as a Physics engine into
 				<div class="class-description"><p>Can be used to include Ammo.js as a Physics engine into
-<code>three.js</code> apps. Make sure to include <code>ammo.wasm.js</code> first:</p>
-<pre class="prettyprint source"><code>&lt;script src=&quot;jsm/libs/ammo.wasm.js&quot;>&lt;/script>
-</code></pre>
-<p>It is then possible to initialize the API via:</p>
-<pre><code class="language-js">const physics = await AmmoPhysics();
+<code>three.js</code> apps. The API can be initialized via:</p>
+<p>The component automatically imports Ammo.js from a CDN so make sure
+to use the component with an active Internet connection.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const physics = await AmmoPhysics();
 </code></pre></div>
 </code></pre></div>
 			</header>
 			</header>
 			<article>
 			<article>

+ 3 - 5
docs/pages/AmmoPhysics.html.md

@@ -1,12 +1,10 @@
 # AmmoPhysics
 # AmmoPhysics
 
 
-Can be used to include Ammo.js as a Physics engine into `three.js` apps. Make sure to include `ammo.wasm.js` first:
+Can be used to include Ammo.js as a Physics engine into `three.js` apps. The API can be initialized via:
 
 
-```js
-<script src="jsm/libs/ammo.wasm.js"></script>
-```
+The component automatically imports Ammo.js from a CDN so make sure to use the component with an active Internet connection.
 
 
-It is then possible to initialize the API via:
+## Code Example
 
 
 ```js
 ```js
 const physics = await AmmoPhysics();
 const physics = await AmmoPhysics();

+ 0 - 222
docs/pages/AnamorphicNode.html

@@ -1,222 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>AnamorphicNode - 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">AnamorphicNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>Post processing node for adding an anamorphic flare effect.</p></div>
-			</header>
-			<article>
-				<h2 class="subsection-title">Import</h2>
-				<p><span translate="no">AnamorphicNode</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 { anamorphic } from 'three/addons/tsl/display/AnamorphicNode.js';</code></pre>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="AnamorphicNode" translate="no">new <a href="#AnamorphicNode">AnamorphicNode</a><span class="signature">( textureNode : <span class="param-type"><a href="TextureNode.html">TextureNode</a></span>, thresholdNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span>, scaleNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span>, samples : <span class="param-type">number</span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new anamorphic 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">thresholdNode</strong>
-									</td>
-									<td class="description last">
-										<p>The threshold is one option to control the intensity and size of the effect.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">scaleNode</strong>
-									</td>
-									<td class="description last">
-										<p>Defines the vertical scale of the flares.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">samples</strong>
-									</td>
-									<td class="description last">
-										<p>More samples result in larger flares and a more expensive runtime behavior.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="colorNode" translate="no">.<a href="#colorNode">colorNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
-					<div class="description">
-						<p>The color of the flares.</p>
-					</div>
-				</div>
-				<div class="member">
-					<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 resolution scale.</p>
-						<p>Default is <code>{(1,1)}</code>.</p>
-					</div>
-						<dl class="details">
-							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Yes</dt>
-						</dl>
-				</div>
-				<div class="member">
-					<h3 class="name" id="resolutionScale" translate="no">.<a href="#resolutionScale">resolutionScale</a><span class="type-signature"> : number</span> </h3>
-					<div class="description">
-						<p>The resolution scale.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="samples" translate="no">.<a href="#samples">samples</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
-					<div class="description">
-						<p>More samples result in larger flares and a more expensive runtime behavior.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="scaleNode" translate="no">.<a href="#scaleNode">scaleNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
-					<div class="description">
-						<p>Defines the vertical scale of the flares.</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="thresholdNode" translate="no">.<a href="#thresholdNode">thresholdNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
-					<div class="description">
-						<p>The threshold is one option to control the intensity and size 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 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 of the effect.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">height</strong>
-									</td>
-									<td class="description last">
-										<p>The height of the effect.</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/AnamorphicNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/display/AnamorphicNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 127
docs/pages/AnamorphicNode.html.md

@@ -1,127 +0,0 @@
-*Inheritance: EventDispatcher → Node → TempNode →*
-
-# AnamorphicNode
-
-Post processing node for adding an anamorphic flare effect.
-
-## Import
-
-AnamorphicNode is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
-
-```js
-import { anamorphic } from 'three/addons/tsl/display/AnamorphicNode.js';
-```
-
-## Constructor
-
-### new AnamorphicNode( textureNode : TextureNode, thresholdNode : Node.<float>, scaleNode : Node.<float>, samples : number )
-
-Constructs a new anamorphic node.
-
-**textureNode**
-
-The texture node that represents the input of the effect.
-
-**thresholdNode**
-
-The threshold is one option to control the intensity and size of the effect.
-
-**scaleNode**
-
-Defines the vertical scale of the flares.
-
-**samples**
-
-More samples result in larger flares and a more expensive runtime behavior.
-
-## Properties
-
-### .colorNode : Node.<vec3>
-
-The color of the flares.
-
-### .resolution : Vector2
-
-The resolution scale.
-
-Default is `{(1,1)}`.
-
-**Deprecated:** Yes
-
-### .resolutionScale : number
-
-The resolution scale.
-
-### .samples : Node.<float>
-
-More samples result in larger flares and a more expensive runtime behavior.
-
-### .scaleNode : Node.<float>
-
-Defines the vertical scale of the flares.
-
-### .textureNode : TextureNode
-
-The texture node that represents the input of the effect.
-
-### .thresholdNode : Node.<float>
-
-The threshold is one option to control the intensity and size 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 size of the effect.
-
-**width**
-
-The width of the effect.
-
-**height**
-
-The height of the effect.
-
-### .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/AnamorphicNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/AnamorphicNode.js)

+ 1473 - 0
docs/pages/Backend.html

@@ -0,0 +1,1473 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>Backend - 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">Backend</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Most of the rendering related logic is implemented in the
+<a href="Renderer.html">Renderer</a> module and related management components.
+Sometimes it is required though to execute commands which are
+specific to the current 3D backend (which is WebGPU or WebGL 2).
+This abstract base class defines an interface that encapsulates
+all backend-related logic. Derived classes for each backend must
+implement the interface.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="Backend" translate="no">new <a href="#Backend">Backend</a><span class="signature">( parameters : <span class="param-type">Object</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new backend.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">parameters</strong>
+									</td>
+									<td class="description last">
+										<p>An object holding parameters for the backend.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="coordinateSystem" translate="no">.<a href="#coordinateSystem">coordinateSystem</a><span class="type-signature"> : number</span> <span class="type-signature">(abstract, readonly) </span></h3>
+					<div class="description">
+						<p>The coordinate system of the backend.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="data" translate="no">.<a href="#data">data</a><span class="type-signature"> : WeakMap.&lt;Object, Object></span> </h3>
+					<div class="description">
+						<p>This weak map holds backend-specific data of objects
+like textures, attributes or render targets.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="domElement" translate="no">.<a href="#domElement">domElement</a><span class="type-signature"> : HTMLCanvasElement | OffscreenCanvas</span> </h3>
+					<div class="description">
+						<p>A reference to the canvas element the renderer is drawing to.</p>
+						<p>Default is <code>null</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="hasTimestamp" translate="no">.<a href="#hasTimestamp">hasTimestamp</a><span class="type-signature"> : boolean</span> <span class="type-signature">(readonly) </span></h3>
+					<div class="description">
+						<p>Whether the backend supports query timestamps or not.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="parameters" translate="no">.<a href="#parameters">parameters</a><span class="type-signature"> : Object</span> </h3>
+					<div class="description">
+						<p>The parameters of the backend.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="renderer" translate="no">.<a href="#renderer">renderer</a><span class="type-signature"> : <a href="Renderer.html">Renderer</a></span> </h3>
+					<div class="description">
+						<p>A reference to the renderer.</p>
+						<p>Default is <code>null</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="timestampQueryPool" translate="no">.<a href="#timestampQueryPool">timestampQueryPool</a><span class="type-signature"> : Object</span> </h3>
+					<div class="description">
+						<p>A reference to the timestamp query pool.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="trackTimestamp" translate="no">.<a href="#trackTimestamp">trackTimestamp</a><span class="type-signature"> : boolean</span> </h3>
+					<div class="description">
+						<p>Whether to track timestamps with a Timestamp Query API or not.</p>
+						<p>Default is <code>false</code>.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="_getQueryPool" translate="no">.<a href="#_getQueryPool">_getQueryPool</a><span class="signature">( uid : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="TimestampQueryPool.html">TimestampQueryPool</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the query pool for the given uid.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uid</strong>
+									</td>
+									<td class="description last">
+										<p>The unique identifier.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The query pool.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="beginCompute" translate="no">.<a href="#beginCompute">beginCompute</a><span class="signature">( computeGroup : <span class="param-type"><a href="Node.html">Node</a> | Array.&lt;<a href="Node.html">Node</a>></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is executed at the beginning of a compute call and
+can be used by the backend to prepare the state for upcoming
+compute tasks.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">computeGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The compute node(s).</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="beginRender" translate="no">.<a href="#beginRender">beginRender</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is executed at the beginning of a render call and
+can be used by the backend to prepare the state for upcoming
+draw calls.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="compute" translate="no">.<a href="#compute">compute</a><span class="signature">( computeGroup : <span class="param-type"><a href="Node.html">Node</a> | Array.&lt;<a href="Node.html">Node</a>></span>, computeNode : <span class="param-type"><a href="Node.html">Node</a></span>, bindings : <span class="param-type">Array.&lt;<a href="BindGroup.html">BindGroup</a>></span>, computePipeline : <span class="param-type"><a href="ComputePipeline.html">ComputePipeline</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Executes a compute command for the given compute node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">computeGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The group of compute nodes of a compute call. Can be a single compute node.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">computeNode</strong>
+									</td>
+									<td class="description last">
+										<p>The compute node.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindings</strong>
+									</td>
+									<td class="description last">
+										<p>The bindings.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">computePipeline</strong>
+									</td>
+									<td class="description last">
+										<p>The compute pipeline.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="copyFramebufferToTexture" translate="no">.<a href="#copyFramebufferToTexture">copyFramebufferToTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span>, rectangle : <span class="param-type"><a href="Vector4.html">Vector4</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Copies the current bound framebuffer to the given texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The destination texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">rectangle</strong>
+									</td>
+									<td class="description last">
+										<p>A four dimensional vector defining the origin and dimension of the copy.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="copyTextureToBuffer" translate="no">.<a href="#copyTextureToBuffer">copyTextureToBuffer</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, x : <span class="param-type">number</span>, y : <span class="param-type">number</span>, width : <span class="param-type">number</span>, height : <span class="param-type">number</span>, faceIndex : <span class="param-type">number</span> )</span><span class="type-signature"> : Promise.&lt;TypedArray></span> <span class="type-signature">(async, abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns texture data as a typed array.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture to copy.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">x</strong>
+									</td>
+									<td class="description last">
+										<p>The x coordinate of the copy origin.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">y</strong>
+									</td>
+									<td class="description last">
+										<p>The y coordinate of the copy origin.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">width</strong>
+									</td>
+									<td class="description last">
+										<p>The width of the copy.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">height</strong>
+									</td>
+									<td class="description last">
+										<p>The height of the copy.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">faceIndex</strong>
+									</td>
+									<td class="description last">
+										<p>The face index.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves with a typed array when the copy operation has finished.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="copyTextureToTexture" translate="no">.<a href="#copyTextureToTexture">copyTextureToTexture</a><span class="signature">( srcTexture : <span class="param-type"><a href="Texture.html">Texture</a></span>, dstTexture : <span class="param-type"><a href="Texture.html">Texture</a></span>, srcRegion : <span class="param-type"><a href="Box3.html">Box3</a> | <a href="Box2.html">Box2</a></span>, dstPosition : <span class="param-type"><a href="Vector2.html">Vector2</a> | <a href="Vector3.html">Vector3</a></span>, srcLevel : <span class="param-type">number</span>, dstLevel : <span class="param-type">number</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Copies data of the given source texture to the given destination texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">srcTexture</strong>
+									</td>
+									<td class="description last">
+										<p>The source texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">dstTexture</strong>
+									</td>
+									<td class="description last">
+										<p>The destination texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">srcRegion</strong>
+									</td>
+									<td class="description last">
+										<p>The region of the source texture to copy.</p>
+										<p>Default is <code>null</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">dstPosition</strong>
+									</td>
+									<td class="description last">
+										<p>The destination position of the copy.</p>
+										<p>Default is <code>null</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">srcLevel</strong>
+									</td>
+									<td class="description last">
+										<p>The source mip level to copy from.</p>
+										<p>Default is <code>0</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">dstLevel</strong>
+									</td>
+									<td class="description last">
+										<p>The destination mip level to copy to.</p>
+										<p>Default is <code>0</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<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> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates the GPU buffer of a shader attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer attribute.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createBindings" translate="no">.<a href="#createBindings">createBindings</a><span class="signature">( bindGroup : <span class="param-type"><a href="BindGroup.html">BindGroup</a></span>, bindings : <span class="param-type">Array.&lt;<a href="BindGroup.html">BindGroup</a>></span>, cacheIndex : <span class="param-type">number</span>, version : <span class="param-type">number</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates bindings from the given bind group definition.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The bind group.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindings</strong>
+									</td>
+									<td class="description last">
+										<p>Array of bind groups.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">cacheIndex</strong>
+									</td>
+									<td class="description last">
+										<p>The cache index.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">version</strong>
+									</td>
+									<td class="description last">
+										<p>The version.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createComputePipeline" translate="no">.<a href="#createComputePipeline">createComputePipeline</a><span class="signature">( computePipeline : <span class="param-type"><a href="ComputePipeline.html">ComputePipeline</a></span>, bindings : <span class="param-type">Array.&lt;<a href="BindGroup.html">BindGroup</a>></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a compute pipeline for the given compute node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">computePipeline</strong>
+									</td>
+									<td class="description last">
+										<p>The compute pipeline.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindings</strong>
+									</td>
+									<td class="description last">
+										<p>The bindings.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createDefaultTexture" translate="no">.<a href="#createDefaultTexture">createDefaultTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a default texture for the given texture that can be used
+as a placeholder until the actual texture is ready for usage.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture to create a default texture for.</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> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates the GPU buffer of an indexed shader attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The indexed buffer attribute.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createNodeBuilder" translate="no">.<a href="#createNodeBuilder">createNodeBuilder</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span>, renderer : <span class="param-type"><a href="Renderer.html">Renderer</a></span> )</span><span class="type-signature"> : <a href="NodeBuilder.html">NodeBuilder</a></span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns a node builder for the given render object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderer</strong>
+									</td>
+									<td class="description last">
+										<p>The renderer.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The node builder.</dt>
+						</dl>
+					</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> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a shader program from the given programmable stage.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">program</strong>
+									</td>
+									<td class="description last">
+										<p>The programmable stage.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createRenderPipeline" translate="no">.<a href="#createRenderPipeline">createRenderPipeline</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span>, promises : <span class="param-type">Array.&lt;Promise></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a render pipeline for the given render object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">promises</strong>
+									</td>
+									<td class="description last">
+										<p>An array of compilation promises which are used in <code>compileAsync()</code>.</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> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates the GPU buffer of a storage attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer attribute.</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>, options : <span class="param-type">Object</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Defines a texture on the GPU for the given texture object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>Optional configuration parameter.</p>
+										<p>Default is <code>{}</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createUniformBuffer" translate="no">.<a href="#createUniformBuffer">createUniformBuffer</a><span class="signature">( uniformBuffer : <span class="param-type"><a href="Buffer.html">Buffer</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a uniform buffer.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uniformBuffer</strong>
+									</td>
+									<td class="description last">
+										<p>The uniform buffer.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="delete" translate="no">.<a href="#delete">delete</a><span class="signature">( object : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Deletes an object from the internal data structure.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The object to delete.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="deleteBindGroupData" translate="no">.<a href="#deleteBindGroupData">deleteBindGroupData</a><span class="signature">( bindGroup : <span class="param-type"><a href="BindGroup.html">BindGroup</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Delete GPU data associated with a bind group.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The bind group.</p>
+									</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> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Destroys the GPU buffer of a shader attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer attribute to destroy.</p>
+									</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"><a href="ProgrammableStage.html">ProgrammableStage</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Destroys the shader program of the given programmable stage.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">program</strong>
+									</td>
+									<td class="description last">
+										<p>The programmable stage.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroySampler" translate="no">.<a href="#destroySampler">destroySampler</a><span class="signature">( binding : <span class="param-type"><a href="Sampler.html">Sampler</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Frees the GPU sampler for the given sampler binding.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">binding</strong>
+									</td>
+									<td class="description last">
+										<p>The sampler binding to free.</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>, isDefaultTexture : <span class="param-type">boolean</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Destroys the GPU data for the given texture object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">isDefaultTexture</strong>
+									</td>
+									<td class="description last">
+										<p>Whether the texture uses a default GPU texture or not.</p>
+										<p>Default is <code>false</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyUniformBuffer" translate="no">.<a href="#destroyUniformBuffer">destroyUniformBuffer</a><span class="signature">( uniformBuffer : <span class="param-type"><a href="Buffer.html">Buffer</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Destroys a uniform buffer.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uniformBuffer</strong>
+									</td>
+									<td class="description last">
+										<p>The uniform buffer.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Frees internal resources.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="draw" translate="no">.<a href="#draw">draw</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span>, info : <span class="param-type"><a href="Info.html">Info</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Executes a draw command for the given render object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object to draw.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">info</strong>
+									</td>
+									<td class="description last">
+										<p>Holds a series of statistical information about the GPU memory and the rendering process.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="finishCompute" translate="no">.<a href="#finishCompute">finishCompute</a><span class="signature">( computeGroup : <span class="param-type"><a href="Node.html">Node</a> | Array.&lt;<a href="Node.html">Node</a>></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is executed at the end of a compute call and
+can be used by the backend to finalize work after compute
+tasks.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">computeGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The compute node(s).</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="finishRender" translate="no">.<a href="#finishRender">finishRender</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is executed at the end of a render call and
+can be used by the backend to finalize work after draw
+calls.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="generateMipmaps" translate="no">.<a href="#generateMipmaps">generateMipmaps</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Generates mipmaps for the given texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="get" translate="no">.<a href="#get">get</a><span class="signature">( object : <span class="param-type">Object</span> )</span><span class="type-signature"> : Object</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the dictionary for the given object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The object.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The object's dictionary.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getArrayBufferAsync" translate="no">.<a href="#getArrayBufferAsync">getArrayBufferAsync</a><span class="signature">( attribute : <span class="param-type"><a href="StorageBufferAttribute.html">StorageBufferAttribute</a></span> )</span><span class="type-signature"> : Promise.&lt;ArrayBuffer></span> <span class="type-signature">(async) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method performs a readback operation by moving buffer data from
+a storage buffer attribute from the GPU to the CPU.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The storage buffer attribute.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A promise that resolves with the buffer data when the data are ready.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getClearColor" translate="no">.<a href="#getClearColor">getClearColor</a><span class="signature">()</span><span class="type-signature"> : <a href="Color4.html">Color4</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the clear color and alpha into a single
+color object.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The clear color.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getContext" translate="no">.<a href="#getContext">getContext</a><span class="signature">()</span><span class="type-signature"> : Object</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the backend's rendering context.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The rendering context.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getDomElement" translate="no">.<a href="#getDomElement">getDomElement</a><span class="signature">()</span><span class="type-signature"> : HTMLCanvasElement</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the DOM element. If no DOM element exists, the backend
+creates a new one.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The DOM element.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getDrawingBufferSize" translate="no">.<a href="#getDrawingBufferSize">getDrawingBufferSize</a><span class="signature">()</span><span class="type-signature"> : <a href="Vector2.html">Vector2</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the drawing buffer size.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The drawing buffer size.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getRenderCacheKey" translate="no">.<a href="#getRenderCacheKey">getRenderCacheKey</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span> )</span><span class="type-signature"> : string</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns a cache key that is used to identify render pipelines.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The cache key.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getTimestamp" translate="no">.<a href="#getTimestamp">getTimestamp</a><span class="signature">( uid : <span class="param-type">string</span> )</span><span class="type-signature"> : number</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the timestamp for the given uid.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uid</strong>
+									</td>
+									<td class="description last">
+										<p>The unique identifier.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The timestamp.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getTimestampFrames" translate="no">.<a href="#getTimestampFrames">getTimestampFrames</a><span class="signature">( type : <span class="param-type">string</span> )</span><span class="type-signature"> : Array.&lt;number></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns all timestamp frames for the given type.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">type</strong>
+									</td>
+									<td class="description last">
+										<p>The type of the time stamp.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The timestamp frames.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getTimestampUID" translate="no">.<a href="#getTimestampUID">getTimestampUID</a><span class="signature">( abstractRenderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a> | <a href="ComputeNode.html">ComputeNode</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns a unique identifier for the given render context that can be used
+to allocate resources like occlusion queries or timestamp queries.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">abstractRenderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The unique identifier.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="has" translate="no">.<a href="#has">has</a><span class="signature">( object : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Checks if the given object has a dictionary
+with data defined.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The object.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether a dictionary for the given object as been defined or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="hasCompatibility" translate="no">.<a href="#hasCompatibility">hasCompatibility</a><span class="signature">( name : <span class="param-type">string</span> )</span><span class="type-signature"> : boolean</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Checks if the backend has the given compatibility.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The compatibility.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the backend has the given compatibility or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="hasFeature" translate="no">.<a href="#hasFeature">hasFeature</a><span class="signature">( name : <span class="param-type">string</span> )</span><span class="type-signature"> : boolean</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Checks if the given feature is supported  by the backend.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The feature's name.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the feature is supported or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="hasFeatureAsync" translate="no">.<a href="#hasFeatureAsync">hasFeatureAsync</a><span class="signature">( name : <span class="param-type">string</span> )</span><span class="type-signature"> : Promise.&lt;boolean></span> <span class="type-signature">(async, abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Checks if the given feature is supported by the backend.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The feature's name.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves with a bool that indicates whether the feature is supported or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="hasTimestampQuery" translate="no">.<a href="#hasTimestampQuery">hasTimestampQuery</a><span class="signature">( uid : <span class="param-type">string</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns <code>true</code> if a timestamp for the given uid is available.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uid</strong>
+									</td>
+									<td class="description last">
+										<p>The unique identifier.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the timestamp is available or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="init" translate="no">.<a href="#init">init</a><span class="signature">( renderer : <span class="param-type"><a href="Renderer.html">Renderer</a></span> )</span><span class="type-signature"> : Promise</span> <span class="type-signature">(async) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Initializes the backend so it is ready for usage. Concrete backends
+are supposed to implement their rendering context creation and related
+operations in this method.</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>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves when the backend has been initialized.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="initRenderTarget" translate="no">.<a href="#initRenderTarget">initRenderTarget</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Initializes the render target defined in the given render context.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="isOccluded" translate="no">.<a href="#isOccluded">isOccluded</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span>, object : <span class="param-type"><a href="Object3D.html">Object3D</a></span> )</span><span class="type-signature"> : boolean</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns <code>true</code> if the given 3D object is fully occluded by other
+3D objects in the scene. Backends must implement this method by using
+a Occlusion Query API.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The 3D object to test.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the 3D object is fully occluded or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="needsRenderUpdate" translate="no">.<a href="#needsRenderUpdate">needsRenderUpdate</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span> )</span><span class="type-signature"> : boolean</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns <code>true</code> if the render pipeline requires an update.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the render pipeline requires an update or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="resolveTimestampsAsync" translate="no">.<a href="#resolveTimestampsAsync">resolveTimestampsAsync</a><span class="signature">( type : <span class="param-type">string</span> )</span><span class="type-signature"> : Promise.&lt;number></span> <span class="type-signature">(async, abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Resolves the time stamp for the given render context and type.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">type</strong>
+									</td>
+									<td class="description last">
+										<p>The type of the time stamp.</p>
+										<p>Default is <code>'render'</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves with the time stamp.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="set" translate="no">.<a href="#set">set</a><span class="signature">( object : <span class="param-type">Object</span>, value : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets a dictionary for the given object into the
+internal data structure.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The object.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">value</strong>
+									</td>
+									<td class="description last">
+										<p>The dictionary to set.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="setScissorTest" translate="no">.<a href="#setScissorTest">setScissorTest</a><span class="signature">( boolean : <span class="param-type">boolean</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Defines the scissor test.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">boolean</strong>
+									</td>
+									<td class="description last">
+										<p>Whether the scissor test should be enabled or not.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="setXRTarget" translate="no">.<a href="#setXRTarget">setXRTarget</a><span class="signature">( xrTarget : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets the XR rendering destination.</p>
+<p>Backends that render directly into XR framebuffers can override this hook.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">xrTarget</strong>
+									</td>
+									<td class="description last">
+										<p>The XR rendering destination.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateAttribute" translate="no">.<a href="#updateAttribute">updateAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the GPU buffer of a shader attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer attribute to update.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateBinding" translate="no">.<a href="#updateBinding">updateBinding</a><span class="signature">( binding : <span class="param-type"><a href="Buffer.html">Buffer</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates a buffer binding.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">binding</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer binding to update.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateBindings" translate="no">.<a href="#updateBindings">updateBindings</a><span class="signature">( bindGroup : <span class="param-type"><a href="BindGroup.html">BindGroup</a></span>, bindings : <span class="param-type">Array.&lt;<a href="BindGroup.html">BindGroup</a>></span>, cacheIndex : <span class="param-type">number</span>, version : <span class="param-type">number</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the given bind group definition.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The bind group.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindings</strong>
+									</td>
+									<td class="description last">
+										<p>Array of bind groups.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">cacheIndex</strong>
+									</td>
+									<td class="description last">
+										<p>The cache index.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">version</strong>
+									</td>
+									<td class="description last">
+										<p>The version.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateSampler" translate="no">.<a href="#updateSampler">updateSampler</a><span class="signature">( binding : <span class="param-type"><a href="Sampler.html">Sampler</a></span> )</span><span class="type-signature"> : string</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates a GPU sampler for the given texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">binding</strong>
+									</td>
+									<td class="description last">
+										<p>The sampler binding to update.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The current sampler key.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="updateSize" translate="no">.<a href="#updateSize">updateSize</a><span class="signature">()</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Backends can use this method if they have to run
+logic when the renderer gets resized.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="updateTexture" translate="no">.<a href="#updateTexture">updateTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, options : <span class="param-type">Object</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Uploads the updated texture data to the GPU.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>Optional configuration parameter.</p>
+										<p>Default is <code>{}</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateTimeStampUID" translate="no">.<a href="#updateTimeStampUID">updateTimeStampUID</a><span class="signature">( abstractRenderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a> | <a href="ComputeNode.html">ComputeNode</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates a unique identifier for the given render context that can be used
+to allocate resources like occlusion queries or timestamp queries.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">abstractRenderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateViewport" translate="no">.<a href="#updateViewport">updateViewport</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the viewport with the values from the given render context.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/src/renderers/common/Backend.js" translate="no" target="_blank" rel="noopener">src/renderers/common/Backend.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 707 - 0
docs/pages/Backend.html.md

@@ -0,0 +1,707 @@
+# Backend
+
+Most of the rendering related logic is implemented in the [Renderer](Renderer.html) module and related management components. Sometimes it is required though to execute commands which are specific to the current 3D backend (which is WebGPU or WebGL 2). This abstract base class defines an interface that encapsulates all backend-related logic. Derived classes for each backend must implement the interface.
+
+## Constructor
+
+### new Backend( parameters : Object ) (abstract)
+
+Constructs a new backend.
+
+**parameters**
+
+An object holding parameters for the backend.
+
+## Properties
+
+### .coordinateSystem : number (abstract, readonly)
+
+The coordinate system of the backend.
+
+### .data : WeakMap.<Object, Object>
+
+This weak map holds backend-specific data of objects like textures, attributes or render targets.
+
+### .domElement : HTMLCanvasElement | OffscreenCanvas
+
+A reference to the canvas element the renderer is drawing to.
+
+Default is `null`.
+
+### .hasTimestamp : boolean (readonly)
+
+Whether the backend supports query timestamps or not.
+
+### .parameters : Object
+
+The parameters of the backend.
+
+### .renderer : Renderer
+
+A reference to the renderer.
+
+Default is `null`.
+
+### .timestampQueryPool : Object
+
+A reference to the timestamp query pool.
+
+### .trackTimestamp : boolean
+
+Whether to track timestamps with a Timestamp Query API or not.
+
+Default is `false`.
+
+## Methods
+
+### ._getQueryPool( uid : string ) : TimestampQueryPool
+
+Returns the query pool for the given uid.
+
+**uid**
+
+The unique identifier.
+
+**Returns:** The query pool.
+
+### .beginCompute( computeGroup : Node | Array.<Node> ) (abstract)
+
+This method is executed at the beginning of a compute call and can be used by the backend to prepare the state for upcoming compute tasks.
+
+**computeGroup**
+
+The compute node(s).
+
+### .beginRender( renderContext : RenderContext ) (abstract)
+
+This method is executed at the beginning of a render call and can be used by the backend to prepare the state for upcoming draw calls.
+
+**renderContext**
+
+The render context.
+
+### .compute( computeGroup : Node | Array.<Node>, computeNode : Node, bindings : Array.<BindGroup>, computePipeline : ComputePipeline ) (abstract)
+
+Executes a compute command for the given compute node.
+
+**computeGroup**
+
+The group of compute nodes of a compute call. Can be a single compute node.
+
+**computeNode**
+
+The compute node.
+
+**bindings**
+
+The bindings.
+
+**computePipeline**
+
+The compute pipeline.
+
+### .copyFramebufferToTexture( texture : Texture, renderContext : RenderContext, rectangle : Vector4 ) (abstract)
+
+Copies the current bound framebuffer to the given texture.
+
+**texture**
+
+The destination texture.
+
+**renderContext**
+
+The render context.
+
+**rectangle**
+
+A four dimensional vector defining the origin and dimension of the copy.
+
+### .copyTextureToBuffer( texture : Texture, x : number, y : number, width : number, height : number, faceIndex : number ) : Promise.<TypedArray> (async, abstract)
+
+Returns texture data as a typed array.
+
+**texture**
+
+The texture to copy.
+
+**x**
+
+The x coordinate of the copy origin.
+
+**y**
+
+The y coordinate of the copy origin.
+
+**width**
+
+The width of the copy.
+
+**height**
+
+The height of the copy.
+
+**faceIndex**
+
+The face index.
+
+**Returns:** A Promise that resolves with a typed array when the copy operation has finished.
+
+### .copyTextureToTexture( srcTexture : Texture, dstTexture : Texture, srcRegion : Box3 | Box2, dstPosition : Vector2 | Vector3, srcLevel : number, dstLevel : number ) (abstract)
+
+Copies data of the given source texture to the given destination texture.
+
+**srcTexture**
+
+The source texture.
+
+**dstTexture**
+
+The destination texture.
+
+**srcRegion**
+
+The region of the source texture to copy.
+
+Default is `null`.
+
+**dstPosition**
+
+The destination position of the copy.
+
+Default is `null`.
+
+**srcLevel**
+
+The source mip level to copy from.
+
+Default is `0`.
+
+**dstLevel**
+
+The destination mip level to copy to.
+
+Default is `0`.
+
+### .createAttribute( attribute : BufferAttribute ) (abstract)
+
+Creates the GPU buffer of a shader attribute.
+
+**attribute**
+
+The buffer attribute.
+
+### .createBindings( bindGroup : BindGroup, bindings : Array.<BindGroup>, cacheIndex : number, version : number ) (abstract)
+
+Creates bindings from the given bind group definition.
+
+**bindGroup**
+
+The bind group.
+
+**bindings**
+
+Array of bind groups.
+
+**cacheIndex**
+
+The cache index.
+
+**version**
+
+The version.
+
+### .createComputePipeline( computePipeline : ComputePipeline, bindings : Array.<BindGroup> ) (abstract)
+
+Creates a compute pipeline for the given compute node.
+
+**computePipeline**
+
+The compute pipeline.
+
+**bindings**
+
+The bindings.
+
+### .createDefaultTexture( texture : Texture ) (abstract)
+
+Creates a default texture for the given texture that can be used as a placeholder until the actual texture is ready for usage.
+
+**texture**
+
+The texture to create a default texture for.
+
+### .createIndexAttribute( attribute : BufferAttribute ) (abstract)
+
+Creates the GPU buffer of an indexed shader attribute.
+
+**attribute**
+
+The indexed buffer attribute.
+
+### .createNodeBuilder( renderObject : RenderObject, renderer : Renderer ) : NodeBuilder (abstract)
+
+Returns a node builder for the given render object.
+
+**renderObject**
+
+The render object.
+
+**renderer**
+
+The renderer.
+
+**Returns:** The node builder.
+
+### .createProgram( program : ProgrammableStage ) (abstract)
+
+Creates a shader program from the given programmable stage.
+
+**program**
+
+The programmable stage.
+
+### .createRenderPipeline( renderObject : RenderObject, promises : Array.<Promise> ) (abstract)
+
+Creates a render pipeline for the given render object.
+
+**renderObject**
+
+The render object.
+
+**promises**
+
+An array of compilation promises which are used in `compileAsync()`.
+
+### .createStorageAttribute( attribute : BufferAttribute ) (abstract)
+
+Creates the GPU buffer of a storage attribute.
+
+**attribute**
+
+The buffer attribute.
+
+### .createTexture( texture : Texture, options : Object ) (abstract)
+
+Defines a texture on the GPU for the given texture object.
+
+**texture**
+
+The texture.
+
+**options**
+
+Optional configuration parameter.
+
+Default is `{}`.
+
+### .createUniformBuffer( uniformBuffer : Buffer ) (abstract)
+
+Creates a uniform buffer.
+
+**uniformBuffer**
+
+The uniform buffer.
+
+### .delete( object : Object )
+
+Deletes an object from the internal data structure.
+
+**object**
+
+The object to delete.
+
+### .deleteBindGroupData( bindGroup : BindGroup ) (abstract)
+
+Delete GPU data associated with a bind group.
+
+**bindGroup**
+
+The bind group.
+
+### .destroyAttribute( attribute : BufferAttribute ) (abstract)
+
+Destroys the GPU buffer of a shader attribute.
+
+**attribute**
+
+The buffer attribute to destroy.
+
+### .destroyProgram( program : ProgrammableStage ) (abstract)
+
+Destroys the shader program of the given programmable stage.
+
+**program**
+
+The programmable stage.
+
+### .destroySampler( binding : Sampler ) (abstract)
+
+Frees the GPU sampler for the given sampler binding.
+
+**binding**
+
+The sampler binding to free.
+
+### .destroyTexture( texture : Texture, isDefaultTexture : boolean ) (abstract)
+
+Destroys the GPU data for the given texture object.
+
+**texture**
+
+The texture.
+
+**isDefaultTexture**
+
+Whether the texture uses a default GPU texture or not.
+
+Default is `false`.
+
+### .destroyUniformBuffer( uniformBuffer : Buffer ) (abstract)
+
+Destroys a uniform buffer.
+
+**uniformBuffer**
+
+The uniform buffer.
+
+### .dispose() (abstract)
+
+Frees internal resources.
+
+### .draw( renderObject : RenderObject, info : Info ) (abstract)
+
+Executes a draw command for the given render object.
+
+**renderObject**
+
+The render object to draw.
+
+**info**
+
+Holds a series of statistical information about the GPU memory and the rendering process.
+
+### .finishCompute( computeGroup : Node | Array.<Node> ) (abstract)
+
+This method is executed at the end of a compute call and can be used by the backend to finalize work after compute tasks.
+
+**computeGroup**
+
+The compute node(s).
+
+### .finishRender( renderContext : RenderContext ) (abstract)
+
+This method is executed at the end of a render call and can be used by the backend to finalize work after draw calls.
+
+**renderContext**
+
+The render context.
+
+### .generateMipmaps( texture : Texture ) (abstract)
+
+Generates mipmaps for the given texture.
+
+**texture**
+
+The texture.
+
+### .get( object : Object ) : Object
+
+Returns the dictionary for the given object.
+
+**object**
+
+The object.
+
+**Returns:** The object's dictionary.
+
+### .getArrayBufferAsync( attribute : StorageBufferAttribute ) : Promise.<ArrayBuffer> (async)
+
+This method performs a readback operation by moving buffer data from a storage buffer attribute from the GPU to the CPU.
+
+**attribute**
+
+The storage buffer attribute.
+
+**Returns:** A promise that resolves with the buffer data when the data are ready.
+
+### .getClearColor() : Color4
+
+Returns the clear color and alpha into a single color object.
+
+**Returns:** The clear color.
+
+### .getContext() : Object (abstract)
+
+Returns the backend's rendering context.
+
+**Returns:** The rendering context.
+
+### .getDomElement() : HTMLCanvasElement
+
+Returns the DOM element. If no DOM element exists, the backend creates a new one.
+
+**Returns:** The DOM element.
+
+### .getDrawingBufferSize() : Vector2
+
+Returns the drawing buffer size.
+
+**Returns:** The drawing buffer size.
+
+### .getRenderCacheKey( renderObject : RenderObject ) : string (abstract)
+
+Returns a cache key that is used to identify render pipelines.
+
+**renderObject**
+
+The render object.
+
+**Returns:** The cache key.
+
+### .getTimestamp( uid : string ) : number
+
+Returns the timestamp for the given uid.
+
+**uid**
+
+The unique identifier.
+
+**Returns:** The timestamp.
+
+### .getTimestampFrames( type : string ) : Array.<number>
+
+Returns all timestamp frames for the given type.
+
+**type**
+
+The type of the time stamp.
+
+**Returns:** The timestamp frames.
+
+### .getTimestampUID( abstractRenderContext : RenderContext | ComputeNode ) : string
+
+Returns a unique identifier for the given render context that can be used to allocate resources like occlusion queries or timestamp queries.
+
+**abstractRenderContext**
+
+The render context.
+
+**Returns:** The unique identifier.
+
+### .has( object : Object ) : boolean
+
+Checks if the given object has a dictionary with data defined.
+
+**object**
+
+The object.
+
+**Returns:** Whether a dictionary for the given object as been defined or not.
+
+### .hasCompatibility( name : string ) : boolean (abstract)
+
+Checks if the backend has the given compatibility.
+
+**name**
+
+The compatibility.
+
+**Returns:** Whether the backend has the given compatibility or not.
+
+### .hasFeature( name : string ) : boolean (abstract)
+
+Checks if the given feature is supported by the backend.
+
+**name**
+
+The feature's name.
+
+**Returns:** Whether the feature is supported or not.
+
+### .hasFeatureAsync( name : string ) : Promise.<boolean> (async, abstract)
+
+Checks if the given feature is supported by the backend.
+
+**name**
+
+The feature's name.
+
+**Returns:** A Promise that resolves with a bool that indicates whether the feature is supported or not.
+
+### .hasTimestampQuery( uid : string ) : boolean
+
+Returns `true` if a timestamp for the given uid is available.
+
+**uid**
+
+The unique identifier.
+
+**Returns:** Whether the timestamp is available or not.
+
+### .init( renderer : Renderer ) : Promise (async)
+
+Initializes the backend so it is ready for usage. Concrete backends are supposed to implement their rendering context creation and related operations in this method.
+
+**renderer**
+
+The renderer.
+
+**Returns:** A Promise that resolves when the backend has been initialized.
+
+### .initRenderTarget( renderContext : RenderContext ) (abstract)
+
+Initializes the render target defined in the given render context.
+
+**renderContext**
+
+The render context.
+
+### .isOccluded( renderContext : RenderContext, object : Object3D ) : boolean (abstract)
+
+Returns `true` if the given 3D object is fully occluded by other 3D objects in the scene. Backends must implement this method by using a Occlusion Query API.
+
+**renderContext**
+
+The render context.
+
+**object**
+
+The 3D object to test.
+
+**Returns:** Whether the 3D object is fully occluded or not.
+
+### .needsRenderUpdate( renderObject : RenderObject ) : boolean (abstract)
+
+Returns `true` if the render pipeline requires an update.
+
+**renderObject**
+
+The render object.
+
+**Returns:** Whether the render pipeline requires an update or not.
+
+### .resolveTimestampsAsync( type : string ) : Promise.<number> (async, abstract)
+
+Resolves the time stamp for the given render context and type.
+
+**type**
+
+The type of the time stamp.
+
+Default is `'render'`.
+
+**Returns:** A Promise that resolves with the time stamp.
+
+### .set( object : Object, value : Object )
+
+Sets a dictionary for the given object into the internal data structure.
+
+**object**
+
+The object.
+
+**value**
+
+The dictionary to set.
+
+### .setScissorTest( boolean : boolean ) (abstract)
+
+Defines the scissor test.
+
+**boolean**
+
+Whether the scissor test should be enabled or not.
+
+### .setXRTarget( xrTarget : Object )
+
+Sets the XR rendering destination.
+
+Backends that render directly into XR framebuffers can override this hook.
+
+**xrTarget**
+
+The XR rendering destination.
+
+### .updateAttribute( attribute : BufferAttribute ) (abstract)
+
+Updates the GPU buffer of a shader attribute.
+
+**attribute**
+
+The buffer attribute to update.
+
+### .updateBinding( binding : Buffer ) (abstract)
+
+Updates a buffer binding.
+
+**binding**
+
+The buffer binding to update.
+
+### .updateBindings( bindGroup : BindGroup, bindings : Array.<BindGroup>, cacheIndex : number, version : number ) (abstract)
+
+Updates the given bind group definition.
+
+**bindGroup**
+
+The bind group.
+
+**bindings**
+
+Array of bind groups.
+
+**cacheIndex**
+
+The cache index.
+
+**version**
+
+The version.
+
+### .updateSampler( binding : Sampler ) : string (abstract)
+
+Updates a GPU sampler for the given texture.
+
+**binding**
+
+The sampler binding to update.
+
+**Returns:** The current sampler key.
+
+### .updateSize() (abstract)
+
+Backends can use this method if they have to run logic when the renderer gets resized.
+
+### .updateTexture( texture : Texture, options : Object ) (abstract)
+
+Uploads the updated texture data to the GPU.
+
+**texture**
+
+The texture.
+
+**options**
+
+Optional configuration parameter.
+
+Default is `{}`.
+
+### .updateTimeStampUID( abstractRenderContext : RenderContext | ComputeNode )
+
+Updates a unique identifier for the given render context that can be used to allocate resources like occlusion queries or timestamp queries.
+
+**abstractRenderContext**
+
+The render context.
+
+### .updateViewport( renderContext : RenderContext ) (abstract)
+
+Updates the viewport with the values from the given render context.
+
+**renderContext**
+
+The render context.
+
+## Source
+
+[src/renderers/common/Backend.js](https://github.com/mrdoob/three.js/blob/master/src/renderers/common/Backend.js)

+ 0 - 89
docs/pages/BatchNode.html

@@ -1,89 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>BatchNode - 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">BatchNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>This node implements the vertex shader logic which is required
-when rendering 3D objects via batching. <code>BatchNode</code> must be used
-with instances of <a href="BatchedMesh.html">BatchedMesh</a>.</p></div>
-			</header>
-			<article>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="BatchNode" translate="no">new <a href="#BatchNode">BatchNode</a><span class="signature">( batchMesh : <span class="param-type"><a href="BatchedMesh.html">BatchedMesh</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new batch node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">batchMesh</strong>
-									</td>
-									<td class="description last">
-										<p>A reference to batched mesh.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="batchMesh" translate="no">.<a href="#batchMesh">batchMesh</a><span class="type-signature"> : <a href="BatchedMesh.html">BatchedMesh</a></span> </h3>
-					<div class="description">
-						<p>A reference to batched mesh.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="batchingIdNode" translate="no">.<a href="#batchingIdNode">batchingIdNode</a><span class="type-signature"> : <a href="IndexNode.html">IndexNode</a></span> </h3>
-					<div class="description">
-						<p>The batching index node.</p>
-						<p>Default is <code>null</code>.</p>
-					</div>
-				</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> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Setups the internal buffers and nodes and assigns the transformed vertex data
-to predefined node variables for accumulation. That follows the same patterns
-like with morph and skinning nodes.</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#setup">Node#setup</a></dt>
-						</dl>
-					</div>
-				<h2 class="subsection-title">Source</h2>
-				<p>
-					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/BatchNode.js" translate="no" target="_blank" rel="noopener">src/nodes/accessors/BatchNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 43
docs/pages/BatchNode.html.md

@@ -1,43 +0,0 @@
-*Inheritance: EventDispatcher → Node →*
-
-# BatchNode
-
-This node implements the vertex shader logic which is required when rendering 3D objects via batching. `BatchNode` must be used with instances of [BatchedMesh](BatchedMesh.html).
-
-## Constructor
-
-### new BatchNode( batchMesh : BatchedMesh )
-
-Constructs a new batch node.
-
-**batchMesh**
-
-A reference to batched mesh.
-
-## Properties
-
-### .batchMesh : BatchedMesh
-
-A reference to batched mesh.
-
-### .batchingIdNode : IndexNode
-
-The batching index node.
-
-Default is `null`.
-
-## Methods
-
-### .setup( builder : NodeBuilder )
-
-Setups the internal buffers and nodes and assigns the transformed vertex data to predefined node variables for accumulation. That follows the same patterns like with morph and skinning nodes.
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [Node#setup](Node.html#setup)
-
-## Source
-
-[src/nodes/accessors/BatchNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/BatchNode.js)

+ 37 - 0
docs/pages/BloomNode.html

@@ -88,6 +88,12 @@ renderPipeline.outputNode = scenePassColor.add( bloomPass );
 					</div>
 					</div>
 				</div>
 				</div>
 				<h2 class="subsection-title">Properties</h2>
 				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="highPassFn" translate="no">.<a href="#highPassFn">highPassFn</a><span class="type-signature"> : function</span> </h3>
+					<div class="description">
+						<p>Can be used to inject a custom high pass filter (e.g., for anamorphic effects).</p>
+					</div>
+				</div>
 				<div class="member">
 				<div class="member">
 					<h3 class="name" id="inputNode" translate="no">.<a href="#inputNode">inputNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec4></span> </h3>
 					<h3 class="name" id="inputNode" translate="no">.<a href="#inputNode">inputNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec4></span> </h3>
 					<div class="description">
 					<div class="description">
@@ -140,6 +146,15 @@ when the effect is no longer required.</p>
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#dispose">TempNode#dispose</a></dt>
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#dispose">TempNode#dispose</a></dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
+					<h3 class="name name-method" id="getResolutionScale" translate="no">.<a href="#getResolutionScale">getResolutionScale</a><span class="signature">()</span><span class="type-signature"> : number</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Gets the current resolution scale of the pass.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The current resolution scale. A value of <code>1</code> means full resolution.</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>
 					<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="method">
 						<div class="description">
 						<div class="description">
@@ -149,6 +164,28 @@ when the effect is no longer required.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> A texture node that represents the result of the effect.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> A texture node that represents the result of the effect.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
+					<h3 class="name name-method" id="setResolutionScale" translate="no">.<a href="#setResolutionScale">setResolutionScale</a><span class="signature">( resolutionScale : <span class="param-type">number</span> )</span><span class="type-signature"> : <a href="BloomNode.html">BloomNode</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets the resolution scale for the pass.
+The resolution scale is a factor that is multiplied with the renderer's width and height.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">resolutionScale</strong>
+									</td>
+									<td class="description last">
+										<p>The resolution scale to set. A value of <code>1</code> means full resolution.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this node.</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>
 					<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="method">
 						<div class="description">
 						<div class="description">

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

@@ -65,6 +65,10 @@ Default is `0`.
 
 
 ## Properties
 ## Properties
 
 
+### .highPassFn : function
+
+Can be used to inject a custom high pass filter (e.g., for anamorphic effects).
+
 ### .inputNode : Node.<vec4>
 ### .inputNode : Node.<vec4>
 
 
 The node that represents the input of the effect.
 The node that represents the input of the effect.
@@ -101,12 +105,28 @@ Frees internal resources. This method should be called when the effect is no lon
 
 
 **Overrides:** [TempNode#dispose](TempNode.html#dispose)
 **Overrides:** [TempNode#dispose](TempNode.html#dispose)
 
 
+### .getResolutionScale() : number
+
+Gets the current resolution scale of the pass.
+
+**Returns:** The current resolution scale. A value of `1` means full resolution.
+
 ### .getTextureNode() : PassTextureNode
 ### .getTextureNode() : PassTextureNode
 
 
 Returns the result of the effect as a texture node.
 Returns the result of the effect as a texture node.
 
 
 **Returns:** A texture node that represents the result of the effect.
 **Returns:** A texture node that represents the result of the effect.
 
 
+### .setResolutionScale( resolutionScale : number ) : BloomNode
+
+Sets the resolution scale for the pass. The resolution scale is a factor that is multiplied with the renderer's width and height.
+
+**resolutionScale**
+
+The resolution scale to set. A value of `1` means full resolution.
+
+**Returns:** A reference to this node.
+
 ### .setSize( width : number, height : number )
 ### .setSize( width : number, height : number )
 
 
 Sets the size of the effect.
 Sets the size of the effect.

+ 4 - 0
docs/pages/Box3.html

@@ -686,6 +686,10 @@ depth to the given size values.</p>
 							<p>Computes the world-axis-aligned bounding box for the given 3D object
 							<p>Computes the world-axis-aligned bounding box for the given 3D object
 (including its children), accounting for the object's, and children's,
 (including its children), accounting for the object's, and children's,
 world transforms. The function may result in a larger box than strictly necessary.</p>
 world transforms. The function may result in a larger box than strictly necessary.</p>
+<p>Note: To compute the correct bounding box, make sure the given 3D object
+has an up-to-date world matrix that reflects the current transformation of its
+ancestor nodes. Call <code>object.updateWorldMatrix( true, false )</code> beforehand if
+you're unsure.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>

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

@@ -332,6 +332,8 @@ The x, y and z dimensions of the box.
 
 
 Computes the world-axis-aligned bounding box for the given 3D object (including its children), accounting for the object's, and children's, world transforms. The function may result in a larger box than strictly necessary.
 Computes the world-axis-aligned bounding box for the given 3D object (including its children), accounting for the object's, and children's, world transforms. The function may result in a larger box than strictly necessary.
 
 
+Note: To compute the correct bounding box, make sure the given 3D object has an up-to-date world matrix that reflects the current transformation of its ancestor nodes. Call `object.updateWorldMatrix( true, false )` beforehand if you're unsure.
+
 **object**
 **object**
 
 
 The 3D object to compute the bounding box for.
 The 3D object to compute the bounding box for.

+ 43 - 0
docs/pages/CityGenerator.html

@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>CityGenerator - 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">CityGenerator</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Lays out a grid of city blocks and fills each lot with a <a href="SkyscraperGenerator.html">SkyscraperGenerator</a>
+tower of its own seed, height and footprint, optionally on raised sidewalk
+slabs (curbs). Returns a <code>THREE.Group</code> ready to add to a scene.</p>
+<p>Pass a building material to dress the towers; the sidewalks dress themselves
+via <a href="SidewalkGenerator.html">SidewalkGenerator</a>. The layout is exposed as
+CityGenerator#layout so the surrounding scene (road markings, etc.)
+can align to the same grid.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const city = new CityGenerator( { seed: 1 } );
+scene.add( city.build( materials ) );
+</code></pre></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="CityGenerator" translate="no">new <a href="#CityGenerator">CityGenerator</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/generators/CityGenerator.js" translate="no" target="_blank" rel="noopener">examples/jsm/generators/CityGenerator.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

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

@@ -0,0 +1,20 @@
+# CityGenerator
+
+Lays out a grid of city blocks and fills each lot with a [SkyscraperGenerator](SkyscraperGenerator.html) tower of its own seed, height and footprint, optionally on raised sidewalk slabs (curbs). Returns a `THREE.Group` ready to add to a scene.
+
+Pass a building material to dress the towers; the sidewalks dress themselves via [SidewalkGenerator](SidewalkGenerator.html). The layout is exposed as CityGenerator#layout so the surrounding scene (road markings, etc.) can align to the same grid.
+
+## Code Example
+
+```js
+const city = new CityGenerator( { seed: 1 } );
+scene.add( city.build( materials ) );
+```
+
+## Constructor
+
+### new CityGenerator()
+
+## Source
+
+[examples/jsm/generators/CityGenerator.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/CityGenerator.js)

+ 14 - 6
docs/pages/DRACOExporter.html

@@ -20,10 +20,12 @@ at the cost of additional decoding time on the client device.</p>
 normals, colors, and other attributes. Draco files <em>do not</em> contain materials,
 normals, colors, and other attributes. Draco files <em>do not</em> contain materials,
 textures, animation, or node hierarchies – to use these features, embed Draco geometry
 textures, animation, or node hierarchies – to use these features, embed Draco geometry
 inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file
 inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file
-using <a href="https://github.com/AnalyticalGraphicsInc/gltf-pipeline" target="_blank" rel="noopener">glTF-Pipeline</a>.</p></div>
-				<h2>Code Example</h2>
-				<div translate="no"><pre><code class="language-js">const exporter = new DRACOExporter();
-const data = exporter.parse( mesh, options );
+using <a href="https://github.com/AnalyticalGraphicsInc/gltf-pipeline" target="_blank" rel="noopener">glTF-Pipeline</a>.</p>
+<p>The exporter requires the Draco encoder to be loaded as a global script in advance:</p>
+<pre><code class="language-html">&lt;script src=&quot;https://cdn.jsdelivr.net/gh/google/draco@1.5.7/javascript/draco_encoder.js&quot;>&lt;/script>
+</code></pre>
+<pre><code class="language-js">const exporter = new DRACOExporter();
+const data = await exporter.parseAsync( mesh, options );
 </code></pre></div>
 </code></pre></div>
 			</header>
 			</header>
 			<article>
 			<article>
@@ -52,7 +54,13 @@ const data = exporter.parse( mesh, options );
 					</div>
 					</div>
 				</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="parse" translate="no">.<a href="#parse">parse</a><span class="signature">( object : <span class="param-type"><a href="Mesh.html">Mesh</a> | <a href="Points.html">Points</a></span>, options : <span class="param-type"><a href="DRACOExporter.html#~Options">DRACOExporter~Options</a></span> )</span><span class="type-signature"> : Int8Array</span> </h3>
+					<h3 class="name name-method" id="parse" translate="no">.<a href="#parse">parse</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Use <a href="DRACOExporter.html#parseAsync">DRACOExporter#parseAsync</a> instead.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="parseAsync" translate="no">.<a href="#parseAsync">parseAsync</a><span class="signature">( object : <span class="param-type"><a href="Mesh.html">Mesh</a> | <a href="Points.html">Points</a></span>, options : <span class="param-type"><a href="DRACOExporter.html#~Options">DRACOExporter~Options</a></span> )</span><span class="type-signature"> : Promise.&lt;Int8Array></span> <span class="type-signature">(async) </span></h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
 							<p>Parses the given mesh or point cloud and generates the Draco output.</p>
 							<p>Parses the given mesh or point cloud and generates the Draco output.</p>
@@ -78,7 +86,7 @@ const data = exporter.parse( mesh, options );
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The exported Draco.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves with the exported Draco.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
 				<h2 class="subsection-title">Type Definitions</h2>
 				<h2 class="subsection-title">Type Definitions</h2>

+ 11 - 4
docs/pages/DRACOExporter.html.md

@@ -6,11 +6,14 @@ An exporter to compress geometry with the Draco library.
 
 
 Standalone Draco files have a `.drc` extension, and contain vertex positions, normals, colors, and other attributes. Draco files _do not_ contain materials, textures, animation, or node hierarchies – to use these features, embed Draco geometry inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file using [glTF-Pipeline](https://github.com/AnalyticalGraphicsInc/gltf-pipeline).
 Standalone Draco files have a `.drc` extension, and contain vertex positions, normals, colors, and other attributes. Draco files _do not_ contain materials, textures, animation, or node hierarchies – to use these features, embed Draco geometry inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file using [glTF-Pipeline](https://github.com/AnalyticalGraphicsInc/gltf-pipeline).
 
 
-## Code Example
+The exporter requires the Draco encoder to be loaded as a global script in advance:
 
 
+```js
+<script src="https://cdn.jsdelivr.net/gh/google/draco@1.5.7/javascript/draco_encoder.js"></script>
+```
 ```js
 ```js
 const exporter = new DRACOExporter();
 const exporter = new DRACOExporter();
-const data = exporter.parse( mesh, options );
+const data = await exporter.parseAsync( mesh, options );
 ```
 ```
 
 
 ## Import
 ## Import
@@ -41,7 +44,11 @@ Default is `0`.
 
 
 ## Methods
 ## Methods
 
 
-### .parse( object : Mesh | Points, options : DRACOExporter~Options ) : Int8Array
+### .parse()
+
+**Deprecated:** Use [DRACOExporter#parseAsync](DRACOExporter.html#parseAsync) instead.
+
+### .parseAsync( object : Mesh | Points, options : DRACOExporter~Options ) : Promise.<Int8Array> (async)
 
 
 Parses the given mesh or point cloud and generates the Draco output.
 Parses the given mesh or point cloud and generates the Draco output.
 
 
@@ -53,7 +60,7 @@ The mesh or point cloud to export.
 
 
 The export options.
 The export options.
 
 
-**Returns:** The exported Draco.
+**Returns:** A Promise that resolves with the exported Draco.
 
 
 ## Type Definitions
 ## Type Definitions
 
 

+ 7 - 5
docs/pages/DRACOLoader.html

@@ -28,10 +28,9 @@ multiple decoder instances.</p>
 browser capabilities.</p></div>
 browser capabilities.</p></div>
 				<h2>Code Example</h2>
 				<h2>Code Example</h2>
 				<div translate="no"><pre><code class="language-js">const loader = new DRACOLoader();
 				<div translate="no"><pre><code class="language-js">const loader = new DRACOLoader();
-loader.setDecoderPath( '/examples/jsm/libs/draco/' );
-const geometry = await dracoLoader.loadAsync( 'models/draco/bunny.drc' );
+const geometry = await loader.loadAsync( 'models/draco/bunny.drc' );
 geometry.computeVertexNormals(); // optional
 geometry.computeVertexNormals(); // optional
-dracoLoader.dispose();
+loader.dispose();
 </code></pre></div>
 </code></pre></div>
 			</header>
 			</header>
 			<article>
 			<article>
@@ -160,11 +159,14 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Yes</dt>
+						</dl>
 						<dl class="details">
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this loader.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this loader.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
-					<h3 class="name name-method" id="setDecoderPath" translate="no">.<a href="#setDecoderPath">setDecoderPath</a><span class="signature">( path : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="DRACOLoader.html">DRACOLoader</a></span> </h3>
+					<h3 class="name name-method" id="setDecoderPath" translate="no">.<a href="#setDecoderPath">setDecoderPath</a><span class="signature">( path : <span class="param-type">string | Object</span> )</span><span class="type-signature"> : <a href="DRACOLoader.html">DRACOLoader</a></span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
 							<p>Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.</p>
 							<p>Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.</p>
@@ -176,7 +178,7 @@ to the <code>onLoad()</code> callback.</p>
 										<strong translate="no">path</strong>
 										<strong translate="no">path</strong>
 									</td>
 									</td>
 									<td class="description last">
 									<td class="description last">
-										<p>The decoder path.</p>
+										<p>The decoder path, or a config object with explicit URLs for each decoder file.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>

+ 6 - 5
docs/pages/DRACOLoader.html.md

@@ -16,10 +16,9 @@ It is recommended to create one DRACOLoader instance and reuse it to avoid loadi
 
 
 ```js
 ```js
 const loader = new DRACOLoader();
 const loader = new DRACOLoader();
-loader.setDecoderPath( '/examples/jsm/libs/draco/' );
-const geometry = await dracoLoader.loadAsync( 'models/draco/bunny.drc' );
+const geometry = await loader.loadAsync( 'models/draco/bunny.drc' );
 geometry.computeVertexNormals(); // optional
 geometry.computeVertexNormals(); // optional
-dracoLoader.dispose();
+loader.dispose();
 ```
 ```
 
 
 ## Import
 ## Import
@@ -90,15 +89,17 @@ Provides configuration for the decoder libraries. Configuration cannot be change
 
 
 The decoder config.
 The decoder config.
 
 
+**Deprecated:** Yes
+
 **Returns:** A reference to this loader.
 **Returns:** A reference to this loader.
 
 
-### .setDecoderPath( path : string ) : DRACOLoader
+### .setDecoderPath( path : string | Object ) : DRACOLoader
 
 
 Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.
 Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.
 
 
 **path**
 **path**
 
 
-The decoder path.
+The decoder path, or a config object with explicit URLs for each decoder file.
 
 
 **Returns:** A reference to this loader.
 **Returns:** A reference to this loader.
 
 

+ 23 - 0
docs/pages/DataTextureLoader.html

@@ -41,6 +41,29 @@ for the respective format.</p></div>
 					</div>
 					</div>
 				</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
 				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="createDataTexture" translate="no">.<a href="#createDataTexture">createDataTexture</a><span class="signature">( buffer : <span class="param-type">ArrayBuffer</span> )</span><span class="type-signature"> : <a href="DataTexture.html">DataTexture</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Parses the given buffer and returns a configured data texture. Use this method
+for parsing texture data that is already in memory (e.g. drag and drop or data
+loaded from a server) without going through <a href="DataTextureLoader.html#load">DataTextureLoader#load</a>.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">buffer</strong>
+									</td>
+									<td class="description last">
+										<p>The raw texture data.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The data texture.</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="DataTexture.html">DataTexture</a></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><span class="type-signature"> : <a href="DataTexture.html">DataTexture</a></span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">

+ 10 - 0
docs/pages/DataTextureLoader.html.md

@@ -18,6 +18,16 @@ The loading manager.
 
 
 ## Methods
 ## Methods
 
 
+### .createDataTexture( buffer : ArrayBuffer ) : DataTexture
+
+Parses the given buffer and returns a configured data texture. Use this method for parsing texture data that is already in memory (e.g. drag and drop or data loaded from a server) without going through [DataTextureLoader#load](DataTextureLoader.html#load).
+
+**buffer**
+
+The raw texture data.
+
+**Returns:** The data texture.
+
 ### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback ) : DataTexture
 ### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback ) : DataTexture
 
 
 Starts loading from the given URL and passes the loaded data texture to the `onLoad()` callback. The method also returns a new texture object which can directly be used for material creation. If you do it this way, the texture may pop up in your scene once the respective loading process is finished.
 Starts loading from the given URL and passes the loaded data texture to the `onLoad()` callback. The method also returns a new texture object which can directly be used for material creation. If you do it this way, the texture may pop up in your scene once the respective loading process is finished.

+ 1 - 3
docs/pages/ExternalTexture.html

@@ -15,9 +15,7 @@
 			<header>
 			<header>
 				<div class="class-description"><p>Represents a texture created externally with the same renderer context.</p>
 				<div class="class-description"><p>Represents a texture created externally with the same renderer context.</p>
 <p>This may be a texture from a protected media stream, device camera feed,
 <p>This may be a texture from a protected media stream, device camera feed,
-or other data feeds like a depth sensor.</p>
-<p>Note that this class is only supported in <a href="WebGLRenderer.html">WebGLRenderer</a>, and in
-the <a href="WebGPURenderer.html">WebGPURenderer</a> WebGPU backend.</p></div>
+or other data feeds like a depth sensor.</p></div>
 			</header>
 			</header>
 			<article>
 			<article>
 				<div class="container-overview">
 				<div class="container-overview">

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

@@ -6,8 +6,6 @@ Represents a texture created externally with the same renderer context.
 
 
 This may be a texture from a protected media stream, device camera feed, or other data feeds like a depth sensor.
 This may be a texture from a protected media stream, device camera feed, or other data feeds like a depth sensor.
 
 
-Note that this class is only supported in [WebGLRenderer](WebGLRenderer.html), and in the [WebGPURenderer](WebGPURenderer.html) WebGPU backend.
-
 ## Constructor
 ## Constructor
 
 
 ### new ExternalTexture( sourceTexture : WebGLTexture | GPUTexture )
 ### new ExternalTexture( sourceTexture : WebGLTexture | GPUTexture )

+ 46 - 0
docs/pages/FaceFrame.html

@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>FaceFrame - 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">FaceFrame</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>A face's local ( u along edge, v up, n outward ) frame in world space.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="FaceFrame" translate="no">new <a href="#FaceFrame">FaceFrame</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="bays" translate="no">.<a href="#bays">bays</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>How many bays of <code>bayWidth</code> fit, with the remainder split into end margins.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="matrix" translate="no">.<a href="#matrix">matrix</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Places a piece authored in the canonical local frame ( x across, y up, z outward ).</p>
+						</div>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/city/SkyscraperGenerator.js" translate="no" target="_blank" rel="noopener">examples/jsm/generators/city/SkyscraperGenerator.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 21 - 0
docs/pages/FaceFrame.html.md

@@ -0,0 +1,21 @@
+# FaceFrame
+
+A face's local ( u along edge, v up, n outward ) frame in world space.
+
+## Constructor
+
+### new FaceFrame()
+
+## Methods
+
+### .bays()
+
+How many bays of `bayWidth` fit, with the remainder split into end margins.
+
+### .matrix()
+
+Places a piece authored in the canonical local frame ( x across, y up, z outward ).
+
+## Source
+
+[examples/jsm/generators/city/SkyscraperGenerator.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/city/SkyscraperGenerator.js)

+ 8 - 0
docs/pages/FirstPersonControls.html

@@ -64,6 +64,14 @@
 						<p>Default is <code>false</code>.</p>
 						<p>Default is <code>false</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
+				<div class="member">
+					<h3 class="name" id="dampingFactor" translate="no">.<a href="#dampingFactor">dampingFactor</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>How quickly the movement and look velocity catches up to the input. Lower
+values feel heavier (more inertia), <code>1</code> disables damping.</p>
+						<p>Default is <code>0.1</code>.</p>
+					</div>
+				</div>
 				<div class="member">
 				<div class="member">
 					<h3 class="name" id="heightCoef" translate="no">.<a href="#heightCoef">heightCoef</a><span class="type-signature"> : number</span> </h3>
 					<h3 class="name" id="heightCoef" translate="no">.<a href="#heightCoef">heightCoef</a><span class="type-signature"> : number</span> </h3>
 					<div class="description">
 					<div class="description">

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

@@ -42,6 +42,12 @@ Whether or not looking around is vertically constrained by `verticalMin` and `ve
 
 
 Default is `false`.
 Default is `false`.
 
 
+### .dampingFactor : number
+
+How quickly the movement and look velocity catches up to the input. Lower values feel heavier (more inertia), `1` disables damping.
+
+Default is `0.1`.
+
 ### .heightCoef : number
 ### .heightCoef : number
 
 
 Determines how much faster the camera moves when it's y-component is near `heightMax`.
 Determines how much faster the camera moves when it's y-component is near `heightMax`.

+ 47 - 0
docs/pages/ForestGenerator.html

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>ForestGenerator - 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">ForestGenerator</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Carpets a <a href="TerrainGenerator.html">TerrainGenerator</a> ( or anything exposing <code>sampleHeight</code>,
+<code>sampleSlope</code>, <code>minY</code>, <code>maxY</code> and <code>parameters.size</code> ) with a forest of hundreds
+of thousands of trees in a single draw call.</p>
+<p>Each tree is the cheapest thing that still reads as a tree: a ~20-face icosphere
+squashed into a tapered teardrop and lumped with a little noise, carrying a baked
+dark-base / bright-top gradient. Tens of triangles each, so a single
+THREE.InstancedMesh of half a million of them costs one draw call. Trees
+are placed by rejection sampling against ecological rules — a min/max altitude
+band ( above the mist floor, below the snowline ), a slope limit ( none on
+cliffs ) and a low-frequency density mask that opens clearings — then jittered in
+yaw, lean and ( squared-biased ) scale so the stand never reads as copies.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const forest = new ForestGenerator( { count: 500000 } );
+scene.add( forest.build( terrain ) );
+</code></pre></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="ForestGenerator" translate="no">new <a href="#ForestGenerator">ForestGenerator</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/generators/ForestGenerator.js" translate="no" target="_blank" rel="noopener">examples/jsm/generators/ForestGenerator.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

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

@@ -0,0 +1,20 @@
+# ForestGenerator
+
+Carpets a [TerrainGenerator](TerrainGenerator.html) ( or anything exposing `sampleHeight`, `sampleSlope`, `minY`, `maxY` and `parameters.size` ) with a forest of hundreds of thousands of trees in a single draw call.
+
+Each tree is the cheapest thing that still reads as a tree: a ~20-face icosphere squashed into a tapered teardrop and lumped with a little noise, carrying a baked dark-base / bright-top gradient. Tens of triangles each, so a single THREE.InstancedMesh of half a million of them costs one draw call. Trees are placed by rejection sampling against ecological rules — a min/max altitude band ( above the mist floor, below the snowline ), a slope limit ( none on cliffs ) and a low-frequency density mask that opens clearings — then jittered in yaw, lean and ( squared-biased ) scale so the stand never reads as copies.
+
+## Code Example
+
+```js
+const forest = new ForestGenerator( { count: 500000 } );
+scene.add( forest.build( terrain ) );
+```
+
+## Constructor
+
+### new ForestGenerator()
+
+## Source
+
+[examples/jsm/generators/ForestGenerator.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/ForestGenerator.js)

+ 46 - 44
docs/pages/FrustumArray.html

@@ -43,11 +43,11 @@ from an array of cameras. This is particularly useful for multi-view renderers.<
 							<dt class="tag-returns"><strong>Returns:</strong> A clone of this instance.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> A clone of this instance.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
-					<h3 class="name name-method" id="containsPoint" translate="no">.<a href="#containsPoint">containsPoint</a><span class="signature">( point : <span class="param-type"><a href="Vector3.html">Vector3</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="containsPoint" translate="no">.<a href="#containsPoint">containsPoint</a><span class="signature">( point : <span class="param-type"><a href="Vector3.html">Vector3</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Returns <code>true</code> if the given point lies within any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the given point lies within any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
@@ -59,25 +59,38 @@ from the camera array.</p>
 										<p>The point to test.</p>
 										<p>The point to test.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the point is visible in any camera.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="copy" translate="no">.<a href="#copy">copy</a><span class="signature">( frustumArray : <span class="param-type"><a href="FrustumArray.html">FrustumArray</a></span> )</span><span class="type-signature"> : <a href="FrustumArray.html">FrustumArray</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Copies the values of the given frustum array to this instance.</p>
+						</div>
+						<table class="params">
+							<tbody>
 								<tr>
 								<tr>
 									<td class="name">
 									<td class="name">
-										<strong translate="no">cameraArray</strong>
+										<strong translate="no">frustumArray</strong>
 									</td>
 									</td>
 									<td class="description last">
 									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
+										<p>The frustum array to copy.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> Whether the point is visible in any camera.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this frustum array.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
-					<h3 class="name name-method" id="intersectsBox" translate="no">.<a href="#intersectsBox">intersectsBox</a><span class="signature">( box : <span class="param-type"><a href="Box3.html">Box3</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="intersectsBox" translate="no">.<a href="#intersectsBox">intersectsBox</a><span class="signature">( box : <span class="param-type"><a href="Box3.html">Box3</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Returns <code>true</code> if the given bounding box is intersecting any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the given bounding box is intersecting any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
@@ -89,25 +102,17 @@ from the camera array.</p>
 										<p>The bounding box to test.</p>
 										<p>The bounding box to test.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">cameraArray</strong>
-									</td>
-									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
-									</td>
-								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the box is visible in any camera.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the box is visible in any camera.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
-					<h3 class="name name-method" id="intersectsObject" translate="no">.<a href="#intersectsObject">intersectsObject</a><span class="signature">( object : <span class="param-type"><a href="Object3D.html">Object3D</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="intersectsObject" translate="no">.<a href="#intersectsObject">intersectsObject</a><span class="signature">( object : <span class="param-type"><a href="Object3D.html">Object3D</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Returns <code>true</code> if the 3D object's bounding sphere is intersecting any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the 3D object's bounding sphere is intersecting any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
@@ -119,25 +124,17 @@ from the camera array.</p>
 										<p>The 3D object to test.</p>
 										<p>The 3D object to test.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">cameraArray</strong>
-									</td>
-									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
-									</td>
-								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the 3D object is visible in any camera.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the 3D object is visible in any camera.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
-					<h3 class="name name-method" id="intersectsSphere" translate="no">.<a href="#intersectsSphere">intersectsSphere</a><span class="signature">( sphere : <span class="param-type"><a href="Sphere.html">Sphere</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="intersectsSphere" translate="no">.<a href="#intersectsSphere">intersectsSphere</a><span class="signature">( sphere : <span class="param-type"><a href="Sphere.html">Sphere</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Returns <code>true</code> if the given bounding sphere is intersecting any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the given bounding sphere is intersecting any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
@@ -149,25 +146,17 @@ from the camera array.</p>
 										<p>The bounding sphere to test.</p>
 										<p>The bounding sphere to test.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">cameraArray</strong>
-									</td>
-									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
-									</td>
-								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the sphere is visible in any camera.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the sphere is visible in any camera.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
-					<h3 class="name name-method" id="intersectsSprite" translate="no">.<a href="#intersectsSprite">intersectsSprite</a><span class="signature">( sprite : <span class="param-type"><a href="Sprite.html">Sprite</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="intersectsSprite" translate="no">.<a href="#intersectsSprite">intersectsSprite</a><span class="signature">( sprite : <span class="param-type"><a href="Sprite.html">Sprite</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Returns <code>true</code> if the given sprite is intersecting any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the given sprite is intersecting any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
@@ -179,18 +168,31 @@ from the camera array.</p>
 										<p>The sprite to test.</p>
 										<p>The sprite to test.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the sprite is visible in any camera.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="setFromArrayCamera" translate="no">.<a href="#setFromArrayCamera">setFromArrayCamera</a><span class="signature">( cameraArray : <span class="param-type"><a href="ArrayCamera.html">ArrayCamera</a></span> )</span><span class="type-signature"> : <a href="FrustumArray.html">FrustumArray</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Computes and caches a frustum for each camera of the given array camera.</p>
+						</div>
+						<table class="params">
+							<tbody>
 								<tr>
 								<tr>
 									<td class="name">
 									<td class="name">
 										<strong translate="no">cameraArray</strong>
 										<strong translate="no">cameraArray</strong>
 									</td>
 									</td>
 									<td class="description last">
 									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
+										<p>The array camera whose sub-cameras define the frustums.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> Whether the sprite is visible in any camera.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this frustum array.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
 				<h2 class="subsection-title">Source</h2>
 				<h2 class="subsection-title">Source</h2>

+ 37 - 27
docs/pages/FrustumArray.html.md

@@ -24,75 +24,85 @@ Returns a new frustum array with copied values from this instance.
 
 
 **Returns:** A clone of this instance.
 **Returns:** A clone of this instance.
 
 
-### .containsPoint( point : Vector3, cameraArray : Object ) : boolean
+### .containsPoint( point : Vector3 ) : boolean
 
 
-Returns `true` if the given point lies within any frustum from the camera array.
+Returns `true` if the given point lies within any cached frustum.
+
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
 
 
 **point**
 **point**
 
 
 The point to test.
 The point to test.
 
 
-**cameraArray**
+**Returns:** Whether the point is visible in any camera.
 
 
-An object with a cameras property containing an array of cameras.
+### .copy( frustumArray : FrustumArray ) : FrustumArray
 
 
-**Returns:** Whether the point is visible in any camera.
+Copies the values of the given frustum array to this instance.
 
 
-### .intersectsBox( box : Box3, cameraArray : Object ) : boolean
+**frustumArray**
 
 
-Returns `true` if the given bounding box is intersecting any frustum from the camera array.
+The frustum array to copy.
 
 
-**box**
+**Returns:** A reference to this frustum array.
 
 
-The bounding box to test.
+### .intersectsBox( box : Box3 ) : boolean
 
 
-**cameraArray**
+Returns `true` if the given bounding box is intersecting any cached frustum.
 
 
-An object with a cameras property containing an array of cameras.
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
+
+**box**
+
+The bounding box to test.
 
 
 **Returns:** Whether the box is visible in any camera.
 **Returns:** Whether the box is visible in any camera.
 
 
-### .intersectsObject( object : Object3D, cameraArray : Object ) : boolean
+### .intersectsObject( object : Object3D ) : boolean
+
+Returns `true` if the 3D object's bounding sphere is intersecting any cached frustum.
 
 
-Returns `true` if the 3D object's bounding sphere is intersecting any frustum from the camera array.
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
 
 
 **object**
 **object**
 
 
 The 3D object to test.
 The 3D object to test.
 
 
-**cameraArray**
-
-An object with a cameras property containing an array of cameras.
-
 **Returns:** Whether the 3D object is visible in any camera.
 **Returns:** Whether the 3D object is visible in any camera.
 
 
-### .intersectsSphere( sphere : Sphere, cameraArray : Object ) : boolean
+### .intersectsSphere( sphere : Sphere ) : boolean
+
+Returns `true` if the given bounding sphere is intersecting any cached frustum.
 
 
-Returns `true` if the given bounding sphere is intersecting any frustum from the camera array.
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
 
 
 **sphere**
 **sphere**
 
 
 The bounding sphere to test.
 The bounding sphere to test.
 
 
-**cameraArray**
-
-An object with a cameras property containing an array of cameras.
-
 **Returns:** Whether the sphere is visible in any camera.
 **Returns:** Whether the sphere is visible in any camera.
 
 
-### .intersectsSprite( sprite : Sprite, cameraArray : Object ) : boolean
+### .intersectsSprite( sprite : Sprite ) : boolean
 
 
-Returns `true` if the given sprite is intersecting any frustum from the camera array.
+Returns `true` if the given sprite is intersecting any cached frustum.
+
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
 
 
 **sprite**
 **sprite**
 
 
 The sprite to test.
 The sprite to test.
 
 
+**Returns:** Whether the sprite is visible in any camera.
+
+### .setFromArrayCamera( cameraArray : ArrayCamera ) : FrustumArray
+
+Computes and caches a frustum for each camera of the given array camera.
+
 **cameraArray**
 **cameraArray**
 
 
-An object with a cameras property containing an array of cameras.
+The array camera whose sub-cameras define the frustums.
 
 
-**Returns:** Whether the sprite is visible in any camera.
+**Returns:** A reference to this frustum array.
 
 
 ## Source
 ## Source
 
 

+ 4 - 1
docs/pages/GLTFExporter.html

@@ -299,9 +299,12 @@ corresponding texture utils <a href="WebGLTextureUtils.html">WebGLTextureUtils</
 					<strong>animations</strong>
 					<strong>animations</strong>
 						<br>
 						<br>
 <span class="param-type">Array.&lt;<a href="AnimationClip.html">AnimationClip</a>></span>
 <span class="param-type">Array.&lt;<a href="AnimationClip.html">AnimationClip</a>></span>
+|
+<span class="param-type">Array.&lt;Array.&lt;<a href="AnimationClip.html">AnimationClip</a>>></span>
 				</td>
 				</td>
 			<td class="description last">
 			<td class="description last">
-				<p>List of animations to be included in the export.</p>
+				<p>List of animations to be included in the export. When exporting a single 3D object or scene, this is a flat list of clips.
+When exporting an array of multiple scenes, this must be a nested array with one list of clips per scene, matched to the input by index.</p>
 						<p>Default is <code>[]</code>.</p>
 						<p>Default is <code>[]</code>.</p>
 			</td>
 			</td>
 		</tr>
 		</tr>

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

@@ -175,9 +175,9 @@ Restricts the image maximum size (both width and height) to the given value.
 Default is `Infinity`.
 Default is `Infinity`.
 
 
 **animations**  
 **animations**  
-Array.<[AnimationClip](AnimationClip.html)\>
+Array.<[AnimationClip](AnimationClip.html)\> | Array.<Array.<[AnimationClip](AnimationClip.html)\>>
 
 
-List of animations to be included in the export.
+List of animations to be included in the export. When exporting a single 3D object or scene, this is a flat list of clips. When exporting an array of multiple scenes, this must be a nested array with one list of clips per scene, matched to the input by index.
 
 
 Default is `[]`.
 Default is `[]`.
 
 

+ 0 - 209
docs/pages/InstanceNode.html

@@ -1,209 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>InstanceNode - 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">InstanceNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>This node implements the vertex shader logic which is required
-when rendering 3D objects via instancing. The code makes sure
-vertex positions, normals and colors can be modified via instanced
-data.</p></div>
-			</header>
-			<article>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="InstanceNode" translate="no">new <a href="#InstanceNode">InstanceNode</a><span class="signature">( count : <span class="param-type">number</span>, instanceMatrix : <span class="param-type"><a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a> | <a href="StorageInstancedBufferAttribute.html">StorageInstancedBufferAttribute</a></span>, instanceColor : <span class="param-type"><a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a> | <a href="StorageInstancedBufferAttribute.html">StorageInstancedBufferAttribute</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new instance node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">count</strong>
-									</td>
-									<td class="description last">
-										<p>The number of instances.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">instanceMatrix</strong>
-									</td>
-									<td class="description last">
-										<p>Instanced buffer attribute representing the instance transformations.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">instanceColor</strong>
-									</td>
-									<td class="description last">
-										<p>Instanced buffer attribute representing the instance colors.</p>
-										<p>Default is <code>null</code>.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="buffer" translate="no">.<a href="#buffer">buffer</a><span class="type-signature"> : <a href="InstancedInterleavedBuffer.html">InstancedInterleavedBuffer</a></span> </h3>
-					<div class="description">
-						<p>A reference to a buffer that is used by <code>instanceMatrixNode</code>.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="bufferColor" translate="no">.<a href="#bufferColor">bufferColor</a><span class="type-signature"> : <a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a></span> </h3>
-					<div class="description">
-						<p>A reference to a buffer that is used by <code>instanceColorNode</code>.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="count" translate="no">.<a href="#count">count</a><span class="type-signature"> : number</span> </h3>
-					<div class="description">
-						<p>The number of instances.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="instanceColor" translate="no">.<a href="#instanceColor">instanceColor</a><span class="type-signature"> : <a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a></span> </h3>
-					<div class="description">
-						<p>Instanced buffer attribute representing the color of instances.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="instanceColorNode" translate="no">.<a href="#instanceColorNode">instanceColorNode</a><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
-					<div class="description">
-						<p>The node that represents the instance color data.</p>
-						<p>Default is <code>null</code>.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="instanceMatrix" translate="no">.<a href="#instanceMatrix">instanceMatrix</a><span class="type-signature"> : <a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a></span> </h3>
-					<div class="description">
-						<p>Instanced buffer attribute representing the transformation of instances.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="instanceMatrixNode" translate="no">.<a href="#instanceMatrixNode">instanceMatrixNode</a><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
-					<div class="description">
-						<p>The node that represents the instance matrix data.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="isStorageColor" translate="no">.<a href="#isStorageColor">isStorageColor</a><span class="type-signature"> : boolean</span> </h3>
-					<div class="description">
-						<p>Tracks whether the color data is provided via a storage buffer.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="isStorageMatrix" translate="no">.<a href="#isStorageMatrix">isStorageMatrix</a><span class="type-signature"> : boolean</span> </h3>
-					<div class="description">
-						<p>Tracks whether the matrix data is provided via a storage buffer.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="previousInstanceMatrixNode" translate="no">.<a href="#previousInstanceMatrixNode">previousInstanceMatrixNode</a><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
-					<div class="description">
-						<p>The previous instance matrices. Required for computing motion vectors.</p>
-						<p>Default is <code>null</code>.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="updateType" translate="no">.<a href="#updateType">updateType</a><span class="type-signature"> : string</span> </h3>
-					<div class="description">
-						<p>The update type is set to <code>frame</code> since an update
-of instanced buffer data must be checked per frame.</p>
-						<p>Default is <code>'frame'</code>.</p>
-					</div>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#updateType">Node#updateType</a></dt>
-						</dl>
-				</div>
-				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getPreviousInstancedPosition" translate="no">.<a href="#getPreviousInstancedPosition">getPreviousInstancedPosition</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>.&lt;vec3></span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Computes the transformed/instanced vertex position of the previous frame.</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-returns"><strong>Returns:</strong> The instanced position from the previous frame.</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">
-							<p>Setups the internal buffers and nodes and assigns the transformed vertex data
-to predefined node variables for accumulation. That follows the same patterns
-like with morph and skinning nodes.</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#setup">Node#setup</a></dt>
-						</dl>
-					</div>
-					<h3 class="name name-method" id="update" translate="no">.<a href="#update">update</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>Checks if the internal buffers require an update.</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="Node.html#update">Node#update</a></dt>
-						</dl>
-					</div>
-				<h2 class="subsection-title">Source</h2>
-				<p>
-					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/InstanceNode.js" translate="no" target="_blank" rel="noopener">src/nodes/accessors/InstanceNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 115
docs/pages/InstanceNode.html.md

@@ -1,115 +0,0 @@
-*Inheritance: EventDispatcher → Node →*
-
-# InstanceNode
-
-This node implements the vertex shader logic which is required when rendering 3D objects via instancing. The code makes sure vertex positions, normals and colors can be modified via instanced data.
-
-## Constructor
-
-### new InstanceNode( count : number, instanceMatrix : InstancedBufferAttribute | StorageInstancedBufferAttribute, instanceColor : InstancedBufferAttribute | StorageInstancedBufferAttribute )
-
-Constructs a new instance node.
-
-**count**
-
-The number of instances.
-
-**instanceMatrix**
-
-Instanced buffer attribute representing the instance transformations.
-
-**instanceColor**
-
-Instanced buffer attribute representing the instance colors.
-
-Default is `null`.
-
-## Properties
-
-### .buffer : InstancedInterleavedBuffer
-
-A reference to a buffer that is used by `instanceMatrixNode`.
-
-### .bufferColor : InstancedBufferAttribute
-
-A reference to a buffer that is used by `instanceColorNode`.
-
-### .count : number
-
-The number of instances.
-
-### .instanceColor : InstancedBufferAttribute
-
-Instanced buffer attribute representing the color of instances.
-
-### .instanceColorNode : Node
-
-The node that represents the instance color data.
-
-Default is `null`.
-
-### .instanceMatrix : InstancedBufferAttribute
-
-Instanced buffer attribute representing the transformation of instances.
-
-### .instanceMatrixNode : Node
-
-The node that represents the instance matrix data.
-
-### .isStorageColor : boolean
-
-Tracks whether the color data is provided via a storage buffer.
-
-### .isStorageMatrix : boolean
-
-Tracks whether the matrix data is provided via a storage buffer.
-
-### .previousInstanceMatrixNode : Node
-
-The previous instance matrices. Required for computing motion vectors.
-
-Default is `null`.
-
-### .updateType : string
-
-The update type is set to `frame` since an update of instanced buffer data must be checked per frame.
-
-Default is `'frame'`.
-
-**Overrides:** [Node#updateType](Node.html#updateType)
-
-## Methods
-
-### .getPreviousInstancedPosition( builder : NodeBuilder ) : Node.<vec3>
-
-Computes the transformed/instanced vertex position of the previous frame.
-
-**builder**
-
-The current node builder.
-
-**Returns:** The instanced position from the previous frame.
-
-### .setup( builder : NodeBuilder )
-
-Setups the internal buffers and nodes and assigns the transformed vertex data to predefined node variables for accumulation. That follows the same patterns like with morph and skinning nodes.
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [Node#setup](Node.html#setup)
-
-### .update( frame : NodeFrame )
-
-Checks if the internal buffers require an update.
-
-**frame**
-
-The current node frame.
-
-**Overrides:** [Node#update](Node.html#update)
-
-## Source
-
-[src/nodes/accessors/InstanceNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/InstanceNode.js)

+ 0 - 8
docs/pages/InstancedMesh.html

@@ -114,14 +114,6 @@ via <a href="InstancedMesh.html#setMorphAt">InstancedMesh#setMorphAt</a>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
-				<div class="member">
-					<h3 class="name" id="previousInstanceMatrix" translate="no">.<a href="#previousInstanceMatrix">previousInstanceMatrix</a><span class="type-signature"> : <a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a></span> </h3>
-					<div class="description">
-						<p>Represents the local transformation of all instances of the previous frame.
-Required for computing velocity. Maintained in <a href="InstanceNode.html">InstanceNode</a>.</p>
-						<p>Default is <code>null</code>.</p>
-					</div>
-				</div>
 				<h2 class="subsection-title">Methods</h2>
 				<h2 class="subsection-title">Methods</h2>
 					<h3 class="name name-method" id="computeBoundingBox" translate="no">.<a href="#computeBoundingBox">computeBoundingBox</a><span class="signature">()</span> </h3>
 					<h3 class="name name-method" id="computeBoundingBox" translate="no">.<a href="#computeBoundingBox">computeBoundingBox</a><span class="signature">()</span> </h3>
 					<div class="method">
 					<div class="method">

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

@@ -64,12 +64,6 @@ Represents the morph target weights of all instances. You have to set its [Textu
 
 
 Default is `null`.
 Default is `null`.
 
 
-### .previousInstanceMatrix : InstancedBufferAttribute
-
-Represents the local transformation of all instances of the previous frame. Required for computing velocity. Maintained in [InstanceNode](InstanceNode.html).
-
-Default is `null`.
-
 ## Methods
 ## Methods
 
 
 ### .computeBoundingBox()
 ### .computeBoundingBox()

+ 0 - 57
docs/pages/InstancedMeshNode.html

@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>InstancedMeshNode - 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="InstanceNode.html">InstanceNode</a> → </p>
-	<h1 translate="no">InstancedMeshNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>This is a special version of <code>InstanceNode</code> which requires the usage of <a href="InstancedMesh.html">InstancedMesh</a>.
-It allows an easier setup of the instance node.</p></div>
-			</header>
-			<article>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="InstancedMeshNode" translate="no">new <a href="#InstancedMeshNode">InstancedMeshNode</a><span class="signature">( instancedMesh : <span class="param-type"><a href="InstancedMesh.html">InstancedMesh</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new instanced mesh node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">instancedMesh</strong>
-									</td>
-									<td class="description last">
-										<p>The instanced mesh.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="instancedMesh" translate="no">.<a href="#instancedMesh">instancedMesh</a><span class="type-signature"> : <a href="InstancedMesh.html">InstancedMesh</a></span> </h3>
-					<div class="description">
-						<p>A reference to the instanced mesh.</p>
-					</div>
-				</div>
-				<h2 class="subsection-title">Source</h2>
-				<p>
-					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/InstancedMeshNode.js" translate="no" target="_blank" rel="noopener">src/nodes/accessors/InstancedMeshNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 25
docs/pages/InstancedMeshNode.html.md

@@ -1,25 +0,0 @@
-*Inheritance: EventDispatcher → Node → InstanceNode →*
-
-# InstancedMeshNode
-
-This is a special version of `InstanceNode` which requires the usage of [InstancedMesh](InstancedMesh.html). It allows an easier setup of the instance node.
-
-## Constructor
-
-### new InstancedMeshNode( instancedMesh : InstancedMesh )
-
-Constructs a new instanced mesh node.
-
-**instancedMesh**
-
-The instanced mesh.
-
-## Properties
-
-### .instancedMesh : InstancedMesh
-
-A reference to the instanced mesh.
-
-## Source
-
-[src/nodes/accessors/InstancedMeshNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/InstancedMeshNode.js)

+ 2 - 2
docs/pages/KTX2Loader.html

@@ -201,8 +201,8 @@ to the <code>onLoad()</code> callback.</p>
 					<h3 class="name name-method" id="setTranscoderPath" translate="no">.<a href="#setTranscoderPath">setTranscoderPath</a><span class="signature">( path : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="KTX2Loader.html">KTX2Loader</a></span> </h3>
 					<h3 class="name name-method" id="setTranscoderPath" translate="no">.<a href="#setTranscoderPath">setTranscoderPath</a><span class="signature">( path : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="KTX2Loader.html">KTX2Loader</a></span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Sets the transcoder path.</p>
-<p>The WASM transcoder and JS wrapper are available from the <code>examples/jsm/libs/basis</code> directory.</p>
+							<p>Sets the transcoder path to optionally set the decoder load path from a CDN.</p>
+<p>By default The WASM transcoder and JS wrapper are loaded from the <code>examples/jsm/libs/basis</code> directory.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>

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

@@ -115,9 +115,9 @@ Executed when errors occur.
 
 
 ### .setTranscoderPath( path : string ) : KTX2Loader
 ### .setTranscoderPath( path : string ) : KTX2Loader
 
 
-Sets the transcoder path.
+Sets the transcoder path to optionally set the decoder load path from a CDN.
 
 
-The WASM transcoder and JS wrapper are available from the `examples/jsm/libs/basis` directory.
+By default The WASM transcoder and JS wrapper are loaded from the `examples/jsm/libs/basis` directory.
 
 
 **path**
 **path**
 
 

+ 3 - 0
docs/pages/LWOLoader.html

@@ -50,6 +50,9 @@ scene.add( mesh );
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> since r185.</dt>
+						</dl>
 					</div>
 					</div>
 				</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
 				<h2 class="subsection-title">Methods</h2>

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

@@ -38,6 +38,8 @@ Constructs a new LWO loader.
 
 
 The loading manager.
 The loading manager.
 
 
+**Deprecated:** since r185.
+
 ## Methods
 ## Methods
 
 
 ### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )
 ### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )

+ 13 - 1
docs/pages/LightProbeGrid.html

@@ -154,7 +154,10 @@ by <a href="LightProbeGrid.html#bake">LightProbeGrid#bake</a>.</p>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
 							<p>Bakes all probes by rendering cubemaps at each probe position
 							<p>Bakes all probes by rendering cubemaps at each probe position
-and projecting to L2 SH. Fully GPU-resident with zero CPU readback.</p>
+and projecting to L2 SH. Optionally iterates additional passes to
+capture indirect bounces — each extra pass samples the previous pass's
+atlas as indirect light, so a grid added to the scene before baking
+accumulates one bounce per extra pass.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
@@ -209,6 +212,15 @@ and projecting to L2 SH. Fully GPU-resident with zero CPU readback.</p>
 										<p>Default is <code>100</code>.</p>
 										<p>Default is <code>100</code>.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bounces</strong>
+									</td>
+									<td class="description last">
+										<p>Additional bounce passes after the initial direct pass.</p>
+										<p>Default is <code>0</code>.</p>
+									</td>
+								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 									</td>
 									</td>

+ 7 - 1
docs/pages/LightProbeGrid.html.md

@@ -107,7 +107,7 @@ The full width of the volume along X.
 
 
 ### .bake( renderer : WebGLRenderer, scene : Scene, options : Object )
 ### .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.
+Bakes all probes by rendering cubemaps at each probe position and projecting to L2 SH. Optionally iterates additional passes to capture indirect bounces — each extra pass samples the previous pass's atlas as indirect light, so a grid added to the scene before baking accumulates one bounce per extra pass.
 
 
 **renderer**
 **renderer**
 
 
@@ -139,6 +139,12 @@ Far plane for the cube camera.
 
 
 Default is `100`.
 Default is `100`.
 
 
+**bounces**
+
+Additional bounce passes after the initial direct pass.
+
+Default is `0`.
+
 ### .dispose()
 ### .dispose()
 
 
 Frees GPU resources.
 Frees GPU resources.

+ 12 - 1
docs/pages/LightingContextNode.html

@@ -20,7 +20,7 @@ by adding lighting specific context data. It represents the runtime context of
 			<article>
 			<article>
 				<div class="container-overview">
 				<div class="container-overview">
 					<h2>Constructor</h2>
 					<h2>Constructor</h2>
-					<h3 class="name name-method" id="LightingContextNode" translate="no">new <a href="#LightingContextNode">LightingContextNode</a><span class="signature">( lightsNode : <span class="param-type"><a href="LightsNode.html">LightsNode</a></span>, lightingModel : <span class="param-type"><a href="LightingModel.html">LightingModel</a></span>, backdropNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;vec3></span>, backdropAlphaNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span> )</span> </h3>
+					<h3 class="name name-method" id="LightingContextNode" translate="no">new <a href="#LightingContextNode">LightingContextNode</a><span class="signature">( lightsNode : <span class="param-type"><a href="LightsNode.html">LightsNode</a></span>, lightingModel : <span class="param-type"><a href="LightingModel.html">LightingModel</a></span>, materialLightings : <span class="param-type">Array.&lt;<a href="LightingNode.html">LightingNode</a>></span>, backdropNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;vec3></span>, backdropAlphaNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span> )</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
 							<p>Constructs a new lighting context node.</p>
 							<p>Constructs a new lighting context node.</p>
@@ -44,6 +44,14 @@ by adding lighting specific context data. It represents the runtime context of
 										<p>Default is <code>null</code>.</p>
 										<p>Default is <code>null</code>.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">materialLightings</strong>
+									</td>
+									<td class="description last">
+										<p>The material lightings nodes.</p>
+									</td>
+								</tr>
 								<tr>
 								<tr>
 									<td class="name">
 									<td class="name">
 										<strong translate="no">backdropNode</strong>
 										<strong translate="no">backdropNode</strong>
@@ -88,6 +96,9 @@ by adding lighting specific context data. It represents the runtime context of
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
+				<div class="member">
+					<h3 class="name" id="materialLightings" translate="no">.<a href="#materialLightings">materialLightings</a><span class="type-signature"> : Array.&lt;<a href="LightingNode.html">LightingNode</a>></span> </h3>
+				</div>
 				<h2 class="subsection-title">Methods</h2>
 				<h2 class="subsection-title">Methods</h2>
 					<h3 class="name name-method" id="getContext" translate="no">.<a href="#getContext">getContext</a><span class="signature">()</span><span class="type-signature"> : Object</span> </h3>
 					<h3 class="name name-method" id="getContext" translate="no">.<a href="#getContext">getContext</a><span class="signature">()</span><span class="type-signature"> : Object</span> </h3>
 					<div class="method">
 					<div class="method">

+ 7 - 1
docs/pages/LightingContextNode.html.md

@@ -6,7 +6,7 @@
 
 
 ## Constructor
 ## Constructor
 
 
-### new LightingContextNode( lightsNode : LightsNode, lightingModel : LightingModel, backdropNode : Node.<vec3>, backdropAlphaNode : Node.<float> )
+### new LightingContextNode( lightsNode : LightsNode, lightingModel : LightingModel, materialLightings : Array.<LightingNode>, backdropNode : Node.<vec3>, backdropAlphaNode : Node.<float> )
 
 
 Constructs a new lighting context node.
 Constructs a new lighting context node.
 
 
@@ -20,6 +20,10 @@ The current lighting model.
 
 
 Default is `null`.
 Default is `null`.
 
 
+**materialLightings**
+
+The material lightings nodes.
+
 **backdropNode**
 **backdropNode**
 
 
 A backdrop node.
 A backdrop node.
@@ -52,6 +56,8 @@ The current lighting model.
 
 
 Default is `null`.
 Default is `null`.
 
 
+### .materialLightings : Array.<LightingNode>
+
 ## Methods
 ## Methods
 
 
 ### .getContext() : Object
 ### .getContext() : Object

+ 60 - 1
docs/pages/LightsNode.html

@@ -63,6 +63,28 @@ light in a given lighting context.</p></div>
 					</div>
 					</div>
 				</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
 				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="analyze" translate="no">.<a href="#analyze">analyze</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Analyzes the node's dependencies by building all nested light nodes
+and the output node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">builder</strong>
+									</td>
+									<td class="description last">
+										<p>A reference to the current node builder.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#analyze">Node#analyze</a></dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="customCacheKey" translate="no">.<a href="#customCacheKey">customCacheKey</a><span class="signature">()</span><span class="type-signature"> : number</span> </h3>
 					<h3 class="name name-method" id="customCacheKey" translate="no">.<a href="#customCacheKey">customCacheKey</a><span class="signature">()</span><span class="type-signature"> : number</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
@@ -190,6 +212,40 @@ and evaluating the lighting model the outgoing light is computed.</p>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 					</div>
 					</div>
+					<h3 class="name name-method" id="setupDirectRectAreaLight" translate="no">.<a href="#setupDirectRectAreaLight">setupDirectRectAreaLight</a><span class="signature">( builder : <span class="param-type">Object</span>, lightNode : <span class="param-type">Object</span>, lightData : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets up a direct rect area light in the lighting model.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">builder</strong>
+									</td>
+									<td class="description last">
+										<p>The builder object containing the context and stack.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">lightNode</strong>
+									</td>
+									<td class="description last">
+										<p>The light node.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">lightData</strong>
+									</td>
+									<td class="description last">
+										<p>The light object containing color and area light properties.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
 					<h3 class="name name-method" id="setupLights" translate="no">.<a href="#setupLights">setupLights</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, lightNodes : <span class="param-type">Array.&lt;<a href="LightingNode.html">LightingNode</a>></span> )</span> </h3>
 					<h3 class="name name-method" id="setupLights" translate="no">.<a href="#setupLights">setupLights</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, lightNodes : <span class="param-type">Array.&lt;<a href="LightingNode.html">LightingNode</a>></span> )</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
@@ -217,7 +273,7 @@ light nodes.</p>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 					</div>
 					</div>
-					<h3 class="name name-method" id="setupLightsNode" translate="no">.<a href="#setupLightsNode">setupLightsNode</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span> </h3>
+					<h3 class="name name-method" id="setupLightsNode" translate="no">.<a href="#setupLightsNode">setupLightsNode</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="LightingNode.html">LightingNode</a>></span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
 							<p>Creates lighting nodes for each scene light. This makes it possible to further
 							<p>Creates lighting nodes for each scene light. This makes it possible to further
@@ -235,6 +291,9 @@ process lights in the node system.</p>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The array of lighting nodes.</dt>
+						</dl>
 					</div>
 					</div>
 				<h2 class="subsection-title">Source</h2>
 				<h2 class="subsection-title">Source</h2>
 				<p>
 				<p>

+ 29 - 1
docs/pages/LightsNode.html.md

@@ -38,6 +38,16 @@ A node representing the total specular light.
 
 
 ## Methods
 ## Methods
 
 
+### .analyze( builder : NodeBuilder )
+
+Analyzes the node's dependencies by building all nested light nodes and the output node.
+
+**builder**
+
+A reference to the current node builder.
+
+**Overrides:** [Node#analyze](Node.html#analyze)
+
 ### .customCacheKey() : number
 ### .customCacheKey() : number
 
 
 Overwrites the default [Node#customCacheKey](Node.html#customCacheKey) implementation by including light data into the cache key.
 Overwrites the default [Node#customCacheKey](Node.html#customCacheKey) implementation by including light data into the cache key.
@@ -102,6 +112,22 @@ The light node.
 
 
 The light object containing color and direction properties.
 The light object containing color and direction properties.
 
 
+### .setupDirectRectAreaLight( builder : Object, lightNode : Object, lightData : Object )
+
+Sets up a direct rect area light in the lighting model.
+
+**builder**
+
+The builder object containing the context and stack.
+
+**lightNode**
+
+The light node.
+
+**lightData**
+
+The light object containing color and area light properties.
+
 ### .setupLights( builder : NodeBuilder, lightNodes : Array.<LightingNode> )
 ### .setupLights( builder : NodeBuilder, lightNodes : Array.<LightingNode> )
 
 
 Setups the internal lights by building all respective light nodes.
 Setups the internal lights by building all respective light nodes.
@@ -114,7 +140,7 @@ A reference to the current node builder.
 
 
 An array of lighting nodes.
 An array of lighting nodes.
 
 
-### .setupLightsNode( builder : NodeBuilder )
+### .setupLightsNode( builder : NodeBuilder ) : Array.<LightingNode>
 
 
 Creates lighting nodes for each scene light. This makes it possible to further process lights in the node system.
 Creates lighting nodes for each scene light. This makes it possible to further process lights in the node system.
 
 
@@ -122,6 +148,8 @@ Creates lighting nodes for each scene light. This makes it possible to further p
 
 
 A reference to the current node builder.
 A reference to the current node builder.
 
 
+**Returns:** The array of lighting nodes.
+
 ## Source
 ## Source
 
 
 [src/nodes/lighting/LightsNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/LightsNode.js)
 [src/nodes/lighting/LightsNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/LightsNode.js)

+ 16 - 12
docs/pages/Line2NodeMaterial.html

@@ -107,8 +107,10 @@ is not supported, yet.</p>
 					<h3 class="name" id="lineColorNode" translate="no">.<a href="#lineColorNode">lineColorNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
 					<h3 class="name" id="lineColorNode" translate="no">.<a href="#lineColorNode">lineColorNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>Defines the lines color.</p>
 						<p>Defines the lines color.</p>
-						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> since r185. Use <a href="NodeMaterial.html#colorNode">NodeMaterial#colorNode</a> instead.</dt>
+						</dl>
 				</div>
 				</div>
 				<div class="member">
 				<div class="member">
 					<h3 class="name" id="offsetNode" translate="no">.<a href="#offsetNode">offsetNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
 					<h3 class="name" id="offsetNode" translate="no">.<a href="#offsetNode">offsetNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
@@ -136,34 +138,33 @@ When set to <code>false</code> the unit is pixel.</p>
 					</div>
 					</div>
 				</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
 				<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>
+					<h3 class="name name-method" id="setupDiffuseColor" translate="no">.<a href="#setupDiffuseColor">setupDiffuseColor</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Copies the properties of the given material to this instance.</p>
+							<p>Setups the diffuse color of the line material in the fragment stage.
+Overrides the base setup to incorporate line/dash rendering and blending.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
 								<tr>
 								<tr>
 									<td class="name">
 									<td class="name">
-										<strong translate="no">source</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									</td>
 									<td class="description last">
 									<td class="description last">
-										<p>The material to copy.</p>
+										<p>The current node builder.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<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>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="NodeMaterial.html#setupDiffuseColor">NodeMaterial#setupDiffuseColor</a></dt>
 						</dl>
 						</dl>
 					</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> </h3>
+					<h3 class="name name-method" id="setupModelViewProjection" translate="no">.<a href="#setupModelViewProjection">setupModelViewProjection</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>.&lt;vec4></span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Setups the vertex and fragment stage of this node material.</p>
+							<p>Setups the position in clip space for the vertex stage of the fat line.
+Overrides the default model-view-projection to return the expanded fat line vertex coordinates.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
@@ -178,7 +179,10 @@ When set to <code>false</code> the unit is pixel.</p>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="NodeMaterial.html#setup">NodeMaterial#setup</a></dt>
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="NodeMaterial.html#setupModelViewProjection">NodeMaterial#setupModelViewProjection</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The position of the fat line vertex in clip space.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
 				<h2 class="subsection-title">Source</h2>
 				<h2 class="subsection-title">Source</h2>

+ 11 - 11
docs/pages/Line2NodeMaterial.html.md

@@ -74,7 +74,7 @@ Default is `true`.
 
 
 Defines the lines color.
 Defines the lines color.
 
 
-Default is `null`.
+**Deprecated:** since r185. Use [NodeMaterial#colorNode](NodeMaterial.html#colorNode) instead.
 
 
 ### .offsetNode : Node.<float>
 ### .offsetNode : Node.<float>
 
 
@@ -98,27 +98,27 @@ Default is `false`.
 
 
 ## Methods
 ## Methods
 
 
-### .copy( source : Line2NodeMaterial ) : Line2NodeMaterial
-
-Copies the properties of the given material to this instance.
+### .setupDiffuseColor( builder : NodeBuilder )
 
 
-**source**
+Setups the diffuse color of the line material in the fragment stage. Overrides the base setup to incorporate line/dash rendering and blending.
 
 
-The material to copy.
+**builder**
 
 
-**Overrides:** [NodeMaterial#copy](NodeMaterial.html#copy)
+The current node builder.
 
 
-**Returns:** A reference to this material.
+**Overrides:** [NodeMaterial#setupDiffuseColor](NodeMaterial.html#setupDiffuseColor)
 
 
-### .setup( builder : NodeBuilder )
+### .setupModelViewProjection( builder : NodeBuilder ) : Node.<vec4>
 
 
-Setups the vertex and fragment stage of this node material.
+Setups the position in clip space for the vertex stage of the fat line. Overrides the default model-view-projection to return the expanded fat line vertex coordinates.
 
 
 **builder**
 **builder**
 
 
 The current node builder.
 The current node builder.
 
 
-**Overrides:** [NodeMaterial#setup](NodeMaterial.html#setup)
+**Overrides:** [NodeMaterial#setupModelViewProjection](NodeMaterial.html#setupModelViewProjection)
+
+**Returns:** The position of the fat line vertex in clip space.
 
 
 ## Source
 ## Source
 
 

+ 3 - 0
docs/pages/LineBasicMaterial.html

@@ -98,6 +98,9 @@ width of one pixel.</p>
 					<div class="description">
 					<div class="description">
 						<p>Sets the color of the lines using data from a texture. The texture map
 						<p>Sets the color of the lines using data from a texture. The texture map
 color is modulated by the diffuse <code>color</code>.</p>
 color is modulated by the diffuse <code>color</code>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

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

@@ -70,6 +70,8 @@ Default is `1`.
 
 
 Sets the color of the lines using data from a texture. The texture map color is modulated by the diffuse `color`.
 Sets the color of the lines using data from a texture. The texture map color is modulated by the diffuse `color`.
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ## Source
 ## Source

+ 132 - 0
docs/pages/LoftGeometry.html

@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>LoftGeometry - 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="BufferGeometry.html">BufferGeometry</a> → </p>
+	<h1 translate="no">LoftGeometry</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>This class can be used to generate a geometry by lofting (skinning) a surface
+through a series of cross sections. Each section is an array of points in 3D
+space and all sections must have the same number of points.</p>
+<p><code>LoftGeometry</code> is the general case of geometries like <a href="LatheGeometry.html">LatheGeometry</a>
+(which revolves a fixed profile around an axis) or <a href="TubeGeometry.html">TubeGeometry</a>
+(which sweeps a circular section along a path): the sections can have any
+shape, and can change shape, size, position and orientation from one
+section to the next.</p>
+<p>Sections wind around the loft so the resulting face normals point outwards
+when each section is ordered counterclockwise as seen from the end of the
+loft, looking back towards the start. If the surface appears inside out,
+reverse the point order of each section.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const sections = [];
+for ( let i = 0; i &lt;= 10; i ++ ) {
+	const points = [];
+	const radius = 2 + Math.sin( i * 0.8 );
+	for ( let j = 0; j &lt; 32; j ++ ) {
+		const angle = j / 32 * Math.PI * 2;
+		points.push( new THREE.Vector3( Math.sin( angle ) * radius, i, Math.cos( angle ) * radius ) );
+	}
+	sections.push( points );
+}
+const geometry = new LoftGeometry( sections, { capStart: true, capEnd: true } );
+const material = new THREE.MeshStandardMaterial( { color: 0x00ff00 } );
+const mesh = new THREE.Mesh( geometry, material );
+scene.add( mesh );
+</code></pre></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">LoftGeometry</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 { LoftGeometry } from 'three/addons/geometries/LoftGeometry.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="LoftGeometry" translate="no">new <a href="#LoftGeometry">LoftGeometry</a><span class="signature">( sections : <span class="param-type">Array.&lt;Array.&lt;<a href="Vector3.html">Vector3</a>>></span>, options : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new loft geometry.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">sections</strong>
+									</td>
+									<td class="description last">
+										<p>The cross sections to skin. At least
+two sections are required and all sections must have the same number of points.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>The loft options.</p>
+										<p>Default is <code>{}</code>.</p>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">closed</strong>
+									</td>
+									<td class="description last">
+										<p>Whether each section is treated as a
+closed ring (e.g. a fuselage) or an open strip (e.g. a ribbon).</p>
+										<p>Default is <code>true</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">capStart</strong>
+									</td>
+									<td class="description last">
+										<p>Whether the first section is closed
+with a cap or not.</p>
+										<p>Default is <code>false</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">capEnd</strong>
+									</td>
+									<td class="description last">
+										<p>Whether the last section is closed
+with a cap or not.</p>
+										<p>Default is <code>false</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="parameters" translate="no">.<a href="#parameters">parameters</a><span class="type-signature"> : Object</span> </h3>
+					<div class="description">
+						<p>Holds the constructor parameters that have been
+used to generate the geometry. Any modification
+after instantiation does not change the geometry.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/geometries/LoftGeometry.js" translate="no" target="_blank" rel="noopener">examples/jsm/geometries/LoftGeometry.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 80 - 0
docs/pages/LoftGeometry.html.md

@@ -0,0 +1,80 @@
+*Inheritance: EventDispatcher → BufferGeometry →*
+
+# LoftGeometry
+
+This class can be used to generate a geometry by lofting (skinning) a surface through a series of cross sections. Each section is an array of points in 3D space and all sections must have the same number of points.
+
+`LoftGeometry` is the general case of geometries like [LatheGeometry](LatheGeometry.html) (which revolves a fixed profile around an axis) or [TubeGeometry](TubeGeometry.html) (which sweeps a circular section along a path): the sections can have any shape, and can change shape, size, position and orientation from one section to the next.
+
+Sections wind around the loft so the resulting face normals point outwards when each section is ordered counterclockwise as seen from the end of the loft, looking back towards the start. If the surface appears inside out, reverse the point order of each section.
+
+## Code Example
+
+```js
+const sections = [];
+for ( let i = 0; i <= 10; i ++ ) {
+	const points = [];
+	const radius = 2 + Math.sin( i * 0.8 );
+	for ( let j = 0; j < 32; j ++ ) {
+		const angle = j / 32 * Math.PI * 2;
+		points.push( new THREE.Vector3( Math.sin( angle ) * radius, i, Math.cos( angle ) * radius ) );
+	}
+	sections.push( points );
+}
+const geometry = new LoftGeometry( sections, { capStart: true, capEnd: true } );
+const material = new THREE.MeshStandardMaterial( { color: 0x00ff00 } );
+const mesh = new THREE.Mesh( geometry, material );
+scene.add( mesh );
+```
+
+## Import
+
+LoftGeometry is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { LoftGeometry } from 'three/addons/geometries/LoftGeometry.js';
+```
+
+## Constructor
+
+### new LoftGeometry( sections : Array.<Array.<Vector3>>, options : Object )
+
+Constructs a new loft geometry.
+
+**sections**
+
+The cross sections to skin. At least two sections are required and all sections must have the same number of points.
+
+**options**
+
+The loft options.
+
+Default is `{}`.
+
+**closed**
+
+Whether each section is treated as a closed ring (e.g. a fuselage) or an open strip (e.g. a ribbon).
+
+Default is `true`.
+
+**capStart**
+
+Whether the first section is closed with a cap or not.
+
+Default is `false`.
+
+**capEnd**
+
+Whether the last section is closed with a cap or not.
+
+Default is `false`.
+
+## Properties
+
+### .parameters : Object
+
+Holds the constructor parameters that have been used to generate the geometry. Any modification after instantiation does not change the geometry.
+
+## Source
+
+[examples/jsm/geometries/LoftGeometry.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/geometries/LoftGeometry.js)

+ 29 - 0
docs/pages/Material.html

@@ -482,6 +482,35 @@ method whenever this instance is no longer used in your app.</p>
 							<li><a href="Material.html#event:dispose">Material#event:dispose</a></li>
 							<li><a href="Material.html#event:dispose">Material#event:dispose</a></li>
 						</ul>
 						</ul>
 					</div>
 					</div>
+					<h3 class="name name-method" id="fromJSON" translate="no">.<a href="#fromJSON">fromJSON</a><span class="signature">( json : <span class="param-type">Object</span>, textures : <span class="param-type">Object.&lt;string, <a href="Texture.html">Texture</a>></span> )</span><span class="type-signature"> : <a href="Material.html">Material</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Deserializes the material from the given JSON.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">json</strong>
+									</td>
+									<td class="description last">
+										<p>The JSON holding the serialized material.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">textures</strong>
+									</td>
+									<td class="description last">
+										<p>A dictionary holding textures referenced by the material.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this material.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="onBeforeCompile" translate="no">.<a href="#onBeforeCompile">onBeforeCompile</a><span class="signature">( shaderobject : <span class="param-type">Object</span>, renderer : <span class="param-type"><a href="WebGLRenderer.html">WebGLRenderer</a></span> )</span> </h3>
 					<h3 class="name name-method" id="onBeforeCompile" translate="no">.<a href="#onBeforeCompile">onBeforeCompile</a><span class="signature">( shaderobject : <span class="param-type">Object</span>, renderer : <span class="param-type"><a href="WebGLRenderer.html">WebGLRenderer</a></span> )</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">

+ 14 - 0
docs/pages/Material.html.md

@@ -364,6 +364,20 @@ Frees the GPU-related resources allocated by this instance. Call this method whe
 
 
 *   [Material#event:dispose](Material.html#event:dispose)
 *   [Material#event:dispose](Material.html#event:dispose)
 
 
+### .fromJSON( json : Object, textures : Object.<string, Texture> ) : Material
+
+Deserializes the material from the given JSON.
+
+**json**
+
+The JSON holding the serialized material.
+
+**textures**
+
+A dictionary holding textures referenced by the material.
+
+**Returns:** A reference to this material.
+
 ### .onBeforeCompile( shaderobject : Object, renderer : WebGLRenderer )
 ### .onBeforeCompile( shaderobject : Object, renderer : WebGLRenderer )
 
 
 An optional callback that is executed immediately before the shader program is compiled. This function is called with the shader source code as a parameter. Useful for the modification of built-in materials.
 An optional callback that is executed immediately before the shader program is compiled. This function is called with the shader source code as a parameter. Useful for the modification of built-in materials.

+ 27 - 0
docs/pages/MaterialLoader.html

@@ -185,6 +185,33 @@ to be injected before the loading process starts.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The new material.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> The new material.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
+					<h3 class="name name-method" id=".registerMaterial" translate="no">.<a href="#.registerMaterial">registerMaterial</a><span class="signature">( type : <span class="param-type">string</span>, materialClass : <span class="param-type">Material.constructor</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Registers the given material at the internal
+material library.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">type</strong>
+									</td>
+									<td class="description last">
+										<p>The material type.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">materialClass</strong>
+									</td>
+									<td class="description last">
+										<p>The material class.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
 				<h2 class="subsection-title">Source</h2>
 				<h2 class="subsection-title">Source</h2>
 				<p>
 				<p>
 					<a href="https://github.com/mrdoob/three.js/blob/master/src/loaders/MaterialLoader.js" translate="no" target="_blank" rel="noopener">src/loaders/MaterialLoader.js</a>
 					<a href="https://github.com/mrdoob/three.js/blob/master/src/loaders/MaterialLoader.js" translate="no" target="_blank" rel="noopener">src/loaders/MaterialLoader.js</a>

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

@@ -97,6 +97,18 @@ The material type.
 
 
 **Returns:** The new material.
 **Returns:** The new material.
 
 
+### .registerMaterial( type : string, materialClass : Material.constructor )
+
+Registers the given material at the internal material library.
+
+**type**
+
+The material type.
+
+**materialClass**
+
+The material class.
+
 ## Source
 ## Source
 
 
 [src/loaders/MaterialLoader.js](https://github.com/mrdoob/three.js/blob/master/src/loaders/MaterialLoader.js)
 [src/loaders/MaterialLoader.js](https://github.com/mrdoob/three.js/blob/master/src/loaders/MaterialLoader.js)

+ 9 - 0
docs/pages/Matrix3.html

@@ -489,6 +489,9 @@ in this matrix.</p>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Yes</dt>
+						</dl>
 						<dl class="details">
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this matrix.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this matrix.</dt>
 						</dl>
 						</dl>
@@ -518,6 +521,9 @@ in this matrix.</p>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Yes</dt>
+						</dl>
 						<dl class="details">
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this matrix.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this matrix.</dt>
 						</dl>
 						</dl>
@@ -755,6 +761,9 @@ the method returns a new instance.</p>
 								</tr>
 								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Yes</dt>
+						</dl>
 						<dl class="details">
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this matrix.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this matrix.</dt>
 						</dl>
 						</dl>

+ 6 - 0
docs/pages/Matrix3.html.md

@@ -251,6 +251,8 @@ Rotates this matrix by the given angle.
 
 
 The rotation in radians.
 The rotation in radians.
 
 
+**Deprecated:** Yes
+
 **Returns:** A reference to this matrix.
 **Returns:** A reference to this matrix.
 
 
 ### .scale( sx : number, sy : number ) : Matrix3
 ### .scale( sx : number, sy : number ) : Matrix3
@@ -265,6 +267,8 @@ The amount to scale in the X axis.
 
 
 The amount to scale in the Y axis.
 The amount to scale in the Y axis.
 
 
+**Deprecated:** Yes
+
 **Returns:** A reference to this matrix.
 **Returns:** A reference to this matrix.
 
 
 ### .set( n11 : number, n12 : number, n13 : number, n21 : number, n22 : number, n23 : number, n31 : number, n32 : number, n33 : number ) : Matrix3
 ### .set( n11 : number, n12 : number, n13 : number, n21 : number, n22 : number, n23 : number, n31 : number, n32 : number, n33 : number ) : Matrix3
@@ -383,6 +387,8 @@ The amount to translate in the X axis.
 
 
 The amount to translate in the Y axis.
 The amount to translate in the Y axis.
 
 
+**Deprecated:** Yes
+
 **Returns:** A reference to this matrix.
 **Returns:** A reference to this matrix.
 
 
 ### .transpose() : Matrix3
 ### .transpose() : Matrix3

+ 13 - 0
docs/pages/Matrix4.html

@@ -336,6 +336,19 @@ may not be decomposable, and this method may not be appropriate.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The determinant.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> The determinant.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
+					<h3 class="name name-method" id="determinantAffine" translate="no">.<a href="#determinantAffine">determinantAffine</a><span class="signature">()</span><span class="type-signature"> : number</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Computes and returns the determinant of the 4x4 matrix, but assumes the
+matrix is affine, saving some computations.</p>
+<p>For affine matrices (like an object's world matrix), this value equals the
+full 4x4 <a href="Matrix4.html#determinant">Matrix4#determinant</a> but is cheaper to compute.</p>
+<p>Assumes the bottom row is [0, 0, 0, 1].</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The determinant of the matrix.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="equals" translate="no">.<a href="#equals">equals</a><span class="signature">( matrix : <span class="param-type"><a href="Matrix4.html">Matrix4</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<h3 class="name name-method" id="equals" translate="no">.<a href="#equals">equals</a><span class="signature">( matrix : <span class="param-type"><a href="Matrix4.html">Matrix4</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">

+ 10 - 0
docs/pages/Matrix4.html.md

@@ -179,6 +179,16 @@ Based on the method outlined [here](http://www.euclideanspace.com/maths/algebra/
 
 
 **Returns:** The determinant.
 **Returns:** The determinant.
 
 
+### .determinantAffine() : number
+
+Computes and returns the determinant of the 4x4 matrix, but assumes the matrix is affine, saving some computations.
+
+For affine matrices (like an object's world matrix), this value equals the full 4x4 [Matrix4#determinant](Matrix4.html#determinant) but is cheaper to compute.
+
+Assumes the bottom row is \[0, 0, 0, 1\].
+
+**Returns:** The determinant of the matrix.
+
 ### .equals( matrix : Matrix4 ) : boolean
 ### .equals( matrix : Matrix4 ) : boolean
 
 
 Returns `true` if this matrix is equal with the given one.
 Returns `true` if this matrix is equal with the given one.

+ 18 - 0
docs/pages/MeshBasicMaterial.html

@@ -54,6 +54,8 @@ exists. For RGB and RGBA textures, the renderer will use the green channel
 when sampling this texture due to the extra bit of precision provided for
 when sampling this texture due to the extra bit of precision provided for
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 luminance/alpha textures will also still work as expected.</p>
 luminance/alpha textures will also still work as expected.</p>
+<p><code>alphaMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -62,6 +64,8 @@ luminance/alpha textures will also still work as expected.</p>
 					<div class="description">
 					<div class="description">
 						<p>The red channel of this texture is used as the ambient occlusion map.
 						<p>The red channel of this texture is used as the ambient occlusion map.
 Requires a second set of UVs.</p>
 Requires a second set of UVs.</p>
+<p><code>aoMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -94,6 +98,10 @@ blend between the two colors.</p>
 					<h3 class="name" id="envMap" translate="no">.<a href="#envMap">envMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="envMap" translate="no">.<a href="#envMap">envMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The environment map.</p>
 						<p>The environment map.</p>
+<p><code>envMap</code> represents luminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>envMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -122,6 +130,10 @@ blend between the two colors.</p>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The light map. Requires a second set of UVs.</p>
 						<p>The light map. Requires a second set of UVs.</p>
+<p><code>lightMap</code> represents pre-baked illuminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>lightMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -138,6 +150,9 @@ blend between the two colors.</p>
 						<p>The color map. May optionally include an alpha channel, typically combined
 						<p>The color map. May optionally include an alpha channel, typically combined
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 color is modulated by the diffuse <code>color</code>.</p>
 color is modulated by the diffuse <code>color</code>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -163,6 +178,9 @@ The refraction ratio should not exceed <code>1</code>.</p>
 					<h3 class="name" id="specularMap" translate="no">.<a href="#specularMap">specularMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="specularMap" translate="no">.<a href="#specularMap">specularMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>Specular map used by the material.</p>
 						<p>Specular map used by the material.</p>
+<p><code>specularMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>specularMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

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

@@ -24,12 +24,16 @@ The alpha map is a grayscale texture that controls the opacity across the surfac
 
 
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 
 
+`alphaMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMap : Texture
 ### .aoMap : Texture
 
 
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 
 
+`aoMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMapIntensity : number
 ### .aoMapIntensity : number
@@ -56,6 +60,8 @@ Default is `MultiplyOperation`.
 
 
 The environment map.
 The environment map.
 
 
+`envMap` represents luminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `envMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .envMapRotation : Euler
 ### .envMapRotation : Euler
@@ -80,6 +86,8 @@ Default is `true`.
 
 
 The light map. Requires a second set of UVs.
 The light map. Requires a second set of UVs.
 
 
+`lightMap` represents pre-baked illuminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `lightMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .lightMapIntensity : number
 ### .lightMapIntensity : number
@@ -92,6 +100,8 @@ Default is `1`.
 
 
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .reflectivity : number
 ### .reflectivity : number
@@ -110,6 +120,8 @@ Default is `0.98`.
 
 
 Specular map used by the material.
 Specular map used by the material.
 
 
+`specularMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `specularMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .wireframe : boolean
 ### .wireframe : boolean

+ 7 - 0
docs/pages/MeshDepthMaterial.html

@@ -54,6 +54,8 @@ exists. For RGB and RGBA textures, the renderer will use the green channel
 when sampling this texture due to the extra bit of precision provided for
 when sampling this texture due to the extra bit of precision provided for
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 luminance/alpha textures will also still work as expected.</p>
 luminance/alpha textures will also still work as expected.</p>
+<p><code>alphaMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -82,6 +84,8 @@ displaced vertices can cast shadows, block other objects, and otherwise
 act as real geometry. The displacement texture is an image where the value
 act as real geometry. The displacement texture is an image where the value
 of each pixel (white being the highest) is mapped against, and
 of each pixel (white being the highest) is mapped against, and
 repositions, the vertices of the mesh.</p>
 repositions, the vertices of the mesh.</p>
+<p><code>displacementMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -106,6 +110,9 @@ map set, this value is not applied.</p>
 					<div class="description">
 					<div class="description">
 						<p>The color map. May optionally include an alpha channel, typically combined
 						<p>The color map. May optionally include an alpha channel, typically combined
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>.</p>
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

+ 6 - 0
docs/pages/MeshDepthMaterial.html.md

@@ -22,6 +22,8 @@ The alpha map is a grayscale texture that controls the opacity across the surfac
 
 
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 
 
+`alphaMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .depthPacking : BasicDepthPacking | RGBADepthPacking | RGBDepthPacking | RGDepthPacking
 ### .depthPacking : BasicDepthPacking | RGBADepthPacking | RGBDepthPacking | RGDepthPacking
@@ -40,6 +42,8 @@ Default is `0`.
 
 
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh.
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh.
 
 
+`displacementMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .displacementScale : number
 ### .displacementScale : number
@@ -58,6 +62,8 @@ Default is `true`.
 
 
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest).
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest).
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .wireframe : boolean
 ### .wireframe : boolean

+ 7 - 0
docs/pages/MeshDistanceMaterial.html

@@ -57,6 +57,8 @@ exists. For RGB and RGBA textures, the renderer will use the green channel
 when sampling this texture due to the extra bit of precision provided for
 when sampling this texture due to the extra bit of precision provided for
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 luminance/alpha textures will also still work as expected.</p>
 luminance/alpha textures will also still work as expected.</p>
+<p><code>alphaMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -78,6 +80,8 @@ displaced vertices can cast shadows, block other objects, and otherwise
 act as real geometry. The displacement texture is an image where the value
 act as real geometry. The displacement texture is an image where the value
 of each pixel (white being the highest) is mapped against, and
 of each pixel (white being the highest) is mapped against, and
 repositions, the vertices of the mesh.</p>
 repositions, the vertices of the mesh.</p>
+<p><code>displacementMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -102,6 +106,9 @@ map set, this value is not applied.</p>
 					<div class="description">
 					<div class="description">
 						<p>The color map. May optionally include an alpha channel, typically combined
 						<p>The color map. May optionally include an alpha channel, typically combined
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>.</p>
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

+ 6 - 0
docs/pages/MeshDistanceMaterial.html.md

@@ -24,6 +24,8 @@ The alpha map is a grayscale texture that controls the opacity across the surfac
 
 
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 
 
+`alphaMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .displacementBias : number
 ### .displacementBias : number
@@ -36,6 +38,8 @@ Default is `0`.
 
 
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh.
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh.
 
 
+`displacementMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .displacementScale : number
 ### .displacementScale : number
@@ -54,6 +58,8 @@ Default is `true`.
 
 
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest).
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest).
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ## Source
 ## Source

+ 27 - 0
docs/pages/MeshLambertMaterial.html

@@ -62,6 +62,8 @@ exists. For RGB and RGBA textures, the renderer will use the green channel
 when sampling this texture due to the extra bit of precision provided for
 when sampling this texture due to the extra bit of precision provided for
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 luminance/alpha textures will also still work as expected.</p>
 luminance/alpha textures will also still work as expected.</p>
+<p><code>alphaMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -70,6 +72,8 @@ luminance/alpha textures will also still work as expected.</p>
 					<div class="description">
 					<div class="description">
 						<p>The red channel of this texture is used as the ambient occlusion map.
 						<p>The red channel of this texture is used as the ambient occlusion map.
 Requires a second set of UVs.</p>
 Requires a second set of UVs.</p>
+<p><code>aoMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -89,6 +93,8 @@ red channel is also <code>1</code>, ambient light is fully occluded on a surface
 perceived depth in relation to the lights. Bump doesn't actually affect
 perceived depth in relation to the lights. Bump doesn't actually affect
 the geometry of the object, only the lighting. If a normal map is defined
 the geometry of the object, only the lighting. If a normal map is defined
 this will be ignored.</p>
 this will be ignored.</p>
+<p><code>bumpMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -135,6 +141,8 @@ of each pixel (white being the highest) is mapped against, and
 repositions, the vertices of the mesh. For best results, pair a
 repositions, the vertices of the mesh. For best results, pair a
 displacement map with a matching normal map, since the renderer can
 displacement map with a matching normal map, since the renderer can
 not recompute surface normals from the displaced vertices.</p>
 not recompute surface normals from the displaced vertices.</p>
+<p><code>displacementMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -168,6 +176,9 @@ unaffected by other lighting.</p>
 						<p>Set emissive (glow) map. The emissive map color is modulated by the
 						<p>Set emissive (glow) map. The emissive map color is modulated by the
 emissive color and the emissive intensity. If you have an emissive map,
 emissive color and the emissive intensity. If you have an emissive map,
 be sure to set the emissive color to something other than black.</p>
 be sure to set the emissive color to something other than black.</p>
+<p><code>emissiveMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>emissiveMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -175,6 +186,10 @@ be sure to set the emissive color to something other than black.</p>
 					<h3 class="name" id="envMap" translate="no">.<a href="#envMap">envMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="envMap" translate="no">.<a href="#envMap">envMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The environment map.</p>
 						<p>The environment map.</p>
+<p><code>envMap</code> represents luminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>envMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -217,6 +232,10 @@ be sure to set the emissive color to something other than black.</p>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The light map. Requires a second set of UVs.</p>
 						<p>The light map. Requires a second set of UVs.</p>
+<p><code>lightMap</code> represents pre-baked illuminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>lightMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -233,6 +252,9 @@ be sure to set the emissive color to something other than black.</p>
 						<p>The color map. May optionally include an alpha channel, typically combined
 						<p>The color map. May optionally include an alpha channel, typically combined
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 color is modulated by the diffuse <code>color</code>.</p>
 color is modulated by the diffuse <code>color</code>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -245,6 +267,8 @@ maps do not change the actual shape of the surface, only the lighting. In
 case the material has a normal map authored using the left handed
 case the material has a normal map authored using the left handed
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 for the different handedness.</p>
 for the different handedness.</p>
+<p><code>normalMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -284,6 +308,9 @@ The refraction ratio should not exceed <code>1</code>.</p>
 					<h3 class="name" id="specularMap" translate="no">.<a href="#specularMap">specularMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="specularMap" translate="no">.<a href="#specularMap">specularMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>Specular map used by the material.</p>
 						<p>Specular map used by the material.</p>
+<p><code>specularMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>specularMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

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

@@ -26,12 +26,16 @@ The alpha map is a grayscale texture that controls the opacity across the surfac
 
 
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 
 
+`alphaMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMap : Texture
 ### .aoMap : Texture
 
 
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 
 
+`aoMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMapIntensity : number
 ### .aoMapIntensity : number
@@ -44,6 +48,8 @@ Default is `1`.
 
 
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 
 
+`bumpMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .bumpScale : number
 ### .bumpScale : number
@@ -76,6 +82,8 @@ Default is `0`.
 
 
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 
 
+`displacementMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .displacementScale : number
 ### .displacementScale : number
@@ -100,12 +108,16 @@ Default is `1`.
 
 
 Set emissive (glow) map. The emissive map color is modulated by the emissive color and the emissive intensity. If you have an emissive map, be sure to set the emissive color to something other than black.
 Set emissive (glow) map. The emissive map color is modulated by the emissive color and the emissive intensity. If you have an emissive map, be sure to set the emissive color to something other than black.
 
 
+`emissiveMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `emissiveMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .envMap : Texture
 ### .envMap : Texture
 
 
 The environment map.
 The environment map.
 
 
+`envMap` represents luminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `envMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .envMapIntensity : number
 ### .envMapIntensity : number
@@ -142,6 +154,8 @@ Default is `true`.
 
 
 The light map. Requires a second set of UVs.
 The light map. Requires a second set of UVs.
 
 
+`lightMap` represents pre-baked illuminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `lightMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .lightMapIntensity : number
 ### .lightMapIntensity : number
@@ -154,12 +168,16 @@ Default is `1`.
 
 
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMap : Texture
 ### .normalMap : Texture
 
 
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 
 
+`normalMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
@@ -190,6 +208,8 @@ Default is `0.98`.
 
 
 Specular map used by the material.
 Specular map used by the material.
 
 
+`specularMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `specularMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .wireframe : boolean
 ### .wireframe : boolean

+ 16 - 0
docs/pages/MeshMatcapMaterial.html

@@ -58,6 +58,8 @@ exists. For RGB and RGBA textures, the renderer will use the green channel
 when sampling this texture due to the extra bit of precision provided for
 when sampling this texture due to the extra bit of precision provided for
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 luminance/alpha textures will also still work as expected.</p>
 luminance/alpha textures will also still work as expected.</p>
+<p><code>alphaMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -68,6 +70,8 @@ luminance/alpha textures will also still work as expected.</p>
 perceived depth in relation to the lights. Bump doesn't actually affect
 perceived depth in relation to the lights. Bump doesn't actually affect
 the geometry of the object, only the lighting. If a normal map is defined
 the geometry of the object, only the lighting. If a normal map is defined
 this will be ignored.</p>
 this will be ignored.</p>
+<p><code>bumpMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -105,6 +109,8 @@ of each pixel (white being the highest) is mapped against, and
 repositions, the vertices of the mesh. For best results, pair a
 repositions, the vertices of the mesh. For best results, pair a
 displacement map with a matching normal map, since the renderer can
 displacement map with a matching normal map, since the renderer can
 not recompute surface normals from the displaced vertices.</p>
 not recompute surface normals from the displaced vertices.</p>
+<p><code>displacementMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -144,6 +150,9 @@ map set, this value is not applied.</p>
 						<p>The color map. May optionally include an alpha channel, typically combined
 						<p>The color map. May optionally include an alpha channel, typically combined
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 color is modulated by the diffuse <code>color</code>.</p>
 color is modulated by the diffuse <code>color</code>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -151,6 +160,11 @@ color is modulated by the diffuse <code>color</code>.</p>
 					<h3 class="name" id="matcap" translate="no">.<a href="#matcap">matcap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="matcap" translate="no">.<a href="#matcap">matcap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The matcap map.</p>
 						<p>The matcap map.</p>
+<p><code>matcap</code> represents luminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. HDR <code>matcap</code> textures (e.g. <code>.exr</code>)
+typically set <code>texture.colorSpace = LinearSRGBColorSpace</code>, while LDR
+<code>matcap</code> textures (e.g. <code>.png</code>, <code>.jpg</code>, <code>.webp</code>) typically set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -163,6 +177,8 @@ maps do not change the actual shape of the surface, only the lighting. In
 case the material has a normal map authored using the left handed
 case the material has a normal map authored using the left handed
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 for the different handedness.</p>
 for the different handedness.</p>
+<p><code>normalMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

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

@@ -24,12 +24,16 @@ The alpha map is a grayscale texture that controls the opacity across the surfac
 
 
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 
 
+`alphaMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .bumpMap : Texture
 ### .bumpMap : Texture
 
 
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 
 
+`bumpMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .bumpScale : number
 ### .bumpScale : number
@@ -54,6 +58,8 @@ Default is `0`.
 
 
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 
 
+`displacementMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .displacementScale : number
 ### .displacementScale : number
@@ -84,18 +90,24 @@ Default is `true`.
 
 
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .matcap : Texture
 ### .matcap : Texture
 
 
 The matcap map.
 The matcap map.
 
 
+`matcap` represents luminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). HDR `matcap` textures (e.g. `.exr`) typically set `texture.colorSpace = LinearSRGBColorSpace`, while LDR `matcap` textures (e.g. `.png`, `.jpg`, `.webp`) typically set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMap : Texture
 ### .normalMap : Texture
 
 
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 
 
+`normalMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap

+ 4 - 0
docs/pages/MeshNormalMaterial.html

@@ -50,6 +50,8 @@ by <a href="Color.html#set">Color#set</a>.</p>
 perceived depth in relation to the lights. Bump doesn't actually affect
 perceived depth in relation to the lights. Bump doesn't actually affect
 the geometry of the object, only the lighting. If a normal map is defined
 the geometry of the object, only the lighting. If a normal map is defined
 this will be ignored.</p>
 this will be ignored.</p>
+<p><code>bumpMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -115,6 +117,8 @@ maps do not change the actual shape of the surface, only the lighting. In
 case the material has a normal map authored using the left handed
 case the material has a normal map authored using the left handed
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 for the different handedness.</p>
 for the different handedness.</p>
+<p><code>normalMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

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

@@ -20,6 +20,8 @@ An object with one or more properties defining the material's appearance. Any pr
 
 
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 
 
+`bumpMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .bumpScale : number
 ### .bumpScale : number
@@ -62,6 +64,8 @@ Default is `true`.
 
 
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 
 
+`normalMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap

+ 27 - 0
docs/pages/MeshPhongMaterial.html

@@ -60,6 +60,8 @@ exists. For RGB and RGBA textures, the renderer will use the green channel
 when sampling this texture due to the extra bit of precision provided for
 when sampling this texture due to the extra bit of precision provided for
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 luminance/alpha textures will also still work as expected.</p>
 luminance/alpha textures will also still work as expected.</p>
+<p><code>alphaMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -68,6 +70,8 @@ luminance/alpha textures will also still work as expected.</p>
 					<div class="description">
 					<div class="description">
 						<p>The red channel of this texture is used as the ambient occlusion map.
 						<p>The red channel of this texture is used as the ambient occlusion map.
 Requires a second set of UVs.</p>
 Requires a second set of UVs.</p>
+<p><code>aoMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -87,6 +91,8 @@ red channel is also <code>1</code>, ambient light is fully occluded on a surface
 perceived depth in relation to the lights. Bump doesn't actually affect
 perceived depth in relation to the lights. Bump doesn't actually affect
 the geometry of the object, only the lighting. If a normal map is defined
 the geometry of the object, only the lighting. If a normal map is defined
 this will be ignored.</p>
 this will be ignored.</p>
+<p><code>bumpMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -133,6 +139,8 @@ of each pixel (white being the highest) is mapped against, and
 repositions, the vertices of the mesh. For best results, pair a
 repositions, the vertices of the mesh. For best results, pair a
 displacement map with a matching normal map, since the renderer can
 displacement map with a matching normal map, since the renderer can
 not recompute surface normals from the displaced vertices.</p>
 not recompute surface normals from the displaced vertices.</p>
+<p><code>displacementMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -166,6 +174,9 @@ unaffected by other lighting.</p>
 						<p>Set emissive (glow) map. The emissive map color is modulated by the
 						<p>Set emissive (glow) map. The emissive map color is modulated by the
 emissive color and the emissive intensity. If you have an emissive map,
 emissive color and the emissive intensity. If you have an emissive map,
 be sure to set the emissive color to something other than black.</p>
 be sure to set the emissive color to something other than black.</p>
+<p><code>emissiveMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>emissiveMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -173,6 +184,10 @@ be sure to set the emissive color to something other than black.</p>
 					<h3 class="name" id="envMap" translate="no">.<a href="#envMap">envMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="envMap" translate="no">.<a href="#envMap">envMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The environment map.</p>
 						<p>The environment map.</p>
+<p><code>envMap</code> represents luminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>envMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -215,6 +230,10 @@ be sure to set the emissive color to something other than black.</p>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The light map. Requires a second set of UVs.</p>
 						<p>The light map. Requires a second set of UVs.</p>
+<p><code>lightMap</code> represents pre-baked illuminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>lightMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -231,6 +250,9 @@ be sure to set the emissive color to something other than black.</p>
 						<p>The color map. May optionally include an alpha channel, typically combined
 						<p>The color map. May optionally include an alpha channel, typically combined
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 color is modulated by the diffuse <code>color</code>.</p>
 color is modulated by the diffuse <code>color</code>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -243,6 +265,8 @@ maps do not change the actual shape of the surface, only the lighting. In
 case the material has a normal map authored using the left handed
 case the material has a normal map authored using the left handed
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 for the different handedness.</p>
 for the different handedness.</p>
+<p><code>normalMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -298,6 +322,9 @@ The refraction ratio should not exceed <code>1</code>.</p>
 						<p>The specular map value affects both how much the specular surface
 						<p>The specular map value affects both how much the specular surface
 highlight contributes and how much of the environment map affects the
 highlight contributes and how much of the environment map affects the
 surface.</p>
 surface.</p>
+<p><code>specularMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>specularMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

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

@@ -26,12 +26,16 @@ The alpha map is a grayscale texture that controls the opacity across the surfac
 
 
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 
 
+`alphaMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMap : Texture
 ### .aoMap : Texture
 
 
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 
 
+`aoMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMapIntensity : number
 ### .aoMapIntensity : number
@@ -44,6 +48,8 @@ Default is `1`.
 
 
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 
 
+`bumpMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .bumpScale : number
 ### .bumpScale : number
@@ -76,6 +82,8 @@ Default is `0`.
 
 
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 
 
+`displacementMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .displacementScale : number
 ### .displacementScale : number
@@ -100,12 +108,16 @@ Default is `1`.
 
 
 Set emissive (glow) map. The emissive map color is modulated by the emissive color and the emissive intensity. If you have an emissive map, be sure to set the emissive color to something other than black.
 Set emissive (glow) map. The emissive map color is modulated by the emissive color and the emissive intensity. If you have an emissive map, be sure to set the emissive color to something other than black.
 
 
+`emissiveMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `emissiveMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .envMap : Texture
 ### .envMap : Texture
 
 
 The environment map.
 The environment map.
 
 
+`envMap` represents luminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `envMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .envMapIntensity : number
 ### .envMapIntensity : number
@@ -142,6 +154,8 @@ Default is `true`.
 
 
 The light map. Requires a second set of UVs.
 The light map. Requires a second set of UVs.
 
 
+`lightMap` represents pre-baked illuminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `lightMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .lightMapIntensity : number
 ### .lightMapIntensity : number
@@ -154,12 +168,16 @@ Default is `1`.
 
 
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMap : Texture
 ### .normalMap : Texture
 
 
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 
 
+`normalMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
@@ -202,6 +220,8 @@ This defines how shiny the material is and the color of its shine.
 
 
 The specular map value affects both how much the specular surface highlight contributes and how much of the environment map affects the surface.
 The specular map value affects both how much the specular surface highlight contributes and how much of the environment map affects the surface.
 
 
+`specularMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `specularMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .wireframe : boolean
 ### .wireframe : boolean

+ 26 - 0
docs/pages/MeshPhysicalMaterial.html

@@ -76,6 +76,8 @@ by <a href="Color.html#set">Color#set</a>.</p>
 						<p>Red and green channels represent the anisotropy direction in <code>[-1, 1]</code> tangent,
 						<p>Red and green channels represent the anisotropy direction in <code>[-1, 1]</code> tangent,
 bitangent space, to be rotated by <code>anisotropyRotation</code>. The blue channel
 bitangent space, to be rotated by <code>anisotropyRotation</code>. The blue channel
 contains strength as <code>[0, 1]</code> to be multiplied by <code>anisotropy</code>.</p>
 contains strength as <code>[0, 1]</code> to be multiplied by <code>anisotropy</code>.</p>
+<p><code>anisotropyMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -119,6 +121,8 @@ thin translucent layer over the base layer.</p>
 					<div class="description">
 					<div class="description">
 						<p>The red channel of this texture is multiplied against <code>clearcoat</code>,
 						<p>The red channel of this texture is multiplied against <code>clearcoat</code>,
 for per-pixel control over a coating's intensity.</p>
 for per-pixel control over a coating's intensity.</p>
+<p><code>clearcoatMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -126,6 +130,8 @@ for per-pixel control over a coating's intensity.</p>
 					<h3 class="name" id="clearcoatNormalMap" translate="no">.<a href="#clearcoatNormalMap">clearcoatNormalMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="clearcoatNormalMap" translate="no">.<a href="#clearcoatNormalMap">clearcoatNormalMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>Can be used to enable independent normals for the clear coat layer.</p>
 						<p>Can be used to enable independent normals for the clear coat layer.</p>
+<p><code>clearcoatNormalMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -149,6 +155,8 @@ for per-pixel control over a coating's intensity.</p>
 					<div class="description">
 					<div class="description">
 						<p>The green channel of this texture is multiplied against
 						<p>The green channel of this texture is multiplied against
 <code>clearcoatRoughness</code>, for per-pixel control over a coating's roughness.</p>
 <code>clearcoatRoughness</code>, for per-pixel control over a coating's roughness.</p>
+<p><code>clearcoatRoughnessMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -189,6 +197,8 @@ Between <code>1.0</code> to <code>2.333</code>.</p>
 					<div class="description">
 					<div class="description">
 						<p>The red channel of this texture is multiplied against <code>iridescence</code>, for per-pixel
 						<p>The red channel of this texture is multiplied against <code>iridescence</code>, for per-pixel
 control over iridescence.</p>
 control over iridescence.</p>
+<p><code>iridescenceMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -202,6 +212,8 @@ Minimum and maximum values of thickness are defined by <code>iridescenceThicknes
 <li><code>1.0</code> in the green channel will result in thickness equal to second element of the array.</li>
 <li><code>1.0</code> in the green channel will result in thickness equal to second element of the array.</li>
 <li>Values in-between will linearly interpolate between the elements of the array.</li>
 <li>Values in-between will linearly interpolate between the elements of the array.</li>
 </ul>
 </ul>
+<p><code>iridescenceThicknessMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -249,6 +261,9 @@ when <code>metalness</code> is <code>1.0</code></p>
 					<div class="description">
 					<div class="description">
 						<p>The RGB channels of this texture are multiplied against  <code>sheenColor</code>, for per-pixel control
 						<p>The RGB channels of this texture are multiplied against  <code>sheenColor</code>, for per-pixel control
 over sheen tint.</p>
 over sheen tint.</p>
+<p><code>sheenColorMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>sheenColorMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -264,6 +279,8 @@ over sheen tint.</p>
 					<div class="description">
 					<div class="description">
 						<p>The alpha channel of this texture is multiplied against <code>sheenRoughness</code>, for per-pixel control
 						<p>The alpha channel of this texture is multiplied against <code>sheenRoughness</code>, for per-pixel control
 over sheen roughness.</p>
 over sheen roughness.</p>
+<p><code>sheenRoughnessMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -279,6 +296,9 @@ over sheen roughness.</p>
 					<div class="description">
 					<div class="description">
 						<p>The RGB channels of this texture are multiplied against <code>specularColor</code>,
 						<p>The RGB channels of this texture are multiplied against <code>specularColor</code>,
 for per-pixel control over specular color.</p>
 for per-pixel control over specular color.</p>
+<p><code>specularColorMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>specularColorMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -295,6 +315,8 @@ When set to zero, the model is effectively Lambertian. From <code>0.0</code> to
 					<div class="description">
 					<div class="description">
 						<p>The alpha channel of this texture is multiplied against <code>specularIntensity</code>,
 						<p>The alpha channel of this texture is multiplied against <code>specularIntensity</code>,
 for per-pixel control over specular intensity.</p>
 for per-pixel control over specular intensity.</p>
+<p><code>specularIntensityMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -312,6 +334,8 @@ thin-walled. Otherwise the material is a volume boundary.</p>
 					<div class="description">
 					<div class="description">
 						<p>A texture that defines the thickness, stored in the green channel. This will
 						<p>A texture that defines the thickness, stored in the green channel. This will
 be multiplied by <code>thickness</code>.</p>
 be multiplied by <code>thickness</code>.</p>
+<p><code>thicknessMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -331,6 +355,8 @@ property can be used to model these materials.</p>
 					<div class="description">
 					<div class="description">
 						<p>The red channel of this texture is multiplied against <code>transmission</code>, for per-pixel control over
 						<p>The red channel of this texture is multiplied against <code>transmission</code>, for per-pixel control over
 optical transparency.</p>
 optical transparency.</p>
+<p><code>transmissionMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

+ 24 - 0
docs/pages/MeshPhysicalMaterial.html.md

@@ -35,6 +35,8 @@ Default is `0`.
 
 
 Red and green channels represent the anisotropy direction in `[-1, 1]` tangent, bitangent space, to be rotated by `anisotropyRotation`. The blue channel contains strength as `[0, 1]` to be multiplied by `anisotropy`.
 Red and green channels represent the anisotropy direction in `[-1, 1]` tangent, bitangent space, to be rotated by `anisotropyRotation`. The blue channel contains strength as `[0, 1]` to be multiplied by `anisotropy`.
 
 
+`anisotropyMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .anisotropyRotation : number
 ### .anisotropyRotation : number
@@ -65,12 +67,16 @@ Default is `0`.
 
 
 The red channel of this texture is multiplied against `clearcoat`, for per-pixel control over a coating's intensity.
 The red channel of this texture is multiplied against `clearcoat`, for per-pixel control over a coating's intensity.
 
 
+`clearcoatMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .clearcoatNormalMap : Texture
 ### .clearcoatNormalMap : Texture
 
 
 Can be used to enable independent normals for the clear coat layer.
 Can be used to enable independent normals for the clear coat layer.
 
 
+`clearcoatNormalMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .clearcoatNormalScale : Vector2
 ### .clearcoatNormalScale : Vector2
@@ -89,6 +95,8 @@ Default is `0`.
 
 
 The green channel of this texture is multiplied against `clearcoatRoughness`, for per-pixel control over a coating's roughness.
 The green channel of this texture is multiplied against `clearcoatRoughness`, for per-pixel control over a coating's roughness.
 
 
+`clearcoatRoughnessMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .dispersion : number
 ### .dispersion : number
@@ -119,6 +127,8 @@ Default is `1.3`.
 
 
 The red channel of this texture is multiplied against `iridescence`, for per-pixel control over iridescence.
 The red channel of this texture is multiplied against `iridescence`, for per-pixel control over iridescence.
 
 
+`iridescenceMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .iridescenceThicknessMap : Texture
 ### .iridescenceThicknessMap : Texture
@@ -129,6 +139,8 @@ A texture that defines the thickness of the iridescence layer, stored in the gre
 *   `1.0` in the green channel will result in thickness equal to second element of the array.
 *   `1.0` in the green channel will result in thickness equal to second element of the array.
 *   Values in-between will linearly interpolate between the elements of the array.
 *   Values in-between will linearly interpolate between the elements of the array.
 
 
+`iridescenceThicknessMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .iridescenceThicknessRange : Array.<number, number>
 ### .iridescenceThicknessRange : Array.<number, number>
@@ -167,6 +179,8 @@ Default is `(0,0,0)`.
 
 
 The RGB channels of this texture are multiplied against `sheenColor`, for per-pixel control over sheen tint.
 The RGB channels of this texture are multiplied against `sheenColor`, for per-pixel control over sheen tint.
 
 
+`sheenColorMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `sheenColorMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .sheenRoughness : number
 ### .sheenRoughness : number
@@ -179,6 +193,8 @@ Default is `1`.
 
 
 The alpha channel of this texture is multiplied against `sheenRoughness`, for per-pixel control over sheen roughness.
 The alpha channel of this texture is multiplied against `sheenRoughness`, for per-pixel control over sheen roughness.
 
 
+`sheenRoughnessMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .specularColor : Color
 ### .specularColor : Color
@@ -191,6 +207,8 @@ Default is `(1,1,1)`.
 
 
 The RGB channels of this texture are multiplied against `specularColor`, for per-pixel control over specular color.
 The RGB channels of this texture are multiplied against `specularColor`, for per-pixel control over specular color.
 
 
+`specularColorMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `specularColorMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .specularIntensity : number
 ### .specularIntensity : number
@@ -203,6 +221,8 @@ Default is `1`.
 
 
 The alpha channel of this texture is multiplied against `specularIntensity`, for per-pixel control over specular intensity.
 The alpha channel of this texture is multiplied against `specularIntensity`, for per-pixel control over specular intensity.
 
 
+`specularIntensityMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .thickness : number
 ### .thickness : number
@@ -215,6 +235,8 @@ Default is `0`.
 
 
 A texture that defines the thickness, stored in the green channel. This will be multiplied by `thickness`.
 A texture that defines the thickness, stored in the green channel. This will be multiplied by `thickness`.
 
 
+`thicknessMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .transmission : number
 ### .transmission : number
@@ -231,6 +253,8 @@ Default is `0`.
 
 
 The red channel of this texture is multiplied against `transmission`, for per-pixel control over optical transparency.
 The red channel of this texture is multiplied against `transmission`, for per-pixel control over optical transparency.
 
 
+`transmissionMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ## Source
 ## Source

+ 28 - 0
docs/pages/MeshStandardMaterial.html

@@ -76,6 +76,8 @@ exists. For RGB and RGBA textures, the renderer will use the green channel
 when sampling this texture due to the extra bit of precision provided for
 when sampling this texture due to the extra bit of precision provided for
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 luminance/alpha textures will also still work as expected.</p>
 luminance/alpha textures will also still work as expected.</p>
+<p><code>alphaMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -84,6 +86,8 @@ luminance/alpha textures will also still work as expected.</p>
 					<div class="description">
 					<div class="description">
 						<p>The red channel of this texture is used as the ambient occlusion map.
 						<p>The red channel of this texture is used as the ambient occlusion map.
 Requires a second set of UVs.</p>
 Requires a second set of UVs.</p>
+<p><code>aoMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -103,6 +107,8 @@ red channel is also <code>1</code>, ambient light is fully occluded on a surface
 perceived depth in relation to the lights. Bump doesn't actually affect
 perceived depth in relation to the lights. Bump doesn't actually affect
 the geometry of the object, only the lighting. If a normal map is defined
 the geometry of the object, only the lighting. If a normal map is defined
 this will be ignored.</p>
 this will be ignored.</p>
+<p><code>bumpMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -140,6 +146,8 @@ of each pixel (white being the highest) is mapped against, and
 repositions, the vertices of the mesh. For best results, pair a
 repositions, the vertices of the mesh. For best results, pair a
 displacement map with a matching normal map, since the renderer can
 displacement map with a matching normal map, since the renderer can
 not recompute surface normals from the displaced vertices.</p>
 not recompute surface normals from the displaced vertices.</p>
+<p><code>displacementMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -173,6 +181,9 @@ unaffected by other lighting.</p>
 						<p>Set emissive (glow) map. The emissive map color is modulated by the
 						<p>Set emissive (glow) map. The emissive map color is modulated by the
 emissive color and the emissive intensity. If you have an emissive map,
 emissive color and the emissive intensity. If you have an emissive map,
 be sure to set the emissive color to something other than black.</p>
 be sure to set the emissive color to something other than black.</p>
+<p><code>emissiveMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>emissiveMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -181,6 +192,10 @@ be sure to set the emissive color to something other than black.</p>
 					<div class="description">
 					<div class="description">
 						<p>The environment map. To ensure a physically correct rendering, environment maps
 						<p>The environment map. To ensure a physically correct rendering, environment maps
 are internally pre-processed with <a href="PMREMGenerator.html">PMREMGenerator</a>.</p>
 are internally pre-processed with <a href="PMREMGenerator.html">PMREMGenerator</a>.</p>
+<p><code>envMap</code> represents luminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>envMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -223,6 +238,10 @@ are internally pre-processed with <a href="PMREMGenerator.html">PMREMGenerator</
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The light map. Requires a second set of UVs.</p>
 						<p>The light map. Requires a second set of UVs.</p>
+<p><code>lightMap</code> represents pre-baked illuminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>lightMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -239,6 +258,9 @@ are internally pre-processed with <a href="PMREMGenerator.html">PMREMGenerator</
 						<p>The color map. May optionally include an alpha channel, typically combined
 						<p>The color map. May optionally include an alpha channel, typically combined
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 color is modulated by the diffuse <code>color</code>.</p>
 color is modulated by the diffuse <code>color</code>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -257,6 +279,8 @@ If <code>metalnessMap</code> is also provided, both values are multiplied.</p>
 					<div class="description">
 					<div class="description">
 						<p>The blue channel of this texture is used to alter the metalness of the
 						<p>The blue channel of this texture is used to alter the metalness of the
 material.</p>
 material.</p>
+<p><code>metalnessMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -269,6 +293,8 @@ maps do not change the actual shape of the surface, only the lighting. In
 case the material has a normal map authored using the left handed
 case the material has a normal map authored using the left handed
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 for the different handedness.</p>
 for the different handedness.</p>
+<p><code>normalMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -300,6 +326,8 @@ both values are multiplied.</p>
 					<div class="description">
 					<div class="description">
 						<p>The green channel of this texture is used to alter the roughness of the
 						<p>The green channel of this texture is used to alter the roughness of the
 material.</p>
 material.</p>
+<p><code>roughnessMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

+ 22 - 0
docs/pages/MeshStandardMaterial.html.md

@@ -37,12 +37,16 @@ The alpha map is a grayscale texture that controls the opacity across the surfac
 
 
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 
 
+`alphaMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMap : Texture
 ### .aoMap : Texture
 
 
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 
 
+`aoMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMapIntensity : number
 ### .aoMapIntensity : number
@@ -55,6 +59,8 @@ Default is `1`.
 
 
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 
 
+`bumpMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .bumpScale : number
 ### .bumpScale : number
@@ -79,6 +85,8 @@ Default is `0`.
 
 
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 
 
+`displacementMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .displacementScale : number
 ### .displacementScale : number
@@ -103,12 +111,16 @@ Default is `1`.
 
 
 Set emissive (glow) map. The emissive map color is modulated by the emissive color and the emissive intensity. If you have an emissive map, be sure to set the emissive color to something other than black.
 Set emissive (glow) map. The emissive map color is modulated by the emissive color and the emissive intensity. If you have an emissive map, be sure to set the emissive color to something other than black.
 
 
+`emissiveMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `emissiveMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .envMap : Texture
 ### .envMap : Texture
 
 
 The environment map. To ensure a physically correct rendering, environment maps are internally pre-processed with [PMREMGenerator](PMREMGenerator.html).
 The environment map. To ensure a physically correct rendering, environment maps are internally pre-processed with [PMREMGenerator](PMREMGenerator.html).
 
 
+`envMap` represents luminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `envMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .envMapIntensity : number
 ### .envMapIntensity : number
@@ -145,6 +157,8 @@ Default is `true`.
 
 
 The light map. Requires a second set of UVs.
 The light map. Requires a second set of UVs.
 
 
+`lightMap` represents pre-baked illuminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `lightMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .lightMapIntensity : number
 ### .lightMapIntensity : number
@@ -157,6 +171,8 @@ Default is `1`.
 
 
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .metalness : number
 ### .metalness : number
@@ -169,12 +185,16 @@ Default is `0`.
 
 
 The blue channel of this texture is used to alter the metalness of the material.
 The blue channel of this texture is used to alter the metalness of the material.
 
 
+`metalnessMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMap : Texture
 ### .normalMap : Texture
 
 
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 
 
+`normalMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
@@ -199,6 +219,8 @@ Default is `1`.
 
 
 The green channel of this texture is used to alter the roughness of the material.
 The green channel of this texture is used to alter the roughness of the material.
 
 
+`roughnessMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .wireframe : boolean
 ### .wireframe : boolean

+ 22 - 0
docs/pages/MeshToonMaterial.html

@@ -53,6 +53,8 @@ exists. For RGB and RGBA textures, the renderer will use the green channel
 when sampling this texture due to the extra bit of precision provided for
 when sampling this texture due to the extra bit of precision provided for
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
 luminance/alpha textures will also still work as expected.</p>
 luminance/alpha textures will also still work as expected.</p>
+<p><code>alphaMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -61,6 +63,8 @@ luminance/alpha textures will also still work as expected.</p>
 					<div class="description">
 					<div class="description">
 						<p>The red channel of this texture is used as the ambient occlusion map.
 						<p>The red channel of this texture is used as the ambient occlusion map.
 Requires a second set of UVs.</p>
 Requires a second set of UVs.</p>
+<p><code>aoMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -80,6 +84,8 @@ red channel is also <code>1</code>, ambient light is fully occluded on a surface
 perceived depth in relation to the lights. Bump doesn't actually affect
 perceived depth in relation to the lights. Bump doesn't actually affect
 the geometry of the object, only the lighting. If a normal map is defined
 the geometry of the object, only the lighting. If a normal map is defined
 this will be ignored.</p>
 this will be ignored.</p>
+<p><code>bumpMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -117,6 +123,8 @@ of each pixel (white being the highest) is mapped against, and
 repositions, the vertices of the mesh. For best results, pair a
 repositions, the vertices of the mesh. For best results, pair a
 displacement map with a matching normal map, since the renderer can
 displacement map with a matching normal map, since the renderer can
 not recompute surface normals from the displaced vertices.</p>
 not recompute surface normals from the displaced vertices.</p>
+<p><code>displacementMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -150,6 +158,9 @@ unaffected by other lighting.</p>
 						<p>Set emissive (glow) map. The emissive map color is modulated by the
 						<p>Set emissive (glow) map. The emissive map color is modulated by the
 emissive color and the emissive intensity. If you have an emissive map,
 emissive color and the emissive intensity. If you have an emissive map,
 be sure to set the emissive color to something other than black.</p>
 be sure to set the emissive color to something other than black.</p>
+<p><code>emissiveMap</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>emissiveMap</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -166,6 +177,8 @@ be sure to set the emissive color to something other than black.</p>
 						<p>Gradient map for toon shading. It's required to set
 						<p>Gradient map for toon shading. It's required to set
 <a href="Texture.html#minFilter">Texture#minFilter</a> and <a href="Texture.html#magFilter">Texture#magFilter</a> to <a href="global.html#NearestFilter">NearestFilter</a>
 <a href="Texture.html#minFilter">Texture#minFilter</a> and <a href="Texture.html#magFilter">Texture#magFilter</a> to <a href="global.html#NearestFilter">NearestFilter</a>
 when using this type of texture.</p>
 when using this type of texture.</p>
+<p><code>gradientMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -180,6 +193,10 @@ when using this type of texture.</p>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<h3 class="name" id="lightMap" translate="no">.<a href="#lightMap">lightMap</a><span class="type-signature"> : <a href="Texture.html">Texture</a></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>The light map. Requires a second set of UVs.</p>
 						<p>The light map. Requires a second set of UVs.</p>
+<p><code>lightMap</code> represents pre-baked illuminance data, and the texture must be assigned
+a <a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>lightMap</code> textures set
+<code>texture.colorSpace = LinearSRGBColorSpace</code> and use float-type formats
+such as <code>.exr</code> or <code>.hdr</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -196,6 +213,9 @@ when using this type of texture.</p>
 						<p>The color map. May optionally include an alpha channel, typically combined
 						<p>The color map. May optionally include an alpha channel, typically combined
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 with <a href="Material.html#transparent">Material#transparent</a> or <a href="Material.html#alphaTest">Material#alphaTest</a>. The texture map
 color is modulated by the diffuse <code>color</code>.</p>
 color is modulated by the diffuse <code>color</code>.</p>
+<p><code>map</code> represents color data, and the texture must be assigned a
+<a href="Texture.html#colorSpace">Texture#colorSpace</a>. Most <code>map</code> textures set
+<code>texture.colorSpace = SRGBColorSpace</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -208,6 +228,8 @@ maps do not change the actual shape of the surface, only the lighting. In
 case the material has a normal map authored using the left handed
 case the material has a normal map authored using the left handed
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 convention, the <code>y</code> component of <code>normalScale</code> should be negated to compensate
 for the different handedness.</p>
 for the different handedness.</p>
+<p><code>normalMap</code> represents non-color data. Any texture assigned must have
+<code>texture.colorSpace = NoColorSpace</code> (default).</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>

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

@@ -22,12 +22,16 @@ The alpha map is a grayscale texture that controls the opacity across the surfac
 
 
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 Only the color of the texture is used, ignoring the alpha channel if one exists. For RGB and RGBA textures, the renderer will use the green channel when sampling this texture due to the extra bit of precision provided for green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and luminance/alpha textures will also still work as expected.
 
 
+`alphaMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMap : Texture
 ### .aoMap : Texture
 
 
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 The red channel of this texture is used as the ambient occlusion map. Requires a second set of UVs.
 
 
+`aoMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .aoMapIntensity : number
 ### .aoMapIntensity : number
@@ -40,6 +44,8 @@ Default is `1`.
 
 
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 The texture to create a bump map. The black and white values map to the perceived depth in relation to the lights. Bump doesn't actually affect the geometry of the object, only the lighting. If a normal map is defined this will be ignored.
 
 
+`bumpMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .bumpScale : number
 ### .bumpScale : number
@@ -64,6 +70,8 @@ Default is `0`.
 
 
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 The displacement map affects the position of the mesh's vertices. Unlike other maps which only affect the light and shade of the material the displaced vertices can cast shadows, block other objects, and otherwise act as real geometry. The displacement texture is an image where the value of each pixel (white being the highest) is mapped against, and repositions, the vertices of the mesh. For best results, pair a displacement map with a matching normal map, since the renderer can not recompute surface normals from the displaced vertices.
 
 
+`displacementMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .displacementScale : number
 ### .displacementScale : number
@@ -88,6 +96,8 @@ Default is `1`.
 
 
 Set emissive (glow) map. The emissive map color is modulated by the emissive color and the emissive intensity. If you have an emissive map, be sure to set the emissive color to something other than black.
 Set emissive (glow) map. The emissive map color is modulated by the emissive color and the emissive intensity. If you have an emissive map, be sure to set the emissive color to something other than black.
 
 
+`emissiveMap` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `emissiveMap` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .fog : boolean
 ### .fog : boolean
@@ -100,6 +110,8 @@ Default is `true`.
 
 
 Gradient map for toon shading. It's required to set [Texture#minFilter](Texture.html#minFilter) and [Texture#magFilter](Texture.html#magFilter) to [NearestFilter](global.html#NearestFilter) when using this type of texture.
 Gradient map for toon shading. It's required to set [Texture#minFilter](Texture.html#minFilter) and [Texture#magFilter](Texture.html#magFilter) to [NearestFilter](global.html#NearestFilter) when using this type of texture.
 
 
+`gradientMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .isMeshToonMaterial : boolean (readonly)
 ### .isMeshToonMaterial : boolean (readonly)
@@ -112,6 +124,8 @@ Default is `true`.
 
 
 The light map. Requires a second set of UVs.
 The light map. Requires a second set of UVs.
 
 
+`lightMap` represents pre-baked illuminance data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `lightMap` textures set `texture.colorSpace = LinearSRGBColorSpace` and use float-type formats such as `.exr` or `.hdr`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .lightMapIntensity : number
 ### .lightMapIntensity : number
@@ -124,12 +138,16 @@ Default is `1`.
 
 
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 The color map. May optionally include an alpha channel, typically combined with [Material#transparent](Material.html#transparent) or [Material#alphaTest](Material.html#alphaTest). The texture map color is modulated by the diffuse `color`.
 
 
+`map` represents color data, and the texture must be assigned a [Texture#colorSpace](Texture.html#colorSpace). Most `map` textures set `texture.colorSpace = SRGBColorSpace`.
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMap : Texture
 ### .normalMap : Texture
 
 
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 The texture to create a normal map. The RGB values affect the surface normal for each pixel fragment and change the way the color is lit. Normal maps do not change the actual shape of the surface, only the lighting. In case the material has a normal map authored using the left handed convention, the `y` component of `normalScale` should be negated to compensate for the different handedness.
 
 
+`normalMap` represents non-color data. Any texture assigned must have `texture.colorSpace = NoColorSpace` (default).
+
 Default is `null`.
 Default is `null`.
 
 
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap
 ### .normalMapType : TangentSpaceNormalMap | ObjectSpaceNormalMap

+ 0 - 115
docs/pages/MorphNode.html

@@ -1,115 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>MorphNode - 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">MorphNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>This node implements the vertex transformation shader logic which is required
-for morph target animation.</p></div>
-			</header>
-			<article>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="MorphNode" translate="no">new <a href="#MorphNode">MorphNode</a><span class="signature">( mesh : <span class="param-type"><a href="Mesh.html">Mesh</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new morph node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">mesh</strong>
-									</td>
-									<td class="description last">
-										<p>The mesh holding the morph targets.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="mesh" translate="no">.<a href="#mesh">mesh</a><span class="type-signature"> : <a href="Mesh.html">Mesh</a></span> </h3>
-					<div class="description">
-						<p>The mesh holding the morph targets.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="morphBaseInfluence" translate="no">.<a href="#morphBaseInfluence">morphBaseInfluence</a><span class="type-signature"> : <a href="UniformNode.html">UniformNode</a>.&lt;float></span> </h3>
-					<div class="description">
-						<p>A uniform node which represents the morph base influence value.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="updateType" translate="no">.<a href="#updateType">updateType</a><span class="type-signature"> : string</span> </h3>
-					<div class="description">
-						<p>The update type overwritten since morph nodes are updated per object.</p>
-					</div>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#updateType">Node#updateType</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> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Setups the morph node by assigning the transformed vertex data to predefined node variables.</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#setup">Node#setup</a></dt>
-						</dl>
-					</div>
-					<h3 class="name name-method" id="update" translate="no">.<a href="#update">update</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>Updates the state of the morphed mesh by updating the base influence.</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="Node.html#update">Node#update</a></dt>
-						</dl>
-					</div>
-				<h2 class="subsection-title">Source</h2>
-				<p>
-					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/MorphNode.js" translate="no" target="_blank" rel="noopener">src/nodes/accessors/MorphNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 57
docs/pages/MorphNode.html.md

@@ -1,57 +0,0 @@
-*Inheritance: EventDispatcher → Node →*
-
-# MorphNode
-
-This node implements the vertex transformation shader logic which is required for morph target animation.
-
-## Constructor
-
-### new MorphNode( mesh : Mesh )
-
-Constructs a new morph node.
-
-**mesh**
-
-The mesh holding the morph targets.
-
-## Properties
-
-### .mesh : Mesh
-
-The mesh holding the morph targets.
-
-### .morphBaseInfluence : UniformNode.<float>
-
-A uniform node which represents the morph base influence value.
-
-### .updateType : string
-
-The update type overwritten since morph nodes are updated per object.
-
-**Overrides:** [Node#updateType](Node.html#updateType)
-
-## Methods
-
-### .setup( builder : NodeBuilder )
-
-Setups the morph node by assigning the transformed vertex data to predefined node variables.
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [Node#setup](Node.html#setup)
-
-### .update( frame : NodeFrame )
-
-Updates the state of the morphed mesh by updating the base influence.
-
-**frame**
-
-The current node frame.
-
-**Overrides:** [Node#update](Node.html#update)
-
-## Source
-
-[src/nodes/accessors/MorphNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/MorphNode.js)

+ 2 - 1
docs/pages/Node.html

@@ -490,7 +490,8 @@ depending on their implementation.</p>
 							<p>This method is used during the build process of a node and ensures
 							<p>This method is used during the build process of a node and ensures
 equal nodes are not built multiple times but just once. For example if
 equal nodes are not built multiple times but just once. For example if
 <code>attribute( 'uv' )</code> is used multiple times by the user, the build
 <code>attribute( 'uv' )</code> is used multiple times by the user, the build
-process makes sure to process just the first node.</p>
+process makes sure to process just the first node. It also handles
+node overrides if an override context is set.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>

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

@@ -286,7 +286,7 @@ Returns the child nodes as a JSON object.
 
 
 ### .getShared( builder : NodeBuilder ) : Node
 ### .getShared( builder : NodeBuilder ) : Node
 
 
-This method is used during the build process of a node and ensures equal nodes are not built multiple times but just once. For example if `attribute( 'uv' )` is used multiple times by the user, the build process makes sure to process just the first node.
+This method is used during the build process of a node and ensures equal nodes are not built multiple times but just once. For example if `attribute( 'uv' )` is used multiple times by the user, the build process makes sure to process just the first node. It also handles node overrides if an override context is set.
 
 
 **builder**
 **builder**
 
 

+ 39 - 2
docs/pages/NodeBuilder.html

@@ -224,6 +224,13 @@ to the builder's own cache.</p>
 						<p>Default is <code>this.cache</code>.</p>
 						<p>Default is <code>this.cache</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
+				<div class="member">
+					<h3 class="name" id="hardwareClipping" translate="no">.<a href="#hardwareClipping">hardwareClipping</a><span class="type-signature"> : boolean</span> </h3>
+					<div class="description">
+						<p>Whether the built material uses hardware clipping or not.</p>
+						<p>Default is <code>false</code>.</p>
+					</div>
+				</div>
 				<div class="member">
 				<div class="member">
 					<h3 class="name" id="hashNodes" translate="no">.<a href="#hashNodes">hashNodes</a><span class="type-signature"> : Object.&lt;number, <a href="Node.html">Node</a>></span> </h3>
 					<h3 class="name" id="hashNodes" translate="no">.<a href="#hashNodes">hashNodes</a><span class="type-signature"> : Object.&lt;number, <a href="Node.html">Node</a>></span> </h3>
 					<div class="description">
 					<div class="description">
@@ -244,7 +251,7 @@ to the builder's own cache.</p>
 					</div>
 					</div>
 				</div>
 				</div>
 				<div class="member">
 				<div class="member">
-					<h3 class="name" id="nodes" translate="no">.<a href="#nodes">nodes</a><span class="type-signature"> : Array.&lt;<a href="Node.html">Node</a>></span> </h3>
+					<h3 class="name" id="nodes" translate="no">.<a href="#nodes">nodes</a><span class="type-signature"> : Set.&lt;<a href="Node.html">Node</a>></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>A list of all nodes the builder is processing
 						<p>A list of all nodes the builder is processing
 for this 3D object.</p>
 for this 3D object.</p>
@@ -283,7 +290,7 @@ for this 3D object.</p>
 					</div>
 					</div>
 				</div>
 				</div>
 				<div class="member">
 				<div class="member">
-					<h3 class="name" id="sequentialNodes" translate="no">.<a href="#sequentialNodes">sequentialNodes</a><span class="type-signature"> : Array.&lt;<a href="Node.html">Node</a>></span> </h3>
+					<h3 class="name" id="sequentialNodes" translate="no">.<a href="#sequentialNodes">sequentialNodes</a><span class="type-signature"> : Set.&lt;<a href="Node.html">Node</a>></span> </h3>
 					<div class="description">
 					<div class="description">
 						<p>A list of all nodes the builder is processing in sequential order.</p>
 						<p>A list of all nodes the builder is processing in sequential order.</p>
 <p>This is used to determine the update order of nodes, which is important for
 <p>This is used to determine the update order of nodes, which is important for
@@ -2691,6 +2698,27 @@ so this method can be used to hide the conversion.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the given attribute name is defined in the geometry.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the given attribute name is defined in the geometry.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
+					<h3 class="name name-method" id="hasWriteUsage" translate="no">.<a href="#hasWriteUsage">hasWriteUsage</a><span class="signature">( node : <span class="param-type"><a href="Node.html">Node</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns whether the given node has been written to in any shader stage.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">node</strong>
+									</td>
+									<td class="description last">
+										<p>The node to check.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the node has been written to.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="includes" translate="no">.<a href="#includes">includes</a><span class="signature">( node : <span class="param-type"><a href="Node.html">Node</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<h3 class="name name-method" id="includes" translate="no">.<a href="#includes">includes</a><span class="signature">( node : <span class="param-type"><a href="Node.html">Node</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
@@ -2754,6 +2782,15 @@ so this method can be used to hide the conversion.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the requested feature is supported or not.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the requested feature is supported or not.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
+					<h3 class="name name-method" id="isContextAssign" translate="no">.<a href="#isContextAssign">isContextAssign</a><span class="signature">()</span><span class="type-signature"> : boolean</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns whether the builder is currently in an assignment context.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the builder is in an assignment context.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="isDeterministic" translate="no">.<a href="#isDeterministic">isDeterministic</a><span class="signature">( node : <span class="param-type"><a href="Node.html">Node</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<h3 class="name name-method" id="isDeterministic" translate="no">.<a href="#isDeterministic">isDeterministic</a><span class="signature">( node : <span class="param-type"><a href="Node.html">Node</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">

+ 24 - 2
docs/pages/NodeBuilder.html.md

@@ -138,6 +138,12 @@ Since the [NodeBuilder#cache](NodeBuilder.html#cache) might be temporarily overw
 
 
 Default is `this.cache`.
 Default is `this.cache`.
 
 
+### .hardwareClipping : boolean
+
+Whether the built material uses hardware clipping or not.
+
+Default is `false`.
+
 ### .hashNodes : Object.<number, Node>
 ### .hashNodes : Object.<number, Node>
 
 
 A dictionary that assigns each node to a unique hash.
 A dictionary that assigns each node to a unique hash.
@@ -152,7 +158,7 @@ Default is `null`.
 
 
 The material of the 3D object.
 The material of the 3D object.
 
 
-### .nodes : Array.<Node>
+### .nodes : Set.<Node>
 
 
 A list of all nodes the builder is processing for this 3D object.
 A list of all nodes the builder is processing for this 3D object.
 
 
@@ -180,7 +186,7 @@ The scene the 3D object belongs to.
 
 
 Default is `null`.
 Default is `null`.
 
 
-### .sequentialNodes : Array.<Node>
+### .sequentialNodes : Set.<Node>
 
 
 A list of all nodes the builder is processing in sequential order.
 A list of all nodes the builder is processing in sequential order.
 
 
@@ -1438,6 +1444,16 @@ The attribute name.
 
 
 **Returns:** Whether the given attribute name is defined in the geometry.
 **Returns:** Whether the given attribute name is defined in the geometry.
 
 
+### .hasWriteUsage( node : Node ) : boolean
+
+Returns whether the given node has been written to in any shader stage.
+
+**node**
+
+The node to check.
+
+**Returns:** Whether the node has been written to.
+
 ### .includes( node : Node ) : boolean
 ### .includes( node : Node ) : boolean
 
 
 Whether the given node is included in the internal array of nodes or not.
 Whether the given node is included in the internal array of nodes or not.
@@ -1468,6 +1484,12 @@ The requested feature.
 
 
 **Returns:** Whether the requested feature is supported or not.
 **Returns:** Whether the requested feature is supported or not.
 
 
+### .isContextAssign() : boolean
+
+Returns whether the builder is currently in an assignment context.
+
+**Returns:** Whether the builder is in an assignment context.
+
 ### .isDeterministic( node : Node ) : boolean
 ### .isDeterministic( node : Node ) : boolean
 
 
 Returns whether a Node or its flow is deterministic, useful for use in `const`.
 Returns whether a Node or its flow is deterministic, useful for use in `const`.

+ 40 - 12
docs/pages/NodeMaterial.html

@@ -169,15 +169,6 @@ eventually assigned to <code>geometryNode</code>.</p>
 						<p>Default is <code>null</code>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 					</div>
 				</div>
 				</div>
-				<div class="member">
-					<h3 class="name" id="hardwareClipping" translate="no">.<a href="#hardwareClipping">hardwareClipping</a><span class="type-signature"> : boolean</span> </h3>
-					<div class="description">
-						<p>Whether this material uses hardware clipping or not.
-This property is managed by the engine and should not be
-modified by apps.</p>
-						<p>Default is <code>false</code>.</p>
-					</div>
-				</div>
 				<div class="member">
 				<div class="member">
 					<h3 class="name" id="isNodeMaterial" translate="no">.<a href="#isNodeMaterial">isNodeMaterial</a><span class="type-signature"> : boolean</span> <span class="type-signature">(readonly) </span></h3>
 					<h3 class="name" id="isNodeMaterial" translate="no">.<a href="#isNodeMaterial">isNodeMaterial</a><span class="type-signature"> : boolean</span> <span class="type-signature">(readonly) </span></h3>
 					<div class="description">
 					<div class="description">
@@ -334,10 +325,10 @@ used in the vertex stage.</p>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 					</div>
 					</div>
-					<h3 class="name name-method" id="copy" translate="no">.<a href="#copy">copy</a><span class="signature">( source : <span class="param-type"><a href="NodeMaterial.html">NodeMaterial</a></span> )</span><span class="type-signature"> : <a href="NodeMaterial.html">NodeMaterial</a></span> </h3>
+					<h3 class="name name-method" id="copy" translate="no">.<a href="#copy">copy</a><span class="signature">( source : <span class="param-type"><a href="Material.html">Material</a></span> )</span><span class="type-signature"> : <a href="NodeMaterial.html">NodeMaterial</a></span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
-							<p>Copies the properties of the given node material to this instance.</p>
+							<p>Copies the common properties of the given material to this instance.</p>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>
@@ -409,6 +400,27 @@ defining all material properties of the classic type in the node type.</p>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 					</div>
 					</div>
+					<h3 class="name name-method" id="setupAmbientOcclusion" translate="no">.<a href="#setupAmbientOcclusion">setupAmbientOcclusion</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">
+							<p>Setups the ambient occlusion node from the material.</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-returns"><strong>Returns:</strong> The ambient occlusion node.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="setupClipping" translate="no">.<a href="#setupClipping">setupClipping</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="ClippingNode.html">ClippingNode</a></span> </h3>
 					<h3 class="name name-method" id="setupClipping" translate="no">.<a href="#setupClipping">setupClipping</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="ClippingNode.html">ClippingNode</a></span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
@@ -606,7 +618,7 @@ since it defines the material's lighting model.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The lighting model.</dt>
 							<dt class="tag-returns"><strong>Returns:</strong> The lighting model.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
-					<h3 class="name name-method" id="setupLights" translate="no">.<a href="#setupLights">setupLights</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="LightsNode.html">LightsNode</a></span> </h3>
+					<h3 class="name name-method" id="setupMaterialLightings" translate="no">.<a href="#setupMaterialLightings">setupMaterialLightings</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="LightingNode.html">LightingNode</a>.&lt;Array></span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
 							<p>Setups the lights node based on the scene, environment and material.</p>
 							<p>Setups the lights node based on the scene, environment and material.</p>
@@ -691,6 +703,22 @@ since it defines the material's lighting model.</p>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
 							<p>Setups the output node.</p>
 							<p>Setups the output node.</p>
+<p>This method can be implemented by derived materials to extend the functionality
+of the material's output or replace it altogether.</p>
+<pre><code class="language-js">class ColoredShadowMaterial extends MeshPhongNodeMaterial {
+  constructor( parameters ) {
+    super( parameters );
+    this._shadeColor = uniform( new Color( parameters.shadeColor ?? 0xff0000 ) );
+  }
+  setupOutput( builder, outputNode ) {
+	   // Modify the native output of the MeshPhongNodeMaterial fragment shader
+    const brightness = min( outputNode.r, 1.0 );
+    const mixedColor = mix( this._shadeColor, diffuseColor.rgb, brightness );
+	   // Return new output back into NodeMaterial flow
+    return super.setupOutput( builder, vec4( mixedColor, outputNode.a ) );
+  }
+}
+</code></pre>
 						</div>
 						</div>
 						<table class="params">
 						<table class="params">
 							<tbody>
 							<tbody>

+ 31 - 9
docs/pages/NodeMaterial.html.md

@@ -132,12 +132,6 @@ The idea is to assign a `Fn` definition that holds the geometry modification log
 
 
 Default is `null`.
 Default is `null`.
 
 
-### .hardwareClipping : boolean
-
-Whether this material uses hardware clipping or not. This property is managed by the engine and should not be modified by apps.
-
-Default is `false`.
-
 ### .isNodeMaterial : boolean (readonly)
 ### .isNodeMaterial : boolean (readonly)
 
 
 This flag can be used for type testing.
 This flag can be used for type testing.
@@ -258,9 +252,9 @@ Builds this material with the given node builder.
 
 
 The current node builder.
 The current node builder.
 
 
-### .copy( source : NodeMaterial ) : NodeMaterial
+### .copy( source : Material ) : NodeMaterial
 
 
-Copies the properties of the given node material to this instance.
+Copies the common properties of the given material to this instance.
 
 
 **source**
 **source**
 
 
@@ -294,6 +288,16 @@ Setups the vertex and fragment stage of this node material.
 
 
 The current node builder.
 The current node builder.
 
 
+### .setupAmbientOcclusion( builder : NodeBuilder ) : Node
+
+Setups the ambient occlusion node from the material.
+
+**builder**
+
+The current node builder.
+
+**Returns:** The ambient occlusion node.
+
 ### .setupClipping( builder : NodeBuilder ) : ClippingNode
 ### .setupClipping( builder : NodeBuilder ) : ClippingNode
 
 
 Setups the clipping node.
 Setups the clipping node.
@@ -386,7 +390,7 @@ The current node builder.
 
 
 **Returns:** The lighting model.
 **Returns:** The lighting model.
 
 
-### .setupLights( builder : NodeBuilder ) : LightsNode
+### .setupMaterialLightings( builder : NodeBuilder ) : LightingNode.<Array>
 
 
 Setups the lights node based on the scene, environment and material.
 Setups the lights node based on the scene, environment and material.
 
 
@@ -432,6 +436,24 @@ Setups the outgoing light node variable
 
 
 Setups the output node.
 Setups the output node.
 
 
+This method can be implemented by derived materials to extend the functionality of the material's output or replace it altogether.
+
+```js
+class ColoredShadowMaterial extends MeshPhongNodeMaterial {
+  constructor( parameters ) {
+    super( parameters );
+    this._shadeColor = uniform( new Color( parameters.shadeColor ?? 0xff0000 ) );
+  }
+  setupOutput( builder, outputNode ) {
+	   // Modify the native output of the MeshPhongNodeMaterial fragment shader
+    const brightness = min( outputNode.r, 1.0 );
+    const mixedColor = mix( this._shadeColor, diffuseColor.rgb, brightness );
+	   // Return new output back into NodeMaterial flow
+    return super.setupOutput( builder, vec4( mixedColor, outputNode.a ) );
+  }
+}
+```
+
 **builder**
 **builder**
 
 
 The current node builder.
 The current node builder.

+ 1 - 1
docs/pages/NodeMaterialObserver.html

@@ -128,7 +128,7 @@ node properties.</p>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 						<dl class="details">
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> Whether the given render object has changed its state or not.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the given render object is equal to its cached state or not.</dt>
 						</dl>
 						</dl>
 					</div>
 					</div>
 					<h3 class="name name-method" id="firstInitialization" translate="no">.<a href="#firstInitialization">firstInitialization</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<h3 class="name name-method" id="firstInitialization" translate="no">.<a href="#firstInitialization">firstInitialization</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span> )</span><span class="type-signature"> : boolean</span> </h3>

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

@@ -64,7 +64,7 @@ The current material lights.
 
 
 The current render ID.
 The current render ID.
 
 
-**Returns:** Whether the given render object has changed its state or not.
+**Returns:** Whether the given render object is equal to its cached state or not.
 
 
 ### .firstInitialization( renderObject : RenderObject ) : boolean
 ### .firstInitialization( renderObject : RenderObject ) : boolean
 
 

+ 11 - 1
docs/pages/Object3D.html

@@ -1426,7 +1426,7 @@ when <a href="Object3D.html#matrixWorldNeedsUpdate">Object3D#matrixWorldNeedsUpd
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 					</div>
 					</div>
-					<h3 class="name name-method" id="updateWorldMatrix" translate="no">.<a href="#updateWorldMatrix">updateWorldMatrix</a><span class="signature">( updateParents : <span class="param-type">boolean</span>, updateChildren : <span class="param-type">boolean</span> )</span> </h3>
+					<h3 class="name name-method" id="updateWorldMatrix" translate="no">.<a href="#updateWorldMatrix">updateWorldMatrix</a><span class="signature">( updateParents : <span class="param-type">boolean</span>, updateChildren : <span class="param-type">boolean</span>, force : <span class="param-type">boolean</span> )</span> </h3>
 					<div class="method">
 					<div class="method">
 						<div class="description">
 						<div class="description">
 							<p>An alternative version of <a href="Object3D.html#updateMatrixWorld">Object3D#updateMatrixWorld</a> with more control over the
 							<p>An alternative version of <a href="Object3D.html#updateMatrixWorld">Object3D#updateMatrixWorld</a> with more control over the
@@ -1452,6 +1452,16 @@ update of ancestor and descendant nodes.</p>
 										<p>Default is <code>false</code>.</p>
 										<p>Default is <code>false</code>.</p>
 									</td>
 									</td>
 								</tr>
 								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">force</strong>
+									</td>
+									<td class="description last">
+										<p>When set to <code>true</code>, a recomputation of world matrices is forced even
+when <a href="Object3D.html#matrixWorldNeedsUpdate">Object3D#matrixWorldNeedsUpdate</a> is <code>false</code>.</p>
+										<p>Default is <code>false</code>.</p>
+									</td>
+								</tr>
 							</tbody>
 							</tbody>
 						</table>
 						</table>
 					</div>
 					</div>

+ 7 - 1
docs/pages/Object3D.html.md

@@ -765,7 +765,7 @@ When set to `true`, a recomputation of world matrices is forced even when [Objec
 
 
 Default is `false`.
 Default is `false`.
 
 
-### .updateWorldMatrix( updateParents : boolean, updateChildren : boolean )
+### .updateWorldMatrix( updateParents : boolean, updateChildren : boolean, force : boolean )
 
 
 An alternative version of [Object3D#updateMatrixWorld](Object3D.html#updateMatrixWorld) with more control over the update of ancestor and descendant nodes.
 An alternative version of [Object3D#updateMatrixWorld](Object3D.html#updateMatrixWorld) with more control over the update of ancestor and descendant nodes.
 
 
@@ -781,6 +781,12 @@ Whether descendant nodes should be updated or not.
 
 
 Default is `false`.
 Default is `false`.
 
 
+**force**
+
+When set to `true`, a recomputation of world matrices is forced even when [Object3D#matrixWorldNeedsUpdate](Object3D.html#matrixWorldNeedsUpdate) is `false`.
+
+Default is `false`.
+
 ### .worldToLocal( vector : Vector3 ) : Vector3
 ### .worldToLocal( vector : Vector3 ) : Vector3
 
 
 Converts the given vector from this 3D object's world space to local space.
 Converts the given vector from this 3D object's world space to local space.

+ 95 - 0
docs/pages/OverrideContextNode.html

@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>OverrideContextNode - 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="ContextNode.html">ContextNode</a> → </p>
+	<h1 translate="no">OverrideContextNode</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>A specialized context node designed to override specific target nodes within a
+node sub-graph or flow. This allows replacing specific inputs (e.g., normal
+and position vectors) dynamically during compilation for a specific flow node,
+without having to reconstruct or duplicate the source nodes.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">// Method chaining example:
+node.overrideNode( positionLocal, () => positionLocal.add( vec3( 1, 0, 0 ) ) );
+// Context assignment example:
+material.contextNode = overrideNode( positionLocal, () => positionLocal.add( vec3( 1, 0, 0 ) ) );
+</code></pre></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="OverrideContextNode" translate="no">new <a href="#OverrideContextNode">OverrideContextNode</a><span class="signature">( overrideNodes : <span class="param-type">Map.&lt;<a href="Node.html">Node</a>, function()></span>, flowNode : <span class="param-type"><a href="Node.html">Node</a> | null</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new override context node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">overrideNodes</strong>
+									</td>
+									<td class="description last">
+										<p>A map mapping target nodes to their respective override callback functions.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">flowNode</strong>
+									</td>
+									<td class="description last">
+										<p>The node whose context should be modified.</p>
+										<p>Default is <code>null</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="isOverrideContextNode" translate="no">.<a href="#isOverrideContextNode">isOverrideContextNode</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=".type" translate="no">.<a href="#.type">type</a><span class="type-signature"> : string</span> <span class="type-signature">(readonly) </span></h3>
+					<div class="description">
+						<p>Returns the type of the node.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<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">
+							<p>Gathers the context data from all parent context nodes by traversing the hierarchy,
+merging the <code>overrideNodes</code> maps from all encountered <code>OverrideContextNode</code> instances.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="ContextNode.html#getFlowContextData">ContextNode#getFlowContextData</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The gathered context data, containing the merged <code>overrideNodes</code> map.</dt>
+						</dl>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/core/OverrideContextNode.js" translate="no" target="_blank" rel="noopener">src/nodes/core/OverrideContextNode.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

Some files were not shown because too many files changed in this diff

粤ICP备19079148号