super-three 0.156.0 → 0.157.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 +753 -277
- package/build/three.js +753 -277
- package/build/three.min.js +2 -2
- package/build/three.module.js +750 -276
- package/build/three.module.min.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +17 -0
- package/examples/jsm/controls/DragControls.js +3 -2
- package/examples/jsm/csm/CSMShader.js +25 -21
- package/examples/jsm/exporters/EXRExporter.js +102 -24
- package/examples/jsm/exporters/GLTFExporter.js +1 -1
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/LightProbeGenerator.js +37 -3
- package/examples/jsm/lines/LineMaterial.js +90 -156
- package/examples/jsm/loaders/3DMLoader.js +378 -104
- package/examples/jsm/loaders/GLTFLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +22 -16
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/USDZLoader.js +215 -12
- package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
- package/examples/jsm/nodes/Nodes.js +5 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +2 -2
- package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +2 -2
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +6 -5
- package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +7 -9
- package/examples/jsm/nodes/accessors/MaterialNode.js +34 -46
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +9 -9
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
- package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
- package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +12 -6
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +1 -1
- package/examples/jsm/nodes/accessors/UVNode.js +1 -1
- package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
- package/examples/jsm/nodes/code/CodeNode.js +1 -1
- package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +18 -7
- package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
- package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
- package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/BypassNode.js +1 -1
- package/examples/jsm/nodes/core/CacheNode.js +1 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/ContextNode.js +2 -2
- package/examples/jsm/nodes/core/IndexNode.js +1 -1
- package/examples/jsm/nodes/core/InputNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +28 -13
- package/examples/jsm/nodes/core/NodeBuilder.js +3 -17
- package/examples/jsm/nodes/core/NodeFrame.js +37 -14
- package/examples/jsm/nodes/core/OutputStructNode.js +8 -4
- package/examples/jsm/nodes/core/PropertyNode.js +3 -3
- package/examples/jsm/nodes/core/StackNode.js +1 -1
- package/examples/jsm/nodes/core/StructTypeNode.js +1 -1
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformNode.js +3 -1
- package/examples/jsm/nodes/core/VarNode.js +1 -1
- package/examples/jsm/nodes/core/VaryingNode.js +1 -1
- package/examples/jsm/nodes/core/constants.js +1 -1
- package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
- package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
- package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
- package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
- package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
- package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
- package/examples/jsm/nodes/fog/FogNode.js +2 -2
- package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
- package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AONode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
- package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
- package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/NodeMaterial.js +27 -26
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
- package/examples/jsm/nodes/math/CondNode.js +1 -1
- package/examples/jsm/nodes/math/HashNode.js +8 -9
- package/examples/jsm/nodes/math/MathNode.js +2 -2
- package/examples/jsm/nodes/math/OperatorNode.js +1 -1
- package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +81 -28
- package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
- package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
- package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
- package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
- package/examples/jsm/nodes/utils/JoinNode.js +1 -1
- package/examples/jsm/nodes/utils/LoopNode.js +11 -11
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/PackingNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
- package/examples/jsm/nodes/utils/SetNode.js +62 -0
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
- package/examples/jsm/nodes/utils/TimerNode.js +2 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
- package/examples/jsm/objects/Sky.js +1 -3
- package/examples/jsm/postprocessing/OutputPass.js +3 -2
- package/examples/jsm/renderers/common/Background.js +2 -2
- package/examples/jsm/renderers/common/Bindings.js +3 -5
- package/examples/jsm/renderers/common/Pipelines.js +7 -7
- package/examples/jsm/renderers/common/RenderContext.js +3 -0
- package/examples/jsm/renderers/common/RenderObject.js +40 -16
- package/examples/jsm/renderers/common/RenderObjects.js +8 -14
- package/examples/jsm/renderers/common/Renderer.js +40 -13
- package/examples/jsm/renderers/common/SampledTexture.js +4 -2
- package/examples/jsm/renderers/common/StorageTexture.js +19 -0
- package/examples/jsm/renderers/common/Textures.js +14 -9
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +20 -10
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -6
- package/examples/jsm/renderers/common/nodes/Nodes.js +51 -24
- package/examples/jsm/renderers/webgl/WebGLBackend.js +100 -5
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +92 -6
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +3 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +5 -5
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +6 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +5 -5
- package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +197 -167
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +4 -4
- package/examples/jsm/shaders/OutputShader.js +2 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
- package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
- package/package.json +1 -1
- package/src/Three.js +0 -2
- package/src/animation/AnimationUtils.js +3 -20
- package/src/animation/KeyframeTrack.js +8 -8
- package/src/cameras/Camera.js +1 -5
- package/src/cameras/CubeCamera.js +14 -8
- package/src/constants.js +7 -1
- package/src/core/RenderTarget.js +16 -7
- package/src/extras/core/CurvePath.js +4 -1
- package/src/loaders/MaterialLoader.js +1 -1
- package/src/loaders/ObjectLoader.js +6 -0
- package/src/materials/Material.js +8 -8
- package/src/math/Color.js +1 -5
- package/src/math/ColorManagement.js +82 -60
- package/src/objects/Sprite.js +2 -2
- package/src/renderers/WebGLMultiviewRenderTarget.js +35 -0
- package/src/renderers/WebGLRenderer.js +78 -22
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +5 -4
- package/src/renderers/webgl/WebGLLights.js +14 -3
- package/src/renderers/webgl/WebGLMultiview.js +100 -0
- package/src/renderers/webgl/WebGLProgram.js +84 -5
- package/src/renderers/webgl/WebGLPrograms.js +11 -2
- package/src/renderers/webgl/WebGLTextures.js +214 -26
- package/src/renderers/webgl/WebGLUtils.js +21 -23
- package/src/renderers/webxr/WebXRManager.js +36 -12
- package/src/scenes/Fog.js +1 -0
- package/src/scenes/FogExp2.js +1 -0
- package/src/textures/Source.js +2 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
- package/src/lights/AmbientLightProbe.js +0 -21
- package/src/lights/HemisphereLightProbe.js +0 -30
|
@@ -75,4 +75,4 @@ export const js = ( src, includes ) => code( src, includes, 'js' );
|
|
|
75
75
|
export const wgsl = ( src, includes ) => code( src, includes, 'wgsl' );
|
|
76
76
|
export const glsl = ( src, includes ) => code( src, includes, 'glsl' );
|
|
77
77
|
|
|
78
|
-
addNodeClass( CodeNode );
|
|
78
|
+
addNodeClass( 'CodeNode', CodeNode );
|
|
@@ -99,17 +99,28 @@ class FunctionNode extends CodeNode {
|
|
|
99
99
|
|
|
100
100
|
export default FunctionNode;
|
|
101
101
|
|
|
102
|
-
const nativeFn = ( code, includes, language = '' ) => {
|
|
102
|
+
const nativeFn = ( code, includes = [], language = '' ) => {
|
|
103
103
|
|
|
104
|
-
let
|
|
104
|
+
for ( let i = 0; i < includes.length; i ++ ) {
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
const include = includes[ i ];
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
// TSL Function: glslFn, wgslFn
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
if ( typeof include === 'function' ) {
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
includes[ i ] = include.functionNode;
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const functionNode = nodeObject( new FunctionNode( code, includes, language ) );
|
|
119
|
+
|
|
120
|
+
const fn = ( ...params ) => functionNode.call( ...params );
|
|
121
|
+
fn.functionNode = functionNode;
|
|
122
|
+
|
|
123
|
+
return fn;
|
|
113
124
|
|
|
114
125
|
};
|
|
115
126
|
|
|
@@ -124,4 +135,4 @@ export const func = ( code, includes ) => { // @deprecated, r154
|
|
|
124
135
|
|
|
125
136
|
};
|
|
126
137
|
|
|
127
|
-
addNodeClass( FunctionNode );
|
|
138
|
+
addNodeClass( 'FunctionNode', FunctionNode );
|
|
@@ -431,7 +431,7 @@ class ScriptableNode extends Node {
|
|
|
431
431
|
|
|
432
432
|
}
|
|
433
433
|
|
|
434
|
-
|
|
434
|
+
setup() {
|
|
435
435
|
|
|
436
436
|
return this.getDefaultOutputNode();
|
|
437
437
|
|
|
@@ -485,4 +485,4 @@ export const scriptable = nodeProxy( ScriptableNode );
|
|
|
485
485
|
|
|
486
486
|
addNodeElement( 'scriptable', scriptable );
|
|
487
487
|
|
|
488
|
-
addNodeClass( ScriptableNode );
|
|
488
|
+
addNodeClass( 'ScriptableNode', ScriptableNode );
|
|
@@ -92,7 +92,7 @@ class ScriptableValueNode extends Node {
|
|
|
92
92
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
setup() {
|
|
96
96
|
|
|
97
97
|
return this.value && this.value.isNode ? this.value : float();
|
|
98
98
|
|
|
@@ -164,4 +164,4 @@ export const scriptableValue = nodeProxy( ScriptableValueNode );
|
|
|
164
164
|
|
|
165
165
|
addNodeElement( 'scriptableValue', scriptableValue );
|
|
166
166
|
|
|
167
|
-
addNodeClass( ScriptableValueNode );
|
|
167
|
+
addNodeClass( 'ScriptableValueNode', ScriptableValueNode );
|
|
@@ -20,7 +20,7 @@ class ContextNode extends Node {
|
|
|
20
20
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
setup( builder ) {
|
|
24
24
|
|
|
25
25
|
const previousContext = builder.getContext();
|
|
26
26
|
|
|
@@ -58,4 +58,4 @@ export const label = ( node, name ) => context( node, { label: name } );
|
|
|
58
58
|
addNodeElement( 'context', context );
|
|
59
59
|
addNodeElement( 'label', label );
|
|
60
60
|
|
|
61
|
-
addNodeClass( ContextNode );
|
|
61
|
+
addNodeClass( 'ContextNode', ContextNode );
|
|
@@ -28,7 +28,7 @@ class Node extends EventDispatcher {
|
|
|
28
28
|
|
|
29
29
|
get type() {
|
|
30
30
|
|
|
31
|
-
return this.constructor.
|
|
31
|
+
return this.constructor.type;
|
|
32
32
|
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -40,6 +40,12 @@ class Node extends EventDispatcher {
|
|
|
40
40
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
updateReference() {
|
|
44
|
+
|
|
45
|
+
return this;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
43
49
|
isGlobal( /*builder*/ ) {
|
|
44
50
|
|
|
45
51
|
return false;
|
|
@@ -119,7 +125,7 @@ class Node extends EventDispatcher {
|
|
|
119
125
|
|
|
120
126
|
}
|
|
121
127
|
|
|
122
|
-
|
|
128
|
+
getShared( builder ) {
|
|
123
129
|
|
|
124
130
|
const hash = this.getHash( builder );
|
|
125
131
|
const nodeFromHash = builder.getNodeFromHash( hash );
|
|
@@ -128,7 +134,7 @@ class Node extends EventDispatcher {
|
|
|
128
134
|
|
|
129
135
|
}
|
|
130
136
|
|
|
131
|
-
|
|
137
|
+
setup( builder ) {
|
|
132
138
|
|
|
133
139
|
const nodeProperties = builder.getNodeProperties( this );
|
|
134
140
|
|
|
@@ -143,6 +149,14 @@ class Node extends EventDispatcher {
|
|
|
143
149
|
|
|
144
150
|
}
|
|
145
151
|
|
|
152
|
+
construct( builder ) { // @deprecated, r157
|
|
153
|
+
|
|
154
|
+
console.warn( 'THREE.Node: construct() is deprecated. Use setup() instead.' );
|
|
155
|
+
|
|
156
|
+
return this.setup( builder );
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
146
160
|
analyze( builder ) {
|
|
147
161
|
|
|
148
162
|
const nodeData = builder.getDataFromNode( this );
|
|
@@ -194,7 +208,7 @@ class Node extends EventDispatcher {
|
|
|
194
208
|
|
|
195
209
|
build( builder, output = null ) {
|
|
196
210
|
|
|
197
|
-
const refNode = this.
|
|
211
|
+
const refNode = this.getShared( builder );
|
|
198
212
|
|
|
199
213
|
if ( this !== refNode ) {
|
|
200
214
|
|
|
@@ -206,7 +220,7 @@ class Node extends EventDispatcher {
|
|
|
206
220
|
builder.addChain( this );
|
|
207
221
|
|
|
208
222
|
/* Build stages expected results:
|
|
209
|
-
- "
|
|
223
|
+
- "setup" -> Node
|
|
210
224
|
- "analyze" -> null
|
|
211
225
|
- "generate" -> String
|
|
212
226
|
*/
|
|
@@ -214,18 +228,18 @@ class Node extends EventDispatcher {
|
|
|
214
228
|
|
|
215
229
|
const buildStage = builder.getBuildStage();
|
|
216
230
|
|
|
217
|
-
if ( buildStage === '
|
|
231
|
+
if ( buildStage === 'setup' ) {
|
|
218
232
|
|
|
219
233
|
const properties = builder.getNodeProperties( this );
|
|
220
234
|
|
|
221
235
|
if ( properties.initialized !== true || builder.context.tempRead === false ) {
|
|
222
236
|
|
|
223
|
-
const
|
|
237
|
+
const stackNodesBeforeSetup = builder.stack.nodes.length;
|
|
224
238
|
|
|
225
239
|
properties.initialized = true;
|
|
226
|
-
properties.outputNode = this.
|
|
240
|
+
properties.outputNode = this.setup( builder );
|
|
227
241
|
|
|
228
|
-
if ( properties.outputNode !== null && builder.stack.nodes.length !==
|
|
242
|
+
if ( properties.outputNode !== null && builder.stack.nodes.length !== stackNodesBeforeSetup ) {
|
|
229
243
|
|
|
230
244
|
properties.outputNode = builder.stack;
|
|
231
245
|
|
|
@@ -448,12 +462,13 @@ class Node extends EventDispatcher {
|
|
|
448
462
|
|
|
449
463
|
export default Node;
|
|
450
464
|
|
|
451
|
-
export function addNodeClass( nodeClass ) {
|
|
465
|
+
export function addNodeClass( type, nodeClass ) {
|
|
452
466
|
|
|
453
|
-
if ( typeof nodeClass !== 'function' || !
|
|
454
|
-
if ( NodeClasses.has(
|
|
467
|
+
if ( typeof nodeClass !== 'function' || ! type ) throw new Error( `Node class ${ type } is not a class` );
|
|
468
|
+
if ( NodeClasses.has( type ) ) throw new Error( `Redefinition of node class ${ type }` );
|
|
455
469
|
|
|
456
|
-
NodeClasses.set(
|
|
470
|
+
NodeClasses.set( type, nodeClass );
|
|
471
|
+
nodeClass.type = type;
|
|
457
472
|
|
|
458
473
|
}
|
|
459
474
|
|
|
@@ -50,10 +50,10 @@ const toFloat = ( value ) => {
|
|
|
50
50
|
|
|
51
51
|
class NodeBuilder {
|
|
52
52
|
|
|
53
|
-
constructor( object, renderer, parser, scene = null ) {
|
|
53
|
+
constructor( object, renderer, parser, scene = null, material = null ) {
|
|
54
54
|
|
|
55
55
|
this.object = object;
|
|
56
|
-
this.material = ( object && object.material ) || null;
|
|
56
|
+
this.material = material || ( object && object.material ) || null;
|
|
57
57
|
this.geometry = ( object && object.geometry ) || null;
|
|
58
58
|
this.renderer = renderer;
|
|
59
59
|
this.parser = parser;
|
|
@@ -124,20 +124,6 @@ class NodeBuilder {
|
|
|
124
124
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
createBindings() {
|
|
128
|
-
|
|
129
|
-
const bindingsArray = [];
|
|
130
|
-
|
|
131
|
-
for ( const binding of this.getBindings() ) {
|
|
132
|
-
|
|
133
|
-
bindingsArray.push( binding.clone() );
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return bindingsArray;
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
|
|
141
127
|
getBindings() {
|
|
142
128
|
|
|
143
129
|
let bindingsArray = this.bindingsArray;
|
|
@@ -959,7 +945,7 @@ class NodeBuilder {
|
|
|
959
945
|
|
|
960
946
|
build() {
|
|
961
947
|
|
|
962
|
-
//
|
|
948
|
+
// setup() -> stage 1: create possible new nodes and returns an output reference node
|
|
963
949
|
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
964
950
|
// generate() -> stage 3: generate shader
|
|
965
951
|
|
|
@@ -12,10 +12,8 @@ class NodeFrame {
|
|
|
12
12
|
|
|
13
13
|
this.startTime = null;
|
|
14
14
|
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.renderMap = new WeakMap();
|
|
18
|
-
this.renderBeforeMap = new WeakMap();
|
|
15
|
+
this.updateMap = new WeakMap();
|
|
16
|
+
this.updateBeforeMap = new WeakMap();
|
|
19
17
|
|
|
20
18
|
this.renderer = null;
|
|
21
19
|
this.material = null;
|
|
@@ -25,15 +23,37 @@ class NodeFrame {
|
|
|
25
23
|
|
|
26
24
|
}
|
|
27
25
|
|
|
26
|
+
_getMaps( referenceMap, nodeRef ) {
|
|
27
|
+
|
|
28
|
+
let maps = referenceMap.get( nodeRef );
|
|
29
|
+
|
|
30
|
+
if ( maps === undefined ) {
|
|
31
|
+
|
|
32
|
+
maps = {
|
|
33
|
+
renderMap: new WeakMap(),
|
|
34
|
+
frameMap: new WeakMap()
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
referenceMap.set( nodeRef, maps );
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return maps;
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
28
45
|
updateBeforeNode( node ) {
|
|
29
46
|
|
|
30
47
|
const updateType = node.getUpdateBeforeType();
|
|
48
|
+
const reference = node.updateReference( this );
|
|
49
|
+
|
|
50
|
+
const { frameMap, renderMap } = this._getMaps( this.updateBeforeMap, reference );
|
|
31
51
|
|
|
32
52
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
33
53
|
|
|
34
|
-
if (
|
|
54
|
+
if ( frameMap.get( node ) !== this.frameId ) {
|
|
35
55
|
|
|
36
|
-
|
|
56
|
+
frameMap.set( node, this.frameId );
|
|
37
57
|
|
|
38
58
|
node.updateBefore( this );
|
|
39
59
|
|
|
@@ -41,10 +61,10 @@ class NodeFrame {
|
|
|
41
61
|
|
|
42
62
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
43
63
|
|
|
44
|
-
if (
|
|
64
|
+
if ( renderMap.get( node ) !== this.renderId || frameMap.get( node ) !== this.frameId ) {
|
|
45
65
|
|
|
46
|
-
|
|
47
|
-
|
|
66
|
+
renderMap.set( node, this.renderId );
|
|
67
|
+
frameMap.set( node, this.frameId );
|
|
48
68
|
|
|
49
69
|
node.updateBefore( this );
|
|
50
70
|
|
|
@@ -61,12 +81,15 @@ class NodeFrame {
|
|
|
61
81
|
updateNode( node ) {
|
|
62
82
|
|
|
63
83
|
const updateType = node.getUpdateType();
|
|
84
|
+
const reference = node.updateReference( this );
|
|
85
|
+
|
|
86
|
+
const { frameMap, renderMap } = this._getMaps( this.updateMap, reference );
|
|
64
87
|
|
|
65
88
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
66
89
|
|
|
67
|
-
if (
|
|
90
|
+
if ( frameMap.get( node ) !== this.frameId ) {
|
|
68
91
|
|
|
69
|
-
|
|
92
|
+
frameMap.set( node, this.frameId );
|
|
70
93
|
|
|
71
94
|
node.update( this );
|
|
72
95
|
|
|
@@ -74,10 +97,10 @@ class NodeFrame {
|
|
|
74
97
|
|
|
75
98
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
76
99
|
|
|
77
|
-
if (
|
|
100
|
+
if ( renderMap.get( node ) !== this.renderId || frameMap.get( node ) !== this.frameId ) {
|
|
78
101
|
|
|
79
|
-
|
|
80
|
-
|
|
102
|
+
renderMap.set( node, this.renderId );
|
|
103
|
+
frameMap.set( node, this.frameId );
|
|
81
104
|
|
|
82
105
|
node.update( this );
|
|
83
106
|
|
|
@@ -13,9 +13,9 @@ class OutputStructNode extends Node {
|
|
|
13
13
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
setup( builder ) {
|
|
17
17
|
|
|
18
|
-
super.
|
|
18
|
+
super.setup( builder );
|
|
19
19
|
|
|
20
20
|
const members = this.members;
|
|
21
21
|
const types = [];
|
|
@@ -33,15 +33,19 @@ class OutputStructNode extends Node {
|
|
|
33
33
|
generate( builder, output ) {
|
|
34
34
|
|
|
35
35
|
const nodeVar = builder.getVarFromNode( this, this.nodeType );
|
|
36
|
+
nodeVar.isOutputStructVar = true;
|
|
37
|
+
|
|
36
38
|
const propertyName = builder.getPropertyName( nodeVar );
|
|
37
39
|
|
|
38
40
|
const members = this.members;
|
|
39
41
|
|
|
42
|
+
const structPrefix = propertyName !== '' ? propertyName + '.' : '';
|
|
43
|
+
|
|
40
44
|
for ( let i = 0; i < members.length; i++ ) {
|
|
41
45
|
|
|
42
46
|
const snippet = members[ i ].build( builder, output );
|
|
43
47
|
|
|
44
|
-
builder.addLineFlowCode( `${
|
|
48
|
+
builder.addLineFlowCode( `${structPrefix}m${i} = ${snippet}` );
|
|
45
49
|
|
|
46
50
|
}
|
|
47
51
|
|
|
@@ -55,4 +59,4 @@ export default OutputStructNode;
|
|
|
55
59
|
|
|
56
60
|
export const outputStruct = nodeProxy( OutputStructNode );
|
|
57
61
|
|
|
58
|
-
addNodeClass( OutputStructNode );
|
|
62
|
+
addNodeClass( 'OutputStructNode', OutputStructNode );
|
|
@@ -57,7 +57,7 @@ export const iridescenceThickness = nodeImmutable( PropertyNode, 'float', 'Iride
|
|
|
57
57
|
export const specularColor = nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
|
|
58
58
|
export const shininess = nodeImmutable( PropertyNode, 'float', 'Shininess' );
|
|
59
59
|
export const output = nodeImmutable( PropertyNode, 'vec4', 'Output' );
|
|
60
|
-
export const dashSize = nodeImmutable( PropertyNode, 'float', '
|
|
61
|
-
export const gapSize= nodeImmutable( PropertyNode, 'float', 'gapSize' );
|
|
60
|
+
export const dashSize = nodeImmutable( PropertyNode, 'float', 'dashSize' );
|
|
61
|
+
export const gapSize = nodeImmutable( PropertyNode, 'float', 'gapSize' );
|
|
62
62
|
|
|
63
|
-
addNodeClass( PropertyNode );
|
|
63
|
+
addNodeClass( 'PropertyNode', PropertyNode );
|
|
@@ -39,6 +39,8 @@ class UniformNode extends InputNode {
|
|
|
39
39
|
const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, builder.context.label );
|
|
40
40
|
const propertyName = builder.getPropertyName( nodeUniform );
|
|
41
41
|
|
|
42
|
+
if ( builder.context.label !== undefined ) delete builder.context.label;
|
|
43
|
+
|
|
42
44
|
return builder.format( propertyName, type, output );
|
|
43
45
|
|
|
44
46
|
}
|
|
@@ -58,4 +60,4 @@ export const uniform = ( arg1, arg2 ) => {
|
|
|
58
60
|
|
|
59
61
|
};
|
|
60
62
|
|
|
61
|
-
addNodeClass( UniformNode );
|
|
63
|
+
addNodeClass( 'UniformNode', UniformNode );
|
|
@@ -22,6 +22,6 @@ export const NodeType = {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
export const defaultShaderStages = [ 'fragment', 'vertex' ];
|
|
25
|
-
export const defaultBuildStages = [ '
|
|
25
|
+
export const defaultBuildStages = [ 'setup', 'analyze', 'generate' ];
|
|
26
26
|
export const shaderStages = [ ...defaultShaderStages, 'compute' ];
|
|
27
27
|
export const vectorComponents = [ 'x', 'y', 'z', 'w' ];
|
|
@@ -48,7 +48,7 @@ class BlendModeNode extends TempNode {
|
|
|
48
48
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
setup() {
|
|
52
52
|
|
|
53
53
|
const { blendMode, baseNode, blendNode } = this;
|
|
54
54
|
const params = { base: baseNode, blend: blendNode };
|
|
@@ -96,4 +96,4 @@ addNodeElement( 'dodge', dodge );
|
|
|
96
96
|
addNodeElement( 'overlay', overlay );
|
|
97
97
|
addNodeElement( 'screen', screen );
|
|
98
98
|
|
|
99
|
-
addNodeClass( BlendModeNode );
|
|
99
|
+
addNodeClass( 'BlendModeNode', BlendModeNode );
|
|
@@ -55,7 +55,7 @@ class BumpMapNode extends TempNode {
|
|
|
55
55
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
setup() {
|
|
59
59
|
|
|
60
60
|
const bumpScale = this.scaleNode !== null ? this.scaleNode : 1;
|
|
61
61
|
const dHdxy = dHdxy_fwd( { bumpTexture: this.texture, bumpScale } );
|
|
@@ -74,4 +74,4 @@ export default BumpMapNode;
|
|
|
74
74
|
|
|
75
75
|
export const bumpMap = nodeProxy( BumpMapNode );
|
|
76
76
|
|
|
77
|
-
addNodeClass( BumpMapNode );
|
|
77
|
+
addNodeClass( 'BumpMapNode', BumpMapNode );
|
|
@@ -48,7 +48,7 @@ class ColorAdjustmentNode extends TempNode {
|
|
|
48
48
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
setup() {
|
|
52
52
|
|
|
53
53
|
const { method, colorNode, adjustmentNode } = this;
|
|
54
54
|
|
|
@@ -97,4 +97,4 @@ addNodeElement( 'saturation', saturation );
|
|
|
97
97
|
addNodeElement( 'vibrance', vibrance );
|
|
98
98
|
addNodeElement( 'hue', hue );
|
|
99
99
|
|
|
100
|
-
addNodeClass( ColorAdjustmentNode );
|
|
100
|
+
addNodeClass( 'ColorAdjustmentNode', ColorAdjustmentNode );
|
|
@@ -70,7 +70,7 @@ class ColorSpaceNode extends TempNode {
|
|
|
70
70
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
setup() {
|
|
74
74
|
|
|
75
75
|
const { method, node } = this;
|
|
76
76
|
|
|
@@ -105,4 +105,4 @@ addNodeElement( 'sRGBToLinear', sRGBToLinear );
|
|
|
105
105
|
addNodeElement( 'linearToColorSpace', linearToColorSpace );
|
|
106
106
|
addNodeElement( 'colorSpaceToLinear', colorSpaceToLinear );
|
|
107
107
|
|
|
108
|
-
addNodeClass( ColorSpaceNode );
|
|
108
|
+
addNodeClass( 'ColorSpaceNode', ColorSpaceNode );
|
|
@@ -52,7 +52,7 @@ class NormalMapNode extends TempNode {
|
|
|
52
52
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
setup( builder ) {
|
|
56
56
|
|
|
57
57
|
const { normalMapType, scaleNode } = this;
|
|
58
58
|
|
|
@@ -103,4 +103,4 @@ export const normalMap = nodeProxy( NormalMapNode );
|
|
|
103
103
|
|
|
104
104
|
export const TBNViewMatrix = mat3( tangentView, bitangentView, normalView );
|
|
105
105
|
|
|
106
|
-
addNodeClass( NormalMapNode );
|
|
106
|
+
addNodeClass( 'NormalMapNode', NormalMapNode );
|
|
@@ -13,7 +13,7 @@ class PosterizeNode extends TempNode {
|
|
|
13
13
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
setup() {
|
|
17
17
|
|
|
18
18
|
const { sourceNode, stepsNode } = this;
|
|
19
19
|
|
|
@@ -29,4 +29,4 @@ export const posterize = nodeProxy( PosterizeNode );
|
|
|
29
29
|
|
|
30
30
|
addNodeElement( 'posterize', posterize );
|
|
31
31
|
|
|
32
|
-
addNodeClass( PosterizeNode );
|
|
32
|
+
addNodeClass( 'PosterizeNode', PosterizeNode );
|
|
@@ -104,7 +104,7 @@ class ToneMappingNode extends TempNode {
|
|
|
104
104
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
setup( builder ) {
|
|
108
108
|
|
|
109
109
|
const colorNode = this.colorNode || builder.context.color;
|
|
110
110
|
const toneMapping = this.toneMapping;
|
|
@@ -138,4 +138,4 @@ export default ToneMappingNode;
|
|
|
138
138
|
|
|
139
139
|
export const toneMapping = ( mapping, exposure, color ) => nodeObject( new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) ) );
|
|
140
140
|
|
|
141
|
-
addNodeClass( ToneMappingNode );
|
|
141
|
+
addNodeClass( 'ToneMappingNode', ToneMappingNode );
|
|
@@ -17,7 +17,7 @@ class ViewportDepthNode extends Node {
|
|
|
17
17
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
setup( /*builder*/ ) {
|
|
21
21
|
|
|
22
22
|
const { scope } = this;
|
|
23
23
|
|
|
@@ -66,4 +66,4 @@ export default ViewportDepthNode;
|
|
|
66
66
|
export const depth = nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
|
|
67
67
|
export const depthTexture = nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_TEXTURE );
|
|
68
68
|
|
|
69
|
-
addNodeClass( ViewportDepthNode );
|
|
69
|
+
addNodeClass( 'ViewportDepthNode', ViewportDepthNode );
|