Mr.doob 4 месяцев назад
Родитель
Сommit
fef3c54c7d
100 измененных файлов с 15063 добавлено и 5491 удалено
  1. 3133 3060
      build/three.cjs
  2. 2642 2087
      build/three.core.js
  3. 1 1
      build/three.core.min.js
  4. 1 1
      build/three.module.js
  5. 1 1
      build/three.module.min.js
  6. 6 10
      build/three.tsl.js
  7. 1 1
      build/three.tsl.min.js
  8. 1 1
      build/three.webgpu.js
  9. 1 1
      build/three.webgpu.min.js
  10. 1 1
      build/three.webgpu.nodes.js
  11. 1 1
      build/three.webgpu.nodes.min.js
  12. 1617 0
      docs/TSL.md
  13. 74 20
      docs/index.html
  14. 2716 0
      docs/llms-full.txt
  15. 158 0
      docs/llms.txt
  16. 6 6
      docs/pages/AMFLoader.html
  17. 73 0
      docs/pages/AMFLoader.html.md
  18. 1 1
      docs/pages/AONode.html
  19. 29 0
      docs/pages/AONode.html.md
  20. 2 2
      docs/pages/ARButton.html
  21. 37 0
      docs/pages/ARButton.html.md
  22. 6 6
      docs/pages/AfterImageNode.html
  23. 97 0
      docs/pages/AfterImageNode.html.md
  24. 8 8
      docs/pages/AfterimagePass.html
  25. 106 0
      docs/pages/AfterimagePass.html.md
  26. 2 2
      docs/pages/AmbientLight.html
  27. 44 0
      docs/pages/AmbientLight.html.md
  28. 1 1
      docs/pages/AmbientLightNode.html
  29. 21 0
      docs/pages/AmbientLightNode.html.md
  30. 7 7
      docs/pages/AmmoPhysics.html
  31. 79 0
      docs/pages/AmmoPhysics.html.md
  32. 34 8
      docs/pages/AnaglyphEffect.html
  33. 87 0
      docs/pages/AnaglyphEffect.html.md
  34. 76 5
      docs/pages/AnaglyphPassNode.html
  35. 93 0
      docs/pages/AnaglyphPassNode.html.md
  36. 7 7
      docs/pages/AnalyticLightNode.html
  37. 139 0
      docs/pages/AnalyticLightNode.html.md
  38. 8 8
      docs/pages/AnamorphicNode.html
  39. 127 0
      docs/pages/AnamorphicNode.html.md
  40. 23 23
      docs/pages/AnimationAction.html
  41. 337 0
      docs/pages/AnimationAction.html.md
  42. 18 18
      docs/pages/AnimationClip.html
  43. 197 0
      docs/pages/AnimationClip.html.md
  44. 11 11
      docs/pages/AnimationClipCreator.html
  45. 101 0
      docs/pages/AnimationClipCreator.html.md
  46. 6 6
      docs/pages/AnimationLoader.html
  47. 62 0
      docs/pages/AnimationLoader.html.md
  48. 12 12
      docs/pages/AnimationMixer.html
  49. 133 0
      docs/pages/AnimationMixer.html.md
  50. 4 4
      docs/pages/AnimationObjectGroup.html
  51. 70 0
      docs/pages/AnimationObjectGroup.html.md
  52. 241 0
      docs/pages/AnimationPathHelper.html
  53. 145 0
      docs/pages/AnimationPathHelper.html.md
  54. 20 20
      docs/pages/AnimationUtils.html
  55. 137 0
      docs/pages/AnimationUtils.html.md
  56. 6 6
      docs/pages/ArcCurve.html
  57. 59 0
      docs/pages/ArcCurve.html.md
  58. 15 15
      docs/pages/ArcballControls.html
  59. 307 0
      docs/pages/ArcballControls.html.md
  60. 1 1
      docs/pages/ArrayCamera.html
  61. 41 0
      docs/pages/ArrayCamera.html.md
  62. 5 5
      docs/pages/ArrayElementNode.html
  63. 69 0
      docs/pages/ArrayElementNode.html.md
  64. 9 9
      docs/pages/ArrayNode.html
  65. 122 0
      docs/pages/ArrayNode.html.md
  66. 11 11
      docs/pages/ArrowHelper.html
  67. 116 0
      docs/pages/ArrowHelper.html.md
  68. 7 7
      docs/pages/AsciiEffect.html
  69. 124 0
      docs/pages/AsciiEffect.html.md
  70. 3 3
      docs/pages/AssignNode.html
  71. 59 0
      docs/pages/AssignNode.html.md
  72. 5 5
      docs/pages/AtomicFunctionNode.html
  73. 75 0
      docs/pages/AtomicFunctionNode.html.md
  74. 4 4
      docs/pages/AttributeNode.html
  75. 57 0
      docs/pages/AttributeNode.html.md
  76. 16 16
      docs/pages/Audio.html
  77. 383 0
      docs/pages/Audio.html.md
  78. 2 2
      docs/pages/AudioAnalyser.html
  79. 71 0
      docs/pages/AudioAnalyser.html.md
  80. 1 1
      docs/pages/AudioContext.html
  81. 23 0
      docs/pages/AudioContext.html.md
  82. 2 2
      docs/pages/AudioListener.html
  83. 89 0
      docs/pages/AudioListener.html.md
  84. 5 5
      docs/pages/AudioLoader.html
  85. 54 0
      docs/pages/AudioLoader.html.md
  86. 4 4
      docs/pages/AxesHelper.html
  87. 52 0
      docs/pages/AxesHelper.html.md
  88. 6 6
      docs/pages/BVHLoader.html
  89. 93 0
      docs/pages/BVHLoader.html.md
  90. 1 1
      docs/pages/BarrierNode.html
  91. 21 0
      docs/pages/BarrierNode.html.md
  92. 1 1
      docs/pages/BasicEnvironmentNode.html
  93. 29 0
      docs/pages/BasicEnvironmentNode.html.md
  94. 1 1
      docs/pages/BasicLightMapNode.html
  95. 27 0
      docs/pages/BasicLightMapNode.html.md
  96. 2 2
      docs/pages/BasicLightingModel.html
  97. 37 0
      docs/pages/BasicLightingModel.html.md
  98. 2 2
      docs/pages/BatchNode.html
  99. 43 0
      docs/pages/BatchNode.html.md
  100. 42 42
      docs/pages/BatchedMesh.html

Разница между файлами не показана из-за своего большого размера
+ 3133 - 3060
build/three.cjs


Разница между файлами не показана из-за своего большого размера
+ 2642 - 2087
build/three.core.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
build/three.core.min.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
build/three.module.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
build/three.module.min.js


Разница между файлами не показана из-за своего большого размера
+ 6 - 10
build/three.tsl.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
build/three.tsl.min.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
build/three.webgpu.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
build/three.webgpu.min.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
build/three.webgpu.nodes.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
build/three.webgpu.nodes.min.js


+ 1617 - 0
docs/TSL.md

@@ -0,0 +1,1617 @@
+## TSL Specification
+
+An Approach to Productive and Maintainable Shader Creation.
+
+- [Introduction](#introduction)
+  - [Why TSL?](#why-tsl)
+  - [Example](#example)
+  - [Architecture](#architecture)
+- [Learning TSL](#learning-tsl)
+- [Constants and explicit conversions](#constants-and-explicit-conversions)
+- [Conversions](#conversions)
+- [Uniform](#uniform)
+  - [onUpdate](#uniformonupdate)
+- [Swizzle](#swizzle)
+- [Operators](#operators)
+- [Function](#function)
+- [Variables](#variables)
+- [Array](#array)
+  - [Uniform](#array-uniform)
+- [Varying](#varying)
+- [Conditional](#conditional)
+  - [If-else](#if-else)
+  - [Switch-case](#switch-case)
+  - [Ternary](#ternary)
+- [Loop](#loop)
+- [Math](#math)
+- [Method chaining](#method-chaining)
+- [Texture](#texture)
+- [Attributes](#attributes)
+- [Position](#position)
+- [Normal](#normal)
+- [Tangent](#tangent)
+- [Bitangent](#bitangent)
+- [Camera](#camera)
+- [Model](#model)
+- [Screen](#screen)
+- [Viewport](#viewport)
+- [Blend Modes](#blend-modes)
+- [Reflect](#reflect)
+- [UV Utils](#uv-utils)
+- [Interpolation](#interpolation)
+- [Random](#random)
+- [Rotate](#rotate)
+- [Oscillator](#oscillator)
+- [Timer](#timer)
+- [Packing](#packing)
+- [Render Pipeline](#render-pipeline)
+  - [Multiple Render Targets](#multiple-render-targets-mrt)
+  - [Post-Processing](#post-processing)
+  - [Render Pass](#render-pass)
+  - [Compute](#compute)
+- [Storage](#storage)
+- [Struct](#struct)
+- [Flow Control](#flow-control)
+- [Fog](#fog)
+- [Color Adjustments](#color-adjustments)
+- [Utilities](#utilities)
+- [NodeMaterial](#nodematerial)
+  - [LineDashedNodeMaterial](#linedashednodematerial)
+  - [MeshPhongNodeMaterial](#meshphongnodematerial)
+  - [MeshStandardNodeMaterial](#meshstandardnodematerial)
+    - [MeshPhysicalNodeMaterial](#meshphysicalnodematerial)
+  - [SpriteNodeMaterial](#spritenodematerial)
+- [Transitioning common GLSL properties to TSL](#transitioning-common-glsl-properties-to-tsl)
+
+## Introduction
+
+### Why TSL?
+
+Creating shaders has always been an advanced step for most developers; many game developers have never created GLSL code from scratch. The shader graph solution adopted today by the industry has allowed developers more focused on dynamics to create the necessary graphic effects to meet the demands of their projects.
+
+The aim of the project is to create an easy-to-use environment for shader creation. Even if for this we need to create complexity behind it, this happened initially with `Renderer` and now with the `TSL`.
+
+Other benefits that TSL brings besides simplifying shading creation are keeping the `renderer agnostic`, while all the complexity of a material can be imported into different modules and use `tree shaking` without breaking during the process.
+
+### Example
+
+A `detail map` makes things look more real in games. It adds tiny details like cracks or bumps to surfaces. In this example we will scale uv to improve details when seen up close and multiply with a base texture.
+
+#### Old
+
+This is how we would achieve that using `.onBeforeCompile()`:
+
+```js
+const material = new THREE.MeshStandardMaterial();
+material.map = colorMap;
+material.onBeforeCompile = ( shader ) => {
+
+	shader.uniforms.detailMap = { value: detailMap };
+
+	let token = '#define STANDARD';
+
+	let insert = /* glsl */`
+		uniform sampler2D detailMap;
+	`;
+
+	shader.fragmentShader = shader.fragmentShader.replace( token, token + insert );
+
+	token = '#include <map_fragment>';
+
+	insert = /* glsl */`
+		diffuseColor *= texture2D( detailMap, vMapUv * 10.0 );
+	`;
+
+	shader.fragmentShader = shader.fragmentShader.replace( token, token + insert );
+
+};
+```
+
+Any simple change from this makes the code increasingly complicated using `.onBeforeCompile`, the result we have today in the community are countless types of parametric materials that do not communicate with each other, and that need to be updated periodically to be operating, limiting the creativity to create unique materials reusing modules in a simple way.
+
+#### New
+
+With `TSL` the code would look like this:
+
+```js
+import { texture, uv } from 'three/tsl';
+
+const detail = texture( detailMap, uv().mul( 10 ) );
+
+const material = new THREE.MeshStandardNodeMaterial();
+material.colorNode = texture( colorMap ).mul( detail );
+```
+
+`TSL` is also capable of encoding code into different outputs such as `WGSL`/`GLSL` - `WebGPU`/`WebGL`, in addition to optimizing the shader graph automatically and through codes that can be inserted within each `Node`. This allows the developer to focus on productivity and leave the graphical management part to the `Node System`.
+
+Another important feature of a graph shader is that we will no longer need to care about the sequence in which components are created, because the `Node System` will only declare and include it once.
+
+Let's say that you import `positionWorld` into your code, even if another component uses it, the calculations performed to obtain `position world` will only be performed once, as is the case with any other node such as: `normalWorld`, `modelPosition`, etc.
+
+### Architecture
+
+All `TSL` components are extended from `Node` class. The `Node` allows it to communicate with any other, value conversions can be automatic or manual, a `Node` can receive the output value expected by the parent `Node` and modify its own output snippet. It's possible to modulate them using `tree shaking` in the shader construction process, the `Node` will have important information such as `geometry`, `material`, `renderer` as well as the `backend`, which can influence the type and value of output.
+
+The main class responsible for creating the code is `NodeBuilder`. This class can be extended to any output programming language, so you can use TSL for a third language if you wish. Currently `NodeBuilder` has two extended classes, the `WGSLNodeBuilder` aimed at WebGPU and `GLSLNodeBuilder` aimed at WebGL2.
+
+The build process is based on three pillars: `setup`, `analyze` and `generate`.
+
+| | |
+| -- | -- |
+| `setup` | Use `TSL` to create a completely customized code for the `Node` output. The `Node` can use many others within itself, have countless inputs, but there will always be a single output. |
+| `analyze` | This proccess will check the `nodes` that were created in order to create useful information for `generate` the snippet, such as the need to create or not a cache/variable for optimizing a node. |
+| `generate` | An output of `string` will be returned from each `node`. Any node will also be able to create code in the flow of shader, supporting multiple lines. |
+
+`Node` also have a native update process invoked by the `update()` function, these events be called by `frame`, `render call` and `object draw`.
+
+It is also possible to serialize or deserialize a `Node` using `serialize()` and `deserialize()` functions.
+
+## Learning TSL
+
+TSL is a Node-based shader abstraction, written in JavaScript. TSL's functions are inspired by GLSL, but follow a very different concept. WGSL and GLSL are focused on creating GPU programs, in TSL this is one of the features.
+
+### Seamless Integration with JavaScript/TypeScript
+
+- Unified Code
+  - Write shader logic directly in JS/TS, eliminating the need to manipulate strings.
+  - Create and manipulate render objects just like any other JavaScript logic inside a TSL function.
+  - Advanced events to control a Node before and after the object is rendered.
+- JS Ecosystem
+  - Use native **import/export**, **NPM**, and integrate **JS/TS** components directly into your shader logic.
+- Typing
+  - Benefit from better type checking (especially with **TypeScript** and **[@three-types](https://github.com/three-types/three-ts-types)**), increasing code robustness.
+
+### Shader-Graph Inspired Structure
+
+- Focus on Intent
+  - Build materials by connecting nodes through: [positionWorld](#position), [normalWorld](#normal), [screenUV](#screen), [attribute()](#attributes), etc. 
+More declarative("what") vs. imperative("how").
+- Composition & High-Level Concepts
+  - Work with high-level concepts for Node Material like [colorNode](#basic), [roughnessNode](#standard), [metalnessNode](#standard), [positionNode](#basic), etc. This preserves the integrity of the lighting model while allowing customizations, helping to avoid mistakes from incorrect setups.
+- Keeping an eye on software exchange
+  - Modern 3D authoring software uses Shader-Graph based material composition to exchange between other software. TSL already has its own MaterialX integration.
+- Easier Migration
+  - Many functions are directly inspired by GLSL to smooth the learning curve for those with prior experience.
+
+### Rendering Manipulation
+
+- Control rendering steps and create new render-passes per individual TSL functions.
+  - Implement complex effects is easily with nodes using a single function call either in post-processing and in materials allowing the node itself to manage the rendering process as it needs.
+    - `gaussianBlur()`: Double render-pass gaussian blur node. It can be used in the material or in post-processing through a single function.
+  - Easy access to renderer buffers using TSL functions like: 
+    - `viewportSharedTexture()`: Accesses the beauty what has already been rendered, preserving the render-order.
+    - `viewportLinearDepth()`: Accesses the depth what has already been rendered, preserving the render-order.
+  - Integrated Compute Shaders
+    - Perform calculations on buffers using compute stage directly during an object's rendering.
+  - TSL allows dynamic manipulation of renderer functions, which makes it more customizable than intermediate languages ​​that would have to use flags in fixed pipelines for this.
+  - You just need to use the events of a Node for the renderer manipulations, without needing to modify the core.
+
+### Automatic Optimization and Workarounds
+
+- Your TSL code automatically benefits from optimizations and workarounds implemented in the Three.js compiler with each new version.
+  - Simplifications
+    - Automatic type conversions.
+    - Execute a block of code in vertex-stage and get it in fragment-stage just using `vertexStage( node )`.
+    - Automatically choose interpolation method for varyings depending on type.
+    - Don't worry about collisions of global variables internally when using Nodes.
+  - Polyfills
+    - e.g: `textureSample()` function in the vertex shader (not natively supported in WGSL) is correctly transpiled to work.
+    - e.g: Automatic correction for the `pow()` function, which didn't accept negative bases on Windows/DirectX using WGSL.
+  - Optimizations
+    - Repeated expressions: TSL can automatically create temporary variables to avoid redundant calculations.
+    - Automatic reuse of uniforms and attributes.
+    - Creating varying only if necessary. Otherwise they are replaced by simple variables.
+
+### Target audience
+  - Beginners users
+    - You only need one line to create your first custom shader.
+  - Advanced users
+    - Makes creating shaders simple but not limited. Example: https://www.youtube.com/watch?v=C2gDL9Qk_vo
+    - If you don't like fixed pipelines and low level, you'll love this.
+
+### Share everything
+
+#### TSL is based on Nodes, so don’t worry about sharing your **functions** and **uniforms** across materials and post-processing.
+
+```js
+// Shared the same uniform with various materials
+
+const sharedColor = uniform( new THREE.Color() );
+
+materialA.colorNode = sharedColor.div( 2 );
+materialB.colorNode = sharedColor.mul( .5 );
+materialC.colorNode = sharedColor.add( .5 );
+```
+
+#### Deferred Function: High level of customization, goodby **#defines**
+
+Access **material**, **geometry**, **object**, **camera**, **scene**, **renderer** and more directly from a TSL function. Function calls are only performed at the time of building the shader allowing you to customize the function according to the object's setup.
+
+```js
+// Returns an uniform of the material's custom color if it exists 
+
+const customColor = Fn( ( { material, geometry, object } ) => {
+
+	if ( material.userData.customColor !== undefined ) {
+
+		return uniform( material.userData.customColor );
+
+	}
+
+	return vec3( 0 );
+
+} );
+
+//
+
+material.colorNode = customColor();
+
+```
+
+#### Load a texture-based matrix inside a TSL function
+
+This can be used for any other JS and Three.js ecosystem needs. You can manipulate your assets according to the needs of a function. This can work for creating buffers, attributes, uniforms and any other JavaScript operation.
+
+```js
+let bayer16Texture = null;
+
+export const bayer16 = Fn( ( [ uv ] ) => {
+
+	if ( bayer16Texture === null ) {
+
+		const bayer16Base64 = 'data:image/png;base64,...==';
+
+		bayer16Texture = new TextureLoader().load( bayer16Base64 );
+
+	}
+
+	return textureLoad( bayer16Texture, ivec2( uv ).mod( int( 16 ) ) );
+
+} );
+
+//
+
+material.colorNode = bayer16( screenCoordinate );
+
+```
+
+#### The node architecture allows the creation of instances of custom attributes and buffers through simple functions.
+
+```js
+// Range values node example
+
+const randomColor = range( new THREE.Color( 0x000000 ), new THREE.Color( 0xFFFFFF ) );
+
+material.colorNode = randomColor;
+
+//...
+
+const mesh = new THREE.InstancedMesh( geometry, material, count );
+```
+
+#### TSL loves JavaScript
+
+TSL syntax follows JavaScript style because they are the same thing, so if you come from GLSL you can explore new possibilities.
+
+```js
+// A simple example of Function closure
+
+const mainTask = Fn( () => {
+
+	const task2 = Fn( ( [ a, b ] ) => {
+
+		return a.add( b ).mul( 0.5 );
+
+	} );
+
+
+	return task2( color( 0x00ff00 ), color( 0x0000ff ) );
+
+} );
+
+//
+
+material.colorNode = mainTask();
+```
+
+#### Simplification
+
+Double render-pass `gaussianBlur()` node. It can be used in the material or in post-processing through a single function. 
+
+```js
+// Applies a double render-pass gaussianBlur and then a grayscale filter before the object with the material is rendered.
+
+const myTexture = texture( map );
+
+material.colorNode = grayscale( gaussianBlur( myTexture, 4 ) );
+```
+
+Accesses what has already been rendered, preserving the render-order for easy refraction effects, avoiding multiple render-pass and manual sorts.
+
+```js
+// Leaving the back in grayscale.
+
+material.colorNode = grayscale( viewportSharedTexture( screenUV ) );
+material.transparent = true;
+```
+
+#### Extend the TSL
+
+You no longer need to create a Material for each desired effect, instead create Nodes. A Node can have access to the Material and can be used in many ways. Extend the TSL from Nodes and let the user use it in creative ways.
+
+A great example of this is [TSL-Textures](https://boytchev.github.io/tsl-textures/).
+
+```js
+import * as THREE from 'three';
+import { simplexNoise } from 'tsl-textures';
+
+material.colorNode = simplexNoise ( {
+	scale: 2,
+	balance: 0,
+	contrast: 0,
+	color: new THREE.Color(16777215),
+	background: new THREE.Color(0),
+	seed: 0
+} );
+
+```
+
+## Constants and explicit conversions
+
+Input functions can be used to create contants and do explicit conversions.
+> Conversions are also performed automatically if the output and input are of different types.
+
+| Name | Returns a constant or convertion of type: |
+| -- | -- |
+| `float( node\|number )` | `float` |
+| `int( node\|number )` | `int` |
+| `uint( node\|number )` | `uint` |
+| `bool( node\|value )` | `boolean` |
+| `color( node\|hex\|r,g,b )` | `color` |
+| `vec2( node\|Vector2\|x,y )` | `vec2` |
+| `vec3( node\|Vector3\|x,y,z )` | `vec3` |
+| `vec4( node\|Vector4\|x,y,z,w )` | `vec4` |
+| `mat2( node\|Matrix2\|a,b,c,d )` | `mat2` |
+| `mat3( node\|Matrix3\|a,b,c,d,e,f,g,h,i )` | `mat3` |
+| `mat4( node\|Matrix4\|a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p )` | `mat4` |
+| `ivec2( node\|x,y )` | `ivec2` |
+| `ivec3( node\|x,y,z )` | `ivec3` |
+| `ivec4( node\|x,y,z,w )` | `ivec4` |
+| `uvec2( node\|x,y )` | `uvec2` |
+| `uvec3( node\|x,y,z )` | `uvec3` |
+| `uvec4( node\|x,y,z,w )` | `uvec4` |
+| `bvec2( node\|x,y )` | `bvec2` |
+| `bvec3( node\|x,y,z )` | `bvec3` |
+| `bvec4( node\|x,y,z,w )` | `bvec4` |
+
+Example:
+
+```js
+import { color, vec2, positionWorld } from 'three/tsl';
+
+// constant
+material.colorNode = color( 0x0066ff );
+
+// conversion
+material.colorNode = vec2( positionWorld ); // result positionWorld.xy
+```
+
+## Conversions
+
+It is also possible to perform conversions using the `method chaining`:
+
+| Name | Returns a constant or conversion of type: |
+| -- | -- |
+| `.toFloat()` | `float` |
+| `.toInt()` | `int` |
+| `.toUint()` | `uint` |
+| `.toBool()` | `boolean` |
+| `.toColor()` | `color` |
+| `.toVec2()` | `vec2` |
+| `.toVec3()` | `vec3` |
+| `.toVec4()` | `vec4` |
+| `.toMat2()` | `mat2` |
+| `.toMat3()` | `mat3` |
+| `.toMat4()` | `mat4` |
+| | |
+| `.toIVec2()` | `ivec2` |
+| `.toIVec3()` | `ivec3` |
+| `.toIVec4()` | `ivec4` |
+| `.toUVec2()` | `uvec2` |
+| `.toUVec3()` | `uvec3` |
+| `.toUVec4()` | `uvec4` |
+| `.toBVec2()` | `bvec2` |
+| `.toBVec3()` | `bvec3` |
+| `.toBVec4()` | `bvec4` |
+
+Example:
+
+```js
+import { positionWorld } from 'three/tsl';
+
+// conversion
+material.colorNode = positionWorld.toVec2(); // result positionWorld.xy
+```
+
+## Uniform
+
+Uniforms are useful to update values of variables like colors, lighting, or transformations without having to recreate the shader program. They are the true variables from a GPU's point of view.
+
+| Name | Description |
+| -- | -- |
+| `uniform( boolean \| number \| Color \| Vector2 \| Vector3 \| Vector4 \| Matrix3 \| Matrix4, type = null )` | Dynamic values. |
+
+Example:
+
+```js
+const myColor = uniform( new THREE.Color( 0x0066FF ) );
+
+material.colorNode = myColor;
+```
+
+### `uniform.on*Update()`
+
+It is also possible to create update events on `uniforms`, which can be defined by the user:
+
+| Name | Description |
+| -- | -- |
+| `.onObjectUpdate( function )` | It will be updated every time an object like `Mesh` is rendered with this `node` in `Material`. |
+| `.onRenderUpdate( function )` | It will be updated once per render, common and shared materials, fog, tone mapping, etc. |
+| `.onFrameUpdate( function )` | It will be updated only once per frame, recommended for values ​​that will be updated only once per frame, regardless of when `render-pass` the frame has, cases like `time` for example. |
+
+Example:
+
+```js
+const posY = uniform( 0 ); // it's possible use uniform( 'float' )
+
+// or using event to be done automatically
+// { object } will be the current rendering object
+posY.onObjectUpdate( ( { object } ) => object.position.y );
+
+// you can also update manually using the .value property
+posY.value = object.position.y;
+
+material.colorNode = posY;
+```
+
+## Swizzle
+
+Swizzling is the technique that allows you to access, reorder, or duplicate the components of a vector using a specific notation within TSL. This is done by combining the identifiers:
+
+```js
+const original = vec3( 1.0, 2.0, 3.0 ); // (x, y, z)
+const swizzled = original.zyx; // swizzled = (3.0, 2.0, 1.0)
+```
+
+It's possible use `xyzw`, `rgba` or `stpq`.
+
+## Operators
+
+| Name | Description |
+| -- | -- |
+| `.add( node \| value, ... )` | Return the addition of two or more value. |
+| `.sub( node \| value )` | Return the subraction 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. |
+| `.mod( node \| value )` | Computes the remainder of dividing the first node by the second. |
+| `.equal( node \| value )` | Checks if two nodes are equal. |
+| `.notEqual( node \| value )` | Checks if two nodes are not equal. |
+| `.lessThan( node \| value )` | Checks if the first node is less than the second. |
+| `.greaterThan( node \| value )` | Checks if the first node is greater than the second. |
+| `.lessThanEqual( node \| value )` | Checks if the first node is less than or equal to the second. |
+| `.greaterThanEqual( node \| value )` | Checks if the first node is greater than or equal to the second. |
+| `.and( node \| value )` | Performs logical AND on two nodes. |
+| `.or( node \| value )` | Performs logical OR on two nodes. |
+| `.not( node \| value )` | Performs logical NOT on a node. |
+| `.xor( node \| value )` | Performs logical XOR on two nodes. |
+| `.bitAnd( node \| value )` | Performs bitwise AND on two nodes. |
+| `.bitNot( node \| value )` | Performs bitwise NOT on a node. |
+| `.bitOr( node \| value )` | Performs bitwise OR on two nodes. |
+| `.bitXor( node \| value )` | Performs bitwise XOR on two nodes. |
+| `.shiftLeft( node \| value )` | Shifts a node to the left. |
+| `.shiftRight( node \| value )` | Shifts a node to the right. |
+| | |
+| `.assign( node \| value )` | Assign one or more value to a and return the same. |
+| `.addAssign( node \| value )` | Adds a value and assigns the result. |
+| `.subAssign( node \| value )` | Subtracts a value and assigns the result. |
+| `.mulAssign( node \| value )` | Multiplies a value and assigns the result. |
+| `.divAssign( node \| value )` | Divides a value and assigns the result. |
+
+```js
+const a = float( 1 );
+const b = float( 2 );
+
+const result = a.add( b ); // output: 3
+```
+
+## Function
+
+### `Fn( function, layout = null )`
+
+It is possible to use classic JS functions or a `Fn()` interface. The main difference is that `Fn()` creates a controllable environment, allowing the use of `stack` where you can use `assign` and `conditional`, while the classic function only allows inline approaches.
+
+Example:
+
+```js
+// tsl function
+const oscSine = Fn( ( [ t = time ] ) => {
+
+	return t.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
+
+} );
+
+// inline function
+export const oscSine = ( t = time ) => t.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
+```
+> Both above can be called with `oscSin( value )`.
+
+TSL allows the entry of parameters as object, this is useful in functions that have many optional arguments.
+
+Example:
+
+```js
+const oscSine = Fn( ( { timer = time } ) => {
+
+	return timer.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
+
+} );
+
+const value = oscSine( { timer: value } );
+```
+
+Parameters as object also allows traditional calls as an array, enabling different types of usage.
+
+```js
+const col = Fn( ( { r, g, b } ) => {
+
+	return vec3( r, g, b );
+
+} );
+
+
+// Any of the options below will return a green color.
+
+material.colorNode = col( 0, 1, 0 ); // option 1
+material.colorNode = col( { r: 0, g: 1, b: 0 } ); // option 2
+```
+
+If you want to use an export function compatible with `tree shaking`, remember to use `/*@__PURE__*/`
+
+```js
+export const oscSawtooth = /*@__PURE__*/ Fn( ( [ timer = time ] ) => timer.fract() );
+```
+
+The second parameter of the function, if there are any parameters, will always be the first if there are none, and is dedicated to `NodeBuilder`. In `NodeBuilder` you can find out details about the current construction process and also obtain objects related to the shader construction, such as `material`, `geometry`, `object`, `camera`, etc.
+
+[See an example](#deferred-function-high-level-of-customization-goodby-defines)
+
+## Variables
+
+Functions used to declare variables.
+
+| Name | Description |
+| -- | -- |
+| `.toVar( node, name = null )` or `Var( node, name = null )` | Converts a node into a reusable variable in the shader. |
+| `.toConst( node, name = null )` or `Const( node, name = null )` | Converts a node into an inline constant. |
+| `property( type, name = null )` | Declares an property but does not assign an initial value. |
+
+The name is optional; if set to `null`, the node system will generate one automatically.  
+Creating a variable, constant, or property can help optimize the shader graph manually or assist in debugging.
+
+```js
+const uvScaled = uv().mul( 10 ).toVar();
+
+material.colorNode = texture( map, uvScaled );
+```
+
+***
+
+## Array
+
+The array() function in TSL allows creating constant or dynamic value arrays; there are many ways to create arrays in TSL.
+
+#### The standard way
+
+```js
+const colors = array( [
+	vec3( 1, 0, 0 ),
+	vec3( 0, 1, 0 ),
+	vec3( 0, 0, 1 )
+] );
+
+const greenColor = colors.element( 1 );
+
+// greenColor: vec3( 0, 1, 0 )
+```
+
+#### Fixed size
+
+```js
+const a = array( 'vec3', 2 );
+
+// a: [ vec3( 0, 0, 0 ), vec3( 0, 0, 0 ) ]
+```
+
+#### Fill with a default value
+
+```js
+const a = vec3( 0, 0, 1 ).toArray( 2 ); 
+
+// a: [ vec3( 0, 0, 1 ), vec3( 0, 0, 1 ) ]
+```
+
+#### Define a type explicitly
+
+```js
+const a = array( [ 0, 1, 2 ], 'uint' );
+const value = a.element( 1 );
+
+// value: 1u
+```
+
+### Array Uniform
+
+It is possible to use the same array logic for uniforms using Three.js native components or primitive values.
+
+```js
+const tintColors = uniformArray( [
+	new Color( 1, 0, 0 ),
+	new Color( 0, 1, 0 ),
+	new Color( 0, 0, 1 )
+], 'color' );
+
+const redColor = tintColors.element( 0 );
+```
+
+#### Accessing values
+
+To access the values you can use `a[ 1 ]` or `a.element( 1 )`. The difference is that `a[ 1 ]` only allows constant values, while `a.element( 1 )` allows the use of dynamic values such as `a.element( index )` where index is a node.
+
+### Array Storage
+
+It is possible to create arrays that can be used in compute shaders and storage operations.
+
+| Name | Description |
+| -- | -- |
+| `instancedArray( array, type )` | Creates an instanced buffer attribute array. |
+| `attributeArray( array, type )` | Creates a buffer attribute array. |
+
+## Varying
+
+Functions used to declare varying.
+
+| Name | Description |
+| -- | -- |
+| `vertexStage( node )` | Computes the node in the vertex stage. |
+| `varying( node, name = null )` | Computes the node in the vertex stage and passes interpolated values to the fragment shader. |
+| `varyingProperty( type, name = null )` | Declares an varying property but does not assign an initial value. |
+
+Let's suppose you want to optimize some calculation in the `vertex stage` but are using it in a slot like `material.colorNode`.
+
+For example:
+
+```js
+// multiplication will be executed in vertex stage
+const normalView = vertexStage( modelNormalMatrix.mul( normalLocal ) );
+
+// normalize will be computed in fragment stage while `normalView` is computed on vertex stage
+material.colorNode = normalView.normalize();
+```
+
+The first parameter of `vertexStage()` `modelNormalMatrix.mul( normalLocal )` will be computed in `vertex stage`, and the return from `vertexStage()` will be a `varying` as we are used in WGSL/GLSL, this can optimize extra calculations in the `fragment stage`. The second parameter of `varying()` allows you to add a custom name in code generation.
+
+If `varying()` is added only to `material.positionNode`, it will only return a simple variable and varying will not be created because `material.positionNode` is one of the only node material input that are computed at the vertex stage.
+
+## Conditional
+
+### If-else
+
+`If-else` conditionals can be used within `Fn()`. Conditionals in `TSL` are built using the `If` function:
+
+```js
+If( conditional, function )
+.ElseIf( conditional, function )
+.Else( function )
+```
+> Notice here the `i` in `If` is capitalized.
+
+Example:
+
+In this example below, we will limit the y position of the geometry to 10.
+
+```js
+const limitPosition = Fn( ( { position } ) => {
+
+	const limit = 10;
+
+	const result = vec3( position );
+
+	If( result.y.greaterThan( limit ), () => {
+
+		result.y = limit;
+
+	} );
+
+	return result;
+
+} );
+
+material.positionNode = limitPosition( { position: positionLocal } );
+```
+
+Example using `elseif`:
+
+```js
+const limitPosition = Fn( ( { position } ) => {
+
+	const limit = 10;
+
+	const result = vec3( position );
+
+	If( result.y.greaterThan( limit ), () => {
+
+		result.y = limit;
+
+	} ).ElseIf( result.y.lessThan( limit ), () => {
+
+		result.y = limit;
+
+	} );
+
+	return result;
+
+} );
+
+material.positionNode = limitPosition( { position: positionLocal } );
+```
+### Switch-Case
+
+A Switch-Case statement is an alternative way to express conditional logic compared to If-Else.
+
+```js
+const col = color();
+
+Switch( 0 )
+	.Case( 0, () => {
+
+		col.assign( color( 1, 0, 0 ) );
+
+	} ).Case( 1, () => {
+
+		col.assign( color( 0, 1, 0 ) );
+
+	} ).Case( 2, 3, () => {
+
+		col.assign( color( 0, 0, 1 ) );
+
+	} ).Default( () => {
+
+		col.assign( color( 1, 1, 1 ) );
+
+	} );
+```
+Notice that there are some rules when using this syntax which differentiate TSL from JavaScript:
+
+- There is no fallthrough support. So each `Case()` statement has an implicit break.
+- A `Case()` statement can hold multiple values (selectors) for testing. 
+
+### Ternary
+
+Different from `if-else`, a ternary conditional will return a value and can be used outside of `Fn()`.
+
+```js
+const result = select( value.greaterThan( 1 ), 1.0, value );
+```
+> Equivalent in JavaScript should be: `value > 1 ? 1.0 : value`
+
+## Loop
+
+This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
+```js
+Loop( count, ( { i } ) => {
+
+} );
+```
+However, it is also possible to define a start and end ranges, data types and loop conditions:
+```js
+Loop( { start: int( 0 ), end: int( 10 ), type: 'int', condition: '<', name: 'i' }, ( { i } ) => {
+
+} );
+```
+Nested loops can be defined in a compacted form:
+```js
+Loop( 10, 5, ( { i, j } ) => {
+
+} );
+```
+Loops that should run backwards can be defined like so:
+```js
+Loop( { start: 10 }, () => {} );
+```
+It is possible to execute with boolean values, similar to the `while` syntax.
+```js
+const value = float( 0 );
+
+Loop( value.lessThan( 10 ), () => {
+
+	value.addAssign( 1 );
+
+} );
+```
+The module also provides `Break()` and `Continue()` TSL expression for loop control.
+
+## Math
+
+| Name | Description |
+| -- | -- |
+| `EPSILON` | A small value used to handle floating-point precision errors. |
+| `INFINITY` | Represent infinity. |
+| `PI` | The mathematical constant π (pi). |
+| `TWO_PI` | Two times π (2π). |
+| `HALF_PI` | Half of π (π/2). |
+| | |
+| `abs( x )` | Return the absolute value of the parameter. |
+| `acos( x )` | Return the arccosine of the parameter. |
+| `all( x )` | Return true if all components of x are true. |
+| `any( x )` | Return true if any component of x is true. |
+| `asin( x )` | Return the arcsine of the parameter. |
+| `atan( y, x )` | Return the arc-tangent of the parameters. |
+| `bitcast( x, y )` | Reinterpret the bits of a value as a different type. |
+| `cbrt( x )` | Return the cube root of the parameter. |
+| `ceil( x )` | Find the nearest integer that is greater than or equal to the parameter. |
+| `clamp( x, min, max )` | Constrain a value to lie between two further values. |
+| `cos( x )` | Return the cosine of the parameter. |
+| `cross( x, y )` | Calculate the cross product of two vectors. |
+| `dFdx( p )` | Return the partial derivative of an argument with respect to x. |
+| `dFdy( p )` | Return the partial derivative of an argument with respect to y. |
+| `degrees( radians )` | Convert a quantity in radians to degrees. |
+| `difference( x, y )` | Calculate the absolute difference between two values. |
+| `distance( x, y )` | Calculate the distance between two points. |
+| `dot( x, y )` | Calculate the dot product of two vectors. |
+| `equals( x, y )` | Return true if x equals y. |
+| `exp( x )` | Return the natural exponentiation of the parameter. |
+| `exp2( x )` | Return 2 raised to the power of the parameter. |
+| `faceforward( N, I, Nref )` | Return a vector pointing in the same direction as another. |
+| `floor( x )` | Find the nearest integer less than or equal to the parameter. |
+| `fract( x )` | Compute the fractional part of the argument. |
+| `fwidth( x )` | Return the sum of the absolute derivatives in x and y. |
+| `inverseSqrt( x )` | Return the inverse of the square root of the parameter. |
+| `length( x )` | Calculate the length of a vector. |
+| `lengthSq( x )` | Calculate the squared length of a vector. |
+| `log( x )` | Return the natural logarithm of the parameter. |
+| `log2( x )` | Return the base 2 logarithm of the parameter. |
+| `max( x, y )` | Return the greater of two values. |
+| `min( x, y )` | Return the lesser of two values. |
+| `mix( x, y, a )` | Linearly interpolate between two values. |
+| `negate( x )` | Negate the value of the parameter ( -x ). |
+| `normalize( x )` | Calculate the unit vector in the same direction as the original vector. |
+| `oneMinus( x )` | Return 1 minus the parameter. |
+| `pow( x, y )` | Return the value of the first parameter raised to the power of the second. |
+| `pow2( x )` | Return the square of the parameter. |
+| `pow3( x )` | Return the cube of the parameter. |
+| `pow4( x )` | Return the fourth power of the parameter. |
+| `radians( degrees )` | Convert a quantity in degrees to radians. |
+| `reciprocal( x )` | Return the reciprocal of the parameter (1/x). |
+| `reflect( I, N )` | Calculate the reflection direction for an incident vector. |
+| `refract( I, N, eta )` | Calculate the refraction direction for an incident vector. |
+| `round( x )` | Round the parameter to the nearest integer. |
+| `saturate( x )` | Constrain a value between 0 and 1. |
+| `sign( x )` | Extract the sign of the parameter. |
+| `sin( x )` | Return the sine of the parameter. |
+| `smoothstep( e0, e1, x )` | Perform Hermite interpolation between two values. |
+| `sqrt( x )` | Return the square root of the parameter. |
+| `step( edge, x )` | Generate a step function by comparing two values. |
+| `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. |
+| `trunc( x )` | Truncate the parameter, removing the fractional part. |
+
+```js
+const value = float( -1 );
+
+// It's possible use `value.abs()` too.
+const positiveValue = abs( value ); // output: 1
+```
+
+## Method chaining
+
+`Method chaining` will only be including operators, converters, math and some core functions. These functions, however, can be used on any `node`.
+
+Example:
+
+`oneMinus()` is a mathematical function like `abs()`, `sin()`. This example uses `.oneMinus()` as a built-in function in the class that returns a new node instead of classic C function like `oneMinus( texture( map ).rgb )`.
+
+```js
+// it will invert the texture color
+material.colorNode = texture( map ).rgb.oneMinus();
+```
+
+You can use mathematical operators on any node, e.g:
+
+```js
+const contrast = .5;
+const brightness = .5;
+
+material.colorNode = texture( map ).mul( contrast ).add( brightness );
+```
+
+## Texture
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `texture( texture, uv = uv(), level = null )` | Retrieves texels from a texture. | `vec4` |
+| `textureLoad( texture, uv, level = null )` | Fetches/loads texels without interpolation. | `vec4` |
+| `textureStore( texture, uv, value )` | Stores a value into a storage texture. | `void` |
+| `textureSize( texture, level = null )` | Returns the size of a texture. | `ivec2` |
+| `textureBicubic( textureNode, strength = null )` | Applies mipped bicubic texture filtering. | `vec4` |
+| `cubeTexture( texture, uvw = reflectVector, level = null )` | Retrieves texels from a cube texture. | `vec4` |
+| `texture3D( texture, uvw = null, level = null )` | Retrieves texels from a 3D texture. | `vec4` |
+| `triplanarTexture( textureX, textureY = null, textureZ = null, scale = float( 1 ), position = positionLocal, normal = normalLocal )` | Computes texture using triplanar mapping based on provided parameters. | `vec4` |
+
+## Attributes
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `attribute( name, type = null )` | Getting geometry attribute using name and type. | `any` |
+| `uv( index = 0 )` | UV attribute named `uv + index`. | `vec2` |
+| `vertexColor( index = 0 )` | Vertex color node for the specified index. | `color` |
+| `instanceIndex` | The index of the current instance. | `uint` |
+| `vertexIndex` | The index of a vertex within a mesh. | `uint` |
+| `drawIndex` | The draw index when using multi-draw. | `uint` |
+| `batch( batchMesh )` | Creates a batch node for BatchedMesh. | `BatchNode` |
+| `instance( instancedMesh )` | Creates an instance node for InstancedMesh. | `InstanceNode` |
+
+## Position
+
+The transformed term reflects the modifications applied by processes such as `skinning`, `morphing`, and similar techniques.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `positionGeometry` | Position attribute of geometry. | `vec3` |
+| `positionLocal` | Transformed local position. | `vec3` |
+| `positionWorld` | Transformed world position. | `vec3` |
+| `positionWorldDirection` | Normalized world direction. | `vec3` |
+| `positionView` | View position. | `vec3` |
+| `positionViewDirection` | Normalized view direction. | `vec3` |
+
+## Normal
+
+The term transformed here also includes following the correct orientation of the face, so that the normals are inverted inside the geometry.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `normalGeometry` | Normal attribute of geometry. | `vec3` |
+| `normalLocal` | Local variable for normal. | `vec3` |
+| `normalView` | Normalized transformed view normal. | `vec3` |
+| `normalViewGeometry` | Normalized view normal. | `vec3` |
+| `normalWorld` | Normalized transformed world normal. | `vec3` |
+| `normalWorldGeometry` | Normalized world normal. | `vec3` |
+
+## Tangent
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `tangentGeometry` | Tangent attribute of geometry. | `vec4` |
+| `tangentLocal` | Local variable for tangent. | `vec3` |
+| `tangentView` | Normalized transformed view tangent. | `vec3` |
+| `tangentWorld` | Normalized transformed world tangent. | `vec3` |
+
+### Bitangent
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `bitangentGeometry` | Normalized bitangent in geometry space. | `vec3` |
+| `bitangentLocal` | Normalized bitangent in local space. | `vec3` |
+| `bitangentView` | Normalized transformed bitangent in view space. | `vec3` |
+| `bitangentWorld` | Normalized transformed bitangent in world space. | `vec3` |
+
+## Camera
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `cameraNear` | Near plane distance of the camera. | `float` |
+| `cameraFar` | Far plane distance of the camera. | `float` |
+| `cameraProjectionMatrix` | Projection matrix of the camera. | `mat4` |
+| `cameraProjectionMatrixInverse` | Inverse projection matrix of the camera. | `mat4` |
+| `cameraViewMatrix` | View matrix of the camera. | `mat4` |
+| `cameraWorldMatrix` | World matrix of the camera. | `mat4` |
+| `cameraNormalMatrix` | Normal matrix of the camera. | `mat3` |
+| `cameraPosition` | World position of the camera. | `vec3` |
+
+## Model
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `modelDirection` | Direction of the model. | `vec3` |
+| `modelViewMatrix` | View-space matrix of the model. | `mat4` |
+| `modelNormalMatrix` | View-space matrix of the model. | `mat3` |
+| `modelWorldMatrix` | World-space matrix of the model. | `mat4` |
+| `modelPosition` | Position of the model. | `vec3` |
+| `modelScale` | Scale of the model. | `vec3` |
+| `modelViewPosition` | View-space position of the model. | `vec3` |
+| `modelWorldMatrixInverse` | Inverse world matrix of the model. | `mat4` |
+| | |
+| `highpModelViewMatrix` | View-space matrix of the model computed on CPU using 64-bit. | `mat4` |
+| `highpModelNormalViewMatrix` | View-space normal matrix of the model computed on CPU using 64-bit. | `mat3` |
+
+## Screen
+
+Screen nodes will return the values related to the current `frame buffer`, either normalized or in `physical pixel units` considering the current `Pixel Ratio`.
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `screenUV` | Returns the normalized frame buffer coordinate. | `vec2` |
+| `screenCoordinate` | Returns the frame buffer coordinate in physical pixel units. | `vec2` |
+| `screenSize` | Returns the frame buffer size in physical pixel units. | `vec2` |
+| `screenDPR` | Returns the device pixel ratio (DPR). | `float` |
+
+## Viewport
+
+`viewport` is influenced by the area defined in `renderer.setViewport()`, different of the values ​​defined in the renderer that are `logical pixel units`, it use `physical pixel units` considering the current `Pixel Ratio`.
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `viewportUV` | Returns the normalized viewport coordinate. | `vec2` |
+| `viewport` | Returns the viewport dimension in physical pixel units. | `vec4` |
+| `viewportCoordinate` | Returns the viewport coordinate in physical pixel units. | `vec2` |
+| `viewportSize` | Returns the viewport size in physical pixel units. | `vec2` |
+| `viewportSharedTexture( uvNode = screenUV, levelNode = null )` | Accesses what has already been rendered, preserving render-order. | `vec4` |
+| `viewportDepthTexture( uvNode = screenUV, levelNode = null )` | Returns the depth texture of the viewport. | `float` |
+| `viewportLinearDepth` | Returns the linear (orthographic) depth value of the current fragment. | `float` |
+| `viewportMipTexture( uvNode = screenUV, levelNode = null, framebufferTexture = null )` | Returns a viewport texture with mipmap generation enabled. | `vec4` |
+| `viewportSafeUV( uv = screenUV )` | Returns safe UV coordinates for refraction purposes. | `vec2` |
+
+## Blend Modes
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `blendBurn( a, b )` | Returns the burn blend mode. | `color` |
+| `blendDodge( a, b )` | Returns the dodge blend mode. | `color` |
+| `blendOverlay( a, b )` | Returns the overlay blend mode. | `color` |
+| `blendScreen( a, b )` | Returns the screen blend mode. | `color` |
+| `blendColor( a, b )` | Returns the (normal) color blend mode. | `color` |
+
+## Reflect
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `reflectView` | Computes reflection direction in view space. | `vec3` |
+| `reflectVector` | Transforms the reflection direction to world space. | `vec3` |
+
+## UV Utils
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `matcapUV` | UV coordinates for matcap texture. | `vec2` |
+| `rotateUV( uv, rotation, centerNode = vec2( 0.5 ) )` | Rotates UV coordinates 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` |
+| `equirectUV( direction = positionWorldDirection )` | Computes UV coordinates for equirectangular mapping based on the direction vector. | `vec2` |
+
+```js
+import { texture, matcapUV } from 'three/tsl';
+
+const matcap = texture( matcapMap, matcapUV );
+```
+
+## Interpolation
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `remap( node, inLow, inHigh, outLow = float( 0 ), outHigh = float( 1 ) )` | Remaps a value from one range to another. | `any` |
+| `remapClamp( node, inLow, inHigh, outLow = float( 0 ), outHigh = float( 1 ) )` | Remaps a value from one range to another, with clamping. | `any` |
+
+## Random
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `hash( seed )` | Generates a hash value in the range [ 0, 1 ] from the given seed. | `float` |
+| `range( min, max )` | Generates a range `attribute` of values between min and max. Attribute randomization is useful when you want to randomize values ​​between instances and not between pixels. | `any` |
+
+## Rotate
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `rotate( position, rotation )` | Applies a rotation to the given position node. Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value. | `vec2`, `vec3`
+
+## Oscillator
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `oscSine( timer = time )` | Generates a sine wave oscillation based on a timer. | `float` |
+| `oscSquare( timer = time )` | Generates a square wave oscillation based on a timer. | `float` |
+| `oscTriangle( timer = time )` | Generates a triangle wave oscillation based on a timer. | `float` |
+| `oscSawtooth( timer = time )` | Generates a sawtooth wave oscillation based on a timer. | `float` |
+
+## Timer
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `time` | Represents the elapsed time in seconds. | `float` |
+| `deltaTime` | Represents the delta time in seconds. | `float` |
+
+## Packing
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `directionToColor( value )` | Converts direction vector to color. | `color` |
+| `colorToDirection( value )` | Converts color to direction vector. | `vec3` |
+
+## Render Pipeline
+
+The `RenderPipeline` provides full control over the rendering process. It enables developers to build complex multi-pass rendering pipelines entirely in JavaScript, combining scene rendering, post-processing, and compute operations in a unified, composable workflow.
+
+#### Basic Usage
+
+```js
+import * as THREE from 'three/webgpu';
+import { pass } from 'three/tsl';
+
+// Create the render pipeline
+const renderPipeline = new THREE.RenderPipeline( renderer );
+
+// Create a scene pass
+const scenePass = pass( scene, camera );
+
+// Set the output
+renderPipeline.outputNode = scenePass;
+
+// In the animation loop
+function animate() {
+
+	renderPipeline.render();
+
+}
+```
+
+### Multiple Render Targets (MRT)
+
+MRT allows capturing multiple outputs from a single render pass. Instead of rendering the scene multiple times to get different data (color, normals, depth, velocity), MRT captures all of them in one draw call—significantly improving performance.
+
+#### Setting up MRT
+
+Use `setMRT()` with the `mrt()` function to define which outputs to capture:
+
+```js
+import { pass, mrt, output, normalView, velocity, directionToColor } from 'three/tsl';
+
+const scenePass = pass( scene, camera );
+
+scenePass.setMRT( mrt( {
+	output: output,                          // Final color output
+	normal: directionToColor( normalView ),  // View-space normals encoded as colors
+	velocity: velocity                       // Motion vectors for temporal effects
+} ) );
+```
+
+Each MRT entry accepts any TSL node, allowing you to customize outputs using formulas, encoders, or material accessors. For example, `directionToColor( normalView )` encodes view-space normals into RGB values. You can use any TSL function to transform, combine, or encode data before writing to the render target.
+
+Within a TSL function `Fn( ( { material, object } ) => { ... } )`, you have complete access to the current material and object being rendered, enabling full customization of outputs.
+
+#### Accessing MRT Buffers
+
+Each MRT output becomes available as a texture node via `getTextureNode()`:
+
+```js
+// Access individual buffers as texture nodes
+const colorTexture = scenePass.getTextureNode( 'output' );
+const normalTexture = scenePass.getTextureNode( 'normal' );
+const velocityTexture = scenePass.getTextureNode( 'velocity' );
+
+// Depth is always available, even without MRT
+const depthTexture = scenePass.getTextureNode( 'depth' );
+```
+
+These texture nodes can be sampled, transformed, and passed to post-processing effects or other passes.
+
+#### Optimizing MRT Textures
+
+You can access the textures to optimize memory usage and bandwidth. Using smaller data types reduces GPU memory transfers, which is critical for performance on bandwidth-limited devices:
+
+```js
+// Use 8-bit format for encoded normals, default is 16-bit
+const normalTexture = scenePass.getTexture( 'normal' );
+normalTexture.type = THREE.UnsignedByteType;
+```
+
+#### Dynamic Pipeline Updates
+
+The pipeline can be updated at runtime:
+
+```js
+if ( showNormals ) {
+
+	renderPipeline.outputNode = prePass;
+
+} else {
+
+	renderPipeline.outputNode = traaPass;
+
+}
+
+renderPipeline.needsUpdate = true;
+```
+
+### Post-Processing
+
+TSL utilities for post-processing effects. They can be used in materials or post-processing passes.
+
+| Name | Description |
+| -- | -- |
+| `afterImage( node, damp = 0.96 )` | Creates an after image effect. |
+| `anamorphic( node, threshold = 0.9, scale = 3, samples = 32 )` | Creates an anamorphic flare effect. |
+| `bloom( node, strength = 1, radius = 0, threshold = 0 )` | Creates a bloom effect. |
+| `boxBlur( textureNode, options = {} )` | Applies a box blur effect. |
+| `chromaticAberration( node, strength = 1.0, center = null, scale = 1.1 )` | Creates a chromatic aberration effect. |
+| `denoise( node, depthNode, normalNode, camera )` | Creates a denoise effect. |
+| `dof( node, viewZNode, focusDistance, focalLength, bokehScale )` | Creates a depth-of-field effect. |
+| `dotScreen( node, angle = 1.57, scale = 1 )` | Creates a dot-screen effect. |
+| `film( inputNode, intensityNode = null, uvNode = null )` | Creates a film grain effect. |
+| `fxaa( node )` | Creates a FXAA anti-aliasing effect. |
+| `gaussianBlur( node, directionNode, sigma, options = {} )` | Creates a gaussian blur effect. |
+| `grayscale( color )` | Converts color to grayscale. |
+| `hashBlur( textureNode, bluramount = float( 0.1 ), options = {} )` | Applies a hash blur effect. |
+| `lut3D( node, lut, size, intensity )` | Creates a LUT color grading effect. |
+| `motionBlur( inputNode, velocity, numSamples = int( 16 ) )` | Creates a motion blur effect. |
+| `outline( scene, camera, params )` | Creates an outline effect around selected objects. |
+| `rgbShift( node, amount = 0.005, angle = 0 )` | Creates an RGB shift effect. |
+| `sepia( color )` | Applies a sepia effect. |
+| `smaa( node )` | Creates a SMAA anti-aliasing effect. |
+| `sobel( node )` | Creates a sobel edge detection effect. |
+| `ssr( colorNode, depthNode, normalNode, metalnessNode, roughnessNode = null, camera = null )` | Creates screen space reflections. |
+| `ssgi( beautyNode, depthNode, normalNode, camera )` | Creates a SSGI effect. |
+| `ao( depthNode, normalNode, camera )` | Creates a Ground Truth Ambient Occlusion (GTAO) effect. |
+| `transition( nodeA, nodeB, mixTextureNode, mixRatio, threshold, useTexture )` | Creates a transition effect between two scenes. |
+| `traa( beautyNode, depthNode, velocityNode, camera )` | Creates a TRAA temporal anti-aliasing effect. |
+| `renderOutput( node, targetColorSpace, targetToneMapping )` | Apply the renderer output settings in the node. |
+
+Example:
+
+```js
+import { grayscale, pass } from 'three/tsl';
+import { gaussianBlur } from 'three/addons/tsl/display/GaussianBlurNode.js';
+
+// Post-processing
+const scenePass = pass( scene, camera );
+const output = scenePass.getTextureNode(); // default parameter is 'output'
+
+renderPipeline.outputNode = grayscale( gaussianBlur( output, 4 ) );
+```
+
+### Render Pass
+
+Functions for creating and managing render passes.
+
+| Name | Description |
+| -- | -- |
+| `pass( scene, camera, options = {} )` | Creates a pass node for rendering a scene. |
+| `mrt( outputNodes )` | Creates a Multiple Render Targets (MRT) node. |
+
+Example:
+
+```js
+import { pass, mrt, output, emissive } from 'three/tsl';
+
+const scenePass = pass( scene, camera );
+
+// Setup MRT
+scenePass.setMRT( mrt( {
+	output: output,
+	emissive: emissive
+} ) );
+
+const outputNode = scenePass.getTextureNode( 'output' );
+const emissiveNode = scenePass.getTextureNode( 'emissive' );
+```
+
+### Compute
+
+Compute shaders allow general-purpose GPU computations. TSL provides functions for creating and managing compute operations.
+
+| Name | Description |
+| -- | -- |
+| `compute( node, count = null, workgroupSize = [ 64 ] )` | Creates a compute node. |
+| `atomicAdd( node, value )` | Performs an atomic addition. |
+| `atomicSub( node, value )` | Performs an atomic subtraction. |
+| `atomicMax( node, value )` | Performs an atomic max operation. |
+| `atomicMin( node, value )` | Performs an atomic min operation. |
+| `atomicAnd( node, value )` | Performs an atomic AND operation. |
+| `atomicOr( node, value )` | Performs an atomic OR operation. |
+| `atomicXor( node, value )` | Performs an atomic XOR operation. |
+| `atomicStore( node, value )` | Stores a value atomically. |
+| `atomicLoad( node )` | Loads a value atomically. |
+| `workgroupBarrier()` | Creates a workgroup barrier. |
+| `storageBarrier()` | Creates a storage barrier. |
+| `textureBarrier()` | Creates a texture barrier. |
+| `barrier()` | Creates a memory barrier. |
+| `workgroupId` | The workgroup ID. |
+| `localId` | The local invocation ID within the workgroup. |
+| `globalId` | The global invocation ID. |
+| `numWorkgroups` | The number of workgroups. |
+| `subgroupSize` | The size of the subgroup. |
+
+Example:
+
+```js
+import { Fn, instancedArray, instanceIndex, deltaTime } from 'three/tsl';
+
+const count = 1000;
+const positionArray = instancedArray( count, 'vec3' );
+
+// create a compute function
+
+const computeShader = Fn( () => {
+
+	const position = positionArray.element( instanceIndex );
+
+	position.x.addAssign( deltaTime );
+
+} )().compute( count );
+
+//
+
+renderer.compute( computeShader );
+```
+
+## Storage
+
+Storage functions allow reading and writing to GPU buffers.
+
+| Name | Description |
+| -- | -- |
+| `storage( attribute, type, count )` | Creates a storage buffer. |
+| `storageTexture( texture )` | Creates a storage texture for read/write operations. |
+
+## Struct
+
+Structs allow you to create custom data types with multiple members. They can be used to organize related data in shaders, define structures for attributes and uniforms.
+
+| Name | Description |
+| -- | -- |
+| `struct( membersLayout, name = null )` | Creates a struct type with the specified member layout. |
+| `outputStruct( ...members )` | Creates an output struct node for returning multiple values. |
+
+Example:
+
+```js
+import { struct, vec3 } from 'three/tsl';
+
+// Define a custom struct
+const BoundingBox = struct( { min: 'vec3', max: 'vec3' } );
+
+// Create a new instance of the struct
+const bb = BoundingBox( vec3( 0 ), vec3( 1 ) ); // style 1
+const bb2 = BoundingBox( { min: vec3( 0 ), max: vec3( 1 ) } ); // style 2
+
+// Access the struct members
+const min = bb.get( 'min' );
+
+// Assign a new value to a member
+min.assign( vec3( -1, -1, -1 ) );
+```
+
+## Flow Control
+
+Functions for controlling shader flow.
+
+| Name | Description |
+| -- | -- |
+| `Discard()` | Discards the current fragment. |
+| `Return()` | Returns from the current function. |
+| `Break()` | Breaks out of a loop. |
+| `Continue()` | Continues to the next iteration of a loop. |
+
+Example:
+
+```js
+import { Fn, If, Discard, uv } from 'three/tsl';
+
+const customFragment = Fn( () => {
+
+	If( uv().x.lessThan( 0.5 ), () => {
+
+		Discard();
+
+	} );
+
+	return vec4( 1, 0, 0, 1 );
+
+} );
+
+material.colorNode = customFragment();
+```
+
+## Fog
+
+Functions for creating fog effects in the scene. Assign the fog node to `scene.fogNode`.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `fog( color, factor )` | Creates a fog node with specified color and fog factor. | `FogNode` |
+| `rangeFogFactor( near, far )` | Creates a linear fog factor based on distance from camera. | `float` |
+| `densityFogFactor( density )` | Creates an exponential squared fog factor for denser fog. | `float` |
+
+Example:
+
+```js
+import { fog, rangeFogFactor, densityFogFactor, color } from 'three/tsl';
+
+// Linear fog (starts at 10 units, fully opaque at 100 units)
+scene.fogNode = fog( color( 0x000000 ), rangeFogFactor( 10, 100 ) );
+
+// Exponential fog (density-based)
+scene.fogNode = fog( color( 0xcccccc ), densityFogFactor( 0.02 ) );
+```
+
+## Color Adjustments
+
+Functions for adjusting and manipulating colors.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `luminance( node )` | Calculates the luminance (perceived brightness) of a color. | `float` |
+| `saturation( node, adjustment = 1 )` | Adjusts the saturation of a color. Values > 1 increase saturation, < 1 decrease. | `color` |
+| `vibrance( node, adjustment = 1 )` | Selectively enhances less saturated colors while preserving already saturated ones. | `color` |
+| `hue( node, adjustment = 0 )` | Rotates the hue of a color. Value is in radians. | `color` |
+| `posterize( node, steps )` | Reduces the number of color levels, creating a poster-like effect. | `color` |
+
+Example:
+
+```js
+import { texture, saturation, hue, posterize } from 'three/tsl';
+
+// Increase saturation
+material.colorNode = saturation( texture( map ), 1.5 );
+
+// Rotate hue by 90 degrees
+material.colorNode = hue( texture( map ), Math.PI / 2 );
+
+// Posterize to 4 color levels
+material.colorNode = posterize( texture( map ), 4 );
+```
+
+## Utilities
+
+Utility functions for common shader tasks.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `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` |
+
+Example:
+
+```js
+import { billboarding } from 'three/tsl';
+
+// Full billboarding (like particles) - faces camera in all directions
+material.vertexNode = billboarding();
+
+// Horizontal only (like trees) - rotates around Y axis only
+material.vertexNode = billboarding( { horizontal: true, vertical: false } );
+```
+
+## NodeMaterial
+
+Check below for more details about `NodeMaterial` inputs.
+
+#### Core
+
+| Name | Description | Type |
+|--|--|--|
+| `.fragmentNode` | Replaces the built-in material logic used in the fragment stage. | `vec4` |
+| `.vertexNode` | Replaces the built-in material logic used in the vertex stage. | `vec4` |
+| `.geometryNode` | Allows you to execute a TSL function to deal with Geometry. | `Fn()` |
+
+#### Basic
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.colorNode` | Replace the logic of `material.color * material.map`. | `materialColor` | `vec4` |
+| `.depthNode` | Customize the `depth` output. | `depth` | `float` |
+| `.opacityNode` | Replace the logic of `material.opacity * material.alphaMap`. | `materialOpacity` | `float` |
+| `.alphaTestNode` | Sets a threshold to discard pixels with low opacity. | `materialAlphaTest` | `float` |
+| `.positionNode` | Represents the vertex positions in local-space. Replace the logic of `material.displacementMap * material.displacementScale + material.displacementBias`. | `positionLocal` | `vec3` |
+
+#### Lighting
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.emissiveNode` | Replace the logic of `material.emissive * material.emissiveIntensity * material.emissiveMap`. | `materialEmissive` | `color` |
+| `.normalNode` | Represents the normals direction in view-space. Replace the logic of `material.normalMap * material.normalScale` and `material.bumpMap * material.bumpScale`. | `materialNormal` | `vec3` |
+| `.lightsNode` | Defines the lights and lighting model that will be used by the material. |  | `lights()` |
+| `.envNode` | Replace the logic of `material.envMap * material.envMapRotation * material.envMapIntensity`. |  | `color` |
+
+#### Backdrop
+
+| Name | Description | Type |
+|--|--|--|
+| `.backdropNode` | Set the current render color to be used before applying `Specular`, useful for `transmission` and `refraction` effects. | `color` |
+| `.backdropAlphaNode` | Define the alpha of `backdropNode`. | `float` |
+
+#### Shadows
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.castShadowNode` | Control the `color` and `opacity` of the shadow that will be projected by the material. |  | `vec4` |
+| `.maskShadowNode` | Define a custom mask for the shadow. |  | `bool` |
+| `.receivedShadowNode` | Handle the shadow cast on the material. |  | `Fn()` |
+| `.receivedShadowPositionNode` | Define the shadow projection position in world-space. | `shadowPositionWorld` | `vec3` |
+| `.aoNode` | Replace the logic of `material.aoMap * aoMapIntensity`. | `materialAO` | `float` |
+
+#### Output
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.maskNode` | Define the material's mask. Unlike opacity, it is discarded at the beginning of rendering, optimizing the process. |  | `bool` |
+| `.mrtNode` | Define a different MRT than the one defined in `pass()`. |  | `mrt()` |
+| `.outputNode` | Defines the material's final output. | `output` | `vec4` |
+
+## LineDashedNodeMaterial
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.dashScaleNode` | Replace the logic of `material.scale`. | `materialLineScale` | `float` |
+| `.dashSizeNode` | Replace the logic of `material.dashSize`. | `materialLineDashSize` | `float` |
+| `.gapSizeNode` | Replace the logic of `material.gapSize`. | `materialLineGapSize` | `float` |
+| `.offsetNode` | Replace the logic of `material.dashOffset`. | `materialLineDashOffset` | `float` |
+
+## MeshPhongNodeMaterial
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.shininessNode` | Replace the logic of `material.shininess`. | `materialShininess` | `float` |
+| `.specularNode` | Replace the logic of `material.specular`. | `materialSpecular` | `color` |
+
+## MeshStandardNodeMaterial
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.metalnessNode` | Replace the logic of `material.metalness * material.metalnessMap`. | `materialMetalness` | `float` |
+| `.roughnessNode` | Replace the logic of `material.roughness * material.roughnessMap`. | `materialRoughness` | `float` |
+
+## MeshPhysicalNodeMaterial
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.clearcoatNode` | Replace the logic of `material.clearcoat * material.clearcoatMap`. | `materialClearcoat` | `float` |
+| `.clearcoatRoughnessNode` | Replace the logic of `material.clearcoatRoughness * material.clearcoatRoughnessMap`. | `materialClearcoatRoughness` | `float` |
+| `.clearcoatNormalNode` | Replace the logic of `material.clearcoatNormalMap * material.clearcoatNormalMapScale`. | `materialClearcoatNormal` | `vec3` |
+| `.sheenNode` | Replace the logic of `material.sheenColor * material.sheenColorMap`. | `materialSheen` | `color` |
+| `.iridescenceNode` | Replace the logic of `material.iridescence`. | `materialIridescence` | `float` |
+| `.iridescenceIORNode` | Replace the logic of `material.iridescenceIOR`. | `materialIridescenceIOR` | `float` |
+| `.iridescenceThicknessNode` | Replace the logic of `material.iridescenceThicknessRange * material.iridescenceThicknessMap`. | `materialIridescenceThickness` | `float` |
+| `.specularIntensityNode` | Replace the logic of `material.specularIntensity * material.specularIntensityMap`. | `materialSpecularIntensity` | `float` |
+| `.specularColorNode` | Replace the logic of `material.specularColor * material.specularColorMap`. | `materialSpecularColor` | `color` |
+| `.iorNode` | Replace the logic of `material.ior`. | `materialIOR` | `float` |
+| `.transmissionNode` | Replace the logic of `material.transmission * material.transmissionMap`. | `materialTransmission` | `color` |
+| `.thicknessNode` | Replace the logic of `material.thickness * material.thicknessMap`. | `materialTransmission` | `float` |
+| `.attenuationDistanceNode` | Replace the logic of `material.attenuationDistance`. | `materialAttenuationDistance` | `float` |
+| `.attenuationColorNode` | Replace the logic of `material.attenuationColor`. | `materialAttenuationColor` | `color` |
+| `.dispersionNode` | Replace the logic of `material.dispersion`. | `materialDispersion` | `float` |
+| `.anisotropyNode` | Replace the logic of `material.anisotropy * material.anisotropyMap`. | `materialAnisotropy` | `vec2` |
+
+## SpriteNodeMaterial
+
+| Name | Description | Type |
+|--|--|--|
+| `.positionNode` | Defines the position. | `vec3` |
+| `.rotationNode` | Defines the rotation. | `float` |
+| `.scaleNode` | Defines the scale. | `vec2` |
+
+## Transitioning common GLSL properties to TSL
+
+| GLSL | TSL | Type |
+| -- | -- | -- |
+| `position` | `positionGeometry` | `vec3` |
+| `transformed` | `positionLocal` | `vec3` |
+| `transformedNormal` | `normalLocal` | `vec3` |
+| `vWorldPosition` | `positionWorld` | `vec3` |
+| `vColor` | `vertexColor()` | `vec3` |
+| `vUv` \| `uv` | `uv()` | `vec2` |
+| `vNormal` | `normalView` | `vec3` |
+| `viewMatrix` | `cameraViewMatrix` | `mat4` |
+| `modelMatrix` | `modelWorldMatrix` | `mat4` |
+| `modelViewMatrix` | `modelViewMatrix` | `mat4` |
+| `projectionMatrix` | `cameraProjectionMatrix` | `mat4` |
+| `diffuseColor` | `material.colorNode` | `vec4` |
+| `gl_FragColor` | `material.fragmentNode` | `vec4` |

+ 74 - 20
docs/index.html

@@ -258,6 +258,7 @@
 					</ul>
 					<h3>Math</h3>
 					<ul>
+						<li><a href="BezierInterpolant.html">BezierInterpolant</a></li>
 						<li><a href="Box2.html">Box2</a></li>
 						<li><a href="Box3.html">Box3</a></li>
 						<li><a href="Color.html">Color</a></li>
@@ -359,6 +360,7 @@
 						<li><a href="NodeBuilder.html">NodeBuilder</a></li>
 						<li><a href="NodeCache.html">NodeCache</a></li>
 						<li><a href="NodeCode.html">NodeCode</a></li>
+						<li><a href="NodeError.html">NodeError</a></li>
 						<li><a href="NodeFrame.html">NodeFrame</a></li>
 						<li><a href="NodeFunction.html">NodeFunction</a></li>
 						<li><a href="NodeFunctionInput.html">NodeFunctionInput</a></li>
@@ -381,7 +383,6 @@
 						<li><a href="PointLightNode.html">PointLightNode</a></li>
 						<li><a href="PointShadowNode.html">PointShadowNode</a></li>
 						<li><a href="PointUVNode.html">PointUVNode</a></li>
-						<li><a href="PosterizeNode.html">PosterizeNode</a></li>
 						<li><a href="ProjectorLightNode.html">ProjectorLightNode</a></li>
 						<li><a href="PropertyNode.html">PropertyNode</a></li>
 						<li><a href="RTTNode.html">RTTNode</a></li>
@@ -394,13 +395,9 @@
 						<li><a href="RemapNode.html">RemapNode</a></li>
 						<li><a href="RenderOutputNode.html">RenderOutputNode</a></li>
 						<li><a href="RendererReferenceNode.html">RendererReferenceNode</a></li>
-						<li><a href="Resources.html">Resources</a></li>
 						<li><a href="RotateNode.html">RotateNode</a></li>
 						<li><a href="SampleNode.html">SampleNode</a></li>
-						<li><a href="SceneNode.html">SceneNode</a></li>
 						<li><a href="ScreenNode.html">ScreenNode</a></li>
-						<li><a href="ScriptableNode.html">ScriptableNode</a></li>
-						<li><a href="ScriptableValueNode.html">ScriptableValueNode</a></li>
 						<li><a href="SetNode.html">SetNode</a></li>
 						<li><a href="ShadowBaseNode.html">ShadowBaseNode</a></li>
 						<li><a href="ShadowMaskModel.html">ShadowMaskModel</a></li>
@@ -408,8 +405,8 @@
 						<li><a href="SkinningNode.html">SkinningNode</a></li>
 						<li><a href="SplitNode.html">SplitNode</a></li>
 						<li><a href="SpotLightNode.html">SpotLightNode</a></li>
-						<li><a href="SpriteSheetUVNode.html">SpriteSheetUVNode</a></li>
 						<li><a href="StackNode.html">StackNode</a></li>
+						<li><a href="StackTrace.html">StackTrace</a></li>
 						<li><a href="StorageArrayElementNode.html">StorageArrayElementNode</a></li>
 						<li><a href="StorageBufferNode.html">StorageBufferNode</a></li>
 						<li><a href="StorageTextureNode.html">StorageTextureNode</a></li>
@@ -461,6 +458,7 @@
 					</ul>
 					<h3>Renderers</h3>
 					<ul>
+						<li><a href="BlendMode.html">BlendMode</a></li>
 						<li><a href="BundleGroup.html">BundleGroup</a></li>
 						<li><a href="CanvasTarget.html">CanvasTarget</a></li>
 						<li><a href="CubeRenderTarget.html">CubeRenderTarget</a></li>
@@ -470,6 +468,7 @@
 						<li><a href="InspectorBase.html">InspectorBase</a></li>
 						<li><a href="PostProcessing.html">PostProcessing</a></li>
 						<li><a href="QuadMesh.html">QuadMesh</a></li>
+						<li><a href="RenderPipeline.html">RenderPipeline</a></li>
 						<li><a href="Renderer.html">Renderer</a></li>
 						<li><a href="Storage3DTexture.html">Storage3DTexture</a></li>
 						<li><a href="StorageArrayTexture.html">StorageArrayTexture</a></li>
@@ -581,6 +580,7 @@
 					</ul>
 					<h3>Environments</h3>
 					<ul>
+						<li><a href="ColorEnvironment.html">ColorEnvironment</a></li>
 						<li><a href="DebugEnvironment.html">DebugEnvironment</a></li>
 						<li><a href="RoomEnvironment.html">RoomEnvironment</a></li>
 					</ul>
@@ -612,6 +612,7 @@
 					</ul>
 					<h3>Helpers</h3>
 					<ul>
+						<li><a href="AnimationPathHelper.html">AnimationPathHelper</a></li>
 						<li><a href="LightProbeHelper.html">LightProbeHelper</a></li>
 						<li><a href="OctreeHelper.html">OctreeHelper</a></li>
 						<li><a href="PositionalAudioHelper.html">PositionalAudioHelper</a></li>
@@ -657,7 +658,9 @@
 					<ul>
 						<li><a href="AMFLoader.html">AMFLoader</a></li>
 						<li><a href="BVHLoader.html">BVHLoader</a></li>
+						<li><a href="ColladaComposer.html">ColladaComposer</a></li>
 						<li><a href="ColladaLoader.html">ColladaLoader</a></li>
+						<li><a href="ColladaParser.html">ColladaParser</a></li>
 						<li><a href="DDSLoader.html">DDSLoader</a></li>
 						<li><a href="DRACOLoader.html">DRACOLoader</a></li>
 						<li><a href="EXRLoader.html">EXRLoader</a></li>
@@ -696,6 +699,7 @@
 						<li><a href="TIFFLoader.html">TIFFLoader</a></li>
 						<li><a href="TTFLoader.html">TTFLoader</a></li>
 						<li><a href="ThreeMFLoader.html">ThreeMFLoader</a></li>
+						<li><a href="USDComposer.html">USDComposer</a></li>
 						<li><a href="USDLoader.html">USDLoader</a></li>
 						<li><a href="UltraHDRLoader.html">UltraHDRLoader</a></li>
 						<li><a href="VOXLoader.html">VOXLoader</a></li>
@@ -706,7 +710,6 @@
 					<h3>Materials</h3>
 					<ul>
 						<li><a href="LDrawConditionalLineMaterial.html">LDrawConditionalLineMaterial</a></li>
-						<li><a href="MeshPostProcessingMaterial.html">MeshPostProcessingMaterial</a></li>
 						<li><a href="WoodNodeMaterial.html">WoodNodeMaterial</a></li>
 					</ul>
 					<h3>Math</h3>
@@ -842,7 +845,6 @@
 						<li><a href="module-FreiChenShader.html">FreiChenShader</a></li>
 						<li><a href="module-GTAOShader.html">GTAOShader</a></li>
 						<li><a href="module-GammaCorrectionShader.html">GammaCorrectionShader</a></li>
-						<li><a href="module-GodRaysShader.html">GodRaysShader</a></li>
 						<li><a href="module-HalftoneShader.html">HalftoneShader</a></li>
 						<li><a href="module-HorizontalBlurShader.html">HorizontalBlurShader</a></li>
 						<li><a href="module-HorizontalTiltShiftShader.html">HorizontalTiltShiftShader</a></li>
@@ -876,6 +878,7 @@
 						<li><a href="AfterImageNode.html">AfterImageNode</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="BloomNode.html">BloomNode</a></li>
 						<li><a href="ChromaticAberrationNode.html">ChromaticAberrationNode</a></li>
 						<li><a href="DenoiseNode.html">DenoiseNode</a></li>
@@ -885,6 +888,7 @@
 						<li><a href="FilmNode.html">FilmNode</a></li>
 						<li><a href="GTAONode.html">GTAONode</a></li>
 						<li><a href="GaussianBlurNode.html">GaussianBlurNode</a></li>
+						<li><a href="GodraysNode.html">GodraysNode</a></li>
 						<li><a href="LensflareNode.html">LensflareNode</a></li>
 						<li><a href="Lut3DNode.html">Lut3DNode</a></li>
 						<li><a href="OutlineNode.html">OutlineNode</a></li>
@@ -892,6 +896,7 @@
 						<li><a href="PixelationNode.html">PixelationNode</a></li>
 						<li><a href="PixelationPassNode.html">PixelationPassNode</a></li>
 						<li><a href="RGBShiftNode.html">RGBShiftNode</a></li>
+						<li><a href="RetroPassNode.html">RetroPassNode</a></li>
 						<li><a href="SMAANode.html">SMAANode</a></li>
 						<li><a href="SSAAPassNode.html">SSAAPassNode</a></li>
 						<li><a href="SSGINode.html">SSGINode</a></li>
@@ -990,7 +995,6 @@
 						<li><a href="TSL.html#asin">asin</a></li>
 						<li><a href="TSL.html#assign">assign</a></li>
 						<li><a href="TSL.html#atan">atan</a></li>
-						<li><a href="TSL.html#atan2">atan2</a></li>
 						<li><a href="TSL.html#atomicAdd">atomicAdd</a></li>
 						<li><a href="TSL.html#atomicAnd">atomicAnd</a></li>
 						<li><a href="TSL.html#atomicFunc">atomicFunc</a></li>
@@ -1009,9 +1013,12 @@
 						<li><a href="TSL.html#backgroundBlurriness">backgroundBlurriness</a></li>
 						<li><a href="TSL.html#backgroundIntensity">backgroundIntensity</a></li>
 						<li><a href="TSL.html#backgroundRotation">backgroundRotation</a></li>
+						<li><a href="TSL.html#barrelMask">barrelMask</a></li>
+						<li><a href="TSL.html#barrelUV">barrelUV</a></li>
 						<li><a href="TSL.html#barrier">barrier</a></li>
 						<li><a href="TSL.html#batch">batch</a></li>
 						<li><a href="TSL.html#bentNormalView">bentNormalView</a></li>
+						<li><a href="TSL.html#bilateralBlur">bilateralBlur</a></li>
 						<li><a href="TSL.html#billboarding">billboarding</a></li>
 						<li><a href="TSL.html#bitAnd">bitAnd</a></li>
 						<li><a href="TSL.html#bitNot">bitNot</a></li>
@@ -1037,7 +1044,6 @@
 						<li><a href="TSL.html#builtinAOContext">builtinAOContext</a></li>
 						<li><a href="TSL.html#builtinShadowContext">builtinShadowContext</a></li>
 						<li><a href="TSL.html#bumpMap">bumpMap</a></li>
-						<li><a href="TSL.html#burn">burn</a></li>
 						<li><a href="TSL.html#bypass">bypass</a></li>
 						<li><a href="TSL.html#cache">cache</a></li>
 						<li><a href="TSL.html#cameraFar">cameraFar</a></li>
@@ -1056,14 +1062,17 @@
 						<li><a href="TSL.html#checker">checker</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#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#clearcoat">clearcoat</a></li>
 						<li><a href="TSL.html#clearcoatNormalView">clearcoatNormalView</a></li>
 						<li><a href="TSL.html#clearcoatRoughness">clearcoatRoughness</a></li>
+						<li><a href="TSL.html#clipSpace">clipSpace</a></li>
 						<li><a href="TSL.html#clipping">clipping</a></li>
 						<li><a href="TSL.html#clippingAlpha">clippingAlpha</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#colorSpaceToWorking">colorSpaceToWorking</a></li>
 						<li><a href="TSL.html#colorToDirection">colorToDirection</a></li>
 						<li><a href="TSL.html#compute">compute</a></li>
@@ -1091,7 +1100,6 @@
 						<li><a href="TSL.html#degrees">degrees</a></li>
 						<li><a href="TSL.html#deltaTime">deltaTime</a></li>
 						<li><a href="TSL.html#denoise">denoise</a></li>
-						<li><a href="TSL.html#densityFog">densityFog</a></li>
 						<li><a href="TSL.html#densityFogFactor">densityFogFactor</a></li>
 						<li><a href="TSL.html#depth">depth</a></li>
 						<li><a href="TSL.html#depthBase">depthBase</a></li>
@@ -1105,7 +1113,6 @@
 						<li><a href="TSL.html#dispersion">dispersion</a></li>
 						<li><a href="TSL.html#distance">distance</a></li>
 						<li><a href="TSL.html#div">div</a></li>
-						<li><a href="TSL.html#dodge">dodge</a></li>
 						<li><a href="TSL.html#dof">dof</a></li>
 						<li><a href="TSL.html#dot">dot</a></li>
 						<li><a href="TSL.html#dotScreen">dotScreen</a></li>
@@ -1113,10 +1120,10 @@
 						<li><a href="TSL.html#dynamicBufferAttribute">dynamicBufferAttribute</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#equals">equals</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#exp2">exp2</a></li>
+						<li><a href="TSL.html#exponentialHeightFogFactor">exponentialHeightFogFactor</a></li>
 						<li><a href="TSL.html#expression">expression</a></li>
 						<li><a href="TSL.html#faceDirection">faceDirection</a></li>
 						<li><a href="TSL.html#faceForward">faceForward</a></li>
@@ -1142,6 +1149,7 @@
 						<li><a href="TSL.html#getViewPosition">getViewPosition</a></li>
 						<li><a href="TSL.html#globalId">globalId</a></li>
 						<li><a href="TSL.html#glsl">glsl</a></li>
+						<li><a href="TSL.html#godrays">godrays</a></li>
 						<li><a href="TSL.html#grayscale">grayscale</a></li>
 						<li><a href="TSL.html#greaterThan">greaterThan</a></li>
 						<li><a href="TSL.html#greaterThanEqual">greaterThanEqual</a></li>
@@ -1290,7 +1298,6 @@
 						<li><a href="TSL.html#outline">outline</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#overlay">overlay</a></li>
 						<li><a href="TSL.html#overloadingFn">overloadingFn</a></li>
 						<li><a href="TSL.html#packHalf2x16">packHalf2x16</a></li>
 						<li><a href="TSL.html#packSnorm2x16">packSnorm2x16</a></li>
@@ -1332,7 +1339,6 @@
 						<li><a href="TSL.html#radians">radians</a></li>
 						<li><a href="TSL.html#rand">rand</a></li>
 						<li><a href="TSL.html#range">range</a></li>
-						<li><a href="TSL.html#rangeFog">rangeFog</a></li>
 						<li><a href="TSL.html#rangeFogFactor">rangeFogFactor</a></li>
 						<li><a href="TSL.html#reciprocal">reciprocal</a></li>
 						<li><a href="TSL.html#reference">reference</a></li>
@@ -1351,6 +1357,7 @@
 						<li><a href="TSL.html#renderOutput">renderOutput</a></li>
 						<li><a href="TSL.html#rendererReference">rendererReference</a></li>
 						<li><a href="TSL.html#replaceDefaultUV">replaceDefaultUV</a></li>
+						<li><a href="TSL.html#retroPass">retroPass</a></li>
 						<li><a href="TSL.html#rgbShift">rgbShift</a></li>
 						<li><a href="TSL.html#rotate">rotate</a></li>
 						<li><a href="TSL.html#rotateUV">rotateUV</a></li>
@@ -1363,13 +1370,11 @@
 						<li><a href="TSL.html#samplerComparison">samplerComparison</a></li>
 						<li><a href="TSL.html#saturate">saturate</a></li>
 						<li><a href="TSL.html#saturation">saturation</a></li>
-						<li><a href="TSL.html#screen">screen</a></li>
+						<li><a href="TSL.html#scanlines">scanlines</a></li>
 						<li><a href="TSL.html#screenCoordinate">screenCoordinate</a></li>
 						<li><a href="TSL.html#screenDPR">screenDPR</a></li>
 						<li><a href="TSL.html#screenSize">screenSize</a></li>
 						<li><a href="TSL.html#screenUV">screenUV</a></li>
-						<li><a href="TSL.html#scriptable">scriptable</a></li>
-						<li><a href="TSL.html#scriptableValue">scriptableValue</a></li>
 						<li><a href="TSL.html#select">select</a></li>
 						<li><a href="TSL.html#sepia">sepia</a></li>
 						<li><a href="TSL.html#setName">setName</a></li>
@@ -1407,7 +1412,6 @@
 						<li><a href="TSL.html#storage">storage</a></li>
 						<li><a href="TSL.html#storageBarrier">storageBarrier</a></li>
 						<li><a href="TSL.html#storageElement">storageElement</a></li>
-						<li><a href="TSL.html#storageObject">storageObject</a></li>
 						<li><a href="TSL.html#storageTexture">storageTexture</a></li>
 						<li><a href="TSL.html#struct">struct</a></li>
 						<li><a href="TSL.html#sub">sub</a></li>
@@ -1496,16 +1500,20 @@
 						<li><a href="TSL.html#viewZToLogarithmicDepth">viewZToLogarithmicDepth</a></li>
 						<li><a href="TSL.html#viewZToOrthographicDepth">viewZToOrthographicDepth</a></li>
 						<li><a href="TSL.html#viewZToPerspectiveDepth">viewZToPerspectiveDepth</a></li>
+						<li><a href="TSL.html#viewZToReversedOrthographicDepth">viewZToReversedOrthographicDepth</a></li>
+						<li><a href="TSL.html#viewZToReversedPerspectiveDepth">viewZToReversedPerspectiveDepth</a></li>
 						<li><a href="TSL.html#viewport">viewport</a></li>
 						<li><a href="TSL.html#viewportCoordinate">viewportCoordinate</a></li>
 						<li><a href="TSL.html#viewportDepthTexture">viewportDepthTexture</a></li>
 						<li><a href="TSL.html#viewportLinearDepth">viewportLinearDepth</a></li>
 						<li><a href="TSL.html#viewportMipTexture">viewportMipTexture</a></li>
+						<li><a href="TSL.html#viewportOpaqueMipTexture">viewportOpaqueMipTexture</a></li>
 						<li><a href="TSL.html#viewportSafeUV">viewportSafeUV</a></li>
 						<li><a href="TSL.html#viewportSharedTexture">viewportSharedTexture</a></li>
 						<li><a href="TSL.html#viewportSize">viewportSize</a></li>
 						<li><a href="TSL.html#viewportTexture">viewportTexture</a></li>
 						<li><a href="TSL.html#viewportUV">viewportUV</a></li>
+						<li><a href="TSL.html#vignette">vignette</a></li>
 						<li><a href="TSL.html#vogelDiskSample">vogelDiskSample</a></li>
 						<li><a href="TSL.html#wgsl">wgsl</a></li>
 						<li><a href="TSL.html#workgroupArray">workgroupArray</a></li>
@@ -1526,6 +1534,8 @@
 						<li><a href="global.html#AlwaysCompare">AlwaysCompare</a></li>
 						<li><a href="global.html#AlwaysDepth">AlwaysDepth</a></li>
 						<li><a href="global.html#AlwaysStencilFunc">AlwaysStencilFunc</a></li>
+						<li><a href="global.html#AnaglyphAlgorithm">AnaglyphAlgorithm</a></li>
+						<li><a href="global.html#AnaglyphColorMode">AnaglyphColorMode</a></li>
 						<li><a href="global.html#AttachedBindMode">AttachedBindMode</a></li>
 						<li><a href="global.html#BackSide">BackSide</a></li>
 						<li><a href="global.html#BasicDepthPacking">BasicDepthPacking</a></li>
@@ -1534,6 +1544,7 @@
 						<li><a href="global.html#ByteType">ByteType</a></li>
 						<li><a href="global.html#CineonToneMapping">CineonToneMapping</a></li>
 						<li><a href="global.html#ClampToEdgeWrapping">ClampToEdgeWrapping</a></li>
+						<li><a href="global.html#Compatibility">Compatibility</a></li>
 						<li><a href="global.html#ConstantAlphaFactor">ConstantAlphaFactor</a></li>
 						<li><a href="global.html#ConstantColorFactor">ConstantColorFactor</a></li>
 						<li><a href="global.html#CubeReflectionMapping">CubeReflectionMapping</a></li>
@@ -1577,6 +1588,7 @@
 						<li><a href="global.html#IncrementStencilOp">IncrementStencilOp</a></li>
 						<li><a href="global.html#IncrementWrapStencilOp">IncrementWrapStencilOp</a></li>
 						<li><a href="global.html#IntType">IntType</a></li>
+						<li><a href="global.html#InterpolateBezier">InterpolateBezier</a></li>
 						<li><a href="global.html#InterpolateDiscrete">InterpolateDiscrete</a></li>
 						<li><a href="global.html#InterpolateLinear">InterpolateLinear</a></li>
 						<li><a href="global.html#InterpolateSmooth">InterpolateSmooth</a></li>
@@ -1601,6 +1613,7 @@
 						<li><a href="global.html#LoopPingPong">LoopPingPong</a></li>
 						<li><a href="global.html#LoopRepeat">LoopRepeat</a></li>
 						<li><a href="global.html#MOUSE">MOUSE</a></li>
+						<li><a href="global.html#MaterialBlending">MaterialBlending</a></li>
 						<li><a href="global.html#MaxEquation">MaxEquation</a></li>
 						<li><a href="global.html#MinEquation">MinEquation</a></li>
 						<li><a href="global.html#MirroredRepeatWrapping">MirroredRepeatWrapping</a></li>
@@ -1700,7 +1713,6 @@
 						<li><a href="global.html#SRGBColorSpace">SRGBColorSpace</a></li>
 						<li><a href="global.html#SRGBTransfer">SRGBTransfer</a></li>
 						<li><a href="global.html#SRGB_TO_LINEAR">SRGB_TO_LINEAR</a></li>
-						<li><a href="global.html#ScriptableNodeResources">ScriptableNodeResources</a></li>
 						<li><a href="global.html#ShortType">ShortType</a></li>
 						<li><a href="global.html#SrcAlphaFactor">SrcAlphaFactor</a></li>
 						<li><a href="global.html#SrcAlphaSaturateFactor">SrcAlphaSaturateFactor</a></li>
@@ -1745,11 +1757,15 @@
 						<li><a href="global.html#contain">contain</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#createCanvasElement">createCanvasElement</a></li>
 						<li><a href="global.html#createEvent">createEvent</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#denormalize">denormalize</a></li>
+						<li><a href="global.html#depthAwareBlend">depthAwareBlend</a></li>
 						<li><a href="global.html#disposeShadowMaterial">disposeShadowMaterial</a></li>
+						<li><a href="global.html#enhanceLogMessage">enhanceLogMessage</a></li>
+						<li><a href="global.html#error">error</a></li>
 						<li><a href="global.html#euclideanModulo">euclideanModulo</a></li>
 						<li><a href="global.html#fill">fill</a></li>
 						<li><a href="global.html#flattenJSON">flattenJSON</a></li>
@@ -1760,7 +1776,10 @@
 						<li><a href="global.html#generateUUID">generateUUID</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#getConsoleFunction">getConsoleFunction</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#getFilteredStack">getFilteredStack</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#getKeyframeOrder">getKeyframeOrder</a></li>
@@ -1783,6 +1802,7 @@
 						<li><a href="global.html#randInt">randInt</a></li>
 						<li><a href="global.html#sample">sample</a></li>
 						<li><a href="global.html#seededRandom">seededRandom</a></li>
+						<li><a href="global.html#setConsoleFunction">setConsoleFunction</a></li>
 						<li><a href="global.html#setProjectionFromUnion">setProjectionFromUnion</a></li>
 						<li><a href="global.html#setQuaternionFromProperEuler">setQuaternionFromProperEuler</a></li>
 						<li><a href="global.html#shadowRenderObjectFunction">shadowRenderObjectFunction</a></li>
@@ -1793,6 +1813,8 @@
 						<li><a href="global.html#updateCamera">updateCamera</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#warn">warn</a></li>
+						<li><a href="global.html#warnOnce">warnOnce</a></li>
 					</ul>
 
 				</div>
@@ -2102,6 +2124,38 @@
 
 				}
 
+				// Sort results: exact matches first, then classes before members
+				const searchLower = v.toLowerCase();
+				results.sort( ( a, b ) => {
+
+					const aName = a.title.split( /[#~]/ ).pop().toLowerCase();
+					const bName = b.title.split( /[#~]/ ).pop().toLowerCase();
+					const aIsClass = ! a.title.includes( '#' ) && ! a.title.includes( '~' );
+					const bIsClass = ! b.title.includes( '#' ) && ! b.title.includes( '~' );
+
+					// Exact match on class name (highest priority)
+					const aExactClass = aIsClass && aName === searchLower;
+					const bExactClass = bIsClass && bName === searchLower;
+					if ( aExactClass !== bExactClass ) return aExactClass ? - 1 : 1;
+
+					// Class starts with search term
+					const aStartsClass = aIsClass && aName.startsWith( searchLower );
+					const bStartsClass = bIsClass && bName.startsWith( searchLower );
+					if ( aStartsClass !== bStartsClass ) return aStartsClass ? - 1 : 1;
+
+					// Exact match on member name
+					const aExact = aName === searchLower;
+					const bExact = bName === searchLower;
+					if ( aExact !== bExact ) return aExact ? - 1 : 1;
+
+					// Classes before members
+					if ( aIsClass !== bIsClass ) return aIsClass ? - 1 : 1;
+
+					// Alphabetically
+					return a.title.localeCompare( b.title );
+
+				} );
+
 				// Display results
 				if ( results.length > 0 ) {
 

+ 2716 - 0
docs/llms-full.txt

@@ -0,0 +1,2716 @@
+# Three.js
+
+> Three.js is a cross-browser JavaScript library for creating 3D graphics using WebGL and WebGPU.
+
+## Instructions for Large Language Models
+
+When generating Three.js code, follow these guidelines:
+
+### 1. Use Import Maps (Not Old CDN Patterns)
+
+WRONG - outdated pattern:
+```html
+<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
+```
+
+CORRECT - modern pattern (always use latest version):
+```html
+<script type="importmap">
+{
+  "imports": {
+    "three": "https://cdn.jsdelivr.net/npm/three@0.183.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.183.0/examples/jsm/"
+  }
+}
+</script>
+<script type="module">
+import * as THREE from 'three';
+import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
+</script>
+```
+
+### 2. Choosing Between WebGLRenderer and WebGPURenderer
+
+Three.js maintains both renderers:
+
+**Use WebGLRenderer** (default, mature):
+- Maximum browser compatibility
+- Well-established, many years of development
+- Most examples and tutorials use this
+
+```js
+import * as THREE from 'three';
+const renderer = new THREE.WebGLRenderer();
+```
+
+**Use WebGPURenderer** when you need:
+- Custom shaders/materials using TSL (Three.js Shading Language)
+- Compute shaders
+- Advanced node-based materials
+
+```js
+import * as THREE from 'three/webgpu';
+const renderer = new THREE.WebGPURenderer();
+await renderer.init();
+```
+
+### 3. TSL (Three.js Shading Language)
+
+When using WebGPURenderer, use TSL instead of raw GLSL for custom materials:
+
+```js
+import { texture, uv, color } from 'three/tsl';
+
+const material = new THREE.MeshStandardNodeMaterial();
+material.colorNode = texture( myTexture ).mul( color( 0xff0000 ) );
+```
+
+TSL benefits:
+- Works with both WebGL and WebGPU backends
+- No string manipulation or onBeforeCompile hacks
+- Type-safe, composable shader nodes
+- Automatic optimization
+
+### 4. NodeMaterial Classes (for WebGPU/TSL)
+
+When using TSL, use node-based materials:
+- MeshBasicNodeMaterial
+- MeshStandardNodeMaterial
+- MeshPhysicalNodeMaterial
+- LineBasicNodeMaterial
+- SpriteNodeMaterial
+
+---
+
+## Complete Code Examples
+
+### Basic Scene with WebGLRenderer
+
+```html
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>Three.js Basic Scene</title>
+  <style>
+    body { margin: 0; }
+  </style>
+</head>
+<body>
+<script type="importmap">
+{
+  "imports": {
+    "three": "https://cdn.jsdelivr.net/npm/three@0.183.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.183.0/examples/jsm/"
+  }
+}
+</script>
+<script type="module">
+import * as THREE from 'three';
+import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
+
+// Scene
+const scene = new THREE.Scene();
+
+// Camera
+const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
+camera.position.z = 5;
+
+// Renderer
+const renderer = new THREE.WebGLRenderer( { antialias: true } );
+renderer.setSize( window.innerWidth, window.innerHeight );
+renderer.setPixelRatio( window.devicePixelRatio );
+document.body.appendChild( renderer.domElement );
+
+// Controls
+const controls = new OrbitControls( camera, renderer.domElement );
+
+// Lighting
+const ambientLight = new THREE.AmbientLight( 0x404040 );
+scene.add( ambientLight );
+
+const directionalLight = new THREE.DirectionalLight( 0xffffff, 1 );
+directionalLight.position.set( 5, 5, 5 );
+scene.add( directionalLight );
+
+// Mesh
+const geometry = new THREE.BoxGeometry( 1, 1, 1 );
+const material = new THREE.MeshStandardMaterial( { color: 0x00ff00 } );
+const cube = new THREE.Mesh( geometry, material );
+scene.add( cube );
+
+// Handle resize
+window.addEventListener( 'resize', () => {
+  camera.aspect = window.innerWidth / window.innerHeight;
+  camera.updateProjectionMatrix();
+  renderer.setSize( window.innerWidth, window.innerHeight );
+} );
+
+// Animation loop
+function animate() {
+  cube.rotation.x += 0.01;
+  cube.rotation.y += 0.01;
+  controls.update();
+  renderer.render( scene, camera );
+}
+renderer.setAnimationLoop( animate );
+</script>
+</body>
+</html>
+```
+
+### Basic Scene with WebGPURenderer and TSL
+
+```html
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>Three.js WebGPU Scene</title>
+  <style>
+    body { margin: 0; }
+  </style>
+</head>
+<body>
+<script type="importmap">
+{
+  "imports": {
+    "three": "https://cdn.jsdelivr.net/npm/three@0.183.0/build/three.webgpu.js",
+    "three/tsl": "https://cdn.jsdelivr.net/npm/three@0.183.0/build/three.tsl.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.183.0/examples/jsm/"
+  }
+}
+</script>
+<script type="module">
+import * as THREE from 'three';
+import { color, positionLocal, sin, time } from 'three/tsl';
+import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
+
+// Scene
+const scene = new THREE.Scene();
+
+// Camera
+const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
+camera.position.z = 5;
+
+// Renderer
+const renderer = new THREE.WebGPURenderer( { antialias: true } );
+renderer.setSize( window.innerWidth, window.innerHeight );
+renderer.setPixelRatio( window.devicePixelRatio );
+document.body.appendChild( renderer.domElement );
+
+await renderer.init();
+
+// Controls
+const controls = new OrbitControls( camera, renderer.domElement );
+
+// Lighting
+const ambientLight = new THREE.AmbientLight( 0x404040 );
+scene.add( ambientLight );
+
+const directionalLight = new THREE.DirectionalLight( 0xffffff, 1 );
+directionalLight.position.set( 5, 5, 5 );
+scene.add( directionalLight );
+
+// Custom TSL material
+const material = new THREE.MeshStandardNodeMaterial();
+material.colorNode = color( 0x00ff00 ).mul( sin( time ).mul( 0.5 ).add( 0.5 ) );
+material.positionNode = positionLocal.add( sin( time.add( positionLocal.y ) ).mul( 0.1 ) );
+
+// Mesh
+const geometry = new THREE.BoxGeometry( 1, 1, 1 );
+const cube = new THREE.Mesh( geometry, material );
+scene.add( cube );
+
+// Handle resize
+window.addEventListener( 'resize', () => {
+  camera.aspect = window.innerWidth / window.innerHeight;
+  camera.updateProjectionMatrix();
+  renderer.setSize( window.innerWidth, window.innerHeight );
+} );
+
+// Animation loop
+function animate() {
+  cube.rotation.x += 0.01;
+  cube.rotation.y += 0.01;
+  controls.update();
+  renderer.render( scene, camera );
+}
+renderer.setAnimationLoop( animate );
+</script>
+</body>
+</html>
+```
+
+### Loading a GLTF Model
+
+```js
+import * as THREE from 'three';
+import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
+
+const loader = new GLTFLoader();
+
+loader.load(
+  'model.glb',
+  ( gltf ) => {
+    scene.add( gltf.scene );
+  },
+  ( progress ) => {
+    console.log( ( progress.loaded / progress.total * 100 ) + '% loaded' );
+  },
+  ( error ) => {
+    console.error( 'Error loading model:', error );
+  }
+);
+```
+
+---
+
+# TSL (Three.js Shading Language) - Complete Reference
+
+## TSL Specification
+
+An Approach to Productive and Maintainable Shader Creation.
+
+- [Introduction](#introduction)
+  - [Why TSL?](#why-tsl)
+  - [Example](#example)
+  - [Architecture](#architecture)
+- [Learning TSL](#learning-tsl)
+- [Constants and explicit conversions](#constants-and-explicit-conversions)
+- [Conversions](#conversions)
+- [Uniform](#uniform)
+  - [onUpdate](#uniformonupdate)
+- [Swizzle](#swizzle)
+- [Operators](#operators)
+- [Function](#function)
+- [Variables](#variables)
+- [Array](#array)
+  - [Uniform](#array-uniform)
+- [Varying](#varying)
+- [Conditional](#conditional)
+  - [If-else](#if-else)
+  - [Switch-case](#switch-case)
+  - [Ternary](#ternary)
+- [Loop](#loop)
+- [Math](#math)
+- [Method chaining](#method-chaining)
+- [Texture](#texture)
+- [Attributes](#attributes)
+- [Position](#position)
+- [Normal](#normal)
+- [Tangent](#tangent)
+- [Bitangent](#bitangent)
+- [Camera](#camera)
+- [Model](#model)
+- [Screen](#screen)
+- [Viewport](#viewport)
+- [Blend Modes](#blend-modes)
+- [Reflect](#reflect)
+- [UV Utils](#uv-utils)
+- [Interpolation](#interpolation)
+- [Random](#random)
+- [Rotate](#rotate)
+- [Oscillator](#oscillator)
+- [Timer](#timer)
+- [Packing](#packing)
+- [Render Pipeline](#render-pipeline)
+  - [Multiple Render Targets](#multiple-render-targets-mrt)
+  - [Post-Processing](#post-processing)
+  - [Render Pass](#render-pass)
+  - [Compute](#compute)
+- [Storage](#storage)
+- [Struct](#struct)
+- [Flow Control](#flow-control)
+- [Fog](#fog)
+- [Color Adjustments](#color-adjustments)
+- [Utilities](#utilities)
+- [NodeMaterial](#nodematerial)
+  - [LineDashedNodeMaterial](#linedashednodematerial)
+  - [MeshPhongNodeMaterial](#meshphongnodematerial)
+  - [MeshStandardNodeMaterial](#meshstandardnodematerial)
+    - [MeshPhysicalNodeMaterial](#meshphysicalnodematerial)
+  - [SpriteNodeMaterial](#spritenodematerial)
+- [Transitioning common GLSL properties to TSL](#transitioning-common-glsl-properties-to-tsl)
+
+## Introduction
+
+### Why TSL?
+
+Creating shaders has always been an advanced step for most developers; many game developers have never created GLSL code from scratch. The shader graph solution adopted today by the industry has allowed developers more focused on dynamics to create the necessary graphic effects to meet the demands of their projects.
+
+The aim of the project is to create an easy-to-use environment for shader creation. Even if for this we need to create complexity behind it, this happened initially with `Renderer` and now with the `TSL`.
+
+Other benefits that TSL brings besides simplifying shading creation are keeping the `renderer agnostic`, while all the complexity of a material can be imported into different modules and use `tree shaking` without breaking during the process.
+
+### Example
+
+A `detail map` makes things look more real in games. It adds tiny details like cracks or bumps to surfaces. In this example we will scale uv to improve details when seen up close and multiply with a base texture.
+
+#### Old
+
+This is how we would achieve that using `.onBeforeCompile()`:
+
+```js
+const material = new THREE.MeshStandardMaterial();
+material.map = colorMap;
+material.onBeforeCompile = ( shader ) => {
+
+	shader.uniforms.detailMap = { value: detailMap };
+
+	let token = '#define STANDARD';
+
+	let insert = /* glsl */`
+		uniform sampler2D detailMap;
+	`;
+
+	shader.fragmentShader = shader.fragmentShader.replace( token, token + insert );
+
+	token = '#include <map_fragment>';
+
+	insert = /* glsl */`
+		diffuseColor *= texture2D( detailMap, vMapUv * 10.0 );
+	`;
+
+	shader.fragmentShader = shader.fragmentShader.replace( token, token + insert );
+
+};
+```
+
+Any simple change from this makes the code increasingly complicated using `.onBeforeCompile`, the result we have today in the community are countless types of parametric materials that do not communicate with each other, and that need to be updated periodically to be operating, limiting the creativity to create unique materials reusing modules in a simple way.
+
+#### New
+
+With `TSL` the code would look like this:
+
+```js
+import { texture, uv } from 'three/tsl';
+
+const detail = texture( detailMap, uv().mul( 10 ) );
+
+const material = new THREE.MeshStandardNodeMaterial();
+material.colorNode = texture( colorMap ).mul( detail );
+```
+
+`TSL` is also capable of encoding code into different outputs such as `WGSL`/`GLSL` - `WebGPU`/`WebGL`, in addition to optimizing the shader graph automatically and through codes that can be inserted within each `Node`. This allows the developer to focus on productivity and leave the graphical management part to the `Node System`.
+
+Another important feature of a graph shader is that we will no longer need to care about the sequence in which components are created, because the `Node System` will only declare and include it once.
+
+Let's say that you import `positionWorld` into your code, even if another component uses it, the calculations performed to obtain `position world` will only be performed once, as is the case with any other node such as: `normalWorld`, `modelPosition`, etc.
+
+### Architecture
+
+All `TSL` components are extended from `Node` class. The `Node` allows it to communicate with any other, value conversions can be automatic or manual, a `Node` can receive the output value expected by the parent `Node` and modify its own output snippet. It's possible to modulate them using `tree shaking` in the shader construction process, the `Node` will have important information such as `geometry`, `material`, `renderer` as well as the `backend`, which can influence the type and value of output.
+
+The main class responsible for creating the code is `NodeBuilder`. This class can be extended to any output programming language, so you can use TSL for a third language if you wish. Currently `NodeBuilder` has two extended classes, the `WGSLNodeBuilder` aimed at WebGPU and `GLSLNodeBuilder` aimed at WebGL2.
+
+The build process is based on three pillars: `setup`, `analyze` and `generate`.
+
+| | |
+| -- | -- |
+| `setup` | Use `TSL` to create a completely customized code for the `Node` output. The `Node` can use many others within itself, have countless inputs, but there will always be a single output. |
+| `analyze` | This proccess will check the `nodes` that were created in order to create useful information for `generate` the snippet, such as the need to create or not a cache/variable for optimizing a node. |
+| `generate` | An output of `string` will be returned from each `node`. Any node will also be able to create code in the flow of shader, supporting multiple lines. |
+
+`Node` also have a native update process invoked by the `update()` function, these events be called by `frame`, `render call` and `object draw`.
+
+It is also possible to serialize or deserialize a `Node` using `serialize()` and `deserialize()` functions.
+
+## Learning TSL
+
+TSL is a Node-based shader abstraction, written in JavaScript. TSL's functions are inspired by GLSL, but follow a very different concept. WGSL and GLSL are focused on creating GPU programs, in TSL this is one of the features.
+
+### Seamless Integration with JavaScript/TypeScript
+
+- Unified Code
+  - Write shader logic directly in JS/TS, eliminating the need to manipulate strings.
+  - Create and manipulate render objects just like any other JavaScript logic inside a TSL function.
+  - Advanced events to control a Node before and after the object is rendered.
+- JS Ecosystem
+  - Use native **import/export**, **NPM**, and integrate **JS/TS** components directly into your shader logic.
+- Typing
+  - Benefit from better type checking (especially with **TypeScript** and **[@three-types](https://github.com/three-types/three-ts-types)**), increasing code robustness.
+
+### Shader-Graph Inspired Structure
+
+- Focus on Intent
+  - Build materials by connecting nodes through: [positionWorld](#position), [normalWorld](#normal), [screenUV](#screen), [attribute()](#attributes), etc. 
+More declarative("what") vs. imperative("how").
+- Composition & High-Level Concepts
+  - Work with high-level concepts for Node Material like [colorNode](#basic), [roughnessNode](#standard), [metalnessNode](#standard), [positionNode](#basic), etc. This preserves the integrity of the lighting model while allowing customizations, helping to avoid mistakes from incorrect setups.
+- Keeping an eye on software exchange
+  - Modern 3D authoring software uses Shader-Graph based material composition to exchange between other software. TSL already has its own MaterialX integration.
+- Easier Migration
+  - Many functions are directly inspired by GLSL to smooth the learning curve for those with prior experience.
+
+### Rendering Manipulation
+
+- Control rendering steps and create new render-passes per individual TSL functions.
+  - Implement complex effects is easily with nodes using a single function call either in post-processing and in materials allowing the node itself to manage the rendering process as it needs.
+    - `gaussianBlur()`: Double render-pass gaussian blur node. It can be used in the material or in post-processing through a single function.
+  - Easy access to renderer buffers using TSL functions like: 
+    - `viewportSharedTexture()`: Accesses the beauty what has already been rendered, preserving the render-order.
+    - `viewportLinearDepth()`: Accesses the depth what has already been rendered, preserving the render-order.
+  - Integrated Compute Shaders
+    - Perform calculations on buffers using compute stage directly during an object's rendering.
+  - TSL allows dynamic manipulation of renderer functions, which makes it more customizable than intermediate languages ​​that would have to use flags in fixed pipelines for this.
+  - You just need to use the events of a Node for the renderer manipulations, without needing to modify the core.
+
+### Automatic Optimization and Workarounds
+
+- Your TSL code automatically benefits from optimizations and workarounds implemented in the Three.js compiler with each new version.
+  - Simplifications
+    - Automatic type conversions.
+    - Execute a block of code in vertex-stage and get it in fragment-stage just using `vertexStage( node )`.
+    - Automatically choose interpolation method for varyings depending on type.
+    - Don't worry about collisions of global variables internally when using Nodes.
+  - Polyfills
+    - e.g: `textureSample()` function in the vertex shader (not natively supported in WGSL) is correctly transpiled to work.
+    - e.g: Automatic correction for the `pow()` function, which didn't accept negative bases on Windows/DirectX using WGSL.
+  - Optimizations
+    - Repeated expressions: TSL can automatically create temporary variables to avoid redundant calculations.
+    - Automatic reuse of uniforms and attributes.
+    - Creating varying only if necessary. Otherwise they are replaced by simple variables.
+
+### Target audience
+  - Beginners users
+    - You only need one line to create your first custom shader.
+  - Advanced users
+    - Makes creating shaders simple but not limited. Example: https://www.youtube.com/watch?v=C2gDL9Qk_vo
+    - If you don't like fixed pipelines and low level, you'll love this.
+
+### Share everything
+
+#### TSL is based on Nodes, so don’t worry about sharing your **functions** and **uniforms** across materials and post-processing.
+
+```js
+// Shared the same uniform with various materials
+
+const sharedColor = uniform( new THREE.Color() );
+
+materialA.colorNode = sharedColor.div( 2 );
+materialB.colorNode = sharedColor.mul( .5 );
+materialC.colorNode = sharedColor.add( .5 );
+```
+
+#### Deferred Function: High level of customization, goodby **#defines**
+
+Access **material**, **geometry**, **object**, **camera**, **scene**, **renderer** and more directly from a TSL function. Function calls are only performed at the time of building the shader allowing you to customize the function according to the object's setup.
+
+```js
+// Returns an uniform of the material's custom color if it exists 
+
+const customColor = Fn( ( { material, geometry, object } ) => {
+
+	if ( material.userData.customColor !== undefined ) {
+
+		return uniform( material.userData.customColor );
+
+	}
+
+	return vec3( 0 );
+
+} );
+
+//
+
+material.colorNode = customColor();
+
+```
+
+#### Load a texture-based matrix inside a TSL function
+
+This can be used for any other JS and Three.js ecosystem needs. You can manipulate your assets according to the needs of a function. This can work for creating buffers, attributes, uniforms and any other JavaScript operation.
+
+```js
+let bayer16Texture = null;
+
+export const bayer16 = Fn( ( [ uv ] ) => {
+
+	if ( bayer16Texture === null ) {
+
+		const bayer16Base64 = 'data:image/png;base64,...==';
+
+		bayer16Texture = new TextureLoader().load( bayer16Base64 );
+
+	}
+
+	return textureLoad( bayer16Texture, ivec2( uv ).mod( int( 16 ) ) );
+
+} );
+
+//
+
+material.colorNode = bayer16( screenCoordinate );
+
+```
+
+#### The node architecture allows the creation of instances of custom attributes and buffers through simple functions.
+
+```js
+// Range values node example
+
+const randomColor = range( new THREE.Color( 0x000000 ), new THREE.Color( 0xFFFFFF ) );
+
+material.colorNode = randomColor;
+
+//...
+
+const mesh = new THREE.InstancedMesh( geometry, material, count );
+```
+
+#### TSL loves JavaScript
+
+TSL syntax follows JavaScript style because they are the same thing, so if you come from GLSL you can explore new possibilities.
+
+```js
+// A simple example of Function closure
+
+const mainTask = Fn( () => {
+
+	const task2 = Fn( ( [ a, b ] ) => {
+
+		return a.add( b ).mul( 0.5 );
+
+	} );
+
+
+	return task2( color( 0x00ff00 ), color( 0x0000ff ) );
+
+} );
+
+//
+
+material.colorNode = mainTask();
+```
+
+#### Simplification
+
+Double render-pass `gaussianBlur()` node. It can be used in the material or in post-processing through a single function. 
+
+```js
+// Applies a double render-pass gaussianBlur and then a grayscale filter before the object with the material is rendered.
+
+const myTexture = texture( map );
+
+material.colorNode = grayscale( gaussianBlur( myTexture, 4 ) );
+```
+
+Accesses what has already been rendered, preserving the render-order for easy refraction effects, avoiding multiple render-pass and manual sorts.
+
+```js
+// Leaving the back in grayscale.
+
+material.colorNode = grayscale( viewportSharedTexture( screenUV ) );
+material.transparent = true;
+```
+
+#### Extend the TSL
+
+You no longer need to create a Material for each desired effect, instead create Nodes. A Node can have access to the Material and can be used in many ways. Extend the TSL from Nodes and let the user use it in creative ways.
+
+A great example of this is [TSL-Textures](https://boytchev.github.io/tsl-textures/).
+
+```js
+import * as THREE from 'three';
+import { simplexNoise } from 'tsl-textures';
+
+material.colorNode = simplexNoise ( {
+	scale: 2,
+	balance: 0,
+	contrast: 0,
+	color: new THREE.Color(16777215),
+	background: new THREE.Color(0),
+	seed: 0
+} );
+
+```
+
+## Constants and explicit conversions
+
+Input functions can be used to create contants and do explicit conversions.
+> Conversions are also performed automatically if the output and input are of different types.
+
+| Name | Returns a constant or convertion of type: |
+| -- | -- |
+| `float( node\|number )` | `float` |
+| `int( node\|number )` | `int` |
+| `uint( node\|number )` | `uint` |
+| `bool( node\|value )` | `boolean` |
+| `color( node\|hex\|r,g,b )` | `color` |
+| `vec2( node\|Vector2\|x,y )` | `vec2` |
+| `vec3( node\|Vector3\|x,y,z )` | `vec3` |
+| `vec4( node\|Vector4\|x,y,z,w )` | `vec4` |
+| `mat2( node\|Matrix2\|a,b,c,d )` | `mat2` |
+| `mat3( node\|Matrix3\|a,b,c,d,e,f,g,h,i )` | `mat3` |
+| `mat4( node\|Matrix4\|a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p )` | `mat4` |
+| `ivec2( node\|x,y )` | `ivec2` |
+| `ivec3( node\|x,y,z )` | `ivec3` |
+| `ivec4( node\|x,y,z,w )` | `ivec4` |
+| `uvec2( node\|x,y )` | `uvec2` |
+| `uvec3( node\|x,y,z )` | `uvec3` |
+| `uvec4( node\|x,y,z,w )` | `uvec4` |
+| `bvec2( node\|x,y )` | `bvec2` |
+| `bvec3( node\|x,y,z )` | `bvec3` |
+| `bvec4( node\|x,y,z,w )` | `bvec4` |
+
+Example:
+
+```js
+import { color, vec2, positionWorld } from 'three/tsl';
+
+// constant
+material.colorNode = color( 0x0066ff );
+
+// conversion
+material.colorNode = vec2( positionWorld ); // result positionWorld.xy
+```
+
+## Conversions
+
+It is also possible to perform conversions using the `method chaining`:
+
+| Name | Returns a constant or conversion of type: |
+| -- | -- |
+| `.toFloat()` | `float` |
+| `.toInt()` | `int` |
+| `.toUint()` | `uint` |
+| `.toBool()` | `boolean` |
+| `.toColor()` | `color` |
+| `.toVec2()` | `vec2` |
+| `.toVec3()` | `vec3` |
+| `.toVec4()` | `vec4` |
+| `.toMat2()` | `mat2` |
+| `.toMat3()` | `mat3` |
+| `.toMat4()` | `mat4` |
+| | |
+| `.toIVec2()` | `ivec2` |
+| `.toIVec3()` | `ivec3` |
+| `.toIVec4()` | `ivec4` |
+| `.toUVec2()` | `uvec2` |
+| `.toUVec3()` | `uvec3` |
+| `.toUVec4()` | `uvec4` |
+| `.toBVec2()` | `bvec2` |
+| `.toBVec3()` | `bvec3` |
+| `.toBVec4()` | `bvec4` |
+
+Example:
+
+```js
+import { positionWorld } from 'three/tsl';
+
+// conversion
+material.colorNode = positionWorld.toVec2(); // result positionWorld.xy
+```
+
+## Uniform
+
+Uniforms are useful to update values of variables like colors, lighting, or transformations without having to recreate the shader program. They are the true variables from a GPU's point of view.
+
+| Name | Description |
+| -- | -- |
+| `uniform( boolean \| number \| Color \| Vector2 \| Vector3 \| Vector4 \| Matrix3 \| Matrix4, type = null )` | Dynamic values. |
+
+Example:
+
+```js
+const myColor = uniform( new THREE.Color( 0x0066FF ) );
+
+material.colorNode = myColor;
+```
+
+### `uniform.on*Update()`
+
+It is also possible to create update events on `uniforms`, which can be defined by the user:
+
+| Name | Description |
+| -- | -- |
+| `.onObjectUpdate( function )` | It will be updated every time an object like `Mesh` is rendered with this `node` in `Material`. |
+| `.onRenderUpdate( function )` | It will be updated once per render, common and shared materials, fog, tone mapping, etc. |
+| `.onFrameUpdate( function )` | It will be updated only once per frame, recommended for values ​​that will be updated only once per frame, regardless of when `render-pass` the frame has, cases like `time` for example. |
+
+Example:
+
+```js
+const posY = uniform( 0 ); // it's possible use uniform( 'float' )
+
+// or using event to be done automatically
+// { object } will be the current rendering object
+posY.onObjectUpdate( ( { object } ) => object.position.y );
+
+// you can also update manually using the .value property
+posY.value = object.position.y;
+
+material.colorNode = posY;
+```
+
+## Swizzle
+
+Swizzling is the technique that allows you to access, reorder, or duplicate the components of a vector using a specific notation within TSL. This is done by combining the identifiers:
+
+```js
+const original = vec3( 1.0, 2.0, 3.0 ); // (x, y, z)
+const swizzled = original.zyx; // swizzled = (3.0, 2.0, 1.0)
+```
+
+It's possible use `xyzw`, `rgba` or `stpq`.
+
+## Operators
+
+| Name | Description |
+| -- | -- |
+| `.add( node \| value, ... )` | Return the addition of two or more value. |
+| `.sub( node \| value )` | Return the subraction 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. |
+| `.mod( node \| value )` | Computes the remainder of dividing the first node by the second. |
+| `.equal( node \| value )` | Checks if two nodes are equal. |
+| `.notEqual( node \| value )` | Checks if two nodes are not equal. |
+| `.lessThan( node \| value )` | Checks if the first node is less than the second. |
+| `.greaterThan( node \| value )` | Checks if the first node is greater than the second. |
+| `.lessThanEqual( node \| value )` | Checks if the first node is less than or equal to the second. |
+| `.greaterThanEqual( node \| value )` | Checks if the first node is greater than or equal to the second. |
+| `.and( node \| value )` | Performs logical AND on two nodes. |
+| `.or( node \| value )` | Performs logical OR on two nodes. |
+| `.not( node \| value )` | Performs logical NOT on a node. |
+| `.xor( node \| value )` | Performs logical XOR on two nodes. |
+| `.bitAnd( node \| value )` | Performs bitwise AND on two nodes. |
+| `.bitNot( node \| value )` | Performs bitwise NOT on a node. |
+| `.bitOr( node \| value )` | Performs bitwise OR on two nodes. |
+| `.bitXor( node \| value )` | Performs bitwise XOR on two nodes. |
+| `.shiftLeft( node \| value )` | Shifts a node to the left. |
+| `.shiftRight( node \| value )` | Shifts a node to the right. |
+| | |
+| `.assign( node \| value )` | Assign one or more value to a and return the same. |
+| `.addAssign( node \| value )` | Adds a value and assigns the result. |
+| `.subAssign( node \| value )` | Subtracts a value and assigns the result. |
+| `.mulAssign( node \| value )` | Multiplies a value and assigns the result. |
+| `.divAssign( node \| value )` | Divides a value and assigns the result. |
+
+```js
+const a = float( 1 );
+const b = float( 2 );
+
+const result = a.add( b ); // output: 3
+```
+
+## Function
+
+### `Fn( function, layout = null )`
+
+It is possible to use classic JS functions or a `Fn()` interface. The main difference is that `Fn()` creates a controllable environment, allowing the use of `stack` where you can use `assign` and `conditional`, while the classic function only allows inline approaches.
+
+Example:
+
+```js
+// tsl function
+const oscSine = Fn( ( [ t = time ] ) => {
+
+	return t.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
+
+} );
+
+// inline function
+export const oscSine = ( t = time ) => t.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
+```
+> Both above can be called with `oscSin( value )`.
+
+TSL allows the entry of parameters as object, this is useful in functions that have many optional arguments.
+
+Example:
+
+```js
+const oscSine = Fn( ( { timer = time } ) => {
+
+	return timer.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
+
+} );
+
+const value = oscSine( { timer: value } );
+```
+
+Parameters as object also allows traditional calls as an array, enabling different types of usage.
+
+```js
+const col = Fn( ( { r, g, b } ) => {
+
+	return vec3( r, g, b );
+
+} );
+
+
+// Any of the options below will return a green color.
+
+material.colorNode = col( 0, 1, 0 ); // option 1
+material.colorNode = col( { r: 0, g: 1, b: 0 } ); // option 2
+```
+
+If you want to use an export function compatible with `tree shaking`, remember to use `/*@__PURE__*/`
+
+```js
+export const oscSawtooth = /*@__PURE__*/ Fn( ( [ timer = time ] ) => timer.fract() );
+```
+
+The second parameter of the function, if there are any parameters, will always be the first if there are none, and is dedicated to `NodeBuilder`. In `NodeBuilder` you can find out details about the current construction process and also obtain objects related to the shader construction, such as `material`, `geometry`, `object`, `camera`, etc.
+
+[See an example](#deferred-function-high-level-of-customization-goodby-defines)
+
+## Variables
+
+Functions used to declare variables.
+
+| Name | Description |
+| -- | -- |
+| `.toVar( node, name = null )` or `Var( node, name = null )` | Converts a node into a reusable variable in the shader. |
+| `.toConst( node, name = null )` or `Const( node, name = null )` | Converts a node into an inline constant. |
+| `property( type, name = null )` | Declares an property but does not assign an initial value. |
+
+The name is optional; if set to `null`, the node system will generate one automatically.  
+Creating a variable, constant, or property can help optimize the shader graph manually or assist in debugging.
+
+```js
+const uvScaled = uv().mul( 10 ).toVar();
+
+material.colorNode = texture( map, uvScaled );
+```
+
+***
+
+## Array
+
+The array() function in TSL allows creating constant or dynamic value arrays; there are many ways to create arrays in TSL.
+
+#### The standard way
+
+```js
+const colors = array( [
+	vec3( 1, 0, 0 ),
+	vec3( 0, 1, 0 ),
+	vec3( 0, 0, 1 )
+] );
+
+const greenColor = colors.element( 1 );
+
+// greenColor: vec3( 0, 1, 0 )
+```
+
+#### Fixed size
+
+```js
+const a = array( 'vec3', 2 );
+
+// a: [ vec3( 0, 0, 0 ), vec3( 0, 0, 0 ) ]
+```
+
+#### Fill with a default value
+
+```js
+const a = vec3( 0, 0, 1 ).toArray( 2 ); 
+
+// a: [ vec3( 0, 0, 1 ), vec3( 0, 0, 1 ) ]
+```
+
+#### Define a type explicitly
+
+```js
+const a = array( [ 0, 1, 2 ], 'uint' );
+const value = a.element( 1 );
+
+// value: 1u
+```
+
+### Array Uniform
+
+It is possible to use the same array logic for uniforms using Three.js native components or primitive values.
+
+```js
+const tintColors = uniformArray( [
+	new Color( 1, 0, 0 ),
+	new Color( 0, 1, 0 ),
+	new Color( 0, 0, 1 )
+], 'color' );
+
+const redColor = tintColors.element( 0 );
+```
+
+#### Accessing values
+
+To access the values you can use `a[ 1 ]` or `a.element( 1 )`. The difference is that `a[ 1 ]` only allows constant values, while `a.element( 1 )` allows the use of dynamic values such as `a.element( index )` where index is a node.
+
+### Array Storage
+
+It is possible to create arrays that can be used in compute shaders and storage operations.
+
+| Name | Description |
+| -- | -- |
+| `instancedArray( array, type )` | Creates an instanced buffer attribute array. |
+| `attributeArray( array, type )` | Creates a buffer attribute array. |
+
+## Varying
+
+Functions used to declare varying.
+
+| Name | Description |
+| -- | -- |
+| `vertexStage( node )` | Computes the node in the vertex stage. |
+| `varying( node, name = null )` | Computes the node in the vertex stage and passes interpolated values to the fragment shader. |
+| `varyingProperty( type, name = null )` | Declares an varying property but does not assign an initial value. |
+
+Let's suppose you want to optimize some calculation in the `vertex stage` but are using it in a slot like `material.colorNode`.
+
+For example:
+
+```js
+// multiplication will be executed in vertex stage
+const normalView = vertexStage( modelNormalMatrix.mul( normalLocal ) );
+
+// normalize will be computed in fragment stage while `normalView` is computed on vertex stage
+material.colorNode = normalView.normalize();
+```
+
+The first parameter of `vertexStage()` `modelNormalMatrix.mul( normalLocal )` will be computed in `vertex stage`, and the return from `vertexStage()` will be a `varying` as we are used in WGSL/GLSL, this can optimize extra calculations in the `fragment stage`. The second parameter of `varying()` allows you to add a custom name in code generation.
+
+If `varying()` is added only to `material.positionNode`, it will only return a simple variable and varying will not be created because `material.positionNode` is one of the only node material input that are computed at the vertex stage.
+
+## Conditional
+
+### If-else
+
+`If-else` conditionals can be used within `Fn()`. Conditionals in `TSL` are built using the `If` function:
+
+```js
+If( conditional, function )
+.ElseIf( conditional, function )
+.Else( function )
+```
+> Notice here the `i` in `If` is capitalized.
+
+Example:
+
+In this example below, we will limit the y position of the geometry to 10.
+
+```js
+const limitPosition = Fn( ( { position } ) => {
+
+	const limit = 10;
+
+	const result = vec3( position );
+
+	If( result.y.greaterThan( limit ), () => {
+
+		result.y = limit;
+
+	} );
+
+	return result;
+
+} );
+
+material.positionNode = limitPosition( { position: positionLocal } );
+```
+
+Example using `elseif`:
+
+```js
+const limitPosition = Fn( ( { position } ) => {
+
+	const limit = 10;
+
+	const result = vec3( position );
+
+	If( result.y.greaterThan( limit ), () => {
+
+		result.y = limit;
+
+	} ).ElseIf( result.y.lessThan( limit ), () => {
+
+		result.y = limit;
+
+	} );
+
+	return result;
+
+} );
+
+material.positionNode = limitPosition( { position: positionLocal } );
+```
+### Switch-Case
+
+A Switch-Case statement is an alternative way to express conditional logic compared to If-Else.
+
+```js
+const col = color();
+
+Switch( 0 )
+	.Case( 0, () => {
+
+		col.assign( color( 1, 0, 0 ) );
+
+	} ).Case( 1, () => {
+
+		col.assign( color( 0, 1, 0 ) );
+
+	} ).Case( 2, 3, () => {
+
+		col.assign( color( 0, 0, 1 ) );
+
+	} ).Default( () => {
+
+		col.assign( color( 1, 1, 1 ) );
+
+	} );
+```
+Notice that there are some rules when using this syntax which differentiate TSL from JavaScript:
+
+- There is no fallthrough support. So each `Case()` statement has an implicit break.
+- A `Case()` statement can hold multiple values (selectors) for testing. 
+
+### Ternary
+
+Different from `if-else`, a ternary conditional will return a value and can be used outside of `Fn()`.
+
+```js
+const result = select( value.greaterThan( 1 ), 1.0, value );
+```
+> Equivalent in JavaScript should be: `value > 1 ? 1.0 : value`
+
+## Loop
+
+This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
+```js
+Loop( count, ( { i } ) => {
+
+} );
+```
+However, it is also possible to define a start and end ranges, data types and loop conditions:
+```js
+Loop( { start: int( 0 ), end: int( 10 ), type: 'int', condition: '<', name: 'i' }, ( { i } ) => {
+
+} );
+```
+Nested loops can be defined in a compacted form:
+```js
+Loop( 10, 5, ( { i, j } ) => {
+
+} );
+```
+Loops that should run backwards can be defined like so:
+```js
+Loop( { start: 10 }, () => {} );
+```
+It is possible to execute with boolean values, similar to the `while` syntax.
+```js
+const value = float( 0 );
+
+Loop( value.lessThan( 10 ), () => {
+
+	value.addAssign( 1 );
+
+} );
+```
+The module also provides `Break()` and `Continue()` TSL expression for loop control.
+
+## Math
+
+| Name | Description |
+| -- | -- |
+| `EPSILON` | A small value used to handle floating-point precision errors. |
+| `INFINITY` | Represent infinity. |
+| `PI` | The mathematical constant π (pi). |
+| `TWO_PI` | Two times π (2π). |
+| `HALF_PI` | Half of π (π/2). |
+| | |
+| `abs( x )` | Return the absolute value of the parameter. |
+| `acos( x )` | Return the arccosine of the parameter. |
+| `all( x )` | Return true if all components of x are true. |
+| `any( x )` | Return true if any component of x is true. |
+| `asin( x )` | Return the arcsine of the parameter. |
+| `atan( y, x )` | Return the arc-tangent of the parameters. |
+| `bitcast( x, y )` | Reinterpret the bits of a value as a different type. |
+| `cbrt( x )` | Return the cube root of the parameter. |
+| `ceil( x )` | Find the nearest integer that is greater than or equal to the parameter. |
+| `clamp( x, min, max )` | Constrain a value to lie between two further values. |
+| `cos( x )` | Return the cosine of the parameter. |
+| `cross( x, y )` | Calculate the cross product of two vectors. |
+| `dFdx( p )` | Return the partial derivative of an argument with respect to x. |
+| `dFdy( p )` | Return the partial derivative of an argument with respect to y. |
+| `degrees( radians )` | Convert a quantity in radians to degrees. |
+| `difference( x, y )` | Calculate the absolute difference between two values. |
+| `distance( x, y )` | Calculate the distance between two points. |
+| `dot( x, y )` | Calculate the dot product of two vectors. |
+| `equals( x, y )` | Return true if x equals y. |
+| `exp( x )` | Return the natural exponentiation of the parameter. |
+| `exp2( x )` | Return 2 raised to the power of the parameter. |
+| `faceforward( N, I, Nref )` | Return a vector pointing in the same direction as another. |
+| `floor( x )` | Find the nearest integer less than or equal to the parameter. |
+| `fract( x )` | Compute the fractional part of the argument. |
+| `fwidth( x )` | Return the sum of the absolute derivatives in x and y. |
+| `inverseSqrt( x )` | Return the inverse of the square root of the parameter. |
+| `length( x )` | Calculate the length of a vector. |
+| `lengthSq( x )` | Calculate the squared length of a vector. |
+| `log( x )` | Return the natural logarithm of the parameter. |
+| `log2( x )` | Return the base 2 logarithm of the parameter. |
+| `max( x, y )` | Return the greater of two values. |
+| `min( x, y )` | Return the lesser of two values. |
+| `mix( x, y, a )` | Linearly interpolate between two values. |
+| `negate( x )` | Negate the value of the parameter ( -x ). |
+| `normalize( x )` | Calculate the unit vector in the same direction as the original vector. |
+| `oneMinus( x )` | Return 1 minus the parameter. |
+| `pow( x, y )` | Return the value of the first parameter raised to the power of the second. |
+| `pow2( x )` | Return the square of the parameter. |
+| `pow3( x )` | Return the cube of the parameter. |
+| `pow4( x )` | Return the fourth power of the parameter. |
+| `radians( degrees )` | Convert a quantity in degrees to radians. |
+| `reciprocal( x )` | Return the reciprocal of the parameter (1/x). |
+| `reflect( I, N )` | Calculate the reflection direction for an incident vector. |
+| `refract( I, N, eta )` | Calculate the refraction direction for an incident vector. |
+| `round( x )` | Round the parameter to the nearest integer. |
+| `saturate( x )` | Constrain a value between 0 and 1. |
+| `sign( x )` | Extract the sign of the parameter. |
+| `sin( x )` | Return the sine of the parameter. |
+| `smoothstep( e0, e1, x )` | Perform Hermite interpolation between two values. |
+| `sqrt( x )` | Return the square root of the parameter. |
+| `step( edge, x )` | Generate a step function by comparing two values. |
+| `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. |
+| `trunc( x )` | Truncate the parameter, removing the fractional part. |
+
+```js
+const value = float( -1 );
+
+// It's possible use `value.abs()` too.
+const positiveValue = abs( value ); // output: 1
+```
+
+## Method chaining
+
+`Method chaining` will only be including operators, converters, math and some core functions. These functions, however, can be used on any `node`.
+
+Example:
+
+`oneMinus()` is a mathematical function like `abs()`, `sin()`. This example uses `.oneMinus()` as a built-in function in the class that returns a new node instead of classic C function like `oneMinus( texture( map ).rgb )`.
+
+```js
+// it will invert the texture color
+material.colorNode = texture( map ).rgb.oneMinus();
+```
+
+You can use mathematical operators on any node, e.g:
+
+```js
+const contrast = .5;
+const brightness = .5;
+
+material.colorNode = texture( map ).mul( contrast ).add( brightness );
+```
+
+## Texture
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `texture( texture, uv = uv(), level = null )` | Retrieves texels from a texture. | `vec4` |
+| `textureLoad( texture, uv, level = null )` | Fetches/loads texels without interpolation. | `vec4` |
+| `textureStore( texture, uv, value )` | Stores a value into a storage texture. | `void` |
+| `textureSize( texture, level = null )` | Returns the size of a texture. | `ivec2` |
+| `textureBicubic( textureNode, strength = null )` | Applies mipped bicubic texture filtering. | `vec4` |
+| `cubeTexture( texture, uvw = reflectVector, level = null )` | Retrieves texels from a cube texture. | `vec4` |
+| `texture3D( texture, uvw = null, level = null )` | Retrieves texels from a 3D texture. | `vec4` |
+| `triplanarTexture( textureX, textureY = null, textureZ = null, scale = float( 1 ), position = positionLocal, normal = normalLocal )` | Computes texture using triplanar mapping based on provided parameters. | `vec4` |
+
+## Attributes
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `attribute( name, type = null )` | Getting geometry attribute using name and type. | `any` |
+| `uv( index = 0 )` | UV attribute named `uv + index`. | `vec2` |
+| `vertexColor( index = 0 )` | Vertex color node for the specified index. | `color` |
+| `instanceIndex` | The index of the current instance. | `uint` |
+| `vertexIndex` | The index of a vertex within a mesh. | `uint` |
+| `drawIndex` | The draw index when using multi-draw. | `uint` |
+| `batch( batchMesh )` | Creates a batch node for BatchedMesh. | `BatchNode` |
+| `instance( instancedMesh )` | Creates an instance node for InstancedMesh. | `InstanceNode` |
+
+## Position
+
+The transformed term reflects the modifications applied by processes such as `skinning`, `morphing`, and similar techniques.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `positionGeometry` | Position attribute of geometry. | `vec3` |
+| `positionLocal` | Transformed local position. | `vec3` |
+| `positionWorld` | Transformed world position. | `vec3` |
+| `positionWorldDirection` | Normalized world direction. | `vec3` |
+| `positionView` | View position. | `vec3` |
+| `positionViewDirection` | Normalized view direction. | `vec3` |
+
+## Normal
+
+The term transformed here also includes following the correct orientation of the face, so that the normals are inverted inside the geometry.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `normalGeometry` | Normal attribute of geometry. | `vec3` |
+| `normalLocal` | Local variable for normal. | `vec3` |
+| `normalView` | Normalized transformed view normal. | `vec3` |
+| `normalViewGeometry` | Normalized view normal. | `vec3` |
+| `normalWorld` | Normalized transformed world normal. | `vec3` |
+| `normalWorldGeometry` | Normalized world normal. | `vec3` |
+
+## Tangent
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `tangentGeometry` | Tangent attribute of geometry. | `vec4` |
+| `tangentLocal` | Local variable for tangent. | `vec3` |
+| `tangentView` | Normalized transformed view tangent. | `vec3` |
+| `tangentWorld` | Normalized transformed world tangent. | `vec3` |
+
+### Bitangent
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `bitangentGeometry` | Normalized bitangent in geometry space. | `vec3` |
+| `bitangentLocal` | Normalized bitangent in local space. | `vec3` |
+| `bitangentView` | Normalized transformed bitangent in view space. | `vec3` |
+| `bitangentWorld` | Normalized transformed bitangent in world space. | `vec3` |
+
+## Camera
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `cameraNear` | Near plane distance of the camera. | `float` |
+| `cameraFar` | Far plane distance of the camera. | `float` |
+| `cameraProjectionMatrix` | Projection matrix of the camera. | `mat4` |
+| `cameraProjectionMatrixInverse` | Inverse projection matrix of the camera. | `mat4` |
+| `cameraViewMatrix` | View matrix of the camera. | `mat4` |
+| `cameraWorldMatrix` | World matrix of the camera. | `mat4` |
+| `cameraNormalMatrix` | Normal matrix of the camera. | `mat3` |
+| `cameraPosition` | World position of the camera. | `vec3` |
+
+## Model
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `modelDirection` | Direction of the model. | `vec3` |
+| `modelViewMatrix` | View-space matrix of the model. | `mat4` |
+| `modelNormalMatrix` | View-space matrix of the model. | `mat3` |
+| `modelWorldMatrix` | World-space matrix of the model. | `mat4` |
+| `modelPosition` | Position of the model. | `vec3` |
+| `modelScale` | Scale of the model. | `vec3` |
+| `modelViewPosition` | View-space position of the model. | `vec3` |
+| `modelWorldMatrixInverse` | Inverse world matrix of the model. | `mat4` |
+| | |
+| `highpModelViewMatrix` | View-space matrix of the model computed on CPU using 64-bit. | `mat4` |
+| `highpModelNormalViewMatrix` | View-space normal matrix of the model computed on CPU using 64-bit. | `mat3` |
+
+## Screen
+
+Screen nodes will return the values related to the current `frame buffer`, either normalized or in `physical pixel units` considering the current `Pixel Ratio`.
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `screenUV` | Returns the normalized frame buffer coordinate. | `vec2` |
+| `screenCoordinate` | Returns the frame buffer coordinate in physical pixel units. | `vec2` |
+| `screenSize` | Returns the frame buffer size in physical pixel units. | `vec2` |
+| `screenDPR` | Returns the device pixel ratio (DPR). | `float` |
+
+## Viewport
+
+`viewport` is influenced by the area defined in `renderer.setViewport()`, different of the values ​​defined in the renderer that are `logical pixel units`, it use `physical pixel units` considering the current `Pixel Ratio`.
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `viewportUV` | Returns the normalized viewport coordinate. | `vec2` |
+| `viewport` | Returns the viewport dimension in physical pixel units. | `vec4` |
+| `viewportCoordinate` | Returns the viewport coordinate in physical pixel units. | `vec2` |
+| `viewportSize` | Returns the viewport size in physical pixel units. | `vec2` |
+| `viewportSharedTexture( uvNode = screenUV, levelNode = null )` | Accesses what has already been rendered, preserving render-order. | `vec4` |
+| `viewportDepthTexture( uvNode = screenUV, levelNode = null )` | Returns the depth texture of the viewport. | `float` |
+| `viewportLinearDepth` | Returns the linear (orthographic) depth value of the current fragment. | `float` |
+| `viewportMipTexture( uvNode = screenUV, levelNode = null, framebufferTexture = null )` | Returns a viewport texture with mipmap generation enabled. | `vec4` |
+| `viewportSafeUV( uv = screenUV )` | Returns safe UV coordinates for refraction purposes. | `vec2` |
+
+## Blend Modes
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `blendBurn( a, b )` | Returns the burn blend mode. | `color` |
+| `blendDodge( a, b )` | Returns the dodge blend mode. | `color` |
+| `blendOverlay( a, b )` | Returns the overlay blend mode. | `color` |
+| `blendScreen( a, b )` | Returns the screen blend mode. | `color` |
+| `blendColor( a, b )` | Returns the (normal) color blend mode. | `color` |
+
+## Reflect
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `reflectView` | Computes reflection direction in view space. | `vec3` |
+| `reflectVector` | Transforms the reflection direction to world space. | `vec3` |
+
+## UV Utils
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `matcapUV` | UV coordinates for matcap texture. | `vec2` |
+| `rotateUV( uv, rotation, centerNode = vec2( 0.5 ) )` | Rotates UV coordinates 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` |
+| `equirectUV( direction = positionWorldDirection )` | Computes UV coordinates for equirectangular mapping based on the direction vector. | `vec2` |
+
+```js
+import { texture, matcapUV } from 'three/tsl';
+
+const matcap = texture( matcapMap, matcapUV );
+```
+
+## Interpolation
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `remap( node, inLow, inHigh, outLow = float( 0 ), outHigh = float( 1 ) )` | Remaps a value from one range to another. | `any` |
+| `remapClamp( node, inLow, inHigh, outLow = float( 0 ), outHigh = float( 1 ) )` | Remaps a value from one range to another, with clamping. | `any` |
+
+## Random
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `hash( seed )` | Generates a hash value in the range [ 0, 1 ] from the given seed. | `float` |
+| `range( min, max )` | Generates a range `attribute` of values between min and max. Attribute randomization is useful when you want to randomize values ​​between instances and not between pixels. | `any` |
+
+## Rotate
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `rotate( position, rotation )` | Applies a rotation to the given position node. Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value. | `vec2`, `vec3`
+
+## Oscillator
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `oscSine( timer = time )` | Generates a sine wave oscillation based on a timer. | `float` |
+| `oscSquare( timer = time )` | Generates a square wave oscillation based on a timer. | `float` |
+| `oscTriangle( timer = time )` | Generates a triangle wave oscillation based on a timer. | `float` |
+| `oscSawtooth( timer = time )` | Generates a sawtooth wave oscillation based on a timer. | `float` |
+
+## Timer
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `time` | Represents the elapsed time in seconds. | `float` |
+| `deltaTime` | Represents the delta time in seconds. | `float` |
+
+## Packing
+
+| Variable | Description | Type |
+| -- | -- | -- |
+| `directionToColor( value )` | Converts direction vector to color. | `color` |
+| `colorToDirection( value )` | Converts color to direction vector. | `vec3` |
+
+## Render Pipeline
+
+The `RenderPipeline` provides full control over the rendering process. It enables developers to build complex multi-pass rendering pipelines entirely in JavaScript, combining scene rendering, post-processing, and compute operations in a unified, composable workflow.
+
+#### Basic Usage
+
+```js
+import * as THREE from 'three/webgpu';
+import { pass } from 'three/tsl';
+
+// Create the render pipeline
+const renderPipeline = new THREE.RenderPipeline( renderer );
+
+// Create a scene pass
+const scenePass = pass( scene, camera );
+
+// Set the output
+renderPipeline.outputNode = scenePass;
+
+// In the animation loop
+function animate() {
+
+	renderPipeline.render();
+
+}
+```
+
+### Multiple Render Targets (MRT)
+
+MRT allows capturing multiple outputs from a single render pass. Instead of rendering the scene multiple times to get different data (color, normals, depth, velocity), MRT captures all of them in one draw call—significantly improving performance.
+
+#### Setting up MRT
+
+Use `setMRT()` with the `mrt()` function to define which outputs to capture:
+
+```js
+import { pass, mrt, output, normalView, velocity, directionToColor } from 'three/tsl';
+
+const scenePass = pass( scene, camera );
+
+scenePass.setMRT( mrt( {
+	output: output,                          // Final color output
+	normal: directionToColor( normalView ),  // View-space normals encoded as colors
+	velocity: velocity                       // Motion vectors for temporal effects
+} ) );
+```
+
+Each MRT entry accepts any TSL node, allowing you to customize outputs using formulas, encoders, or material accessors. For example, `directionToColor( normalView )` encodes view-space normals into RGB values. You can use any TSL function to transform, combine, or encode data before writing to the render target.
+
+Within a TSL function `Fn( ( { material, object } ) => { ... } )`, you have complete access to the current material and object being rendered, enabling full customization of outputs.
+
+#### Accessing MRT Buffers
+
+Each MRT output becomes available as a texture node via `getTextureNode()`:
+
+```js
+// Access individual buffers as texture nodes
+const colorTexture = scenePass.getTextureNode( 'output' );
+const normalTexture = scenePass.getTextureNode( 'normal' );
+const velocityTexture = scenePass.getTextureNode( 'velocity' );
+
+// Depth is always available, even without MRT
+const depthTexture = scenePass.getTextureNode( 'depth' );
+```
+
+These texture nodes can be sampled, transformed, and passed to post-processing effects or other passes.
+
+#### Optimizing MRT Textures
+
+You can access the textures to optimize memory usage and bandwidth. Using smaller data types reduces GPU memory transfers, which is critical for performance on bandwidth-limited devices:
+
+```js
+// Use 8-bit format for encoded normals, default is 16-bit
+const normalTexture = scenePass.getTexture( 'normal' );
+normalTexture.type = THREE.UnsignedByteType;
+```
+
+#### Dynamic Pipeline Updates
+
+The pipeline can be updated at runtime:
+
+```js
+if ( showNormals ) {
+
+	renderPipeline.outputNode = prePass;
+
+} else {
+
+	renderPipeline.outputNode = traaPass;
+
+}
+
+renderPipeline.needsUpdate = true;
+```
+
+### Post-Processing
+
+TSL utilities for post-processing effects. They can be used in materials or post-processing passes.
+
+| Name | Description |
+| -- | -- |
+| `afterImage( node, damp = 0.96 )` | Creates an after image effect. |
+| `anamorphic( node, threshold = 0.9, scale = 3, samples = 32 )` | Creates an anamorphic flare effect. |
+| `bloom( node, strength = 1, radius = 0, threshold = 0 )` | Creates a bloom effect. |
+| `boxBlur( textureNode, options = {} )` | Applies a box blur effect. |
+| `chromaticAberration( node, strength = 1.0, center = null, scale = 1.1 )` | Creates a chromatic aberration effect. |
+| `denoise( node, depthNode, normalNode, camera )` | Creates a denoise effect. |
+| `dof( node, viewZNode, focusDistance, focalLength, bokehScale )` | Creates a depth-of-field effect. |
+| `dotScreen( node, angle = 1.57, scale = 1 )` | Creates a dot-screen effect. |
+| `film( inputNode, intensityNode = null, uvNode = null )` | Creates a film grain effect. |
+| `fxaa( node )` | Creates a FXAA anti-aliasing effect. |
+| `gaussianBlur( node, directionNode, sigma, options = {} )` | Creates a gaussian blur effect. |
+| `grayscale( color )` | Converts color to grayscale. |
+| `hashBlur( textureNode, bluramount = float( 0.1 ), options = {} )` | Applies a hash blur effect. |
+| `lut3D( node, lut, size, intensity )` | Creates a LUT color grading effect. |
+| `motionBlur( inputNode, velocity, numSamples = int( 16 ) )` | Creates a motion blur effect. |
+| `outline( scene, camera, params )` | Creates an outline effect around selected objects. |
+| `rgbShift( node, amount = 0.005, angle = 0 )` | Creates an RGB shift effect. |
+| `sepia( color )` | Applies a sepia effect. |
+| `smaa( node )` | Creates a SMAA anti-aliasing effect. |
+| `sobel( node )` | Creates a sobel edge detection effect. |
+| `ssr( colorNode, depthNode, normalNode, metalnessNode, roughnessNode = null, camera = null )` | Creates screen space reflections. |
+| `ssgi( beautyNode, depthNode, normalNode, camera )` | Creates a SSGI effect. |
+| `ao( depthNode, normalNode, camera )` | Creates a Ground Truth Ambient Occlusion (GTAO) effect. |
+| `transition( nodeA, nodeB, mixTextureNode, mixRatio, threshold, useTexture )` | Creates a transition effect between two scenes. |
+| `traa( beautyNode, depthNode, velocityNode, camera )` | Creates a TRAA temporal anti-aliasing effect. |
+| `renderOutput( node, targetColorSpace, targetToneMapping )` | Apply the renderer output settings in the node. |
+
+Example:
+
+```js
+import { grayscale, pass } from 'three/tsl';
+import { gaussianBlur } from 'three/addons/tsl/display/GaussianBlurNode.js';
+
+// Post-processing
+const scenePass = pass( scene, camera );
+const output = scenePass.getTextureNode(); // default parameter is 'output'
+
+renderPipeline.outputNode = grayscale( gaussianBlur( output, 4 ) );
+```
+
+### Render Pass
+
+Functions for creating and managing render passes.
+
+| Name | Description |
+| -- | -- |
+| `pass( scene, camera, options = {} )` | Creates a pass node for rendering a scene. |
+| `mrt( outputNodes )` | Creates a Multiple Render Targets (MRT) node. |
+
+Example:
+
+```js
+import { pass, mrt, output, emissive } from 'three/tsl';
+
+const scenePass = pass( scene, camera );
+
+// Setup MRT
+scenePass.setMRT( mrt( {
+	output: output,
+	emissive: emissive
+} ) );
+
+const outputNode = scenePass.getTextureNode( 'output' );
+const emissiveNode = scenePass.getTextureNode( 'emissive' );
+```
+
+### Compute
+
+Compute shaders allow general-purpose GPU computations. TSL provides functions for creating and managing compute operations.
+
+| Name | Description |
+| -- | -- |
+| `compute( node, count = null, workgroupSize = [ 64 ] )` | Creates a compute node. |
+| `atomicAdd( node, value )` | Performs an atomic addition. |
+| `atomicSub( node, value )` | Performs an atomic subtraction. |
+| `atomicMax( node, value )` | Performs an atomic max operation. |
+| `atomicMin( node, value )` | Performs an atomic min operation. |
+| `atomicAnd( node, value )` | Performs an atomic AND operation. |
+| `atomicOr( node, value )` | Performs an atomic OR operation. |
+| `atomicXor( node, value )` | Performs an atomic XOR operation. |
+| `atomicStore( node, value )` | Stores a value atomically. |
+| `atomicLoad( node )` | Loads a value atomically. |
+| `workgroupBarrier()` | Creates a workgroup barrier. |
+| `storageBarrier()` | Creates a storage barrier. |
+| `textureBarrier()` | Creates a texture barrier. |
+| `barrier()` | Creates a memory barrier. |
+| `workgroupId` | The workgroup ID. |
+| `localId` | The local invocation ID within the workgroup. |
+| `globalId` | The global invocation ID. |
+| `numWorkgroups` | The number of workgroups. |
+| `subgroupSize` | The size of the subgroup. |
+
+Example:
+
+```js
+import { Fn, instancedArray, instanceIndex, deltaTime } from 'three/tsl';
+
+const count = 1000;
+const positionArray = instancedArray( count, 'vec3' );
+
+// create a compute function
+
+const computeShader = Fn( () => {
+
+	const position = positionArray.element( instanceIndex );
+
+	position.x.addAssign( deltaTime );
+
+} )().compute( count );
+
+//
+
+renderer.compute( computeShader );
+```
+
+## Storage
+
+Storage functions allow reading and writing to GPU buffers.
+
+| Name | Description |
+| -- | -- |
+| `storage( attribute, type, count )` | Creates a storage buffer. |
+| `storageTexture( texture )` | Creates a storage texture for read/write operations. |
+
+## Struct
+
+Structs allow you to create custom data types with multiple members. They can be used to organize related data in shaders, define structures for attributes and uniforms.
+
+| Name | Description |
+| -- | -- |
+| `struct( membersLayout, name = null )` | Creates a struct type with the specified member layout. |
+| `outputStruct( ...members )` | Creates an output struct node for returning multiple values. |
+
+Example:
+
+```js
+import { struct, vec3 } from 'three/tsl';
+
+// Define a custom struct
+const BoundingBox = struct( { min: 'vec3', max: 'vec3' } );
+
+// Create a new instance of the struct
+const bb = BoundingBox( vec3( 0 ), vec3( 1 ) ); // style 1
+const bb2 = BoundingBox( { min: vec3( 0 ), max: vec3( 1 ) } ); // style 2
+
+// Access the struct members
+const min = bb.get( 'min' );
+
+// Assign a new value to a member
+min.assign( vec3( -1, -1, -1 ) );
+```
+
+## Flow Control
+
+Functions for controlling shader flow.
+
+| Name | Description |
+| -- | -- |
+| `Discard()` | Discards the current fragment. |
+| `Return()` | Returns from the current function. |
+| `Break()` | Breaks out of a loop. |
+| `Continue()` | Continues to the next iteration of a loop. |
+
+Example:
+
+```js
+import { Fn, If, Discard, uv } from 'three/tsl';
+
+const customFragment = Fn( () => {
+
+	If( uv().x.lessThan( 0.5 ), () => {
+
+		Discard();
+
+	} );
+
+	return vec4( 1, 0, 0, 1 );
+
+} );
+
+material.colorNode = customFragment();
+```
+
+## Fog
+
+Functions for creating fog effects in the scene. Assign the fog node to `scene.fogNode`.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `fog( color, factor )` | Creates a fog node with specified color and fog factor. | `FogNode` |
+| `rangeFogFactor( near, far )` | Creates a linear fog factor based on distance from camera. | `float` |
+| `densityFogFactor( density )` | Creates an exponential squared fog factor for denser fog. | `float` |
+
+Example:
+
+```js
+import { fog, rangeFogFactor, densityFogFactor, color } from 'three/tsl';
+
+// Linear fog (starts at 10 units, fully opaque at 100 units)
+scene.fogNode = fog( color( 0x000000 ), rangeFogFactor( 10, 100 ) );
+
+// Exponential fog (density-based)
+scene.fogNode = fog( color( 0xcccccc ), densityFogFactor( 0.02 ) );
+```
+
+## Color Adjustments
+
+Functions for adjusting and manipulating colors.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `luminance( node )` | Calculates the luminance (perceived brightness) of a color. | `float` |
+| `saturation( node, adjustment = 1 )` | Adjusts the saturation of a color. Values > 1 increase saturation, < 1 decrease. | `color` |
+| `vibrance( node, adjustment = 1 )` | Selectively enhances less saturated colors while preserving already saturated ones. | `color` |
+| `hue( node, adjustment = 0 )` | Rotates the hue of a color. Value is in radians. | `color` |
+| `posterize( node, steps )` | Reduces the number of color levels, creating a poster-like effect. | `color` |
+
+Example:
+
+```js
+import { texture, saturation, hue, posterize } from 'three/tsl';
+
+// Increase saturation
+material.colorNode = saturation( texture( map ), 1.5 );
+
+// Rotate hue by 90 degrees
+material.colorNode = hue( texture( map ), Math.PI / 2 );
+
+// Posterize to 4 color levels
+material.colorNode = posterize( texture( map ), 4 );
+```
+
+## Utilities
+
+Utility functions for common shader tasks.
+
+| Name | Description | Type |
+| -- | -- | -- |
+| `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` |
+
+Example:
+
+```js
+import { billboarding } from 'three/tsl';
+
+// Full billboarding (like particles) - faces camera in all directions
+material.vertexNode = billboarding();
+
+// Horizontal only (like trees) - rotates around Y axis only
+material.vertexNode = billboarding( { horizontal: true, vertical: false } );
+```
+
+## NodeMaterial
+
+Check below for more details about `NodeMaterial` inputs.
+
+#### Core
+
+| Name | Description | Type |
+|--|--|--|
+| `.fragmentNode` | Replaces the built-in material logic used in the fragment stage. | `vec4` |
+| `.vertexNode` | Replaces the built-in material logic used in the vertex stage. | `vec4` |
+| `.geometryNode` | Allows you to execute a TSL function to deal with Geometry. | `Fn()` |
+
+#### Basic
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.colorNode` | Replace the logic of `material.color * material.map`. | `materialColor` | `vec4` |
+| `.depthNode` | Customize the `depth` output. | `depth` | `float` |
+| `.opacityNode` | Replace the logic of `material.opacity * material.alphaMap`. | `materialOpacity` | `float` |
+| `.alphaTestNode` | Sets a threshold to discard pixels with low opacity. | `materialAlphaTest` | `float` |
+| `.positionNode` | Represents the vertex positions in local-space. Replace the logic of `material.displacementMap * material.displacementScale + material.displacementBias`. | `positionLocal` | `vec3` |
+
+#### Lighting
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.emissiveNode` | Replace the logic of `material.emissive * material.emissiveIntensity * material.emissiveMap`. | `materialEmissive` | `color` |
+| `.normalNode` | Represents the normals direction in view-space. Replace the logic of `material.normalMap * material.normalScale` and `material.bumpMap * material.bumpScale`. | `materialNormal` | `vec3` |
+| `.lightsNode` | Defines the lights and lighting model that will be used by the material. |  | `lights()` |
+| `.envNode` | Replace the logic of `material.envMap * material.envMapRotation * material.envMapIntensity`. |  | `color` |
+
+#### Backdrop
+
+| Name | Description | Type |
+|--|--|--|
+| `.backdropNode` | Set the current render color to be used before applying `Specular`, useful for `transmission` and `refraction` effects. | `color` |
+| `.backdropAlphaNode` | Define the alpha of `backdropNode`. | `float` |
+
+#### Shadows
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.castShadowNode` | Control the `color` and `opacity` of the shadow that will be projected by the material. |  | `vec4` |
+| `.maskShadowNode` | Define a custom mask for the shadow. |  | `bool` |
+| `.receivedShadowNode` | Handle the shadow cast on the material. |  | `Fn()` |
+| `.receivedShadowPositionNode` | Define the shadow projection position in world-space. | `shadowPositionWorld` | `vec3` |
+| `.aoNode` | Replace the logic of `material.aoMap * aoMapIntensity`. | `materialAO` | `float` |
+
+#### Output
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.maskNode` | Define the material's mask. Unlike opacity, it is discarded at the beginning of rendering, optimizing the process. |  | `bool` |
+| `.mrtNode` | Define a different MRT than the one defined in `pass()`. |  | `mrt()` |
+| `.outputNode` | Defines the material's final output. | `output` | `vec4` |
+
+## LineDashedNodeMaterial
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.dashScaleNode` | Replace the logic of `material.scale`. | `materialLineScale` | `float` |
+| `.dashSizeNode` | Replace the logic of `material.dashSize`. | `materialLineDashSize` | `float` |
+| `.gapSizeNode` | Replace the logic of `material.gapSize`. | `materialLineGapSize` | `float` |
+| `.offsetNode` | Replace the logic of `material.dashOffset`. | `materialLineDashOffset` | `float` |
+
+## MeshPhongNodeMaterial
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.shininessNode` | Replace the logic of `material.shininess`. | `materialShininess` | `float` |
+| `.specularNode` | Replace the logic of `material.specular`. | `materialSpecular` | `color` |
+
+## MeshStandardNodeMaterial
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.metalnessNode` | Replace the logic of `material.metalness * material.metalnessMap`. | `materialMetalness` | `float` |
+| `.roughnessNode` | Replace the logic of `material.roughness * material.roughnessMap`. | `materialRoughness` | `float` |
+
+## MeshPhysicalNodeMaterial
+
+| Name | Description | Reference | Type |
+|--|--|--|--|
+| `.clearcoatNode` | Replace the logic of `material.clearcoat * material.clearcoatMap`. | `materialClearcoat` | `float` |
+| `.clearcoatRoughnessNode` | Replace the logic of `material.clearcoatRoughness * material.clearcoatRoughnessMap`. | `materialClearcoatRoughness` | `float` |
+| `.clearcoatNormalNode` | Replace the logic of `material.clearcoatNormalMap * material.clearcoatNormalMapScale`. | `materialClearcoatNormal` | `vec3` |
+| `.sheenNode` | Replace the logic of `material.sheenColor * material.sheenColorMap`. | `materialSheen` | `color` |
+| `.iridescenceNode` | Replace the logic of `material.iridescence`. | `materialIridescence` | `float` |
+| `.iridescenceIORNode` | Replace the logic of `material.iridescenceIOR`. | `materialIridescenceIOR` | `float` |
+| `.iridescenceThicknessNode` | Replace the logic of `material.iridescenceThicknessRange * material.iridescenceThicknessMap`. | `materialIridescenceThickness` | `float` |
+| `.specularIntensityNode` | Replace the logic of `material.specularIntensity * material.specularIntensityMap`. | `materialSpecularIntensity` | `float` |
+| `.specularColorNode` | Replace the logic of `material.specularColor * material.specularColorMap`. | `materialSpecularColor` | `color` |
+| `.iorNode` | Replace the logic of `material.ior`. | `materialIOR` | `float` |
+| `.transmissionNode` | Replace the logic of `material.transmission * material.transmissionMap`. | `materialTransmission` | `color` |
+| `.thicknessNode` | Replace the logic of `material.thickness * material.thicknessMap`. | `materialTransmission` | `float` |
+| `.attenuationDistanceNode` | Replace the logic of `material.attenuationDistance`. | `materialAttenuationDistance` | `float` |
+| `.attenuationColorNode` | Replace the logic of `material.attenuationColor`. | `materialAttenuationColor` | `color` |
+| `.dispersionNode` | Replace the logic of `material.dispersion`. | `materialDispersion` | `float` |
+| `.anisotropyNode` | Replace the logic of `material.anisotropy * material.anisotropyMap`. | `materialAnisotropy` | `vec2` |
+
+## SpriteNodeMaterial
+
+| Name | Description | Type |
+|--|--|--|
+| `.positionNode` | Defines the position. | `vec3` |
+| `.rotationNode` | Defines the rotation. | `float` |
+| `.scaleNode` | Defines the scale. | `vec2` |
+
+## Transitioning common GLSL properties to TSL
+
+| GLSL | TSL | Type |
+| -- | -- | -- |
+| `position` | `positionGeometry` | `vec3` |
+| `transformed` | `positionLocal` | `vec3` |
+| `transformedNormal` | `normalLocal` | `vec3` |
+| `vWorldPosition` | `positionWorld` | `vec3` |
+| `vColor` | `vertexColor()` | `vec3` |
+| `vUv` \| `uv` | `uv()` | `vec2` |
+| `vNormal` | `normalView` | `vec3` |
+| `viewMatrix` | `cameraViewMatrix` | `mat4` |
+| `modelMatrix` | `modelWorldMatrix` | `mat4` |
+| `modelViewMatrix` | `modelViewMatrix` | `mat4` |
+| `projectionMatrix` | `cameraProjectionMatrix` | `mat4` |
+| `diffuseColor` | `material.colorNode` | `vec4` |
+| `gl_FragColor` | `material.fragmentNode` | `vec4` |
+
+
+
+---
+
+## Available Documentation
+
+The following documentation pages are available in markdown format at `https://threejs.org/docs/pages/{Name}.html.md`:
+
+### Core
+
+- [ARButton](https://threejs.org/docs/pages/ARButton.html.md)
+- [AmmoPhysics](https://threejs.org/docs/pages/AmmoPhysics.html.md)
+- [BasicLightingModel](https://threejs.org/docs/pages/BasicLightingModel.html.md)
+- [BatchedMesh](https://threejs.org/docs/pages/BatchedMesh.html.md)
+- [BezierInterpolant](https://threejs.org/docs/pages/BezierInterpolant.html.md)
+- [BitonicSort_BitonicSort](https://threejs.org/docs/pages/BitonicSort_BitonicSort.html.md)
+- [BlendMode](https://threejs.org/docs/pages/BlendMode.html.md)
+- [Bone](https://threejs.org/docs/pages/Bone.html.md)
+- [BooleanKeyframeTrack](https://threejs.org/docs/pages/BooleanKeyframeTrack.html.md)
+- [BufferAttribute](https://threejs.org/docs/pages/BufferAttribute.html.md)
+- [BundleGroup](https://threejs.org/docs/pages/BundleGroup.html.md)
+- [CCDIKSolver](https://threejs.org/docs/pages/CCDIKSolver.html.md)
+- [CSM](https://threejs.org/docs/pages/CSM.html.md)
+- [CSMFrustum](https://threejs.org/docs/pages/CSMFrustum.html.md)
+- [CSS2DObject](https://threejs.org/docs/pages/CSS2DObject.html.md)
+- [CSS2DRenderer](https://threejs.org/docs/pages/CSS2DRenderer.html.md)
+- [CSS3DObject](https://threejs.org/docs/pages/CSS3DObject.html.md)
+- [CSS3DRenderer](https://threejs.org/docs/pages/CSS3DRenderer.html.md)
+- [CSS3DSprite](https://threejs.org/docs/pages/CSS3DSprite.html.md)
+- [Cache](https://threejs.org/docs/pages/Cache.html.md)
+- [CanvasTarget](https://threejs.org/docs/pages/CanvasTarget.html.md)
+- [Capsule](https://threejs.org/docs/pages/Capsule.html.md)
+- [CinquefoilKnot](https://threejs.org/docs/pages/CinquefoilKnot.html.md)
+- [ClippingGroup](https://threejs.org/docs/pages/ClippingGroup.html.md)
+- [Clock](https://threejs.org/docs/pages/Clock.html.md)
+- [ColladaComposer](https://threejs.org/docs/pages/ColladaComposer.html.md)
+- [ColladaParser](https://threejs.org/docs/pages/ColladaParser.html.md)
+- [ColorConverter](https://threejs.org/docs/pages/ColorConverter.html.md)
+- [ColorEnvironment](https://threejs.org/docs/pages/ColorEnvironment.html.md)
+- [ColorKeyframeTrack](https://threejs.org/docs/pages/ColorKeyframeTrack.html.md)
+- [ConvexHull](https://threejs.org/docs/pages/ConvexHull.html.md)
+- [ConvexObjectBreaker](https://threejs.org/docs/pages/ConvexObjectBreaker.html.md)
+- [CubeRenderTarget](https://threejs.org/docs/pages/CubeRenderTarget.html.md)
+- [CubicInterpolant](https://threejs.org/docs/pages/CubicInterpolant.html.md)
+- [Cylindrical](https://threejs.org/docs/pages/Cylindrical.html.md)
+- [DRACOExporter](https://threejs.org/docs/pages/DRACOExporter.html.md)
+- [DataUtils](https://threejs.org/docs/pages/DataUtils.html.md)
+- [DebugEnvironment](https://threejs.org/docs/pages/DebugEnvironment.html.md)
+- [DecoratedTorusKnot4a](https://threejs.org/docs/pages/DecoratedTorusKnot4a.html.md)
+- [DecoratedTorusKnot4b](https://threejs.org/docs/pages/DecoratedTorusKnot4b.html.md)
+- [DecoratedTorusKnot5a](https://threejs.org/docs/pages/DecoratedTorusKnot5a.html.md)
+- [DecoratedTorusKnot5c](https://threejs.org/docs/pages/DecoratedTorusKnot5c.html.md)
+- [DirectionalLightShadow](https://threejs.org/docs/pages/DirectionalLightShadow.html.md)
+- [DiscreteInterpolant](https://threejs.org/docs/pages/DiscreteInterpolant.html.md)
+- [Earcut](https://threejs.org/docs/pages/Earcut.html.md)
+- [EdgeSplitModifier](https://threejs.org/docs/pages/EdgeSplitModifier.html.md)
+- [EffectComposer](https://threejs.org/docs/pages/EffectComposer.html.md)
+- [EventDispatcher](https://threejs.org/docs/pages/EventDispatcher.html.md)
+- [FigureEightPolynomialKnot](https://threejs.org/docs/pages/FigureEightPolynomialKnot.html.md)
+- [Float16BufferAttribute](https://threejs.org/docs/pages/Float16BufferAttribute.html.md)
+- [Float32BufferAttribute](https://threejs.org/docs/pages/Float32BufferAttribute.html.md)
+- [Flow](https://threejs.org/docs/pages/Flow.html.md)
+- [Fog](https://threejs.org/docs/pages/Fog.html.md)
+- [FogExp2](https://threejs.org/docs/pages/FogExp2.html.md)
+- [Font](https://threejs.org/docs/pages/Font.html.md)
+- [FullScreenQuad](https://threejs.org/docs/pages/FullScreenQuad.html.md)
+- [GLBufferAttribute](https://threejs.org/docs/pages/GLBufferAttribute.html.md)
+- [GLSLNodeBuilder](https://threejs.org/docs/pages/GLSLNodeBuilder.html.md)
+- [GLSLNodeFunction](https://threejs.org/docs/pages/GLSLNodeFunction.html.md)
+- [GLSLNodeParser](https://threejs.org/docs/pages/GLSLNodeParser.html.md)
+- [GLTFExporter](https://threejs.org/docs/pages/GLTFExporter.html.md)
+- [GPUComputationRenderer](https://threejs.org/docs/pages/GPUComputationRenderer.html.md)
+- [GrannyKnot](https://threejs.org/docs/pages/GrannyKnot.html.md)
+- [GroundedSkybox](https://threejs.org/docs/pages/GroundedSkybox.html.md)
+- [Group](https://threejs.org/docs/pages/Group.html.md)
+- [Gyroscope](https://threejs.org/docs/pages/Gyroscope.html.md)
+- [HTMLMesh](https://threejs.org/docs/pages/HTMLMesh.html.md)
+- [ImageUtils](https://threejs.org/docs/pages/ImageUtils.html.md)
+- [ImprovedNoise](https://threejs.org/docs/pages/ImprovedNoise.html.md)
+- [IndirectStorageBufferAttribute](https://threejs.org/docs/pages/IndirectStorageBufferAttribute.html.md)
+- [Info](https://threejs.org/docs/pages/Info.html.md)
+- [InspectorBase](https://threejs.org/docs/pages/InspectorBase.html.md)
+- [InstancedBufferAttribute](https://threejs.org/docs/pages/InstancedBufferAttribute.html.md)
+- [InstancedFlow](https://threejs.org/docs/pages/InstancedFlow.html.md)
+- [InstancedInterleavedBuffer](https://threejs.org/docs/pages/InstancedInterleavedBuffer.html.md)
+- [InstancedMesh](https://threejs.org/docs/pages/InstancedMesh.html.md)
+- [Int16BufferAttribute](https://threejs.org/docs/pages/Int16BufferAttribute.html.md)
+- [Int32BufferAttribute](https://threejs.org/docs/pages/Int32BufferAttribute.html.md)
+- [Int8BufferAttribute](https://threejs.org/docs/pages/Int8BufferAttribute.html.md)
+- [InteractiveGroup](https://threejs.org/docs/pages/InteractiveGroup.html.md)
+- [InterleavedBuffer](https://threejs.org/docs/pages/InterleavedBuffer.html.md)
+- [InterleavedBufferAttribute](https://threejs.org/docs/pages/InterleavedBufferAttribute.html.md)
+- [Interpolant](https://threejs.org/docs/pages/Interpolant.html.md)
+- [JoltPhysics](https://threejs.org/docs/pages/JoltPhysics.html.md)
+- [KTX2Exporter](https://threejs.org/docs/pages/KTX2Exporter.html.md)
+- [KeyframeTrack](https://threejs.org/docs/pages/KeyframeTrack.html.md)
+- [LDrawUtils](https://threejs.org/docs/pages/LDrawUtils.html.md)
+- [LOD](https://threejs.org/docs/pages/LOD.html.md)
+- [Layers](https://threejs.org/docs/pages/Layers.html.md)
+- [Lensflare](https://threejs.org/docs/pages/Lensflare.html.md)
+- [LensflareElement](https://threejs.org/docs/pages/LensflareElement.html.md)
+- [LensflareMesh](https://threejs.org/docs/pages/LensflareMesh.html.md)
+- [LightProbe](https://threejs.org/docs/pages/LightProbe.html.md)
+- [LightProbeGenerator](https://threejs.org/docs/pages/LightProbeGenerator.html.md)
+- [LightShadow](https://threejs.org/docs/pages/LightShadow.html.md)
+- [LightingModel](https://threejs.org/docs/pages/LightingModel.html.md)
+- [Line](https://threejs.org/docs/pages/Line.html.md)
+- [Line2](https://threejs.org/docs/pages/Line2.html.md)
+- [Line3](https://threejs.org/docs/pages/Line3.html.md)
+- [LineLoop](https://threejs.org/docs/pages/LineLoop.html.md)
+- [LineSegments](https://threejs.org/docs/pages/LineSegments.html.md)
+- [LineSegments2](https://threejs.org/docs/pages/LineSegments2.html.md)
+- [LinearInterpolant](https://threejs.org/docs/pages/LinearInterpolant.html.md)
+- [LoaderUtils](https://threejs.org/docs/pages/LoaderUtils.html.md)
+- [LoadingManager](https://threejs.org/docs/pages/LoadingManager.html.md)
+- [Lut](https://threejs.org/docs/pages/Lut.html.md)
+- [MD2Character](https://threejs.org/docs/pages/MD2Character.html.md)
+- [MD2CharacterComplex](https://threejs.org/docs/pages/MD2CharacterComplex.html.md)
+- [MarchingCubes](https://threejs.org/docs/pages/MarchingCubes.html.md)
+- [MathUtils](https://threejs.org/docs/pages/MathUtils.html.md)
+- [Mesh](https://threejs.org/docs/pages/Mesh.html.md)
+- [MeshSurfaceSampler](https://threejs.org/docs/pages/MeshSurfaceSampler.html.md)
+- [MorphAnimMesh](https://threejs.org/docs/pages/MorphAnimMesh.html.md)
+- [MorphBlendMesh](https://threejs.org/docs/pages/MorphBlendMesh.html.md)
+- [NURBSSurface](https://threejs.org/docs/pages/NURBSSurface.html.md)
+- [NURBSVolume](https://threejs.org/docs/pages/NURBSVolume.html.md)
+- [NodeAttribute](https://threejs.org/docs/pages/NodeAttribute.html.md)
+- [NodeBuilder](https://threejs.org/docs/pages/NodeBuilder.html.md)
+- [NodeCache](https://threejs.org/docs/pages/NodeCache.html.md)
+- [NodeCode](https://threejs.org/docs/pages/NodeCode.html.md)
+- [NodeError](https://threejs.org/docs/pages/NodeError.html.md)
+- [NodeFrame](https://threejs.org/docs/pages/NodeFrame.html.md)
+- [NodeFunction](https://threejs.org/docs/pages/NodeFunction.html.md)
+- [NodeFunctionInput](https://threejs.org/docs/pages/NodeFunctionInput.html.md)
+- [NodeMaterialObserver](https://threejs.org/docs/pages/NodeMaterialObserver.html.md)
+- [NodeParser](https://threejs.org/docs/pages/NodeParser.html.md)
+- [NodeUniform](https://threejs.org/docs/pages/NodeUniform.html.md)
+- [NodeVar](https://threejs.org/docs/pages/NodeVar.html.md)
+- [NodeVarying](https://threejs.org/docs/pages/NodeVarying.html.md)
+- [NumberKeyframeTrack](https://threejs.org/docs/pages/NumberKeyframeTrack.html.md)
+- [OBB](https://threejs.org/docs/pages/OBB.html.md)
+- [OBJExporter](https://threejs.org/docs/pages/OBJExporter.html.md)
+- [Object3D](https://threejs.org/docs/pages/Object3D.html.md)
+- [Octree](https://threejs.org/docs/pages/Octree.html.md)
+- [OculusHandModel](https://threejs.org/docs/pages/OculusHandModel.html.md)
+- [OculusHandPointerModel](https://threejs.org/docs/pages/OculusHandPointerModel.html.md)
+- [PLYExporter](https://threejs.org/docs/pages/PLYExporter.html.md)
+- [PMREMGenerator](https://threejs.org/docs/pages/PMREMGenerator.html.md)
+- [Path](https://threejs.org/docs/pages/Path.html.md)
+- [PhongLightingModel](https://threejs.org/docs/pages/PhongLightingModel.html.md)
+- [PhysicalLightingModel](https://threejs.org/docs/pages/PhysicalLightingModel.html.md)
+- [PointLightShadow](https://threejs.org/docs/pages/PointLightShadow.html.md)
+- [Points](https://threejs.org/docs/pages/Points.html.md)
+- [PostProcessing](https://threejs.org/docs/pages/PostProcessing.html.md)
+- [ProgressiveLightMap](https://threejs.org/docs/pages/ProgressiveLightMap.html.md)
+- [Projector](https://threejs.org/docs/pages/Projector.html.md)
+- [PropertyBinding](https://threejs.org/docs/pages/PropertyBinding.html.md)
+- [PropertyMixer](https://threejs.org/docs/pages/PropertyMixer.html.md)
+- [QuadMesh](https://threejs.org/docs/pages/QuadMesh.html.md)
+- [RapierPhysics](https://threejs.org/docs/pages/RapierPhysics.html.md)
+- [RectAreaLightTexturesLib](https://threejs.org/docs/pages/RectAreaLightTexturesLib.html.md)
+- [RectAreaLightUniformsLib](https://threejs.org/docs/pages/RectAreaLightUniformsLib.html.md)
+- [Reflector](https://threejs.org/docs/pages/Reflector.html.md)
+- [Refractor](https://threejs.org/docs/pages/Refractor.html.md)
+- [RenderPipeline](https://threejs.org/docs/pages/RenderPipeline.html.md)
+- [RenderTarget](https://threejs.org/docs/pages/RenderTarget.html.md)
+- [RenderTarget3D](https://threejs.org/docs/pages/RenderTarget3D.html.md)
+- [Renderer](https://threejs.org/docs/pages/Renderer.html.md)
+- [RoomEnvironment](https://threejs.org/docs/pages/RoomEnvironment.html.md)
+- [SSSLightingModel](https://threejs.org/docs/pages/SSSLightingModel.html.md)
+- [STLExporter](https://threejs.org/docs/pages/STLExporter.html.md)
+- [SVGObject](https://threejs.org/docs/pages/SVGObject.html.md)
+- [SVGRenderer](https://threejs.org/docs/pages/SVGRenderer.html.md)
+- [Scene](https://threejs.org/docs/pages/Scene.html.md)
+- [SceneOptimizer](https://threejs.org/docs/pages/SceneOptimizer.html.md)
+- [SelectionBox](https://threejs.org/docs/pages/SelectionBox.html.md)
+- [ShadowMapViewer](https://threejs.org/docs/pages/ShadowMapViewer.html.md)
+- [ShadowMaskModel](https://threejs.org/docs/pages/ShadowMaskModel.html.md)
+- [ShadowMesh](https://threejs.org/docs/pages/ShadowMesh.html.md)
+- [Shape](https://threejs.org/docs/pages/Shape.html.md)
+- [ShapePath](https://threejs.org/docs/pages/ShapePath.html.md)
+- [ShapeUtils](https://threejs.org/docs/pages/ShapeUtils.html.md)
+- [SimplexNoise](https://threejs.org/docs/pages/SimplexNoise.html.md)
+- [SimplifyModifier](https://threejs.org/docs/pages/SimplifyModifier.html.md)
+- [Skeleton](https://threejs.org/docs/pages/Skeleton.html.md)
+- [SkinnedMesh](https://threejs.org/docs/pages/SkinnedMesh.html.md)
+- [Sky](https://threejs.org/docs/pages/Sky.html.md)
+- [SkyMesh](https://threejs.org/docs/pages/SkyMesh.html.md)
+- [Source](https://threejs.org/docs/pages/Source.html.md)
+- [Spherical](https://threejs.org/docs/pages/Spherical.html.md)
+- [SphericalHarmonics3](https://threejs.org/docs/pages/SphericalHarmonics3.html.md)
+- [SpotLightShadow](https://threejs.org/docs/pages/SpotLightShadow.html.md)
+- [Sprite](https://threejs.org/docs/pages/Sprite.html.md)
+- [StackTrace](https://threejs.org/docs/pages/StackTrace.html.md)
+- [StorageBufferAttribute](https://threejs.org/docs/pages/StorageBufferAttribute.html.md)
+- [StorageInstancedBufferAttribute](https://threejs.org/docs/pages/StorageInstancedBufferAttribute.html.md)
+- [StringKeyframeTrack](https://threejs.org/docs/pages/StringKeyframeTrack.html.md)
+- [TSL](https://threejs.org/docs/pages/TSL.html.md)
+- [Tab](https://threejs.org/docs/pages/Tab.html.md)
+- [TessellateModifier](https://threejs.org/docs/pages/TessellateModifier.html.md)
+- [TextureUtils](https://threejs.org/docs/pages/TextureUtils.html.md)
+- [TiledLighting](https://threejs.org/docs/pages/TiledLighting.html.md)
+- [Timer](https://threejs.org/docs/pages/Timer.html.md)
+- [TimestampQueryPool](https://threejs.org/docs/pages/TimestampQueryPool.html.md)
+- [ToonLightingModel](https://threejs.org/docs/pages/ToonLightingModel.html.md)
+- [TorusKnot](https://threejs.org/docs/pages/TorusKnot.html.md)
+- [Transpiler](https://threejs.org/docs/pages/Transpiler.html.md)
+- [TrefoilKnot](https://threejs.org/docs/pages/TrefoilKnot.html.md)
+- [TrefoilPolynomialKnot](https://threejs.org/docs/pages/TrefoilPolynomialKnot.html.md)
+- [TubePainter](https://threejs.org/docs/pages/TubePainter.html.md)
+- [USDComposer](https://threejs.org/docs/pages/USDComposer.html.md)
+- [USDZExporter](https://threejs.org/docs/pages/USDZExporter.html.md)
+- [Uint16BufferAttribute](https://threejs.org/docs/pages/Uint16BufferAttribute.html.md)
+- [Uint32BufferAttribute](https://threejs.org/docs/pages/Uint32BufferAttribute.html.md)
+- [Uint8BufferAttribute](https://threejs.org/docs/pages/Uint8BufferAttribute.html.md)
+- [Uint8ClampedBufferAttribute](https://threejs.org/docs/pages/Uint8ClampedBufferAttribute.html.md)
+- [Uniform](https://threejs.org/docs/pages/Uniform.html.md)
+- [UniformsGroup](https://threejs.org/docs/pages/UniformsGroup.html.md)
+- [VRButton](https://threejs.org/docs/pages/VRButton.html.md)
+- [Volume](https://threejs.org/docs/pages/Volume.html.md)
+- [VolumeSlice](https://threejs.org/docs/pages/VolumeSlice.html.md)
+- [VolumetricLightingModel](https://threejs.org/docs/pages/VolumetricLightingModel.html.md)
+- [WGSLNodeBuilder](https://threejs.org/docs/pages/WGSLNodeBuilder.html.md)
+- [WGSLNodeFunction](https://threejs.org/docs/pages/WGSLNodeFunction.html.md)
+- [WGSLNodeParser](https://threejs.org/docs/pages/WGSLNodeParser.html.md)
+- [Water](https://threejs.org/docs/pages/Water.html.md)
+- [WaterMesh](https://threejs.org/docs/pages/WaterMesh.html.md)
+- [WebGL](https://threejs.org/docs/pages/WebGL.html.md)
+- [WebGL3DRenderTarget](https://threejs.org/docs/pages/WebGL3DRenderTarget.html.md)
+- [WebGLArrayRenderTarget](https://threejs.org/docs/pages/WebGLArrayRenderTarget.html.md)
+- [WebGLCubeRenderTarget](https://threejs.org/docs/pages/WebGLCubeRenderTarget.html.md)
+- [WebGLRenderTarget](https://threejs.org/docs/pages/WebGLRenderTarget.html.md)
+- [WebGLRenderer](https://threejs.org/docs/pages/WebGLRenderer.html.md)
+- [WebGLTimestampQueryPool](https://threejs.org/docs/pages/WebGLTimestampQueryPool.html.md)
+- [WebGPU](https://threejs.org/docs/pages/WebGPU.html.md)
+- [WebGPURenderer](https://threejs.org/docs/pages/WebGPURenderer.html.md)
+- [WebGPUTimestampQueryPool](https://threejs.org/docs/pages/WebGPUTimestampQueryPool.html.md)
+- [Wireframe](https://threejs.org/docs/pages/Wireframe.html.md)
+- [WireframeGeometry2](https://threejs.org/docs/pages/WireframeGeometry2.html.md)
+- [WorkerPool](https://threejs.org/docs/pages/WorkerPool.html.md)
+
+### Cameras
+
+- [ArrayCamera](https://threejs.org/docs/pages/ArrayCamera.html.md)
+- [Camera](https://threejs.org/docs/pages/Camera.html.md)
+- [CubeCamera](https://threejs.org/docs/pages/CubeCamera.html.md)
+- [OrthographicCamera](https://threejs.org/docs/pages/OrthographicCamera.html.md)
+- [PerspectiveCamera](https://threejs.org/docs/pages/PerspectiveCamera.html.md)
+- [StereoCamera](https://threejs.org/docs/pages/StereoCamera.html.md)
+
+### Lights
+
+- [AmbientLight](https://threejs.org/docs/pages/AmbientLight.html.md)
+- [DirectionalLight](https://threejs.org/docs/pages/DirectionalLight.html.md)
+- [HemisphereLight](https://threejs.org/docs/pages/HemisphereLight.html.md)
+- [IESSpotLight](https://threejs.org/docs/pages/IESSpotLight.html.md)
+- [Light](https://threejs.org/docs/pages/Light.html.md)
+- [PointLight](https://threejs.org/docs/pages/PointLight.html.md)
+- [ProjectorLight](https://threejs.org/docs/pages/ProjectorLight.html.md)
+- [RectAreaLight](https://threejs.org/docs/pages/RectAreaLight.html.md)
+- [SpotLight](https://threejs.org/docs/pages/SpotLight.html.md)
+- [XREstimatedLight](https://threejs.org/docs/pages/XREstimatedLight.html.md)
+
+### Materials
+
+- [LDrawConditionalLineMaterial](https://threejs.org/docs/pages/LDrawConditionalLineMaterial.html.md)
+- [Line2NodeMaterial](https://threejs.org/docs/pages/Line2NodeMaterial.html.md)
+- [LineBasicMaterial](https://threejs.org/docs/pages/LineBasicMaterial.html.md)
+- [LineBasicNodeMaterial](https://threejs.org/docs/pages/LineBasicNodeMaterial.html.md)
+- [LineDashedMaterial](https://threejs.org/docs/pages/LineDashedMaterial.html.md)
+- [LineDashedNodeMaterial](https://threejs.org/docs/pages/LineDashedNodeMaterial.html.md)
+- [LineMaterial](https://threejs.org/docs/pages/LineMaterial.html.md)
+- [Material](https://threejs.org/docs/pages/Material.html.md)
+- [MeshBasicMaterial](https://threejs.org/docs/pages/MeshBasicMaterial.html.md)
+- [MeshBasicNodeMaterial](https://threejs.org/docs/pages/MeshBasicNodeMaterial.html.md)
+- [MeshDepthMaterial](https://threejs.org/docs/pages/MeshDepthMaterial.html.md)
+- [MeshDistanceMaterial](https://threejs.org/docs/pages/MeshDistanceMaterial.html.md)
+- [MeshLambertMaterial](https://threejs.org/docs/pages/MeshLambertMaterial.html.md)
+- [MeshLambertNodeMaterial](https://threejs.org/docs/pages/MeshLambertNodeMaterial.html.md)
+- [MeshMatcapMaterial](https://threejs.org/docs/pages/MeshMatcapMaterial.html.md)
+- [MeshMatcapNodeMaterial](https://threejs.org/docs/pages/MeshMatcapNodeMaterial.html.md)
+- [MeshNormalMaterial](https://threejs.org/docs/pages/MeshNormalMaterial.html.md)
+- [MeshNormalNodeMaterial](https://threejs.org/docs/pages/MeshNormalNodeMaterial.html.md)
+- [MeshPhongMaterial](https://threejs.org/docs/pages/MeshPhongMaterial.html.md)
+- [MeshPhongNodeMaterial](https://threejs.org/docs/pages/MeshPhongNodeMaterial.html.md)
+- [MeshPhysicalMaterial](https://threejs.org/docs/pages/MeshPhysicalMaterial.html.md)
+- [MeshPhysicalNodeMaterial](https://threejs.org/docs/pages/MeshPhysicalNodeMaterial.html.md)
+- [MeshSSSNodeMaterial](https://threejs.org/docs/pages/MeshSSSNodeMaterial.html.md)
+- [MeshStandardMaterial](https://threejs.org/docs/pages/MeshStandardMaterial.html.md)
+- [MeshStandardNodeMaterial](https://threejs.org/docs/pages/MeshStandardNodeMaterial.html.md)
+- [MeshToonMaterial](https://threejs.org/docs/pages/MeshToonMaterial.html.md)
+- [MeshToonNodeMaterial](https://threejs.org/docs/pages/MeshToonNodeMaterial.html.md)
+- [NodeMaterial](https://threejs.org/docs/pages/NodeMaterial.html.md)
+- [PointsMaterial](https://threejs.org/docs/pages/PointsMaterial.html.md)
+- [PointsNodeMaterial](https://threejs.org/docs/pages/PointsNodeMaterial.html.md)
+- [RawShaderMaterial](https://threejs.org/docs/pages/RawShaderMaterial.html.md)
+- [ShaderMaterial](https://threejs.org/docs/pages/ShaderMaterial.html.md)
+- [ShadowMaterial](https://threejs.org/docs/pages/ShadowMaterial.html.md)
+- [ShadowNodeMaterial](https://threejs.org/docs/pages/ShadowNodeMaterial.html.md)
+- [SpriteMaterial](https://threejs.org/docs/pages/SpriteMaterial.html.md)
+- [SpriteNodeMaterial](https://threejs.org/docs/pages/SpriteNodeMaterial.html.md)
+- [VolumeNodeMaterial](https://threejs.org/docs/pages/VolumeNodeMaterial.html.md)
+- [WoodNodeMaterial](https://threejs.org/docs/pages/WoodNodeMaterial.html.md)
+
+### Geometries
+
+- [BoxGeometry](https://threejs.org/docs/pages/BoxGeometry.html.md)
+- [BoxLineGeometry](https://threejs.org/docs/pages/BoxLineGeometry.html.md)
+- [BufferGeometry](https://threejs.org/docs/pages/BufferGeometry.html.md)
+- [CapsuleGeometry](https://threejs.org/docs/pages/CapsuleGeometry.html.md)
+- [CircleGeometry](https://threejs.org/docs/pages/CircleGeometry.html.md)
+- [ConeGeometry](https://threejs.org/docs/pages/ConeGeometry.html.md)
+- [ConvexGeometry](https://threejs.org/docs/pages/ConvexGeometry.html.md)
+- [CylinderGeometry](https://threejs.org/docs/pages/CylinderGeometry.html.md)
+- [DecalGeometry](https://threejs.org/docs/pages/DecalGeometry.html.md)
+- [DodecahedronGeometry](https://threejs.org/docs/pages/DodecahedronGeometry.html.md)
+- [EdgesGeometry](https://threejs.org/docs/pages/EdgesGeometry.html.md)
+- [ExtrudeGeometry](https://threejs.org/docs/pages/ExtrudeGeometry.html.md)
+- [IcosahedronGeometry](https://threejs.org/docs/pages/IcosahedronGeometry.html.md)
+- [InstancedBufferGeometry](https://threejs.org/docs/pages/InstancedBufferGeometry.html.md)
+- [LatheGeometry](https://threejs.org/docs/pages/LatheGeometry.html.md)
+- [LineGeometry](https://threejs.org/docs/pages/LineGeometry.html.md)
+- [LineSegmentsGeometry](https://threejs.org/docs/pages/LineSegmentsGeometry.html.md)
+- [OctahedronGeometry](https://threejs.org/docs/pages/OctahedronGeometry.html.md)
+- [ParametricGeometry](https://threejs.org/docs/pages/ParametricGeometry.html.md)
+- [PlaneGeometry](https://threejs.org/docs/pages/PlaneGeometry.html.md)
+- [PolyhedronGeometry](https://threejs.org/docs/pages/PolyhedronGeometry.html.md)
+- [RingGeometry](https://threejs.org/docs/pages/RingGeometry.html.md)
+- [RollerCoasterGeometry](https://threejs.org/docs/pages/RollerCoasterGeometry.html.md)
+- [RollerCoasterLiftersGeometry](https://threejs.org/docs/pages/RollerCoasterLiftersGeometry.html.md)
+- [RollerCoasterShadowGeometry](https://threejs.org/docs/pages/RollerCoasterShadowGeometry.html.md)
+- [RoundedBoxGeometry](https://threejs.org/docs/pages/RoundedBoxGeometry.html.md)
+- [ShapeGeometry](https://threejs.org/docs/pages/ShapeGeometry.html.md)
+- [SkyGeometry](https://threejs.org/docs/pages/SkyGeometry.html.md)
+- [SphereGeometry](https://threejs.org/docs/pages/SphereGeometry.html.md)
+- [TeapotGeometry](https://threejs.org/docs/pages/TeapotGeometry.html.md)
+- [TetrahedronGeometry](https://threejs.org/docs/pages/TetrahedronGeometry.html.md)
+- [TextGeometry](https://threejs.org/docs/pages/TextGeometry.html.md)
+- [TorusGeometry](https://threejs.org/docs/pages/TorusGeometry.html.md)
+- [TorusKnotGeometry](https://threejs.org/docs/pages/TorusKnotGeometry.html.md)
+- [TreesGeometry](https://threejs.org/docs/pages/TreesGeometry.html.md)
+- [TubeGeometry](https://threejs.org/docs/pages/TubeGeometry.html.md)
+- [WireframeGeometry](https://threejs.org/docs/pages/WireframeGeometry.html.md)
+
+### Textures
+
+- [CanvasTexture](https://threejs.org/docs/pages/CanvasTexture.html.md)
+- [CompressedArrayTexture](https://threejs.org/docs/pages/CompressedArrayTexture.html.md)
+- [CompressedCubeTexture](https://threejs.org/docs/pages/CompressedCubeTexture.html.md)
+- [CompressedTexture](https://threejs.org/docs/pages/CompressedTexture.html.md)
+- [CubeDepthTexture](https://threejs.org/docs/pages/CubeDepthTexture.html.md)
+- [CubeTexture](https://threejs.org/docs/pages/CubeTexture.html.md)
+- [Data3DTexture](https://threejs.org/docs/pages/Data3DTexture.html.md)
+- [DataArrayTexture](https://threejs.org/docs/pages/DataArrayTexture.html.md)
+- [DataTexture](https://threejs.org/docs/pages/DataTexture.html.md)
+- [DepthTexture](https://threejs.org/docs/pages/DepthTexture.html.md)
+- [ExternalTexture](https://threejs.org/docs/pages/ExternalTexture.html.md)
+- [FlakesTexture](https://threejs.org/docs/pages/FlakesTexture.html.md)
+- [FramebufferTexture](https://threejs.org/docs/pages/FramebufferTexture.html.md)
+- [Storage3DTexture](https://threejs.org/docs/pages/Storage3DTexture.html.md)
+- [StorageArrayTexture](https://threejs.org/docs/pages/StorageArrayTexture.html.md)
+- [StorageTexture](https://threejs.org/docs/pages/StorageTexture.html.md)
+- [Texture](https://threejs.org/docs/pages/Texture.html.md)
+- [VideoFrameTexture](https://threejs.org/docs/pages/VideoFrameTexture.html.md)
+- [VideoTexture](https://threejs.org/docs/pages/VideoTexture.html.md)
+
+### Loaders
+
+- [AMFLoader](https://threejs.org/docs/pages/AMFLoader.html.md)
+- [AnimationLoader](https://threejs.org/docs/pages/AnimationLoader.html.md)
+- [AudioLoader](https://threejs.org/docs/pages/AudioLoader.html.md)
+- [BVHLoader](https://threejs.org/docs/pages/BVHLoader.html.md)
+- [BufferGeometryLoader](https://threejs.org/docs/pages/BufferGeometryLoader.html.md)
+- [ColladaLoader](https://threejs.org/docs/pages/ColladaLoader.html.md)
+- [CompressedTextureLoader](https://threejs.org/docs/pages/CompressedTextureLoader.html.md)
+- [CubeTextureLoader](https://threejs.org/docs/pages/CubeTextureLoader.html.md)
+- [DDSLoader](https://threejs.org/docs/pages/DDSLoader.html.md)
+- [DRACOLoader](https://threejs.org/docs/pages/DRACOLoader.html.md)
+- [DataTextureLoader](https://threejs.org/docs/pages/DataTextureLoader.html.md)
+- [EXRLoader](https://threejs.org/docs/pages/EXRLoader.html.md)
+- [FBXLoader](https://threejs.org/docs/pages/FBXLoader.html.md)
+- [FileLoader](https://threejs.org/docs/pages/FileLoader.html.md)
+- [FontLoader](https://threejs.org/docs/pages/FontLoader.html.md)
+- [GCodeLoader](https://threejs.org/docs/pages/GCodeLoader.html.md)
+- [GLTFLoader](https://threejs.org/docs/pages/GLTFLoader.html.md)
+- [HDRCubeTextureLoader](https://threejs.org/docs/pages/HDRCubeTextureLoader.html.md)
+- [HDRLoader](https://threejs.org/docs/pages/HDRLoader.html.md)
+- [IESLoader](https://threejs.org/docs/pages/IESLoader.html.md)
+- [ImageBitmapLoader](https://threejs.org/docs/pages/ImageBitmapLoader.html.md)
+- [ImageLoader](https://threejs.org/docs/pages/ImageLoader.html.md)
+- [KMZLoader](https://threejs.org/docs/pages/KMZLoader.html.md)
+- [KTX2Loader](https://threejs.org/docs/pages/KTX2Loader.html.md)
+- [KTXLoader](https://threejs.org/docs/pages/KTXLoader.html.md)
+- [LDrawLoader](https://threejs.org/docs/pages/LDrawLoader.html.md)
+- [LUT3dlLoader](https://threejs.org/docs/pages/LUT3dlLoader.html.md)
+- [LUTCubeLoader](https://threejs.org/docs/pages/LUTCubeLoader.html.md)
+- [LUTImageLoader](https://threejs.org/docs/pages/LUTImageLoader.html.md)
+- [LWOLoader](https://threejs.org/docs/pages/LWOLoader.html.md)
+- [Loader](https://threejs.org/docs/pages/Loader.html.md)
+- [LottieLoader](https://threejs.org/docs/pages/LottieLoader.html.md)
+- [MD2Loader](https://threejs.org/docs/pages/MD2Loader.html.md)
+- [MDDLoader](https://threejs.org/docs/pages/MDDLoader.html.md)
+- [MTLLoader](https://threejs.org/docs/pages/MTLLoader.html.md)
+- [MaterialLoader](https://threejs.org/docs/pages/MaterialLoader.html.md)
+- [MaterialXLoader](https://threejs.org/docs/pages/MaterialXLoader.html.md)
+- [NRRDLoader](https://threejs.org/docs/pages/NRRDLoader.html.md)
+- [NodeLoader](https://threejs.org/docs/pages/NodeLoader.html.md)
+- [NodeMaterialLoader](https://threejs.org/docs/pages/NodeMaterialLoader.html.md)
+- [NodeObjectLoader](https://threejs.org/docs/pages/NodeObjectLoader.html.md)
+- [OBJLoader](https://threejs.org/docs/pages/OBJLoader.html.md)
+- [ObjectLoader](https://threejs.org/docs/pages/ObjectLoader.html.md)
+- [PCDLoader](https://threejs.org/docs/pages/PCDLoader.html.md)
+- [PDBLoader](https://threejs.org/docs/pages/PDBLoader.html.md)
+- [PLYLoader](https://threejs.org/docs/pages/PLYLoader.html.md)
+- [PVRLoader](https://threejs.org/docs/pages/PVRLoader.html.md)
+- [Rhino3dmLoader](https://threejs.org/docs/pages/Rhino3dmLoader.html.md)
+- [STLLoader](https://threejs.org/docs/pages/STLLoader.html.md)
+- [SVGLoader](https://threejs.org/docs/pages/SVGLoader.html.md)
+- [TDSLoader](https://threejs.org/docs/pages/TDSLoader.html.md)
+- [TGALoader](https://threejs.org/docs/pages/TGALoader.html.md)
+- [TIFFLoader](https://threejs.org/docs/pages/TIFFLoader.html.md)
+- [TTFLoader](https://threejs.org/docs/pages/TTFLoader.html.md)
+- [TextureLoader](https://threejs.org/docs/pages/TextureLoader.html.md)
+- [ThreeMFLoader](https://threejs.org/docs/pages/ThreeMFLoader.html.md)
+- [USDLoader](https://threejs.org/docs/pages/USDLoader.html.md)
+- [UltraHDRLoader](https://threejs.org/docs/pages/UltraHDRLoader.html.md)
+- [VOXLoader](https://threejs.org/docs/pages/VOXLoader.html.md)
+- [VRMLLoader](https://threejs.org/docs/pages/VRMLLoader.html.md)
+- [VTKLoader](https://threejs.org/docs/pages/VTKLoader.html.md)
+- [XYZLoader](https://threejs.org/docs/pages/XYZLoader.html.md)
+
+### Controls
+
+- [ArcballControls](https://threejs.org/docs/pages/ArcballControls.html.md)
+- [Controls](https://threejs.org/docs/pages/Controls.html.md)
+- [DragControls](https://threejs.org/docs/pages/DragControls.html.md)
+- [FirstPersonControls](https://threejs.org/docs/pages/FirstPersonControls.html.md)
+- [FlyControls](https://threejs.org/docs/pages/FlyControls.html.md)
+- [MapControls](https://threejs.org/docs/pages/MapControls.html.md)
+- [OrbitControls](https://threejs.org/docs/pages/OrbitControls.html.md)
+- [PointerLockControls](https://threejs.org/docs/pages/PointerLockControls.html.md)
+- [TrackballControls](https://threejs.org/docs/pages/TrackballControls.html.md)
+- [TransformControls](https://threejs.org/docs/pages/TransformControls.html.md)
+
+### Helpers
+
+- [AnimationPathHelper](https://threejs.org/docs/pages/AnimationPathHelper.html.md)
+- [ArrowHelper](https://threejs.org/docs/pages/ArrowHelper.html.md)
+- [AxesHelper](https://threejs.org/docs/pages/AxesHelper.html.md)
+- [Box3Helper](https://threejs.org/docs/pages/Box3Helper.html.md)
+- [BoxHelper](https://threejs.org/docs/pages/BoxHelper.html.md)
+- [CCDIKHelper](https://threejs.org/docs/pages/CCDIKHelper.html.md)
+- [CSMHelper](https://threejs.org/docs/pages/CSMHelper.html.md)
+- [CameraHelper](https://threejs.org/docs/pages/CameraHelper.html.md)
+- [DirectionalLightHelper](https://threejs.org/docs/pages/DirectionalLightHelper.html.md)
+- [GridHelper](https://threejs.org/docs/pages/GridHelper.html.md)
+- [HemisphereLightHelper](https://threejs.org/docs/pages/HemisphereLightHelper.html.md)
+- [LightProbeHelper](https://threejs.org/docs/pages/LightProbeHelper.html.md)
+- [OctreeHelper](https://threejs.org/docs/pages/OctreeHelper.html.md)
+- [PlaneHelper](https://threejs.org/docs/pages/PlaneHelper.html.md)
+- [PointLightHelper](https://threejs.org/docs/pages/PointLightHelper.html.md)
+- [PolarGridHelper](https://threejs.org/docs/pages/PolarGridHelper.html.md)
+- [PositionalAudioHelper](https://threejs.org/docs/pages/PositionalAudioHelper.html.md)
+- [RapierHelper](https://threejs.org/docs/pages/RapierHelper.html.md)
+- [RectAreaLightHelper](https://threejs.org/docs/pages/RectAreaLightHelper.html.md)
+- [SelectionHelper](https://threejs.org/docs/pages/SelectionHelper.html.md)
+- [SkeletonHelper](https://threejs.org/docs/pages/SkeletonHelper.html.md)
+- [SpotLightHelper](https://threejs.org/docs/pages/SpotLightHelper.html.md)
+- [TextureHelper](https://threejs.org/docs/pages/TextureHelper.html.md)
+- [TileShadowNodeHelper](https://threejs.org/docs/pages/TileShadowNodeHelper.html.md)
+- [VertexNormalsHelper](https://threejs.org/docs/pages/VertexNormalsHelper.html.md)
+- [VertexTangentsHelper](https://threejs.org/docs/pages/VertexTangentsHelper.html.md)
+- [ViewHelper](https://threejs.org/docs/pages/ViewHelper.html.md)
+
+### Animation
+
+- [AnimationAction](https://threejs.org/docs/pages/AnimationAction.html.md)
+- [AnimationClip](https://threejs.org/docs/pages/AnimationClip.html.md)
+- [AnimationClipCreator](https://threejs.org/docs/pages/AnimationClipCreator.html.md)
+- [AnimationMixer](https://threejs.org/docs/pages/AnimationMixer.html.md)
+- [AnimationObjectGroup](https://threejs.org/docs/pages/AnimationObjectGroup.html.md)
+- [AnimationUtils](https://threejs.org/docs/pages/AnimationUtils.html.md)
+
+### Audio
+
+- [Audio](https://threejs.org/docs/pages/Audio.html.md)
+- [AudioAnalyser](https://threejs.org/docs/pages/AudioAnalyser.html.md)
+- [AudioContext](https://threejs.org/docs/pages/AudioContext.html.md)
+- [AudioListener](https://threejs.org/docs/pages/AudioListener.html.md)
+- [PositionalAudio](https://threejs.org/docs/pages/PositionalAudio.html.md)
+
+### Math
+
+- [Box2](https://threejs.org/docs/pages/Box2.html.md)
+- [Box3](https://threejs.org/docs/pages/Box3.html.md)
+- [Color](https://threejs.org/docs/pages/Color.html.md)
+- [Euler](https://threejs.org/docs/pages/Euler.html.md)
+- [Frustum](https://threejs.org/docs/pages/Frustum.html.md)
+- [FrustumArray](https://threejs.org/docs/pages/FrustumArray.html.md)
+- [Matrix2](https://threejs.org/docs/pages/Matrix2.html.md)
+- [Matrix3](https://threejs.org/docs/pages/Matrix3.html.md)
+- [Matrix4](https://threejs.org/docs/pages/Matrix4.html.md)
+- [Plane](https://threejs.org/docs/pages/Plane.html.md)
+- [Quaternion](https://threejs.org/docs/pages/Quaternion.html.md)
+- [QuaternionKeyframeTrack](https://threejs.org/docs/pages/QuaternionKeyframeTrack.html.md)
+- [QuaternionLinearInterpolant](https://threejs.org/docs/pages/QuaternionLinearInterpolant.html.md)
+- [Ray](https://threejs.org/docs/pages/Ray.html.md)
+- [Raycaster](https://threejs.org/docs/pages/Raycaster.html.md)
+- [Sphere](https://threejs.org/docs/pages/Sphere.html.md)
+- [Triangle](https://threejs.org/docs/pages/Triangle.html.md)
+- [Vector2](https://threejs.org/docs/pages/Vector2.html.md)
+- [Vector3](https://threejs.org/docs/pages/Vector3.html.md)
+- [Vector4](https://threejs.org/docs/pages/Vector4.html.md)
+- [VectorKeyframeTrack](https://threejs.org/docs/pages/VectorKeyframeTrack.html.md)
+
+### Curves
+
+- [ArcCurve](https://threejs.org/docs/pages/ArcCurve.html.md)
+- [CatmullRomCurve3](https://threejs.org/docs/pages/CatmullRomCurve3.html.md)
+- [CubicBezierCurve](https://threejs.org/docs/pages/CubicBezierCurve.html.md)
+- [CubicBezierCurve3](https://threejs.org/docs/pages/CubicBezierCurve3.html.md)
+- [Curve](https://threejs.org/docs/pages/Curve.html.md)
+- [CurvePath](https://threejs.org/docs/pages/CurvePath.html.md)
+- [EllipseCurve](https://threejs.org/docs/pages/EllipseCurve.html.md)
+- [HeartCurve](https://threejs.org/docs/pages/HeartCurve.html.md)
+- [HelixCurve](https://threejs.org/docs/pages/HelixCurve.html.md)
+- [KnotCurve](https://threejs.org/docs/pages/KnotCurve.html.md)
+- [LineCurve](https://threejs.org/docs/pages/LineCurve.html.md)
+- [LineCurve3](https://threejs.org/docs/pages/LineCurve3.html.md)
+- [NURBSCurve](https://threejs.org/docs/pages/NURBSCurve.html.md)
+- [QuadraticBezierCurve](https://threejs.org/docs/pages/QuadraticBezierCurve.html.md)
+- [QuadraticBezierCurve3](https://threejs.org/docs/pages/QuadraticBezierCurve3.html.md)
+- [SplineCurve](https://threejs.org/docs/pages/SplineCurve.html.md)
+- [VivianiCurve](https://threejs.org/docs/pages/VivianiCurve.html.md)
+
+### Effects
+
+- [AnaglyphEffect](https://threejs.org/docs/pages/AnaglyphEffect.html.md)
+- [AsciiEffect](https://threejs.org/docs/pages/AsciiEffect.html.md)
+- [OutlineEffect](https://threejs.org/docs/pages/OutlineEffect.html.md)
+- [ParallaxBarrierEffect](https://threejs.org/docs/pages/ParallaxBarrierEffect.html.md)
+- [StereoEffect](https://threejs.org/docs/pages/StereoEffect.html.md)
+
+### Post-Processing
+
+- [AfterimagePass](https://threejs.org/docs/pages/AfterimagePass.html.md)
+- [AnaglyphPassNode](https://threejs.org/docs/pages/AnaglyphPassNode.html.md)
+- [BloomPass](https://threejs.org/docs/pages/BloomPass.html.md)
+- [BokehPass](https://threejs.org/docs/pages/BokehPass.html.md)
+- [ClearMaskPass](https://threejs.org/docs/pages/ClearMaskPass.html.md)
+- [ClearPass](https://threejs.org/docs/pages/ClearPass.html.md)
+- [CubeTexturePass](https://threejs.org/docs/pages/CubeTexturePass.html.md)
+- [DotScreenPass](https://threejs.org/docs/pages/DotScreenPass.html.md)
+- [FXAAPass](https://threejs.org/docs/pages/FXAAPass.html.md)
+- [FilmPass](https://threejs.org/docs/pages/FilmPass.html.md)
+- [GTAOPass](https://threejs.org/docs/pages/GTAOPass.html.md)
+- [GlitchPass](https://threejs.org/docs/pages/GlitchPass.html.md)
+- [HalftonePass](https://threejs.org/docs/pages/HalftonePass.html.md)
+- [LUTPass](https://threejs.org/docs/pages/LUTPass.html.md)
+- [MaskPass](https://threejs.org/docs/pages/MaskPass.html.md)
+- [OutlinePass](https://threejs.org/docs/pages/OutlinePass.html.md)
+- [OutputPass](https://threejs.org/docs/pages/OutputPass.html.md)
+- [ParallaxBarrierPassNode](https://threejs.org/docs/pages/ParallaxBarrierPassNode.html.md)
+- [Pass](https://threejs.org/docs/pages/Pass.html.md)
+- [PassNode](https://threejs.org/docs/pages/PassNode.html.md)
+- [PixelationPassNode](https://threejs.org/docs/pages/PixelationPassNode.html.md)
+- [ReflectorForSSRPass](https://threejs.org/docs/pages/ReflectorForSSRPass.html.md)
+- [RenderPass](https://threejs.org/docs/pages/RenderPass.html.md)
+- [RenderPixelatedPass](https://threejs.org/docs/pages/RenderPixelatedPass.html.md)
+- [RenderTransitionPass](https://threejs.org/docs/pages/RenderTransitionPass.html.md)
+- [RetroPassNode](https://threejs.org/docs/pages/RetroPassNode.html.md)
+- [SAOPass](https://threejs.org/docs/pages/SAOPass.html.md)
+- [SMAAPass](https://threejs.org/docs/pages/SMAAPass.html.md)
+- [SSAAPassNode](https://threejs.org/docs/pages/SSAAPassNode.html.md)
+- [SSAARenderPass](https://threejs.org/docs/pages/SSAARenderPass.html.md)
+- [SSAOPass](https://threejs.org/docs/pages/SSAOPass.html.md)
+- [SSRPass](https://threejs.org/docs/pages/SSRPass.html.md)
+- [SavePass](https://threejs.org/docs/pages/SavePass.html.md)
+- [ShaderPass](https://threejs.org/docs/pages/ShaderPass.html.md)
+- [StereoCompositePassNode](https://threejs.org/docs/pages/StereoCompositePassNode.html.md)
+- [StereoPassNode](https://threejs.org/docs/pages/StereoPassNode.html.md)
+- [TAARenderPass](https://threejs.org/docs/pages/TAARenderPass.html.md)
+- [TexturePass](https://threejs.org/docs/pages/TexturePass.html.md)
+- [ToonOutlinePassNode](https://threejs.org/docs/pages/ToonOutlinePassNode.html.md)
+- [UnrealBloomPass](https://threejs.org/docs/pages/UnrealBloomPass.html.md)
+
+### Nodes (TSL)
+
+- [AONode](https://threejs.org/docs/pages/AONode.html.md)
+- [AfterImageNode](https://threejs.org/docs/pages/AfterImageNode.html.md)
+- [AmbientLightNode](https://threejs.org/docs/pages/AmbientLightNode.html.md)
+- [AnalyticLightNode](https://threejs.org/docs/pages/AnalyticLightNode.html.md)
+- [AnamorphicNode](https://threejs.org/docs/pages/AnamorphicNode.html.md)
+- [ArrayElementNode](https://threejs.org/docs/pages/ArrayElementNode.html.md)
+- [ArrayNode](https://threejs.org/docs/pages/ArrayNode.html.md)
+- [AssignNode](https://threejs.org/docs/pages/AssignNode.html.md)
+- [AtomicFunctionNode](https://threejs.org/docs/pages/AtomicFunctionNode.html.md)
+- [AttributeNode](https://threejs.org/docs/pages/AttributeNode.html.md)
+- [BarrierNode](https://threejs.org/docs/pages/BarrierNode.html.md)
+- [BasicEnvironmentNode](https://threejs.org/docs/pages/BasicEnvironmentNode.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)
+- [BitcastNode](https://threejs.org/docs/pages/BitcastNode.html.md)
+- [BitcountNode](https://threejs.org/docs/pages/BitcountNode.html.md)
+- [BloomNode](https://threejs.org/docs/pages/BloomNode.html.md)
+- [BufferAttributeNode](https://threejs.org/docs/pages/BufferAttributeNode.html.md)
+- [BufferNode](https://threejs.org/docs/pages/BufferNode.html.md)
+- [BuiltinNode](https://threejs.org/docs/pages/BuiltinNode.html.md)
+- [BumpMapNode](https://threejs.org/docs/pages/BumpMapNode.html.md)
+- [BypassNode](https://threejs.org/docs/pages/BypassNode.html.md)
+- [CSMShadowNode](https://threejs.org/docs/pages/CSMShadowNode.html.md)
+- [ChromaticAberrationNode](https://threejs.org/docs/pages/ChromaticAberrationNode.html.md)
+- [ClippingNode](https://threejs.org/docs/pages/ClippingNode.html.md)
+- [CodeNode](https://threejs.org/docs/pages/CodeNode.html.md)
+- [ColorSpaceNode](https://threejs.org/docs/pages/ColorSpaceNode.html.md)
+- [ComputeBuiltinNode](https://threejs.org/docs/pages/ComputeBuiltinNode.html.md)
+- [ComputeNode](https://threejs.org/docs/pages/ComputeNode.html.md)
+- [ConditionalNode](https://threejs.org/docs/pages/ConditionalNode.html.md)
+- [ConstNode](https://threejs.org/docs/pages/ConstNode.html.md)
+- [ContextNode](https://threejs.org/docs/pages/ContextNode.html.md)
+- [ConvertNode](https://threejs.org/docs/pages/ConvertNode.html.md)
+- [CubeMapNode](https://threejs.org/docs/pages/CubeMapNode.html.md)
+- [CubeTextureNode](https://threejs.org/docs/pages/CubeTextureNode.html.md)
+- [DenoiseNode](https://threejs.org/docs/pages/DenoiseNode.html.md)
+- [DepthOfFieldNode](https://threejs.org/docs/pages/DepthOfFieldNode.html.md)
+- [DirectionalLightNode](https://threejs.org/docs/pages/DirectionalLightNode.html.md)
+- [DotScreenNode](https://threejs.org/docs/pages/DotScreenNode.html.md)
+- [EnvironmentNode](https://threejs.org/docs/pages/EnvironmentNode.html.md)
+- [EventNode](https://threejs.org/docs/pages/EventNode.html.md)
+- [ExpressionNode](https://threejs.org/docs/pages/ExpressionNode.html.md)
+- [FXAANode](https://threejs.org/docs/pages/FXAANode.html.md)
+- [FilmNode](https://threejs.org/docs/pages/FilmNode.html.md)
+- [FlipNode](https://threejs.org/docs/pages/FlipNode.html.md)
+- [FrontFacingNode](https://threejs.org/docs/pages/FrontFacingNode.html.md)
+- [FunctionCallNode](https://threejs.org/docs/pages/FunctionCallNode.html.md)
+- [FunctionNode](https://threejs.org/docs/pages/FunctionNode.html.md)
+- [FunctionOverloadingNode](https://threejs.org/docs/pages/FunctionOverloadingNode.html.md)
+- [GTAONode](https://threejs.org/docs/pages/GTAONode.html.md)
+- [GaussianBlurNode](https://threejs.org/docs/pages/GaussianBlurNode.html.md)
+- [GodraysNode](https://threejs.org/docs/pages/GodraysNode.html.md)
+- [HemisphereLightNode](https://threejs.org/docs/pages/HemisphereLightNode.html.md)
+- [IESSpotLightNode](https://threejs.org/docs/pages/IESSpotLightNode.html.md)
+- [IndexNode](https://threejs.org/docs/pages/IndexNode.html.md)
+- [InputNode](https://threejs.org/docs/pages/InputNode.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)
+- [IsolateNode](https://threejs.org/docs/pages/IsolateNode.html.md)
+- [JoinNode](https://threejs.org/docs/pages/JoinNode.html.md)
+- [LensflareNode](https://threejs.org/docs/pages/LensflareNode.html.md)
+- [LightProbeNode](https://threejs.org/docs/pages/LightProbeNode.html.md)
+- [LightingContextNode](https://threejs.org/docs/pages/LightingContextNode.html.md)
+- [LightingNode](https://threejs.org/docs/pages/LightingNode.html.md)
+- [LightsNode](https://threejs.org/docs/pages/LightsNode.html.md)
+- [LoopNode](https://threejs.org/docs/pages/LoopNode.html.md)
+- [Lut3DNode](https://threejs.org/docs/pages/Lut3DNode.html.md)
+- [MRTNode](https://threejs.org/docs/pages/MRTNode.html.md)
+- [MaterialNode](https://threejs.org/docs/pages/MaterialNode.html.md)
+- [MaterialReferenceNode](https://threejs.org/docs/pages/MaterialReferenceNode.html.md)
+- [MathNode](https://threejs.org/docs/pages/MathNode.html.md)
+- [MaxMipLevelNode](https://threejs.org/docs/pages/MaxMipLevelNode.html.md)
+- [MemberNode](https://threejs.org/docs/pages/MemberNode.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)
+- [NormalMapNode](https://threejs.org/docs/pages/NormalMapNode.html.md)
+- [Object3DNode](https://threejs.org/docs/pages/Object3DNode.html.md)
+- [OperatorNode](https://threejs.org/docs/pages/OperatorNode.html.md)
+- [OutlineNode](https://threejs.org/docs/pages/OutlineNode.html.md)
+- [OutputStructNode](https://threejs.org/docs/pages/OutputStructNode.html.md)
+- [PMREMNode](https://threejs.org/docs/pages/PMREMNode.html.md)
+- [PackFloatNode](https://threejs.org/docs/pages/PackFloatNode.html.md)
+- [ParameterNode](https://threejs.org/docs/pages/ParameterNode.html.md)
+- [PassMultipleTextureNode](https://threejs.org/docs/pages/PassMultipleTextureNode.html.md)
+- [PassTextureNode](https://threejs.org/docs/pages/PassTextureNode.html.md)
+- [PixelationNode](https://threejs.org/docs/pages/PixelationNode.html.md)
+- [PointLightNode](https://threejs.org/docs/pages/PointLightNode.html.md)
+- [PointShadowNode](https://threejs.org/docs/pages/PointShadowNode.html.md)
+- [PointUVNode](https://threejs.org/docs/pages/PointUVNode.html.md)
+- [ProjectorLightNode](https://threejs.org/docs/pages/ProjectorLightNode.html.md)
+- [PropertyNode](https://threejs.org/docs/pages/PropertyNode.html.md)
+- [RGBShiftNode](https://threejs.org/docs/pages/RGBShiftNode.html.md)
+- [RTTNode](https://threejs.org/docs/pages/RTTNode.html.md)
+- [RangeNode](https://threejs.org/docs/pages/RangeNode.html.md)
+- [RectAreaLightNode](https://threejs.org/docs/pages/RectAreaLightNode.html.md)
+- [ReferenceBaseNode](https://threejs.org/docs/pages/ReferenceBaseNode.html.md)
+- [ReferenceElementNode](https://threejs.org/docs/pages/ReferenceElementNode.html.md)
+- [ReferenceNode](https://threejs.org/docs/pages/ReferenceNode.html.md)
+- [ReflectorNode](https://threejs.org/docs/pages/ReflectorNode.html.md)
+- [RemapNode](https://threejs.org/docs/pages/RemapNode.html.md)
+- [RenderOutputNode](https://threejs.org/docs/pages/RenderOutputNode.html.md)
+- [RendererReferenceNode](https://threejs.org/docs/pages/RendererReferenceNode.html.md)
+- [RotateNode](https://threejs.org/docs/pages/RotateNode.html.md)
+- [SMAANode](https://threejs.org/docs/pages/SMAANode.html.md)
+- [SSGINode](https://threejs.org/docs/pages/SSGINode.html.md)
+- [SSRNode](https://threejs.org/docs/pages/SSRNode.html.md)
+- [SSSNode](https://threejs.org/docs/pages/SSSNode.html.md)
+- [SampleNode](https://threejs.org/docs/pages/SampleNode.html.md)
+- [ScreenNode](https://threejs.org/docs/pages/ScreenNode.html.md)
+- [SetNode](https://threejs.org/docs/pages/SetNode.html.md)
+- [ShadowBaseNode](https://threejs.org/docs/pages/ShadowBaseNode.html.md)
+- [ShadowNode](https://threejs.org/docs/pages/ShadowNode.html.md)
+- [SkinningNode](https://threejs.org/docs/pages/SkinningNode.html.md)
+- [SobelOperatorNode](https://threejs.org/docs/pages/SobelOperatorNode.html.md)
+- [SplitNode](https://threejs.org/docs/pages/SplitNode.html.md)
+- [SpotLightNode](https://threejs.org/docs/pages/SpotLightNode.html.md)
+- [StackNode](https://threejs.org/docs/pages/StackNode.html.md)
+- [StorageArrayElementNode](https://threejs.org/docs/pages/StorageArrayElementNode.html.md)
+- [StorageBufferNode](https://threejs.org/docs/pages/StorageBufferNode.html.md)
+- [StorageTextureNode](https://threejs.org/docs/pages/StorageTextureNode.html.md)
+- [StructNode](https://threejs.org/docs/pages/StructNode.html.md)
+- [StructTypeNode](https://threejs.org/docs/pages/StructTypeNode.html.md)
+- [SubBuildNode](https://threejs.org/docs/pages/SubBuildNode.html.md)
+- [SubgroupFunctionNode](https://threejs.org/docs/pages/SubgroupFunctionNode.html.md)
+- [TRAANode](https://threejs.org/docs/pages/TRAANode.html.md)
+- [TempNode](https://threejs.org/docs/pages/TempNode.html.md)
+- [Texture3DNode](https://threejs.org/docs/pages/Texture3DNode.html.md)
+- [TextureNode](https://threejs.org/docs/pages/TextureNode.html.md)
+- [TextureSizeNode](https://threejs.org/docs/pages/TextureSizeNode.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)
+- [TransitionNode](https://threejs.org/docs/pages/TransitionNode.html.md)
+- [UniformArrayElementNode](https://threejs.org/docs/pages/UniformArrayElementNode.html.md)
+- [UniformArrayNode](https://threejs.org/docs/pages/UniformArrayNode.html.md)
+- [UniformGroupNode](https://threejs.org/docs/pages/UniformGroupNode.html.md)
+- [UniformNode](https://threejs.org/docs/pages/UniformNode.html.md)
+- [UnpackFloatNode](https://threejs.org/docs/pages/UnpackFloatNode.html.md)
+- [UserDataNode](https://threejs.org/docs/pages/UserDataNode.html.md)
+- [VarNode](https://threejs.org/docs/pages/VarNode.html.md)
+- [VaryingNode](https://threejs.org/docs/pages/VaryingNode.html.md)
+- [VelocityNode](https://threejs.org/docs/pages/VelocityNode.html.md)
+- [VertexColorNode](https://threejs.org/docs/pages/VertexColorNode.html.md)
+- [ViewportDepthNode](https://threejs.org/docs/pages/ViewportDepthNode.html.md)
+- [ViewportDepthTextureNode](https://threejs.org/docs/pages/ViewportDepthTextureNode.html.md)
+- [ViewportSharedTextureNode](https://threejs.org/docs/pages/ViewportSharedTextureNode.html.md)
+- [ViewportTextureNode](https://threejs.org/docs/pages/ViewportTextureNode.html.md)
+- [WorkgroupInfoElementNode](https://threejs.org/docs/pages/WorkgroupInfoElementNode.html.md)
+- [WorkgroupInfoNode](https://threejs.org/docs/pages/WorkgroupInfoNode.html.md)
+
+### WebXR
+
+- [EXRExporter](https://threejs.org/docs/pages/EXRExporter.html.md)
+- [WebXRDepthSensing](https://threejs.org/docs/pages/WebXRDepthSensing.html.md)
+- [WebXRManager](https://threejs.org/docs/pages/WebXRManager.html.md)
+- [XRButton](https://threejs.org/docs/pages/XRButton.html.md)
+- [XRControllerModel](https://threejs.org/docs/pages/XRControllerModel.html.md)
+- [XRControllerModelFactory](https://threejs.org/docs/pages/XRControllerModelFactory.html.md)
+- [XRHandMeshModel](https://threejs.org/docs/pages/XRHandMeshModel.html.md)
+- [XRHandModel](https://threejs.org/docs/pages/XRHandModel.html.md)
+- [XRHandModelFactory](https://threejs.org/docs/pages/XRHandModelFactory.html.md)
+- [XRHandPrimitiveModel](https://threejs.org/docs/pages/XRHandPrimitiveModel.html.md)
+- [XRManager](https://threejs.org/docs/pages/XRManager.html.md)
+- [XRPlanes](https://threejs.org/docs/pages/XRPlanes.html.md)
+
+### Shader Modules
+
+- [module-ACESFilmicToneMappingShader](https://threejs.org/docs/pages/module-ACESFilmicToneMappingShader.html.md)
+- [module-AfterimageShader](https://threejs.org/docs/pages/module-AfterimageShader.html.md)
+- [module-BasicShader](https://threejs.org/docs/pages/module-BasicShader.html.md)
+- [module-Bayer](https://threejs.org/docs/pages/module-Bayer.html.md)
+- [module-BleachBypassShader](https://threejs.org/docs/pages/module-BleachBypassShader.html.md)
+- [module-BlendShader](https://threejs.org/docs/pages/module-BlendShader.html.md)
+- [module-BokehShader](https://threejs.org/docs/pages/module-BokehShader.html.md)
+- [module-BokehShader2](https://threejs.org/docs/pages/module-BokehShader2.html.md)
+- [module-BrightnessContrastShader](https://threejs.org/docs/pages/module-BrightnessContrastShader.html.md)
+- [module-BufferGeometryUtils](https://threejs.org/docs/pages/module-BufferGeometryUtils.html.md)
+- [module-CSMShader](https://threejs.org/docs/pages/module-CSMShader.html.md)
+- [module-CameraUtils](https://threejs.org/docs/pages/module-CameraUtils.html.md)
+- [module-ColorCorrectionShader](https://threejs.org/docs/pages/module-ColorCorrectionShader.html.md)
+- [module-ColorSpaces](https://threejs.org/docs/pages/module-ColorSpaces.html.md)
+- [module-ColorifyShader](https://threejs.org/docs/pages/module-ColorifyShader.html.md)
+- [module-ConvolutionShader](https://threejs.org/docs/pages/module-ConvolutionShader.html.md)
+- [module-CopyShader](https://threejs.org/docs/pages/module-CopyShader.html.md)
+- [module-DOFMipMapShader](https://threejs.org/docs/pages/module-DOFMipMapShader.html.md)
+- [module-DepthLimitedBlurShader](https://threejs.org/docs/pages/module-DepthLimitedBlurShader.html.md)
+- [module-DigitalGlitch](https://threejs.org/docs/pages/module-DigitalGlitch.html.md)
+- [module-DotScreenShader](https://threejs.org/docs/pages/module-DotScreenShader.html.md)
+- [module-ExposureShader](https://threejs.org/docs/pages/module-ExposureShader.html.md)
+- [module-FXAAShader](https://threejs.org/docs/pages/module-FXAAShader.html.md)
+- [module-FilmShader](https://threejs.org/docs/pages/module-FilmShader.html.md)
+- [module-FocusShader](https://threejs.org/docs/pages/module-FocusShader.html.md)
+- [module-FreiChenShader](https://threejs.org/docs/pages/module-FreiChenShader.html.md)
+- [module-GTAOShader](https://threejs.org/docs/pages/module-GTAOShader.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-GeometryUtils](https://threejs.org/docs/pages/module-GeometryUtils.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-HorizontalTiltShiftShader](https://threejs.org/docs/pages/module-HorizontalTiltShiftShader.html.md)
+- [module-HueSaturationShader](https://threejs.org/docs/pages/module-HueSaturationShader.html.md)
+- [module-Interpolations](https://threejs.org/docs/pages/module-Interpolations.html.md)
+- [module-KaleidoShader](https://threejs.org/docs/pages/module-KaleidoShader.html.md)
+- [module-LuminosityHighPassShader](https://threejs.org/docs/pages/module-LuminosityHighPassShader.html.md)
+- [module-LuminosityShader](https://threejs.org/docs/pages/module-LuminosityShader.html.md)
+- [module-MirrorShader](https://threejs.org/docs/pages/module-MirrorShader.html.md)
+- [module-NURBSUtils](https://threejs.org/docs/pages/module-NURBSUtils.html.md)
+- [module-NormalMapShader](https://threejs.org/docs/pages/module-NormalMapShader.html.md)
+- [module-OutputShader](https://threejs.org/docs/pages/module-OutputShader.html.md)
+- [module-ParametricFunctions](https://threejs.org/docs/pages/module-ParametricFunctions.html.md)
+- [module-PoissonDenoiseShader](https://threejs.org/docs/pages/module-PoissonDenoiseShader.html.md)
+- [module-RGBShiftShader](https://threejs.org/docs/pages/module-RGBShiftShader.html.md)
+- [module-Raymarching](https://threejs.org/docs/pages/module-Raymarching.html.md)
+- [module-SAOShader](https://threejs.org/docs/pages/module-SAOShader.html.md)
+- [module-SMAAShader](https://threejs.org/docs/pages/module-SMAAShader.html.md)
+- [module-SSAOShader](https://threejs.org/docs/pages/module-SSAOShader.html.md)
+- [module-SSRShader](https://threejs.org/docs/pages/module-SSRShader.html.md)
+- [module-SceneUtils](https://threejs.org/docs/pages/module-SceneUtils.html.md)
+- [module-SepiaShader](https://threejs.org/docs/pages/module-SepiaShader.html.md)
+- [module-SkeletonUtils](https://threejs.org/docs/pages/module-SkeletonUtils.html.md)
+- [module-SobelOperatorShader](https://threejs.org/docs/pages/module-SobelOperatorShader.html.md)
+- [module-SortUtils](https://threejs.org/docs/pages/module-SortUtils.html.md)
+- [module-SubsurfaceScatteringShader](https://threejs.org/docs/pages/module-SubsurfaceScatteringShader.html.md)
+- [module-Text2D](https://threejs.org/docs/pages/module-Text2D.html.md)
+- [module-TriangleBlurShader](https://threejs.org/docs/pages/module-TriangleBlurShader.html.md)
+- [module-UVsDebug](https://threejs.org/docs/pages/module-UVsDebug.html.md)
+- [module-UniformsUtils](https://threejs.org/docs/pages/module-UniformsUtils.html.md)
+- [module-UnpackDepthRGBAShader](https://threejs.org/docs/pages/module-UnpackDepthRGBAShader.html.md)
+- [module-VelocityShader](https://threejs.org/docs/pages/module-VelocityShader.html.md)
+- [module-VerticalBlurShader](https://threejs.org/docs/pages/module-VerticalBlurShader.html.md)
+- [module-VerticalTiltShiftShader](https://threejs.org/docs/pages/module-VerticalTiltShiftShader.html.md)
+- [module-VignetteShader](https://threejs.org/docs/pages/module-VignetteShader.html.md)
+- [module-VolumeShader](https://threejs.org/docs/pages/module-VolumeShader.html.md)
+- [module-WaterRefractionShader](https://threejs.org/docs/pages/module-WaterRefractionShader.html.md)
+- [module-WebGLTextureUtils](https://threejs.org/docs/pages/module-WebGLTextureUtils.html.md)
+- [module-WebGPUTextureUtils](https://threejs.org/docs/pages/module-WebGPUTextureUtils.html.md)

+ 158 - 0
docs/llms.txt

@@ -0,0 +1,158 @@
+# Three.js
+
+> Three.js is a cross-browser JavaScript library for creating 3D graphics using WebGL and WebGPU.
+
+## Instructions for Large Language Models
+
+When generating Three.js code, follow these guidelines:
+
+### 1. Use Import Maps (Not Old CDN Patterns)
+
+WRONG - outdated pattern:
+```html
+<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
+```
+
+CORRECT - modern pattern (always use latest version):
+```html
+<script type="importmap">
+{
+  "imports": {
+    "three": "https://cdn.jsdelivr.net/npm/three@0.183.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.183.0/examples/jsm/"
+  }
+}
+</script>
+<script type="module">
+import * as THREE from 'three';
+import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
+</script>
+```
+
+### 2. Choosing Between WebGLRenderer and WebGPURenderer
+
+Three.js maintains both renderers:
+
+**Use WebGLRenderer** (default, mature):
+- Maximum browser compatibility
+- Well-established, many years of development
+- Most examples and tutorials use this
+
+```js
+import * as THREE from 'three';
+const renderer = new THREE.WebGLRenderer();
+```
+
+**Use WebGPURenderer** when you need:
+- Custom shaders/materials using TSL (Three.js Shading Language)
+- Compute shaders
+- Advanced node-based materials
+
+```js
+import * as THREE from 'three/webgpu';
+const renderer = new THREE.WebGPURenderer();
+await renderer.init();
+```
+
+### 3. TSL (Three.js Shading Language)
+
+When using WebGPURenderer, use TSL instead of raw GLSL for custom materials:
+
+```js
+import { texture, uv, color } from 'three/tsl';
+
+const material = new THREE.MeshStandardNodeMaterial();
+material.colorNode = texture( myTexture ).mul( color( 0xff0000 ) );
+```
+
+TSL benefits:
+- Works with both WebGL and WebGPU backends
+- No string manipulation or onBeforeCompile hacks
+- Type-safe, composable shader nodes
+- Automatic optimization
+
+### 4. NodeMaterial Classes (for WebGPU/TSL)
+
+When using TSL, use node-based materials:
+- MeshBasicNodeMaterial
+- MeshStandardNodeMaterial
+- MeshPhysicalNodeMaterial
+- LineBasicNodeMaterial
+- SpriteNodeMaterial
+
+## Getting Started
+
+- [Installation](https://threejs.org/manual/#en/installation)
+- [Creating a Scene](https://threejs.org/manual/#en/creating-a-scene)
+- [Fundamentals](https://threejs.org/manual/#en/fundamentals)
+- [Responsive Design](https://threejs.org/manual/#en/responsive)
+
+## Renderer Guides
+
+- [WebGPURenderer](https://threejs.org/manual/#en/webgpurenderer)
+
+## Core Concepts
+
+- [TSL Specification](https://threejs.org/docs/#api/en/nodes/TSL): Complete shader language reference
+- [Animation System](https://threejs.org/manual/#en/animation-system)
+- [Loading 3D Models](https://threejs.org/manual/#en/loading-3d-models)
+- [Scene Graph](https://threejs.org/manual/#en/scenegraph)
+- [Materials](https://threejs.org/manual/#en/materials)
+- [Textures](https://threejs.org/manual/#en/textures)
+- [Lights](https://threejs.org/manual/#en/lights)
+- [Cameras](https://threejs.org/manual/#en/cameras)
+- [Shadows](https://threejs.org/manual/#en/shadows)
+
+## Essential API
+
+### Core
+- [Object3D](https://threejs.org/docs/#api/en/core/Object3D)
+- [BufferGeometry](https://threejs.org/docs/#api/en/core/BufferGeometry)
+- [BufferAttribute](https://threejs.org/docs/#api/en/core/BufferAttribute)
+
+### Scenes
+- [Scene](https://threejs.org/docs/#api/en/scenes/Scene)
+
+### Cameras
+- [PerspectiveCamera](https://threejs.org/docs/#api/en/cameras/PerspectiveCamera)
+- [OrthographicCamera](https://threejs.org/docs/#api/en/cameras/OrthographicCamera)
+
+### Renderers
+- [WebGLRenderer](https://threejs.org/docs/#api/en/renderers/WebGLRenderer)
+- [WebGPURenderer](https://threejs.org/docs/#api/en/renderers/webgpu/WebGPURenderer)
+
+### Objects
+- [Mesh](https://threejs.org/docs/#api/en/objects/Mesh)
+- [InstancedMesh](https://threejs.org/docs/#api/en/objects/InstancedMesh)
+- [Group](https://threejs.org/docs/#api/en/objects/Group)
+
+### Materials
+- [MeshBasicMaterial](https://threejs.org/docs/#api/en/materials/MeshBasicMaterial)
+- [MeshStandardMaterial](https://threejs.org/docs/#api/en/materials/MeshStandardMaterial)
+- [MeshPhysicalMaterial](https://threejs.org/docs/#api/en/materials/MeshPhysicalMaterial)
+
+### Geometries
+- [BoxGeometry](https://threejs.org/docs/#api/en/geometries/BoxGeometry)
+- [SphereGeometry](https://threejs.org/docs/#api/en/geometries/SphereGeometry)
+- [PlaneGeometry](https://threejs.org/docs/#api/en/geometries/PlaneGeometry)
+
+### Lights
+- [AmbientLight](https://threejs.org/docs/#api/en/lights/AmbientLight)
+- [DirectionalLight](https://threejs.org/docs/#api/en/lights/DirectionalLight)
+- [PointLight](https://threejs.org/docs/#api/en/lights/PointLight)
+- [SpotLight](https://threejs.org/docs/#api/en/lights/SpotLight)
+
+### Loaders
+- [TextureLoader](https://threejs.org/docs/#api/en/loaders/TextureLoader)
+- [GLTFLoader](https://threejs.org/docs/#examples/en/loaders/GLTFLoader)
+
+### Controls
+- [OrbitControls](https://threejs.org/docs/#examples/en/controls/OrbitControls)
+- [TransformControls](https://threejs.org/docs/#examples/en/controls/TransformControls)
+
+### Math
+- [Vector2](https://threejs.org/docs/#api/en/math/Vector2)
+- [Vector3](https://threejs.org/docs/#api/en/math/Vector3)
+- [Matrix4](https://threejs.org/docs/#api/en/math/Matrix4)
+- [Quaternion](https://threejs.org/docs/#api/en/math/Quaternion)
+- [Color](https://threejs.org/docs/#api/en/math/Color)

+ 6 - 6
docs/pages/AMFLoader.html

@@ -37,7 +37,7 @@ scene.add( object );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>manager</strong>
+										<strong translate="no">manager</strong>
 									</td>
 									<td class="description last">
 										<p>The loading manager.</p>
@@ -58,7 +58,7 @@ to the <code>onLoad()</code> callback.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>url</strong>
+										<strong translate="no">url</strong>
 									</td>
 									<td class="description last">
 										<p>The path/URL of the file to be loaded. This can also be a data URI.</p>
@@ -66,7 +66,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onLoad</strong>
+										<strong translate="no">onLoad</strong>
 									</td>
 									<td class="description last">
 										<p>Executed when the loading process has been finished.</p>
@@ -74,7 +74,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onProgress</strong>
+										<strong translate="no">onProgress</strong>
 									</td>
 									<td class="description last">
 										<p>Executed while the loading is in progress.</p>
@@ -82,7 +82,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onError</strong>
+										<strong translate="no">onError</strong>
 									</td>
 									<td class="description last">
 										<p>Executed when errors occur.</p>
@@ -103,7 +103,7 @@ to the <code>onLoad()</code> callback.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>data</strong>
+										<strong translate="no">data</strong>
 									</td>
 									<td class="description last">
 										<p>The raw AMF asset data as an array buffer.</p>

+ 73 - 0
docs/pages/AMFLoader.html.md

@@ -0,0 +1,73 @@
+*Inheritance: Loader →*
+
+# AMFLoader
+
+A loader for the AMF format.
+
+The loader supports materials, color and ZIP compressed files. No constellation support (yet).
+
+## Code Example
+
+```js
+const loader = new AMFLoader();
+const object = await loader.loadAsync( './models/amf/rook.amf' );
+scene.add( object );
+```
+
+## Import
+
+AMFLoader is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { AMFLoader } from 'three/addons/loaders/AMFLoader.js';
+```
+
+## Constructor
+
+### new AMFLoader( manager : LoadingManager )
+
+Constructs a new AMF loader.
+
+**manager**
+
+The loading manager.
+
+## Methods
+
+### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )
+
+Starts loading from the given URL and passes the loaded AMF asset to the `onLoad()` callback.
+
+**url**
+
+The path/URL of the file to be loaded. This can also be a data URI.
+
+**onLoad**
+
+Executed when the loading process has been finished.
+
+**onProgress**
+
+Executed while the loading is in progress.
+
+**onError**
+
+Executed when errors occur.
+
+**Overrides:** [Loader#load](Loader.html#load)
+
+### .parse( data : ArrayBuffer ) : Group
+
+Parses the given AMF data and returns the resulting group.
+
+**data**
+
+The raw AMF asset data as an array buffer.
+
+**Overrides:** [Loader#parse](Loader.html#parse)
+
+**Returns:** A group representing the parsed asset.
+
+## Source
+
+[examples/jsm/loaders/AMFLoader.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/AMFLoader.js)

+ 1 - 1
docs/pages/AONode.html

@@ -29,7 +29,7 @@ node can be used as input for this module. Used in <a href="NodeMaterial.html">N
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>aoNode</strong>
+										<strong translate="no">aoNode</strong>
 									</td>
 									<td class="description last">
 										<p>The ambient occlusion node.</p>

+ 29 - 0
docs/pages/AONode.html.md

@@ -0,0 +1,29 @@
+*Inheritance: EventDispatcher → Node → LightingNode →*
+
+# AONode
+
+A generic class that can be used by nodes which contribute ambient occlusion to the scene. E.g. an ambient occlusion map node can be used as input for this module. Used in [NodeMaterial](NodeMaterial.html).
+
+## Constructor
+
+### new AONode( aoNode : Node.<float> )
+
+Constructs a new AO node.
+
+**aoNode**
+
+The ambient occlusion node.
+
+Default is `null`.
+
+## Properties
+
+### .aoNode : Node.<float>
+
+The ambient occlusion node.
+
+Default is `null`.
+
+## Source
+
+[src/nodes/lighting/AONode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/AONode.js)

+ 2 - 2
docs/pages/ARButton.html

@@ -37,7 +37,7 @@ with a factory method and then appended ot the website's DOM.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>renderer</strong>
+										<strong translate="no">renderer</strong>
 									</td>
 									<td class="description last">
 										<p>The renderer.</p>
@@ -45,7 +45,7 @@ with a factory method and then appended ot the website's DOM.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>sessionInit</strong>
+										<strong translate="no">sessionInit</strong>
 									</td>
 									<td class="description last">
 										<p>The a configuration object for the AR session.</p>

+ 37 - 0
docs/pages/ARButton.html.md

@@ -0,0 +1,37 @@
+# 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.
+
+## Code Example
+
+```js
+document.body.appendChild( ARButton.createButton( renderer ) );
+```
+
+## Import
+
+ARButton is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { ARButton } from 'three/addons/webxr/ARButton.js';
+```
+
+## Static Methods
+
+### .createButton( renderer : WebGLRenderer | WebGPURenderer, sessionInit : XRSessionInit ) : HTMLElement
+
+Constructs a new AR button.
+
+**renderer**
+
+The renderer.
+
+**sessionInit**
+
+The a configuration object for the AR session.
+
+**Returns:** The button or an error message if `immersive-ar` isn't supported.
+
+## Source
+
+[examples/jsm/webxr/ARButton.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/webxr/ARButton.js)

+ 6 - 6
docs/pages/AfterImageNode.html

@@ -30,7 +30,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>textureNode</strong>
+										<strong translate="no">textureNode</strong>
 									</td>
 									<td class="description last">
 										<p>The texture node that represents the input of the effect.</p>
@@ -38,7 +38,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>damp</strong>
+										<strong translate="no">damp</strong>
 									</td>
 									<td class="description last">
 										<p>The damping intensity. A higher value means a stronger after image effect.</p>
@@ -104,7 +104,7 @@ when the effect is no longer required.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>width</strong>
+										<strong translate="no">width</strong>
 									</td>
 									<td class="description last">
 										<p>The width of the effect.</p>
@@ -112,7 +112,7 @@ when the effect is no longer required.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>height</strong>
+										<strong translate="no">height</strong>
 									</td>
 									<td class="description last">
 										<p>The height of the effect.</p>
@@ -130,7 +130,7 @@ when the effect is no longer required.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -151,7 +151,7 @@ when the effect is no longer required.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>frame</strong>
+										<strong translate="no">frame</strong>
 									</td>
 									<td class="description last">
 										<p>The current node frame.</p>

+ 97 - 0
docs/pages/AfterImageNode.html.md

@@ -0,0 +1,97 @@
+*Inheritance: EventDispatcher → Node → TempNode →*
+
+# AfterImageNode
+
+Post processing node for creating an after image effect.
+
+## Import
+
+AfterImageNode is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { afterImage } from 'three/addons/tsl/display/AfterImageNode.js';
+```
+
+## Constructor
+
+### new AfterImageNode( textureNode : TextureNode, damp : Node.<float> )
+
+Constructs a new after image node.
+
+**textureNode**
+
+The texture node that represents the input of the effect.
+
+**damp**
+
+The damping intensity. A higher value means a stronger after image effect.
+
+Default is `0.96`.
+
+## Properties
+
+### .damp : Node.<float>
+
+How quickly the after-image fades. A higher value means the after-image persists longer, while a lower value means it fades faster. Should be in the range `[0, 1]`.
+
+### .textureNode : TextureNode
+
+The texture node that represents the input of the effect.
+
+### .updateBeforeType : string
+
+The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders its effect once per frame in `updateBefore()`.
+
+Default is `'frame'`.
+
+**Overrides:** [TempNode#updateBeforeType](TempNode.html#updateBeforeType)
+
+## Methods
+
+### .dispose()
+
+Frees internal resources. This method should be called when the effect is no longer required.
+
+**Overrides:** [TempNode#dispose](TempNode.html#dispose)
+
+### .getTextureNode() : PassTextureNode
+
+Returns the result of the effect as a texture node.
+
+**Returns:** A texture node that represents the result of the effect.
+
+### .setSize( width : number, height : number )
+
+Sets the 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/AfterImageNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/AfterImageNode.js)

+ 8 - 8
docs/pages/AfterimagePass.html

@@ -34,7 +34,7 @@ composer.addPass( afterimagePass );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>damp</strong>
+										<strong translate="no">damp</strong>
 									</td>
 									<td class="description last">
 										<p>The damping intensity. A higher value means a stronger after image effect.</p>
@@ -93,7 +93,7 @@ method whenever the pass is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>renderer</strong>
+										<strong translate="no">renderer</strong>
 									</td>
 									<td class="description last">
 										<p>The renderer.</p>
@@ -101,7 +101,7 @@ method whenever the pass is no longer used in your app.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>writeBuffer</strong>
+										<strong translate="no">writeBuffer</strong>
 									</td>
 									<td class="description last">
 										<p>The write buffer. This buffer is intended as the rendering
@@ -110,7 +110,7 @@ destination for the pass.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>readBuffer</strong>
+										<strong translate="no">readBuffer</strong>
 									</td>
 									<td class="description last">
 										<p>The read buffer. The pass can access the result from the
@@ -119,7 +119,7 @@ previous pass from this buffer.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>deltaTime</strong>
+										<strong translate="no">deltaTime</strong>
 									</td>
 									<td class="description last">
 										<p>The delta time in seconds.</p>
@@ -127,7 +127,7 @@ previous pass from this buffer.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>maskActive</strong>
+										<strong translate="no">maskActive</strong>
 									</td>
 									<td class="description last">
 										<p>Whether masking is active or not.</p>
@@ -148,7 +148,7 @@ previous pass from this buffer.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>width</strong>
+										<strong translate="no">width</strong>
 									</td>
 									<td class="description last">
 										<p>The width to set.</p>
@@ -156,7 +156,7 @@ previous pass from this buffer.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>height</strong>
+										<strong translate="no">height</strong>
 									</td>
 									<td class="description last">
 										<p>The height to set.</p>

+ 106 - 0
docs/pages/AfterimagePass.html.md

@@ -0,0 +1,106 @@
+*Inheritance: Pass →*
+
+# AfterimagePass
+
+Pass for a basic after image effect.
+
+## Code Example
+
+```js
+const afterimagePass = new AfterimagePass( 0.9 );
+composer.addPass( afterimagePass );
+```
+
+## Import
+
+AfterimagePass is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { AfterimagePass } from 'three/addons/postprocessing/AfterimagePass.js';
+```
+
+## Constructor
+
+### new AfterimagePass( damp : number )
+
+Constructs a new after image pass.
+
+**damp**
+
+The damping intensity. A higher value means a stronger after image effect.
+
+Default is `0.96`.
+
+## Properties
+
+### .compFsMaterial : ShaderMaterial
+
+The composition material.
+
+### .copyFsMaterial : ShaderMaterial
+
+The copy material.
+
+### .damp : number
+
+The damping intensity, from 0.0 to 1.0. A higher value means a stronger after image effect.
+
+### .uniforms : Object
+
+The pass uniforms. Use this object if you want to update the `damp` value at runtime.
+
+```js
+pass.uniforms.damp.value = 0.9;
+```
+
+## Methods
+
+### .dispose()
+
+Frees the GPU-related resources allocated by this instance. Call this method whenever the pass is no longer used in your app.
+
+**Overrides:** [Pass#dispose](Pass.html#dispose)
+
+### .render( renderer : WebGLRenderer, writeBuffer : WebGLRenderTarget, readBuffer : WebGLRenderTarget, deltaTime : number, maskActive : boolean )
+
+Performs the after image pass.
+
+**renderer**
+
+The renderer.
+
+**writeBuffer**
+
+The write buffer. This buffer is intended as the rendering destination for the pass.
+
+**readBuffer**
+
+The read buffer. The pass can access the result from the previous pass from this buffer.
+
+**deltaTime**
+
+The delta time in seconds.
+
+**maskActive**
+
+Whether masking is active or not.
+
+**Overrides:** [Pass#render](Pass.html#render)
+
+### .setSize( width : number, height : number )
+
+Sets the size of the pass.
+
+**width**
+
+The width to set.
+
+**height**
+
+The height to set.
+
+**Overrides:** [Pass#setSize](Pass.html#setSize)
+
+## Source
+
+[examples/jsm/postprocessing/AfterimagePass.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/postprocessing/AfterimagePass.js)

+ 2 - 2
docs/pages/AmbientLight.html

@@ -32,7 +32,7 @@ scene.add( light );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>color</strong>
+										<strong translate="no">color</strong>
 									</td>
 									<td class="description last">
 										<p>The light's color.</p>
@@ -41,7 +41,7 @@ scene.add( light );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>intensity</strong>
+										<strong translate="no">intensity</strong>
 									</td>
 									<td class="description last">
 										<p>The light's strength/intensity.</p>

+ 44 - 0
docs/pages/AmbientLight.html.md

@@ -0,0 +1,44 @@
+*Inheritance: EventDispatcher → Object3D → Light →*
+
+# AmbientLight
+
+This light globally illuminates all objects in the scene equally.
+
+It cannot be used to cast shadows as it does not have a direction.
+
+## Code Example
+
+```js
+const light = new THREE.AmbientLight( 0x404040 ); // soft white light
+scene.add( light );
+```
+
+## Constructor
+
+### new AmbientLight( color : number | Color | string, intensity : number )
+
+Constructs a new ambient light.
+
+**color**
+
+The light's color.
+
+Default is `0xffffff`.
+
+**intensity**
+
+The light's strength/intensity.
+
+Default is `1`.
+
+## Properties
+
+### .isAmbientLight : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+## Source
+
+[src/lights/AmbientLight.js](https://github.com/mrdoob/three.js/blob/master/src/lights/AmbientLight.js)

+ 1 - 1
docs/pages/AmbientLightNode.html

@@ -27,7 +27,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>light</strong>
+										<strong translate="no">light</strong>
 									</td>
 									<td class="description last">
 										<p>The ambient light source.</p>

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

@@ -0,0 +1,21 @@
+*Inheritance: EventDispatcher → Node → LightingNode → AnalyticLightNode →*
+
+# AmbientLightNode
+
+Module for representing ambient lights as nodes.
+
+## Constructor
+
+### new AmbientLightNode( light : AmbientLight )
+
+Constructs a new ambient light node.
+
+**light**
+
+The ambient light source.
+
+Default is `null`.
+
+## Source
+
+[src/nodes/lighting/AmbientLightNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/AmbientLightNode.js)

+ 7 - 7
docs/pages/AmmoPhysics.html

@@ -39,7 +39,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>mesh</strong>
+										<strong translate="no">mesh</strong>
 									</td>
 									<td class="description last">
 										<p>The mesh to add.</p>
@@ -47,7 +47,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>mass</strong>
+										<strong translate="no">mass</strong>
 									</td>
 									<td class="description last">
 										<p>The mass in kg of the mesh.</p>
@@ -56,7 +56,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>restitution</strong>
+										<strong translate="no">restitution</strong>
 									</td>
 									<td class="description last">
 										<p>The restitution of the mesh, usually from 0 to 1. Represents how &quot;bouncy&quot; objects are when they collide with each other.</p>
@@ -79,7 +79,7 @@ The object can be used to store the mass of the mesh. E.g.:</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>scene</strong>
+										<strong translate="no">scene</strong>
 									</td>
 									<td class="description last">
 										<p>The scene or any type of 3D object to add.</p>
@@ -98,7 +98,7 @@ method will reset the current simulated velocity of the mesh.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>mesh</strong>
+										<strong translate="no">mesh</strong>
 									</td>
 									<td class="description last">
 										<p>The mesh to update the position for.</p>
@@ -106,7 +106,7 @@ method will reset the current simulated velocity of the mesh.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>position</strong>
+										<strong translate="no">position</strong>
 									</td>
 									<td class="description last">
 										<p>The new position.</p>
@@ -114,7 +114,7 @@ method will reset the current simulated velocity of the mesh.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>index</strong>
+										<strong translate="no">index</strong>
 									</td>
 									<td class="description last">
 										<p>If the mesh is instanced, the index represents the instanced ID.</p>

+ 79 - 0
docs/pages/AmmoPhysics.html.md

@@ -0,0 +1,79 @@
+# AmmoPhysics
+
+Can be used to include Ammo.js as a Physics engine into `three.js` apps. Make sure to include `ammo.wasm.js` first:
+
+It is then possible to initialize the API via:
+
+```js
+const physics = await AmmoPhysics();
+```
+
+## Code Example
+
+```js
+<script src="jsm/libs/ammo.wasm.js"></script>
+```
+
+## Import
+
+AmmoPhysics is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { AmmoPhysics } from 'three/addons/physics/AmmoPhysics.js';
+```
+
+## Methods
+
+### .addMesh( mesh : Mesh, mass : number, restitution : number )
+
+Adds the given mesh to this physics simulation.
+
+**mesh**
+
+The mesh to add.
+
+**mass**
+
+The mass in kg of the mesh.
+
+Default is `0`.
+
+**restitution**
+
+The restitution of the mesh, usually from 0 to 1. Represents how "bouncy" objects are when they collide with each other.
+
+Default is `0`.
+
+### .addScene( scene : Object3D )
+
+Adds the given scene to this physics simulation. Only meshes with a `physics` object in their [Object3D#userData](Object3D.html#userData) field will be honored. The object can be used to store the mass of the mesh. E.g.:
+
+```js
+box.userData.physics = { mass: 1 };
+```
+
+**scene**
+
+The scene or any type of 3D object to add.
+
+### .setMeshPosition( mesh : Mesh, position : Vector3, index : number )
+
+Set the position of the given mesh which is part of the physics simulation. Calling this method will reset the current simulated velocity of the mesh.
+
+**mesh**
+
+The mesh to update the position for.
+
+**position**
+
+The new position.
+
+**index**
+
+If the mesh is instanced, the index represents the instanced ID.
+
+Default is `0`.
+
+## Source
+
+[examples/jsm/physics/AmmoPhysics.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/physics/AmmoPhysics.js)

+ 34 - 8
docs/pages/AnaglyphEffect.html

@@ -12,7 +12,11 @@
 	<h1 translate="no">AnaglyphEffect</h1>
 		<section>
 			<header>
-				<div class="class-description"><p>A class that creates an anaglyph effect.</p>
+				<div class="class-description"><p>A class that creates an anaglyph effect using physically-correct
+off-axis stereo projection.</p>
+<p>This implementation uses CameraUtils.frameCorners() to align stereo
+camera frustums to a virtual screen plane, providing accurate depth
+perception with zero parallax at the plane distance.</p>
 <p>Note that this class can only be used with <a href="WebGLRenderer.html">WebGLRenderer</a>.
 When using <a href="WebGPURenderer.html">WebGPURenderer</a>, use <a href="AnaglyphPassNode.html">AnaglyphPassNode</a>.</p></div>
 			</header>
@@ -31,7 +35,7 @@ When using <a href="WebGPURenderer.html">WebGPURenderer</a>, use <a href="Anagly
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>renderer</strong>
+										<strong translate="no">renderer</strong>
 									</td>
 									<td class="description last">
 										<p>The renderer.</p>
@@ -39,7 +43,7 @@ When using <a href="WebGPURenderer.html">WebGPURenderer</a>, use <a href="Anagly
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>width</strong>
+										<strong translate="no">width</strong>
 									</td>
 									<td class="description last">
 										<p>The width of the effect in physical pixels.</p>
@@ -48,7 +52,7 @@ When using <a href="WebGPURenderer.html">WebGPURenderer</a>, use <a href="Anagly
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>height</strong>
+										<strong translate="no">height</strong>
 									</td>
 									<td class="description last">
 										<p>The height of the effect in physical pixels.</p>
@@ -59,6 +63,28 @@ When using <a href="WebGPURenderer.html">WebGPURenderer</a>, use <a href="Anagly
 						</table>
 					</div>
 				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="eyeSep" translate="no">.<a href="#eyeSep">eyeSep</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>The interpupillary distance (eye separation) in world units.
+Typical human IPD is 0.064 meters (64mm).</p>
+						<p>Default is <code>0.064</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="planeDistance" translate="no">.<a href="#planeDistance">planeDistance</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>The distance in world units from the viewer to the virtual
+screen plane where zero parallax (screen depth) occurs.
+Objects at this distance appear at the screen surface.
+Objects closer appear in front of the screen (negative parallax).
+Objects further appear behind the screen (positive parallax).</p>
+<p>The screen dimensions are derived from the camera's FOV and aspect ratio
+at this distance, ensuring the stereo view matches the camera's field of view.</p>
+						<p>Default is <code>0.5</code>.</p>
+					</div>
+				</div>
 				<h2 class="subsection-title">Methods</h2>
 					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
 					<div class="method">
@@ -77,7 +103,7 @@ default <a href="WebGLRenderer.html#render">WebGLRenderer#render</a>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>scene</strong>
+										<strong translate="no">scene</strong>
 									</td>
 									<td class="description last">
 										<p>The scene to render.</p>
@@ -85,7 +111,7 @@ default <a href="WebGLRenderer.html#render">WebGLRenderer#render</a>.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>camera</strong>
+										<strong translate="no">camera</strong>
 									</td>
 									<td class="description last">
 										<p>The camera.</p>
@@ -103,7 +129,7 @@ default <a href="WebGLRenderer.html#render">WebGLRenderer#render</a>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>width</strong>
+										<strong translate="no">width</strong>
 									</td>
 									<td class="description last">
 										<p>The width of the effect in logical pixels.</p>
@@ -111,7 +137,7 @@ default <a href="WebGLRenderer.html#render">WebGLRenderer#render</a>.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>height</strong>
+										<strong translate="no">height</strong>
 									</td>
 									<td class="description last">
 										<p>The height of the effect in logical pixels.</p>

+ 87 - 0
docs/pages/AnaglyphEffect.html.md

@@ -0,0 +1,87 @@
+# AnaglyphEffect
+
+A class that creates an anaglyph effect using physically-correct off-axis stereo projection.
+
+This implementation uses CameraUtils.frameCorners() to align stereo camera frustums to a virtual screen plane, providing accurate depth perception with zero parallax at the plane distance.
+
+Note that this class can only be used with [WebGLRenderer](WebGLRenderer.html). When using [WebGPURenderer](WebGPURenderer.html), use [AnaglyphPassNode](AnaglyphPassNode.html).
+
+## Import
+
+AnaglyphEffect is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { AnaglyphEffect } from 'three/addons/effects/AnaglyphEffect.js';
+```
+
+## Constructor
+
+### new AnaglyphEffect( renderer : WebGLRenderer, width : number, height : number )
+
+Constructs a new anaglyph effect.
+
+**renderer**
+
+The renderer.
+
+**width**
+
+The width of the effect in physical pixels.
+
+Default is `512`.
+
+**height**
+
+The height of the effect in physical pixels.
+
+Default is `512`.
+
+## Properties
+
+### .eyeSep : number
+
+The interpupillary distance (eye separation) in world units. Typical human IPD is 0.064 meters (64mm).
+
+Default is `0.064`.
+
+### .planeDistance : number
+
+The distance in world units from the viewer to the virtual screen plane where zero parallax (screen depth) occurs. Objects at this distance appear at the screen surface. Objects closer appear in front of the screen (negative parallax). Objects further appear behind the screen (positive parallax).
+
+The screen dimensions are derived from the camera's FOV and aspect ratio at this distance, ensuring the stereo view matches the camera's field of view.
+
+Default is `0.5`.
+
+## Methods
+
+### .dispose()
+
+Frees internal resources. This method should be called when the effect is no longer required.
+
+### .render( scene : Object3D, camera : Camera )
+
+When using this effect, this method should be called instead of the default [WebGLRenderer#render](WebGLRenderer.html#render).
+
+**scene**
+
+The scene to render.
+
+**camera**
+
+The camera.
+
+### .setSize( width : number, height : number )
+
+Resizes the effect.
+
+**width**
+
+The width of the effect in logical pixels.
+
+**height**
+
+The height of the effect in logical pixels.
+
+## Source
+
+[examples/jsm/effects/AnaglyphEffect.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/effects/AnaglyphEffect.js)

+ 76 - 5
docs/pages/AnaglyphPassNode.html

@@ -13,12 +13,16 @@
 	<h1 translate="no">AnaglyphPassNode</h1>
 		<section>
 			<header>
-				<div class="class-description"><p>A render pass node that creates an anaglyph effect.</p></div>
+				<div class="class-description"><p>A render pass node that creates an anaglyph effect using physically-correct
+off-axis stereo projection.</p>
+<p>This implementation uses CameraUtils.frameCorners() to align stereo
+camera frustums to a virtual screen plane, providing accurate depth
+perception with zero parallax at the plane distance.</p></div>
 			</header>
 			<article>
 				<h2 class="subsection-title">Import</h2>
 				<p><span translate="no">AnaglyphPassNode</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 { anaglyphPass } from 'three/addons/tsl/display/AnaglyphPassNode.js';</code></pre>
+				<pre><code class="language-js">import { anaglyphPass, AnaglyphAlgorithm, AnaglyphColorMode } from 'three/addons/tsl/display/AnaglyphPassNode.js';</code></pre>
 				<div class="container-overview">
 					<h2>Constructor</h2>
 					<h3 class="name name-method" id="AnaglyphPassNode" translate="no">new <a href="#AnaglyphPassNode">AnaglyphPassNode</a><span class="signature">( scene : <span class="param-type"><a href="Scene.html">Scene</a></span>, camera : <span class="param-type"><a href="Camera.html">Camera</a></span> )</span> </h3>
@@ -30,7 +34,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>scene</strong>
+										<strong translate="no">scene</strong>
 									</td>
 									<td class="description last">
 										<p>The scene to render.</p>
@@ -38,7 +42,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>camera</strong>
+										<strong translate="no">camera</strong>
 									</td>
 									<td class="description last">
 										<p>The camera to render the scene with.</p>
@@ -49,6 +53,38 @@
 					</div>
 				</div>
 				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="algorithm" translate="no">.<a href="#algorithm">algorithm</a><span class="type-signature"> : string</span> </h3>
+					<div class="description">
+						<p>Gets the current anaglyph algorithm.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="algorithm" translate="no">.<a href="#algorithm">algorithm</a><span class="type-signature"> : string</span> </h3>
+					<div class="description">
+						<p>Sets the anaglyph algorithm.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="colorMode" translate="no">.<a href="#colorMode">colorMode</a><span class="type-signature"> : string</span> </h3>
+					<div class="description">
+						<p>Gets the current color mode.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="colorMode" translate="no">.<a href="#colorMode">colorMode</a><span class="type-signature"> : string</span> </h3>
+					<div class="description">
+						<p>Sets the color mode.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="eyeSep" translate="no">.<a href="#eyeSep">eyeSep</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>The interpupillary distance (eye separation) in world units.
+Typical human IPD is 0.064 meters (64mm).</p>
+						<p>Default is <code>0.064</code>.</p>
+					</div>
+				</div>
 				<div class="member">
 					<h3 class="name" id="isAnaglyphPassNode" translate="no">.<a href="#isAnaglyphPassNode">isAnaglyphPassNode</a><span class="type-signature"> : boolean</span> <span class="type-signature">(readonly) </span></h3>
 					<div class="description">
@@ -56,6 +92,19 @@
 						<p>Default is <code>true</code>.</p>
 					</div>
 				</div>
+				<div class="member">
+					<h3 class="name" id="planeDistance" translate="no">.<a href="#planeDistance">planeDistance</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>The distance in world units from the viewer to the virtual
+screen plane where zero parallax (screen depth) occurs.
+Objects at this distance appear at the screen surface.
+Objects closer appear in front of the screen (negative parallax).
+Objects further appear behind the screen (positive parallax).</p>
+<p>The screen dimensions are derived from the camera's FOV and aspect ratio
+at this distance, ensuring the stereo view matches the camera's field of view.</p>
+						<p>Default is <code>0.5</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><span class="type-signature"> : <a href="PassTextureNode.html">PassTextureNode</a></span> </h3>
 					<div class="method">
@@ -66,7 +115,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -78,6 +127,28 @@
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="StereoCompositePassNode.html#setup">StereoCompositePassNode#setup</a></dt>
 						</dl>
 					</div>
+					<h3 class="name name-method" id="updateStereoCamera" translate="no">.<a href="#updateStereoCamera">updateStereoCamera</a><span class="signature">( coordinateSystem : <span class="param-type">number</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the internal stereo camera using frameCorners for
+physically-correct off-axis projection.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">coordinateSystem</strong>
+									</td>
+									<td class="description last">
+										<p>The current coordinate system.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="StereoCompositePassNode.html#updateStereoCamera">StereoCompositePassNode#updateStereoCamera</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/AnaglyphPassNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/display/AnaglyphPassNode.js</a>

+ 93 - 0
docs/pages/AnaglyphPassNode.html.md

@@ -0,0 +1,93 @@
+*Inheritance: EventDispatcher → Node → TempNode → PassNode → StereoCompositePassNode →*
+
+# AnaglyphPassNode
+
+A render pass node that creates an anaglyph effect using physically-correct off-axis stereo projection.
+
+This implementation uses CameraUtils.frameCorners() to align stereo camera frustums to a virtual screen plane, providing accurate depth perception with zero parallax at the plane distance.
+
+## Import
+
+AnaglyphPassNode is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { anaglyphPass, AnaglyphAlgorithm, AnaglyphColorMode } from 'three/addons/tsl/display/AnaglyphPassNode.js';
+```
+
+## Constructor
+
+### new AnaglyphPassNode( scene : Scene, camera : Camera )
+
+Constructs a new anaglyph pass node.
+
+**scene**
+
+The scene to render.
+
+**camera**
+
+The camera to render the scene with.
+
+## Properties
+
+### .algorithm : string
+
+Gets the current anaglyph algorithm.
+
+### .algorithm : string
+
+Sets the anaglyph algorithm.
+
+### .colorMode : string
+
+Gets the current color mode.
+
+### .colorMode : string
+
+Sets the color mode.
+
+### .eyeSep : number
+
+The interpupillary distance (eye separation) in world units. Typical human IPD is 0.064 meters (64mm).
+
+Default is `0.064`.
+
+### .isAnaglyphPassNode : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .planeDistance : number
+
+The distance in world units from the viewer to the virtual screen plane where zero parallax (screen depth) occurs. Objects at this distance appear at the screen surface. Objects closer appear in front of the screen (negative parallax). Objects further appear behind the screen (positive parallax).
+
+The screen dimensions are derived from the camera's FOV and aspect ratio at this distance, ensuring the stereo view matches the camera's field of view.
+
+Default is `0.5`.
+
+## Methods
+
+### .setup( builder : NodeBuilder ) : PassTextureNode
+
+This method is used to setup the effect's TSL code.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [StereoCompositePassNode#setup](StereoCompositePassNode.html#setup)
+
+### .updateStereoCamera( coordinateSystem : number )
+
+Updates the internal stereo camera using frameCorners for physically-correct off-axis projection.
+
+**coordinateSystem**
+
+The current coordinate system.
+
+**Overrides:** [StereoCompositePassNode#updateStereoCamera](StereoCompositePassNode.html#updateStereoCamera)
+
+## Source
+
+[examples/jsm/tsl/display/AnaglyphPassNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/AnaglyphPassNode.js)

+ 7 - 7
docs/pages/AnalyticLightNode.html

@@ -27,7 +27,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>light</strong>
+										<strong translate="no">light</strong>
 									</td>
 									<td class="description last">
 										<p>The light source.</p>
@@ -116,7 +116,7 @@ position in view space to the light's position in view space.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The builder object used for setting up the light.</p>
@@ -139,7 +139,7 @@ invocate the respective interface methods.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -160,7 +160,7 @@ invocate the respective interface methods.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The builder object used for setting up the light.</p>
@@ -181,7 +181,7 @@ invocate the respective interface methods.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The builder object used for setting up the light.</p>
@@ -204,7 +204,7 @@ shadows into the lighting computation.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -234,7 +234,7 @@ specific uniforms.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>frame</strong>
+										<strong translate="no">frame</strong>
 									</td>
 									<td class="description last">
 										<p>A reference to the current node frame.</p>

+ 139 - 0
docs/pages/AnalyticLightNode.html.md

@@ -0,0 +1,139 @@
+*Inheritance: EventDispatcher → Node → LightingNode →*
+
+# AnalyticLightNode
+
+Base class for analytic light nodes.
+
+## Constructor
+
+### new AnalyticLightNode( light : Light )
+
+Constructs a new analytic light node.
+
+**light**
+
+The light source.
+
+Default is `null`.
+
+## Properties
+
+### .baseColorNode : Node
+
+This property is used to retain a reference to the original value of [AnalyticLightNode#colorNode](AnalyticLightNode.html#colorNode). The final color node is represented by a different node when using shadows.
+
+Default is `null`.
+
+### .color : Color
+
+The light's color value.
+
+### .colorNode : Node
+
+The light's color node. Points to `colorNode` of the light source, if set. Otherwise it creates a uniform node based on [AnalyticLightNode#color](AnalyticLightNode.html#color).
+
+### .isAnalyticLightNode : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .light : Light
+
+The light source.
+
+Default is `null`.
+
+### .shadowColorNode : Node
+
+Represents the light's shadow color.
+
+Default is `null`.
+
+### .shadowNode : ShadowNode
+
+Represents the light's shadow.
+
+Default is `null`.
+
+### .updateType : string
+
+Overwritten since analytic light nodes are updated once per frame.
+
+Default is `'frame'`.
+
+**Overrides:** [LightingNode#updateType](LightingNode.html#updateType)
+
+## Methods
+
+### .disposeShadow()
+
+Frees internal resources related to shadows.
+
+### .getLightVector( builder : NodeBuilder ) : Node.<vec3>
+
+Returns a node representing a direction vector which points from the current position in view space to the light's position in view space.
+
+**builder**
+
+The builder object used for setting up the light.
+
+**Returns:** The light vector node.
+
+### .setup( builder : NodeBuilder )
+
+Unlike most other nodes, lighting nodes do not return a output node in [Node#setup](Node.html#setup). The main purpose of lighting nodes is to configure the current [LightingModel](LightingModel.html) and/or invocate the respective interface methods.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [LightingNode#setup](LightingNode.html#setup)
+
+### .setupDirect( builder : NodeBuilder ) : Object | undefined (abstract)
+
+Sets up the direct lighting for the analytic light node.
+
+**builder**
+
+The builder object used for setting up the light.
+
+**Returns:** The direct light data (color and direction).
+
+### .setupDirectRectArea( builder : NodeBuilder ) : Object | undefined (abstract)
+
+Sets up the direct rect area lighting for the analytic light node.
+
+**builder**
+
+The builder object used for setting up the light.
+
+**Returns:** The direct rect area light data.
+
+### .setupShadow( builder : NodeBuilder )
+
+Setups the shadow for this light. This method is only executed if the light cast shadows and the current build object receives shadows. It incorporates shadows into the lighting computation.
+
+**builder**
+
+The current node builder.
+
+### .setupShadowNode() : ShadowNode
+
+Setups the shadow node for this light. The method exists so concrete light classes can setup different types of shadow nodes.
+
+**Returns:** The created shadow node.
+
+### .update( frame : NodeFrame )
+
+The update method is used to update light uniforms per frame. Potentially overwritten in concrete light nodes to update light specific uniforms.
+
+**frame**
+
+A reference to the current node frame.
+
+**Overrides:** [LightingNode#update](LightingNode.html#update)
+
+## Source
+
+[src/nodes/lighting/AnalyticLightNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/AnalyticLightNode.js)

+ 8 - 8
docs/pages/AnamorphicNode.html

@@ -30,7 +30,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>textureNode</strong>
+										<strong translate="no">textureNode</strong>
 									</td>
 									<td class="description last">
 										<p>The texture node that represents the input of the effect.</p>
@@ -38,7 +38,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>thresholdNode</strong>
+										<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>
@@ -46,7 +46,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>scaleNode</strong>
+										<strong translate="no">scaleNode</strong>
 									</td>
 									<td class="description last">
 										<p>Defines the vertical scale of the flares.</p>
@@ -54,7 +54,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>samples</strong>
+										<strong translate="no">samples</strong>
 									</td>
 									<td class="description last">
 										<p>More samples result in larger flares and a more expensive runtime behavior.</p>
@@ -151,7 +151,7 @@ when the effect is no longer required.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>width</strong>
+										<strong translate="no">width</strong>
 									</td>
 									<td class="description last">
 										<p>The width of the effect.</p>
@@ -159,7 +159,7 @@ when the effect is no longer required.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>height</strong>
+										<strong translate="no">height</strong>
 									</td>
 									<td class="description last">
 										<p>The height of the effect.</p>
@@ -177,7 +177,7 @@ when the effect is no longer required.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -198,7 +198,7 @@ when the effect is no longer required.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>frame</strong>
+										<strong translate="no">frame</strong>
 									</td>
 									<td class="description last">
 										<p>The current node frame.</p>

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

@@ -0,0 +1,127 @@
+*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)

+ 23 - 23
docs/pages/AnimationAction.html

@@ -27,7 +27,7 @@ stored in <a href="AnimationClip.html">AnimationClip</a>.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>mixer</strong>
+										<strong translate="no">mixer</strong>
 									</td>
 									<td class="description last">
 										<p>The mixer that is controlled by this action.</p>
@@ -35,7 +35,7 @@ stored in <a href="AnimationClip.html">AnimationClip</a>.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>clip</strong>
+										<strong translate="no">clip</strong>
 									</td>
 									<td class="description last">
 										<p>The animation clip that holds the actual keyframes.</p>
@@ -43,7 +43,7 @@ stored in <a href="AnimationClip.html">AnimationClip</a>.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>localRoot</strong>
+										<strong translate="no">localRoot</strong>
 									</td>
 									<td class="description last">
 										<p>The root object on which this action is performed.</p>
@@ -52,7 +52,7 @@ stored in <a href="AnimationClip.html">AnimationClip</a>.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>blendMode</strong>
+										<strong translate="no">blendMode</strong>
 									</td>
 									<td class="description last">
 										<p>The blend mode.</p>
@@ -166,7 +166,7 @@ within the passed time interval.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>fadeOutAction</strong>
+										<strong translate="no">fadeOutAction</strong>
 									</td>
 									<td class="description last">
 										<p>The animation action to fade out.</p>
@@ -174,7 +174,7 @@ within the passed time interval.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the fade.</p>
@@ -182,7 +182,7 @@ within the passed time interval.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>warp</strong>
+										<strong translate="no">warp</strong>
 									</td>
 									<td class="description last">
 										<p>Whether warping should be used or not.</p>
@@ -205,7 +205,7 @@ within the passed time interval.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>fadeInAction</strong>
+										<strong translate="no">fadeInAction</strong>
 									</td>
 									<td class="description last">
 										<p>The animation action to fade in.</p>
@@ -213,7 +213,7 @@ within the passed time interval.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the fade.</p>
@@ -221,7 +221,7 @@ within the passed time interval.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>warp</strong>
+										<strong translate="no">warp</strong>
 									</td>
 									<td class="description last">
 										<p>Whether warping should be used or not.</p>
@@ -244,7 +244,7 @@ within the passed time interval.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the fade.</p>
@@ -266,7 +266,7 @@ within the passed time interval.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the fade.</p>
@@ -332,7 +332,7 @@ within the passed time interval.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration.</p>
@@ -389,7 +389,7 @@ within the passed time interval.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration to set.</p>
@@ -412,7 +412,7 @@ action is paused.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>timeScale</strong>
+										<strong translate="no">timeScale</strong>
 									</td>
 									<td class="description last">
 										<p>The time scale to set.</p>
@@ -435,7 +435,7 @@ action is disabled.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>weight</strong>
+										<strong translate="no">weight</strong>
 									</td>
 									<td class="description last">
 										<p>The weight to set.</p>
@@ -456,7 +456,7 @@ action is disabled.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>mode</strong>
+										<strong translate="no">mode</strong>
 									</td>
 									<td class="description last">
 										<p>The loop mode.</p>
@@ -464,7 +464,7 @@ action is disabled.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>repetitions</strong>
+										<strong translate="no">repetitions</strong>
 									</td>
 									<td class="description last">
 										<p>The number of repetitions.</p>
@@ -485,7 +485,7 @@ action is disabled.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>time</strong>
+										<strong translate="no">time</strong>
 									</td>
 									<td class="description last">
 										<p>The start time in seconds.</p>
@@ -533,7 +533,7 @@ action is disabled.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>action</strong>
+										<strong translate="no">action</strong>
 									</td>
 									<td class="description last">
 										<p>The action to sync with.</p>
@@ -556,7 +556,7 @@ action is disabled.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>startTimeScale</strong>
+										<strong translate="no">startTimeScale</strong>
 									</td>
 									<td class="description last">
 										<p>The start time scale.</p>
@@ -564,7 +564,7 @@ action is disabled.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>endTimeScale</strong>
+										<strong translate="no">endTimeScale</strong>
 									</td>
 									<td class="description last">
 										<p>The end time scale.</p>
@@ -572,7 +572,7 @@ action is disabled.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration.</p>

+ 337 - 0
docs/pages/AnimationAction.html.md

@@ -0,0 +1,337 @@
+# AnimationAction
+
+An instance of `AnimationAction` schedules the playback of an animation which is stored in [AnimationClip](AnimationClip.html).
+
+## Constructor
+
+### new AnimationAction( mixer : AnimationMixer, clip : AnimationClip, localRoot : Object3D, blendMode : NormalAnimationBlendMode | AdditiveAnimationBlendMode )
+
+Constructs a new animation action.
+
+**mixer**
+
+The mixer that is controlled by this action.
+
+**clip**
+
+The animation clip that holds the actual keyframes.
+
+**localRoot**
+
+The root object on which this action is performed.
+
+Default is `null`.
+
+**blendMode**
+
+The blend mode.
+
+## Properties
+
+### .blendMode : NormalAnimationBlendMode | AdditiveAnimationBlendMode
+
+Defines how the animation is blended/combined when two or more animations are simultaneously played.
+
+### .clampWhenFinished : boolean
+
+If set to true the animation will automatically be paused on its last frame.
+
+If set to false, [AnimationAction#enabled](AnimationAction.html#enabled) will automatically be switched to `false` when the last loop of the action has finished, so that this action has no further impact.
+
+Note: This member has no impact if the action is interrupted (it has only an effect if its last loop has really finished).
+
+Default is `false`.
+
+### .enabled : boolean
+
+If set to `false`, the action is disabled so it has no impact.
+
+When the action is re-enabled, the animation continues from its current time (setting `enabled` to `false` doesn't reset the action).
+
+Default is `true`.
+
+### .loop : LoopRepeat | LoopOnce | LoopPingPong
+
+The loop mode, set via [AnimationAction#setLoop](AnimationAction.html#setLoop).
+
+Default is `LoopRepeat`.
+
+### .paused : boolean
+
+If set to `true`, the playback of the action is paused.
+
+Default is `false`.
+
+### .repetitions : number
+
+The number of repetitions of the performed clip over the course of this action. Can be set via [AnimationAction#setLoop](AnimationAction.html#setLoop).
+
+Setting this number has no effect if [AnimationAction#loop](AnimationAction.html#loop) is set to `THREE:LoopOnce`.
+
+Default is `Infinity`.
+
+### .time : number
+
+The local time of this action (in seconds, starting with `0`).
+
+The value gets clamped or wrapped to `[0,clip.duration]` (according to the loop state).
+
+Default is `Infinity`.
+
+### .timeScale : number
+
+Scaling factor for the [AnimationAction#time](AnimationAction.html#time). A value of `0` causes the animation to pause. Negative values cause the animation to play backwards.
+
+Default is `1`.
+
+### .weight : number
+
+The degree of influence of this action (in the interval `[0, 1]`). Values between `0` (no impact) and `1` (full impact) can be used to blend between several actions.
+
+Default is `1`.
+
+### .zeroSlopeAtEnd : boolean
+
+Enables smooth interpolation without separate clips for start, loop and end.
+
+Default is `true`.
+
+### .zeroSlopeAtStart : boolean
+
+Enables smooth interpolation without separate clips for start, loop and end.
+
+Default is `true`.
+
+## Methods
+
+### .crossFadeFrom( fadeOutAction : AnimationAction, duration : number, warp : boolean ) : AnimationAction
+
+Causes this action to fade in and the given action to fade out, within the passed time interval.
+
+**fadeOutAction**
+
+The animation action to fade out.
+
+**duration**
+
+The duration of the fade.
+
+**warp**
+
+Whether warping should be used or not.
+
+Default is `false`.
+
+**Returns:** A reference to this animation action.
+
+### .crossFadeTo( fadeInAction : AnimationAction, duration : number, warp : boolean ) : AnimationAction
+
+Causes this action to fade out and the given action to fade in, within the passed time interval.
+
+**fadeInAction**
+
+The animation action to fade in.
+
+**duration**
+
+The duration of the fade.
+
+**warp**
+
+Whether warping should be used or not.
+
+Default is `false`.
+
+**Returns:** A reference to this animation action.
+
+### .fadeIn( duration : number ) : AnimationAction
+
+Fades the animation in by increasing its weight gradually from `0` to `1`, within the passed time interval.
+
+**duration**
+
+The duration of the fade.
+
+**Returns:** A reference to this animation action.
+
+### .fadeOut( duration : number ) : AnimationAction
+
+Fades the animation out by decreasing its weight gradually from `1` to `0`, within the passed time interval.
+
+**duration**
+
+The duration of the fade.
+
+**Returns:** A reference to this animation action.
+
+### .getClip() : AnimationClip
+
+Returns the animation clip of this animation action.
+
+**Returns:** The animation clip.
+
+### .getEffectiveTimeScale() : number
+
+Returns the effective time scale of this action.
+
+**Returns:** The effective time scale.
+
+### .getEffectiveWeight() : number
+
+Returns the effective weight of this action.
+
+**Returns:** The effective weight.
+
+### .getMixer() : AnimationMixer
+
+Returns the animation mixer of this animation action.
+
+**Returns:** The animation mixer.
+
+### .getRoot() : Object3D
+
+Returns the root object of this animation action.
+
+**Returns:** The root object.
+
+### .halt( duration : number ) : AnimationAction
+
+Decelerates this animation's speed to `0` within the passed time interval.
+
+**duration**
+
+The duration.
+
+**Returns:** A reference to this animation action.
+
+### .isRunning() : boolean
+
+Returns `true` if the animation is running.
+
+**Returns:** Whether the animation is running or not.
+
+### .isScheduled() : boolean
+
+Returns `true` when [AnimationAction#play](AnimationAction.html#play) has been called.
+
+**Returns:** Whether the animation is scheduled or not.
+
+### .play() : AnimationAction
+
+Starts the playback of the animation.
+
+**Returns:** A reference to this animation action.
+
+### .reset() : AnimationAction
+
+Resets the playback of the animation.
+
+**Returns:** A reference to this animation action.
+
+### .setDuration( duration : number ) : AnimationAction
+
+Sets the duration for a single loop of this action.
+
+**duration**
+
+The duration to set.
+
+**Returns:** A reference to this animation action.
+
+### .setEffectiveTimeScale( timeScale : number ) : AnimationAction
+
+Sets the effective time scale of this action.
+
+An action has no effect and thus an effective time scale of zero when the action is paused.
+
+**timeScale**
+
+The time scale to set.
+
+**Returns:** A reference to this animation action.
+
+### .setEffectiveWeight( weight : number ) : AnimationAction
+
+Sets the effective weight of this action.
+
+An action has no effect and thus an effective weight of zero when the action is disabled.
+
+**weight**
+
+The weight to set.
+
+**Returns:** A reference to this animation action.
+
+### .setLoop( mode : LoopRepeat | LoopOnce | LoopPingPong, repetitions : number ) : AnimationAction
+
+Configures the loop settings for this action.
+
+**mode**
+
+The loop mode.
+
+**repetitions**
+
+The number of repetitions.
+
+**Returns:** A reference to this animation action.
+
+### .startAt( time : number ) : AnimationAction
+
+Defines the time when the animation should start.
+
+**time**
+
+The start time in seconds.
+
+**Returns:** A reference to this animation action.
+
+### .stop() : AnimationAction
+
+Stops the playback of the animation.
+
+**Returns:** A reference to this animation action.
+
+### .stopFading() : AnimationAction
+
+Stops any fading which is applied to this action.
+
+**Returns:** A reference to this animation action.
+
+### .stopWarping() : AnimationAction
+
+Stops any scheduled warping which is applied to this action.
+
+**Returns:** A reference to this animation action.
+
+### .syncWith( action : AnimationAction ) : AnimationAction
+
+Synchronizes this action with the passed other action.
+
+**action**
+
+The action to sync with.
+
+**Returns:** A reference to this animation action.
+
+### .warp( startTimeScale : number, endTimeScale : number, duration : number ) : AnimationAction
+
+Changes the playback speed, within the passed time interval, by modifying [AnimationAction#timeScale](AnimationAction.html#timeScale) gradually from `startTimeScale` to `endTimeScale`.
+
+**startTimeScale**
+
+The start time scale.
+
+**endTimeScale**
+
+The end time scale.
+
+**duration**
+
+The duration.
+
+**Returns:** A reference to this animation action.
+
+## Source
+
+[src/animation/AnimationAction.js](https://github.com/mrdoob/three.js/blob/master/src/animation/AnimationAction.js)

+ 18 - 18
docs/pages/AnimationClip.html

@@ -29,7 +29,7 @@ will automatically be created by loaders when importing animated 3D assets.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>name</strong>
+										<strong translate="no">name</strong>
 									</td>
 									<td class="description last">
 										<p>The clip's name.</p>
@@ -38,7 +38,7 @@ will automatically be created by loaders when importing animated 3D assets.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The clip's duration in seconds. If a negative value is passed,
@@ -48,7 +48,7 @@ the duration will be calculated from the passed keyframes.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>tracks</strong>
+										<strong translate="no">tracks</strong>
 									</td>
 									<td class="description last">
 										<p>An array of keyframe tracks.</p>
@@ -56,7 +56,7 @@ the duration will be calculated from the passed keyframes.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>blendMode</strong>
+										<strong translate="no">blendMode</strong>
 									</td>
 									<td class="description last">
 										<p>Defines how the animation
@@ -177,7 +177,7 @@ animation-group-based patterns like &quot;Walk_001, Walk_002, Run_001, Run_002..
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>morphTargets</strong>
+										<strong translate="no">morphTargets</strong>
 									</td>
 									<td class="description last">
 										<p>A sequence of morph targets.</p>
@@ -185,7 +185,7 @@ animation-group-based patterns like &quot;Walk_001, Walk_002, Run_001, Run_002..
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>fps</strong>
+										<strong translate="no">fps</strong>
 									</td>
 									<td class="description last">
 										<p>The Frames-Per-Second value.</p>
@@ -193,7 +193,7 @@ animation-group-based patterns like &quot;Walk_001, Walk_002, Run_001, Run_002..
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>noLoop</strong>
+										<strong translate="no">noLoop</strong>
 									</td>
 									<td class="description last">
 										<p>Whether the clip should be no loop or not.</p>
@@ -217,7 +217,7 @@ overridden via <a href="AnimationAction.html#setDuration">AnimationAction#setDur
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>name</strong>
+										<strong translate="no">name</strong>
 									</td>
 									<td class="description last">
 										<p>The name of the animation clip.</p>
@@ -225,7 +225,7 @@ overridden via <a href="AnimationAction.html#setDuration">AnimationAction#setDur
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>morphTargetSequence</strong>
+										<strong translate="no">morphTargetSequence</strong>
 									</td>
 									<td class="description last">
 										<p>A sequence of morph targets.</p>
@@ -233,7 +233,7 @@ overridden via <a href="AnimationAction.html#setDuration">AnimationAction#setDur
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>fps</strong>
+										<strong translate="no">fps</strong>
 									</td>
 									<td class="description last">
 										<p>The Frames-Per-Second value.</p>
@@ -241,7 +241,7 @@ overridden via <a href="AnimationAction.html#setDuration">AnimationAction#setDur
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>noLoop</strong>
+										<strong translate="no">noLoop</strong>
 									</td>
 									<td class="description last">
 										<p>Whether the clip should be no loop or not.</p>
@@ -264,7 +264,7 @@ array named &quot;animations&quot; property.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>objectOrClipArray</strong>
+										<strong translate="no">objectOrClipArray</strong>
 									</td>
 									<td class="description last">
 										<p>The array or object to search through.</p>
@@ -272,7 +272,7 @@ array named &quot;animations&quot; property.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>name</strong>
+										<strong translate="no">name</strong>
 									</td>
 									<td class="description last">
 										<p>The name to search for.</p>
@@ -293,7 +293,7 @@ array named &quot;animations&quot; property.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>json</strong>
+										<strong translate="no">json</strong>
 									</td>
 									<td class="description last">
 										<p>The serialized animation clip.</p>
@@ -305,7 +305,7 @@ array named &quot;animations&quot; property.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The new animation clip.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id=".parseAnimation" translate="no">.<a href="#.parseAnimation">parseAnimation</a><span class="signature">( animation : <span class="param-type">Object</span>, bones : <span class="param-type">Array.&lt;Bones></span> )</span><span class="type-signature"> : <a href="AnimationClip.html">AnimationClip</a></span> </h3>
+					<h3 class="name name-method" id=".parseAnimation" translate="no">.<a href="#.parseAnimation">parseAnimation</a><span class="signature">( animation : <span class="param-type">Object</span>, bones : <span class="param-type">Array.&lt;<a href="Bone.html">Bone</a>></span> )</span><span class="type-signature"> : <a href="AnimationClip.html">AnimationClip</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Parses the <code>animation.hierarchy</code> format and returns a new animation clip.</p>
@@ -314,7 +314,7 @@ array named &quot;animations&quot; property.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>animation</strong>
+										<strong translate="no">animation</strong>
 									</td>
 									<td class="description last">
 										<p>A serialized animation clip as JSON.</p>
@@ -322,7 +322,7 @@ array named &quot;animations&quot; property.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>bones</strong>
+										<strong translate="no">bones</strong>
 									</td>
 									<td class="description last">
 										<p>An array of bones.</p>
@@ -346,7 +346,7 @@ array named &quot;animations&quot; property.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>clip</strong>
+										<strong translate="no">clip</strong>
 									</td>
 									<td class="description last">
 										<p>The animation clip to serialize.</p>

+ 197 - 0
docs/pages/AnimationClip.html.md

@@ -0,0 +1,197 @@
+# AnimationClip
+
+A reusable set of keyframe tracks which represent an animation.
+
+## Constructor
+
+### new AnimationClip( name : string, duration : number, tracks : Array.<KeyframeTrack>, blendMode : NormalAnimationBlendMode | AdditiveAnimationBlendMode )
+
+Constructs a new animation clip.
+
+Note: Instead of instantiating an AnimationClip directly with the constructor, you can use the static interface of this class for creating clips. In most cases though, animation clips will automatically be created by loaders when importing animated 3D assets.
+
+**name**
+
+The clip's name.
+
+Default is `''`.
+
+**duration**
+
+The clip's duration in seconds. If a negative value is passed, the duration will be calculated from the passed keyframes.
+
+Default is `-1`.
+
+**tracks**
+
+An array of keyframe tracks.
+
+**blendMode**
+
+Defines how the animation is blended/combined when two or more animations are simultaneously played.
+
+Default is `NormalAnimationBlendMode`.
+
+## Properties
+
+### .blendMode : NormalAnimationBlendMode | AdditiveAnimationBlendMode
+
+Defines how the animation is blended/combined when two or more animations are simultaneously played.
+
+### .duration : number
+
+The clip's duration in seconds.
+
+### .name : string
+
+The clip's name.
+
+### .tracks : Array.<KeyframeTrack>
+
+An array of keyframe tracks.
+
+### .userData : Object
+
+An object that can be used to store custom data about the animation clip. It should not hold references to functions as these will not be cloned.
+
+### .uuid : string (readonly)
+
+The UUID of the animation clip.
+
+## Methods
+
+### .clone() : AnimationClip
+
+Returns a new animation clip with copied values from this instance.
+
+**Returns:** A clone of this instance.
+
+### .optimize() : AnimationClip
+
+Optimizes each track by removing equivalent sequential keys (which are common in morph target sequences).
+
+**Returns:** A reference to this animation clip.
+
+### .resetDuration() : AnimationClip
+
+Sets the duration of this clip to the duration of its longest keyframe track.
+
+**Returns:** A reference to this animation clip.
+
+### .toJSON() : Object
+
+Serializes this animation clip into JSON.
+
+**Returns:** The JSON object.
+
+### .trim() : AnimationClip
+
+Trims all tracks to the clip's duration.
+
+**Returns:** A reference to this animation clip.
+
+### .validate() : boolean
+
+Performs minimal validation on each track in the clip. Returns `true` if all tracks are valid.
+
+**Returns:** Whether the clip's keyframes are valid or not.
+
+## Static Methods
+
+### .CreateClipsFromMorphTargetSequences( morphTargets : Array.<Object>, fps : number, noLoop : boolean ) : Array.<AnimationClip>
+
+Returns an array of new AnimationClips created from the morph target sequences of a geometry, trying to sort morph target names into animation-group-based patterns like "Walk\_001, Walk\_002, Run\_001, Run\_002...".
+
+See [MD2Loader#parse](MD2Loader.html#parse) as an example for how the method should be used.
+
+**morphTargets**
+
+A sequence of morph targets.
+
+**fps**
+
+The Frames-Per-Second value.
+
+**noLoop**
+
+Whether the clip should be no loop or not.
+
+**Returns:** An array of new animation clips.
+
+### .CreateFromMorphTargetSequence( name : string, morphTargetSequence : Array.<Object>, fps : number, noLoop : boolean ) : AnimationClip
+
+Returns a new animation clip from the passed morph targets array of a geometry, taking a name and the number of frames per second.
+
+Note: The fps parameter is required, but the animation speed can be overridden via [AnimationAction#setDuration](AnimationAction.html#setDuration).
+
+**name**
+
+The name of the animation clip.
+
+**morphTargetSequence**
+
+A sequence of morph targets.
+
+**fps**
+
+The Frames-Per-Second value.
+
+**noLoop**
+
+Whether the clip should be no loop or not.
+
+**Returns:** The new animation clip.
+
+### .findByName( objectOrClipArray : Array.<AnimationClip> | Object3D, name : string ) : AnimationClip
+
+Searches for an animation clip by name, taking as its first parameter either an array of clips, or a mesh or geometry that contains an array named "animations" property.
+
+**objectOrClipArray**
+
+The array or object to search through.
+
+**name**
+
+The name to search for.
+
+**Returns:** The found animation clip. Returns `null` if no clip has been found.
+
+### .parse( json : Object ) : AnimationClip
+
+Factory method for creating an animation clip from the given JSON.
+
+**json**
+
+The serialized animation clip.
+
+**Returns:** The new animation clip.
+
+### .parseAnimation( animation : Object, bones : Array.<Bone> ) : AnimationClip
+
+Parses the `animation.hierarchy` format and returns a new animation clip.
+
+**animation**
+
+A serialized animation clip as JSON.
+
+**bones**
+
+An array of bones.
+
+**Deprecated:** since r175.
+
+**Returns:** The new animation clip.
+
+### .toJSON( clip : AnimationClip ) : Object
+
+Serializes the given animation clip into JSON.
+
+**clip**
+
+The animation clip to serialize.
+
+**Returns:** The JSON object.
+
+## Source
+
+[src/animation/AnimationClip.js](https://github.com/mrdoob/three.js/blob/master/src/animation/AnimationClip.js)

+ 11 - 11
docs/pages/AnimationClipCreator.html

@@ -33,7 +33,7 @@ material.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the animation.</p>
@@ -41,7 +41,7 @@ material.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>colors</strong>
+										<strong translate="no">colors</strong>
 									</td>
 									<td class="description last">
 										<p>An array of colors that should be sequentially animated.</p>
@@ -63,7 +63,7 @@ in the given period.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the animation.</p>
@@ -71,7 +71,7 @@ in the given period.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>pulseScale</strong>
+										<strong translate="no">pulseScale</strong>
 									</td>
 									<td class="description last">
 										<p>The scale of the pulse.</p>
@@ -93,7 +93,7 @@ in the given period of time around the given axis.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>period</strong>
+										<strong translate="no">period</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the animation.</p>
@@ -101,7 +101,7 @@ in the given period of time around the given axis.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>axis</strong>
+										<strong translate="no">axis</strong>
 									</td>
 									<td class="description last">
 										<p>The axis of rotation.</p>
@@ -124,7 +124,7 @@ in the given period of time along the given axis.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>period</strong>
+										<strong translate="no">period</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the animation.</p>
@@ -132,7 +132,7 @@ in the given period of time along the given axis.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>axis</strong>
+										<strong translate="no">axis</strong>
 									</td>
 									<td class="description last">
 										<p>The axis to scale the 3D object along.</p>
@@ -155,7 +155,7 @@ in the given period.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the animation.</p>
@@ -163,7 +163,7 @@ in the given period.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>shakeScale</strong>
+										<strong translate="no">shakeScale</strong>
 									</td>
 									<td class="description last">
 										<p>The scale of the shake.</p>
@@ -184,7 +184,7 @@ in the given period.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>duration</strong>
+										<strong translate="no">duration</strong>
 									</td>
 									<td class="description last">
 										<p>The duration of the animation.</p>

+ 101 - 0
docs/pages/AnimationClipCreator.html.md

@@ -0,0 +1,101 @@
+# AnimationClipCreator
+
+A utility class with factory methods for creating basic animation clips.
+
+## Import
+
+AnimationClipCreator is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { AnimationClipCreator } from 'three/addons/animation/AnimationClipCreator.js';
+```
+
+## Static Methods
+
+### .CreateMaterialColorAnimation( duration : number, colors : Array.<Color> ) : AnimationClip
+
+Creates an animation clip that animates the `color` property of a 3D object's material.
+
+**duration**
+
+The duration of the animation.
+
+**colors**
+
+An array of colors that should be sequentially animated.
+
+**Returns:** The created animation clip.
+
+### .CreatePulsationAnimation( duration : number, pulseScale : number ) : AnimationClip
+
+Creates an animation clip that scales a 3D object in a pulse pattern in the given period.
+
+**duration**
+
+The duration of the animation.
+
+**pulseScale**
+
+The scale of the pulse.
+
+**Returns:** The created animation clip.
+
+### .CreateRotationAnimation( period : number, axis : 'x' | 'y' | 'z' ) : AnimationClip
+
+Creates an animation clip that rotates a 3D object 360 degrees in the given period of time around the given axis.
+
+**period**
+
+The duration of the animation.
+
+**axis**
+
+The axis of rotation.
+
+Default is `'x'`.
+
+**Returns:** The created animation clip.
+
+### .CreateScaleAxisAnimation( period : number, axis : 'x' | 'y' | 'z' ) : AnimationClip
+
+Creates an animation clip that scales a 3D object from `0` to `1` in the given period of time along the given axis.
+
+**period**
+
+The duration of the animation.
+
+**axis**
+
+The axis to scale the 3D object along.
+
+Default is `'x'`.
+
+**Returns:** The created animation clip.
+
+### .CreateShakeAnimation( duration : number, shakeScale : Vector3 ) : AnimationClip
+
+Creates an animation clip that translates a 3D object in a shake pattern in the given period.
+
+**duration**
+
+The duration of the animation.
+
+**shakeScale**
+
+The scale of the shake.
+
+**Returns:** The created animation clip.
+
+### .CreateVisibilityAnimation( duration : number ) : AnimationClip
+
+Creates an animation clip that toggles the visibility of a 3D object.
+
+**duration**
+
+The duration of the animation.
+
+**Returns:** The created animation clip.
+
+## Source
+
+[examples/jsm/animation/AnimationClipCreator.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/animation/AnimationClipCreator.js)

+ 6 - 6
docs/pages/AnimationLoader.html

@@ -32,7 +32,7 @@ const animations = await loader.loadAsync( 'animations/animation.js' );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>manager</strong>
+										<strong translate="no">manager</strong>
 									</td>
 									<td class="description last">
 										<p>The loading manager.</p>
@@ -53,7 +53,7 @@ holding instances of <a href="AnimationClip.html">AnimationClip</a> to the <code
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>url</strong>
+										<strong translate="no">url</strong>
 									</td>
 									<td class="description last">
 										<p>The path/URL of the file to be loaded. This can also be a data URI.</p>
@@ -61,7 +61,7 @@ holding instances of <a href="AnimationClip.html">AnimationClip</a> to the <code
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onLoad</strong>
+										<strong translate="no">onLoad</strong>
 									</td>
 									<td class="description last">
 										<p>Executed when the loading process has been finished.</p>
@@ -69,7 +69,7 @@ holding instances of <a href="AnimationClip.html">AnimationClip</a> to the <code
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onProgress</strong>
+										<strong translate="no">onProgress</strong>
 									</td>
 									<td class="description last">
 										<p>Executed while the loading is in progress.</p>
@@ -77,7 +77,7 @@ holding instances of <a href="AnimationClip.html">AnimationClip</a> to the <code
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onError</strong>
+										<strong translate="no">onError</strong>
 									</td>
 									<td class="description last">
 										<p>Executed when errors occur.</p>
@@ -98,7 +98,7 @@ holding instances of <a href="AnimationClip.html">AnimationClip</a> to the <code
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>json</strong>
+										<strong translate="no">json</strong>
 									</td>
 									<td class="description last">
 										<p>The serialized animation clips.</p>

+ 62 - 0
docs/pages/AnimationLoader.html.md

@@ -0,0 +1,62 @@
+*Inheritance: Loader →*
+
+# AnimationLoader
+
+Class for loading animation clips in the JSON format. The files are internally loaded via [FileLoader](FileLoader.html).
+
+## Code Example
+
+```js
+const loader = new THREE.AnimationLoader();
+const animations = await loader.loadAsync( 'animations/animation.js' );
+```
+
+## Constructor
+
+### new AnimationLoader( manager : LoadingManager )
+
+Constructs a new animation loader.
+
+**manager**
+
+The loading manager.
+
+## Methods
+
+### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )
+
+Starts loading from the given URL and pass the loaded animations as an array holding instances of [AnimationClip](AnimationClip.html) to the `onLoad()` callback.
+
+**url**
+
+The path/URL of the file to be loaded. This can also be a data URI.
+
+**onLoad**
+
+Executed when the loading process has been finished.
+
+**onProgress**
+
+Executed while the loading is in progress.
+
+**onError**
+
+Executed when errors occur.
+
+**Overrides:** [Loader#load](Loader.html#load)
+
+### .parse( json : Object ) : Array.<AnimationClip>
+
+Parses the given JSON object and returns an array of animation clips.
+
+**json**
+
+The serialized animation clips.
+
+**Overrides:** [Loader#parse](Loader.html#parse)
+
+**Returns:** The parsed animation clips.
+
+## Source
+
+[src/loaders/AnimationLoader.js](https://github.com/mrdoob/three.js/blob/master/src/loaders/AnimationLoader.js)

+ 12 - 12
docs/pages/AnimationMixer.html

@@ -28,7 +28,7 @@ one <code>AnimationMixer</code> may be used for each object.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>root</strong>
+										<strong translate="no">root</strong>
 									</td>
 									<td class="description last">
 										<p>The object whose animations shall be played by this mixer.</p>
@@ -69,7 +69,7 @@ same clip and root parameters always returns the same action.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>clip</strong>
+										<strong translate="no">clip</strong>
 									</td>
 									<td class="description last">
 										<p>An animation clip or alternatively the name of the animation clip.</p>
@@ -77,7 +77,7 @@ same clip and root parameters always returns the same action.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>optionalRoot</strong>
+										<strong translate="no">optionalRoot</strong>
 									</td>
 									<td class="description last">
 										<p>An alternative root object.</p>
@@ -85,7 +85,7 @@ same clip and root parameters always returns the same action.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>blendMode</strong>
+										<strong translate="no">blendMode</strong>
 									</td>
 									<td class="description last">
 										<p>The blend mode.</p>
@@ -106,7 +106,7 @@ same clip and root parameters always returns the same action.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>clip</strong>
+										<strong translate="no">clip</strong>
 									</td>
 									<td class="description last">
 										<p>An animation clip or alternatively the name of the animation clip.</p>
@@ -114,7 +114,7 @@ same clip and root parameters always returns the same action.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>optionalRoot</strong>
+										<strong translate="no">optionalRoot</strong>
 									</td>
 									<td class="description last">
 										<p>An alternative root object.</p>
@@ -146,7 +146,7 @@ input parameter will be scaled by <a href="AnimationMixer.html#timeScale">Animat
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>time</strong>
+										<strong translate="no">time</strong>
 									</td>
 									<td class="description last">
 										<p>The time to set in seconds.</p>
@@ -178,7 +178,7 @@ sure to call <a href="AnimationAction.html#stop">AnimationAction#stop</a> to dea
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>clip</strong>
+										<strong translate="no">clip</strong>
 									</td>
 									<td class="description last">
 										<p>An animation clip or alternatively the name of the animation clip.</p>
@@ -186,7 +186,7 @@ sure to call <a href="AnimationAction.html#stop">AnimationAction#stop</a> to dea
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>optionalRoot</strong>
+										<strong translate="no">optionalRoot</strong>
 									</td>
 									<td class="description last">
 										<p>An alternative root object.</p>
@@ -205,7 +205,7 @@ sure to call <a href="AnimationAction.html#stop">AnimationAction#stop</a> for al
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>clip</strong>
+										<strong translate="no">clip</strong>
 									</td>
 									<td class="description last">
 										<p>The clip to uncache.</p>
@@ -226,7 +226,7 @@ mixer operates on a single root.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>root</strong>
+										<strong translate="no">root</strong>
 									</td>
 									<td class="description last">
 										<p>The root object to uncache.</p>
@@ -246,7 +246,7 @@ time from <a href="Clock.html">Clock</a> or <a href="Timer.html">Timer</a>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>deltaTime</strong>
+										<strong translate="no">deltaTime</strong>
 									</td>
 									<td class="description last">
 										<p>The delta time in seconds.</p>

+ 133 - 0
docs/pages/AnimationMixer.html.md

@@ -0,0 +1,133 @@
+# AnimationMixer
+
+`AnimationMixer` is a player for animations on a particular object in the scene. When multiple objects in the scene are animated independently, one `AnimationMixer` may be used for each object.
+
+## Constructor
+
+### new AnimationMixer( root : Object3D )
+
+Constructs a new animation mixer.
+
+**root**
+
+The object whose animations shall be played by this mixer.
+
+## Properties
+
+### .time : number
+
+The global mixer time (in seconds; starting with `0` on the mixer's creation).
+
+Default is `0`.
+
+### .timeScale : number
+
+A scaling factor for the global time.
+
+Note: Setting this member to `0` and later back to `1` is a possibility to pause/unpause all actions that are controlled by this mixer.
+
+Default is `1`.
+
+## Methods
+
+### .clipAction( clip : AnimationClip | string, optionalRoot : Object3D, blendMode : NormalAnimationBlendMode | AdditiveAnimationBlendMode ) : AnimationAction
+
+Returns an instance of [AnimationAction](AnimationAction.html) for the passed clip.
+
+If an action fitting the clip and root parameters doesn't yet exist, it will be created by this method. Calling this method several times with the same clip and root parameters always returns the same action.
+
+**clip**
+
+An animation clip or alternatively the name of the animation clip.
+
+**optionalRoot**
+
+An alternative root object.
+
+**blendMode**
+
+The blend mode.
+
+**Returns:** The animation action.
+
+### .existingAction( clip : AnimationClip | string, optionalRoot : Object3D ) : AnimationAction
+
+Returns an existing animation action for the passed clip.
+
+**clip**
+
+An animation clip or alternatively the name of the animation clip.
+
+**optionalRoot**
+
+An alternative root object.
+
+**Returns:** The animation action. Returns `null` if no action was found.
+
+### .getRoot() : Object3D
+
+Returns this mixer's root object.
+
+**Returns:** The mixer's root object.
+
+### .setTime( time : number ) : AnimationMixer
+
+Sets the global mixer to a specific time and updates the animation accordingly.
+
+This is useful when you need to jump to an exact time in an animation. The input parameter will be scaled by [AnimationMixer#timeScale](AnimationMixer.html#timeScale)
+
+**time**
+
+The time to set in seconds.
+
+**Returns:** A reference to this animation mixer.
+
+### .stopAllAction() : AnimationMixer
+
+Deactivates all previously scheduled actions on this mixer.
+
+**Returns:** A reference to this animation mixer.
+
+### .uncacheAction( clip : AnimationClip | string, optionalRoot : Object3D )
+
+Deallocates all memory resources for an action. The action is identified by the given clip and an optional root object. Before using this method make sure to call [AnimationAction#stop](AnimationAction.html#stop) to deactivate the action.
+
+**clip**
+
+An animation clip or alternatively the name of the animation clip.
+
+**optionalRoot**
+
+An alternative root object.
+
+### .uncacheClip( clip : AnimationClip )
+
+Deallocates all memory resources for a clip. Before using this method make sure to call [AnimationAction#stop](AnimationAction.html#stop) for all related actions.
+
+**clip**
+
+The clip to uncache.
+
+### .uncacheRoot( root : Object3D )
+
+Deallocates all memory resources for a root object. Before using this method make sure to call [AnimationAction#stop](AnimationAction.html#stop) for all related actions or alternatively [AnimationMixer#stopAllAction](AnimationMixer.html#stopAllAction) when the mixer operates on a single root.
+
+**root**
+
+The root object to uncache.
+
+### .update( deltaTime : number ) : AnimationMixer
+
+Advances the global mixer time and updates the animation.
+
+This is usually done in the render loop by passing the delta time from [Clock](Clock.html) or [Timer](Timer.html).
+
+**deltaTime**
+
+The delta time in seconds.
+
+**Returns:** A reference to this animation mixer.
+
+## Source
+
+[src/animation/AnimationMixer.js](https://github.com/mrdoob/three.js/blob/master/src/animation/AnimationMixer.js)

+ 4 - 4
docs/pages/AnimationObjectGroup.html

@@ -43,7 +43,7 @@ so cache control of the individual objects must be done on the group.</li>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>arguments</strong>
+										<strong translate="no">arguments</strong>
 									</td>
 									<td class="description last">
 										<p>An arbitrary number of 3D objects that share the same animation state.</p>
@@ -77,7 +77,7 @@ so cache control of the individual objects must be done on the group.</li>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>arguments</strong>
+										<strong translate="no">arguments</strong>
 									</td>
 									<td class="description last">
 										<p>The 3D objects to add.</p>
@@ -95,7 +95,7 @@ so cache control of the individual objects must be done on the group.</li>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>arguments</strong>
+										<strong translate="no">arguments</strong>
 									</td>
 									<td class="description last">
 										<p>The 3D objects to remove.</p>
@@ -113,7 +113,7 @@ so cache control of the individual objects must be done on the group.</li>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>arguments</strong>
+										<strong translate="no">arguments</strong>
 									</td>
 									<td class="description last">
 										<p>The 3D objects to uncache.</p>

+ 70 - 0
docs/pages/AnimationObjectGroup.html.md

@@ -0,0 +1,70 @@
+# AnimationObjectGroup
+
+A group of objects that receives a shared animation state.
+
+Usage:
+
+*   Add objects you would otherwise pass as 'root' to the constructor or the .clipAction method of AnimationMixer.
+*   Instead pass this object as 'root'.
+*   You can also add and remove objects later when the mixer is running.
+
+Note:
+
+*   Objects of this class appear as one object to the mixer, so cache control of the individual objects must be done on the group.
+
+Limitation:
+
+*   The animated properties must be compatible among the all objects in the group.
+*   A single property can either be controlled through a target group or directly, but not both.
+
+## Constructor
+
+### new AnimationObjectGroup( …arguments : Object3D )
+
+Constructs a new animation group.
+
+**arguments**
+
+An arbitrary number of 3D objects that share the same animation state.
+
+## Properties
+
+### .isAnimationObjectGroup : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .uuid : string (readonly)
+
+The UUID of the 3D object.
+
+## Methods
+
+### .add( …arguments : Object3D )
+
+Adds an arbitrary number of objects to this animation group.
+
+**arguments**
+
+The 3D objects to add.
+
+### .remove( …arguments : Object3D )
+
+Removes an arbitrary number of objects to this animation group
+
+**arguments**
+
+The 3D objects to remove.
+
+### .uncache( …arguments : Object3D )
+
+Deallocates all memory resources for the passed 3D objects of this animation group.
+
+**arguments**
+
+The 3D objects to uncache.
+
+## Source
+
+[src/animation/AnimationObjectGroup.js](https://github.com/mrdoob/three.js/blob/master/src/animation/AnimationObjectGroup.js)

+ 241 - 0
docs/pages/AnimationPathHelper.html

@@ -0,0 +1,241 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>AnimationPathHelper - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Object3D.html">Object3D</a> → </p>
+	<h1 translate="no">AnimationPathHelper</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Visualizes the motion path of an animated object based on position keyframes
+from an AnimationClip.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const clip = model.animations[ 0 ];
+const helper = new AnimationPathHelper( model, clip, object );
+scene.add( helper );
+</code></pre></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">AnimationPathHelper</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 { AnimationPathHelper } from 'three/addons/helpers/AnimationPathHelper.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="AnimationPathHelper" translate="no">new <a href="#AnimationPathHelper">AnimationPathHelper</a><span class="signature">( root : <span class="param-type"><a href="Object3D.html">Object3D</a></span>, clip : <span class="param-type"><a href="AnimationClip.html">AnimationClip</a></span>, object : <span class="param-type"><a href="Object3D.html">Object3D</a></span>, options : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new animation path helper.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">root</strong>
+									</td>
+									<td class="description last">
+										<p>The root object containing the animation clips.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">clip</strong>
+									</td>
+									<td class="description last">
+										<p>The animation clip containing position keyframes.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The specific object to show the path for.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>Configuration options.</p>
+										<p>Default is <code>{}</code>.</p>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">color</strong>
+									</td>
+									<td class="description last">
+										<p>The path line color.</p>
+										<p>Default is <code>0x00ff00</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">markerColor</strong>
+									</td>
+									<td class="description last">
+										<p>The keyframe marker color.</p>
+										<p>Default is <code>0xff0000</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">divisions</strong>
+									</td>
+									<td class="description last">
+										<p>Number of samples for smooth path interpolation.</p>
+										<p>Default is <code>100</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">showMarkers</strong>
+									</td>
+									<td class="description last">
+										<p>Whether to show markers at keyframe positions.</p>
+										<p>Default is <code>true</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">markerSize</strong>
+									</td>
+									<td class="description last">
+										<p>Size of keyframe markers in pixels.</p>
+										<p>Default is <code>5</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="clip" translate="no">.<a href="#clip">clip</a><span class="type-signature"> : <a href="AnimationClip.html">AnimationClip</a></span> </h3>
+					<div class="description">
+						<p>The animation clip containing position keyframes.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="divisions" translate="no">.<a href="#divisions">divisions</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>Number of samples for smooth path interpolation.</p>
+						<p>Default is <code>100</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="isAnimationPathHelper" translate="no">.<a href="#isAnimationPathHelper">isAnimationPathHelper</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="line" translate="no">.<a href="#line">line</a><span class="type-signature"> : <a href="Line.html">Line</a></span> </h3>
+					<div class="description">
+						<p>The line representing the animation path.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="object" translate="no">.<a href="#object">object</a><span class="type-signature"> : <a href="Object3D.html">Object3D</a></span> </h3>
+					<div class="description">
+						<p>The object whose path is being visualized.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="points" translate="no">.<a href="#points">points</a><span class="type-signature"> : <a href="Points.html">Points</a> | null</span> </h3>
+					<div class="description">
+						<p>Points marking keyframe positions.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="root" translate="no">.<a href="#root">root</a><span class="type-signature"> : <a href="Object3D.html">Object3D</a></span> </h3>
+					<div class="description">
+						<p>The root object containing the animation clips.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Frees the GPU-related resources allocated by this instance.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="setColor" translate="no">.<a href="#setColor">setColor</a><span class="signature">( color : <span class="param-type">number | <a href="Color.html">Color</a> | string</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets the path line color.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">color</strong>
+									</td>
+									<td class="description last">
+										<p>The new color.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="setMarkerColor" translate="no">.<a href="#setMarkerColor">setMarkerColor</a><span class="signature">( color : <span class="param-type">number | <a href="Color.html">Color</a> | string</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets the keyframe marker color.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">color</strong>
+									</td>
+									<td class="description last">
+										<p>The new color.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateMatrixWorld" translate="no">.<a href="#updateMatrixWorld">updateMatrixWorld</a><span class="signature">( force : <span class="param-type">boolean</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the helper's transform to match the object's parent.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">force</strong>
+									</td>
+									<td class="description last">
+										<p>Force matrix update.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Object3D.html#updateMatrixWorld">Object3D#updateMatrixWorld</a></dt>
+						</dl>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/helpers/AnimationPathHelper.js" translate="no" target="_blank" rel="noopener">examples/jsm/helpers/AnimationPathHelper.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 145 - 0
docs/pages/AnimationPathHelper.html.md

@@ -0,0 +1,145 @@
+*Inheritance: EventDispatcher → Object3D →*
+
+# AnimationPathHelper
+
+Visualizes the motion path of an animated object based on position keyframes from an AnimationClip.
+
+## Code Example
+
+```js
+const clip = model.animations[ 0 ];
+const helper = new AnimationPathHelper( model, clip, object );
+scene.add( helper );
+```
+
+## Import
+
+AnimationPathHelper is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { AnimationPathHelper } from 'three/addons/helpers/AnimationPathHelper.js';
+```
+
+## Constructor
+
+### new AnimationPathHelper( root : Object3D, clip : AnimationClip, object : Object3D, options : Object )
+
+Constructs a new animation path helper.
+
+**root**
+
+The root object containing the animation clips.
+
+**clip**
+
+The animation clip containing position keyframes.
+
+**object**
+
+The specific object to show the path for.
+
+**options**
+
+Configuration options.
+
+Default is `{}`.
+
+**color**
+
+The path line color.
+
+Default is `0x00ff00`.
+
+**markerColor**
+
+The keyframe marker color.
+
+Default is `0xff0000`.
+
+**divisions**
+
+Number of samples for smooth path interpolation.
+
+Default is `100`.
+
+**showMarkers**
+
+Whether to show markers at keyframe positions.
+
+Default is `true`.
+
+**markerSize**
+
+Size of keyframe markers in pixels.
+
+Default is `5`.
+
+## Properties
+
+### .clip : AnimationClip
+
+The animation clip containing position keyframes.
+
+### .divisions : number
+
+Number of samples for smooth path interpolation.
+
+Default is `100`.
+
+### .isAnimationPathHelper : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .line : Line
+
+The line representing the animation path.
+
+### .object : Object3D
+
+The object whose path is being visualized.
+
+### .points : Points | null
+
+Points marking keyframe positions.
+
+### .root : Object3D
+
+The root object containing the animation clips.
+
+## Methods
+
+### .dispose()
+
+Frees the GPU-related resources allocated by this instance.
+
+### .setColor( color : number | Color | string )
+
+Sets the path line color.
+
+**color**
+
+The new color.
+
+### .setMarkerColor( color : number | Color | string )
+
+Sets the keyframe marker color.
+
+**color**
+
+The new color.
+
+### .updateMatrixWorld( force : boolean )
+
+Updates the helper's transform to match the object's parent.
+
+**force**
+
+Force matrix update.
+
+**Overrides:** [Object3D#updateMatrixWorld](Object3D.html#updateMatrixWorld)
+
+## Source
+
+[examples/jsm/helpers/AnimationPathHelper.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/helpers/AnimationPathHelper.js)

+ 20 - 20
docs/pages/AnimationUtils.html

@@ -29,7 +29,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>array</strong>
+										<strong translate="no">array</strong>
 									</td>
 									<td class="description last">
 										<p>The array to convert.</p>
@@ -37,7 +37,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>type</strong>
+										<strong translate="no">type</strong>
 									</td>
 									<td class="description last">
 										<p>The constructor of a type array.</p>
@@ -58,7 +58,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>jsonKeys</strong>
+										<strong translate="no">jsonKeys</strong>
 									</td>
 									<td class="description last">
 										<p>A list of JSON keyframes.</p>
@@ -66,7 +66,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>times</strong>
+										<strong translate="no">times</strong>
 									</td>
 									<td class="description last">
 										<p>This array will be filled with keyframe times by this method.</p>
@@ -74,7 +74,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>values</strong>
+										<strong translate="no">values</strong>
 									</td>
 									<td class="description last">
 										<p>This array will be filled with keyframe values by this method.</p>
@@ -82,7 +82,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>valuePropertyName</strong>
+										<strong translate="no">valuePropertyName</strong>
 									</td>
 									<td class="description last">
 										<p>The name of the property to use.</p>
@@ -100,7 +100,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>times</strong>
+										<strong translate="no">times</strong>
 									</td>
 									<td class="description last">
 										<p>The keyframe time values.</p>
@@ -121,7 +121,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>object</strong>
+										<strong translate="no">object</strong>
 									</td>
 									<td class="description last">
 										<p>The object to check.</p>
@@ -142,7 +142,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>targetClip</strong>
+										<strong translate="no">targetClip</strong>
 									</td>
 									<td class="description last">
 										<p>The clip to make additive.</p>
@@ -150,7 +150,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>referenceFrame</strong>
+										<strong translate="no">referenceFrame</strong>
 									</td>
 									<td class="description last">
 										<p>The reference frame.</p>
@@ -159,7 +159,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>referenceClip</strong>
+										<strong translate="no">referenceClip</strong>
 									</td>
 									<td class="description last">
 										<p>The reference clip.</p>
@@ -168,7 +168,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>fps</strong>
+										<strong translate="no">fps</strong>
 									</td>
 									<td class="description last">
 										<p>The FPS.</p>
@@ -190,7 +190,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>values</strong>
+										<strong translate="no">values</strong>
 									</td>
 									<td class="description last">
 										<p>The values to sort.</p>
@@ -198,7 +198,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>stride</strong>
+										<strong translate="no">stride</strong>
 									</td>
 									<td class="description last">
 										<p>The stride.</p>
@@ -206,7 +206,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>order</strong>
+										<strong translate="no">order</strong>
 									</td>
 									<td class="description last">
 										<p>The sort order.</p>
@@ -227,7 +227,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>sourceClip</strong>
+										<strong translate="no">sourceClip</strong>
 									</td>
 									<td class="description last">
 										<p>The values to sort.</p>
@@ -235,7 +235,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>name</strong>
+										<strong translate="no">name</strong>
 									</td>
 									<td class="description last">
 										<p>The name of the clip.</p>
@@ -243,7 +243,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>startFrame</strong>
+										<strong translate="no">startFrame</strong>
 									</td>
 									<td class="description last">
 										<p>The start frame.</p>
@@ -251,7 +251,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>endFrame</strong>
+										<strong translate="no">endFrame</strong>
 									</td>
 									<td class="description last">
 										<p>The end frame.</p>
@@ -259,7 +259,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>fps</strong>
+										<strong translate="no">fps</strong>
 									</td>
 									<td class="description last">
 										<p>The FPS.</p>

+ 137 - 0
docs/pages/AnimationUtils.html.md

@@ -0,0 +1,137 @@
+# AnimationUtils
+
+A class with various methods to assist with animations.
+
+## Static Methods
+
+### .convertArray( array : TypedArray | Array, type : TypedArray.constructor ) : TypedArray
+
+Converts an array to a specific type
+
+**array**
+
+The array to convert.
+
+**type**
+
+The constructor of a type array.
+
+**Returns:** The converted array
+
+### .flattenJSON( jsonKeys : Array.<number>, times : Array.<number>, values : Array.<number>, valuePropertyName : string )
+
+Used for parsing AOS keyframe formats.
+
+**jsonKeys**
+
+A list of JSON keyframes.
+
+**times**
+
+This array will be filled with keyframe times by this method.
+
+**values**
+
+This array will be filled with keyframe values by this method.
+
+**valuePropertyName**
+
+The name of the property to use.
+
+### .getKeyframeOrder( times : Array.<number> ) : Array.<number>
+
+Returns an array by which times and values can be sorted.
+
+**times**
+
+The keyframe time values.
+
+**Returns:** The array.
+
+### .isTypedArray( object : any ) : boolean
+
+Returns `true` if the given object is a typed array.
+
+**object**
+
+The object to check.
+
+**Returns:** Whether the given object is a typed array.
+
+### .makeClipAdditive( targetClip : AnimationClip, referenceFrame : number, referenceClip : AnimationClip, fps : number ) : AnimationClip
+
+Converts the keyframes of the given animation clip to an additive format.
+
+**targetClip**
+
+The clip to make additive.
+
+**referenceFrame**
+
+The reference frame.
+
+Default is `0`.
+
+**referenceClip**
+
+The reference clip.
+
+Default is `targetClip`.
+
+**fps**
+
+The FPS.
+
+Default is `30`.
+
+**Returns:** The updated clip which is now additive.
+
+### .sortedArray( values : Array.<number>, stride : number, order : Array.<number> ) : Array.<number>
+
+Sorts the given array by the previously computed order via `getKeyframeOrder()`.
+
+**values**
+
+The values to sort.
+
+**stride**
+
+The stride.
+
+**order**
+
+The sort order.
+
+**Returns:** The sorted values.
+
+### .subclip( sourceClip : AnimationClip, name : string, startFrame : number, endFrame : number, fps : number ) : AnimationClip
+
+Creates a new clip, containing only the segment of the original clip between the given frames.
+
+**sourceClip**
+
+The values to sort.
+
+**name**
+
+The name of the clip.
+
+**startFrame**
+
+The start frame.
+
+**endFrame**
+
+The end frame.
+
+**fps**
+
+The FPS.
+
+Default is `30`.
+
+**Returns:** The new sub clip.
+
+## Source
+
+[src/animation/AnimationUtils.js](https://github.com/mrdoob/three.js/blob/master/src/animation/AnimationUtils.js)

+ 6 - 6
docs/pages/ArcCurve.html

@@ -27,7 +27,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>aX</strong>
+										<strong translate="no">aX</strong>
 									</td>
 									<td class="description last">
 										<p>The X center of the ellipse.</p>
@@ -36,7 +36,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>aY</strong>
+										<strong translate="no">aY</strong>
 									</td>
 									<td class="description last">
 										<p>The Y center of the ellipse.</p>
@@ -45,7 +45,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>aRadius</strong>
+										<strong translate="no">aRadius</strong>
 									</td>
 									<td class="description last">
 										<p>The radius of the ellipse in the x direction.</p>
@@ -54,7 +54,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>aStartAngle</strong>
+										<strong translate="no">aStartAngle</strong>
 									</td>
 									<td class="description last">
 										<p>The start angle of the curve in radians starting from the positive X axis.</p>
@@ -63,7 +63,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>aEndAngle</strong>
+										<strong translate="no">aEndAngle</strong>
 									</td>
 									<td class="description last">
 										<p>The end angle of the curve in radians starting from the positive X axis.</p>
@@ -72,7 +72,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>aClockwise</strong>
+										<strong translate="no">aClockwise</strong>
 									</td>
 									<td class="description last">
 										<p>Whether the ellipse is drawn clockwise or not.</p>

+ 59 - 0
docs/pages/ArcCurve.html.md

@@ -0,0 +1,59 @@
+*Inheritance: Curve → EllipseCurve →*
+
+# ArcCurve
+
+A curve representing an arc.
+
+## Constructor
+
+### new ArcCurve( aX : number, aY : number, aRadius : number, aStartAngle : number, aEndAngle : number, aClockwise : boolean )
+
+Constructs a new arc curve.
+
+**aX**
+
+The X center of the ellipse.
+
+Default is `0`.
+
+**aY**
+
+The Y center of the ellipse.
+
+Default is `0`.
+
+**aRadius**
+
+The radius of the ellipse in the x direction.
+
+Default is `1`.
+
+**aStartAngle**
+
+The start angle of the curve in radians starting from the positive X axis.
+
+Default is `0`.
+
+**aEndAngle**
+
+The end angle of the curve in radians starting from the positive X axis.
+
+Default is `Math.PI*2`.
+
+**aClockwise**
+
+Whether the ellipse is drawn clockwise or not.
+
+Default is `false`.
+
+## Properties
+
+### .isArcCurve : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+## Source
+
+[src/extras/curves/ArcCurve.js](https://github.com/mrdoob/three.js/blob/master/src/extras/curves/ArcCurve.js)

+ 15 - 15
docs/pages/ArcballControls.html

@@ -17,9 +17,9 @@
 Cursor/finger positions and movements are mapped over a virtual trackball surface represented by a gizmo and mapped in intuitive and
 consistent camera movements. Dragging cursor/fingers will cause camera to orbit around the center of the trackball in a conservative
 way (returning to the starting point will make the camera return to its starting orientation).</p>
-<p>In addition to supporting pan, zoom and pinch gestures, Arcball controls provide focus&lt; functionality with a double click/tap for intuitively
-moving the object's point of interest in the center of the virtual trackball. Focus allows a much better inspection and navigation in complex
-environment. Moreover Arcball controls allow FOV manipulation (in a vertigo-style method) and z-rotation. Saving and restoring of Camera State
+<p>In addition to supporting pan, zoom and pinch gestures, double clicking/tapping focuses on a point, intuitively moving the object's
+point of interest to the center of the virtual trackball. Focus allows a much better inspection and navigation in complex environment.
+Moreover Arcball controls allow FOV manipulation (in a vertigo-style method) and z-rotation. Saving and restoring of Camera State
 is supported also through clipboard (use ctrl+c and ctrl+v shortcuts for copy and paste the state).</p>
 <p>Unlike <a href="OrbitControls.html">OrbitControls</a> and <a href="TrackballControls.html">TrackballControls</a>, <code>ArcballControls</code> doesn't require <code>update()</code> to be called externally in an
 animation loop when animations are on.</p></div>
@@ -39,7 +39,7 @@ animation loop when animations are on.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>camera</strong>
+										<strong translate="no">camera</strong>
 									</td>
 									<td class="description last">
 										<p>The camera to be controlled. The camera must not be a child of another object, unless that object is the scene itself.</p>
@@ -47,7 +47,7 @@ animation loop when animations are on.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>domElement</strong>
+										<strong translate="no">domElement</strong>
 									</td>
 									<td class="description last">
 										<p>The HTML element used for event listeners.</p>
@@ -56,7 +56,7 @@ animation loop when animations are on.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>scene</strong>
+										<strong translate="no">scene</strong>
 									</td>
 									<td class="description last">
 										<p>The scene rendered by the camera. If not given, gizmos cannot be shown.</p>
@@ -248,7 +248,7 @@ values. Only works with perspective cameras.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>isActive</strong>
+										<strong translate="no">isActive</strong>
 									</td>
 									<td class="description last">
 										<p>If set to <code>true</code>, gizmos are more visible.</p>
@@ -307,7 +307,7 @@ text as saved from <code>copyState()</code>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>camera</strong>
+										<strong translate="no">camera</strong>
 									</td>
 									<td class="description last">
 										<p>The camera to be controlled.</p>
@@ -325,7 +325,7 @@ text as saved from <code>copyState()</code>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>Value of gizmos visibility.</p>
@@ -343,7 +343,7 @@ text as saved from <code>copyState()</code>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>operation</strong>
+										<strong translate="no">operation</strong>
 									</td>
 									<td class="description last">
 										<p>The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV').</p>
@@ -351,7 +351,7 @@ text as saved from <code>copyState()</code>.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>mouse</strong>
+										<strong translate="no">mouse</strong>
 									</td>
 									<td class="description last">
 										<p>A mouse button (0, 1, 2) or 'WHEEL' for wheel notches.</p>
@@ -359,7 +359,7 @@ text as saved from <code>copyState()</code>.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>key</strong>
+										<strong translate="no">key</strong>
 									</td>
 									<td class="description last">
 										<p>The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed.</p>
@@ -381,7 +381,7 @@ text as saved from <code>copyState()</code>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>Value of radius factor.</p>
@@ -399,7 +399,7 @@ text as saved from <code>copyState()</code>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>mouse</strong>
+										<strong translate="no">mouse</strong>
 									</td>
 									<td class="description last">
 										<p>A mouse button (0, 1, 2) or 'WHEEL' for wheel notches.</p>
@@ -407,7 +407,7 @@ text as saved from <code>copyState()</code>.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>key</strong>
+										<strong translate="no">key</strong>
 									</td>
 									<td class="description last">
 										<p>The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed.</p>

+ 307 - 0
docs/pages/ArcballControls.html.md

@@ -0,0 +1,307 @@
+*Inheritance: EventDispatcher → Controls →*
+
+# ArcballControls
+
+Arcball controls allow the camera to be controlled by a virtual trackball with full touch support and advanced navigation functionality. Cursor/finger positions and movements are mapped over a virtual trackball surface represented by a gizmo and mapped in intuitive and consistent camera movements. Dragging cursor/fingers will cause camera to orbit around the center of the trackball in a conservative way (returning to the starting point will make the camera return to its starting orientation).
+
+In addition to supporting pan, zoom and pinch gestures, double clicking/tapping focuses on a point, intuitively moving the object's point of interest to the center of the virtual trackball. Focus allows a much better inspection and navigation in complex environment. Moreover Arcball controls allow FOV manipulation (in a vertigo-style method) and z-rotation. Saving and restoring of Camera State is supported also through clipboard (use ctrl+c and ctrl+v shortcuts for copy and paste the state).
+
+Unlike [OrbitControls](OrbitControls.html) and [TrackballControls](TrackballControls.html), `ArcballControls` doesn't require `update()` to be called externally in an animation loop when animations are on.
+
+## Import
+
+ArcballControls is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { ArcballControls } from 'three/addons/controls/ArcballControls.js';
+```
+
+## Constructor
+
+### new ArcballControls( camera : Camera, domElement : HTMLElement, scene : Scene )
+
+Constructs a new controls instance.
+
+**camera**
+
+The camera to be controlled. The camera must not be a child of another object, unless that object is the scene itself.
+
+**domElement**
+
+The HTML element used for event listeners.
+
+Default is `null`.
+
+**scene**
+
+The scene rendered by the camera. If not given, gizmos cannot be shown.
+
+Default is `null`.
+
+## Properties
+
+### .adjustNearFar : boolean
+
+If set to `true`, the camera's near and far values will be adjusted every time zoom is performed trying to maintain the same visible portion given by initial near and far values. Only works with perspective cameras.
+
+Default is `false`.
+
+### .cursorZoom : boolean
+
+Set to `true` to make zoom become cursor centered.
+
+Default is `false`.
+
+### .dampingFactor : number
+
+The damping inertia used if 'enableAnimations`is set to`true\`.
+
+Default is `25`.
+
+### .enableAnimations : boolean
+
+Set to `true` to enable animations for rotation (damping) and focus operation.
+
+Default is `true`.
+
+### .enableFocus : boolean
+
+Enable or disable camera focusing on double-tap (or click) operations.
+
+Default is `true`.
+
+### .enableGizmos : boolean
+
+Enable or disable gizmos.
+
+Default is `true`.
+
+### .enableGrid : boolean
+
+If set to `true`, a grid will appear when panning operation is being performed (desktop interaction only).
+
+Default is `false`.
+
+### .enablePan : boolean
+
+Enable or disable camera panning.
+
+Default is `true`.
+
+### .enableRotate : boolean
+
+Enable or disable camera rotation.
+
+Default is `true`.
+
+### .enableZoom : boolean
+
+Enable or disable camera zoom.
+
+Default is `true`.
+
+### .focusAnimationTime : number
+
+Duration of focus animations in ms.
+
+Default is `500`.
+
+### .maxDistance : number
+
+How far you can dolly out. For perspective cameras only.
+
+Default is `Infinity`.
+
+### .maxFov : number
+
+The maximum FOV in degrees.
+
+Default is `90`.
+
+### .maxZoom : number
+
+How far you can zoom out. For orthographic cameras only.
+
+Default is `Infinity`.
+
+### .minDistance : number
+
+How far you can dolly in. For perspective cameras only.
+
+Default is `0`.
+
+### .minFov : number
+
+The minimum FOV in degrees.
+
+Default is `5`.
+
+### .minZoom : number
+
+How far you can zoom in. For orthographic cameras only.
+
+Default is `0`.
+
+### .mouseActions : Array.<Object>
+
+Holds the mouse actions of this controls. This property is maintained by the methods `setMouseAction()` and `unsetMouseAction()`.
+
+### .radiusFactor : number
+
+The size of the gizmo relative to the screen width and height.
+
+Default is `0.67`.
+
+### .rotateSpeed : number
+
+Speed of rotation.
+
+Default is `1`.
+
+### .scaleFactor : number
+
+The scaling factor used when performing zoom operation.
+
+Default is `1.1`.
+
+### .scene : Scene
+
+The scene rendered by the camera. If not given, gizmos cannot be shown.
+
+Default is `null`.
+
+### .target : Vector3
+
+The control's focus point.
+
+### .wMax : number
+
+Maximum angular velocity allowed on rotation animation start.
+
+Default is `20`.
+
+## Methods
+
+### .activateGizmos( isActive : boolean )
+
+Makes rotation gizmos more or less visible.
+
+**isActive**
+
+If set to `true`, gizmos are more visible.
+
+### .copyState()
+
+Copy the current state to clipboard (as a readable JSON text).
+
+### .disposeGrid()
+
+Removes the grid from the scene.
+
+### .getRaycaster() : Raycaster
+
+Returns the raycaster that is used for user interaction. This object is shared between all instances of `ArcballControls`.
+
+**Returns:** The internal raycaster.
+
+### .pasteState()
+
+Set the controls state from the clipboard, assumes that the clipboard stores a JSON text as saved from `copyState()`.
+
+### .reset()
+
+Resets the controls.
+
+### .saveState()
+
+Saves the current state of the control. This can later be recover with `reset()`.
+
+### .setCamera( camera : Camera )
+
+Sets the camera to be controlled. Must be called in order to set a new camera to be controlled.
+
+**camera**
+
+The camera to be controlled.
+
+### .setGizmosVisible( value : boolean )
+
+Sets gizmos visibility.
+
+**value**
+
+Value of gizmos visibility.
+
+### .setMouseAction( operation : 'PAN' | 'ROTATE' | 'ZOOM' | 'FOV', mouse : 0 | 1 | 2 | 'WHEEL', key : 'CTRL' | 'SHIFT' ) : boolean
+
+Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one.
+
+**operation**
+
+The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV').
+
+**mouse**
+
+A mouse button (0, 1, 2) or 'WHEEL' for wheel notches.
+
+**key**
+
+The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed.
+
+Default is `null`.
+
+**Returns:** `true` if the mouse action has been successfully added, `false` otherwise.
+
+### .setTbRadius( value : number )
+
+Sets gizmos radius factor and redraws gizmos.
+
+**value**
+
+Value of radius factor.
+
+### .unsetMouseAction( mouse : 0 | 1 | 2 | 'WHEEL', key : 'CTRL' | 'SHIFT' ) : boolean
+
+Remove a mouse action by specifying its mouse/key combination.
+
+**mouse**
+
+A mouse button (0, 1, 2) or 'WHEEL' for wheel notches.
+
+**key**
+
+The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed.
+
+Default is `null`.
+
+**Returns:** `true` if the operation has been successfully removed, `false` otherwise.
+
+## Events
+
+### .change
+
+Fires when the camera has been transformed by the controls.
+
+##### Type:
+
+*   Object
+
+### .end
+
+Fires when an interaction has finished.
+
+##### Type:
+
+*   Object
+
+### .start
+
+Fires when an interaction was initiated.
+
+##### Type:
+
+*   Object
+
+## Source
+
+[examples/jsm/controls/ArcballControls.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/controls/ArcballControls.js)

+ 1 - 1
docs/pages/ArrayCamera.html

@@ -32,7 +32,7 @@ part of the viewport that is rendered with this camera.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>array</strong>
+										<strong translate="no">array</strong>
 									</td>
 									<td class="description last">
 										<p>An array of perspective sub cameras.</p>

+ 41 - 0
docs/pages/ArrayCamera.html.md

@@ -0,0 +1,41 @@
+*Inheritance: EventDispatcher → Object3D → Camera → PerspectiveCamera →*
+
+# ArrayCamera
+
+This type of camera can be used in order to efficiently render a scene with a predefined set of cameras. This is an important performance aspect for rendering VR scenes.
+
+An instance of `ArrayCamera` always has an array of sub cameras. It's mandatory to define for each sub camera the `viewport` property which determines the part of the viewport that is rendered with this camera.
+
+## Constructor
+
+### new ArrayCamera( array : Array.<PerspectiveCamera> )
+
+Constructs a new array camera.
+
+**array**
+
+An array of perspective sub cameras.
+
+Default is `[]`.
+
+## Properties
+
+### .cameras : Array.<PerspectiveCamera>
+
+An array of perspective sub cameras.
+
+### .isArrayCamera : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .isMultiViewCamera : boolean (readonly)
+
+Whether this camera is used with multiview rendering or not.
+
+Default is `false`.
+
+## Source
+
+[src/cameras/ArrayCamera.js](https://github.com/mrdoob/three.js/blob/master/src/cameras/ArrayCamera.js)

+ 5 - 5
docs/pages/ArrayElementNode.html

@@ -28,7 +28,7 @@ node data structures.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>node</strong>
+										<strong translate="no">node</strong>
 									</td>
 									<td class="description last">
 										<p>The array-like node.</p>
@@ -36,7 +36,7 @@ node data structures.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>indexNode</strong>
+										<strong translate="no">indexNode</strong>
 									</td>
 									<td class="description last">
 										<p>The index node that defines the element access.</p>
@@ -76,7 +76,7 @@ node data structures.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -84,7 +84,7 @@ node data structures.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>name</strong>
+										<strong translate="no">name</strong>
 									</td>
 									<td class="description last">
 										<p>The member name.</p>
@@ -108,7 +108,7 @@ node data structures.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>

+ 69 - 0
docs/pages/ArrayElementNode.html.md

@@ -0,0 +1,69 @@
+*Inheritance: EventDispatcher → Node →*
+
+# ArrayElementNode
+
+Base class for representing element access on an array-like node data structures.
+
+## Constructor
+
+### new ArrayElementNode( node : Node, indexNode : Node )
+
+Constructs an array element node.
+
+**node**
+
+The array-like node.
+
+**indexNode**
+
+The index node that defines the element access.
+
+## Properties
+
+### .indexNode : Node
+
+The index node that defines the element access.
+
+### .isArrayElementNode : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .node : Node
+
+The array-like node.
+
+## Methods
+
+### .getMemberType( builder : NodeBuilder, name : string ) : string
+
+This method is overwritten since the member type is inferred from the array-like node.
+
+**builder**
+
+The current node builder.
+
+**name**
+
+The member name.
+
+**Overrides:** [Node#getMemberType](Node.html#getMemberType)
+
+**Returns:** The member type.
+
+### .getNodeType( builder : NodeBuilder ) : string
+
+This method is overwritten since the node type is inferred from the array-like node.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [Node#getNodeType](Node.html#getNodeType)
+
+**Returns:** The node type.
+
+## Source
+
+[src/nodes/utils/ArrayElementNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/utils/ArrayElementNode.js)

+ 9 - 9
docs/pages/ArrayNode.html

@@ -35,7 +35,7 @@ const redColor = tintColors.element( 0 );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>nodeType</strong>
+										<strong translate="no">nodeType</strong>
 									</td>
 									<td class="description last">
 										<p>The data type of the elements.</p>
@@ -43,7 +43,7 @@ const redColor = tintColors.element( 0 );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>count</strong>
+										<strong translate="no">count</strong>
 									</td>
 									<td class="description last">
 										<p>Size of the array.</p>
@@ -51,7 +51,7 @@ const redColor = tintColors.element( 0 );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>values</strong>
+										<strong translate="no">values</strong>
 									</td>
 									<td class="description last">
 										<p>Array default values.</p>
@@ -92,7 +92,7 @@ const redColor = tintColors.element( 0 );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -116,7 +116,7 @@ const redColor = tintColors.element( 0 );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -140,7 +140,7 @@ const redColor = tintColors.element( 0 );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -164,7 +164,7 @@ const redColor = tintColors.element( 0 );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -172,7 +172,7 @@ const redColor = tintColors.element( 0 );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>name</strong>
+										<strong translate="no">name</strong>
 									</td>
 									<td class="description last">
 										<p>The name of the member variable.</p>
@@ -196,7 +196,7 @@ const redColor = tintColors.element( 0 );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>

+ 122 - 0
docs/pages/ArrayNode.html.md

@@ -0,0 +1,122 @@
+*Inheritance: EventDispatcher → Node → TempNode →*
+
+# ArrayNode
+
+ArrayNode represents a collection of nodes, typically created using the [array](TSL.html#array) function.
+
+## Code Example
+
+```js
+const colors = array( [
+	vec3( 1, 0, 0 ),
+	vec3( 0, 1, 0 ),
+	vec3( 0, 0, 1 )
+] );
+const redColor = tintColors.element( 0 );
+```
+
+## Constructor
+
+### new ArrayNode( nodeType : string, count : number, values : Array.<Node> )
+
+Constructs a new array node.
+
+**nodeType**
+
+The data type of the elements.
+
+**count**
+
+Size of the array.
+
+**values**
+
+Array default values.
+
+Default is `null`.
+
+## Properties
+
+### .count : number
+
+Array size.
+
+### .isArrayNode : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .values : Array.<Node>
+
+Array default values.
+
+## Methods
+
+### .generate( builder : NodeBuilder ) : string
+
+This method builds the output node and returns the resulting array as a shader string.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [TempNode#generate](TempNode.html#generate)
+
+**Returns:** The generated shader string.
+
+### .getArrayCount( builder : NodeBuilder ) : number
+
+Returns the number of elements in the node array.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [TempNode#getArrayCount](TempNode.html#getArrayCount)
+
+**Returns:** The number of elements in the node array.
+
+### .getElementType( builder : NodeBuilder ) : string
+
+Returns the node's type.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [TempNode#getElementType](TempNode.html#getElementType)
+
+**Returns:** The type of the node.
+
+### .getMemberType( builder : NodeBuilder, name : string ) : string
+
+Returns the type of a member variable.
+
+**builder**
+
+The current node builder.
+
+**name**
+
+The name of the member variable.
+
+**Overrides:** [TempNode#getMemberType](TempNode.html#getMemberType)
+
+**Returns:** The type of the member variable.
+
+### .getNodeType( builder : NodeBuilder ) : string
+
+Returns the node's type.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [TempNode#getNodeType](TempNode.html#getNodeType)
+
+**Returns:** The type of the node.
+
+## Source
+
+[src/nodes/core/ArrayNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/core/ArrayNode.js)

+ 11 - 11
docs/pages/ArrowHelper.html

@@ -37,7 +37,7 @@ scene.add( arrowHelper );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>dir</strong>
+										<strong translate="no">dir</strong>
 									</td>
 									<td class="description last">
 										<p>The (normalized) direction vector.</p>
@@ -46,7 +46,7 @@ scene.add( arrowHelper );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>origin</strong>
+										<strong translate="no">origin</strong>
 									</td>
 									<td class="description last">
 										<p>Point at which the arrow starts.</p>
@@ -55,7 +55,7 @@ scene.add( arrowHelper );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>length</strong>
+										<strong translate="no">length</strong>
 									</td>
 									<td class="description last">
 										<p>Length of the arrow in world units.</p>
@@ -64,7 +64,7 @@ scene.add( arrowHelper );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>color</strong>
+										<strong translate="no">color</strong>
 									</td>
 									<td class="description last">
 										<p>Color of the arrow.</p>
@@ -73,7 +73,7 @@ scene.add( arrowHelper );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>headLength</strong>
+										<strong translate="no">headLength</strong>
 									</td>
 									<td class="description last">
 										<p>The length of the head of the arrow.</p>
@@ -82,7 +82,7 @@ scene.add( arrowHelper );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>headWidth</strong>
+										<strong translate="no">headWidth</strong>
 									</td>
 									<td class="description last">
 										<p>The width of the head of the arrow.</p>
@@ -123,7 +123,7 @@ method whenever this instance is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>color</strong>
+										<strong translate="no">color</strong>
 									</td>
 									<td class="description last">
 										<p>The color to set.</p>
@@ -141,7 +141,7 @@ method whenever this instance is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>dir</strong>
+										<strong translate="no">dir</strong>
 									</td>
 									<td class="description last">
 										<p>The normalized direction vector.</p>
@@ -159,7 +159,7 @@ method whenever this instance is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>length</strong>
+										<strong translate="no">length</strong>
 									</td>
 									<td class="description last">
 										<p>Length of the arrow in world units.</p>
@@ -167,7 +167,7 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>headLength</strong>
+										<strong translate="no">headLength</strong>
 									</td>
 									<td class="description last">
 										<p>The length of the head of the arrow.</p>
@@ -176,7 +176,7 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>headWidth</strong>
+										<strong translate="no">headWidth</strong>
 									</td>
 									<td class="description last">
 										<p>The width of the head of the arrow.</p>

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

@@ -0,0 +1,116 @@
+*Inheritance: EventDispatcher → Object3D →*
+
+# ArrowHelper
+
+An 3D arrow object for visualizing directions.
+
+## Code Example
+
+```js
+const dir = new THREE.Vector3( 1, 2, 0 );
+//normalize the direction vector (convert to vector of length 1)
+dir.normalize();
+const origin = new THREE.Vector3( 0, 0, 0 );
+const length = 1;
+const hex = 0xffff00;
+const arrowHelper = new THREE.ArrowHelper( dir, origin, length, hex );
+scene.add( arrowHelper );
+```
+
+## Constructor
+
+### new ArrowHelper( dir : Vector3, origin : Vector3, length : number, color : number | Color | string, headLength : number, headWidth : number )
+
+Constructs a new arrow helper.
+
+**dir**
+
+The (normalized) direction vector.
+
+Default is `(0, 0, 1)`.
+
+**origin**
+
+Point at which the arrow starts.
+
+Default is `(0, 0, 0)`.
+
+**length**
+
+Length of the arrow in world units.
+
+Default is `1`.
+
+**color**
+
+Color of the arrow.
+
+Default is `0xffff00`.
+
+**headLength**
+
+The length of the head of the arrow.
+
+Default is `length*0.2`.
+
+**headWidth**
+
+The width of the head of the arrow.
+
+Default is `headLength*0.2`.
+
+## Properties
+
+### .cone : Mesh
+
+The cone part of the arrow helper.
+
+### .line : Line
+
+The line part of the arrow helper.
+
+## Methods
+
+### .dispose()
+
+Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
+
+### .setColor( color : number | Color | string )
+
+Sets the color of the helper.
+
+**color**
+
+The color to set.
+
+### .setDirection( dir : Vector3 )
+
+Sets the direction of the helper.
+
+**dir**
+
+The normalized direction vector.
+
+### .setLength( length : number, headLength : number, headWidth : number )
+
+Sets the length of the helper.
+
+**length**
+
+Length of the arrow in world units.
+
+**headLength**
+
+The length of the head of the arrow.
+
+Default is `length*0.2`.
+
+**headWidth**
+
+The width of the head of the arrow.
+
+Default is `headLength*0.2`.
+
+## Source
+
+[src/helpers/ArrowHelper.js](https://github.com/mrdoob/three.js/blob/master/src/helpers/ArrowHelper.js)

+ 7 - 7
docs/pages/AsciiEffect.html

@@ -30,7 +30,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>renderer</strong>
+										<strong translate="no">renderer</strong>
 									</td>
 									<td class="description last">
 										<p>The renderer.</p>
@@ -38,7 +38,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>charSet</strong>
+										<strong translate="no">charSet</strong>
 									</td>
 									<td class="description last">
 										<p>The char set.</p>
@@ -47,7 +47,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>options</strong>
+										<strong translate="no">options</strong>
 									</td>
 									<td class="description last">
 										<p>The configuration parameter.</p>
@@ -76,7 +76,7 @@ default <a href="WebGLRenderer.html#render">WebGLRenderer#render</a>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>scene</strong>
+										<strong translate="no">scene</strong>
 									</td>
 									<td class="description last">
 										<p>The scene to render.</p>
@@ -84,7 +84,7 @@ default <a href="WebGLRenderer.html#render">WebGLRenderer#render</a>.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>camera</strong>
+										<strong translate="no">camera</strong>
 									</td>
 									<td class="description last">
 										<p>The camera.</p>
@@ -102,7 +102,7 @@ default <a href="WebGLRenderer.html#render">WebGLRenderer#render</a>.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>w</strong>
+										<strong translate="no">w</strong>
 									</td>
 									<td class="description last">
 										<p>The width of the effect in logical pixels.</p>
@@ -110,7 +110,7 @@ default <a href="WebGLRenderer.html#render">WebGLRenderer#render</a>.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>h</strong>
+										<strong translate="no">h</strong>
 									</td>
 									<td class="description last">
 										<p>The height of the effect in logical pixels.</p>

+ 124 - 0
docs/pages/AsciiEffect.html.md

@@ -0,0 +1,124 @@
+# AsciiEffect
+
+A class that creates an ASCII effect.
+
+The ASCII generation is based on [jsascii](https://github.com/hassadee/jsascii/blob/master/jsascii.js).
+
+## Import
+
+AsciiEffect is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { AsciiEffect } from 'three/addons/effects/AsciiEffect.js';
+```
+
+## Constructor
+
+### new AsciiEffect( renderer : WebGLRenderer, charSet : string, options : AsciiEffect~Options )
+
+Constructs a new ASCII effect.
+
+**renderer**
+
+The renderer.
+
+**charSet**
+
+The char set.
+
+Default is `' .:-=+*#%@'`.
+
+**options**
+
+The configuration parameter.
+
+## Properties
+
+### .domElement : HTMLDivElement
+
+The DOM element of the effect. This element must be used instead of the default [WebGLRenderer#domElement](WebGLRenderer.html#domElement).
+
+## Methods
+
+### .render( scene : Object3D, camera : Camera )
+
+When using this effect, this method should be called instead of the default [WebGLRenderer#render](WebGLRenderer.html#render).
+
+**scene**
+
+The scene to render.
+
+**camera**
+
+The camera.
+
+### .setSize( w : number, h : number )
+
+Resizes the effect.
+
+**w**
+
+The width of the effect in logical pixels.
+
+**h**
+
+The height of the effect in logical pixels.
+
+## Type Definitions
+
+### .Options
+
+This type represents configuration settings of `AsciiEffect`.
+
+**resolution**  
+number
+
+A higher value leads to more details.
+
+Default is `0.15`.
+
+**scale**  
+number
+
+The scale of the effect.
+
+Default is `1`.
+
+**color**  
+boolean
+
+Whether colors should be enabled or not. Better quality but slows down rendering.
+
+Default is `false`.
+
+**alpha**  
+boolean
+
+Whether transparency should be enabled or not.
+
+Default is `false`.
+
+**block**  
+boolean
+
+Whether blocked characters should be enabled or not.
+
+Default is `false`.
+
+**invert**  
+boolean
+
+Whether colors should be inverted or not.
+
+Default is `false`.
+
+**strResolution**  
+'low' | 'medium' | 'high'
+
+The string resolution.
+
+Default is `'low'`.
+
+## Source
+
+[examples/jsm/effects/AsciiEffect.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/effects/AsciiEffect.js)

+ 3 - 3
docs/pages/AssignNode.html

@@ -28,7 +28,7 @@ to another node.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>targetNode</strong>
+										<strong translate="no">targetNode</strong>
 									</td>
 									<td class="description last">
 										<p>The target node.</p>
@@ -36,7 +36,7 @@ to another node.</p></div>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>sourceNode</strong>
+										<strong translate="no">sourceNode</strong>
 									</td>
 									<td class="description last">
 										<p>The source type.</p>
@@ -90,7 +90,7 @@ target and source data type does not match.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>

+ 59 - 0
docs/pages/AssignNode.html.md

@@ -0,0 +1,59 @@
+*Inheritance: EventDispatcher → Node → TempNode →*
+
+# AssignNode
+
+These node represents an assign operation. Meaning a node is assigned to another node.
+
+## Constructor
+
+### new AssignNode( targetNode : Node, sourceNode : Node )
+
+Constructs a new assign node.
+
+**targetNode**
+
+The target node.
+
+**sourceNode**
+
+The source type.
+
+## Properties
+
+### .isAssignNode : boolean (readonly)
+
+This flag can be used for type testing.
+
+Default is `true`.
+
+### .sourceNode : Node
+
+The source node.
+
+### .targetNode : Node
+
+The target node.
+
+## Methods
+
+### .hasDependencies() : boolean
+
+Whether this node is used more than once in context of other nodes. This method is overwritten since it always returns `false` (assigns are unique).
+
+**Overrides:** [TempNode#hasDependencies](TempNode.html#hasDependencies)
+
+**Returns:** A flag that indicates if there is more than one dependency to other nodes. Always `false`.
+
+### .needsSplitAssign( builder : NodeBuilder ) : boolean
+
+Whether a split is required when assigning source to target. This can happen when the component length of target and source data type does not match.
+
+**builder**
+
+The current node builder.
+
+**Returns:** Whether a split is required when assigning source to target.
+
+## Source
+
+[src/nodes/core/AssignNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/core/AssignNode.js)

+ 5 - 5
docs/pages/AtomicFunctionNode.html

@@ -32,7 +32,7 @@ atomic operations will not interfere with each other.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>method</strong>
+										<strong translate="no">method</strong>
 									</td>
 									<td class="description last">
 										<p>The signature of the atomic function to construct.</p>
@@ -40,7 +40,7 @@ atomic operations will not interfere with each other.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>pointerNode</strong>
+										<strong translate="no">pointerNode</strong>
 									</td>
 									<td class="description last">
 										<p>An atomic variable or element of an atomic buffer.</p>
@@ -48,7 +48,7 @@ atomic operations will not interfere with each other.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>valueNode</strong>
+										<strong translate="no">valueNode</strong>
 									</td>
 									<td class="description last">
 										<p>The value that mutates the atomic variable.</p>
@@ -98,7 +98,7 @@ the pointer node.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -119,7 +119,7 @@ the pointer node.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>

+ 75 - 0
docs/pages/AtomicFunctionNode.html.md

@@ -0,0 +1,75 @@
+*Inheritance: EventDispatcher → Node →*
+
+# AtomicFunctionNode
+
+`AtomicFunctionNode` represents any function that can operate on atomic variable types within a shader. In an atomic function, any modification to an atomic variable will occur as an indivisible step with a defined order relative to other modifications. Accordingly, even if multiple atomic functions are modifying an atomic variable at once atomic operations will not interfere with each other.
+
+This node can only be used with a WebGPU backend.
+
+## Constructor
+
+### new AtomicFunctionNode( method : string, pointerNode : Node, valueNode : Node )
+
+Constructs a new atomic function node.
+
+**method**
+
+The signature of the atomic function to construct.
+
+**pointerNode**
+
+An atomic variable or element of an atomic buffer.
+
+**valueNode**
+
+The value that mutates the atomic variable.
+
+## Properties
+
+### .method : string
+
+The signature of the atomic function to construct.
+
+### .parents : boolean
+
+Creates a list of the parents for this node for detecting if the node needs to return a value.
+
+Default is `true`.
+
+**Overrides:** [Node#parents](Node.html#parents)
+
+### .pointerNode : Node
+
+An atomic variable or element of an atomic buffer.
+
+### .valueNode : Node
+
+A value that modifies the atomic variable.
+
+## Methods
+
+### .getInputType( builder : NodeBuilder ) : string
+
+Overwrites the default implementation to return the type of the pointer node.
+
+**builder**
+
+The current node builder.
+
+**Returns:** The input type.
+
+### .getNodeType( builder : NodeBuilder ) : string
+
+Overwritten since the node type is inferred from the input type.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [Node#getNodeType](Node.html#getNodeType)
+
+**Returns:** The node type.
+
+## Source
+
+[src/nodes/gpgpu/AtomicFunctionNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/gpgpu/AtomicFunctionNode.js)

+ 4 - 4
docs/pages/AttributeNode.html

@@ -27,7 +27,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>attributeName</strong>
+										<strong translate="no">attributeName</strong>
 									</td>
 									<td class="description last">
 										<p>The name of the attribute.</p>
@@ -35,7 +35,7 @@
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>nodeType</strong>
+										<strong translate="no">nodeType</strong>
 									</td>
 									<td class="description last">
 										<p>The node type.</p>
@@ -69,7 +69,7 @@ analytically.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -92,7 +92,7 @@ analytically.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>attributeName</strong>
+										<strong translate="no">attributeName</strong>
 									</td>
 									<td class="description last">
 										<p>The name of the attribute.</p>

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

@@ -0,0 +1,57 @@
+*Inheritance: EventDispatcher → Node →*
+
+# AttributeNode
+
+Base class for representing shader attributes as nodes.
+
+## Constructor
+
+### new AttributeNode( attributeName : string, nodeType : string )
+
+Constructs a new attribute node.
+
+**attributeName**
+
+The name of the attribute.
+
+**nodeType**
+
+The node type.
+
+Default is `null`.
+
+## Properties
+
+### .global : boolean
+
+`AttributeNode` sets this property to `true` by default.
+
+Default is `true`.
+
+**Overrides:** [Node#global](Node.html#global)
+
+## Methods
+
+### .getAttributeName( builder : NodeBuilder ) : string
+
+Returns the attribute name of this node. The method can be overwritten in derived classes if the final name must be computed analytically.
+
+**builder**
+
+The current node builder.
+
+**Returns:** The attribute name.
+
+### .setAttributeName( attributeName : string ) : AttributeNode
+
+Sets the attribute name to the given value. The method can be overwritten in derived classes if the final name must be computed analytically.
+
+**attributeName**
+
+The name of the attribute.
+
+**Returns:** A reference to this node.
+
+## Source
+
+[src/nodes/core/AttributeNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/core/AttributeNode.js)

+ 16 - 16
docs/pages/Audio.html

@@ -43,7 +43,7 @@ audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>listener</strong>
+										<strong translate="no">listener</strong>
 									</td>
 									<td class="description last">
 										<p>The global audio listener.</p>
@@ -182,7 +182,7 @@ should begin, in seconds.</p>
 					<h3 class="name" id="sourceType" translate="no">.<a href="#sourceType">sourceType</a><span class="type-signature"> : 'empty' | 'audioNode' | 'mediaNode' | 'mediaStreamNode' | 'buffer'</span> <span class="type-signature">(readonly) </span></h3>
 					<div class="description">
 						<p>Defines the source type.</p>
-<p>The property is automatically by one of the <code>set*()</code> methods.</p>
+<p>The property is automatically set by one of the <code>set*()</code> methods.</p>
 						<p>Default is <code>'empty'</code>.</p>
 					</div>
 				</div>
@@ -297,7 +297,7 @@ initialisation and when setting / removing filters.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>delay</strong>
+										<strong translate="no">delay</strong>
 									</td>
 									<td class="description last">
 										<p>The delay, in seconds, at which the audio should start playing.</p>
@@ -320,7 +320,7 @@ initialisation and when setting / removing filters.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>audioBuffer</strong>
+										<strong translate="no">audioBuffer</strong>
 									</td>
 									<td class="description last">
 										<p>The audio buffer.</p>
@@ -341,7 +341,7 @@ initialisation and when setting / removing filters.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>The detuning of oscillation in cents.</p>
@@ -362,7 +362,7 @@ initialisation and when setting / removing filters.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>filter</strong>
+										<strong translate="no">filter</strong>
 									</td>
 									<td class="description last">
 										<p>The filter to set.</p>
@@ -383,7 +383,7 @@ initialisation and when setting / removing filters.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>A list of filters.</p>
@@ -405,7 +405,7 @@ initialisation and when setting / removing filters.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>Whether the audio should loop or not.</p>
@@ -427,7 +427,7 @@ stop, in seconds.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>The loop end value.</p>
@@ -449,7 +449,7 @@ start, in seconds.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>The loop start value.</p>
@@ -471,7 +471,7 @@ start, in seconds.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>mediaElement</strong>
+										<strong translate="no">mediaElement</strong>
 									</td>
 									<td class="description last">
 										<p>The media element.</p>
@@ -493,7 +493,7 @@ start, in seconds.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>mediaStream</strong>
+										<strong translate="no">mediaStream</strong>
 									</td>
 									<td class="description last">
 										<p>The media stream.</p>
@@ -515,7 +515,7 @@ start, in seconds.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>audioNode</strong>
+										<strong translate="no">audioNode</strong>
 									</td>
 									<td class="description last">
 										<p>The audio node like an instance of <code>OscillatorNode</code>.</p>
@@ -537,7 +537,7 @@ start, in seconds.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>The playback rate to set.</p>
@@ -558,7 +558,7 @@ start, in seconds.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>The volume to set.</p>
@@ -580,7 +580,7 @@ start, in seconds.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>delay</strong>
+										<strong translate="no">delay</strong>
 									</td>
 									<td class="description last">
 										<p>The delay, in seconds, at which the audio should stop playing.</p>

+ 383 - 0
docs/pages/Audio.html.md

@@ -0,0 +1,383 @@
+*Inheritance: EventDispatcher → Object3D →*
+
+# Audio
+
+Represents a non-positional ( global ) audio object.
+
+This and related audio modules make use of the [Web Audio API](https://www.w3.org/TR/webaudio-1.1/).
+
+## Code Example
+
+```js
+// create an AudioListener and add it to the camera
+const listener = new THREE.AudioListener();
+camera.add( listener );
+// create a global audio source
+const sound = new THREE.Audio( listener );
+// load a sound and set it as the Audio object's buffer
+const audioLoader = new THREE.AudioLoader();
+audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
+	sound.setBuffer( buffer );
+	sound.setLoop( true );
+	sound.setVolume( 0.5 );
+	sound.play();
+});
+```
+
+## Constructor
+
+### new Audio( listener : AudioListener )
+
+Constructs a new audio.
+
+**listener**
+
+The global audio listener.
+
+## Properties
+
+### .autoplay : boolean
+
+Whether to start playback automatically or not.
+
+Default is `false`.
+
+### .buffer : AudioBuffer (readonly)
+
+A reference to an audio buffer.
+
+Defined via [Audio#setBuffer](Audio.html#setBuffer).
+
+Default is `null`.
+
+### .context : AudioContext (readonly)
+
+The audio context.
+
+### .detune : number (readonly)
+
+Modify pitch, measured in cents. +/- 100 is a semitone. +/- 1200 is an octave.
+
+Defined via [Audio#setDetune](Audio.html#setDetune).
+
+Default is `0`.
+
+### .duration : undefined | number
+
+Overrides the default duration of the audio.
+
+Default is `undefined`.
+
+### .filters : Array.<AudioNode> (readonly)
+
+Can be used to apply a variety of low-order filters to create more complex sound effects e.g. via `BiquadFilterNode`.
+
+The property is automatically set by [Audio#setFilters](Audio.html#setFilters).
+
+### .gain : GainNode (readonly)
+
+The gain node used for volume control.
+
+### .hasPlaybackControl : boolean (readonly)
+
+Indicates whether the audio playback can be controlled with method like [Audio#play](Audio.html#play) or [Audio#pause](Audio.html#pause).
+
+This flag will be automatically set when audio sources are defined.
+
+Default is `true`.
+
+### .isPlaying : boolean (readonly)
+
+Indicates whether the audio is playing or not.
+
+This flag will be automatically set when using [Audio#play](Audio.html#play), [Audio#pause](Audio.html#pause), [Audio#stop](Audio.html#stop).
+
+Default is `false`.
+
+### .listener : AudioListener (readonly)
+
+The global audio listener.
+
+### .loop : boolean (readonly)
+
+Whether the audio should loop or not.
+
+Defined via [Audio#setLoop](Audio.html#setLoop).
+
+Default is `false`.
+
+### .loopEnd : number
+
+Defines where in the audio buffer the replay should stop, in seconds.
+
+Default is `0`.
+
+### .loopStart : number
+
+Defines where in the audio buffer the replay should start, in seconds.
+
+Default is `0`.
+
+### .offset : number
+
+An offset to the time within the audio buffer the playback should begin, in seconds.
+
+Default is `0`.
+
+### .playbackRate : number (readonly)
+
+The playback speed.
+
+Defined via [Audio#setPlaybackRate](Audio.html#setPlaybackRate).
+
+Default is `1`.
+
+### .source : AudioNode (readonly)
+
+Holds a reference to the current audio source.
+
+The property is automatically by one of the `set*()` methods.
+
+Default is `null`.
+
+### .sourceType : 'empty' | 'audioNode' | 'mediaNode' | 'mediaStreamNode' | 'buffer' (readonly)
+
+Defines the source type.
+
+The property is automatically set by one of the `set*()` methods.
+
+Default is `'empty'`.
+
+## Methods
+
+### .connect() : Audio
+
+Connects to the audio source. This is used internally on initialisation and when setting / removing filters.
+
+**Returns:** A reference to this instance.
+
+### .disconnect() : Audio | undefined
+
+Disconnects to the audio source. This is used internally on initialisation and when setting / removing filters.
+
+**Returns:** A reference to this instance.
+
+### .getDetune() : number
+
+Returns the detuning of oscillation in cents.
+
+**Returns:** The detuning of oscillation in cents.
+
+### .getFilter() : AudioNode | undefined
+
+Returns the first filter in the list of filters.
+
+**Returns:** The first filter in the list of filters.
+
+### .getFilters() : Array.<AudioNode>
+
+Returns the current set filters.
+
+**Returns:** The list of filters.
+
+### .getLoop() : boolean
+
+Returns the loop flag.
+
+Can only be used with compatible audio sources that allow playback control.
+
+**Returns:** Whether the audio should loop or not.
+
+### .getOutput() : GainNode
+
+Returns the output audio node.
+
+**Returns:** The output node.
+
+### .getPlaybackRate() : number
+
+Returns the current playback rate.
+
+**Returns:** The playback rate.
+
+### .getVolume() : number
+
+Returns the volume.
+
+**Returns:** The volume.
+
+### .onEnded()
+
+Automatically called when playback finished.
+
+### .pause() : Audio | undefined
+
+Pauses the playback of the audio.
+
+Can only be used with compatible audio sources that allow playback control.
+
+**Returns:** A reference to this instance.
+
+### .play( delay : number ) : Audio | undefined
+
+Starts the playback of the audio.
+
+Can only be used with compatible audio sources that allow playback control.
+
+**delay**
+
+The delay, in seconds, at which the audio should start playing.
+
+Default is `0`.
+
+**Returns:** A reference to this instance.
+
+### .setBuffer( audioBuffer : AudioBuffer ) : Audio
+
+Sets the given audio buffer as the source of this instance.
+
+[Audio#sourceType](Audio.html#sourceType) is set to `buffer` and [Audio#hasPlaybackControl](Audio.html#hasPlaybackControl) to `true`.
+
+**audioBuffer**
+
+The audio buffer.
+
+**Returns:** A reference to this instance.
+
+### .setDetune( value : number ) : Audio
+
+Defines the detuning of oscillation in cents.
+
+**value**
+
+The detuning of oscillation in cents.
+
+**Returns:** A reference to this instance.
+
+### .setFilter( filter : AudioNode ) : Audio
+
+Applies a single filter node to the audio.
+
+**filter**
+
+The filter to set.
+
+**Returns:** A reference to this instance.
+
+### .setFilters( value : Array.<AudioNode> ) : Audio
+
+Sets an array of filters and connects them with the audio source.
+
+**value**
+
+A list of filters.
+
+**Returns:** A reference to this instance.
+
+### .setLoop( value : boolean ) : Audio | undefined
+
+Sets the loop flag.
+
+Can only be used with compatible audio sources that allow playback control.
+
+**value**
+
+Whether the audio should loop or not.
+
+**Returns:** A reference to this instance.
+
+### .setLoopEnd( value : number ) : Audio
+
+Sets the loop end value which defines where in the audio buffer the replay should stop, in seconds.
+
+**value**
+
+The loop end value.
+
+**Returns:** A reference to this instance.
+
+### .setLoopStart( value : number ) : Audio
+
+Sets the loop start value which defines where in the audio buffer the replay should start, in seconds.
+
+**value**
+
+The loop start value.
+
+**Returns:** A reference to this instance.
+
+### .setMediaElementSource( mediaElement : HTMLMediaElement ) : Audio
+
+Sets the given media element as the source of this instance.
+
+[Audio#sourceType](Audio.html#sourceType) is set to `mediaNode` and [Audio#hasPlaybackControl](Audio.html#hasPlaybackControl) to `false`.
+
+**mediaElement**
+
+The media element.
+
+**Returns:** A reference to this instance.
+
+### .setMediaStreamSource( mediaStream : MediaStream ) : Audio
+
+Sets the given media stream as the source of this instance.
+
+[Audio#sourceType](Audio.html#sourceType) is set to `mediaStreamNode` and [Audio#hasPlaybackControl](Audio.html#hasPlaybackControl) to `false`.
+
+**mediaStream**
+
+The media stream.
+
+**Returns:** A reference to this instance.
+
+### .setNodeSource( audioNode : AudioNode ) : Audio
+
+Sets the given audio node as the source of this instance.
+
+[Audio#sourceType](Audio.html#sourceType) is set to `audioNode` and [Audio#hasPlaybackControl](Audio.html#hasPlaybackControl) to `false`.
+
+**audioNode**
+
+The audio node like an instance of `OscillatorNode`.
+
+**Returns:** A reference to this instance.
+
+### .setPlaybackRate( value : number ) : Audio | undefined
+
+Sets the playback rate.
+
+Can only be used with compatible audio sources that allow playback control.
+
+**value**
+
+The playback rate to set.
+
+**Returns:** A reference to this instance.
+
+### .setVolume( value : number ) : Audio
+
+Sets the volume.
+
+**value**
+
+The volume to set.
+
+**Returns:** A reference to this instance.
+
+### .stop( delay : number ) : Audio | undefined
+
+Stops the playback of the audio.
+
+Can only be used with compatible audio sources that allow playback control.
+
+**delay**
+
+The delay, in seconds, at which the audio should stop playing.
+
+Default is `0`.
+
+**Returns:** A reference to this instance.
+
+## Source
+
+[src/audio/Audio.js](https://github.com/mrdoob/three.js/blob/master/src/audio/Audio.js)

+ 2 - 2
docs/pages/AudioAnalyser.html

@@ -45,7 +45,7 @@ const data = analyser.getAverageFrequency();
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>audio</strong>
+										<strong translate="no">audio</strong>
 									</td>
 									<td class="description last">
 										<p>The audio to analyze.</p>
@@ -53,7 +53,7 @@ const data = analyser.getAverageFrequency();
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>fftSize</strong>
+										<strong translate="no">fftSize</strong>
 									</td>
 									<td class="description last">
 										<p>The window size in samples that is used when performing a Fast Fourier Transform (FFT) to get frequency domain data.</p>

+ 71 - 0
docs/pages/AudioAnalyser.html.md

@@ -0,0 +1,71 @@
+# AudioAnalyser
+
+This class can be used to analyse audio data.
+
+## Code Example
+
+```js
+// create an AudioListener and add it to the camera
+const listener = new THREE.AudioListener();
+camera.add( listener );
+// create an Audio source
+const sound = new THREE.Audio( listener );
+// load a sound and set it as the Audio object's buffer
+const audioLoader = new THREE.AudioLoader();
+audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
+	sound.setBuffer( buffer );
+	sound.setLoop(true);
+	sound.setVolume(0.5);
+	sound.play();
+});
+// create an AudioAnalyser, passing in the sound and desired fftSize
+const analyser = new THREE.AudioAnalyser( sound, 32 );
+// get the average frequency of the sound
+const data = analyser.getAverageFrequency();
+```
+
+## Constructor
+
+### new AudioAnalyser( audio : Audio, fftSize : number )
+
+Constructs a new audio analyzer.
+
+**audio**
+
+The audio to analyze.
+
+**fftSize**
+
+The window size in samples that is used when performing a Fast Fourier Transform (FFT) to get frequency domain data.
+
+Default is `2048`.
+
+## Properties
+
+### .analyser : AnalyserNode
+
+The global audio listener.
+
+### .data : Uint8Array
+
+Holds the analyzed data.
+
+## Methods
+
+### .getAverageFrequency() : number
+
+Returns the average of the frequencies returned by [AudioAnalyser#getFrequencyData](AudioAnalyser.html#getFrequencyData).
+
+**Returns:** The average frequency.
+
+### .getFrequencyData() : Uint8Array
+
+Returns an array with frequency data of the audio.
+
+Each item in the array represents the decibel value for a specific frequency. The frequencies are spread linearly from 0 to 1/2 of the sample rate. For example, for 48000 sample rate, the last item of the array will represent the decibel value for 24000 Hz.
+
+**Returns:** The frequency data.
+
+## Source
+
+[src/audio/AudioAnalyser.js](https://github.com/mrdoob/three.js/blob/master/src/audio/AudioAnalyser.js)

+ 1 - 1
docs/pages/AudioContext.html

@@ -38,7 +38,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>The native context to set.</p>

+ 23 - 0
docs/pages/AudioContext.html.md

@@ -0,0 +1,23 @@
+# AudioContext
+
+Manages the global audio context in the engine.
+
+## Static Methods
+
+### .getContext() : AudioContext
+
+Returns the global native audio context.
+
+**Returns:** The native audio context.
+
+### .setContext( value : AudioContext )
+
+Allows to set the global native audio context from outside.
+
+**value**
+
+The native context to set.
+
+## Source
+
+[src/audio/AudioContext.js](https://github.com/mrdoob/three.js/blob/master/src/audio/AudioContext.js)

+ 2 - 2
docs/pages/AudioListener.html

@@ -104,7 +104,7 @@ camera represents the 3D transformation of the listener.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>The filter to set.</p>
@@ -126,7 +126,7 @@ all audio nodes in the scene.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>value</strong>
+										<strong translate="no">value</strong>
 									</td>
 									<td class="description last">
 										<p>The master volume to set.</p>

+ 89 - 0
docs/pages/AudioListener.html.md

@@ -0,0 +1,89 @@
+*Inheritance: EventDispatcher → Object3D →*
+
+# AudioListener
+
+The class represents a virtual listener of the all positional and non-positional audio effects in the scene. A three.js application usually creates a single listener. It is a mandatory constructor parameter for audios entities like [Audio](Audio.html) and [PositionalAudio](PositionalAudio.html).
+
+In most cases, the listener object is a child of the camera. So the 3D transformation of the camera represents the 3D transformation of the listener.
+
+## Constructor
+
+### new AudioListener()
+
+Constructs a new audio listener.
+
+## Properties
+
+### .context : AudioContext (readonly)
+
+The native audio context.
+
+### .filter : AudioNode (readonly)
+
+An optional filter.
+
+Defined via [AudioListener#setFilter](AudioListener.html#setFilter).
+
+Default is `null`.
+
+### .gain : GainNode (readonly)
+
+The gain node used for volume control.
+
+### .timeDelta : number (readonly)
+
+Time delta values required for `linearRampToValueAtTime()` usage.
+
+Default is `0`.
+
+## Methods
+
+### .getFilter() : AudioNode
+
+Returns the current set filter.
+
+**Returns:** The filter.
+
+### .getInput() : GainNode
+
+Returns the listener's input node.
+
+This method is used by other audio nodes to connect to this listener.
+
+**Returns:** The input node.
+
+### .getMasterVolume() : number
+
+Returns the applications master volume.
+
+**Returns:** The master volume.
+
+### .removeFilter() : AudioListener
+
+Removes the current filter from this listener.
+
+**Returns:** A reference to this listener.
+
+### .setFilter( value : AudioNode ) : AudioListener
+
+Sets the given filter to this listener.
+
+**value**
+
+The filter to set.
+
+**Returns:** A reference to this listener.
+
+### .setMasterVolume( value : number ) : AudioListener
+
+Sets the applications master volume. This volume setting affects all audio nodes in the scene.
+
+**value**
+
+The master volume to set.
+
+**Returns:** A reference to this listener.
+
+## Source
+
+[src/audio/AudioListener.js](https://github.com/mrdoob/three.js/blob/master/src/audio/AudioListener.js)

+ 5 - 5
docs/pages/AudioLoader.html

@@ -36,7 +36,7 @@ ambientSound.play();
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>manager</strong>
+										<strong translate="no">manager</strong>
 									</td>
 									<td class="description last">
 										<p>The loading manager.</p>
@@ -57,7 +57,7 @@ to the <code>onLoad()</code> callback.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>url</strong>
+										<strong translate="no">url</strong>
 									</td>
 									<td class="description last">
 										<p>The path/URL of the file to be loaded. This can also be a data URI.</p>
@@ -65,7 +65,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onLoad</strong>
+										<strong translate="no">onLoad</strong>
 									</td>
 									<td class="description last">
 										<p>Executed when the loading process has been finished.</p>
@@ -73,7 +73,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onProgress</strong>
+										<strong translate="no">onProgress</strong>
 									</td>
 									<td class="description last">
 										<p>Executed while the loading is in progress.</p>
@@ -81,7 +81,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onError</strong>
+										<strong translate="no">onError</strong>
 									</td>
 									<td class="description last">
 										<p>Executed when errors occur.</p>

+ 54 - 0
docs/pages/AudioLoader.html.md

@@ -0,0 +1,54 @@
+*Inheritance: Loader →*
+
+# AudioLoader
+
+Class for loading audio buffers. Audios are internally loaded via [FileLoader](FileLoader.html).
+
+## Code Example
+
+```js
+const audioListener = new THREE.AudioListener();
+const ambientSound = new THREE.Audio( audioListener );
+const loader = new THREE.AudioLoader();
+const audioBuffer = await loader.loadAsync( 'audio/ambient_ocean.ogg' );
+ambientSound.setBuffer( audioBuffer );
+ambientSound.play();
+```
+
+## Constructor
+
+### new AudioLoader( manager : LoadingManager )
+
+Constructs a new audio loader.
+
+**manager**
+
+The loading manager.
+
+## Methods
+
+### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )
+
+Starts loading from the given URL and passes the loaded audio buffer to the `onLoad()` callback.
+
+**url**
+
+The path/URL of the file to be loaded. This can also be a data URI.
+
+**onLoad**
+
+Executed when the loading process has been finished.
+
+**onProgress**
+
+Executed while the loading is in progress.
+
+**onError**
+
+Executed when errors occur.
+
+**Overrides:** [Loader#load](Loader.html#load)
+
+## Source
+
+[src/loaders/AudioLoader.js](https://github.com/mrdoob/three.js/blob/master/src/loaders/AudioLoader.js)

+ 4 - 4
docs/pages/AxesHelper.html

@@ -32,7 +32,7 @@ scene.add( axesHelper );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>size</strong>
+										<strong translate="no">size</strong>
 									</td>
 									<td class="description last">
 										<p>Size of the lines representing the axes.</p>
@@ -60,7 +60,7 @@ method whenever this instance is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>xAxisColor</strong>
+										<strong translate="no">xAxisColor</strong>
 									</td>
 									<td class="description last">
 										<p>The color for the x axis.</p>
@@ -68,7 +68,7 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>yAxisColor</strong>
+										<strong translate="no">yAxisColor</strong>
 									</td>
 									<td class="description last">
 										<p>The color for the y axis.</p>
@@ -76,7 +76,7 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>zAxisColor</strong>
+										<strong translate="no">zAxisColor</strong>
 									</td>
 									<td class="description last">
 										<p>The color for the z axis.</p>

+ 52 - 0
docs/pages/AxesHelper.html.md

@@ -0,0 +1,52 @@
+*Inheritance: EventDispatcher → Object3D → Line → LineSegments →*
+
+# AxesHelper
+
+An axis object to visualize the 3 axes in a simple way. The X axis is red. The Y axis is green. The Z axis is blue.
+
+## Code Example
+
+```js
+const axesHelper = new THREE.AxesHelper( 5 );
+scene.add( axesHelper );
+```
+
+## Constructor
+
+### new AxesHelper( size : number )
+
+Constructs a new axes helper.
+
+**size**
+
+Size of the lines representing the axes.
+
+Default is `1`.
+
+## Methods
+
+### .dispose()
+
+Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
+
+### .setColors( xAxisColor : number | Color | string, yAxisColor : number | Color | string, zAxisColor : number | Color | string ) : AxesHelper
+
+Defines the colors of the axes helper.
+
+**xAxisColor**
+
+The color for the x axis.
+
+**yAxisColor**
+
+The color for the y axis.
+
+**zAxisColor**
+
+The color for the z axis.
+
+**Returns:** A reference to this axes helper.
+
+## Source
+
+[src/helpers/AxesHelper.js](https://github.com/mrdoob/three.js/blob/master/src/helpers/AxesHelper.js)

+ 6 - 6
docs/pages/BVHLoader.html

@@ -43,7 +43,7 @@ mixer.clipAction( result.clip ).play();
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>manager</strong>
+										<strong translate="no">manager</strong>
 									</td>
 									<td class="description last">
 										<p>The loading manager.</p>
@@ -79,7 +79,7 @@ to the <code>onLoad()</code> callback.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>url</strong>
+										<strong translate="no">url</strong>
 									</td>
 									<td class="description last">
 										<p>The path/URL of the file to be loaded. This can also be a data URI.</p>
@@ -87,7 +87,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onLoad</strong>
+										<strong translate="no">onLoad</strong>
 									</td>
 									<td class="description last">
 										<p>Executed when the loading process has been finished.</p>
@@ -95,7 +95,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onProgress</strong>
+										<strong translate="no">onProgress</strong>
 									</td>
 									<td class="description last">
 										<p>Executed while the loading is in progress.</p>
@@ -103,7 +103,7 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>onError</strong>
+										<strong translate="no">onError</strong>
 									</td>
 									<td class="description last">
 										<p>Executed when errors occur.</p>
@@ -124,7 +124,7 @@ to the <code>onLoad()</code> callback.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>text</strong>
+										<strong translate="no">text</strong>
 									</td>
 									<td class="description last">
 										<p>The raw BVH data as a string.</p>

+ 93 - 0
docs/pages/BVHLoader.html.md

@@ -0,0 +1,93 @@
+*Inheritance: Loader →*
+
+# BVHLoader
+
+A loader for the BVH format.
+
+Imports BVH files and outputs a single [Skeleton](Skeleton.html) and [AnimationClip](AnimationClip.html). The loader only supports BVH files containing a single root right now.
+
+## Code Example
+
+```js
+const loader = new BVHLoader();
+const result = await loader.loadAsync( 'models/bvh/pirouette.bvh' );
+// visualize skeleton
+const skeletonHelper = new THREE.SkeletonHelper( result.skeleton.bones[ 0 ] );
+scene.add( result.skeleton.bones[ 0 ] );
+scene.add( skeletonHelper );
+// play animation clip
+mixer = new THREE.AnimationMixer( result.skeleton.bones[ 0 ] );
+mixer.clipAction( result.clip ).play();
+```
+
+## Import
+
+BVHLoader is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { BVHLoader } from 'three/addons/loaders/BVHLoader.js';
+```
+
+## Constructor
+
+### new BVHLoader( manager : LoadingManager )
+
+Constructs a new BVH loader.
+
+**manager**
+
+The loading manager.
+
+## Properties
+
+### .animateBonePositions : boolean
+
+Whether to animate bone positions or not.
+
+Default is `true`.
+
+### .animateBoneRotations : boolean
+
+Whether to animate bone rotations or not.
+
+Default is `true`.
+
+## Methods
+
+### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )
+
+Starts loading from the given URL and passes the loaded BVH asset to the `onLoad()` callback.
+
+**url**
+
+The path/URL of the file to be loaded. This can also be a data URI.
+
+**onLoad**
+
+Executed when the loading process has been finished.
+
+**onProgress**
+
+Executed while the loading is in progress.
+
+**onError**
+
+Executed when errors occur.
+
+**Overrides:** [Loader#load](Loader.html#load)
+
+### .parse( text : string ) : Object
+
+Parses the given BVH data and returns the resulting data.
+
+**text**
+
+The raw BVH data as a string.
+
+**Overrides:** [Loader#parse](Loader.html#parse)
+
+**Returns:** An object representing the parsed asset.
+
+## Source
+
+[examples/jsm/loaders/BVHLoader.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/BVHLoader.js)

+ 1 - 1
docs/pages/BarrierNode.html

@@ -28,7 +28,7 @@
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>scope</strong>
+										<strong translate="no">scope</strong>
 									</td>
 									<td class="description last">
 										<p>The scope defines the behavior of the node.</p>

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

@@ -0,0 +1,21 @@
+*Inheritance: EventDispatcher → Node →*
+
+# BarrierNode
+
+Represents a GPU control barrier that synchronizes compute operations within a given scope.
+
+This node can only be used with a WebGPU backend.
+
+## Constructor
+
+### new BarrierNode( scope : string )
+
+Constructs a new barrier node.
+
+**scope**
+
+The scope defines the behavior of the node.
+
+## Source
+
+[src/nodes/gpgpu/BarrierNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/gpgpu/BarrierNode.js)

+ 1 - 1
docs/pages/BasicEnvironmentNode.html

@@ -30,7 +30,7 @@ or <a href="MeshPhongNodeMaterial.html">MeshPhongNodeMaterial</a>.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>envNode</strong>
+										<strong translate="no">envNode</strong>
 									</td>
 									<td class="description last">
 										<p>A node representing the environment.</p>

+ 29 - 0
docs/pages/BasicEnvironmentNode.html.md

@@ -0,0 +1,29 @@
+*Inheritance: EventDispatcher → Node → LightingNode →*
+
+# BasicEnvironmentNode
+
+Represents a basic model for Image-based lighting (IBL). The environment is defined via environment maps in the equirectangular or cube map format. `BasicEnvironmentNode` is intended for non-PBR materials like [MeshBasicNodeMaterial](MeshBasicNodeMaterial.html) or [MeshPhongNodeMaterial](MeshPhongNodeMaterial.html).
+
+## Constructor
+
+### new BasicEnvironmentNode( envNode : Node )
+
+Constructs a new basic environment node.
+
+**envNode**
+
+A node representing the environment.
+
+Default is `null`.
+
+## Properties
+
+### .envNode : Node
+
+A node representing the environment.
+
+Default is `null`.
+
+## Source
+
+[src/nodes/lighting/BasicEnvironmentNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/BasicEnvironmentNode.js)

+ 1 - 1
docs/pages/BasicLightMapNode.html

@@ -29,7 +29,7 @@ requires a special scaling factor for the light map.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>lightMapNode</strong>
+										<strong translate="no">lightMapNode</strong>
 									</td>
 									<td class="description last">
 										<p>The light map node.</p>

+ 27 - 0
docs/pages/BasicLightMapNode.html.md

@@ -0,0 +1,27 @@
+*Inheritance: EventDispatcher → Node → LightingNode →*
+
+# BasicLightMapNode
+
+A specific version of [IrradianceNode](IrradianceNode.html) that is only relevant for [MeshBasicNodeMaterial](MeshBasicNodeMaterial.html). Since the material is unlit, it requires a special scaling factor for the light map.
+
+## Constructor
+
+### new BasicLightMapNode( lightMapNode : Node.<vec3> )
+
+Constructs a new basic light map node.
+
+**lightMapNode**
+
+The light map node.
+
+Default is `null`.
+
+## Properties
+
+### .lightMapNode : Node.<vec3>
+
+The light map node.
+
+## Source
+
+[src/nodes/lighting/BasicLightMapNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/BasicLightMapNode.js)

+ 2 - 2
docs/pages/BasicLightingModel.html

@@ -37,7 +37,7 @@ diffuse color. Environment mapping is supported. Used in <a href="MeshBasicNodeM
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>
@@ -58,7 +58,7 @@ diffuse color. Environment mapping is supported. Used in <a href="MeshBasicNodeM
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>

+ 37 - 0
docs/pages/BasicLightingModel.html.md

@@ -0,0 +1,37 @@
+*Inheritance: LightingModel →*
+
+# BasicLightingModel
+
+Represents the lighting model for unlit materials. The only light contribution is baked indirect lighting modulated with ambient occlusion and the material's diffuse color. Environment mapping is supported. Used in [MeshBasicNodeMaterial](MeshBasicNodeMaterial.html).
+
+## Constructor
+
+### new BasicLightingModel()
+
+Constructs a new basic lighting model.
+
+## Methods
+
+### .finish( builder : NodeBuilder )
+
+Implements the environment mapping.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [LightingModel#finish](LightingModel.html#finish)
+
+### .indirect( builder : NodeBuilder )
+
+Implements the baked indirect lighting with its modulation.
+
+**builder**
+
+The current node builder.
+
+**Overrides:** [LightingModel#indirect](LightingModel.html#indirect)
+
+## Source
+
+[src/nodes/functions/BasicLightingModel.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/functions/BasicLightingModel.js)

+ 2 - 2
docs/pages/BatchNode.html

@@ -29,7 +29,7 @@ with instances of <a href="BatchedMesh.html">BatchedMesh</a>.</p></div>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>batchMesh</strong>
+										<strong translate="no">batchMesh</strong>
 									</td>
 									<td class="description last">
 										<p>A reference to batched mesh.</p>
@@ -65,7 +65,7 @@ like with morph and skinning nodes.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>builder</strong>
+										<strong translate="no">builder</strong>
 									</td>
 									<td class="description last">
 										<p>The current node builder.</p>

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

@@ -0,0 +1,43 @@
+*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)

+ 42 - 42
docs/pages/BatchedMesh.html

@@ -51,7 +51,7 @@ scene.add( batchedMesh );
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>maxInstanceCount</strong>
+										<strong translate="no">maxInstanceCount</strong>
 									</td>
 									<td class="description last">
 										<p>The maximum number of individual instances planned to be added and rendered.</p>
@@ -59,7 +59,7 @@ scene.add( batchedMesh );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>maxVertexCount</strong>
+										<strong translate="no">maxVertexCount</strong>
 									</td>
 									<td class="description last">
 										<p>The maximum number of vertices to be used by all unique geometries.</p>
@@ -67,7 +67,7 @@ scene.add( batchedMesh );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>maxIndexCount</strong>
+										<strong translate="no">maxIndexCount</strong>
 									</td>
 									<td class="description last">
 										<p>The maximum number of indices to be used by all unique geometries</p>
@@ -76,7 +76,7 @@ scene.add( batchedMesh );
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>material</strong>
+										<strong translate="no">material</strong>
 									</td>
 									<td class="description last">
 										<p>The mesh material.</p>
@@ -168,7 +168,7 @@ geometry id referring to it to be used in other functions.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>geometry</strong>
+										<strong translate="no">geometry</strong>
 									</td>
 									<td class="description last">
 										<p>The geometry to add.</p>
@@ -176,7 +176,7 @@ geometry id referring to it to be used in other functions.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>reservedVertexCount</strong>
+										<strong translate="no">reservedVertexCount</strong>
 									</td>
 									<td class="description last">
 										<p>Optional parameter specifying the amount of
@@ -188,7 +188,7 @@ Defaults to the length of the given geometry vertex buffer.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>reservedIndexCount</strong>
+										<strong translate="no">reservedIndexCount</strong>
 									</td>
 									<td class="description last">
 										<p>Optional parameter specifying the amount of index
@@ -214,7 +214,7 @@ a new id referring to the new instance to be used by other functions.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>geometryId</strong>
+										<strong translate="no">geometryId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of a previously added geometry via <a href="BatchedMesh.html#addGeometry">BatchedMesh#addGeometry</a>.</p>
@@ -252,7 +252,7 @@ this geometry will also be removed as a side effect.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>geometryId</strong>
+										<strong translate="no">geometryId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of the geometry to remove from the batch.</p>
@@ -273,7 +273,7 @@ this geometry will also be removed as a side effect.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of the instance to remove from the batch.</p>
@@ -301,7 +301,7 @@ method whenever this instance is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>geometryId</strong>
+										<strong translate="no">geometryId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of the geometry to return the bounding box for.</p>
@@ -309,7 +309,7 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>target</strong>
+										<strong translate="no">target</strong>
 									</td>
 									<td class="description last">
 										<p>The target object that is used to store the method's result.</p>
@@ -330,7 +330,7 @@ method whenever this instance is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>geometryId</strong>
+										<strong translate="no">geometryId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of the geometry to return the bounding sphere for.</p>
@@ -338,7 +338,7 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>target</strong>
+										<strong translate="no">target</strong>
 									</td>
 									<td class="description last">
 										<p>The target object that is used to store the method's result.</p>
@@ -350,7 +350,7 @@ method whenever this instance is no longer used in your app.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The geometry's bounding sphere. Returns <code>null</code> if no geometry has been found for the given ID.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="getColorAt" translate="no">.<a href="#getColorAt">getColorAt</a><span class="signature">( instanceId : <span class="param-type">number</span>, color : <span class="param-type"><a href="Color.html">Color</a></span> )</span><span class="type-signature"> : <a href="Color.html">Color</a></span> </h3>
+					<h3 class="name name-method" id="getColorAt" translate="no">.<a href="#getColorAt">getColorAt</a><span class="signature">( instanceId : <span class="param-type">number</span>, color : <span class="param-type"><a href="Color.html">Color</a> | <a href="Vector4.html">Vector4</a></span> )</span><span class="type-signature"> : <a href="Color.html">Color</a> | <a href="Vector4.html">Vector4</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Returns the color of the defined instance.</p>
@@ -359,7 +359,7 @@ method whenever this instance is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of an instance to get the color of.</p>
@@ -367,7 +367,7 @@ method whenever this instance is no longer used in your app.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>color</strong>
+										<strong translate="no">color</strong>
 									</td>
 									<td class="description last">
 										<p>The target object that is used to store the method's result.</p>
@@ -376,7 +376,7 @@ method whenever this instance is no longer used in your app.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The instance's color.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The instance's color.  Use a <code>Vector4</code> to also retrieve alpha.</dt>
 						</dl>
 					</div>
 					<h3 class="name name-method" id="getGeometryIdAt" translate="no">.<a href="#getGeometryIdAt">getGeometryIdAt</a><span class="signature">( instanceId : <span class="param-type">number</span> )</span><span class="type-signature"> : number</span> </h3>
@@ -388,7 +388,7 @@ method whenever this instance is no longer used in your app.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of an instance to get the geometry ID of.</p>
@@ -410,7 +410,7 @@ indicating the starting offset and count, or <code>null</code> if invalid.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>geometryId</strong>
+										<strong translate="no">geometryId</strong>
 									</td>
 									<td class="description last">
 										<p>The id of the geometry to get the range of.</p>
@@ -418,7 +418,7 @@ indicating the starting offset and count, or <code>null</code> if invalid.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>target</strong>
+										<strong translate="no">target</strong>
 									</td>
 									<td class="description last">
 										<p>The target object that is used to store the method's result.</p>
@@ -439,7 +439,7 @@ indicating the starting offset and count, or <code>null</code> if invalid.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of an instance to get the matrix of.</p>
@@ -447,7 +447,7 @@ indicating the starting offset and count, or <code>null</code> if invalid.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>matrix</strong>
+										<strong translate="no">matrix</strong>
 									</td>
 									<td class="description last">
 										<p>The target object that is used to store the method's result.</p>
@@ -468,7 +468,7 @@ indicating the starting offset and count, or <code>null</code> if invalid.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of an instance to get the visibility state of.</p>
@@ -490,7 +490,7 @@ previously deleted geometry, freeing up space to add new geometry.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this batched mesh.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="setColorAt" translate="no">.<a href="#setColorAt">setColorAt</a><span class="signature">( instanceId : <span class="param-type">number</span>, color : <span class="param-type"><a href="Color.html">Color</a></span> )</span><span class="type-signature"> : <a href="BatchedMesh.html">BatchedMesh</a></span> </h3>
+					<h3 class="name name-method" id="setColorAt" translate="no">.<a href="#setColorAt">setColorAt</a><span class="signature">( instanceId : <span class="param-type">number</span>, color : <span class="param-type"><a href="Color.html">Color</a> | <a href="Vector4.html">Vector4</a></span> )</span><span class="type-signature"> : <a href="BatchedMesh.html">BatchedMesh</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Sets the given color to the defined instance.</p>
@@ -499,7 +499,7 @@ previously deleted geometry, freeing up space to add new geometry.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of an instance to set the color of.</p>
@@ -507,10 +507,10 @@ previously deleted geometry, freeing up space to add new geometry.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>color</strong>
+										<strong translate="no">color</strong>
 									</td>
 									<td class="description last">
-										<p>The color to set the instance to.</p>
+										<p>The color to set the instance to. Use a <code>Vector4</code> to also define alpha.</p>
 									</td>
 								</tr>
 							</tbody>
@@ -529,7 +529,7 @@ sort and a camera. The objects in the list include a &quot;z&quot; field to perf
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>func</strong>
+										<strong translate="no">func</strong>
 									</td>
 									<td class="description last">
 										<p>The custom sort function.</p>
@@ -552,7 +552,7 @@ rendering that geometry.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>geometryId</strong>
+										<strong translate="no">geometryId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of the geometry that should be replaced with the given geometry.</p>
@@ -560,7 +560,7 @@ rendering that geometry.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>geometry</strong>
+										<strong translate="no">geometry</strong>
 									</td>
 									<td class="description last">
 										<p>The new geometry.</p>
@@ -581,7 +581,7 @@ rendering that geometry.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of the instance to set the geometry ID of.</p>
@@ -589,7 +589,7 @@ rendering that geometry.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>geometryId</strong>
+										<strong translate="no">geometryId</strong>
 									</td>
 									<td class="description last">
 										<p>The geometry ID to be use by the instance.</p>
@@ -612,7 +612,7 @@ end of the geometry attributes then an error is thrown.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>maxVertexCount</strong>
+										<strong translate="no">maxVertexCount</strong>
 									</td>
 									<td class="description last">
 										<p>The maximum number of vertices to be used by all unique geometries to resize to.</p>
@@ -620,7 +620,7 @@ end of the geometry attributes then an error is thrown.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>maxIndexCount</strong>
+										<strong translate="no">maxIndexCount</strong>
 									</td>
 									<td class="description last">
 										<p>The maximum number of indices to be used by all unique geometries to resize to.</p>
@@ -640,7 +640,7 @@ unused Ids at the end of the list then an error is thrown.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>maxInstanceCount</strong>
+										<strong translate="no">maxInstanceCount</strong>
 									</td>
 									<td class="description last">
 										<p>The max number of individual instances that can be added and rendered by the batch.</p>
@@ -659,7 +659,7 @@ Negatively scaled matrices are not supported.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The ID of an instance to set the matrix of.</p>
@@ -667,7 +667,7 @@ Negatively scaled matrices are not supported.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>matrix</strong>
+										<strong translate="no">matrix</strong>
 									</td>
 									<td class="description last">
 										<p>A 4x4 matrix representing the local transformation of a single instance.</p>
@@ -688,7 +688,7 @@ Negatively scaled matrices are not supported.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The id of the instance to set the visibility of.</p>
@@ -696,7 +696,7 @@ Negatively scaled matrices are not supported.</p>
 								</tr>
 								<tr>
 									<td class="name">
-										<strong>visible</strong>
+										<strong translate="no">visible</strong>
 									</td>
 									<td class="description last">
 										<p>Whether the instance is visible or not.</p>
@@ -717,7 +717,7 @@ Negatively scaled matrices are not supported.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>geometryId</strong>
+										<strong translate="no">geometryId</strong>
 									</td>
 									<td class="description last">
 										<p>The geometry to validate.</p>
@@ -735,7 +735,7 @@ Negatively scaled matrices are not supported.</p>
 							<tbody>
 								<tr>
 									<td class="name">
-										<strong>instanceId</strong>
+										<strong translate="no">instanceId</strong>
 									</td>
 									<td class="description last">
 										<p>The instance to validate.</p>

Некоторые файлы не были показаны из-за большого количества измененных файлов

粤ICP备19079148号