super-three 0.154.1 → 0.155.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 +256 -38
- package/build/three.js +256 -38
- package/build/three.min.js +1 -1
- package/build/three.module.js +255 -39
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +143 -21
- package/examples/jsm/environments/RoomEnvironment.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +7 -0
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +8 -3
- package/examples/jsm/loaders/KTX2Loader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/NRRDLoader.js +3 -3
- package/examples/jsm/loaders/PLYLoader.js +1 -1
- package/examples/jsm/loaders/TGALoader.js +10 -10
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -9
- package/examples/jsm/misc/Volume.js +4 -6
- package/examples/jsm/nodes/Nodes.js +5 -6
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +1 -1
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +2 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +14 -1
- package/examples/jsm/nodes/accessors/InstanceNode.js +8 -8
- package/examples/jsm/nodes/accessors/MaterialNode.js +34 -44
- package/examples/jsm/nodes/accessors/SceneNode.js +6 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +48 -7
- package/examples/jsm/nodes/core/LightingModel.js +7 -9
- package/examples/jsm/nodes/core/Node.js +11 -2
- package/examples/jsm/nodes/core/PropertyNode.js +4 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +77 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -2
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +13 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +53 -14
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +236 -97
- package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +13 -0
- package/examples/jsm/nodes/lighting/AONode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +58 -20
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +7 -10
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -12
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightingContextNode.js +12 -9
- package/examples/jsm/nodes/lighting/PointLightNode.js +7 -10
- package/examples/jsm/nodes/lighting/SpotLightNode.js +7 -10
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +34 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -0
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +19 -2
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/NodeMaterial.js +50 -24
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
- package/examples/jsm/nodes/shadernode/ShaderNode.js +2 -2
- package/examples/jsm/objects/Reflector.js +1 -9
- package/examples/jsm/objects/Refractor.js +0 -8
- package/examples/jsm/offscreen/scene.js +0 -1
- package/examples/jsm/postprocessing/MaskPass.js +4 -1
- package/examples/jsm/postprocessing/OutputPass.js +33 -14
- package/examples/jsm/postprocessing/UnrealBloomPass.js +21 -17
- package/examples/jsm/renderers/common/Background.js +22 -20
- package/examples/jsm/renderers/common/Binding.js +8 -0
- package/examples/jsm/renderers/common/Bindings.js +2 -6
- package/examples/jsm/renderers/common/Geometries.js +1 -1
- package/examples/jsm/renderers/common/Pipelines.js +94 -45
- package/examples/jsm/renderers/common/RenderContext.js +1 -0
- package/examples/jsm/renderers/common/RenderContexts.js +16 -5
- package/examples/jsm/renderers/common/RenderObject.js +20 -4
- package/examples/jsm/renderers/common/RenderObjects.js +10 -7
- package/examples/jsm/renderers/common/Renderer.js +70 -39
- package/examples/jsm/renderers/common/Textures.js +20 -8
- package/examples/jsm/renderers/common/nodes/Nodes.js +15 -4
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +51 -54
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +33 -9
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +55 -36
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +83 -5
- package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +24 -22
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +83 -130
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +35 -8
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +1 -1
- package/examples/jsm/shaders/OutputShader.js +19 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +13 -4
- package/examples/jsm/webxr/OculusHandPointerModel.js +2 -2
- package/package.json +2 -2
- package/src/Three.js +2 -0
- package/src/animation/PropertyBinding.js +1 -1
- package/src/cameras/CubeCamera.js +1 -4
- package/src/constants.js +1 -1
- package/src/core/BufferAttribute.js +20 -0
- package/src/core/Object3D.js +1 -1
- package/src/core/RenderTarget.js +122 -0
- package/src/geometries/CapsuleGeometry.js +1 -1
- package/src/loaders/DataTextureLoader.js +21 -2
- package/src/renderers/WebGLMultipleRenderTargets.js +0 -2
- package/src/renderers/WebGLRenderTarget.js +3 -110
- package/src/renderers/WebGLRenderer.js +62 -8
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +1 -2
- package/src/renderers/webgl/WebGLGeometries.js +5 -1
- package/src/renderers/webgl/WebGLMaterials.js +1 -1
- package/src/renderers/webgl/WebGLPrograms.js +14 -2
- package/src/renderers/webgl/WebGLTextures.js +97 -12
- package/src/textures/CompressedCubeTexture.js +19 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +0 -30
- package/examples/jsm/renderers/common/RenderTarget.js +0 -15
- package/examples/jsm/renderers/common/nodes/NodeRender.js +0 -302
|
@@ -2,7 +2,7 @@ let id = 0;
|
|
|
2
2
|
|
|
3
3
|
export default class RenderObject {
|
|
4
4
|
|
|
5
|
-
constructor( nodes, geometries, renderer, object, material, scene, camera, lightsNode ) {
|
|
5
|
+
constructor( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext ) {
|
|
6
6
|
|
|
7
7
|
this._nodes = nodes;
|
|
8
8
|
this._geometries = geometries;
|
|
@@ -15,12 +15,13 @@ export default class RenderObject {
|
|
|
15
15
|
this.scene = scene;
|
|
16
16
|
this.camera = camera;
|
|
17
17
|
this.lightsNode = lightsNode;
|
|
18
|
+
this.context = renderContext;
|
|
18
19
|
|
|
19
20
|
this.geometry = object.geometry;
|
|
20
21
|
|
|
21
22
|
this.attributes = null;
|
|
22
|
-
this.context = null;
|
|
23
23
|
this.pipeline = null;
|
|
24
|
+
this.vertexBuffers = null;
|
|
24
25
|
|
|
25
26
|
this._materialVersion = - 1;
|
|
26
27
|
this._materialCacheKey = '';
|
|
@@ -57,7 +58,7 @@ export default class RenderObject {
|
|
|
57
58
|
|
|
58
59
|
getChainArray() {
|
|
59
60
|
|
|
60
|
-
return [ this.object, this.material, this.
|
|
61
|
+
return [ this.object, this.material, this.context, this.lightsNode ];
|
|
61
62
|
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -69,19 +70,34 @@ export default class RenderObject {
|
|
|
69
70
|
const geometry = this.geometry;
|
|
70
71
|
|
|
71
72
|
const attributes = [];
|
|
73
|
+
const vertexBuffers = new Set();
|
|
72
74
|
|
|
73
75
|
for ( const nodeAttribute of nodeAttributes ) {
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
const attribute = nodeAttribute.node && nodeAttribute.node.attribute ? nodeAttribute.node.attribute : geometry.getAttribute( nodeAttribute.name );
|
|
78
|
+
|
|
79
|
+
attributes.push( attribute );
|
|
80
|
+
|
|
81
|
+
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
82
|
+
vertexBuffers.add( bufferAttribute );
|
|
76
83
|
|
|
77
84
|
}
|
|
78
85
|
|
|
79
86
|
this.attributes = attributes;
|
|
87
|
+
this.vertexBuffers = Array.from( vertexBuffers.values() );
|
|
80
88
|
|
|
81
89
|
return attributes;
|
|
82
90
|
|
|
83
91
|
}
|
|
84
92
|
|
|
93
|
+
getVertexBuffers() {
|
|
94
|
+
|
|
95
|
+
if ( this.vertexBuffers === null ) this.getAttributes();
|
|
96
|
+
|
|
97
|
+
return this.vertexBuffers;
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
85
101
|
getCacheKey() {
|
|
86
102
|
|
|
87
103
|
const { material, scene, lightsNode } = this;
|
|
@@ -4,12 +4,13 @@ import RenderObject from './RenderObject.js';
|
|
|
4
4
|
|
|
5
5
|
class RenderObjects {
|
|
6
6
|
|
|
7
|
-
constructor( renderer, nodes, geometries, pipelines, info ) {
|
|
7
|
+
constructor( renderer, nodes, geometries, pipelines, bindings, info ) {
|
|
8
8
|
|
|
9
9
|
this.renderer = renderer;
|
|
10
10
|
this.nodes = nodes;
|
|
11
11
|
this.geometries = geometries;
|
|
12
12
|
this.pipelines = pipelines;
|
|
13
|
+
this.bindings = bindings;
|
|
13
14
|
this.info = info;
|
|
14
15
|
|
|
15
16
|
this.chainMaps = {};
|
|
@@ -17,16 +18,16 @@ class RenderObjects {
|
|
|
17
18
|
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
get( object, material, scene, camera, lightsNode, passId ) {
|
|
21
|
+
get( object, material, scene, camera, lightsNode, renderContext, passId ) {
|
|
21
22
|
|
|
22
23
|
const chainMap = this.getChainMap( passId );
|
|
23
|
-
const chainArray = [ object, material,
|
|
24
|
+
const chainArray = [ object, material, renderContext, lightsNode ];
|
|
24
25
|
|
|
25
26
|
let renderObject = chainMap.get( chainArray );
|
|
26
27
|
|
|
27
28
|
if ( renderObject === undefined ) {
|
|
28
29
|
|
|
29
|
-
renderObject = this.createRenderObject( this.nodes, this.geometries, this.renderer, object, material, scene, camera, lightsNode, passId );
|
|
30
|
+
renderObject = this.createRenderObject( this.nodes, this.geometries, this.renderer, object, material, scene, camera, lightsNode, renderContext, passId );
|
|
30
31
|
|
|
31
32
|
chainMap.set( chainArray, renderObject );
|
|
32
33
|
|
|
@@ -39,7 +40,7 @@ class RenderObjects {
|
|
|
39
40
|
|
|
40
41
|
renderObject.dispose();
|
|
41
42
|
|
|
42
|
-
renderObject = this.get( object, material, scene, camera, lightsNode );
|
|
43
|
+
renderObject = this.get( object, material, scene, camera, lightsNode, renderContext, passId );
|
|
43
44
|
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -62,11 +63,12 @@ class RenderObjects {
|
|
|
62
63
|
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
createRenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, passId ) {
|
|
66
|
+
createRenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, passId ) {
|
|
66
67
|
|
|
67
68
|
const chainMap = this.getChainMap( passId );
|
|
68
69
|
const dataMap = this.dataMap;
|
|
69
|
-
|
|
70
|
+
|
|
71
|
+
const renderObject = new RenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext );
|
|
70
72
|
|
|
71
73
|
const data = dataMap.get( renderObject );
|
|
72
74
|
data.cacheKey = renderObject.getCacheKey();
|
|
@@ -76,6 +78,7 @@ class RenderObjects {
|
|
|
76
78
|
dataMap.delete( renderObject );
|
|
77
79
|
|
|
78
80
|
this.pipelines.delete( renderObject );
|
|
81
|
+
this.bindings.delete( renderObject );
|
|
79
82
|
this.nodes.delete( renderObject );
|
|
80
83
|
|
|
81
84
|
chainMap.delete( renderObject.getChainArray() );
|
|
@@ -10,8 +10,9 @@ import RenderContexts from './RenderContexts.js';
|
|
|
10
10
|
import Textures from './Textures.js';
|
|
11
11
|
import Background from './Background.js';
|
|
12
12
|
import Nodes from './nodes/Nodes.js';
|
|
13
|
-
import { Frustum, Matrix4, Vector2, Vector3, Vector4, Color, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping } from 'three';
|
|
13
|
+
import { Scene, Frustum, Matrix4, Vector2, Vector3, Vector4, Color, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping } from 'three';
|
|
14
14
|
|
|
15
|
+
const _scene = new Scene();
|
|
15
16
|
const _drawingBufferSize = new Vector2();
|
|
16
17
|
const _screen = new Vector4();
|
|
17
18
|
const _frustum = new Frustum();
|
|
@@ -137,7 +138,7 @@ class Renderer {
|
|
|
137
138
|
this._textures = new Textures( backend, this._info );
|
|
138
139
|
this._pipelines = new Pipelines( backend, this._nodes );
|
|
139
140
|
this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this._info );
|
|
140
|
-
this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._info );
|
|
141
|
+
this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this._info );
|
|
141
142
|
this._renderLists = new RenderLists();
|
|
142
143
|
this._renderContexts = new RenderContexts();
|
|
143
144
|
|
|
@@ -181,8 +182,10 @@ class Renderer {
|
|
|
181
182
|
|
|
182
183
|
//
|
|
183
184
|
|
|
184
|
-
const
|
|
185
|
+
const sceneRef = ( scene.isScene === true ) ? scene : _scene;
|
|
186
|
+
|
|
185
187
|
const renderTarget = this._renderTarget;
|
|
188
|
+
const renderContext = this._renderContexts.get( scene, camera, renderTarget );
|
|
186
189
|
const activeCubeFace = this._activeCubeFace;
|
|
187
190
|
|
|
188
191
|
this._currentRenderContext = renderContext;
|
|
@@ -247,6 +250,10 @@ class Renderer {
|
|
|
247
250
|
|
|
248
251
|
//
|
|
249
252
|
|
|
253
|
+
sceneRef.onBeforeRender( this, scene, camera, renderTarget );
|
|
254
|
+
|
|
255
|
+
//
|
|
256
|
+
|
|
250
257
|
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
251
258
|
_frustum.setFromProjectionMatrix( _projScreenMatrix, coordinateSystem );
|
|
252
259
|
|
|
@@ -285,11 +292,11 @@ class Renderer {
|
|
|
285
292
|
|
|
286
293
|
//
|
|
287
294
|
|
|
288
|
-
this._nodes.updateScene(
|
|
295
|
+
this._nodes.updateScene( sceneRef );
|
|
289
296
|
|
|
290
297
|
//
|
|
291
298
|
|
|
292
|
-
this._background.update(
|
|
299
|
+
this._background.update( sceneRef, renderList, renderContext );
|
|
293
300
|
|
|
294
301
|
//
|
|
295
302
|
|
|
@@ -301,8 +308,8 @@ class Renderer {
|
|
|
301
308
|
const transparentObjects = renderList.transparent;
|
|
302
309
|
const lightsNode = renderList.lightsNode;
|
|
303
310
|
|
|
304
|
-
if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera,
|
|
305
|
-
if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera,
|
|
311
|
+
if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
|
|
312
|
+
if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
|
|
306
313
|
|
|
307
314
|
// finish render pass
|
|
308
315
|
|
|
@@ -315,6 +322,10 @@ class Renderer {
|
|
|
315
322
|
|
|
316
323
|
this._lastRenderContext = renderContext;
|
|
317
324
|
|
|
325
|
+
//
|
|
326
|
+
|
|
327
|
+
sceneRef.onAfterRender( this, scene, camera, renderTarget );
|
|
328
|
+
|
|
318
329
|
}
|
|
319
330
|
|
|
320
331
|
setAnimationLoop( callback ) {
|
|
@@ -329,9 +340,17 @@ class Renderer {
|
|
|
329
340
|
|
|
330
341
|
}
|
|
331
342
|
|
|
332
|
-
|
|
343
|
+
getArrayBuffer( attribute ) { // @deprecated, r155
|
|
344
|
+
|
|
345
|
+
console.warn( 'THREE.Renderer: getArrayBuffer() is deprecated. Use getArrayBufferAsync() instead.' );
|
|
333
346
|
|
|
334
|
-
return
|
|
347
|
+
return this.getArrayBufferAsync( attribute );
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
async getArrayBufferAsync( attribute ) {
|
|
352
|
+
|
|
353
|
+
return await this.backend.getArrayBufferAsync( attribute );
|
|
335
354
|
|
|
336
355
|
}
|
|
337
356
|
|
|
@@ -581,43 +600,59 @@ class Renderer {
|
|
|
581
600
|
|
|
582
601
|
}
|
|
583
602
|
|
|
603
|
+
getRenderTarget() {
|
|
604
|
+
|
|
605
|
+
return this._renderTarget;
|
|
606
|
+
|
|
607
|
+
}
|
|
608
|
+
|
|
584
609
|
async compute( computeNodes ) {
|
|
585
610
|
|
|
586
611
|
if ( this._initialized === false ) await this.init();
|
|
587
612
|
|
|
588
613
|
const backend = this.backend;
|
|
589
614
|
const pipelines = this._pipelines;
|
|
590
|
-
const
|
|
615
|
+
const bindings = this._bindings;
|
|
616
|
+
const nodes = this._nodes;
|
|
617
|
+
const computeList = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];
|
|
591
618
|
|
|
592
|
-
backend.beginCompute(
|
|
619
|
+
backend.beginCompute( computeNodes );
|
|
593
620
|
|
|
594
|
-
for ( const computeNode of
|
|
621
|
+
for ( const computeNode of computeList ) {
|
|
595
622
|
|
|
596
623
|
// onInit
|
|
597
624
|
|
|
598
625
|
if ( pipelines.has( computeNode ) === false ) {
|
|
599
626
|
|
|
600
|
-
|
|
627
|
+
const dispose = () => {
|
|
601
628
|
|
|
602
|
-
|
|
629
|
+
computeNode.removeEventListener( 'dispose', dispose );
|
|
603
630
|
|
|
604
|
-
|
|
605
|
-
|
|
631
|
+
pipelines.delete( computeNode );
|
|
632
|
+
bindings.delete( computeNode );
|
|
633
|
+
nodes.delete( computeNode );
|
|
606
634
|
|
|
607
|
-
|
|
608
|
-
const computeBindings = this._bindings.getForCompute( computeNode );
|
|
635
|
+
};
|
|
609
636
|
|
|
610
|
-
|
|
637
|
+
computeNode.addEventListener( 'dispose', dispose );
|
|
611
638
|
|
|
612
|
-
|
|
639
|
+
//
|
|
613
640
|
|
|
614
|
-
|
|
641
|
+
computeNode.onInit( { renderer: this } );
|
|
615
642
|
|
|
616
|
-
|
|
643
|
+
}
|
|
617
644
|
|
|
618
|
-
|
|
645
|
+
nodes.updateForCompute( computeNode );
|
|
646
|
+
bindings.updateForCompute( computeNode );
|
|
619
647
|
|
|
620
|
-
|
|
648
|
+
const computeBindings = bindings.getForCompute( computeNode );
|
|
649
|
+
const computePipeline = pipelines.getForCompute( computeNode, computeBindings );
|
|
650
|
+
|
|
651
|
+
backend.compute( computeNodes, computeNode, computeBindings, computePipeline );
|
|
652
|
+
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
backend.finishCompute( computeNodes );
|
|
621
656
|
|
|
622
657
|
}
|
|
623
658
|
|
|
@@ -803,13 +838,6 @@ class Renderer {
|
|
|
803
838
|
|
|
804
839
|
object.onBeforeRender( this, scene, camera, geometry, material, group );
|
|
805
840
|
|
|
806
|
-
//
|
|
807
|
-
|
|
808
|
-
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
809
|
-
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
810
|
-
|
|
811
|
-
//
|
|
812
|
-
|
|
813
841
|
material.onBeforeRender( this, scene, camera, geometry, material, group );
|
|
814
842
|
|
|
815
843
|
//
|
|
@@ -817,16 +845,16 @@ class Renderer {
|
|
|
817
845
|
if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
|
|
818
846
|
|
|
819
847
|
material.side = BackSide;
|
|
820
|
-
this._renderObjectDirect( object, scene, camera,
|
|
848
|
+
this._renderObjectDirect( object, material, scene, camera, lightsNode, 'backSide' ); // create backSide pass id
|
|
821
849
|
|
|
822
850
|
material.side = FrontSide;
|
|
823
|
-
this._renderObjectDirect( object, scene, camera,
|
|
851
|
+
this._renderObjectDirect( object, material, scene, camera, lightsNode ); // use default pass id
|
|
824
852
|
|
|
825
853
|
material.side = DoubleSide;
|
|
826
854
|
|
|
827
855
|
} else {
|
|
828
856
|
|
|
829
|
-
this._renderObjectDirect( object, scene, camera,
|
|
857
|
+
this._renderObjectDirect( object, material, scene, camera, lightsNode );
|
|
830
858
|
|
|
831
859
|
}
|
|
832
860
|
|
|
@@ -836,22 +864,25 @@ class Renderer {
|
|
|
836
864
|
|
|
837
865
|
}
|
|
838
866
|
|
|
839
|
-
_renderObjectDirect( object, scene, camera,
|
|
867
|
+
_renderObjectDirect( object, material, scene, camera, lightsNode, passId ) {
|
|
868
|
+
|
|
869
|
+
const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
|
|
840
870
|
|
|
841
871
|
//
|
|
842
872
|
|
|
843
|
-
|
|
844
|
-
renderObject.context = this._currentRenderContext;
|
|
873
|
+
this._nodes.updateBefore( renderObject );
|
|
845
874
|
|
|
846
875
|
//
|
|
847
876
|
|
|
848
|
-
|
|
877
|
+
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
878
|
+
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
849
879
|
|
|
850
880
|
//
|
|
851
881
|
|
|
852
882
|
this._nodes.updateForRender( renderObject );
|
|
853
|
-
this._geometries.
|
|
883
|
+
this._geometries.updateForRender( renderObject );
|
|
854
884
|
this._bindings.updateForRender( renderObject );
|
|
885
|
+
this._pipelines.updateForRender( renderObject );
|
|
855
886
|
|
|
856
887
|
//
|
|
857
888
|
|
|
@@ -17,6 +17,7 @@ class Textures extends DataMap {
|
|
|
17
17
|
updateRenderTarget( renderTarget ) {
|
|
18
18
|
|
|
19
19
|
const renderTargetData = this.get( renderTarget );
|
|
20
|
+
const sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
|
|
20
21
|
|
|
21
22
|
const texture = renderTarget.texture;
|
|
22
23
|
const size = this.getSize( texture );
|
|
@@ -48,8 +49,19 @@ class Textures extends DataMap {
|
|
|
48
49
|
renderTargetData.texture = texture;
|
|
49
50
|
renderTargetData.depthTexture = depthTexture;
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
if ( renderTargetData.sampleCount !== sampleCount ) {
|
|
53
|
+
|
|
54
|
+
texture.needsUpdate = true;
|
|
55
|
+
depthTexture.needsUpdate = true;
|
|
56
|
+
|
|
57
|
+
renderTargetData.sampleCount = sampleCount;
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const options = { sampleCount };
|
|
62
|
+
|
|
63
|
+
this.updateTexture( texture, options );
|
|
64
|
+
this.updateTexture( depthTexture, options );
|
|
53
65
|
|
|
54
66
|
// dispose handler
|
|
55
67
|
|
|
@@ -74,15 +86,15 @@ class Textures extends DataMap {
|
|
|
74
86
|
|
|
75
87
|
}
|
|
76
88
|
|
|
77
|
-
updateTexture( texture ) {
|
|
89
|
+
updateTexture( texture, options = {} ) {
|
|
78
90
|
|
|
79
91
|
const textureData = this.get( texture );
|
|
80
92
|
if ( textureData.initialized === true && textureData.version === texture.version ) return;
|
|
81
93
|
|
|
82
|
-
const
|
|
94
|
+
const isRenderTarget = texture.isRenderTargetTexture || texture.isDepthTexture || texture.isFramebufferTexture;
|
|
83
95
|
const backend = this.backend;
|
|
84
96
|
|
|
85
|
-
if (
|
|
97
|
+
if ( isRenderTarget && textureData.initialized === true ) {
|
|
86
98
|
|
|
87
99
|
// it's an update
|
|
88
100
|
|
|
@@ -93,10 +105,10 @@ class Textures extends DataMap {
|
|
|
93
105
|
|
|
94
106
|
//
|
|
95
107
|
|
|
96
|
-
if (
|
|
108
|
+
if ( isRenderTarget ) {
|
|
97
109
|
|
|
98
110
|
backend.createSampler( texture );
|
|
99
|
-
backend.createTexture( texture );
|
|
111
|
+
backend.createTexture( texture, options );
|
|
100
112
|
|
|
101
113
|
} else {
|
|
102
114
|
|
|
@@ -120,7 +132,7 @@ class Textures extends DataMap {
|
|
|
120
132
|
|
|
121
133
|
if ( textureData.isDefaultTexture === undefined || textureData.isDefaultTexture === true ) {
|
|
122
134
|
|
|
123
|
-
backend.createTexture( texture );
|
|
135
|
+
backend.createTexture( texture, options );
|
|
124
136
|
|
|
125
137
|
textureData.isDefaultTexture = false;
|
|
126
138
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataMap from '../DataMap.js';
|
|
2
2
|
import { NoToneMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from 'three';
|
|
3
|
-
import { NodeFrame, cubeTexture, texture, rangeFog, densityFog, reference, toneMapping,
|
|
3
|
+
import { NodeFrame, cubeTexture, texture, rangeFog, densityFog, reference, toneMapping, equirectUV, viewportBottomLeft, normalWorld } from '../../../nodes/Nodes.js';
|
|
4
4
|
|
|
5
5
|
class Nodes extends DataMap {
|
|
6
6
|
|
|
@@ -77,6 +77,8 @@ class Nodes extends DataMap {
|
|
|
77
77
|
|
|
78
78
|
getToneMappingNode() {
|
|
79
79
|
|
|
80
|
+
if ( this.isToneMappingState === false ) return null;
|
|
81
|
+
|
|
80
82
|
return this.renderer.toneMappingNode || this.get( this.renderer ).toneMappingNode || null;
|
|
81
83
|
|
|
82
84
|
}
|
|
@@ -107,13 +109,22 @@ class Nodes extends DataMap {
|
|
|
107
109
|
|
|
108
110
|
}
|
|
109
111
|
|
|
112
|
+
get isToneMappingState() {
|
|
113
|
+
|
|
114
|
+
const renderer = this.renderer;
|
|
115
|
+
const renderTarget = renderer.getRenderTarget();
|
|
116
|
+
|
|
117
|
+
return renderTarget && renderTarget.isCubeRenderTarget ? false : true;
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
|
|
110
121
|
updateToneMapping() {
|
|
111
122
|
|
|
112
123
|
const renderer = this.renderer;
|
|
113
124
|
const rendererData = this.get( renderer );
|
|
114
125
|
const rendererToneMapping = renderer.toneMapping;
|
|
115
126
|
|
|
116
|
-
if ( rendererToneMapping !== NoToneMapping ) {
|
|
127
|
+
if ( this.isToneMappingState && rendererToneMapping !== NoToneMapping ) {
|
|
117
128
|
|
|
118
129
|
if ( rendererData.toneMapping !== rendererToneMapping ) {
|
|
119
130
|
|
|
@@ -149,7 +160,7 @@ class Nodes extends DataMap {
|
|
|
149
160
|
|
|
150
161
|
if ( background.isCubeTexture === true ) {
|
|
151
162
|
|
|
152
|
-
backgroundNode = cubeTexture( background,
|
|
163
|
+
backgroundNode = cubeTexture( background, normalWorld );
|
|
153
164
|
|
|
154
165
|
} else if ( background.isTexture === true ) {
|
|
155
166
|
|
|
@@ -165,7 +176,7 @@ class Nodes extends DataMap {
|
|
|
165
176
|
|
|
166
177
|
}
|
|
167
178
|
|
|
168
|
-
backgroundNode = texture( background, nodeUV );
|
|
179
|
+
backgroundNode = texture( background, nodeUV ).setUpdateMatrix( true );
|
|
169
180
|
|
|
170
181
|
} else if ( background.isColor !== true ) {
|
|
171
182
|
|