@plastic-software/three 0.178.0 → 0.180.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +950 -230
  3. package/build/three.core.js +754 -138
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +197 -96
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +99 -25
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +4586 -1499
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +4544 -1499
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +2 -3
  14. package/examples/jsm/capabilities/WebGPU.js +1 -1
  15. package/examples/jsm/controls/ArcballControls.js +7 -7
  16. package/examples/jsm/controls/DragControls.js +6 -56
  17. package/examples/jsm/controls/FirstPersonControls.js +2 -2
  18. package/examples/jsm/controls/PointerLockControls.js +0 -8
  19. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  20. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  21. package/examples/jsm/exporters/GLTFExporter.js +30 -22
  22. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  23. package/examples/jsm/exporters/PLYExporter.js +1 -1
  24. package/examples/jsm/exporters/USDZExporter.js +676 -299
  25. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  26. package/examples/jsm/interactive/HTMLMesh.js +5 -3
  27. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  28. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  29. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  30. package/examples/jsm/lines/Line2.js +3 -3
  31. package/examples/jsm/lines/LineGeometry.js +1 -1
  32. package/examples/jsm/lines/LineSegments2.js +2 -2
  33. package/examples/jsm/lines/Wireframe.js +2 -2
  34. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  35. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  36. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  37. package/examples/jsm/loaders/ColladaLoader.js +1 -1
  38. package/examples/jsm/loaders/EXRLoader.js +210 -22
  39. package/examples/jsm/loaders/FBXLoader.js +1 -1
  40. package/examples/jsm/loaders/GLTFLoader.js +9 -5
  41. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  42. package/examples/jsm/loaders/HDRLoader.js +486 -0
  43. package/examples/jsm/loaders/KTX2Loader.js +112 -32
  44. package/examples/jsm/loaders/MaterialXLoader.js +212 -30
  45. package/examples/jsm/loaders/RGBELoader.js +7 -473
  46. package/examples/jsm/loaders/TTFLoader.js +13 -1
  47. package/examples/jsm/loaders/USDLoader.js +219 -0
  48. package/examples/jsm/loaders/USDZLoader.js +4 -892
  49. package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
  50. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  51. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  52. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  53. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  54. package/examples/jsm/math/ColorSpaces.js +19 -1
  55. package/examples/jsm/math/ConvexHull.js +2 -2
  56. package/examples/jsm/math/Lut.js +2 -2
  57. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  58. package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
  59. package/examples/jsm/misc/Volume.js +1 -1
  60. package/examples/jsm/objects/LensflareMesh.js +3 -3
  61. package/examples/jsm/objects/SkyMesh.js +2 -2
  62. package/examples/jsm/physics/RapierPhysics.js +14 -5
  63. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  64. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  65. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  66. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  67. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  68. package/examples/jsm/transpiler/GLSLDecoder.js +23 -20
  69. package/examples/jsm/transpiler/TSLEncoder.js +2 -10
  70. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  71. package/examples/jsm/tsl/display/AnamorphicNode.js +27 -4
  72. package/examples/jsm/tsl/display/BloomNode.js +7 -6
  73. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  74. package/examples/jsm/tsl/display/DepthOfFieldNode.js +439 -90
  75. package/examples/jsm/tsl/display/GTAONode.js +8 -0
  76. package/examples/jsm/tsl/display/GaussianBlurNode.js +51 -41
  77. package/examples/jsm/tsl/display/OutlineNode.js +2 -2
  78. package/examples/jsm/tsl/display/SSRNode.js +180 -65
  79. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +181 -172
  80. package/examples/jsm/tsl/display/boxBlur.js +64 -0
  81. package/examples/jsm/tsl/display/hashBlur.js +15 -18
  82. package/examples/jsm/tsl/lighting/TiledLightsNode.js +1 -1
  83. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  84. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  85. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  86. package/package.json +1 -1
  87. package/src/Three.Core.js +2 -0
  88. package/src/Three.TSL.js +98 -24
  89. package/src/animation/AnimationClip.js +17 -2
  90. package/src/animation/KeyframeTrack.js +1 -1
  91. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  92. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  93. package/src/cameras/Camera.js +14 -0
  94. package/src/cameras/OrthographicCamera.js +1 -1
  95. package/src/cameras/PerspectiveCamera.js +1 -1
  96. package/src/constants.js +11 -3
  97. package/src/core/BufferGeometry.js +2 -2
  98. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  99. package/src/extras/PMREMGenerator.js +11 -0
  100. package/src/extras/TextureUtils.js +2 -1
  101. package/src/extras/lib/earcut.js +1 -1
  102. package/src/helpers/CameraHelper.js +41 -11
  103. package/src/helpers/SkeletonHelper.js +35 -6
  104. package/src/lights/LightShadow.js +21 -8
  105. package/src/lights/PointLightShadow.js +1 -1
  106. package/src/lights/webgpu/ProjectorLight.js +1 -1
  107. package/src/loaders/FileLoader.js +25 -2
  108. package/src/loaders/ImageBitmapLoader.js +23 -0
  109. package/src/loaders/Loader.js +14 -0
  110. package/src/loaders/LoadingManager.js +23 -0
  111. package/src/materials/Material.js +12 -0
  112. package/src/materials/MeshBasicMaterial.js +1 -1
  113. package/src/materials/MeshDistanceMaterial.js +1 -1
  114. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  115. package/src/materials/nodes/NodeMaterial.js +1 -1
  116. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  117. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  118. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -2
  119. package/src/math/ColorManagement.js +7 -1
  120. package/src/math/Frustum.js +19 -8
  121. package/src/math/FrustumArray.js +10 -5
  122. package/src/math/Line3.js +129 -2
  123. package/src/math/Matrix4.js +48 -27
  124. package/src/math/Spherical.js +2 -2
  125. package/src/nodes/Nodes.js +4 -0
  126. package/src/nodes/TSL.js +4 -0
  127. package/src/nodes/accessors/BufferNode.js +1 -1
  128. package/src/nodes/accessors/Camera.js +142 -16
  129. package/src/nodes/accessors/ClippingNode.js +6 -5
  130. package/src/nodes/accessors/CubeTextureNode.js +2 -2
  131. package/src/nodes/accessors/InstanceNode.js +3 -1
  132. package/src/nodes/accessors/Normal.js +11 -11
  133. package/src/nodes/accessors/Object3DNode.js +1 -1
  134. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  135. package/src/nodes/accessors/ReferenceNode.js +19 -4
  136. package/src/nodes/accessors/SceneNode.js +1 -1
  137. package/src/nodes/accessors/StorageTextureNode.js +1 -1
  138. package/src/nodes/accessors/Texture3DNode.js +13 -0
  139. package/src/nodes/accessors/TextureNode.js +83 -19
  140. package/src/nodes/code/FunctionCallNode.js +19 -0
  141. package/src/nodes/code/FunctionNode.js +23 -0
  142. package/src/nodes/core/ArrayNode.js +12 -0
  143. package/src/nodes/core/AssignNode.js +6 -2
  144. package/src/nodes/core/ContextNode.js +44 -1
  145. package/src/nodes/core/Node.js +30 -22
  146. package/src/nodes/core/NodeBuilder.js +71 -32
  147. package/src/nodes/core/NodeFrame.js +1 -1
  148. package/src/nodes/core/NodeUniform.js +1 -1
  149. package/src/nodes/core/NodeUtils.js +5 -3
  150. package/src/nodes/core/StackNode.js +71 -4
  151. package/src/nodes/core/StructNode.js +5 -5
  152. package/src/nodes/core/StructTypeNode.js +1 -0
  153. package/src/nodes/core/SubBuildNode.js +2 -2
  154. package/src/nodes/core/UniformNode.js +79 -14
  155. package/src/nodes/core/VarNode.js +83 -15
  156. package/src/nodes/display/FrontFacingNode.js +4 -8
  157. package/src/nodes/display/PassNode.js +148 -2
  158. package/src/nodes/display/ScreenNode.js +42 -13
  159. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  160. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  161. package/src/nodes/display/ViewportTextureNode.js +94 -4
  162. package/src/nodes/functions/PhysicalLightingModel.js +2 -2
  163. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  164. package/src/nodes/gpgpu/ComputeNode.js +67 -23
  165. package/src/nodes/gpgpu/SubgroupFunctionNode.js +430 -0
  166. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  167. package/src/nodes/lighting/LightsNode.js +1 -1
  168. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  169. package/src/nodes/lighting/ShadowFilterNode.js +1 -1
  170. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  171. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  172. package/src/nodes/math/BitcastNode.js +156 -0
  173. package/src/nodes/math/ConditionalNode.js +19 -3
  174. package/src/nodes/math/MathNode.js +72 -60
  175. package/src/nodes/math/OperatorNode.js +26 -25
  176. package/src/nodes/tsl/TSLCore.js +477 -142
  177. package/src/nodes/utils/DebugNode.js +1 -1
  178. package/src/nodes/utils/EventNode.js +83 -0
  179. package/src/nodes/utils/JoinNode.js +3 -1
  180. package/src/nodes/utils/MemberNode.js +58 -7
  181. package/src/nodes/utils/RTTNode.js +10 -1
  182. package/src/nodes/utils/ReflectorNode.js +51 -7
  183. package/src/nodes/utils/SampleNode.js +12 -2
  184. package/src/nodes/utils/SplitNode.js +11 -0
  185. package/src/nodes/utils/Timer.js +0 -47
  186. package/src/objects/BatchedMesh.js +6 -4
  187. package/src/objects/LOD.js +1 -1
  188. package/src/objects/Sprite.js +2 -2
  189. package/src/renderers/WebGLRenderer.js +21 -31
  190. package/src/renderers/common/Attributes.js +1 -1
  191. package/src/renderers/common/Backend.js +19 -1
  192. package/src/renderers/common/Bindings.js +21 -18
  193. package/src/renderers/common/ChainMap.js +1 -1
  194. package/src/renderers/common/Color4.js +2 -2
  195. package/src/renderers/common/DataMap.js +1 -1
  196. package/src/renderers/common/Pipelines.js +1 -1
  197. package/src/renderers/common/PostProcessing.js +60 -5
  198. package/src/renderers/common/RenderContext.js +2 -2
  199. package/src/renderers/common/RenderObject.js +14 -2
  200. package/src/renderers/common/Renderer.js +55 -32
  201. package/src/renderers/common/SampledTexture.js +4 -72
  202. package/src/renderers/common/Sampler.js +91 -0
  203. package/src/renderers/common/Storage3DTexture.js +21 -0
  204. package/src/renderers/common/StorageArrayTexture.js +21 -0
  205. package/src/renderers/common/StorageTexture.js +19 -0
  206. package/src/renderers/common/Textures.js +52 -14
  207. package/src/renderers/common/TimestampQueryPool.js +3 -3
  208. package/src/renderers/common/XRManager.js +51 -17
  209. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  210. package/src/renderers/common/nodes/NodeLibrary.js +5 -5
  211. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  212. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  213. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  214. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  215. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  216. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  217. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  218. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  219. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  220. package/src/renderers/webgl/WebGLProgram.js +24 -18
  221. package/src/renderers/webgl/WebGLPrograms.js +4 -4
  222. package/src/renderers/webgl/WebGLShadowMap.js +11 -1
  223. package/src/renderers/webgl/WebGLTextures.js +20 -7
  224. package/src/renderers/webgl/WebGLUtils.js +3 -2
  225. package/src/renderers/webgl-fallback/WebGLBackend.js +207 -146
  226. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +112 -19
  227. package/src/renderers/webgl-fallback/utils/WebGLState.js +1 -1
  228. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -3
  229. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -10
  230. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  231. package/src/renderers/webgpu/WebGPUBackend.js +87 -44
  232. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +169 -99
  233. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +35 -31
  234. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -2
  235. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +10 -19
  236. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +120 -84
  237. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +3 -3
  238. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  239. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  240. package/src/renderers/webxr/WebXRManager.js +86 -11
  241. package/src/textures/ExternalTexture.js +56 -0
  242. package/src/textures/FramebufferTexture.js +2 -2
  243. package/src/textures/Source.js +12 -2
  244. package/src/textures/VideoTexture.js +27 -2
  245. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -77,6 +77,6 @@ export default DebugNode;
77
77
  * @param {?Function} [callback=null] - Optional callback function to handle the debug output.
78
78
  * @returns {DebugNode}
79
79
  */
80
- export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) );
80
+ export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) ).toStack();
81
81
 
82
82
  addMethodChaining( 'debug', debug );
@@ -0,0 +1,83 @@
1
+ import Node from '../core/Node.js';
2
+ import { NodeUpdateType } from '../core/constants.js';
3
+ import { nodeObject } from '../tsl/TSLCore.js';
4
+
5
+ /**
6
+ * EventNode is a node that executes a callback during specific update phases.
7
+ *
8
+ * @augments Node
9
+ */
10
+ class EventNode extends Node {
11
+
12
+ static get type() {
13
+
14
+ return 'EventNode';
15
+
16
+ }
17
+
18
+ /**
19
+ * Creates an EventNode.
20
+ *
21
+ * @param {string} eventType - The type of event
22
+ * @param {Function} callback - The callback to execute on update.
23
+ */
24
+ constructor( eventType, callback ) {
25
+
26
+ super( 'void' );
27
+
28
+ this.eventType = eventType;
29
+ this.callback = callback;
30
+
31
+ if ( eventType === EventNode.OBJECT ) {
32
+
33
+ this.updateType = NodeUpdateType.OBJECT;
34
+
35
+ } else if ( eventType === EventNode.MATERIAL ) {
36
+
37
+ this.updateType = NodeUpdateType.RENDER;
38
+
39
+ }
40
+
41
+ }
42
+
43
+ update( frame ) {
44
+
45
+ this.callback( frame );
46
+
47
+ }
48
+
49
+ }
50
+
51
+ EventNode.OBJECT = 'object';
52
+ EventNode.MATERIAL = 'material';
53
+
54
+ export default EventNode;
55
+
56
+ /**
57
+ * Helper to create an EventNode and add it to the stack.
58
+ *
59
+ * @param {string} type - The event type.
60
+ * @param {Function} callback - The callback function.
61
+ * @returns {EventNode}
62
+ */
63
+ const createEvent = ( type, callback ) => nodeObject( new EventNode( type, callback ) ).toStack();
64
+
65
+ /**
66
+ * Creates an event that triggers a function every time an object (Mesh|Sprite) is rendered.
67
+ *
68
+ * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
69
+ *
70
+ * @param {Function} callback - The callback function.
71
+ * @returns {EventNode}
72
+ */
73
+ export const OnObjectUpdate = ( callback ) => createEvent( EventNode.OBJECT, callback );
74
+
75
+ /**
76
+ * Creates an event that triggers a function when the first object that uses the material is rendered.
77
+ *
78
+ * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
79
+ *
80
+ * @param {Function} callback - The callback function.
81
+ * @returns {EventNode}
82
+ */
83
+ export const OnMaterialUpdate = ( callback ) => createEvent( EventNode.MATERIAL, callback );
@@ -95,7 +95,9 @@ class JoinNode extends TempNode {
95
95
 
96
96
  if ( inputPrimitiveType !== primitiveType ) {
97
97
 
98
- inputSnippet = builder.format( inputSnippet, inputPrimitiveType, primitiveType );
98
+ const targetType = builder.getTypeFromLength( inputTypeLength, primitiveType );
99
+
100
+ inputSnippet = builder.format( inputSnippet, inputType, targetType );
99
101
 
100
102
  }
101
103
 
@@ -15,21 +15,21 @@ class MemberNode extends Node {
15
15
  }
16
16
 
17
17
  /**
18
- * Constructs an array element node.
18
+ * Constructs a member node.
19
19
  *
20
- * @param {Node} node - The array-like node.
20
+ * @param {Node} structNode - The struct node.
21
21
  * @param {string} property - The property name.
22
22
  */
23
- constructor( node, property ) {
23
+ constructor( structNode, property ) {
24
24
 
25
25
  super();
26
26
 
27
27
  /**
28
- * The array-like node.
28
+ * The struct node.
29
29
  *
30
30
  * @type {Node}
31
31
  */
32
- this.node = node;
32
+ this.structNode = structNode;
33
33
 
34
34
  /**
35
35
  * The property name.
@@ -49,15 +49,66 @@ class MemberNode extends Node {
49
49
 
50
50
  }
51
51
 
52
+ hasMember( builder ) {
53
+
54
+ if ( this.structNode.isMemberNode ) {
55
+
56
+ if ( this.structNode.hasMember( builder ) === false ) {
57
+
58
+ return false;
59
+
60
+ }
61
+
62
+ }
63
+
64
+ return this.structNode.getMemberType( builder, this.property ) !== 'void';
65
+
66
+ }
67
+
52
68
  getNodeType( builder ) {
53
69
 
54
- return this.node.getMemberType( builder, this.property );
70
+ if ( this.hasMember( builder ) === false ) {
71
+
72
+ // default type if member does not exist
73
+
74
+ return 'float';
75
+
76
+ }
77
+
78
+ return this.structNode.getMemberType( builder, this.property );
79
+
80
+ }
81
+
82
+ getMemberType( builder, name ) {
83
+
84
+ if ( this.hasMember( builder ) === false ) {
85
+
86
+ // default type if member does not exist
87
+
88
+ return 'float';
89
+
90
+ }
91
+
92
+ const type = this.getNodeType( builder );
93
+ const struct = builder.getStructTypeNode( type );
94
+
95
+ return struct.getMemberType( builder, name );
55
96
 
56
97
  }
57
98
 
58
99
  generate( builder ) {
59
100
 
60
- const propertyName = this.node.build( builder );
101
+ if ( this.hasMember( builder ) === false ) {
102
+
103
+ console.warn( `THREE.TSL: Member "${ this.property }" does not exist in struct.` );
104
+
105
+ const type = this.getNodeType( builder );
106
+
107
+ return builder.generateConst( type );
108
+
109
+ }
110
+
111
+ const propertyName = this.structNode.build( builder );
61
112
 
62
113
  return propertyName + '.' + this.property;
63
114
 
@@ -41,6 +41,15 @@ class RTTNode extends TextureNode {
41
41
 
42
42
  super( renderTarget.texture, uv() );
43
43
 
44
+ /**
45
+ * This flag can be used for type testing.
46
+ *
47
+ * @type {boolean}
48
+ * @readonly
49
+ * @default true
50
+ */
51
+ this.isRTTNode = true;
52
+
44
53
  /**
45
54
  * The node to render a texture with.
46
55
  *
@@ -262,7 +271,7 @@ export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( n
262
271
  */
263
272
  export const convertToTexture = ( node, ...params ) => {
264
273
 
265
- if ( node.isTextureNode ) return node;
274
+ if ( node.isSampleNode || node.isTextureNode ) return node;
266
275
  if ( node.isPassNode ) return node.getTextureNode();
267
276
 
268
277
  return rtt( node, ...params );
@@ -13,6 +13,7 @@ import { Vector4 } from '../../math/Vector4.js';
13
13
  import { Matrix4 } from '../../math/Matrix4.js';
14
14
  import { RenderTarget } from '../../core/RenderTarget.js';
15
15
  import { DepthTexture } from '../../textures/DepthTexture.js';
16
+ import { warnOnce } from '../../utils.js';
16
17
 
17
18
  const _reflectorPlane = new Plane();
18
19
  const _normal = new Vector3();
@@ -61,10 +62,11 @@ class ReflectorNode extends TextureNode {
61
62
  *
62
63
  * @param {Object} [parameters={}] - An object holding configuration parameters.
63
64
  * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
64
- * @param {number} [parameters.resolution=1] - The resolution scale.
65
+ * @param {number} [parameters.resolutionScale=1] - The resolution scale.
65
66
  * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
66
67
  * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
67
68
  * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
69
+ * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
68
70
  * @param {TextureNode} [parameters.defaultTexture] - The default texture node.
69
71
  * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
70
72
  */
@@ -204,10 +206,11 @@ class ReflectorBaseNode extends Node {
204
206
  * @param {TextureNode} textureNode - Represents the rendered reflections as a texture node.
205
207
  * @param {Object} [parameters={}] - An object holding configuration parameters.
206
208
  * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
207
- * @param {number} [parameters.resolution=1] - The resolution scale.
209
+ * @param {number} [parameters.resolutionScale=1] - The resolution scale.
208
210
  * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
209
211
  * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
210
212
  * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
213
+ * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
211
214
  */
212
215
  constructor( textureNode, parameters = {} ) {
213
216
 
@@ -215,10 +218,11 @@ class ReflectorBaseNode extends Node {
215
218
 
216
219
  const {
217
220
  target = new Object3D(),
218
- resolution = 1,
221
+ resolutionScale = 1,
219
222
  generateMipmaps = false,
220
223
  bounces = true,
221
- depth = false
224
+ depth = false,
225
+ samples = 0
222
226
  } = parameters;
223
227
 
224
228
  /**
@@ -242,7 +246,15 @@ class ReflectorBaseNode extends Node {
242
246
  * @type {number}
243
247
  * @default {1}
244
248
  */
245
- this.resolution = resolution;
249
+ this.resolutionScale = resolutionScale;
250
+
251
+ if ( parameters.resolution !== undefined ) {
252
+
253
+ warnOnce( 'THREE.ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".' ); // @deprecated r180
254
+
255
+ this.resolutionScale = parameters.resolution;
256
+
257
+ }
246
258
 
247
259
  /**
248
260
  * Whether mipmaps should be generated or not.
@@ -268,6 +280,14 @@ class ReflectorBaseNode extends Node {
268
280
  */
269
281
  this.depth = depth;
270
282
 
283
+ /**
284
+ * The number of anti-aliasing samples for the render-target
285
+ *
286
+ * @type {number}
287
+ * @default {0}
288
+ */
289
+ this.samples = samples;
290
+
271
291
  /**
272
292
  * The `updateBeforeType` is set to `NodeUpdateType.RENDER` when {@link ReflectorBaseNode#bounces}
273
293
  * is `true`. Otherwise it's `NodeUpdateType.FRAME`.
@@ -321,7 +341,7 @@ class ReflectorBaseNode extends Node {
321
341
  */
322
342
  _updateResolution( renderTarget, renderer ) {
323
343
 
324
- const resolution = this.resolution;
344
+ const resolution = this.resolutionScale;
325
345
 
326
346
  renderer.getDrawingBufferSize( _size );
327
347
 
@@ -388,7 +408,7 @@ class ReflectorBaseNode extends Node {
388
408
 
389
409
  if ( renderTarget === undefined ) {
390
410
 
391
- renderTarget = new RenderTarget( 0, 0, { type: HalfFloatType } );
411
+ renderTarget = new RenderTarget( 0, 0, { type: HalfFloatType, samples: this.samples } );
392
412
 
393
413
  if ( this.generateMipmaps === true ) {
394
414
 
@@ -557,6 +577,29 @@ class ReflectorBaseNode extends Node {
557
577
 
558
578
  }
559
579
 
580
+ /**
581
+ * The resolution scale.
582
+ *
583
+ * @deprecated
584
+ * @type {number}
585
+ * @default {1}
586
+ */
587
+ get resolution() {
588
+
589
+ warnOnce( 'THREE.ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
590
+
591
+ return this.resolutionScale;
592
+
593
+ }
594
+
595
+ set resolution( value ) {
596
+
597
+ warnOnce( 'THREE.ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
598
+
599
+ this.resolutionScale = value;
600
+
601
+ }
602
+
560
603
  }
561
604
 
562
605
  /**
@@ -570,6 +613,7 @@ class ReflectorBaseNode extends Node {
570
613
  * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
571
614
  * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
572
615
  * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
616
+ * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
573
617
  * @param {TextureNode} [parameters.defaultTexture] - The default texture node.
574
618
  * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
575
619
  * @returns {ReflectorNode}
@@ -26,13 +26,22 @@ class SampleNode extends Node {
26
26
  * Creates an instance of SampleNode.
27
27
  *
28
28
  * @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
29
+ * @param {?Node<vec2>} [uvNode=null] - The UV node to be used in the texture sampling.
29
30
  */
30
- constructor( callback ) {
31
+ constructor( callback, uvNode = null ) {
31
32
 
32
33
  super();
33
34
 
34
35
  this.callback = callback;
35
36
 
37
+ /**
38
+ * Represents the texture coordinates.
39
+ *
40
+ * @type {?Node<vec2|vec3>}
41
+ * @default null
42
+ */
43
+ this.uvNode = uvNode;
44
+
36
45
  /**
37
46
  * This flag can be used for type testing.
38
47
  *
@@ -76,6 +85,7 @@ export default SampleNode;
76
85
  *
77
86
  * @function
78
87
  * @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
88
+ * @param {?Node<vec2>} [uv=null] - The UV node to be used in the texture sampling.
79
89
  * @returns {SampleNode} The created SampleNode instance wrapped as a node object.
80
90
  */
81
- export const sample = ( callback ) => nodeObject( new SampleNode( callback ) );
91
+ export const sample = ( callback, uv = null ) => nodeObject( new SampleNode( callback, nodeObject( uv ) ) );
@@ -100,6 +100,17 @@ class SplitNode extends Node {
100
100
 
101
101
  }
102
102
 
103
+ /**
104
+ * Returns the scope of the node.
105
+ *
106
+ * @return {Node} The scope of the node.
107
+ */
108
+ getScope() {
109
+
110
+ return this.node.getScope();
111
+
112
+ }
113
+
103
114
  generate( builder, output ) {
104
115
 
105
116
  const node = this.node;
@@ -24,50 +24,3 @@ export const deltaTime = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRe
24
24
  * @type {UniformNode<uint>}
25
25
  */
26
26
  export const frameId = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.frameId );
27
-
28
- // Deprecated
29
-
30
- /**
31
- * @tsl
32
- * @function
33
- * @deprecated since r170. Use {@link time} instead.
34
- *
35
- * @param {number} [timeScale=1] - The time scale.
36
- * @returns {UniformNode<float>}
37
- */
38
- export const timerLocal = ( timeScale = 1 ) => { // @deprecated, r170
39
-
40
- console.warn( 'TSL: timerLocal() is deprecated. Use "time" instead.' );
41
- return time.mul( timeScale );
42
-
43
- };
44
-
45
- /**
46
- * @tsl
47
- * @function
48
- * @deprecated since r170. Use {@link time} instead.
49
- *
50
- * @param {number} [timeScale=1] - The time scale.
51
- * @returns {UniformNode<float>}
52
- */
53
- export const timerGlobal = ( timeScale = 1 ) => { // @deprecated, r170
54
-
55
- console.warn( 'TSL: timerGlobal() is deprecated. Use "time" instead.' );
56
- return time.mul( timeScale );
57
-
58
- };
59
-
60
- /**
61
- * @tsl
62
- * @function
63
- * @deprecated since r170. Use {@link deltaTime} instead.
64
- *
65
- * @param {number} [timeScale=1] - The time scale.
66
- * @returns {UniformNode<float>}
67
- */
68
- export const timerDelta = ( timeScale = 1 ) => { // @deprecated, r170
69
-
70
- console.warn( 'TSL: timerDelta() is deprecated. Use "deltaTime" instead.' );
71
- return deltaTime.mul( timeScale );
72
-
73
- };
@@ -971,7 +971,7 @@ class BatchedMesh extends Mesh {
971
971
  *
972
972
  * @param {number} geometryId - The ID of the geometry to return the bounding box for.
973
973
  * @param {Box3} target - The target object that is used to store the method's result.
974
- * @return {Box3|null} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.
974
+ * @return {?Box3} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.
975
975
  */
976
976
  getBoundingBoxAt( geometryId, target ) {
977
977
 
@@ -1016,7 +1016,7 @@ class BatchedMesh extends Mesh {
1016
1016
  *
1017
1017
  * @param {number} geometryId - The ID of the geometry to return the bounding sphere for.
1018
1018
  * @param {Sphere} target - The target object that is used to store the method's result.
1019
- * @return {Sphere|null} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.
1019
+ * @return {?Sphere} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.
1020
1020
  */
1021
1021
  getBoundingSphereAt( geometryId, target ) {
1022
1022
 
@@ -1251,7 +1251,7 @@ class BatchedMesh extends Mesh {
1251
1251
  const availableInstanceIds = this._availableInstanceIds;
1252
1252
  const instanceInfo = this._instanceInfo;
1253
1253
  availableInstanceIds.sort( ascIdSort );
1254
- while ( availableInstanceIds[ availableInstanceIds.length - 1 ] === instanceInfo.length ) {
1254
+ while ( availableInstanceIds[ availableInstanceIds.length - 1 ] === instanceInfo.length - 1 ) {
1255
1255
 
1256
1256
  instanceInfo.pop();
1257
1257
  availableInstanceIds.pop();
@@ -1529,9 +1529,11 @@ class BatchedMesh extends Mesh {
1529
1529
  _matrix
1530
1530
  .multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )
1531
1531
  .multiply( this.matrixWorld );
1532
+
1532
1533
  _frustum.setFromProjectionMatrix(
1533
1534
  _matrix,
1534
- renderer.coordinateSystem
1535
+ camera.coordinateSystem,
1536
+ camera.reversedDepth
1535
1537
  );
1536
1538
 
1537
1539
  }
@@ -183,7 +183,7 @@ class LOD extends Object3D {
183
183
  * the given distance.
184
184
  *
185
185
  * @param {number} distance - The LOD distance.
186
- * @return {Object3D|null} The found 3D object. `null` if no 3D object has been found.
186
+ * @return {?Object3D} The found 3D object. `null` if no 3D object has been found.
187
187
  */
188
188
  getObjectForDistance( distance ) {
189
189
 
@@ -48,7 +48,7 @@ class Sprite extends Object3D {
48
48
  /**
49
49
  * Constructs a new sprite.
50
50
  *
51
- * @param {SpriteMaterial} [material] - The sprite material.
51
+ * @param {(SpriteMaterial|SpriteNodeMaterial)} [material] - The sprite material.
52
52
  */
53
53
  constructor( material = new SpriteMaterial() ) {
54
54
 
@@ -94,7 +94,7 @@ class Sprite extends Object3D {
94
94
  /**
95
95
  * The sprite material.
96
96
  *
97
- * @type {SpriteMaterial}
97
+ * @type {(SpriteMaterial|SpriteNodeMaterial)}
98
98
  */
99
99
  this.material = material;
100
100
 
@@ -52,7 +52,7 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
52
52
  import { WebXRManager } from './webxr/WebXRManager.js';
53
53
  import { WebGLMaterials } from './webgl/WebGLMaterials.js';
54
54
  import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
55
- import { createCanvasElement, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix, warnOnce } from '../utils.js';
55
+ import { createCanvasElement, probeAsync, warnOnce } from '../utils.js';
56
56
  import { ColorManagement } from '../math/ColorManagement.js';
57
57
 
58
58
  /**
@@ -80,7 +80,7 @@ class WebGLRenderer {
80
80
  preserveDrawingBuffer = false,
81
81
  powerPreference = 'default',
82
82
  failIfMajorPerformanceCaveat = false,
83
- reverseDepthBuffer = false,
83
+ reversedDepthBuffer = false,
84
84
  } = parameters;
85
85
 
86
86
  /**
@@ -313,7 +313,6 @@ class WebGLRenderer {
313
313
 
314
314
  // camera matrices cache
315
315
 
316
- const _currentProjectionMatrix = new Matrix4();
317
316
  const _projScreenMatrix = new Matrix4();
318
317
 
319
318
  const _vector3 = new Vector3();
@@ -409,7 +408,7 @@ class WebGLRenderer {
409
408
 
410
409
  state = new WebGLState( _gl, extensions );
411
410
 
412
- if ( capabilities.reverseDepthBuffer && reverseDepthBuffer ) {
411
+ if ( capabilities.reversedDepthBuffer && reversedDepthBuffer ) {
413
412
 
414
413
  state.buffers.depth.setReversed( true );
415
414
 
@@ -1557,7 +1556,7 @@ class WebGLRenderer {
1557
1556
  renderStateStack.push( currentRenderState );
1558
1557
 
1559
1558
  _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1560
- _frustum.setFromProjectionMatrix( _projScreenMatrix );
1559
+ _frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
1561
1560
 
1562
1561
  _localClippingEnabled = this.localClippingEnabled;
1563
1562
  _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
@@ -2388,23 +2387,17 @@ class WebGLRenderer {
2388
2387
 
2389
2388
  // common camera uniforms
2390
2389
 
2391
- const reverseDepthBuffer = state.buffers.depth.getReversed();
2390
+ const reversedDepthBuffer = state.buffers.depth.getReversed();
2392
2391
 
2393
- if ( reverseDepthBuffer ) {
2392
+ if ( reversedDepthBuffer && camera.reversedDepth !== true ) {
2394
2393
 
2395
- _currentProjectionMatrix.copy( camera.projectionMatrix );
2396
-
2397
- toNormalizedProjectionMatrix( _currentProjectionMatrix );
2398
- toReversedProjectionMatrix( _currentProjectionMatrix );
2399
-
2400
- p_uniforms.setValue( _gl, 'projectionMatrix', _currentProjectionMatrix );
2401
-
2402
- } else {
2403
-
2404
- p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
2394
+ camera._reversedDepth = true;
2395
+ camera.updateProjectionMatrix();
2405
2396
 
2406
2397
  }
2407
2398
 
2399
+ p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
2400
+
2408
2401
  p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
2409
2402
 
2410
2403
  const uCamPos = p_uniforms.map.cameraPosition;
@@ -2834,9 +2827,15 @@ class WebGLRenderer {
2834
2827
 
2835
2828
  } else if ( isRenderTarget3D ) {
2836
2829
 
2837
- const textureProperties = properties.get( renderTarget.texture );
2838
2830
  const layer = activeCubeFace;
2839
- _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel, layer );
2831
+
2832
+ for ( let i = 0; i < renderTarget.textures.length; i ++ ) {
2833
+
2834
+ const textureProperties = properties.get( renderTarget.textures[ i ] );
2835
+
2836
+ _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, textureProperties.__webglTexture, activeMipmapLevel, layer );
2837
+
2838
+ }
2840
2839
 
2841
2840
  } else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {
2842
2841
 
@@ -2988,7 +2987,7 @@ class WebGLRenderer {
2988
2987
  _gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
2989
2988
  _gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
2990
2989
 
2991
- // when using MRT, select the corect color buffer for the subsequent read command
2990
+ // when using MRT, select the correct color buffer for the subsequent read command
2992
2991
 
2993
2992
  if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
2994
2993
 
@@ -3315,15 +3314,6 @@ class WebGLRenderer {
3315
3314
 
3316
3315
  };
3317
3316
 
3318
- this.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
3319
-
3320
- // @deprecated, r170
3321
- warnOnce( 'WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.' );
3322
-
3323
- return this.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
3324
-
3325
- };
3326
-
3327
3317
  /**
3328
3318
  * Initializes the given WebGLRenderTarget memory. Useful for initializing a render target so data
3329
3319
  * can be copied into it using {@link WebGLRenderer#copyTextureToTexture} before it has been
@@ -3453,7 +3443,7 @@ class WebGLRenderer {
3453
3443
  * @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
3454
3444
  * @property {boolean} [logarithmicDepthBuffer=false] Whether to use a logarithmic depth buffer. It may be necessary to use this if dealing with huge differences in scale in a single scene.
3455
3445
  * Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
3456
- * @property {boolean} [reverseDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3446
+ * @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3457
3447
  * This is a more faster and accurate version than logarithmic depth buffer.
3458
3448
  **/
3459
3449
 
@@ -3474,7 +3464,7 @@ class WebGLRenderer {
3474
3464
  * @property {number} maxVertexTextures - The number of textures that can be used in a vertex shader.
3475
3465
  * @property {number} maxVertexUniforms - The maximum number of uniforms that can be used in a vertex shader.
3476
3466
  * @property {string} precision - The shader precision currently being used by the renderer.
3477
- * @property {boolean} reverseDepthBuffer - `true` if `reverseDepthBuffer` was set to `true` in the constructor
3467
+ * @property {boolean} reversedDepthBuffer - `true` if `reversedDepthBuffer` was set to `true` in the constructor
3478
3468
  * and the rendering context supports `EXT_clip_control`.
3479
3469
  * @property {boolean} vertexTextures - `true` if vertex textures can be used.
3480
3470
  **/
@@ -33,7 +33,7 @@ class Attributes extends DataMap {
33
33
  * Deletes the data for the given attribute.
34
34
  *
35
35
  * @param {BufferAttribute} attribute - The attribute.
36
- * @return {Object|null} The deleted attribute data.
36
+ * @return {?Object} The deleted attribute data.
37
37
  */
38
38
  delete( attribute ) {
39
39