@plastic-software/three 0.179.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 (173) hide show
  1. package/build/three.cjs +166 -106
  2. package/build/three.core.js +112 -20
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +55 -89
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +30 -5
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2896 -1048
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2896 -1048
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/controls/ArcballControls.js +7 -7
  14. package/examples/jsm/controls/DragControls.js +6 -56
  15. package/examples/jsm/controls/FirstPersonControls.js +2 -2
  16. package/examples/jsm/controls/PointerLockControls.js +0 -8
  17. package/examples/jsm/exporters/GLTFExporter.js +30 -22
  18. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  19. package/examples/jsm/exporters/PLYExporter.js +1 -1
  20. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  21. package/examples/jsm/lines/Line2.js +3 -3
  22. package/examples/jsm/lines/LineGeometry.js +1 -1
  23. package/examples/jsm/lines/LineSegments2.js +2 -2
  24. package/examples/jsm/lines/Wireframe.js +2 -2
  25. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  26. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  27. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  28. package/examples/jsm/loaders/ColladaLoader.js +1 -1
  29. package/examples/jsm/loaders/EXRLoader.js +5 -5
  30. package/examples/jsm/loaders/GLTFLoader.js +9 -5
  31. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  32. package/examples/jsm/loaders/HDRLoader.js +486 -0
  33. package/examples/jsm/loaders/KTX2Loader.js +112 -32
  34. package/examples/jsm/loaders/RGBELoader.js +7 -473
  35. package/examples/jsm/loaders/TTFLoader.js +4 -4
  36. package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
  37. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  38. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  39. package/examples/jsm/math/ColorSpaces.js +19 -1
  40. package/examples/jsm/math/ConvexHull.js +2 -2
  41. package/examples/jsm/math/Lut.js +2 -2
  42. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  43. package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
  44. package/examples/jsm/misc/Volume.js +1 -1
  45. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  46. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  47. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  48. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  49. package/examples/jsm/transpiler/TSLEncoder.js +2 -10
  50. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  51. package/examples/jsm/tsl/display/AnamorphicNode.js +27 -4
  52. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  53. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  54. package/examples/jsm/tsl/display/DepthOfFieldNode.js +439 -90
  55. package/examples/jsm/tsl/display/GTAONode.js +8 -0
  56. package/examples/jsm/tsl/display/GaussianBlurNode.js +47 -35
  57. package/examples/jsm/tsl/display/OutlineNode.js +2 -2
  58. package/examples/jsm/tsl/display/SSRNode.js +180 -65
  59. package/examples/jsm/tsl/display/TRAANode.js +1 -1
  60. package/examples/jsm/tsl/display/boxBlur.js +64 -0
  61. package/examples/jsm/tsl/display/hashBlur.js +15 -18
  62. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  63. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  64. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  65. package/package.json +1 -1
  66. package/src/Three.Core.js +1 -0
  67. package/src/Three.TSL.js +29 -4
  68. package/src/animation/AnimationClip.js +17 -2
  69. package/src/constants.js +11 -3
  70. package/src/core/BufferGeometry.js +2 -2
  71. package/src/extras/TextureUtils.js +2 -1
  72. package/src/extras/lib/earcut.js +1 -1
  73. package/src/lights/webgpu/ProjectorLight.js +1 -1
  74. package/src/materials/Material.js +12 -0
  75. package/src/materials/MeshDistanceMaterial.js +1 -1
  76. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  77. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  78. package/src/materials/nodes/manager/NodeMaterialObserver.js +1 -1
  79. package/src/math/ColorManagement.js +7 -1
  80. package/src/nodes/Nodes.js +3 -0
  81. package/src/nodes/TSL.js +3 -0
  82. package/src/nodes/accessors/BufferNode.js +1 -1
  83. package/src/nodes/accessors/Camera.js +133 -7
  84. package/src/nodes/accessors/ClippingNode.js +6 -5
  85. package/src/nodes/accessors/CubeTextureNode.js +2 -2
  86. package/src/nodes/accessors/InstanceNode.js +3 -1
  87. package/src/nodes/accessors/Object3DNode.js +1 -1
  88. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  89. package/src/nodes/accessors/ReferenceNode.js +1 -1
  90. package/src/nodes/accessors/Texture3DNode.js +13 -0
  91. package/src/nodes/accessors/TextureNode.js +71 -19
  92. package/src/nodes/code/FunctionCallNode.js +19 -0
  93. package/src/nodes/code/FunctionNode.js +23 -0
  94. package/src/nodes/core/AssignNode.js +4 -3
  95. package/src/nodes/core/ContextNode.js +24 -0
  96. package/src/nodes/core/Node.js +16 -20
  97. package/src/nodes/core/NodeBuilder.js +48 -14
  98. package/src/nodes/core/NodeFrame.js +1 -1
  99. package/src/nodes/core/NodeUniform.js +1 -1
  100. package/src/nodes/core/NodeUtils.js +1 -2
  101. package/src/nodes/core/StackNode.js +29 -4
  102. package/src/nodes/core/StructNode.js +5 -5
  103. package/src/nodes/core/StructTypeNode.js +1 -0
  104. package/src/nodes/core/SubBuildNode.js +2 -2
  105. package/src/nodes/core/UniformNode.js +16 -9
  106. package/src/nodes/core/VarNode.js +0 -21
  107. package/src/nodes/display/FrontFacingNode.js +4 -8
  108. package/src/nodes/display/PassNode.js +1 -1
  109. package/src/nodes/display/ScreenNode.js +42 -13
  110. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  111. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  112. package/src/nodes/display/ViewportTextureNode.js +42 -12
  113. package/src/nodes/gpgpu/SubgroupFunctionNode.js +430 -0
  114. package/src/nodes/lighting/LightsNode.js +1 -1
  115. package/src/nodes/math/BitcastNode.js +156 -0
  116. package/src/nodes/math/ConditionalNode.js +18 -2
  117. package/src/nodes/math/MathNode.js +3 -15
  118. package/src/nodes/math/OperatorNode.js +4 -3
  119. package/src/nodes/tsl/TSLCore.js +432 -152
  120. package/src/nodes/utils/JoinNode.js +3 -1
  121. package/src/nodes/utils/MemberNode.js +58 -7
  122. package/src/nodes/utils/RTTNode.js +1 -1
  123. package/src/nodes/utils/ReflectorNode.js +51 -7
  124. package/src/nodes/utils/SampleNode.js +12 -2
  125. package/src/nodes/utils/SplitNode.js +11 -0
  126. package/src/nodes/utils/Timer.js +0 -47
  127. package/src/objects/BatchedMesh.js +2 -2
  128. package/src/objects/LOD.js +1 -1
  129. package/src/objects/Sprite.js +2 -2
  130. package/src/renderers/WebGLRenderer.js +0 -9
  131. package/src/renderers/common/Attributes.js +1 -1
  132. package/src/renderers/common/Backend.js +19 -1
  133. package/src/renderers/common/Bindings.js +2 -0
  134. package/src/renderers/common/ChainMap.js +1 -1
  135. package/src/renderers/common/DataMap.js +1 -1
  136. package/src/renderers/common/Pipelines.js +1 -1
  137. package/src/renderers/common/RenderContext.js +2 -2
  138. package/src/renderers/common/RenderObject.js +14 -2
  139. package/src/renderers/common/Renderer.js +39 -19
  140. package/src/renderers/common/SampledTexture.js +1 -1
  141. package/src/renderers/common/Sampler.js +25 -13
  142. package/src/renderers/common/Textures.js +34 -12
  143. package/src/renderers/common/TimestampQueryPool.js +3 -3
  144. package/src/renderers/common/XRManager.js +35 -19
  145. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  146. package/src/renderers/common/nodes/NodeLibrary.js +5 -5
  147. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  148. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  149. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  150. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  151. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  152. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  153. package/src/renderers/webgl/WebGLProgram.js +4 -4
  154. package/src/renderers/webgl/WebGLShadowMap.js +1 -1
  155. package/src/renderers/webgl/WebGLTextures.js +1 -0
  156. package/src/renderers/webgl/WebGLUtils.js +3 -2
  157. package/src/renderers/webgl-fallback/WebGLBackend.js +186 -135
  158. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +110 -17
  159. package/src/renderers/webgl-fallback/utils/WebGLState.js +1 -1
  160. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -3
  161. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -10
  162. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  163. package/src/renderers/webgpu/WebGPUBackend.js +35 -31
  164. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +124 -34
  165. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -2
  166. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +9 -18
  167. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +114 -25
  168. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +3 -3
  169. package/src/renderers/webxr/WebXRManager.js +39 -24
  170. package/src/textures/ExternalTexture.js +15 -4
  171. package/src/textures/Source.js +1 -1
  172. package/src/textures/VideoTexture.js +0 -3
  173. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -137,6 +137,8 @@ class SSRPass extends Pass {
137
137
 
138
138
  this._selects = selects;
139
139
 
140
+ this._resolutionScale = 1;
141
+
140
142
  /**
141
143
  * Whether the pass is selective or not.
142
144
  *
@@ -457,6 +459,29 @@ class SSRPass extends Pass {
457
459
 
458
460
  }
459
461
 
462
+
463
+ /**
464
+ * The resolution scale. Valid values are in the range
465
+ * `[0,1]`. `1` means best quality but also results in
466
+ * more computational overhead. Setting to `0.5` means
467
+ * the effect is computed in half-resolution.
468
+ *
469
+ * @type {number}
470
+ * @default 1
471
+ */
472
+ get resolutionScale() {
473
+
474
+ return this._resolutionScale;
475
+
476
+ }
477
+
478
+ set resolutionScale( value ) {
479
+
480
+ this._resolutionScale = value;
481
+ this.setSize( this.width, this.height ); // force a resize when resolution scaling changes
482
+
483
+ }
484
+
460
485
  /**
461
486
  * Frees the GPU-related resources allocated by this instance. Call this
462
487
  * method whenever the pass is no longer used in your app.
@@ -661,23 +686,27 @@ class SSRPass extends Pass {
661
686
  this.width = width;
662
687
  this.height = height;
663
688
 
664
- this.ssrMaterial.defines.MAX_STEP = Math.sqrt( width * width + height * height );
689
+ const effectiveWidth = Math.round( this.resolutionScale * width );
690
+ const effectiveHeight = Math.round( this.resolutionScale * height );
691
+
692
+ this.ssrMaterial.defines.MAX_STEP = Math.sqrt( effectiveWidth * effectiveWidth + effectiveHeight * effectiveHeight );
665
693
  this.ssrMaterial.needsUpdate = true;
694
+
666
695
  this.beautyRenderTarget.setSize( width, height );
667
- this.prevRenderTarget.setSize( width, height );
668
- this.ssrRenderTarget.setSize( width, height );
669
696
  this.normalRenderTarget.setSize( width, height );
670
697
  this.metalnessRenderTarget.setSize( width, height );
671
- this.blurRenderTarget.setSize( width, height );
672
- this.blurRenderTarget2.setSize( width, height );
698
+ this.ssrRenderTarget.setSize( effectiveWidth, effectiveHeight );
699
+ this.prevRenderTarget.setSize( effectiveWidth, effectiveHeight );
700
+ this.blurRenderTarget.setSize( effectiveWidth, effectiveHeight );
701
+ this.blurRenderTarget2.setSize( effectiveWidth, effectiveHeight );
673
702
  // this.blurRenderTarget3.setSize(width, height);
674
703
 
675
- this.ssrMaterial.uniforms[ 'resolution' ].value.set( width, height );
704
+ this.ssrMaterial.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
676
705
  this.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );
677
706
  this.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
678
707
 
679
- this.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );
680
- this.blurMaterial2.uniforms[ 'resolution' ].value.set( width, height );
708
+ this.blurMaterial.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
709
+ this.blurMaterial2.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
681
710
 
682
711
  }
683
712
 
@@ -45,7 +45,7 @@ const UnpackDepthRGBAShader = {
45
45
 
46
46
  float depth = unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );
47
47
 
48
- #ifdef USE_REVERSEDEPTHBUF
48
+ #ifdef USE_REVERSED_DEPTH_BUFFER
49
49
 
50
50
  gl_FragColor = vec4( vec3( depth ), opacity );
51
51
 
@@ -11,22 +11,21 @@ const arithmeticOperators = [
11
11
  ];
12
12
 
13
13
  const precedenceOperators = [
14
- '/', '*', '%',
15
- '-', '+',
16
- '<<', '>>',
17
- '<', '>', '<=', '>=',
18
- '==', '!=',
19
- '&',
20
- '^',
21
- '|',
22
- '&&',
23
- '^^',
24
- '||',
25
- '?',
26
- '=',
27
- '+=', '-=', '*=', '/=', '%=', '^=', '&=', '|=', '<<=', '>>=',
28
- ','
29
- ].reverse();
14
+ [ ',' ],
15
+ [ '=', '+=', '-=', '*=', '/=', '%=', '^=', '&=', '|=', '<<=', '>>=' ],
16
+ [ '?' ],
17
+ [ '||' ],
18
+ [ '^^' ],
19
+ [ '&&' ],
20
+ [ '|' ],
21
+ [ '^' ],
22
+ [ '&' ],
23
+ [ '==', '!=' ],
24
+ [ '<', '>', '<=', '>=' ],
25
+ [ '<<', '>>' ],
26
+ [ '+', '-' ],
27
+ [ '*', '/', '%' ]
28
+ ];
30
29
 
31
30
  const associativityRightToLeft = [
32
31
  '=',
@@ -334,7 +333,7 @@ class GLSLDecoder {
334
333
 
335
334
  let groupIndex = 0;
336
335
 
337
- for ( const operator of precedenceOperators ) {
336
+ for ( const operators of precedenceOperators ) {
338
337
 
339
338
  const parseToken = ( i, inverse = false ) => {
340
339
 
@@ -351,7 +350,9 @@ class GLSLDecoder {
351
350
 
352
351
  }
353
352
 
354
- if ( groupIndex === 0 && token.str === operator ) {
353
+ if ( groupIndex === 0 && operators.includes( token.str ) ) {
354
+
355
+ const operator = token.str;
355
356
 
356
357
  if ( operator === '?' ) {
357
358
 
@@ -396,7 +397,9 @@ class GLSLDecoder {
396
397
 
397
398
  };
398
399
 
399
- if ( associativityRightToLeft.includes( operator ) ) {
400
+ const isRightAssociative = operators.some( op => associativityRightToLeft.includes( op ) );
401
+
402
+ if ( isRightAssociative ) {
400
403
 
401
404
  for ( let i = 0; i < tokens.length; i ++ ) {
402
405
 
@@ -340,7 +340,7 @@ class TSLEncoder {
340
340
 
341
341
  if ( node.hasAssignment ) {
342
342
 
343
- if ( node.after === false ) {
343
+ if ( node.after === false && ( node.type === '++' || node.type === '--' ) ) {
344
344
 
345
345
  type += 'Before';
346
346
 
@@ -665,15 +665,7 @@ ${ this.tab }} )`;
665
665
 
666
666
  }
667
667
 
668
- if ( node.linker.assignments.length > 0 ) {
669
-
670
- varStr += ' = ' + valueStr + '.toVar()';
671
-
672
- } else {
673
-
674
- varStr += ' = ' + valueStr;
675
-
676
- }
668
+ varStr += ' = ' + valueStr;
677
669
 
678
670
  } else {
679
671
 
@@ -80,6 +80,10 @@ const wgslLib = {
80
80
  'textureLod': 'textureSampleLevel',
81
81
  'texelFetch': 'textureLoad',
82
82
  'textureGrad': 'textureSampleGrad',
83
+ 'floatBitsToInt': 'bitcast<i32>',
84
+ 'floatBitsToUint': 'bitcast<u32>',
85
+ 'intBitsToFloat': 'bitcast<f32>',
86
+ 'uintBitsToFloat': 'bitcast<f32>',
83
87
  };
84
88
 
85
89
  class WGSLEncoder {
@@ -170,6 +174,26 @@ class WGSLEncoder {
170
174
 
171
175
  code = `${ modFnName }( ${ snippets.join( ', ' ) } )`;
172
176
 
177
+ } else if ( fnName.startsWith( 'bitcast' ) ) {
178
+
179
+ const params = node.params.map( p => this.emitExpression( p ) ).join( ',' );
180
+ const types = node.params.map( p => p.getType() );
181
+
182
+ if ( /.*vec[234]/.test( types[ 0 ] ) ) {
183
+
184
+ const conversionType = fnName.substring( 8, fnName.length - 1 );
185
+ const vectorType = types[ 0 ].substring( - 1 );
186
+
187
+ code = `bitcast<${ vectorType }<${ conversionType }>>`;
188
+
189
+ } else {
190
+
191
+ code = fnName;
192
+
193
+ }
194
+
195
+ code += `( ${ params } )`;
196
+
173
197
  } else if ( fnName.startsWith( 'texture' ) ) {
174
198
 
175
199
  // Handle texture functions separately due to sampler handling
@@ -69,9 +69,9 @@ class AnamorphicNode extends TempNode {
69
69
  /**
70
70
  * The resolution scale.
71
71
  *
72
- * @type {Vector2}
72
+ * @type {float}
73
73
  */
74
- this.resolution = new Vector2( 1, 1 );
74
+ this.resolutionScale = 1;
75
75
 
76
76
  /**
77
77
  * The internal render target of the effect.
@@ -130,8 +130,8 @@ class AnamorphicNode extends TempNode {
130
130
 
131
131
  this._invSize.value.set( 1 / width, 1 / height );
132
132
 
133
- width = Math.max( Math.round( width * this.resolution.x ), 1 );
134
- height = Math.max( Math.round( height * this.resolution.y ), 1 );
133
+ width = Math.max( Math.round( width * this.resolutionScale ), 1 );
134
+ height = Math.max( Math.round( height * this.resolutionScale ), 1 );
135
135
 
136
136
  this._renderTarget.setSize( width, height );
137
137
 
@@ -240,6 +240,29 @@ class AnamorphicNode extends TempNode {
240
240
 
241
241
  }
242
242
 
243
+ /**
244
+ * The resolution scale.
245
+ *
246
+ * @deprecated
247
+ * @type {Vector2}
248
+ * @default {(1,1)}
249
+ */
250
+ get resolution() {
251
+
252
+ console.warn( 'THREE.AnamorphicNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
253
+
254
+ return new Vector2( this.resolutionScale, this.resolutionScale );
255
+
256
+ }
257
+
258
+ set resolution( value ) {
259
+
260
+ console.warn( 'THREE.AnamorphicNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
261
+
262
+ this.resolutionScale = value.x;
263
+
264
+ }
265
+
243
266
  }
244
267
 
245
268
  /**
@@ -364,9 +364,9 @@ class BloomNode extends TempNode {
364
364
 
365
365
  // gaussian blur materials
366
366
 
367
- // These sizes have been changed to account for the altered coefficents-calculation to avoid blockiness,
367
+ // These sizes have been changed to account for the altered coefficients-calculation to avoid blockiness,
368
368
  // while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528
369
- const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
369
+ const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
370
370
 
371
371
  for ( let i = 0; i < this._nMips; i ++ ) {
372
372
 
@@ -480,7 +480,7 @@ class BloomNode extends TempNode {
480
480
  const uvOffset = direction.mul( invSize ).mul( x );
481
481
  const sample1 = sampleTexel( uvNode.add( uvOffset ) ).rgb;
482
482
  const sample2 = sampleTexel( uvNode.sub( uvOffset ) ).rgb;
483
- diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
483
+ diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
484
484
 
485
485
  } );
486
486
 
@@ -189,7 +189,7 @@ export default ChromaticAberrationNode;
189
189
  * @function
190
190
  * @param {Node<vec4>} node - The node that represents the input of the effect.
191
191
  * @param {Node|number} [strength=1.0] - The strength of the chromatic aberration effect as a node or value.
192
- * @param {Node|Vector2} [center=null] - The center point of the effect as a node or value. If null, uses screen center (0.5, 0.5).
192
+ * @param {?(Node|Vector2)} [center=null] - The center point of the effect as a node or value. If null, uses screen center (0.5, 0.5).
193
193
  * @param {Node|number} [scale=1.1] - The scale factor for stepped scaling from center as a node or value.
194
194
  * @returns {ChromaticAberrationNode}
195
195
  */
@@ -203,4 +203,5 @@ export const chromaticAberration = ( node, strength = 1.0, center = null, scale
203
203
  nodeObject( scale )
204
204
  )
205
205
  );
206
+
206
207
  };