super-three 0.158.0 → 0.160.1
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.
- package/build/three.cjs +1720 -380
- package/build/three.js +1720 -380
- package/build/three.min.js +1 -1
- package/build/three.module.js +1719 -381
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/controls/OrbitControls.js +50 -40
- package/examples/jsm/csm/CSMShader.js +52 -47
- package/examples/jsm/exporters/GLTFExporter.js +79 -1
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +71 -3
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/math/Octree.js +15 -4
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/nodes/Nodes.js +11 -7
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +6 -3
- package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +3 -7
- package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
- package/examples/jsm/nodes/core/PropertyNode.js +17 -2
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +2 -0
- package/examples/jsm/nodes/core/VaryingNode.js +1 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +5 -8
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
- package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +19 -6
- package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +8 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +30 -21
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +13 -1
- package/examples/jsm/renderers/common/RenderObjects.js +4 -2
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +4 -1
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
- package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/FXAAShader.js +133 -133
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +2 -3
- package/examples/jsm/shaders/SSAOShader.js +2 -3
- package/examples/jsm/transpiler/AST.js +40 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
- package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
- package/examples/jsm/transpiler/TSLEncoder.js +124 -20
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +23 -8
- package/examples/jsm/webxr/XRButton.js +25 -11
- package/package.json +5 -6
- package/src/Three.js +1 -0
- package/src/constants.js +2 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +24 -19
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +20 -1
- package/src/renderers/webgl/WebGLPrograms.js +5 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/objects/BatchedMesh.js +0 -586
|
@@ -1,19 +1,29 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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} ${
|
|
186
|
+
return builder.format( `( ${ a } ${ op } ${ b } )`, type, output );
|
|
182
187
|
|
|
183
188
|
}
|
|
184
189
|
|
|
185
190
|
} else if ( typeA !== 'void' ) {
|
|
186
191
|
|
|
187
|
-
|
|
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 ) )
|
|
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 ) =>
|
|
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 =>
|
|
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 {
|
|
4
|
-
import {
|
|
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 =
|
|
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;
|