super-three 0.161.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 (206) hide show
  1. package/build/three.cjs +822 -1332
  2. package/build/three.module.js +820 -1328
  3. package/build/three.module.min.js +1 -1
  4. package/examples/jsm/controls/DragControls.js +91 -30
  5. package/examples/jsm/controls/OrbitControls.js +32 -6
  6. package/examples/jsm/controls/TransformControls.js +9 -9
  7. package/examples/jsm/exporters/GLTFExporter.js +30 -3
  8. package/examples/jsm/exporters/USDZExporter.js +15 -0
  9. package/examples/jsm/geometries/TextGeometry.js +10 -2
  10. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  11. package/examples/jsm/interactive/InteractiveGroup.js +15 -25
  12. package/examples/jsm/libs/fflate.module.js +694 -496
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
  14. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
  15. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  16. package/examples/jsm/libs/tween.module.js +32 -14
  17. package/examples/jsm/lines/LineMaterial.js +0 -2
  18. package/examples/jsm/loaders/3DMLoader.js +13 -21
  19. package/examples/jsm/loaders/3MFLoader.js +2 -0
  20. package/examples/jsm/loaders/EXRLoader.js +89 -19
  21. package/examples/jsm/loaders/FBXLoader.js +1 -1
  22. package/examples/jsm/loaders/GLTFLoader.js +6 -0
  23. package/examples/jsm/loaders/KTX2Loader.js +2 -6
  24. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  25. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  26. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  27. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  28. package/examples/jsm/loaders/VOXLoader.js +9 -2
  29. package/examples/jsm/loaders/VRMLLoader.js +6 -2
  30. package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
  31. package/examples/jsm/misc/ProgressiveLightMap.js +1 -0
  32. package/examples/jsm/nodes/Nodes.js +15 -8
  33. package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
  34. package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
  35. package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
  36. package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
  37. package/examples/jsm/nodes/accessors/MaterialNode.js +2 -2
  38. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -12
  39. package/examples/jsm/nodes/accessors/MorphNode.js +20 -10
  40. package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
  41. package/examples/jsm/nodes/accessors/ReferenceNode.js +87 -29
  42. package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
  43. package/examples/jsm/nodes/accessors/SkinningNode.js +31 -10
  44. package/examples/jsm/nodes/accessors/StorageBufferNode.js +18 -0
  45. package/examples/jsm/nodes/accessors/TangentNode.js +8 -2
  46. package/examples/jsm/nodes/accessors/TextureNode.js +30 -7
  47. package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
  48. package/examples/jsm/nodes/code/CodeNode.js +6 -0
  49. package/examples/jsm/nodes/core/AssignNode.js +68 -12
  50. package/examples/jsm/nodes/core/Node.js +67 -6
  51. package/examples/jsm/nodes/core/NodeBuilder.js +23 -24
  52. package/examples/jsm/nodes/core/NodeFrame.js +8 -8
  53. package/examples/jsm/nodes/core/NodeUtils.js +2 -2
  54. package/examples/jsm/nodes/core/TempNode.js +1 -1
  55. package/examples/jsm/nodes/core/UniformNode.js +20 -0
  56. package/examples/jsm/nodes/display/BlendModeNode.js +30 -1
  57. package/examples/jsm/nodes/display/NormalMapNode.js +3 -5
  58. package/examples/jsm/nodes/display/PassNode.js +17 -1
  59. package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
  60. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
  61. package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
  62. package/examples/jsm/nodes/fog/FogNode.js +13 -3
  63. package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
  64. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  65. package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
  66. package/examples/jsm/nodes/materials/NodeMaterial.js +70 -17
  67. package/examples/jsm/nodes/math/CondNode.js +42 -7
  68. package/examples/jsm/nodes/math/MathNode.js +20 -0
  69. package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
  70. package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
  71. package/examples/jsm/nodes/shadernode/ShaderNode.js +1 -1
  72. package/examples/jsm/nodes/utils/ArrayElementNode.js +0 -6
  73. package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
  74. package/examples/jsm/nodes/utils/LoopNode.js +2 -0
  75. package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -0
  76. package/examples/jsm/objects/QuadMesh.js +7 -23
  77. package/examples/jsm/physics/RapierPhysics.js +4 -4
  78. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  79. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  80. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  81. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  82. package/examples/jsm/postprocessing/SSAOPass.js +0 -3
  83. package/examples/jsm/renderers/common/Animation.js +3 -0
  84. package/examples/jsm/renderers/common/Background.js +3 -3
  85. package/examples/jsm/renderers/common/ClippingContext.js +165 -0
  86. package/examples/jsm/renderers/common/Info.js +11 -19
  87. package/examples/jsm/renderers/common/PostProcessing.js +12 -4
  88. package/examples/jsm/renderers/common/RenderContext.js +3 -1
  89. package/examples/jsm/renderers/common/RenderContexts.js +2 -13
  90. package/examples/jsm/renderers/common/RenderObject.js +46 -3
  91. package/examples/jsm/renderers/common/RenderObjects.js +2 -0
  92. package/examples/jsm/renderers/common/Renderer.js +113 -39
  93. package/examples/jsm/renderers/common/StorageBufferAttribute.js +2 -2
  94. package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
  95. package/examples/jsm/renderers/common/Textures.js +3 -13
  96. package/examples/jsm/renderers/common/UniformsGroup.js +6 -4
  97. package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
  98. package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
  99. package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
  100. package/examples/jsm/renderers/common/nodes/Nodes.js +6 -18
  101. package/examples/jsm/renderers/webgl/WebGLBackend.js +174 -30
  102. package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
  103. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +136 -11
  104. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +8 -2
  105. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
  106. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +90 -0
  107. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -1
  108. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
  109. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
  110. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +67 -37
  111. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +20 -43
  112. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +32 -1
  113. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
  114. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +94 -20
  115. package/examples/jsm/shaders/OutputShader.js +4 -0
  116. package/examples/jsm/utils/GPUStatsPanel.js +10 -45
  117. package/examples/jsm/utils/SkeletonUtils.js +14 -3
  118. package/examples/jsm/utils/TextureUtils.js +1 -1
  119. package/examples/jsm/webxr/VRButton.js +13 -5
  120. package/examples/jsm/webxr/XRButton.js +0 -1
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +8 -0
  122. package/package.json +4 -3
  123. package/src/Three.Legacy.js +20 -0
  124. package/src/Three.js +0 -2
  125. package/src/animation/AnimationClip.js +1 -1
  126. package/src/constants.js +4 -7
  127. package/src/core/BufferAttribute.js +0 -11
  128. package/src/core/BufferGeometry.js +23 -29
  129. package/src/core/Object3D.js +21 -7
  130. package/src/core/Raycaster.js +18 -4
  131. package/src/core/RenderTarget.js +44 -21
  132. package/src/extras/PMREMGenerator.js +11 -0
  133. package/src/extras/curves/EllipseCurve.js +2 -2
  134. package/src/helpers/SpotLightHelper.js +18 -1
  135. package/src/loaders/DataTextureLoader.js +0 -4
  136. package/src/loaders/MaterialLoader.js +1 -0
  137. package/src/loaders/ObjectLoader.js +4 -1
  138. package/src/materials/Material.js +2 -1
  139. package/src/materials/MeshBasicMaterial.js +3 -0
  140. package/src/materials/MeshLambertMaterial.js +3 -0
  141. package/src/materials/MeshPhongMaterial.js +3 -0
  142. package/src/materials/MeshStandardMaterial.js +3 -0
  143. package/src/materials/ShaderMaterial.js +0 -4
  144. package/src/math/Quaternion.js +13 -12
  145. package/src/math/Spherical.js +4 -5
  146. package/src/math/Vector3.js +7 -7
  147. package/src/objects/BatchedMesh.js +4 -3
  148. package/src/objects/InstancedMesh.js +63 -0
  149. package/src/objects/Mesh.js +0 -1
  150. package/src/renderers/WebGLCubeRenderTarget.js +1 -10
  151. package/src/renderers/WebGLRenderer.js +70 -136
  152. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -0
  153. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  154. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  155. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  156. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  157. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  158. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  159. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -1
  160. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  161. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +11 -2
  162. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
  163. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +23 -0
  164. package/src/renderers/shaders/ShaderChunk.js +2 -0
  165. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
  166. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  167. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  168. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
  169. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -0
  170. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
  171. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
  172. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -0
  173. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
  174. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  175. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
  176. package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
  177. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
  178. package/src/renderers/shaders/ShaderLib.js +3 -2
  179. package/src/renderers/shaders/UniformsLib.js +1 -0
  180. package/src/renderers/shaders/UniformsUtils.js +10 -1
  181. package/src/renderers/webgl/WebGLAttributes.js +6 -33
  182. package/src/renderers/webgl/WebGLBackground.js +18 -0
  183. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  184. package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
  185. package/src/renderers/webgl/WebGLCapabilities.js +2 -12
  186. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  187. package/src/renderers/webgl/WebGLExtensions.js +4 -19
  188. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
  189. package/src/renderers/webgl/WebGLLights.js +6 -32
  190. package/src/renderers/webgl/WebGLMaterials.js +26 -4
  191. package/src/renderers/webgl/WebGLMorphtargets.js +79 -210
  192. package/src/renderers/webgl/WebGLProgram.js +30 -48
  193. package/src/renderers/webgl/WebGLPrograms.js +5 -14
  194. package/src/renderers/webgl/WebGLRenderStates.js +8 -6
  195. package/src/renderers/webgl/WebGLState.js +21 -75
  196. package/src/renderers/webgl/WebGLTextures.js +143 -275
  197. package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
  198. package/src/renderers/webgl/WebGLUtils.js +6 -57
  199. package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
  200. package/src/renderers/webxr/WebXRManager.js +2 -2
  201. package/src/scenes/Scene.js +14 -0
  202. package/src/textures/Texture.js +6 -24
  203. package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
  204. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  205. package/src/renderers/WebGL1Renderer.js +0 -7
  206. package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
@@ -11,8 +11,6 @@ import {
11
11
  LinearMipmapLinearFilter,
12
12
  SRGBColorSpace,
13
13
  LinearSRGBColorSpace,
14
- sRGBEncoding,
15
- LinearEncoding,
16
14
  RGBAIntegerFormat,
17
15
  RGIntegerFormat,
18
16
  RedIntegerFormat,
@@ -31,7 +29,6 @@ import { Matrix4 } from '../math/Matrix4.js';
31
29
  import { Vector2 } from '../math/Vector2.js';
32
30
  import { Vector3 } from '../math/Vector3.js';
33
31
  import { Vector4 } from '../math/Vector4.js';
34
- import { floorPowerOfTwo } from '../math/MathUtils.js';
35
32
  import { WebGLAnimation } from './webgl/WebGLAnimation.js';
36
33
  import { WebGLAttributes } from './webgl/WebGLAttributes.js';
37
34
  import { WebGLBackground } from './webgl/WebGLBackground.js';
@@ -73,7 +70,7 @@ class WebGLRenderer {
73
70
  canvas = createCanvasElement(),
74
71
  context = null,
75
72
  depth = true,
76
- stencil = true,
73
+ stencil = false,
77
74
  alpha = false,
78
75
  antialias = false,
79
76
  premultipliedAlpha = true,
@@ -89,6 +86,12 @@ class WebGLRenderer {
89
86
 
90
87
  if ( context !== null ) {
91
88
 
89
+ if ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {
90
+
91
+ throw new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );
92
+
93
+ }
94
+
92
95
  _alpha = context.getContextAttributes().alpha;
93
96
 
94
97
  } else {
@@ -201,10 +204,6 @@ class WebGLRenderer {
201
204
  let _clippingEnabled = false;
202
205
  let _localClippingEnabled = false;
203
206
 
204
- // transmission
205
-
206
- let _transmissionRenderTarget = null;
207
-
208
207
  // camera matrices cache
209
208
 
210
209
  const _projScreenMatrix = new Matrix4();
@@ -224,15 +223,10 @@ class WebGLRenderer {
224
223
 
225
224
  let _gl = context;
226
225
 
227
- function getContext( contextNames, contextAttributes ) {
228
-
229
- for ( let i = 0; i < contextNames.length; i ++ ) {
226
+ function getContext( contextName, contextAttributes ) {
230
227
 
231
- const contextName = contextNames[ i ];
232
- const context = canvas.getContext( contextName, contextAttributes );
233
- if ( context !== null ) return context;
234
-
235
- }
228
+ const context = canvas.getContext( contextName, contextAttributes );
229
+ if ( context !== null ) return context;
236
230
 
237
231
  return null;
238
232
 
@@ -261,19 +255,13 @@ class WebGLRenderer {
261
255
 
262
256
  if ( _gl === null ) {
263
257
 
264
- const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];
265
-
266
- if ( _this.isWebGL1Renderer === true ) {
258
+ const contextName = 'webgl2';
267
259
 
268
- contextNames.shift();
269
-
270
- }
271
-
272
- _gl = getContext( contextNames, contextAttributes );
260
+ _gl = getContext( contextName, contextAttributes );
273
261
 
274
262
  if ( _gl === null ) {
275
263
 
276
- if ( getContext( contextNames ) ) {
264
+ if ( getContext( contextName ) ) {
277
265
 
278
266
  throw new Error( 'Error creating WebGL context with your selected attributes.' );
279
267
 
@@ -287,24 +275,6 @@ class WebGLRenderer {
287
275
 
288
276
  }
289
277
 
290
- if ( typeof WebGLRenderingContext !== 'undefined' && _gl instanceof WebGLRenderingContext ) { // @deprecated, r153
291
-
292
- console.warn( 'THREE.WebGLRenderer: WebGL 1 support was deprecated in r153 and will be removed in r163.' );
293
-
294
- }
295
-
296
- // Some experimental-webgl implementations do not have getShaderPrecisionFormat
297
-
298
- if ( _gl.getShaderPrecisionFormat === undefined ) {
299
-
300
- _gl.getShaderPrecisionFormat = function () {
301
-
302
- return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };
303
-
304
- };
305
-
306
- }
307
-
308
278
  } catch ( error ) {
309
279
 
310
280
  console.error( 'THREE.WebGLRenderer: ' + error.message );
@@ -324,22 +294,21 @@ class WebGLRenderer {
324
294
  function initGLContext() {
325
295
 
326
296
  extensions = new WebGLExtensions( _gl );
297
+ extensions.init();
327
298
 
328
299
  capabilities = new WebGLCapabilities( _gl, extensions, parameters );
329
300
 
330
- extensions.init( capabilities );
301
+ utils = new WebGLUtils( _gl, extensions );
331
302
 
332
- utils = new WebGLUtils( _gl, extensions, capabilities );
333
-
334
- state = new WebGLState( _gl, extensions, capabilities );
303
+ state = new WebGLState( _gl );
335
304
 
336
305
  info = new WebGLInfo( _gl );
337
306
  properties = new WebGLProperties();
338
307
  textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
339
308
  cubemaps = new WebGLCubeMaps( _this );
340
309
  cubeuvmaps = new WebGLCubeUVMaps( _this );
341
- attributes = new WebGLAttributes( _gl, capabilities );
342
- bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );
310
+ attributes = new WebGLAttributes( _gl );
311
+ bindingStates = new WebGLBindingStates( _gl, attributes );
343
312
  geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
344
313
  objects = new WebGLObjects( _gl, geometries, attributes, info );
345
314
  morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
@@ -347,14 +316,14 @@ class WebGLRenderer {
347
316
  programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
348
317
  materials = new WebGLMaterials( _this, properties );
349
318
  renderLists = new WebGLRenderLists();
350
- renderStates = new WebGLRenderStates( extensions, capabilities );
319
+ renderStates = new WebGLRenderStates( extensions );
351
320
  background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );
352
321
  multiview = new WebGLMultiview( _this, extensions, _gl );
353
322
  shadowMap = new WebGLShadowMap( _this, objects, capabilities );
354
323
  uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
355
324
 
356
- bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );
357
- indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );
325
+ bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );
326
+ indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );
358
327
 
359
328
  info.programs = programCache.programs;
360
329
 
@@ -496,7 +465,7 @@ class WebGLRenderer {
496
465
 
497
466
  }
498
467
 
499
- state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );
468
+ state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).round() );
500
469
 
501
470
  };
502
471
 
@@ -518,7 +487,7 @@ class WebGLRenderer {
518
487
 
519
488
  }
520
489
 
521
- state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );
490
+ state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).round() );
522
491
 
523
492
  };
524
493
 
@@ -686,13 +655,6 @@ class WebGLRenderer {
686
655
  xr.removeEventListener( 'sessionstart', onXRSessionStart );
687
656
  xr.removeEventListener( 'sessionend', onXRSessionEnd );
688
657
 
689
- if ( _transmissionRenderTarget ) {
690
-
691
- _transmissionRenderTarget.dispose();
692
- _transmissionRenderTarget = null;
693
-
694
- }
695
-
696
658
  animation.stop();
697
659
 
698
660
  };
@@ -1461,17 +1423,19 @@ class WebGLRenderer {
1461
1423
 
1462
1424
  }
1463
1425
 
1464
- const isWebGL2 = capabilities.isWebGL2;
1465
-
1466
- if ( _transmissionRenderTarget === null ) {
1426
+ if ( currentRenderState.state.transmissionRenderTarget === null ) {
1467
1427
 
1468
- _transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {
1428
+ currentRenderState.state.transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {
1469
1429
  generateMipmaps: true,
1470
- type: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,
1430
+ type: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,
1471
1431
  minFilter: LinearMipmapLinearFilter,
1472
- samples: ( isWebGL2 ) ? 4 : 0
1432
+ samples: 4,
1433
+ stencilBuffer: stencil
1473
1434
  } );
1474
1435
 
1436
+ const renderTargetProperties = properties.get( currentRenderState.state.transmissionRenderTarget );
1437
+ renderTargetProperties.__isTransmissionRenderTarget = true;
1438
+
1475
1439
  // debug
1476
1440
 
1477
1441
  /*
@@ -1484,22 +1448,15 @@ class WebGLRenderer {
1484
1448
 
1485
1449
  }
1486
1450
 
1487
- _this.getDrawingBufferSize( _vector2 );
1488
-
1489
- if ( isWebGL2 ) {
1490
-
1491
- _transmissionRenderTarget.setSize( _vector2.x, _vector2.y );
1492
-
1493
- } else {
1494
-
1495
- _transmissionRenderTarget.setSize( floorPowerOfTwo( _vector2.x ), floorPowerOfTwo( _vector2.y ) );
1451
+ const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget;
1496
1452
 
1497
- }
1453
+ _this.getDrawingBufferSize( _vector2 );
1454
+ transmissionRenderTarget.setSize( _vector2.x, _vector2.y );
1498
1455
 
1499
1456
  //
1500
1457
 
1501
1458
  const currentRenderTarget = _this.getRenderTarget();
1502
- _this.setRenderTarget( _transmissionRenderTarget );
1459
+ _this.setRenderTarget( transmissionRenderTarget );
1503
1460
 
1504
1461
  _this.getClearColor( _currentClearColor );
1505
1462
  _currentClearAlpha = _this.getClearAlpha();
@@ -1514,8 +1471,8 @@ class WebGLRenderer {
1514
1471
 
1515
1472
  renderObjects( opaqueObjects, scene, camera );
1516
1473
 
1517
- textures.updateMultisampleRenderTarget( _transmissionRenderTarget );
1518
- textures.updateRenderTargetMipmap( _transmissionRenderTarget );
1474
+ textures.updateMultisampleRenderTarget( transmissionRenderTarget );
1475
+ textures.updateRenderTargetMipmap( transmissionRenderTarget );
1519
1476
 
1520
1477
  let renderTargetNeedsUpdate = false;
1521
1478
 
@@ -1548,8 +1505,8 @@ class WebGLRenderer {
1548
1505
 
1549
1506
  if ( renderTargetNeedsUpdate === true ) {
1550
1507
 
1551
- textures.updateMultisampleRenderTarget( _transmissionRenderTarget );
1552
- textures.updateRenderTargetMipmap( _transmissionRenderTarget );
1508
+ textures.updateMultisampleRenderTarget( transmissionRenderTarget );
1509
+ textures.updateRenderTargetMipmap( transmissionRenderTarget );
1553
1510
 
1554
1511
  }
1555
1512
 
@@ -1636,6 +1593,7 @@ class WebGLRenderer {
1636
1593
  materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;
1637
1594
  materialProperties.fog = scene.fog;
1638
1595
  materialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );
1596
+ materialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;
1639
1597
 
1640
1598
  if ( programs === undefined ) {
1641
1599
 
@@ -1748,6 +1706,7 @@ class WebGLRenderer {
1748
1706
  materialProperties.batching = parameters.batching;
1749
1707
  materialProperties.instancing = parameters.instancing;
1750
1708
  materialProperties.instancingColor = parameters.instancingColor;
1709
+ materialProperties.instancingMorph = parameters.instancingMorph;
1751
1710
  materialProperties.skinning = parameters.skinning;
1752
1711
  materialProperties.morphTargets = parameters.morphTargets;
1753
1712
  materialProperties.morphNormals = parameters.morphNormals;
@@ -1861,6 +1820,14 @@ class WebGLRenderer {
1861
1820
 
1862
1821
  needsProgramChange = true;
1863
1822
 
1823
+ } else if ( object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null ) {
1824
+
1825
+ needsProgramChange = true;
1826
+
1827
+ } else if ( object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null ) {
1828
+
1829
+ needsProgramChange = true;
1830
+
1864
1831
  } else if ( materialProperties.envMap !== envMap ) {
1865
1832
 
1866
1833
  needsProgramChange = true;
@@ -1899,7 +1866,7 @@ class WebGLRenderer {
1899
1866
 
1900
1867
  needsProgramChange = true;
1901
1868
 
1902
- } else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {
1869
+ } else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {
1903
1870
 
1904
1871
  needsProgramChange = true;
1905
1872
 
@@ -2021,17 +1988,9 @@ class WebGLRenderer {
2021
1988
 
2022
1989
  if ( skeleton ) {
2023
1990
 
2024
- if ( capabilities.floatVertexTextures ) {
1991
+ if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();
2025
1992
 
2026
- if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();
2027
-
2028
- p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );
2029
-
2030
- } else {
2031
-
2032
- console.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );
2033
-
2034
- }
1993
+ p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );
2035
1994
 
2036
1995
  }
2037
1996
 
@@ -2046,7 +2005,7 @@ class WebGLRenderer {
2046
2005
 
2047
2006
  const morphAttributes = geometry.morphAttributes;
2048
2007
 
2049
- if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined && capabilities.isWebGL2 === true ) ) {
2008
+ if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {
2050
2009
 
2051
2010
  morphtargets.update( object, geometry, program );
2052
2011
 
@@ -2069,6 +2028,12 @@ class WebGLRenderer {
2069
2028
 
2070
2029
  }
2071
2030
 
2031
+ if ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {
2032
+
2033
+ m_uniforms.envMapIntensity.value = scene.environmentIntensity;
2034
+
2035
+ }
2036
+
2072
2037
  if ( refreshMaterial ) {
2073
2038
 
2074
2039
  p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
@@ -2096,7 +2061,7 @@ class WebGLRenderer {
2096
2061
 
2097
2062
  }
2098
2063
 
2099
- materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );
2064
+ materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget );
2100
2065
 
2101
2066
  WebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );
2102
2067
 
@@ -2138,18 +2103,10 @@ class WebGLRenderer {
2138
2103
 
2139
2104
  for ( let i = 0, l = groups.length; i < l; i ++ ) {
2140
2105
 
2141
- if ( capabilities.isWebGL2 ) {
2142
-
2143
- const group = groups[ i ];
2106
+ const group = groups[ i ];
2144
2107
 
2145
- uniformsGroups.update( group, program );
2146
- uniformsGroups.bind( group, program );
2147
-
2148
- } else {
2149
-
2150
- console.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );
2151
-
2152
- }
2108
+ uniformsGroups.update( group, program );
2109
+ uniformsGroups.bind( group, program );
2153
2110
 
2154
2111
  }
2155
2112
 
@@ -2318,7 +2275,7 @@ class WebGLRenderer {
2318
2275
 
2319
2276
  isCube = true;
2320
2277
 
2321
- } else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
2278
+ } else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
2322
2279
 
2323
2280
  framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;
2324
2281
 
@@ -2350,7 +2307,7 @@ class WebGLRenderer {
2350
2307
 
2351
2308
  const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
2352
2309
 
2353
- if ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {
2310
+ if ( framebufferBound && useDefaultFramebuffer ) {
2354
2311
 
2355
2312
  state.drawBuffers( renderTarget, framebuffer );
2356
2313
 
@@ -2411,11 +2368,10 @@ class WebGLRenderer {
2411
2368
 
2412
2369
  }
2413
2370
 
2414
- const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );
2371
+ const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );
2415
2372
 
2416
2373
  if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
2417
- ! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox
2418
- ! halfFloatSupportedByExt ) {
2374
+ textureType !== FloatType && ! halfFloatSupportedByExt ) {
2419
2375
 
2420
2376
  console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
2421
2377
  return;
@@ -2499,15 +2455,8 @@ class WebGLRenderer {
2499
2455
 
2500
2456
  this.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {
2501
2457
 
2502
- if ( _this.isWebGL1Renderer ) {
2503
-
2504
- console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );
2505
- return;
2506
-
2507
- }
2508
-
2509
- const width = sourceBox.max.x - sourceBox.min.x + 1;
2510
- const height = sourceBox.max.y - sourceBox.min.y + 1;
2458
+ const width = Math.round( sourceBox.max.x - sourceBox.min.x );
2459
+ const height = Math.round( sourceBox.max.y - sourceBox.min.y );
2511
2460
  const depth = sourceBox.max.z - sourceBox.min.z + 1;
2512
2461
  const glFormat = utils.convert( dstTexture.format );
2513
2462
  const glType = utils.convert( dstTexture.type );
@@ -2554,9 +2503,8 @@ class WebGLRenderer {
2554
2503
 
2555
2504
  } else {
2556
2505
 
2557
- if ( srcTexture.isCompressedArrayTexture ) {
2506
+ if ( dstTexture.isCompressedArrayTexture ) {
2558
2507
 
2559
- console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );
2560
2508
  _gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );
2561
2509
 
2562
2510
  } else {
@@ -2645,20 +2593,6 @@ class WebGLRenderer {
2645
2593
 
2646
2594
  }
2647
2595
 
2648
- get outputEncoding() { // @deprecated, r152
2649
-
2650
- console.warn( 'THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.' );
2651
- return this.outputColorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;
2652
-
2653
- }
2654
-
2655
- set outputEncoding( encoding ) { // @deprecated, r152
2656
-
2657
- console.warn( 'THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.' );
2658
- this.outputColorSpace = encoding === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;
2659
-
2660
- }
2661
-
2662
2596
  get useLegacyLights() { // @deprecated, r155
2663
2597
 
2664
2598
  console.warn( 'THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733.' );
@@ -3,6 +3,7 @@ export default /* glsl */`
3
3
 
4
4
  uniform float envMapIntensity;
5
5
  uniform float flipEnvMap;
6
+ uniform mat3 envMapRotation;
6
7
 
7
8
  #ifdef ENVMAP_TYPE_CUBE
8
9
  uniform samplerCube envMap;
@@ -36,7 +36,7 @@ export default /* glsl */`
36
36
 
37
37
  #ifdef ENVMAP_TYPE_CUBE
38
38
 
39
- vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
39
+ vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
40
40
 
41
41
  #else
42
42
 
@@ -7,7 +7,7 @@ export default /* glsl */`
7
7
 
8
8
  vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
9
9
 
10
- vec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );
10
+ vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );
11
11
 
12
12
  return PI * envMapColor.rgb * envMapIntensity;
13
13
 
@@ -30,7 +30,7 @@ export default /* glsl */`
30
30
 
31
31
  reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
32
32
 
33
- vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );
33
+ vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );
34
34
 
35
35
  return envMapColor.rgb * envMapIntensity;
36
36
 
@@ -1,9 +1,9 @@
1
1
  export default /* glsl */`
2
- #if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
2
+ #if defined( USE_LOGDEPTHBUF )
3
3
 
4
4
  // Doing a strict comparison with == 1.0 can cause noise artifacts
5
5
  // on some platforms. See issue #17623.
6
- gl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;
6
+ gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;
7
7
 
8
8
  #endif
9
9
  `;
@@ -1,5 +1,5 @@
1
1
  export default /* glsl */`
2
- #if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
2
+ #if defined( USE_LOGDEPTHBUF )
3
3
 
4
4
  uniform float logDepthBufFC;
5
5
  varying float vFragDepth;
@@ -1,16 +1,8 @@
1
1
  export default /* glsl */`
2
2
  #ifdef USE_LOGDEPTHBUF
3
3
 
4
- #ifdef USE_LOGDEPTHBUF_EXT
5
-
6
- varying float vFragDepth;
7
- varying float vIsPerspective;
8
-
9
- #else
10
-
11
- uniform float logDepthBufFC;
12
-
13
- #endif
4
+ varying float vFragDepth;
5
+ varying float vIsPerspective;
14
6
 
15
7
  #endif
16
8
  `;
@@ -1,22 +1,8 @@
1
1
  export default /* glsl */`
2
2
  #ifdef USE_LOGDEPTHBUF
3
3
 
4
- #ifdef USE_LOGDEPTHBUF_EXT
5
-
6
- vFragDepth = 1.0 + gl_Position.w;
7
- vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
8
-
9
- #else
10
-
11
- if ( isPerspectiveMatrix( projectionMatrix ) ) {
12
-
13
- gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;
14
-
15
- gl_Position.z *= gl_Position.w;
16
-
17
- }
18
-
19
- #endif
4
+ vFragDepth = 1.0 + gl_Position.w;
5
+ vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
20
6
 
21
7
  #endif
22
8
  `;
@@ -5,7 +5,7 @@ export default /* glsl */`
5
5
 
6
6
  #ifdef DECODE_VIDEO_TEXTURE
7
7
 
8
- // use inline sRGB decode until browsers properly support SRGB8_APLHA8 with video textures
8
+ // use inline sRGB decode until browsers properly support SRGB8_ALPHA8 with video textures (#26516)
9
9
 
10
10
  sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );
11
11
 
@@ -0,0 +1,14 @@
1
+ export default /* glsl */`
2
+ #ifdef USE_INSTANCING_MORPH
3
+
4
+ float morphTargetInfluences[MORPHTARGETS_COUNT];
5
+
6
+ float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;
7
+
8
+ for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
9
+
10
+ morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;
11
+
12
+ }
13
+ #endif
14
+ `;
@@ -1,11 +1,20 @@
1
1
  export default /* glsl */`
2
2
  #ifdef USE_MORPHTARGETS
3
3
 
4
- uniform float morphTargetBaseInfluence;
4
+ #ifndef USE_INSTANCING_MORPH
5
+
6
+ uniform float morphTargetBaseInfluence;
7
+
8
+ #endif
5
9
 
6
10
  #ifdef MORPHTARGETS_TEXTURE
7
11
 
8
- uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
12
+ #ifndef USE_INSTANCING_MORPH
13
+
14
+ uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
15
+
16
+ #endif
17
+
9
18
  uniform sampler2DArray morphTargetsTexture;
10
19
  uniform ivec2 morphTargetsTextureSize;
11
20