super-three 0.162.0 → 0.163.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.
- package/build/three.cjs +407 -1014
- package/build/three.module.js +406 -1013
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +21 -4
- package/examples/jsm/exporters/USDZExporter.js +15 -0
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +89 -19
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +6 -0
- package/examples/jsm/loaders/KTX2Loader.js +2 -6
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +6 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +30 -7
- package/examples/jsm/nodes/core/Node.js +55 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +21 -16
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
- package/examples/jsm/nodes/materials/NodeMaterial.js +33 -11
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +1 -1
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +5 -5
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +4 -4
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +25 -8
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +5 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +148 -24
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +3 -3
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +43 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +54 -25
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +5 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +25 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/package.json +1 -1
- package/src/Three.js +0 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/Object3D.js +10 -7
- package/src/extras/PMREMGenerator.js +9 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +4 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/renderers/WebGLRenderer.js +55 -114
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLCapabilities.js +2 -12
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +2 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +18 -47
- package/src/renderers/webgl/WebGLPrograms.js +20 -32
- package/src/renderers/webgl/WebGLRenderStates.js +8 -6
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +75 -237
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +6 -57
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/src/renderers/WebGL1Renderer.js +0 -7
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ReferenceNode from './ReferenceNode.js';
|
|
2
|
+
import { addNodeClass } from '../core/Node.js';
|
|
3
|
+
import { nodeObject } from '../shadernode/ShaderNode.js';
|
|
4
|
+
|
|
5
|
+
class RendererReferenceNode extends ReferenceNode {
|
|
6
|
+
|
|
7
|
+
constructor( property, inputType, renderer = null ) {
|
|
8
|
+
|
|
9
|
+
super( property, inputType, renderer );
|
|
10
|
+
|
|
11
|
+
this.renderer = renderer;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
updateReference( state ) {
|
|
16
|
+
|
|
17
|
+
this.reference = this.renderer !== null ? this.renderer : state.renderer;
|
|
18
|
+
|
|
19
|
+
return this.reference;
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default RendererReferenceNode;
|
|
26
|
+
|
|
27
|
+
export const rendererReference = ( name, type, renderer ) => nodeObject( new RendererReferenceNode( name, type, renderer ) );
|
|
28
|
+
|
|
29
|
+
addNodeClass( 'RendererReferenceNode', RendererReferenceNode );
|
|
@@ -25,10 +25,34 @@ class TextureNode extends UniformNode {
|
|
|
25
25
|
this.updateMatrix = false;
|
|
26
26
|
this.updateType = NodeUpdateType.NONE;
|
|
27
27
|
|
|
28
|
+
this.referenceNode = null;
|
|
29
|
+
|
|
30
|
+
this._value = value;
|
|
31
|
+
|
|
28
32
|
this.setUpdateMatrix( uvNode === null );
|
|
29
33
|
|
|
30
34
|
}
|
|
31
35
|
|
|
36
|
+
set value( value ) {
|
|
37
|
+
|
|
38
|
+
if ( this.referenceNode ) {
|
|
39
|
+
|
|
40
|
+
this.referenceNode.value = value;
|
|
41
|
+
|
|
42
|
+
} else {
|
|
43
|
+
|
|
44
|
+
this._value = value;
|
|
45
|
+
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
get value() {
|
|
51
|
+
|
|
52
|
+
return this.referenceNode ? this.referenceNode.value : this._value;
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
32
56
|
getUniformHash( /*builder*/ ) {
|
|
33
57
|
|
|
34
58
|
return this.value.uuid;
|
|
@@ -55,7 +79,7 @@ class TextureNode extends UniformNode {
|
|
|
55
79
|
|
|
56
80
|
}
|
|
57
81
|
|
|
58
|
-
|
|
82
|
+
updateReference( /*state*/ ) {
|
|
59
83
|
|
|
60
84
|
return this.value;
|
|
61
85
|
|
|
@@ -126,12 +150,6 @@ class TextureNode extends UniformNode {
|
|
|
126
150
|
|
|
127
151
|
}
|
|
128
152
|
|
|
129
|
-
if ( levelNode !== null && builder.context.getTextureLevelAlgorithm !== undefined ) {
|
|
130
|
-
|
|
131
|
-
levelNode = builder.context.getTextureLevelAlgorithm( this, levelNode );
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
153
|
//
|
|
136
154
|
|
|
137
155
|
properties.uvNode = uvNode;
|
|
@@ -264,6 +282,7 @@ class TextureNode extends UniformNode {
|
|
|
264
282
|
|
|
265
283
|
const textureNode = this.clone();
|
|
266
284
|
textureNode.uvNode = uvNode;
|
|
285
|
+
textureNode.referenceNode = this;
|
|
267
286
|
|
|
268
287
|
return nodeObject( textureNode );
|
|
269
288
|
|
|
@@ -273,6 +292,7 @@ class TextureNode extends UniformNode {
|
|
|
273
292
|
|
|
274
293
|
const textureNode = this.clone();
|
|
275
294
|
textureNode.levelNode = levelNode.mul( maxMipLevel( textureNode ) );
|
|
295
|
+
textureNode.referenceNode = this;
|
|
276
296
|
|
|
277
297
|
return nodeObject( textureNode );
|
|
278
298
|
|
|
@@ -282,6 +302,7 @@ class TextureNode extends UniformNode {
|
|
|
282
302
|
|
|
283
303
|
const textureNode = this.clone();
|
|
284
304
|
textureNode.levelNode = levelNode;
|
|
305
|
+
textureNode.referenceNode = this;
|
|
285
306
|
|
|
286
307
|
return textureNode;
|
|
287
308
|
|
|
@@ -297,6 +318,7 @@ class TextureNode extends UniformNode {
|
|
|
297
318
|
|
|
298
319
|
const textureNode = this.clone();
|
|
299
320
|
textureNode.compareNode = nodeObject( compareNode );
|
|
321
|
+
textureNode.referenceNode = this;
|
|
300
322
|
|
|
301
323
|
return nodeObject( textureNode );
|
|
302
324
|
|
|
@@ -306,6 +328,7 @@ class TextureNode extends UniformNode {
|
|
|
306
328
|
|
|
307
329
|
const textureNode = this.clone();
|
|
308
330
|
textureNode.depthNode = nodeObject( depthNode );
|
|
331
|
+
textureNode.referenceNode = this;
|
|
309
332
|
|
|
310
333
|
return nodeObject( textureNode );
|
|
311
334
|
|
|
@@ -20,18 +20,60 @@ class Node extends EventDispatcher {
|
|
|
20
20
|
|
|
21
21
|
this.uuid = MathUtils.generateUUID();
|
|
22
22
|
|
|
23
|
+
this.version = 0;
|
|
24
|
+
|
|
25
|
+
this._cacheKey = null;
|
|
26
|
+
this._cacheKeyVersion = 0;
|
|
27
|
+
|
|
23
28
|
this.isNode = true;
|
|
24
29
|
|
|
25
30
|
Object.defineProperty( this, 'id', { value: _nodeId ++ } );
|
|
26
31
|
|
|
27
32
|
}
|
|
28
33
|
|
|
34
|
+
set needsUpdate( value ) {
|
|
35
|
+
|
|
36
|
+
if ( value === true ) {
|
|
37
|
+
|
|
38
|
+
this.version ++;
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
29
44
|
get type() {
|
|
30
45
|
|
|
31
46
|
return this.constructor.type;
|
|
32
47
|
|
|
33
48
|
}
|
|
34
49
|
|
|
50
|
+
onUpdate( callback, updateType ) {
|
|
51
|
+
|
|
52
|
+
this.updateType = updateType;
|
|
53
|
+
this.update = callback.bind( this.getSelf() );
|
|
54
|
+
|
|
55
|
+
return this;
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
onFrameUpdate( callback ) {
|
|
60
|
+
|
|
61
|
+
return this.onUpdate( callback, NodeUpdateType.FRAME );
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
onRenderUpdate( callback ) {
|
|
66
|
+
|
|
67
|
+
return this.onUpdate( callback, NodeUpdateType.RENDER );
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
onObjectUpdate( callback ) {
|
|
72
|
+
|
|
73
|
+
return this.onUpdate( callback, NodeUpdateType.OBJECT );
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
35
77
|
getSelf() {
|
|
36
78
|
|
|
37
79
|
// Returns non-node object.
|
|
@@ -40,7 +82,7 @@ class Node extends EventDispatcher {
|
|
|
40
82
|
|
|
41
83
|
}
|
|
42
84
|
|
|
43
|
-
|
|
85
|
+
updateReference( /*state*/ ) {
|
|
44
86
|
|
|
45
87
|
return this;
|
|
46
88
|
|
|
@@ -80,9 +122,18 @@ class Node extends EventDispatcher {
|
|
|
80
122
|
|
|
81
123
|
}
|
|
82
124
|
|
|
83
|
-
getCacheKey() {
|
|
125
|
+
getCacheKey( force = false ) {
|
|
126
|
+
|
|
127
|
+
force = force || this.version !== this._cacheKeyVersion;
|
|
128
|
+
|
|
129
|
+
if ( force === true || this._cacheKey === null ) {
|
|
130
|
+
|
|
131
|
+
this._cacheKey = getCacheKey( this, force );
|
|
132
|
+
this._cacheKeyVersion = this.version;
|
|
133
|
+
|
|
134
|
+
}
|
|
84
135
|
|
|
85
|
-
return
|
|
136
|
+
return this._cacheKey;
|
|
86
137
|
|
|
87
138
|
}
|
|
88
139
|
|
|
@@ -231,7 +282,7 @@ class Node extends EventDispatcher {
|
|
|
231
282
|
|
|
232
283
|
if ( buildStage === 'setup' ) {
|
|
233
284
|
|
|
234
|
-
this.
|
|
285
|
+
this.updateReference( builder );
|
|
235
286
|
|
|
236
287
|
const properties = builder.getNodeProperties( this );
|
|
237
288
|
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform
|
|
16
16
|
} from '../../renderers/common/nodes/NodeUniform.js';
|
|
17
17
|
|
|
18
|
-
import { REVISION, RenderTarget,
|
|
18
|
+
import { REVISION, RenderTarget, Color, Vector2, Vector3, Vector4, IntType, UnsignedIntType, Float16BufferAttribute } from 'three';
|
|
19
19
|
|
|
20
20
|
import { stack } from './StackNode.js';
|
|
21
21
|
import { getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js';
|
|
@@ -23,6 +23,8 @@ import { getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js';
|
|
|
23
23
|
import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
|
|
24
24
|
import ChainMap from '../../renderers/common/ChainMap.js';
|
|
25
25
|
|
|
26
|
+
import PMREMGenerator from '../../renderers/common/extras/PMREMGenerator.js';
|
|
27
|
+
|
|
26
28
|
const uniformsGroupCache = new ChainMap();
|
|
27
29
|
|
|
28
30
|
const typeFromLength = new Map( [
|
|
@@ -113,18 +115,26 @@ class NodeBuilder {
|
|
|
113
115
|
|
|
114
116
|
}
|
|
115
117
|
|
|
116
|
-
|
|
118
|
+
createRenderTarget( width, height, options ) {
|
|
117
119
|
|
|
118
120
|
return new RenderTarget( width, height, options );
|
|
119
121
|
|
|
120
122
|
}
|
|
121
123
|
|
|
122
|
-
|
|
124
|
+
createCubeRenderTarget( size, options ) {
|
|
123
125
|
|
|
124
126
|
return new CubeRenderTarget( size, options );
|
|
125
127
|
|
|
126
128
|
}
|
|
127
129
|
|
|
130
|
+
createPMREMGenerator() {
|
|
131
|
+
|
|
132
|
+
// TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support
|
|
133
|
+
|
|
134
|
+
return new PMREMGenerator( this.renderer );
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
128
138
|
includes( node ) {
|
|
129
139
|
|
|
130
140
|
return this.nodes.includes( node );
|
|
@@ -474,25 +484,18 @@ class NodeBuilder {
|
|
|
474
484
|
|
|
475
485
|
}
|
|
476
486
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
let colorSpace;
|
|
487
|
+
getComponentTypeFromTexture( texture ) {
|
|
480
488
|
|
|
481
|
-
|
|
489
|
+
const type = texture.type;
|
|
482
490
|
|
|
483
|
-
|
|
491
|
+
if ( texture.isDataTexture ) {
|
|
484
492
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
colorSpace = map.texture.colorSpace;
|
|
488
|
-
|
|
489
|
-
} else {
|
|
490
|
-
|
|
491
|
-
colorSpace = NoColorSpace;
|
|
493
|
+
if ( type === IntType ) return 'int';
|
|
494
|
+
if ( type === UnsignedIntType ) return 'uint';
|
|
492
495
|
|
|
493
496
|
}
|
|
494
497
|
|
|
495
|
-
return
|
|
498
|
+
return 'float';
|
|
496
499
|
|
|
497
500
|
}
|
|
498
501
|
|
|
@@ -1168,6 +1171,8 @@ class NodeBuilder {
|
|
|
1168
1171
|
|
|
1169
1172
|
createNodeMaterial( type = 'NodeMaterial' ) {
|
|
1170
1173
|
|
|
1174
|
+
// TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support
|
|
1175
|
+
|
|
1171
1176
|
return createNodeMaterialFromType( type );
|
|
1172
1177
|
|
|
1173
1178
|
}
|
|
@@ -45,17 +45,17 @@ class NodeFrame {
|
|
|
45
45
|
updateBeforeNode( node ) {
|
|
46
46
|
|
|
47
47
|
const updateType = node.getUpdateBeforeType();
|
|
48
|
-
const reference = node.
|
|
48
|
+
const reference = node.updateReference( this );
|
|
49
49
|
|
|
50
50
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
51
51
|
|
|
52
52
|
const { frameMap } = this._getMaps( this.updateBeforeMap, reference );
|
|
53
53
|
|
|
54
|
-
if ( frameMap.get(
|
|
54
|
+
if ( frameMap.get( reference ) !== this.frameId ) {
|
|
55
55
|
|
|
56
56
|
if ( node.updateBefore( this ) !== false ) {
|
|
57
57
|
|
|
58
|
-
frameMap.set(
|
|
58
|
+
frameMap.set( reference, this.frameId );
|
|
59
59
|
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -65,11 +65,11 @@ class NodeFrame {
|
|
|
65
65
|
|
|
66
66
|
const { renderMap } = this._getMaps( this.updateBeforeMap, reference );
|
|
67
67
|
|
|
68
|
-
if ( renderMap.get(
|
|
68
|
+
if ( renderMap.get( reference ) !== this.renderId ) {
|
|
69
69
|
|
|
70
70
|
if ( node.updateBefore( this ) !== false ) {
|
|
71
71
|
|
|
72
|
-
renderMap.set(
|
|
72
|
+
renderMap.set( reference, this.renderId );
|
|
73
73
|
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -86,17 +86,17 @@ class NodeFrame {
|
|
|
86
86
|
updateNode( node ) {
|
|
87
87
|
|
|
88
88
|
const updateType = node.getUpdateType();
|
|
89
|
-
const reference = node.
|
|
89
|
+
const reference = node.updateReference( this );
|
|
90
90
|
|
|
91
91
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
92
92
|
|
|
93
93
|
const { frameMap } = this._getMaps( this.updateMap, reference );
|
|
94
94
|
|
|
95
|
-
if ( frameMap.get(
|
|
95
|
+
if ( frameMap.get( reference ) !== this.frameId ) {
|
|
96
96
|
|
|
97
97
|
if ( node.update( this ) !== false ) {
|
|
98
98
|
|
|
99
|
-
frameMap.set(
|
|
99
|
+
frameMap.set( reference, this.frameId );
|
|
100
100
|
|
|
101
101
|
}
|
|
102
102
|
|
|
@@ -106,11 +106,11 @@ class NodeFrame {
|
|
|
106
106
|
|
|
107
107
|
const { renderMap } = this._getMaps( this.updateMap, reference );
|
|
108
108
|
|
|
109
|
-
if ( renderMap.get(
|
|
109
|
+
if ( renderMap.get( reference ) !== this.renderId ) {
|
|
110
110
|
|
|
111
111
|
if ( node.update( this ) !== false ) {
|
|
112
112
|
|
|
113
|
-
renderMap.set(
|
|
113
|
+
renderMap.set( reference, this.renderId );
|
|
114
114
|
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Color, Matrix3, Matrix4, Vector2, Vector3, Vector4 } from 'three';
|
|
2
2
|
|
|
3
|
-
export function getCacheKey( object ) {
|
|
3
|
+
export function getCacheKey( object, force = false ) {
|
|
4
4
|
|
|
5
5
|
let cacheKey = '{';
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ export function getCacheKey( object ) {
|
|
|
12
12
|
|
|
13
13
|
for ( const { property, childNode } of getNodeChildren( object ) ) {
|
|
14
14
|
|
|
15
|
-
cacheKey += ',' + property.slice( 0, - 4 ) + ':' + childNode.getCacheKey();
|
|
15
|
+
cacheKey += ',' + property.slice( 0, - 4 ) + ':' + childNode.getCacheKey( force );
|
|
16
16
|
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -35,6 +35,26 @@ class UniformNode extends InputNode {
|
|
|
35
35
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
onUpdate( callback, updateType ) {
|
|
39
|
+
|
|
40
|
+
const self = this.getSelf();
|
|
41
|
+
|
|
42
|
+
callback = callback.bind( self );
|
|
43
|
+
|
|
44
|
+
return super.onUpdate( ( frame ) => {
|
|
45
|
+
|
|
46
|
+
const value = callback( frame, self );
|
|
47
|
+
|
|
48
|
+
if ( value !== undefined ) {
|
|
49
|
+
|
|
50
|
+
this.value = value;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
}, updateType );
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
38
58
|
generate( builder, output ) {
|
|
39
59
|
|
|
40
60
|
const type = this.getNodeType( builder );
|
|
@@ -66,6 +66,7 @@ class PassNode extends TempNode {
|
|
|
66
66
|
this._depthTextureNode = nodeObject( new PassTextureNode( this, depthTexture ) );
|
|
67
67
|
|
|
68
68
|
this._depthNode = null;
|
|
69
|
+
this._viewZNode = null;
|
|
69
70
|
this._cameraNear = uniform( 0 );
|
|
70
71
|
this._cameraFar = uniform( 0 );
|
|
71
72
|
|
|
@@ -91,6 +92,21 @@ class PassNode extends TempNode {
|
|
|
91
92
|
|
|
92
93
|
}
|
|
93
94
|
|
|
95
|
+
getViewZNode() {
|
|
96
|
+
|
|
97
|
+
if ( this._viewZNode === null ) {
|
|
98
|
+
|
|
99
|
+
const cameraNear = this._cameraNear;
|
|
100
|
+
const cameraFar = this._cameraFar;
|
|
101
|
+
|
|
102
|
+
this._viewZNode = perspectiveDepthToViewZ( this._depthTextureNode, cameraNear, cameraFar );
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return this._viewZNode;
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
94
110
|
getDepthNode() {
|
|
95
111
|
|
|
96
112
|
if ( this._depthNode === null ) {
|
|
@@ -98,7 +114,7 @@ class PassNode extends TempNode {
|
|
|
98
114
|
const cameraNear = this._cameraNear;
|
|
99
115
|
const cameraFar = this._cameraFar;
|
|
100
116
|
|
|
101
|
-
this._depthNode = viewZToOrthographicDepth(
|
|
117
|
+
this._depthNode = viewZToOrthographicDepth( this.getViewZNode(), cameraNear, cameraFar );
|
|
102
118
|
|
|
103
119
|
}
|
|
104
120
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { addNodeClass } from '../core/Node.js';
|
|
3
|
-
import { tslFn, nodeObject, float, mat3, vec3 } from '../shadernode/ShaderNode.js';
|
|
4
|
-
|
|
5
|
-
import { NoToneMapping, LinearToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping, AgXToneMapping } from 'three';
|
|
3
|
+
import { addNodeElement, tslFn, nodeObject, float, mat3, vec3 } from '../shadernode/ShaderNode.js';
|
|
4
|
+
import { rendererReference } from '../accessors/RendererReferenceNode.js';
|
|
6
5
|
import { clamp, log2, max, pow } from '../math/MathNode.js';
|
|
7
6
|
import { mul } from '../math/OperatorNode.js';
|
|
8
7
|
|
|
8
|
+
import { NoToneMapping, LinearToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping, AgXToneMapping } from 'three';
|
|
9
|
+
|
|
9
10
|
// exposure only
|
|
10
11
|
const LinearToneMappingNode = tslFn( ( { color, exposure } ) => {
|
|
11
12
|
|
|
@@ -127,7 +128,7 @@ const toneMappingLib = {
|
|
|
127
128
|
|
|
128
129
|
class ToneMappingNode extends TempNode {
|
|
129
130
|
|
|
130
|
-
constructor( toneMapping = NoToneMapping, exposureNode =
|
|
131
|
+
constructor( toneMapping = NoToneMapping, exposureNode = toneMappingExposure, colorNode = null ) {
|
|
131
132
|
|
|
132
133
|
super( 'vec3' );
|
|
133
134
|
|
|
@@ -180,5 +181,8 @@ class ToneMappingNode extends TempNode {
|
|
|
180
181
|
export default ToneMappingNode;
|
|
181
182
|
|
|
182
183
|
export const toneMapping = ( mapping, exposure, color ) => nodeObject( new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) ) );
|
|
184
|
+
export const toneMappingExposure = rendererReference( 'toneMappingExposure', 'float' );
|
|
185
|
+
|
|
186
|
+
addNodeElement( 'toneMapping', ( color, mapping, exposure ) => toneMapping( mapping, exposure, color ) );
|
|
183
187
|
|
|
184
188
|
addNodeClass( 'ToneMappingNode', ToneMappingNode );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import FogNode from './FogNode.js';
|
|
2
|
-
import { positionView } from '../accessors/PositionNode.js';
|
|
3
2
|
import { addNodeClass } from '../core/Node.js';
|
|
4
3
|
import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
|
|
5
4
|
|
|
@@ -15,12 +14,12 @@ class FogExp2Node extends FogNode {
|
|
|
15
14
|
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
setup() {
|
|
17
|
+
setup( builder ) {
|
|
19
18
|
|
|
20
|
-
const
|
|
21
|
-
const
|
|
19
|
+
const viewZ = this.getViewZNode( builder );
|
|
20
|
+
const density = this.densityNode;
|
|
22
21
|
|
|
23
|
-
return
|
|
22
|
+
return density.mul( density, viewZ, viewZ ).negate().exp().oneMinus();
|
|
24
23
|
|
|
25
24
|
}
|
|
26
25
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node, { addNodeClass } from '../core/Node.js';
|
|
2
|
-
import {
|
|
2
|
+
import { positionView } from '../accessors/PositionNode.js';
|
|
3
3
|
import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
|
|
4
4
|
|
|
5
5
|
class FogNode extends Node {
|
|
@@ -15,9 +15,19 @@ class FogNode extends Node {
|
|
|
15
15
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
getViewZNode( builder ) {
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
let viewZ;
|
|
21
|
+
|
|
22
|
+
const getViewZ = builder.context.getViewZ;
|
|
23
|
+
|
|
24
|
+
if ( getViewZ !== undefined ) {
|
|
25
|
+
|
|
26
|
+
viewZ = getViewZ( this );
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return ( viewZ || positionView.z ).negate();
|
|
21
31
|
|
|
22
32
|
}
|
|
23
33
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import FogNode from './FogNode.js';
|
|
2
2
|
import { smoothstep } from '../math/MathNode.js';
|
|
3
|
-
import { positionView } from '../accessors/PositionNode.js';
|
|
4
3
|
import { addNodeClass } from '../core/Node.js';
|
|
5
4
|
import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
|
|
6
5
|
|
|
@@ -17,9 +16,11 @@ class FogRangeNode extends FogNode {
|
|
|
17
16
|
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
setup() {
|
|
19
|
+
setup( builder ) {
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
const viewZ = this.getViewZNode( builder );
|
|
22
|
+
|
|
23
|
+
return smoothstep( this.nearNode, this.farNode, viewZ );
|
|
23
24
|
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -63,7 +63,7 @@ class AnalyticLightNode extends LightingNode {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
const shadow = this.light.shadow;
|
|
66
|
-
const rtt = builder.
|
|
66
|
+
const rtt = builder.createRenderTarget( shadow.mapSize.width, shadow.mapSize.height );
|
|
67
67
|
|
|
68
68
|
const depthTexture = new DepthTexture();
|
|
69
69
|
depthTexture.minFilter = NearestFilter;
|