super-three 0.158.0 → 0.160.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 (191) hide show
  1. package/build/three.cjs +1719 -379
  2. package/build/three.js +1719 -379
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +1718 -380
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/controls/OrbitControls.js +50 -40
  8. package/examples/jsm/csm/CSMShader.js +52 -47
  9. package/examples/jsm/exporters/GLTFExporter.js +79 -1
  10. package/examples/jsm/exporters/USDZExporter.js +27 -19
  11. package/examples/jsm/helpers/TextureHelper.js +237 -0
  12. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  13. package/examples/jsm/lines/LineMaterial.js +16 -33
  14. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  15. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  16. package/examples/jsm/loaders/FBXLoader.js +294 -124
  17. package/examples/jsm/loaders/GLTFLoader.js +71 -3
  18. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  19. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  20. package/examples/jsm/loaders/SVGLoader.js +4 -4
  21. package/examples/jsm/loaders/USDZLoader.js +3 -17
  22. package/examples/jsm/math/Octree.js +15 -4
  23. package/examples/jsm/misc/Timer.js +119 -0
  24. package/examples/jsm/misc/TubePainter.js +3 -6
  25. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  26. package/examples/jsm/nodes/Nodes.js +11 -7
  27. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  28. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  29. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  30. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  31. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  32. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  33. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  34. package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
  35. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  36. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  37. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  38. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  39. package/examples/jsm/nodes/core/Node.js +6 -3
  40. package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
  41. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  42. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  43. package/examples/jsm/nodes/core/NodeUtils.js +3 -7
  44. package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
  45. package/examples/jsm/nodes/core/PropertyNode.js +17 -2
  46. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  47. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  48. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  49. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  50. package/examples/jsm/nodes/core/VarNode.js +2 -0
  51. package/examples/jsm/nodes/core/VaryingNode.js +1 -7
  52. package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
  53. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  54. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  55. package/examples/jsm/nodes/display/PassNode.js +182 -0
  56. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  57. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  58. package/examples/jsm/nodes/display/ViewportNode.js +5 -8
  59. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
  60. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
  61. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
  62. package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
  63. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
  64. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
  65. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  66. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
  67. package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
  68. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  69. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  70. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  71. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  72. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  73. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  74. package/examples/jsm/nodes/math/MathNode.js +2 -0
  75. package/examples/jsm/nodes/math/OperatorNode.js +19 -6
  76. package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
  77. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  78. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  79. package/examples/jsm/nodes/utils/SplitNode.js +8 -2
  80. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  81. package/examples/jsm/objects/QuadMesh.js +60 -0
  82. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  83. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  84. package/examples/jsm/renderers/common/Animation.js +10 -21
  85. package/examples/jsm/renderers/common/Backend.js +19 -3
  86. package/examples/jsm/renderers/common/Background.js +20 -22
  87. package/examples/jsm/renderers/common/Bindings.js +30 -21
  88. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  89. package/examples/jsm/renderers/common/Color4.js +37 -0
  90. package/examples/jsm/renderers/common/Geometries.js +4 -4
  91. package/examples/jsm/renderers/common/Info.js +12 -2
  92. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  93. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  94. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  95. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  96. package/examples/jsm/renderers/common/RenderObject.js +13 -1
  97. package/examples/jsm/renderers/common/RenderObjects.js +4 -2
  98. package/examples/jsm/renderers/common/Renderer.js +137 -37
  99. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  100. package/examples/jsm/renderers/common/Textures.js +4 -1
  101. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  102. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  103. package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
  104. package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
  105. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
  106. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
  107. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  108. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  109. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  110. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  111. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  112. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  113. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
  115. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  116. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  119. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  120. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  121. package/examples/jsm/shaders/FXAAShader.js +133 -133
  122. package/examples/jsm/shaders/GTAOShader.js +424 -0
  123. package/examples/jsm/shaders/OutputShader.js +4 -0
  124. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  125. package/examples/jsm/shaders/SAOShader.js +2 -3
  126. package/examples/jsm/shaders/SSAOShader.js +2 -3
  127. package/examples/jsm/transpiler/AST.js +40 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
  130. package/examples/jsm/transpiler/TSLEncoder.js +124 -20
  131. package/examples/jsm/utils/SortUtils.js +158 -0
  132. package/examples/jsm/utils/TextureUtils.js +33 -21
  133. package/examples/jsm/webxr/ARButton.js +14 -0
  134. package/examples/jsm/webxr/VRButton.js +23 -8
  135. package/examples/jsm/webxr/XRButton.js +25 -11
  136. package/package.json +5 -6
  137. package/src/Three.js +1 -0
  138. package/src/constants.js +2 -1
  139. package/src/core/BufferAttribute.js +21 -2
  140. package/src/core/InterleavedBuffer.js +21 -1
  141. package/src/core/Object3D.js +60 -12
  142. package/src/core/UniformsGroup.js +7 -1
  143. package/src/extras/curves/LineCurve3.js +4 -0
  144. package/src/loaders/AudioLoader.js +1 -1
  145. package/src/loaders/BufferGeometryLoader.js +0 -7
  146. package/src/loaders/ImageBitmapLoader.js +25 -1
  147. package/src/loaders/ObjectLoader.js +49 -0
  148. package/src/materials/ShaderMaterial.js +2 -1
  149. package/src/math/ColorManagement.js +0 -16
  150. package/src/math/Quaternion.js +5 -4
  151. package/src/math/Sphere.js +2 -0
  152. package/src/math/Triangle.js +17 -5
  153. package/src/objects/BatchedMesh.js +1020 -0
  154. package/src/objects/Skeleton.js +1 -3
  155. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  156. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  157. package/src/renderers/WebGLRenderer.js +23 -18
  158. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  159. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  160. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  161. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  162. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  163. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  164. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  165. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  166. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  167. package/src/renderers/shaders/ShaderChunk.js +4 -0
  168. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  169. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  170. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  171. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  172. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  173. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  174. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  175. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
  176. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  177. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  178. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  179. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  180. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  181. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  182. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  183. package/src/renderers/webgl/WebGLLights.js +11 -2
  184. package/src/renderers/webgl/WebGLProgram.js +20 -1
  185. package/src/renderers/webgl/WebGLPrograms.js +5 -0
  186. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  187. package/src/renderers/webgl/WebGLTextures.js +7 -11
  188. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  189. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  190. package/src/renderers/webxr/WebXRManager.js +16 -0
  191. package/examples/jsm/objects/BatchedMesh.js +0 -586
@@ -1,19 +1,29 @@
1
- import { glsl } from '../../code/CodeNode.js';
2
- import { glslFn } from '../../code/FunctionNode.js';
3
-
4
- // Original shader code from:
1
+ // Three.js Transpiler
5
2
  // https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_transform_color.glsl
6
3
 
7
- export const mx_transform_color = glsl( `#define M_AP1_TO_REC709 mat3(1.705079555511475, -0.1297005265951157, -0.02416634373366833, -0.6242334842681885, 1.138468623161316, -0.1246141716837883, -0.0808461606502533, -0.008768022060394287, 1.148780584335327)
4
+ import { bvec3, vec3, tslFn } from '../../shadernode/ShaderNode.js';
5
+ import { greaterThan } from '../../math/OperatorNode.js';
6
+ import { max, pow, mix } from '../../math/MathNode.js';
7
+
8
+ const mx_srgb_texture_to_lin_rec709 = tslFn( ( [ color_immutable ] ) => {
9
+
10
+ const color = vec3( color_immutable ).toVar();
11
+ const isAbove = bvec3( greaterThan( color, vec3( 0.04045 ) ) ).toVar();
12
+ const linSeg = vec3( color.div( 12.92 ) ).toVar();
13
+ const powSeg = vec3( pow( max( color.add( vec3( 0.055 ) ), vec3( 0.0 ) ).div( 1.055 ), vec3( 2.4 ) ) ).toVar();
14
+
15
+ return mix( linSeg, powSeg, isAbove );
16
+
17
+ } );
8
18
 
9
- vec3 mx_srgb_texture_to_lin_rec709(vec3 color)
10
- {
11
- bvec3 isAbove = greaterThan(color, vec3(0.04045));
12
- vec3 linSeg = color / 12.92;
13
- vec3 powSeg = pow(max(color + vec3(0.055), vec3(0.0)) / 1.055, vec3(2.4));
14
- return mix(linSeg, powSeg, isAbove);
15
- }` );
19
+ // layouts
16
20
 
17
- const includes = [ mx_transform_color ];
21
+ mx_srgb_texture_to_lin_rec709.setLayout( {
22
+ name: 'mx_srgb_texture_to_lin_rec709',
23
+ type: 'vec3',
24
+ inputs: [
25
+ { name: 'color', type: 'vec3' }
26
+ ]
27
+ } );
18
28
 
19
- export const mx_srgb_texture_to_lin_rec709 = glslFn( 'vec3 mx_srgb_texture_to_lin_rec709( vec3 color )', includes );
29
+ export { mx_srgb_texture_to_lin_rec709 };
@@ -220,6 +220,7 @@ MathNode.ROUND = 'round';
220
220
  MathNode.RECIPROCAL = 'reciprocal';
221
221
  MathNode.TRUNC = 'trunc';
222
222
  MathNode.FWIDTH = 'fwidth';
223
+ MathNode.BITCAST = 'bitcast';
223
224
 
224
225
  // 2 inputs
225
226
 
@@ -278,6 +279,7 @@ export const round = nodeProxy( MathNode, MathNode.ROUND );
278
279
  export const reciprocal = nodeProxy( MathNode, MathNode.RECIPROCAL );
279
280
  export const trunc = nodeProxy( MathNode, MathNode.TRUNC );
280
281
  export const fwidth = nodeProxy( MathNode, MathNode.FWIDTH );
282
+ export const bitcast = nodeProxy( MathNode, MathNode.BITCAST );
281
283
 
282
284
  export const atan2 = nodeProxy( MathNode, MathNode.ATAN2 );
283
285
  export const min = nodeProxy( MathNode, MathNode.MIN );
@@ -157,34 +157,47 @@ class OperatorNode extends TempNode {
157
157
  const b = bNode.build( builder, typeB );
158
158
 
159
159
  const outputLength = builder.getTypeLength( output );
160
+ const fnOpSnippet = builder.getFunctionOperator( op );
160
161
 
161
162
  if ( output !== 'void' ) {
162
163
 
163
164
  if ( op === '<' && outputLength > 1 ) {
164
165
 
165
- return builder.format( `${ builder.getMethod( 'lessThan' ) }( ${a}, ${b} )`, type, output );
166
+ return builder.format( `${ builder.getMethod( 'lessThan' ) }( ${ a }, ${ b } )`, type, output );
166
167
 
167
168
  } else if ( op === '<=' && outputLength > 1 ) {
168
169
 
169
- return builder.format( `${ builder.getMethod( 'lessThanEqual' ) }( ${a}, ${b} )`, type, output );
170
+ return builder.format( `${ builder.getMethod( 'lessThanEqual' ) }( ${ a }, ${ b } )`, type, output );
170
171
 
171
172
  } else if ( op === '>' && outputLength > 1 ) {
172
173
 
173
- return builder.format( `${ builder.getMethod( 'greaterThan' ) }( ${a}, ${b} )`, type, output );
174
+ return builder.format( `${ builder.getMethod( 'greaterThan' ) }( ${ a }, ${ b } )`, type, output );
174
175
 
175
176
  } else if ( op === '>=' && outputLength > 1 ) {
176
177
 
177
- return builder.format( `${ builder.getMethod( 'greaterThanEqual' ) }( ${a}, ${b} )`, type, output );
178
+ return builder.format( `${ builder.getMethod( 'greaterThanEqual' ) }( ${ a }, ${ b } )`, type, output );
179
+
180
+ } else if ( fnOpSnippet ) {
181
+
182
+ return builder.format( `${ fnOpSnippet }( ${ a }, ${ b } )`, type, output );
178
183
 
179
184
  } else {
180
185
 
181
- return builder.format( `( ${a} ${this.op} ${b} )`, type, output );
186
+ return builder.format( `( ${ a } ${ op } ${ b } )`, type, output );
182
187
 
183
188
  }
184
189
 
185
190
  } else if ( typeA !== 'void' ) {
186
191
 
187
- return builder.format( `${a} ${this.op} ${b}`, type, output );
192
+ if ( fnOpSnippet ) {
193
+
194
+ return builder.format( `${ fnOpSnippet }( ${ a }, ${ b } )`, type, output );
195
+
196
+ } else {
197
+
198
+ return builder.format( `${ a } ${ op } ${ b }`, type, output );
199
+
200
+ }
188
201
 
189
202
  }
190
203
 
@@ -15,7 +15,13 @@ const NodeElements = new Map(); // @TODO: Currently only a few nodes are added,
15
15
 
16
16
  export function addNodeElement( name, nodeElement ) {
17
17
 
18
- if ( NodeElements.has( name ) ) throw new Error( `Redefinition of node element ${ name }` );
18
+ if ( NodeElements.has( name ) ) {
19
+
20
+ console.warn( `Redefinition of node element ${ name }` );
21
+ return;
22
+
23
+ }
24
+
19
25
  if ( typeof nodeElement !== 'function' ) throw new Error( `Node element ${ name } is not a function` );
20
26
 
21
27
  NodeElements.set( name, nodeElement );
@@ -40,7 +46,13 @@ const shaderNodeHandler = {
40
46
 
41
47
  if ( node.isStackNode !== true && prop === 'assign' ) {
42
48
 
43
- return ( ...params ) => currentStack.assign( nodeObj, ...params );
49
+ return ( ...params ) => {
50
+
51
+ currentStack.assign( nodeObj, ...params );
52
+
53
+ return nodeObj;
54
+
55
+ };
44
56
 
45
57
  } else if ( NodeElements.has( prop ) ) {
46
58
 
@@ -271,6 +283,12 @@ class ShaderCallNodeInternal extends Node {
271
283
 
272
284
  }
273
285
 
286
+ if ( builder.currentFunctionNode !== null ) {
287
+
288
+ builder.currentFunctionNode.includes.push( functionNode );
289
+
290
+ }
291
+
274
292
  return nodeObject( functionNode.call( inputNodes ) );
275
293
 
276
294
  }
@@ -505,7 +523,18 @@ addNodeClass( 'ShaderNode', ShaderNode );
505
523
 
506
524
  //
507
525
 
508
- export const setCurrentStack = stack => currentStack = stack;
526
+ export const setCurrentStack = ( stack ) => {
527
+
528
+ if ( currentStack === stack ) {
529
+
530
+ //throw new Error( 'Stack already defined.' );
531
+
532
+ }
533
+
534
+ currentStack = stack;
535
+
536
+ };
537
+
509
538
  export const getCurrentStack = () => currentStack;
510
539
 
511
540
  export const If = ( ...params ) => currentStack.if( ...params );
@@ -0,0 +1,95 @@
1
+ import Node, { addNodeClass } from '../core/Node.js';
2
+ import { nodeProxy } from '../shadernode/ShaderNode.js';
3
+
4
+ class FunctionOverloadingNode extends Node {
5
+
6
+ constructor( functionNodes = [], ...parametersNodes ) {
7
+
8
+ super();
9
+
10
+ this.functionNodes = functionNodes;
11
+ this.parametersNodes = parametersNodes;
12
+
13
+ this._candidateFnCall = null;
14
+
15
+ }
16
+
17
+ getNodeType() {
18
+
19
+ return this.functionNodes[ 0 ].shaderNode.layout.type;
20
+
21
+ }
22
+
23
+ setup( builder ) {
24
+
25
+ const params = this.parametersNodes;
26
+
27
+ let candidateFnCall = this._candidateFnCall;
28
+
29
+ if ( candidateFnCall === null ) {
30
+
31
+ let candidateFn = null;
32
+ let candidateScore = - 1;
33
+
34
+ for ( const functionNode of this.functionNodes ) {
35
+
36
+ const shaderNode = functionNode.shaderNode;
37
+ const layout = shaderNode.layout;
38
+
39
+ if ( layout === null ) {
40
+
41
+ throw new Error( 'FunctionOverloadingNode: FunctionNode must be a layout.' );
42
+
43
+ }
44
+
45
+ const inputs = layout.inputs;
46
+
47
+ if ( params.length === inputs.length ) {
48
+
49
+ let score = 0;
50
+
51
+ for ( let i = 0; i < params.length; i ++ ) {
52
+
53
+ const param = params[ i ];
54
+ const input = inputs[ i ];
55
+
56
+ if ( param.getNodeType( builder ) === input.type ) {
57
+
58
+ score ++;
59
+
60
+ } else {
61
+
62
+ score = 0;
63
+
64
+ }
65
+
66
+ }
67
+
68
+ if ( score > candidateScore ) {
69
+
70
+ candidateFn = functionNode;
71
+ candidateScore = score;
72
+
73
+ }
74
+
75
+ }
76
+
77
+ }
78
+
79
+ this._candidateFnCall = candidateFnCall = candidateFn( ...params );
80
+
81
+ }
82
+
83
+ return candidateFnCall;
84
+
85
+ }
86
+
87
+ }
88
+
89
+ export default FunctionOverloadingNode;
90
+
91
+ const overloadingBaseFn = nodeProxy( FunctionOverloadingNode );
92
+
93
+ export const overloadingFn = ( functionNodes ) => ( ...params ) => overloadingBaseFn( functionNodes, ...params );
94
+
95
+ addNodeClass( 'FunctionOverloadingNode', FunctionOverloadingNode );
@@ -1,9 +1,9 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
2
+ import { float, addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
3
3
 
4
4
  class RemapNode extends Node {
5
5
 
6
- constructor( node, inLowNode, inHighNode, outLowNode, outHighNode ) {
6
+ constructor( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
7
7
 
8
8
  super();
9
9
 
@@ -30,9 +30,15 @@ class SplitNode extends Node {
30
30
 
31
31
  }
32
32
 
33
+ getPrimitiveType( builder ) {
34
+
35
+ return builder.getPrimitiveType( this.node.getNodeType( builder ) );
36
+
37
+ }
38
+
33
39
  getNodeType( builder ) {
34
40
 
35
- return builder.getTypeFromLength( this.components.length );
41
+ return builder.getTypeFromLength( this.components.length, this.getPrimitiveType( builder ) );
36
42
 
37
43
  }
38
44
 
@@ -53,7 +59,7 @@ class SplitNode extends Node {
53
59
 
54
60
  // needed expand the input node
55
61
 
56
- type = builder.getTypeFromLength( this.getVectorLength() );
62
+ type = builder.getTypeFromLength( this.getVectorLength(), this.getPrimitiveType( builder ) );
57
63
 
58
64
  }
59
65
 
@@ -1,13 +1,13 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { add } from '../math/OperatorNode.js';
3
- import { normalWorld } from '../accessors/NormalNode.js';
4
- import { positionWorld } from '../accessors/PositionNode.js';
3
+ import { normalLocal } from '../accessors/NormalNode.js';
4
+ import { positionLocal } from '../accessors/PositionNode.js';
5
5
  import { texture } from '../accessors/TextureNode.js';
6
6
  import { addNodeElement, nodeProxy, float, vec3 } from '../shadernode/ShaderNode.js';
7
7
 
8
8
  class TriplanarTexturesNode extends Node {
9
9
 
10
- constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionWorld, normalNode = normalWorld ) {
10
+ constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ) {
11
11
 
12
12
  super( 'vec4' );
13
13
 
@@ -0,0 +1,60 @@
1
+ import { BufferGeometry, Float32BufferAttribute, Mesh, OrthographicCamera } from 'three';
2
+
3
+ // Helper for passes that need to fill the viewport with a single quad.
4
+
5
+ const _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
6
+
7
+ // https://github.com/mrdoob/three.js/pull/21358
8
+
9
+ class QuadGeometry extends BufferGeometry {
10
+
11
+ constructor( flipY = false ) {
12
+
13
+ super();
14
+
15
+ const uv = flipY === false ? [ 0, - 1, 0, 1, 2, 1 ] : [ 0, 2, 0, 0, 2, 0 ];
16
+
17
+ this.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
18
+ this.setAttribute( 'uv', new Float32BufferAttribute( uv, 2 ) );
19
+
20
+ }
21
+
22
+ }
23
+
24
+ const _geometry = new QuadGeometry();
25
+
26
+ class QuadMesh {
27
+
28
+ constructor( material = null ) {
29
+
30
+ this._mesh = new Mesh( _geometry, material );
31
+
32
+ }
33
+
34
+ dispose() {
35
+
36
+ this._mesh.geometry.dispose();
37
+
38
+ }
39
+
40
+ render( renderer ) {
41
+
42
+ renderer.render( this._mesh, _camera );
43
+
44
+ }
45
+
46
+ get material() {
47
+
48
+ return this._mesh.material;
49
+
50
+ }
51
+
52
+ set material( value ) {
53
+
54
+ this._mesh.material = value;
55
+
56
+ }
57
+
58
+ }
59
+
60
+ export default QuadMesh;