super-three 0.162.0 → 0.164.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 (187) hide show
  1. package/build/three.cjs +847 -1226
  2. package/build/three.module.js +846 -1225
  3. package/build/three.module.min.js +2 -2
  4. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  5. package/examples/jsm/controls/TransformControls.js +3 -3
  6. package/examples/jsm/exporters/GLTFExporter.js +66 -5
  7. package/examples/jsm/exporters/USDZExporter.js +22 -1
  8. package/examples/jsm/geometries/TextGeometry.js +10 -2
  9. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  10. package/examples/jsm/libs/draco/README.md +2 -2
  11. package/examples/jsm/libs/fflate.module.js +694 -496
  12. package/examples/jsm/lines/LineMaterial.js +0 -2
  13. package/examples/jsm/loaders/3MFLoader.js +2 -0
  14. package/examples/jsm/loaders/EXRLoader.js +351 -97
  15. package/examples/jsm/loaders/FBXLoader.js +1 -1
  16. package/examples/jsm/loaders/GLTFLoader.js +59 -0
  17. package/examples/jsm/loaders/KTX2Loader.js +3 -10
  18. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  19. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  20. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  21. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  22. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  23. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  24. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  25. package/examples/jsm/math/Octree.js +26 -20
  26. package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
  27. package/examples/jsm/nodes/Nodes.js +10 -4
  28. package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
  29. package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
  30. package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
  31. package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
  32. package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
  33. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
  35. package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
  36. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
  38. package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
  39. package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
  40. package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
  41. package/examples/jsm/nodes/code/FunctionNode.js +0 -8
  42. package/examples/jsm/nodes/core/Node.js +63 -4
  43. package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
  44. package/examples/jsm/nodes/core/NodeFrame.js +10 -10
  45. package/examples/jsm/nodes/core/NodeUtils.js +2 -2
  46. package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
  47. package/examples/jsm/nodes/core/PropertyNode.js +10 -0
  48. package/examples/jsm/nodes/core/UniformNode.js +20 -0
  49. package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
  50. package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
  51. package/examples/jsm/nodes/display/PassNode.js +17 -1
  52. package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
  53. package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
  54. package/examples/jsm/nodes/display/ViewportNode.js +4 -2
  55. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
  56. package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
  57. package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
  58. package/examples/jsm/nodes/fog/FogNode.js +13 -3
  59. package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
  60. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
  61. package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  62. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
  63. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  64. package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
  65. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +164 -10
  66. package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
  67. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
  68. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
  69. package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
  70. package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
  71. package/examples/jsm/nodes/lighting/LightsNode.js +11 -1
  72. package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
  73. package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
  74. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +10 -6
  75. package/examples/jsm/nodes/materials/Materials.js +1 -0
  76. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
  77. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
  78. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +76 -5
  79. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
  80. package/examples/jsm/nodes/materials/NodeMaterial.js +55 -43
  81. package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
  82. package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
  83. package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
  84. package/examples/jsm/nodes/shadernode/ShaderNode.js +3 -9
  85. package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
  86. package/examples/jsm/objects/QuadMesh.js +7 -23
  87. package/examples/jsm/physics/JoltPhysics.js +281 -0
  88. package/examples/jsm/physics/RapierPhysics.js +4 -4
  89. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  90. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  91. package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
  92. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  93. package/examples/jsm/postprocessing/SSAOPass.js +0 -3
  94. package/examples/jsm/renderers/common/Animation.js +3 -0
  95. package/examples/jsm/renderers/common/Background.js +8 -8
  96. package/examples/jsm/renderers/common/ClippingContext.js +1 -1
  97. package/examples/jsm/renderers/common/Info.js +11 -19
  98. package/examples/jsm/renderers/common/PostProcessing.js +12 -4
  99. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  100. package/examples/jsm/renderers/common/RenderList.js +1 -1
  101. package/examples/jsm/renderers/common/RenderObject.js +47 -5
  102. package/examples/jsm/renderers/common/RenderObjects.js +1 -1
  103. package/examples/jsm/renderers/common/Renderer.js +153 -21
  104. package/examples/jsm/renderers/common/Textures.js +1 -1
  105. package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
  106. package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
  107. package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
  108. package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
  109. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
  110. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
  111. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
  112. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
  113. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
  115. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
  116. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
  119. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  120. package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
  121. package/examples/jsm/utils/GPUStatsPanel.js +10 -45
  122. package/examples/jsm/utils/SceneUtils.js +60 -1
  123. package/examples/jsm/utils/TextureUtils.js +1 -1
  124. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  125. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  126. package/package.json +1 -1
  127. package/src/Three.js +0 -1
  128. package/src/animation/AnimationClip.js +1 -1
  129. package/src/constants.js +3 -3
  130. package/src/core/Object3D.js +10 -7
  131. package/src/core/RenderTarget.js +8 -0
  132. package/src/extras/PMREMGenerator.js +21 -11
  133. package/src/loaders/FileLoader.js +1 -1
  134. package/src/loaders/MaterialLoader.js +1 -0
  135. package/src/loaders/ObjectLoader.js +2 -0
  136. package/src/materials/Material.js +2 -0
  137. package/src/materials/MeshPhysicalMaterial.js +20 -0
  138. package/src/materials/ShaderMaterial.js +0 -4
  139. package/src/math/Spherical.js +4 -5
  140. package/src/objects/BatchedMesh.js +27 -3
  141. package/src/objects/InstancedMesh.js +10 -0
  142. package/src/objects/Line.js +66 -43
  143. package/src/renderers/WebGLRenderer.js +130 -158
  144. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  145. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  146. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  147. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  148. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  149. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  150. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
  151. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
  152. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  153. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  154. package/src/renderers/shaders/ShaderChunk.js +0 -2
  155. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  156. package/src/renderers/shaders/ShaderLib.js +2 -1
  157. package/src/renderers/shaders/UniformsUtils.js +10 -1
  158. package/src/renderers/webgl/WebGLAttributes.js +6 -33
  159. package/src/renderers/webgl/WebGLBackground.js +18 -3
  160. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  161. package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
  162. package/src/renderers/webgl/WebGLCapabilities.js +35 -13
  163. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  164. package/src/renderers/webgl/WebGLExtensions.js +4 -19
  165. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
  166. package/src/renderers/webgl/WebGLLights.js +6 -32
  167. package/src/renderers/webgl/WebGLMaterials.js +8 -3
  168. package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
  169. package/src/renderers/webgl/WebGLProgram.js +21 -52
  170. package/src/renderers/webgl/WebGLPrograms.js +24 -31
  171. package/src/renderers/webgl/WebGLRenderStates.js +13 -7
  172. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  173. package/src/renderers/webgl/WebGLState.js +15 -59
  174. package/src/renderers/webgl/WebGLTextures.js +138 -292
  175. package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
  176. package/src/renderers/webgl/WebGLUtils.js +9 -78
  177. package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
  178. package/src/renderers/webxr/WebXRManager.js +4 -6
  179. package/src/scenes/Scene.js +7 -1
  180. package/src/textures/Texture.js +11 -1
  181. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  182. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
  183. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
  184. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
  185. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
  186. package/src/renderers/WebGL1Renderer.js +0 -7
  187. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
@@ -12,7 +12,9 @@ import Background from './Background.js';
12
12
  import Nodes from './nodes/Nodes.js';
13
13
  import Color4 from './Color4.js';
14
14
  import ClippingContext from './ClippingContext.js';
15
- import { Scene, Frustum, Matrix4, Vector2, Vector3, Vector4, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping } from 'three';
15
+ import { Scene, Frustum, Matrix4, Vector2, Vector3, Vector4, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, RenderTarget, HalfFloatType, RGBAFormat } from 'three';
16
+ import { NodeMaterial } from '../../nodes/Nodes.js';
17
+ import QuadMesh from '../../objects/QuadMesh.js';
16
18
 
17
19
  const _scene = new Scene();
18
20
  const _drawingBufferSize = new Vector2();
@@ -20,6 +22,7 @@ const _screen = new Vector4();
20
22
  const _frustum = new Frustum();
21
23
  const _projScreenMatrix = new Matrix4();
22
24
  const _vector3 = new Vector3();
25
+ const _quad = new QuadMesh( new NodeMaterial() );
23
26
 
24
27
  class Renderer {
25
28
 
@@ -57,12 +60,16 @@ class Renderer {
57
60
  this.sortObjects = true;
58
61
 
59
62
  this.depth = true;
60
- this.stencil = true;
63
+ this.stencil = false;
61
64
 
62
65
  this.clippingPlanes = [];
63
66
 
64
67
  this.info = new Info();
65
68
 
69
+ // nodes
70
+
71
+ this.toneMappingNode = null;
72
+
66
73
  // internals
67
74
 
68
75
  this._pixelRatio = 1;
@@ -90,6 +97,7 @@ class Renderer {
90
97
  this._opaqueSort = null;
91
98
  this._transparentSort = null;
92
99
 
100
+ this._frameBufferTarget = null;
93
101
 
94
102
  const alphaClear = this.alpha === true ? 0 : 1;
95
103
 
@@ -312,7 +320,7 @@ class Renderer {
312
320
 
313
321
  if ( this._initialized === false ) await this.init();
314
322
 
315
- const renderContext = this._renderContext( scene, camera );
323
+ const renderContext = this._renderScene( scene, camera );
316
324
 
317
325
  await this.backend.resolveTimestampAsync( renderContext, 'render' );
318
326
 
@@ -322,16 +330,66 @@ class Renderer {
322
330
 
323
331
  if ( this._initialized === false ) {
324
332
 
325
- console.error( 'THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.' );
326
- return;
333
+ console.warn( 'THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.' );
334
+
335
+ return this.renderAsync( scene, camera );
336
+
337
+ }
338
+
339
+ this._renderScene( scene, camera );
340
+
341
+ }
342
+
343
+ _getFrameBufferTarget() {
344
+
345
+ const { currentColorSpace } = this;
346
+
347
+ const useToneMapping = this._renderTarget === null && ( this.toneMapping !== NoToneMapping || this.toneMappingNode !== null );
348
+ const useColorSpace = currentColorSpace !== LinearSRGBColorSpace && currentColorSpace !== NoColorSpace;
349
+
350
+ if ( useToneMapping === false && useColorSpace === false ) return null;
351
+
352
+ const { width, height } = this.getDrawingBufferSize( _drawingBufferSize );
353
+ const { depth, stencil } = this;
354
+
355
+ let frameBufferTarget = this._frameBufferTarget;
356
+
357
+ if ( frameBufferTarget === null ) {
358
+
359
+ frameBufferTarget = new RenderTarget( width, height, {
360
+ depthBuffer: depth,
361
+ stencilBuffer: stencil,
362
+ type: HalfFloatType, // FloatType
363
+ format: RGBAFormat,
364
+ colorSpace: LinearSRGBColorSpace,
365
+ generateMipmaps: false,
366
+ minFilter: LinearFilter,
367
+ magFilter: LinearFilter,
368
+ samples: this.backend.parameters.antialias ? 4 : 0
369
+ } );
370
+
371
+ frameBufferTarget.isPostProcessingRenderTarget = true;
372
+
373
+ this._frameBufferTarget = frameBufferTarget;
327
374
 
328
375
  }
329
376
 
330
- this._renderContext( scene, camera );
377
+ frameBufferTarget.depthBuffer = depth;
378
+ frameBufferTarget.stencilBuffer = stencil;
379
+ frameBufferTarget.setSize( width, height );
380
+ frameBufferTarget.viewport.copy( this._viewport );
381
+ frameBufferTarget.scissor.copy( this._scissor );
382
+ frameBufferTarget.viewport.multiplyScalar( this._pixelRatio );
383
+ frameBufferTarget.scissor.multiplyScalar( this._pixelRatio );
384
+ frameBufferTarget.scissorTest = this._scissorTest;
385
+
386
+ return frameBufferTarget;
331
387
 
332
388
  }
333
389
 
334
- _renderContext( scene, camera ) {
390
+ _renderScene( scene, camera, useFrameBufferTarget = true ) {
391
+
392
+ const frameBufferTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : null;
335
393
 
336
394
  // preserve render tree
337
395
 
@@ -345,11 +403,31 @@ class Renderer {
345
403
 
346
404
  const sceneRef = ( scene.isScene === true ) ? scene : _scene;
347
405
 
348
- const renderTarget = this._renderTarget;
349
- const renderContext = this._renderContexts.get( scene, camera, renderTarget );
406
+ const outputRenderTarget = this._renderTarget;
407
+
350
408
  const activeCubeFace = this._activeCubeFace;
351
409
  const activeMipmapLevel = this._activeMipmapLevel;
352
410
 
411
+ //
412
+
413
+ let renderTarget;
414
+
415
+ if ( frameBufferTarget !== null ) {
416
+
417
+ renderTarget = frameBufferTarget;
418
+
419
+ this.setRenderTarget( renderTarget );
420
+
421
+ } else {
422
+
423
+ renderTarget = outputRenderTarget;
424
+
425
+ }
426
+
427
+ //
428
+
429
+ const renderContext = this._renderContexts.get( scene, camera, renderTarget );
430
+
353
431
  this._currentRenderContext = renderContext;
354
432
  this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject;
355
433
 
@@ -378,7 +456,6 @@ class Renderer {
378
456
 
379
457
  if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
380
458
 
381
- if ( this.info.autoReset === true ) this.info.reset();
382
459
 
383
460
  //
384
461
 
@@ -505,6 +582,18 @@ class Renderer {
505
582
 
506
583
  //
507
584
 
585
+ if ( frameBufferTarget !== null ) {
586
+
587
+ this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );
588
+
589
+ _quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
590
+
591
+ this._renderScene( _quad, _quad.camera, false );
592
+
593
+ }
594
+
595
+ //
596
+
508
597
  sceneRef.onAfterRender( this, scene, camera, renderTarget );
509
598
 
510
599
  //
@@ -761,8 +850,17 @@ class Renderer {
761
850
 
762
851
  clear( color = true, depth = true, stencil = true ) {
763
852
 
853
+ if ( this._initialized === false ) {
854
+
855
+ console.warn( 'THREE.Renderer: .clear() called before the backend is initialized. Try using .clearAsync() instead.' );
856
+
857
+ return this.clearAsync( color, depth, stencil );
858
+
859
+ }
860
+
861
+ const renderTarget = this._renderTarget || this._getFrameBufferTarget();
862
+
764
863
  let renderTargetData = null;
765
- const renderTarget = this._renderTarget;
766
864
 
767
865
  if ( renderTarget !== null ) {
768
866
 
@@ -897,7 +995,6 @@ class Renderer {
897
995
  nodeFrame.renderId = this.info.calls;
898
996
 
899
997
  //
900
- if ( this.info.autoReset === true ) this.info.resetCompute();
901
998
 
902
999
  const backend = this.backend;
903
1000
  const pipelines = this._pipelines;
@@ -957,14 +1054,24 @@ class Renderer {
957
1054
 
958
1055
  }
959
1056
 
960
- hasFeatureAsync( name ) {
1057
+ async hasFeatureAsync( name ) {
961
1058
 
962
- return this.backend.hasFeatureAsync( name );
1059
+ if ( this._initialized === false ) await this.init();
1060
+
1061
+ return this.backend.hasFeature( name );
963
1062
 
964
1063
  }
965
1064
 
966
1065
  hasFeature( name ) {
967
1066
 
1067
+ if ( this._initialized === false ) {
1068
+
1069
+ console.warn( 'THREE.Renderer: .hasFeature() called before the backend is initialized. Try using .hasFeatureAsync() instead.' );
1070
+
1071
+ return false;
1072
+
1073
+ }
1074
+
968
1075
  return this.backend.hasFeature( name );
969
1076
 
970
1077
  }
@@ -979,9 +1086,19 @@ class Renderer {
979
1086
 
980
1087
  }
981
1088
 
982
- readRenderTargetPixelsAsync( renderTarget, x, y, width, height ) {
1089
+ copyTextureToTexture( position, srcTexture, dstTexture, level = 0 ) {
1090
+
1091
+ this._textures.updateTexture( srcTexture );
1092
+ this._textures.updateTexture( dstTexture );
1093
+
1094
+ this.backend.copyTextureToTexture( position, srcTexture, dstTexture, level );
1095
+
1096
+ }
1097
+
1098
+
1099
+ readRenderTargetPixelsAsync( renderTarget, x, y, width, height, index = 0 ) {
983
1100
 
984
- return this.backend.copyTextureToBuffer( renderTarget.texture, x, y, width, height );
1101
+ return this.backend.copyTextureToBuffer( renderTarget.textures[ index ], x, y, width, height );
985
1102
 
986
1103
  }
987
1104
 
@@ -1141,6 +1258,7 @@ class Renderer {
1141
1258
 
1142
1259
  let overridePositionNode;
1143
1260
  let overrideFragmentNode;
1261
+ let overrideDepthNode;
1144
1262
 
1145
1263
  //
1146
1264
 
@@ -1157,7 +1275,6 @@ class Renderer {
1157
1275
  if ( material.positionNode && material.positionNode.isNode ) {
1158
1276
 
1159
1277
  overridePositionNode = overrideMaterial.positionNode;
1160
-
1161
1278
  overrideMaterial.positionNode = material.positionNode;
1162
1279
 
1163
1280
  }
@@ -1166,6 +1283,14 @@ class Renderer {
1166
1283
 
1167
1284
  overrideMaterial.side = material.shadowSide === null ? material.side : material.shadowSide;
1168
1285
 
1286
+ if ( material.depthNode && material.depthNode.isNode ) {
1287
+
1288
+ overrideDepthNode = overrideMaterial.depthNode;
1289
+ overrideMaterial.depthNode = material.depthNode;
1290
+
1291
+ }
1292
+
1293
+
1169
1294
  if ( material.shadowNode && material.shadowNode.isNode ) {
1170
1295
 
1171
1296
  overrideFragmentNode = overrideMaterial.fragmentNode;
@@ -1210,16 +1335,16 @@ class Renderer {
1210
1335
  if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
1211
1336
 
1212
1337
  material.side = BackSide;
1213
- this._handleObjectFunction( object, material, scene, camera, lightsNode, 'backSide' ); // create backSide pass id
1338
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group, 'backSide' ); // create backSide pass id
1214
1339
 
1215
1340
  material.side = FrontSide;
1216
- this._handleObjectFunction( object, material, scene, camera, lightsNode ); // use default pass id
1341
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group ); // use default pass id
1217
1342
 
1218
1343
  material.side = DoubleSide;
1219
1344
 
1220
1345
  } else {
1221
1346
 
1222
- this._handleObjectFunction( object, material, scene, camera, lightsNode );
1347
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group );
1223
1348
 
1224
1349
  }
1225
1350
 
@@ -1231,6 +1356,12 @@ class Renderer {
1231
1356
 
1232
1357
  }
1233
1358
 
1359
+ if ( overrideDepthNode !== undefined ) {
1360
+
1361
+ scene.overrideMaterial.depthNode = overrideDepthNode;
1362
+
1363
+ }
1364
+
1234
1365
  if ( overrideFragmentNode !== undefined ) {
1235
1366
 
1236
1367
  scene.overrideMaterial.fragmentNode = overrideFragmentNode;
@@ -1243,9 +1374,10 @@ class Renderer {
1243
1374
 
1244
1375
  }
1245
1376
 
1246
- _renderObjectDirect( object, material, scene, camera, lightsNode, passId ) {
1377
+ _renderObjectDirect( object, material, scene, camera, lightsNode, group, passId ) {
1247
1378
 
1248
1379
  const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
1380
+ renderObject.drawRange = group || object.geometry.drawRange;
1249
1381
 
1250
1382
  //
1251
1383
 
@@ -38,7 +38,7 @@ class Textures extends DataMap {
38
38
 
39
39
  depthTexture = new DepthTexture();
40
40
  depthTexture.format = renderTarget.stencilBuffer ? DepthStencilFormat : DepthFormat;
41
- depthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType;
41
+ depthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType; // FloatType
42
42
  depthTexture.image.width = mipWidth;
43
43
  depthTexture.image.height = mipHeight;
44
44