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.
Files changed (122) hide show
  1. package/build/three.cjs +407 -1014
  2. package/build/three.module.js +406 -1013
  3. package/build/three.module.min.js +1 -1
  4. package/examples/jsm/controls/TransformControls.js +3 -3
  5. package/examples/jsm/exporters/GLTFExporter.js +21 -4
  6. package/examples/jsm/exporters/USDZExporter.js +15 -0
  7. package/examples/jsm/geometries/TextGeometry.js +10 -2
  8. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  9. package/examples/jsm/libs/fflate.module.js +694 -496
  10. package/examples/jsm/lines/LineMaterial.js +0 -2
  11. package/examples/jsm/loaders/3MFLoader.js +2 -0
  12. package/examples/jsm/loaders/EXRLoader.js +89 -19
  13. package/examples/jsm/loaders/FBXLoader.js +1 -1
  14. package/examples/jsm/loaders/GLTFLoader.js +6 -0
  15. package/examples/jsm/loaders/KTX2Loader.js +2 -6
  16. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  17. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  18. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  19. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  20. package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
  21. package/examples/jsm/nodes/Nodes.js +6 -1
  22. package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
  23. package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
  24. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
  25. package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
  26. package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
  27. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  28. package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
  29. package/examples/jsm/nodes/accessors/TextureNode.js +30 -7
  30. package/examples/jsm/nodes/core/Node.js +55 -4
  31. package/examples/jsm/nodes/core/NodeBuilder.js +21 -16
  32. package/examples/jsm/nodes/core/NodeFrame.js +10 -10
  33. package/examples/jsm/nodes/core/NodeUtils.js +2 -2
  34. package/examples/jsm/nodes/core/UniformNode.js +20 -0
  35. package/examples/jsm/nodes/display/PassNode.js +17 -1
  36. package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
  37. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
  38. package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
  39. package/examples/jsm/nodes/fog/FogNode.js +13 -3
  40. package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
  41. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  42. package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
  43. package/examples/jsm/nodes/materials/NodeMaterial.js +33 -11
  44. package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
  45. package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
  46. package/examples/jsm/nodes/shadernode/ShaderNode.js +1 -1
  47. package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
  48. package/examples/jsm/objects/QuadMesh.js +7 -23
  49. package/examples/jsm/physics/RapierPhysics.js +4 -4
  50. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  51. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  52. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  53. package/examples/jsm/postprocessing/SSAOPass.js +0 -3
  54. package/examples/jsm/renderers/common/Animation.js +3 -0
  55. package/examples/jsm/renderers/common/Background.js +5 -5
  56. package/examples/jsm/renderers/common/Info.js +11 -19
  57. package/examples/jsm/renderers/common/PostProcessing.js +12 -4
  58. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  59. package/examples/jsm/renderers/common/RenderObject.js +4 -4
  60. package/examples/jsm/renderers/common/RenderObjects.js +1 -1
  61. package/examples/jsm/renderers/common/Renderer.js +25 -8
  62. package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
  63. package/examples/jsm/renderers/common/nodes/Nodes.js +5 -18
  64. package/examples/jsm/renderers/webgl/WebGLBackend.js +148 -24
  65. package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
  66. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +3 -3
  67. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
  68. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
  69. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +43 -0
  70. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -2
  71. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
  72. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
  73. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +54 -25
  74. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +5 -3
  75. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +25 -0
  76. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
  77. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
  78. package/examples/jsm/utils/GPUStatsPanel.js +10 -45
  79. package/examples/jsm/utils/TextureUtils.js +1 -1
  80. package/package.json +1 -1
  81. package/src/Three.js +0 -1
  82. package/src/animation/AnimationClip.js +1 -1
  83. package/src/constants.js +3 -3
  84. package/src/core/Object3D.js +10 -7
  85. package/src/extras/PMREMGenerator.js +9 -0
  86. package/src/loaders/ObjectLoader.js +2 -0
  87. package/src/materials/ShaderMaterial.js +0 -4
  88. package/src/math/Spherical.js +4 -5
  89. package/src/objects/BatchedMesh.js +4 -3
  90. package/src/objects/InstancedMesh.js +10 -0
  91. package/src/renderers/WebGLRenderer.js +55 -114
  92. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  93. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  94. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  95. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  96. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
  97. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  98. package/src/renderers/shaders/ShaderLib.js +1 -1
  99. package/src/renderers/shaders/UniformsUtils.js +10 -1
  100. package/src/renderers/webgl/WebGLAttributes.js +6 -33
  101. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  102. package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
  103. package/src/renderers/webgl/WebGLCapabilities.js +2 -12
  104. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  105. package/src/renderers/webgl/WebGLExtensions.js +4 -19
  106. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
  107. package/src/renderers/webgl/WebGLLights.js +6 -32
  108. package/src/renderers/webgl/WebGLMaterials.js +2 -3
  109. package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
  110. package/src/renderers/webgl/WebGLProgram.js +18 -47
  111. package/src/renderers/webgl/WebGLPrograms.js +20 -32
  112. package/src/renderers/webgl/WebGLRenderStates.js +8 -6
  113. package/src/renderers/webgl/WebGLState.js +15 -59
  114. package/src/renderers/webgl/WebGLTextures.js +75 -237
  115. package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
  116. package/src/renderers/webgl/WebGLUtils.js +6 -57
  117. package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
  118. package/src/renderers/webxr/WebXRManager.js +2 -2
  119. package/src/scenes/Scene.js +7 -1
  120. package/src/textures/Texture.js +11 -1
  121. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  122. 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
- setReference( /*state*/ ) {
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
- setReference( /*state*/ ) {
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 getCacheKey( this );
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.setReference( builder );
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, NoColorSpace, Color, Vector2, Vector3, Vector4, Float16BufferAttribute } from 'three';
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
- getRenderTarget( width, height, options ) {
118
+ createRenderTarget( width, height, options ) {
117
119
 
118
120
  return new RenderTarget( width, height, options );
119
121
 
120
122
  }
121
123
 
122
- getCubeRenderTarget( size, options ) {
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
- getTextureColorSpaceFromMap( map ) {
478
-
479
- let colorSpace;
487
+ getComponentTypeFromTexture( texture ) {
480
488
 
481
- if ( map && map.isTexture ) {
489
+ const type = texture.type;
482
490
 
483
- colorSpace = map.colorSpace;
491
+ if ( texture.isDataTexture ) {
484
492
 
485
- } else if ( map && map.isWebGLRenderTarget ) {
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 colorSpace;
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.setReference( this );
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( node ) !== this.frameId ) {
54
+ if ( frameMap.get( reference ) !== this.frameId ) {
55
55
 
56
56
  if ( node.updateBefore( this ) !== false ) {
57
57
 
58
- frameMap.set( node, this.frameId );
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( node ) !== this.renderId ) {
68
+ if ( renderMap.get( reference ) !== this.renderId ) {
69
69
 
70
70
  if ( node.updateBefore( this ) !== false ) {
71
71
 
72
- renderMap.set( node, this.renderId );
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.setReference( this );
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( node ) !== this.frameId ) {
95
+ if ( frameMap.get( reference ) !== this.frameId ) {
96
96
 
97
97
  if ( node.update( this ) !== false ) {
98
98
 
99
- frameMap.set( node, this.frameId );
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( node ) !== this.renderId ) {
109
+ if ( renderMap.get( reference ) !== this.renderId ) {
110
110
 
111
111
  if ( node.update( this ) !== false ) {
112
112
 
113
- renderMap.set( node, this.renderId );
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( perspectiveDepthToViewZ( this._depthTextureNode, cameraNear, cameraFar ), cameraNear, cameraFar );
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 = float( 1 ), colorNode = null ) {
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 );
@@ -20,6 +20,12 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
20
20
 
21
21
  }
22
22
 
23
+ updateReference() {
24
+
25
+ return this;
26
+
27
+ }
28
+
23
29
  }
24
30
 
25
31
  export default ViewportSharedTextureNode;
@@ -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 depthNode = positionView.z.negate();
21
- const densityNode = this.densityNode;
19
+ const viewZ = this.getViewZNode( builder );
20
+ const density = this.densityNode;
22
21
 
23
- return densityNode.mul( densityNode, depthNode, depthNode ).negate().exp().oneMinus();
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 { mix } from '../math/MathNode.js';
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
- mixAssign( outputNode ) {
18
+ getViewZNode( builder ) {
19
19
 
20
- return mix( outputNode, this.colorNode, this );
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
- return smoothstep( this.nearNode, this.farNode, positionView.z.negate() );
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.getRenderTarget( shadow.mapSize.width, shadow.mapSize.height );
66
+ const rtt = builder.createRenderTarget( shadow.mapSize.width, shadow.mapSize.height );
67
67
 
68
68
  const depthTexture = new DepthTexture();
69
69
  depthTexture.minFilter = NearestFilter;