super-three 0.163.0 → 0.165.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 (197) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +1127 -452
  3. package/build/three.module.js +1127 -452
  4. package/build/three.module.min.js +2 -2
  5. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  6. package/examples/jsm/controls/TransformControls.js +1 -1
  7. package/examples/jsm/environments/RoomEnvironment.js +1 -5
  8. package/examples/jsm/exporters/GLTFExporter.js +45 -1
  9. package/examples/jsm/exporters/USDZExporter.js +13 -5
  10. package/examples/jsm/helpers/ViewHelper.js +32 -67
  11. package/examples/jsm/libs/draco/README.md +2 -2
  12. package/examples/jsm/libs/tween.module.js +75 -64
  13. package/examples/jsm/lines/LineMaterial.js +1 -15
  14. package/examples/jsm/lines/LineSegments2.js +15 -0
  15. package/examples/jsm/lines/Wireframe.js +16 -1
  16. package/examples/jsm/loaders/DRACOLoader.js +1 -1
  17. package/examples/jsm/loaders/EXRLoader.js +283 -99
  18. package/examples/jsm/loaders/FBXLoader.js +24 -13
  19. package/examples/jsm/loaders/GLTFLoader.js +55 -0
  20. package/examples/jsm/loaders/KTX2Loader.js +3 -6
  21. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  22. package/examples/jsm/loaders/MMDLoader.js +31 -12
  23. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  24. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  25. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  26. package/examples/jsm/math/Octree.js +26 -20
  27. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  28. package/examples/jsm/nodes/Nodes.js +15 -13
  29. package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
  30. package/examples/jsm/nodes/accessors/BitangentNode.js +7 -83
  31. package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
  32. package/examples/jsm/nodes/accessors/CameraNode.js +12 -119
  33. package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
  34. package/examples/jsm/nodes/accessors/MaterialNode.js +109 -3
  35. package/examples/jsm/nodes/accessors/ModelNode.js +3 -0
  36. package/examples/jsm/nodes/accessors/NormalNode.js +9 -101
  37. package/examples/jsm/nodes/accessors/PositionNode.js +6 -100
  38. package/examples/jsm/nodes/accessors/ReferenceNode.js +6 -0
  39. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -31
  40. package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
  41. package/examples/jsm/nodes/accessors/{TextureStoreNode.js → StorageTextureNode.js} +19 -6
  42. package/examples/jsm/nodes/accessors/TangentNode.js +11 -97
  43. package/examples/jsm/nodes/accessors/Texture3DNode.js +100 -0
  44. package/examples/jsm/nodes/accessors/TextureNode.js +21 -3
  45. package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
  46. package/examples/jsm/nodes/accessors/UVNode.js +2 -46
  47. package/examples/jsm/nodes/code/FunctionNode.js +0 -8
  48. package/examples/jsm/nodes/core/AttributeNode.js +15 -3
  49. package/examples/jsm/nodes/core/ContextNode.js +6 -0
  50. package/examples/jsm/nodes/core/Node.js +23 -2
  51. package/examples/jsm/nodes/core/NodeBuilder.js +25 -18
  52. package/examples/jsm/nodes/core/NodeKeywords.js +1 -1
  53. package/examples/jsm/nodes/core/OutputStructNode.js +3 -6
  54. package/examples/jsm/nodes/core/PropertyNode.js +11 -0
  55. package/examples/jsm/nodes/core/VaryingNode.js +40 -9
  56. package/examples/jsm/nodes/display/AfterImageNode.js +14 -2
  57. package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
  58. package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
  59. package/examples/jsm/nodes/display/PassNode.js +3 -1
  60. package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
  61. package/examples/jsm/nodes/display/ViewportNode.js +5 -3
  62. package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
  63. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
  64. package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  65. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
  66. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  67. package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
  68. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +210 -12
  69. package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
  70. package/examples/jsm/nodes/functions/ToonLightingModel.js +49 -0
  71. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +20 -5
  72. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
  73. package/examples/jsm/nodes/lighting/EnvironmentNode.js +11 -2
  74. package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
  75. package/examples/jsm/nodes/lighting/LightsNode.js +28 -1
  76. package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
  77. package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
  78. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +11 -7
  79. package/examples/jsm/nodes/materials/Materials.js +4 -0
  80. package/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.js +52 -0
  81. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
  82. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
  83. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +94 -6
  84. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
  85. package/examples/jsm/nodes/materials/MeshToonNodeMaterial.js +34 -0
  86. package/examples/jsm/nodes/materials/NodeMaterial.js +43 -45
  87. package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
  88. package/examples/jsm/nodes/materials/VolumeNodeMaterial.js +106 -0
  89. package/examples/jsm/nodes/math/HashNode.js +2 -2
  90. package/examples/jsm/nodes/pmrem/PMREMUtils.js +1 -1
  91. package/examples/jsm/nodes/shadernode/ShaderNode.js +57 -41
  92. package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
  93. package/examples/jsm/nodes/utils/MatcapUVNode.js +1 -1
  94. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  95. package/examples/jsm/objects/Lensflare.js +2 -2
  96. package/examples/jsm/physics/JoltPhysics.js +281 -0
  97. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  98. package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
  99. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  100. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  101. package/examples/jsm/renderers/common/Attributes.js +2 -0
  102. package/examples/jsm/renderers/common/Background.js +3 -3
  103. package/examples/jsm/renderers/common/Bindings.js +17 -0
  104. package/examples/jsm/renderers/common/ChainMap.js +18 -48
  105. package/examples/jsm/renderers/common/ClippingContext.js +5 -5
  106. package/examples/jsm/renderers/common/Pipelines.js +2 -2
  107. package/examples/jsm/renderers/common/RenderBundle.js +18 -0
  108. package/examples/jsm/renderers/common/RenderBundles.js +38 -0
  109. package/examples/jsm/renderers/common/RenderList.js +10 -1
  110. package/examples/jsm/renderers/common/RenderObject.js +49 -1
  111. package/examples/jsm/renderers/common/Renderer.js +268 -25
  112. package/examples/jsm/renderers/common/Textures.js +1 -1
  113. package/examples/jsm/renderers/common/Uniform.js +1 -1
  114. package/examples/jsm/renderers/common/extras/PMREMGenerator.js +13 -17
  115. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +18 -4
  116. package/examples/jsm/renderers/common/nodes/NodeSampler.js +6 -0
  117. package/examples/jsm/renderers/common/nodes/Nodes.js +31 -47
  118. package/examples/jsm/renderers/webgl/WebGLBackend.js +7 -21
  119. package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +5 -1
  120. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +23 -5
  121. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +114 -13
  122. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -21
  123. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +80 -46
  124. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +85 -12
  125. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -1
  126. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +10 -1
  127. package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +6 -0
  128. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +62 -19
  129. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -3
  130. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  131. package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
  132. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  133. package/examples/jsm/utils/GPUStatsPanel.js +2 -0
  134. package/examples/jsm/utils/SceneUtils.js +60 -1
  135. package/examples/jsm/utils/SortUtils.js +8 -5
  136. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  137. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  138. package/package.json +3 -2
  139. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  140. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  141. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  142. package/src/constants.js +1 -1
  143. package/src/core/Object3D.js +2 -0
  144. package/src/core/Raycaster.js +6 -2
  145. package/src/core/RenderTarget.js +8 -0
  146. package/src/extras/PMREMGenerator.js +12 -11
  147. package/src/loaders/FileLoader.js +5 -1
  148. package/src/loaders/LoaderUtils.js +3 -1
  149. package/src/loaders/MaterialLoader.js +1 -0
  150. package/src/loaders/ObjectLoader.js +1 -0
  151. package/src/materials/Material.js +2 -0
  152. package/src/materials/MeshPhysicalMaterial.js +20 -0
  153. package/src/objects/BatchedMesh.js +114 -1
  154. package/src/objects/Line.js +66 -43
  155. package/src/renderers/WebGLRenderer.js +371 -109
  156. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +15 -0
  157. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  158. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  159. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  160. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  161. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  162. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  163. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  164. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  165. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  166. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  167. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
  168. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  169. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  170. package/src/renderers/shaders/ShaderChunk.js +0 -2
  171. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  172. package/src/renderers/shaders/ShaderLib.js +1 -0
  173. package/src/renderers/webgl/WebGLBackground.js +24 -3
  174. package/src/renderers/webgl/WebGLBufferRenderer.js +36 -0
  175. package/src/renderers/webgl/WebGLCapabilities.js +33 -1
  176. package/src/renderers/webgl/WebGLExtensions.js +3 -1
  177. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +36 -0
  178. package/src/renderers/webgl/WebGLLights.js +9 -12
  179. package/src/renderers/webgl/WebGLMaterials.js +7 -5
  180. package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
  181. package/src/renderers/webgl/WebGLProgram.js +5 -36
  182. package/src/renderers/webgl/WebGLPrograms.js +19 -14
  183. package/src/renderers/webgl/WebGLRenderStates.js +8 -4
  184. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  185. package/src/renderers/webgl/WebGLTextures.js +206 -129
  186. package/src/renderers/webgl/WebGLUtils.js +3 -21
  187. package/src/renderers/webxr/WebXRDepthSensing.js +3 -3
  188. package/src/renderers/webxr/WebXRManager.js +8 -6
  189. package/src/textures/CompressedArrayTexture.js +14 -0
  190. package/src/textures/DataArrayTexture.js +14 -0
  191. package/src/textures/DepthTexture.js +1 -3
  192. package/src/utils.js +30 -1
  193. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -318
  194. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
  195. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -792
  196. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
  197. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
@@ -205,7 +205,7 @@ function WebGLLights( extensions ) {
205
205
  const matrix4 = new Matrix4();
206
206
  const matrix42 = new Matrix4();
207
207
 
208
- function setup( lights, useLegacyLights ) {
208
+ function setup( lights ) {
209
209
 
210
210
  let r = 0, g = 0, b = 0;
211
211
 
@@ -228,9 +228,6 @@ function WebGLLights( extensions ) {
228
228
  // ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]
229
229
  lights.sort( shadowCastingAndTexturingLightsFirst );
230
230
 
231
- // artist-friendly light intensity scaling factor
232
- const scaleFactor = ( useLegacyLights === true ) ? Math.PI : 1;
233
-
234
231
  for ( let i = 0, l = lights.length; i < l; i ++ ) {
235
232
 
236
233
  const light = lights[ i ];
@@ -243,9 +240,9 @@ function WebGLLights( extensions ) {
243
240
 
244
241
  if ( light.isAmbientLight ) {
245
242
 
246
- r += color.r * intensity * scaleFactor;
247
- g += color.g * intensity * scaleFactor;
248
- b += color.b * intensity * scaleFactor;
243
+ r += color.r * intensity;
244
+ g += color.g * intensity;
245
+ b += color.b * intensity;
249
246
 
250
247
  } else if ( light.isLightProbe ) {
251
248
 
@@ -261,7 +258,7 @@ function WebGLLights( extensions ) {
261
258
 
262
259
  const uniforms = cache.get( light );
263
260
 
264
- uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );
261
+ uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
265
262
 
266
263
  if ( light.castShadow ) {
267
264
 
@@ -292,7 +289,7 @@ function WebGLLights( extensions ) {
292
289
 
293
290
  uniforms.position.setFromMatrixPosition( light.matrixWorld );
294
291
 
295
- uniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );
292
+ uniforms.color.copy( color ).multiplyScalar( intensity );
296
293
  uniforms.distance = distance;
297
294
 
298
295
  uniforms.coneCos = Math.cos( light.angle );
@@ -353,7 +350,7 @@ function WebGLLights( extensions ) {
353
350
 
354
351
  const uniforms = cache.get( light );
355
352
 
356
- uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );
353
+ uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
357
354
  uniforms.distance = light.distance;
358
355
  uniforms.decay = light.decay;
359
356
 
@@ -386,8 +383,8 @@ function WebGLLights( extensions ) {
386
383
 
387
384
  const uniforms = cache.get( light );
388
385
 
389
- uniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );
390
- uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );
386
+ uniforms.skyColor.copy( light.color ).multiplyScalar( intensity );
387
+ uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );
391
388
 
392
389
  state.hemi[ hemiLength ] = uniforms;
393
390
 
@@ -249,11 +249,7 @@ function WebGLMaterials( renderer, properties ) {
249
249
  if ( material.lightMap ) {
250
250
 
251
251
  uniforms.lightMap.value = material.lightMap;
252
-
253
- // artist-friendly light intensity scaling factor
254
- const scaleFactor = ( renderer._useLegacyLights === true ) ? Math.PI : 1;
255
-
256
- uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor;
252
+ uniforms.lightMapIntensity.value = material.lightMapIntensity;
257
253
 
258
254
  refreshTransformUniform( material.lightMap, uniforms.lightMapTransform );
259
255
 
@@ -470,6 +466,12 @@ function WebGLMaterials( renderer, properties ) {
470
466
 
471
467
  }
472
468
 
469
+ if ( material.dispersion > 0 ) {
470
+
471
+ uniforms.dispersion.value = material.dispersion;
472
+
473
+ }
474
+
473
475
  if ( material.iridescence > 0 ) {
474
476
 
475
477
  uniforms.iridescence.value = material.iridescence;
@@ -12,8 +12,7 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
12
12
 
13
13
  const objectInfluences = object.morphTargetInfluences;
14
14
 
15
- // instead of using attributes, the WebGL 2 code path encodes morph targets
16
- // into an array of data textures. Each layer represents a single morph target.
15
+ // the following encodes morph targets into an array of data textures. Each layer represents a single morph target.
17
16
 
18
17
  const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
19
18
  const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
@@ -244,11 +244,7 @@ function resolveIncludes( string ) {
244
244
 
245
245
  }
246
246
 
247
- const shaderChunkMap = new Map( [
248
- [ 'encodings_fragment', 'colorspace_fragment' ], // @deprecated, r154
249
- [ 'encodings_pars_fragment', 'colorspace_pars_fragment' ], // @deprecated, r154
250
- [ 'output_fragment', 'opaque_fragment' ], // @deprecated, r154
251
- ] );
247
+ const shaderChunkMap = new Map();
252
248
 
253
249
  function includeReplacer( match, include ) {
254
250
 
@@ -528,6 +524,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
528
524
 
529
525
  parameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',
530
526
  parameters.batching ? '#define USE_BATCHING' : '',
527
+ parameters.batchingColor ? '#define USE_BATCHING_COLOR' : '',
531
528
  parameters.instancing ? '#define USE_INSTANCING' : '',
532
529
  parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
533
530
  parameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',
@@ -624,7 +621,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
624
621
  parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
625
622
  parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
626
623
  ( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',
627
- ( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE' : '',
628
624
  ( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',
629
625
  ( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',
630
626
  parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
@@ -637,8 +633,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
637
633
 
638
634
  parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
639
635
 
640
- parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
641
-
642
636
  parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
643
637
 
644
638
  'uniform mat4 modelMatrix;',
@@ -705,31 +699,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
705
699
 
706
700
  '#endif',
707
701
 
708
- '#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',
709
-
710
- ' attribute vec3 morphTarget0;',
711
- ' attribute vec3 morphTarget1;',
712
- ' attribute vec3 morphTarget2;',
713
- ' attribute vec3 morphTarget3;',
714
-
715
- ' #ifdef USE_MORPHNORMALS',
716
-
717
- ' attribute vec3 morphNormal0;',
718
- ' attribute vec3 morphNormal1;',
719
- ' attribute vec3 morphNormal2;',
720
- ' attribute vec3 morphNormal3;',
721
-
722
- ' #else',
723
-
724
- ' attribute vec3 morphTarget4;',
725
- ' attribute vec3 morphTarget5;',
726
- ' attribute vec3 morphTarget6;',
727
- ' attribute vec3 morphTarget7;',
728
-
729
- ' #endif',
730
-
731
- '#endif',
732
-
733
702
  '#ifdef USE_SKINNING',
734
703
 
735
704
  ' attribute vec4 skinIndex;',
@@ -779,6 +748,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
779
748
  parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
780
749
  parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
781
750
 
751
+ parameters.dispersion ? '#define USE_DISPERSION' : '',
752
+
782
753
  parameters.iridescence ? '#define USE_IRIDESCENCE' : '',
783
754
  parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
784
755
  parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
@@ -803,7 +774,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
803
774
  parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
804
775
 
805
776
  parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
806
- parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
777
+ parameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',
807
778
  parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
808
779
  parameters.vertexUv1s ? '#define USE_UV1' : '',
809
780
  parameters.vertexUv2s ? '#define USE_UV2' : '',
@@ -825,8 +796,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
825
796
 
826
797
  parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
827
798
 
828
- parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
829
-
830
799
  parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
831
800
 
832
801
  parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
@@ -129,6 +129,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
129
129
 
130
130
  const HAS_ANISOTROPY = material.anisotropy > 0;
131
131
  const HAS_CLEARCOAT = material.clearcoat > 0;
132
+ const HAS_DISPERSION = material.dispersion > 0;
132
133
  const HAS_IRIDESCENCE = material.iridescence > 0;
133
134
  const HAS_SHEEN = material.sheen > 0;
134
135
  const HAS_TRANSMISSION = material.transmission > 0;
@@ -193,6 +194,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
193
194
  precision: precision,
194
195
 
195
196
  batching: IS_BATCHEDMESH,
197
+ batchingColor: IS_BATCHEDMESH && object._colorsTexture !== null,
196
198
  instancing: IS_INSTANCEDMESH,
197
199
  instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
198
200
  instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
@@ -228,6 +230,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
228
230
  clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,
229
231
  clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,
230
232
 
233
+ dispersion: HAS_DISPERSION,
234
+
231
235
  iridescence: HAS_IRIDESCENCE,
232
236
  iridescenceMap: HAS_IRIDESCENCEMAP,
233
237
  iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,
@@ -336,7 +340,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
336
340
  shadowMapType: renderer.shadowMap.type,
337
341
 
338
342
  toneMapping: toneMapping,
339
- useLegacyLights: renderer._useLegacyLights,
340
343
 
341
344
  decodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),
342
345
 
@@ -508,6 +511,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
508
511
  _programLayers.enable( 18 );
509
512
  if ( parameters.batching )
510
513
  _programLayers.enable( 19 );
514
+ if ( parameters.dispersion )
515
+ _programLayers.enable( 20 );
516
+ if ( parameters.batchingColor )
517
+ _programLayers.enable( 21 );
511
518
 
512
519
  array.push( _programLayers.mask );
513
520
  _programLayers.disableAll();
@@ -532,30 +539,28 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
532
539
  _programLayers.enable( 8 );
533
540
  if ( parameters.shadowMapEnabled )
534
541
  _programLayers.enable( 9 );
535
- if ( parameters.useLegacyLights )
536
- _programLayers.enable( 10 );
537
542
  if ( parameters.doubleSided )
538
- _programLayers.enable( 11 );
543
+ _programLayers.enable( 10 );
539
544
  if ( parameters.flipSided )
540
- _programLayers.enable( 12 );
545
+ _programLayers.enable( 11 );
541
546
  if ( parameters.useDepthPacking )
542
- _programLayers.enable( 13 );
547
+ _programLayers.enable( 12 );
543
548
  if ( parameters.dithering )
544
- _programLayers.enable( 14 );
549
+ _programLayers.enable( 13 );
545
550
  if ( parameters.transmission )
546
- _programLayers.enable( 15 );
551
+ _programLayers.enable( 14 );
547
552
  if ( parameters.sheen )
548
- _programLayers.enable( 16 );
553
+ _programLayers.enable( 15 );
549
554
  if ( parameters.opaque )
550
- _programLayers.enable( 17 );
555
+ _programLayers.enable( 16 );
551
556
  if ( parameters.pointsUvs )
552
- _programLayers.enable( 18 );
557
+ _programLayers.enable( 17 );
553
558
  if ( parameters.decodeVideoTexture )
554
- _programLayers.enable( 19 );
559
+ _programLayers.enable( 18 );
555
560
  if ( parameters.alphaToCoverage )
556
- _programLayers.enable( 20 );
561
+ _programLayers.enable( 19 );
557
562
  if ( parameters.numMultiviewViews )
558
- _programLayers.enable( 21 );
563
+ _programLayers.enable( 20 );
559
564
 
560
565
  array.push( _programLayers.mask );
561
566
 
@@ -7,7 +7,9 @@ function WebGLRenderState( extensions ) {
7
7
  const lightsArray = [];
8
8
  const shadowsArray = [];
9
9
 
10
- function init() {
10
+ function init( camera ) {
11
+
12
+ state.camera = camera;
11
13
 
12
14
  lightsArray.length = 0;
13
15
  shadowsArray.length = 0;
@@ -26,9 +28,9 @@ function WebGLRenderState( extensions ) {
26
28
 
27
29
  }
28
30
 
29
- function setupLights( useLegacyLights ) {
31
+ function setupLights() {
30
32
 
31
- lights.setup( lightsArray, useLegacyLights );
33
+ lights.setup( lightsArray );
32
34
 
33
35
  }
34
36
 
@@ -42,9 +44,11 @@ function WebGLRenderState( extensions ) {
42
44
  lightsArray: lightsArray,
43
45
  shadowsArray: shadowsArray,
44
46
 
47
+ camera: null,
48
+
45
49
  lights: lights,
46
50
 
47
- transmissionRenderTarget: null
51
+ transmissionRenderTarget: {}
48
52
  };
49
53
 
50
54
  return {
@@ -12,7 +12,7 @@ import { Frustum } from '../../math/Frustum.js';
12
12
 
13
13
  import * as vsm from '../shaders/ShaderLib/vsm.glsl.js';
14
14
 
15
- function WebGLShadowMap( _renderer, _objects, _capabilities ) {
15
+ function WebGLShadowMap( renderer, objects, capabilities ) {
16
16
 
17
17
  let _frustum = new Frustum();
18
18
 
@@ -26,7 +26,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
26
26
 
27
27
  _materialCache = {},
28
28
 
29
- _maxTextureSize = _capabilities.maxTextureSize;
29
+ _maxTextureSize = capabilities.maxTextureSize;
30
30
 
31
31
  const shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };
32
32
 
@@ -76,11 +76,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
76
76
 
77
77
  if ( lights.length === 0 ) return;
78
78
 
79
- const currentRenderTarget = _renderer.getRenderTarget();
80
- const activeCubeFace = _renderer.getActiveCubeFace();
81
- const activeMipmapLevel = _renderer.getActiveMipmapLevel();
79
+ const currentRenderTarget = renderer.getRenderTarget();
80
+ const activeCubeFace = renderer.getActiveCubeFace();
81
+ const activeMipmapLevel = renderer.getActiveMipmapLevel();
82
82
 
83
- const _state = _renderer.state;
83
+ const _state = renderer.state;
84
84
 
85
85
  // Set GL state for depth map.
86
86
  _state.setBlending( NoBlending );
@@ -154,8 +154,8 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
154
154
 
155
155
  }
156
156
 
157
- _renderer.setRenderTarget( shadow.map );
158
- _renderer.clear();
157
+ renderer.setRenderTarget( shadow.map );
158
+ renderer.clear();
159
159
 
160
160
  const viewportCount = shadow.getViewportCount();
161
161
 
@@ -196,13 +196,13 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
196
196
 
197
197
  scope.needsUpdate = false;
198
198
 
199
- _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );
199
+ renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );
200
200
 
201
201
  };
202
202
 
203
203
  function VSMPass( shadow, camera ) {
204
204
 
205
- const geometry = _objects.update( fullScreenMesh );
205
+ const geometry = objects.update( fullScreenMesh );
206
206
 
207
207
  if ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {
208
208
 
@@ -225,18 +225,18 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
225
225
  shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
226
226
  shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
227
227
  shadowMaterialVertical.uniforms.radius.value = shadow.radius;
228
- _renderer.setRenderTarget( shadow.mapPass );
229
- _renderer.clear();
230
- _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
228
+ renderer.setRenderTarget( shadow.mapPass );
229
+ renderer.clear();
230
+ renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
231
231
 
232
232
  // horizontal pass
233
233
 
234
234
  shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;
235
235
  shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;
236
236
  shadowMaterialHorizontal.uniforms.radius.value = shadow.radius;
237
- _renderer.setRenderTarget( shadow.map );
238
- _renderer.clear();
239
- _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );
237
+ renderer.setRenderTarget( shadow.map );
238
+ renderer.clear();
239
+ renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );
240
240
 
241
241
  }
242
242
 
@@ -254,7 +254,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
254
254
 
255
255
  result = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;
256
256
 
257
- if ( ( _renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
257
+ if ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
258
258
  ( material.displacementMap && material.displacementScale !== 0 ) ||
259
259
  ( material.alphaMap && material.alphaTest > 0 ) ||
260
260
  ( material.map && material.alphaTest > 0 ) ) {
@@ -319,7 +319,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
319
319
 
320
320
  if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {
321
321
 
322
- const materialProperties = _renderer.properties.get( result );
322
+ const materialProperties = renderer.properties.get( result );
323
323
  materialProperties.light = light;
324
324
 
325
325
  }
@@ -340,7 +340,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
340
340
 
341
341
  object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
342
342
 
343
- const geometry = _objects.update( object );
343
+ const geometry = objects.update( object );
344
344
  const material = object.material;
345
345
 
346
346
  if ( Array.isArray( material ) ) {
@@ -356,11 +356,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
356
356
 
357
357
  const depthMaterial = getDepthMaterial( object, groupMaterial, light, type );
358
358
 
359
- object.onBeforeShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
359
+ object.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
360
360
 
361
- _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
361
+ renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
362
362
 
363
- object.onAfterShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
363
+ object.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
364
364
 
365
365
  }
366
366
 
@@ -370,11 +370,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
370
370
 
371
371
  const depthMaterial = getDepthMaterial( object, material, light, type );
372
372
 
373
- object.onBeforeShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
373
+ object.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
374
374
 
375
- _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
375
+ renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
376
376
 
377
- object.onAfterShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
377
+ object.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
378
378
 
379
379
  }
380
380