super-three 0.172.0 → 0.173.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/LICENSE +1 -1
- package/build/three.cjs +439 -380
- package/build/three.core.js +413 -41
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +28 -344
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +11 -3
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +7550 -1798
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +7551 -1798
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +6 -5
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +23 -21
- package/examples/jsm/exporters/GLTFExporter.js +26 -25
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/loaders/GCodeLoader.js +3 -1
- package/examples/jsm/loaders/GLTFLoader.js +0 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +4 -3
- package/examples/jsm/misc/Volume.js +7 -5
- package/examples/jsm/misc/VolumeSlice.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +25 -20
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/package.json +1 -1
- package/src/Three.Core.js +2 -0
- package/src/Three.TSL.js +9 -1
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/extras/ImageUtils.js +1 -11
- package/src/loaders/nodes/NodeObjectLoader.js +1 -1
- package/src/materials/nodes/MeshBasicNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +5 -5
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +109 -7
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -0
- package/src/nodes/Nodes.js +4 -0
- package/src/nodes/TSL.js +4 -0
- package/src/nodes/accessors/Arrays.js +30 -8
- package/src/nodes/accessors/BatchNode.js +3 -3
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/Camera.js +64 -3
- package/src/nodes/accessors/InstanceNode.js +1 -1
- package/src/nodes/accessors/MaterialNode.js +9 -9
- package/src/nodes/accessors/ModelViewProjectionNode.js +1 -1
- package/src/nodes/accessors/Normal.js +6 -2
- package/src/nodes/accessors/Object3DNode.js +0 -1
- package/src/nodes/accessors/Position.js +6 -6
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -4
- package/src/nodes/accessors/ReferenceNode.js +2 -3
- package/src/nodes/accessors/StorageBufferNode.js +42 -5
- package/src/nodes/accessors/Tangent.js +2 -2
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +12 -5
- package/src/nodes/accessors/UniformArrayNode.js +9 -3
- package/src/nodes/accessors/VelocityNode.js +0 -2
- package/src/nodes/code/ScriptableNode.js +3 -3
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/ConstNode.js +8 -0
- package/src/nodes/core/Node.js +14 -1
- package/src/nodes/core/NodeBuilder.js +229 -19
- package/src/nodes/core/NodeUtils.js +11 -1
- package/src/nodes/core/NodeVar.js +17 -1
- package/src/nodes/core/OutputStructNode.js +19 -9
- package/src/nodes/core/StackNode.js +20 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +82 -21
- package/src/nodes/core/TempNode.js +1 -1
- package/src/nodes/core/VarNode.js +94 -7
- package/src/nodes/core/VaryingNode.js +19 -3
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +6 -6
- package/src/nodes/display/NormalMapNode.js +6 -6
- package/src/nodes/display/PassNode.js +3 -1
- package/src/nodes/display/ScreenNode.js +9 -0
- package/src/nodes/fog/Fog.js +17 -0
- package/src/nodes/gpgpu/AtomicFunctionNode.js +20 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +8 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +1 -1
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +8 -1
- package/src/nodes/math/MathNode.js +14 -1
- package/src/nodes/math/OperatorNode.js +96 -18
- package/src/nodes/pmrem/PMREMUtils.js +1 -1
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +1 -1
- package/src/nodes/utils/LoopNode.js +8 -1
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/StorageArrayElementNode.js +14 -0
- package/src/nodes/utils/Timer.js +21 -0
- package/src/objects/BatchedMesh.js +1 -1
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +7 -0
- package/src/renderers/common/Animation.js +23 -1
- package/src/renderers/common/Backend.js +58 -15
- package/src/renderers/common/Background.js +14 -0
- package/src/renderers/common/Binding.js +1 -1
- package/src/renderers/common/BufferUtils.js +1 -1
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +9 -7
- package/src/renderers/common/ClippingContext.js +1 -1
- package/src/renderers/common/Color4.js +7 -3
- package/src/renderers/common/Geometries.js +2 -23
- package/src/renderers/common/Info.js +1 -45
- package/src/renderers/common/Lighting.js +8 -6
- package/src/renderers/common/Pipelines.js +3 -3
- package/src/renderers/common/PostProcessing.js +24 -8
- package/src/renderers/common/QuadMesh.js +1 -1
- package/src/renderers/common/RenderBundles.js +9 -3
- package/src/renderers/common/RenderContext.js +37 -3
- package/src/renderers/common/RenderContexts.js +30 -17
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderLists.js +9 -3
- package/src/renderers/common/RenderObject.js +76 -17
- package/src/renderers/common/RenderObjects.js +9 -7
- package/src/renderers/common/Renderer.js +86 -67
- package/src/renderers/common/SampledTexture.js +0 -1
- package/src/renderers/common/StorageBufferAttribute.js +1 -1
- package/src/renderers/common/StorageInstancedBufferAttribute.js +1 -1
- package/src/renderers/common/StorageTexture.js +1 -1
- package/src/renderers/common/Textures.js +14 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +37 -1
- package/src/renderers/common/UniformsGroup.js +2 -0
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +53 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +4 -4
- package/src/renderers/common/nodes/NodeLibrary.js +5 -5
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -1
- package/src/renderers/common/nodes/NodeUniform.js +54 -2
- package/src/renderers/common/nodes/Nodes.js +25 -18
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +295 -110
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -17
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +57 -0
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +167 -21
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +132 -149
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +6 -4
- package/src/renderers/webgpu/WebGPURenderer.js +5 -4
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +615 -41
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +85 -6
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +85 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +257 -9
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +86 -4
- package/src/renderers/webxr/WebXRManager.js +13 -2
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -209
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -37
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A special type of render target that is used when rendering
|
|
5
|
+
* with the WebXR Device API.
|
|
6
|
+
*
|
|
7
|
+
* @private
|
|
8
|
+
* @augments RenderTarget
|
|
9
|
+
*/
|
|
10
|
+
class XRRenderTarget extends RenderTarget {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new XR render target.
|
|
14
|
+
*
|
|
15
|
+
* @param {Number} [width=1] - The width of the render target.
|
|
16
|
+
* @param {Number} [height=1] - The height of the render target.
|
|
17
|
+
* @param {Object} [options={}] - The configuration options.
|
|
18
|
+
*/
|
|
19
|
+
constructor( width = 1, height = 1, options = {} ) {
|
|
20
|
+
|
|
21
|
+
super( width, height, options );
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* This flag can be used for type testing.
|
|
25
|
+
*
|
|
26
|
+
* @type {Boolean}
|
|
27
|
+
* @readonly
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
30
|
+
this.isXRRenderTarget = true;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Whether the attachments of the render target
|
|
34
|
+
* are defined by external textures. This flag is
|
|
35
|
+
* set to `true` when using the WebXR Layers API.
|
|
36
|
+
*
|
|
37
|
+
* @type {Boolean}
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
this.hasExternalTextures = false;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Whether a depth buffer should automatically be allocated
|
|
44
|
+
* for this XR render target or not.
|
|
45
|
+
*
|
|
46
|
+
* Allocating a depth buffer is the default behavior of XR render
|
|
47
|
+
* targets. However, when using the WebXR Layers API, this flag
|
|
48
|
+
* must be set to `false` when the `ignoreDepthValues` property of
|
|
49
|
+
* the projection layers evaluates to `false`.
|
|
50
|
+
*
|
|
51
|
+
* Reference: {@link https://www.w3.org/TR/webxrlayers-1/#dom-xrprojectionlayer-ignoredepthvalues}.
|
|
52
|
+
*
|
|
53
|
+
* @type {Boolean}
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
this.autoAllocateDepthBuffer = true;
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
copy( source ) {
|
|
61
|
+
|
|
62
|
+
super.copy( source );
|
|
63
|
+
|
|
64
|
+
this.hasExternalTextures = source.hasExternalTextures;
|
|
65
|
+
this.autoAllocateDepthBuffer = source.autoAllocateDepthBuffer;
|
|
66
|
+
|
|
67
|
+
return this;
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { XRRenderTarget };
|
|
@@ -69,7 +69,9 @@ const _axisDirections = [
|
|
|
69
69
|
/*@__PURE__*/ new Vector3( 1, 1, 1 )
|
|
70
70
|
];
|
|
71
71
|
|
|
72
|
-
//
|
|
72
|
+
// maps blur materials to their uniforms dictionary
|
|
73
|
+
|
|
74
|
+
const _uniformsMap = new WeakMap();
|
|
73
75
|
|
|
74
76
|
// WebGPU Face indices
|
|
75
77
|
const _faceLib = [
|
|
@@ -77,8 +79,8 @@ const _faceLib = [
|
|
|
77
79
|
0, 4, 2
|
|
78
80
|
];
|
|
79
81
|
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
+
const _direction = /*@__PURE__*/ getDirection( uv(), attribute( 'faceIndex' ) ).normalize();
|
|
83
|
+
const _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direction.z );
|
|
82
84
|
|
|
83
85
|
/**
|
|
84
86
|
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
@@ -135,6 +137,7 @@ class PMREMGenerator {
|
|
|
135
137
|
* @param {Number} [far=100] - The far plane distance.
|
|
136
138
|
* @param {RenderTarget?} [renderTarget=null] - The render target to use.
|
|
137
139
|
* @return {RenderTarget} The resulting PMREM.
|
|
140
|
+
* @see fromSceneAsync
|
|
138
141
|
*/
|
|
139
142
|
fromScene( scene, sigma = 0, near = 0.1, far = 100, renderTarget = null ) {
|
|
140
143
|
|
|
@@ -175,6 +178,21 @@ class PMREMGenerator {
|
|
|
175
178
|
|
|
176
179
|
}
|
|
177
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
183
|
+
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
184
|
+
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
185
|
+
* and far planes ensure the scene is rendered in its entirety (the cubeCamera
|
|
186
|
+
* is placed at the origin).
|
|
187
|
+
*
|
|
188
|
+
* @param {Scene} scene - The scene to be captured.
|
|
189
|
+
* @param {Number} [sigma=0] - The blur radius in radians.
|
|
190
|
+
* @param {Number} [near=0.1] - The near plane distance.
|
|
191
|
+
* @param {Number} [far=100] - The far plane distance.
|
|
192
|
+
* @param {RenderTarget?} [renderTarget=null] - The render target to use.
|
|
193
|
+
* @return {Promise<RenderTarget>} The resulting PMREM.
|
|
194
|
+
* @see fromScene
|
|
195
|
+
*/
|
|
178
196
|
async fromSceneAsync( scene, sigma = 0, near = 0.1, far = 100, renderTarget = null ) {
|
|
179
197
|
|
|
180
198
|
if ( this._hasInitialized === false ) await this._renderer.init();
|
|
@@ -191,6 +209,7 @@ class PMREMGenerator {
|
|
|
191
209
|
* @param {Texture} equirectangular - The equirectangular texture to be converted.
|
|
192
210
|
* @param {RenderTarget?} [renderTarget=null] - The render target to use.
|
|
193
211
|
* @return {RenderTarget} The resulting PMREM.
|
|
212
|
+
* @see fromEquirectangularAsync
|
|
194
213
|
*/
|
|
195
214
|
fromEquirectangular( equirectangular, renderTarget = null ) {
|
|
196
215
|
|
|
@@ -212,6 +231,16 @@ class PMREMGenerator {
|
|
|
212
231
|
|
|
213
232
|
}
|
|
214
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
236
|
+
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
237
|
+
* as this matches best with the 256 x 256 cubemap output.
|
|
238
|
+
*
|
|
239
|
+
* @param {Texture} equirectangular - The equirectangular texture to be converted.
|
|
240
|
+
* @param {RenderTarget?} [renderTarget=null] - The render target to use.
|
|
241
|
+
* @return {Promise<RenderTarget>} The resulting PMREM.
|
|
242
|
+
* @see fromEquirectangular
|
|
243
|
+
*/
|
|
215
244
|
async fromEquirectangularAsync( equirectangular, renderTarget = null ) {
|
|
216
245
|
|
|
217
246
|
if ( this._hasInitialized === false ) await this._renderer.init();
|
|
@@ -228,6 +257,7 @@ class PMREMGenerator {
|
|
|
228
257
|
* @param {Texture} cubemap - The cubemap texture to be converted.
|
|
229
258
|
* @param {RenderTarget?} [renderTarget=null] - The render target to use.
|
|
230
259
|
* @return {RenderTarget} The resulting PMREM.
|
|
260
|
+
* @see fromCubemapAsync
|
|
231
261
|
*/
|
|
232
262
|
fromCubemap( cubemap, renderTarget = null ) {
|
|
233
263
|
|
|
@@ -249,6 +279,16 @@ class PMREMGenerator {
|
|
|
249
279
|
|
|
250
280
|
}
|
|
251
281
|
|
|
282
|
+
/**
|
|
283
|
+
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
284
|
+
* or HDR. The ideal input cube size is 256 x 256,
|
|
285
|
+
* with the 256 x 256 cubemap output.
|
|
286
|
+
*
|
|
287
|
+
* @param {Texture} cubemap - The cubemap texture to be converted.
|
|
288
|
+
* @param {RenderTarget?} [renderTarget=null] - The render target to use.
|
|
289
|
+
* @return {Promise<RenderTarget>} The resulting PMREM.
|
|
290
|
+
* @see fromCubemap
|
|
291
|
+
*/
|
|
252
292
|
async fromCubemapAsync( cubemap, renderTarget = null ) {
|
|
253
293
|
|
|
254
294
|
if ( this._hasInitialized === false ) await this._renderer.init();
|
|
@@ -260,6 +300,8 @@ class PMREMGenerator {
|
|
|
260
300
|
/**
|
|
261
301
|
* Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
|
|
262
302
|
* your texture's network fetch for increased concurrency.
|
|
303
|
+
*
|
|
304
|
+
* @returns {Promise}
|
|
263
305
|
*/
|
|
264
306
|
async compileCubemapShader() {
|
|
265
307
|
|
|
@@ -275,6 +317,8 @@ class PMREMGenerator {
|
|
|
275
317
|
/**
|
|
276
318
|
* Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
|
|
277
319
|
* your texture's network fetch for increased concurrency.
|
|
320
|
+
*
|
|
321
|
+
* @returns {Promise}
|
|
278
322
|
*/
|
|
279
323
|
async compileEquirectangularShader() {
|
|
280
324
|
|
|
@@ -625,7 +669,7 @@ class PMREMGenerator {
|
|
|
625
669
|
const blurMesh = this._lodMeshes[ lodOut ];
|
|
626
670
|
blurMesh.material = blurMaterial;
|
|
627
671
|
|
|
628
|
-
const blurUniforms = blurMaterial
|
|
672
|
+
const blurUniforms = _uniformsMap.get( blurMaterial );
|
|
629
673
|
|
|
630
674
|
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
631
675
|
const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
|
|
@@ -829,7 +873,7 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
829
873
|
latitudinal,
|
|
830
874
|
weights,
|
|
831
875
|
poleAxis,
|
|
832
|
-
outputDirection,
|
|
876
|
+
outputDirection: _outputDirection,
|
|
833
877
|
dTheta,
|
|
834
878
|
samples,
|
|
835
879
|
envMap,
|
|
@@ -840,9 +884,10 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
840
884
|
};
|
|
841
885
|
|
|
842
886
|
const material = _getMaterial( 'blur' );
|
|
843
|
-
material.uniforms = materialUniforms; // TODO: Move to outside of the material
|
|
844
887
|
material.fragmentNode = blur( { ...materialUniforms, latitudinal: latitudinal.equal( 1 ) } );
|
|
845
888
|
|
|
889
|
+
_uniformsMap.set( material, materialUniforms );
|
|
890
|
+
|
|
846
891
|
return material;
|
|
847
892
|
|
|
848
893
|
}
|
|
@@ -850,7 +895,7 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
850
895
|
function _getCubemapMaterial( envTexture ) {
|
|
851
896
|
|
|
852
897
|
const material = _getMaterial( 'cubemap' );
|
|
853
|
-
material.fragmentNode = cubeTexture( envTexture,
|
|
898
|
+
material.fragmentNode = cubeTexture( envTexture, _outputDirection );
|
|
854
899
|
|
|
855
900
|
return material;
|
|
856
901
|
|
|
@@ -859,7 +904,7 @@ function _getCubemapMaterial( envTexture ) {
|
|
|
859
904
|
function _getEquirectMaterial( envTexture ) {
|
|
860
905
|
|
|
861
906
|
const material = _getMaterial( 'equirect' );
|
|
862
|
-
material.fragmentNode = texture( envTexture, equirectUV(
|
|
907
|
+
material.fragmentNode = texture( envTexture, equirectUV( _outputDirection ), 0 );
|
|
863
908
|
|
|
864
909
|
return material;
|
|
865
910
|
|
|
@@ -22,10 +22,10 @@ class NodeBuilderState {
|
|
|
22
22
|
* @param {Array<Node>} updateNodes - An array of nodes that implement their `update()` method.
|
|
23
23
|
* @param {Array<Node>} updateBeforeNodes - An array of nodes that implement their `updateBefore()` method.
|
|
24
24
|
* @param {Array<Node>} updateAfterNodes - An array of nodes that implement their `updateAfter()` method.
|
|
25
|
-
* @param {NodeMaterialObserver}
|
|
25
|
+
* @param {NodeMaterialObserver} observer - A node material observer.
|
|
26
26
|
* @param {Array<Object>} transforms - An array with transform attribute objects. Only relevant when using compute shaders with WebGL 2.
|
|
27
27
|
*/
|
|
28
|
-
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes,
|
|
28
|
+
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, observer, transforms = [] ) {
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* The native vertex shader code.
|
|
@@ -98,7 +98,7 @@ class NodeBuilderState {
|
|
|
98
98
|
*
|
|
99
99
|
* @type {NodeMaterialObserver}
|
|
100
100
|
*/
|
|
101
|
-
this.
|
|
101
|
+
this.observer = observer;
|
|
102
102
|
|
|
103
103
|
/**
|
|
104
104
|
* How often this state is used by render objects.
|
|
@@ -122,7 +122,7 @@ class NodeBuilderState {
|
|
|
122
122
|
|
|
123
123
|
for ( const instanceGroup of this.bindings ) {
|
|
124
124
|
|
|
125
|
-
const shared = instanceGroup.bindings[ 0 ].groupNode.shared; //
|
|
125
|
+
const shared = instanceGroup.bindings[ 0 ].groupNode.shared; // All bindings in the group must have the same groupNode.
|
|
126
126
|
|
|
127
127
|
if ( shared !== true ) {
|
|
128
128
|
|
|
@@ -23,7 +23,7 @@ class NodeLibrary {
|
|
|
23
23
|
/**
|
|
24
24
|
* A map that maps materials to node materials.
|
|
25
25
|
*
|
|
26
|
-
* @type {
|
|
26
|
+
* @type {Map<String,NodeMaterial.constructor>}
|
|
27
27
|
*/
|
|
28
28
|
this.materialNodes = new Map();
|
|
29
29
|
|
|
@@ -31,7 +31,7 @@ class NodeLibrary {
|
|
|
31
31
|
* A map that maps tone mapping techniques (constants)
|
|
32
32
|
* to tone mapping node functions.
|
|
33
33
|
*
|
|
34
|
-
* @type {
|
|
34
|
+
* @type {Map<Number,Function>}
|
|
35
35
|
*/
|
|
36
36
|
this.toneMappingNodes = new Map();
|
|
37
37
|
|
|
@@ -98,7 +98,7 @@ class NodeLibrary {
|
|
|
98
98
|
/**
|
|
99
99
|
* Returns a node material class definition for a material type.
|
|
100
100
|
*
|
|
101
|
-
* @param {
|
|
101
|
+
* @param {String} materialType - The material type.
|
|
102
102
|
* @return {NodeMaterial.constructor?} The node material class definition. Returns `null` if no node material is found.
|
|
103
103
|
*/
|
|
104
104
|
getMaterialNodeClass( materialType ) {
|
|
@@ -111,7 +111,7 @@ class NodeLibrary {
|
|
|
111
111
|
* Adds a node material class definition for a given material type.
|
|
112
112
|
*
|
|
113
113
|
* @param {NodeMaterial.constructor} materialNodeClass - The node material class definition.
|
|
114
|
-
* @param {
|
|
114
|
+
* @param {String} materialClassType - The material type.
|
|
115
115
|
*/
|
|
116
116
|
addMaterial( materialNodeClass, materialClassType ) {
|
|
117
117
|
|
|
@@ -147,7 +147,7 @@ class NodeLibrary {
|
|
|
147
147
|
* Adds a node class definition for the given type to the provided type library.
|
|
148
148
|
*
|
|
149
149
|
* @param {Any} nodeClass - The node class definition.
|
|
150
|
-
* @param {String} type - The object type.
|
|
150
|
+
* @param {Number|String} type - The object type.
|
|
151
151
|
* @param {Map} library - The type library.
|
|
152
152
|
*/
|
|
153
153
|
addType( nodeClass, type, library ) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
NumberUniform, Vector2Uniform, Vector3Uniform, Vector4Uniform,
|
|
3
|
-
ColorUniform, Matrix3Uniform, Matrix4Uniform
|
|
3
|
+
ColorUniform, Matrix2Uniform, Matrix3Uniform, Matrix4Uniform
|
|
4
4
|
} from '../Uniform.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -258,6 +258,58 @@ class ColorNodeUniform extends ColorUniform {
|
|
|
258
258
|
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* A special form of Matrix2 uniform binding type.
|
|
264
|
+
* It's value is managed by a node object.
|
|
265
|
+
*
|
|
266
|
+
* @private
|
|
267
|
+
* @augments Matrix2Uniform
|
|
268
|
+
*/
|
|
269
|
+
class Matrix2NodeUniform extends Matrix2Uniform {
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Constructs a new node-based Matrix2 uniform.
|
|
273
|
+
*
|
|
274
|
+
* @param {NodeUniform} nodeUniform - The node uniform.
|
|
275
|
+
*/
|
|
276
|
+
constructor( nodeUniform ) {
|
|
277
|
+
|
|
278
|
+
super( nodeUniform.name, nodeUniform.value );
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* The node uniform.
|
|
282
|
+
*
|
|
283
|
+
* @type {NodeUniform}
|
|
284
|
+
*/
|
|
285
|
+
this.nodeUniform = nodeUniform;
|
|
286
|
+
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Overwritten to return the value of the node uniform.
|
|
291
|
+
*
|
|
292
|
+
* @return {Matrix2} The value.
|
|
293
|
+
*/
|
|
294
|
+
getValue() {
|
|
295
|
+
|
|
296
|
+
return this.nodeUniform.value;
|
|
297
|
+
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Returns the node uniform data type.
|
|
302
|
+
*
|
|
303
|
+
* @return {String} The data type.
|
|
304
|
+
*/
|
|
305
|
+
getType() {
|
|
306
|
+
|
|
307
|
+
return this.nodeUniform.type;
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
}
|
|
312
|
+
|
|
261
313
|
/**
|
|
262
314
|
* A special form of Matrix3 uniform binding type.
|
|
263
315
|
* It's value is managed by a node object.
|
|
@@ -362,5 +414,5 @@ class Matrix4NodeUniform extends Matrix4Uniform {
|
|
|
362
414
|
|
|
363
415
|
export {
|
|
364
416
|
NumberNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
|
|
365
|
-
ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform
|
|
417
|
+
ColorNodeUniform, Matrix2NodeUniform, Matrix3NodeUniform, Matrix4NodeUniform
|
|
366
418
|
};
|
|
@@ -9,6 +9,8 @@ import { CubeUVReflectionMapping, EquirectangularReflectionMapping, Equirectangu
|
|
|
9
9
|
import { hashArray } from '../../../nodes/core/NodeUtils.js';
|
|
10
10
|
|
|
11
11
|
const _outputNodeMap = new WeakMap();
|
|
12
|
+
const _chainKeys = [];
|
|
13
|
+
const _cacheKeyValues = [];
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* This renderer module manages node-related objects and is the
|
|
@@ -136,10 +138,13 @@ class Nodes extends DataMap {
|
|
|
136
138
|
|
|
137
139
|
// other groups are updated just when groupNode.needsUpdate is true
|
|
138
140
|
|
|
139
|
-
|
|
141
|
+
_chainKeys[ 0 ] = groupNode;
|
|
142
|
+
_chainKeys[ 1 ] = nodeUniformsGroup;
|
|
140
143
|
|
|
141
|
-
let groupData = this.groupsData.get(
|
|
142
|
-
if ( groupData === undefined ) this.groupsData.set(
|
|
144
|
+
let groupData = this.groupsData.get( _chainKeys );
|
|
145
|
+
if ( groupData === undefined ) this.groupsData.set( _chainKeys, groupData = {} );
|
|
146
|
+
|
|
147
|
+
_chainKeys.length = 0;
|
|
143
148
|
|
|
144
149
|
if ( groupData.version !== groupNode.version ) {
|
|
145
150
|
|
|
@@ -284,7 +289,7 @@ class Nodes extends DataMap {
|
|
|
284
289
|
nodeBuilder.updateNodes,
|
|
285
290
|
nodeBuilder.updateBeforeNodes,
|
|
286
291
|
nodeBuilder.updateAfterNodes,
|
|
287
|
-
nodeBuilder.
|
|
292
|
+
nodeBuilder.observer,
|
|
288
293
|
nodeBuilder.transforms
|
|
289
294
|
);
|
|
290
295
|
|
|
@@ -382,33 +387,35 @@ class Nodes extends DataMap {
|
|
|
382
387
|
*/
|
|
383
388
|
getCacheKey( scene, lightsNode ) {
|
|
384
389
|
|
|
385
|
-
|
|
390
|
+
_chainKeys[ 0 ] = scene;
|
|
391
|
+
_chainKeys[ 1 ] = lightsNode;
|
|
392
|
+
|
|
386
393
|
const callId = this.renderer.info.calls;
|
|
387
394
|
|
|
388
|
-
|
|
395
|
+
const cacheKeyData = this.callHashCache.get( _chainKeys ) || {};
|
|
389
396
|
|
|
390
|
-
if ( cacheKeyData
|
|
397
|
+
if ( cacheKeyData.callId !== callId ) {
|
|
391
398
|
|
|
392
399
|
const environmentNode = this.getEnvironmentNode( scene );
|
|
393
400
|
const fogNode = this.getFogNode( scene );
|
|
394
401
|
|
|
395
|
-
|
|
402
|
+
if ( lightsNode ) _cacheKeyValues.push( lightsNode.getCacheKey( true ) );
|
|
403
|
+
if ( environmentNode ) _cacheKeyValues.push( environmentNode.getCacheKey() );
|
|
404
|
+
if ( fogNode ) _cacheKeyValues.push( fogNode.getCacheKey() );
|
|
396
405
|
|
|
397
|
-
|
|
398
|
-
if ( environmentNode ) values.push( environmentNode.getCacheKey() );
|
|
399
|
-
if ( fogNode ) values.push( fogNode.getCacheKey() );
|
|
406
|
+
_cacheKeyValues.push( this.renderer.shadowMap.enabled ? 1 : 0 );
|
|
400
407
|
|
|
401
|
-
|
|
408
|
+
cacheKeyData.callId = callId;
|
|
409
|
+
cacheKeyData.cacheKey = hashArray( _cacheKeyValues );
|
|
402
410
|
|
|
403
|
-
cacheKeyData
|
|
404
|
-
callId,
|
|
405
|
-
cacheKey: hashArray( values )
|
|
406
|
-
};
|
|
411
|
+
this.callHashCache.set( _chainKeys, cacheKeyData );
|
|
407
412
|
|
|
408
|
-
|
|
413
|
+
_cacheKeyValues.length = 0;
|
|
409
414
|
|
|
410
415
|
}
|
|
411
416
|
|
|
417
|
+
_chainKeys.length = 0;
|
|
418
|
+
|
|
412
419
|
return cacheKeyData.cacheKey;
|
|
413
420
|
|
|
414
421
|
}
|
|
@@ -784,7 +791,7 @@ class Nodes extends DataMap {
|
|
|
784
791
|
}
|
|
785
792
|
|
|
786
793
|
/**
|
|
787
|
-
* Frees the
|
|
794
|
+
* Frees the internal resources.
|
|
788
795
|
*/
|
|
789
796
|
dispose() {
|
|
790
797
|
|
|
@@ -249,6 +249,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
249
249
|
boxMesh.geometry.dispose();
|
|
250
250
|
boxMesh.material.dispose();
|
|
251
251
|
|
|
252
|
+
boxMesh = undefined;
|
|
253
|
+
|
|
252
254
|
}
|
|
253
255
|
|
|
254
256
|
if ( planeMesh !== undefined ) {
|
|
@@ -256,6 +258,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
256
258
|
planeMesh.geometry.dispose();
|
|
257
259
|
planeMesh.material.dispose();
|
|
258
260
|
|
|
261
|
+
planeMesh = undefined;
|
|
262
|
+
|
|
259
263
|
}
|
|
260
264
|
|
|
261
265
|
}
|