super-three 0.160.1 → 0.162.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 (225) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.cjs +867 -499
  3. package/build/three.module.js +867 -496
  4. package/build/three.module.min.js +1 -1
  5. package/examples/jsm/Addons.js +5 -1
  6. package/examples/jsm/capabilities/WebGPU.js +13 -9
  7. package/examples/jsm/controls/DragControls.js +91 -30
  8. package/examples/jsm/controls/OrbitControls.js +130 -15
  9. package/examples/jsm/controls/TransformControls.js +6 -6
  10. package/examples/jsm/curves/NURBSUtils.js +59 -4
  11. package/examples/jsm/curves/NURBSVolume.js +62 -0
  12. package/examples/jsm/exporters/GLTFExporter.js +11 -1
  13. package/examples/jsm/exporters/USDZExporter.js +8 -7
  14. package/examples/jsm/helpers/TextureHelper.js +3 -3
  15. package/examples/jsm/interactive/InteractiveGroup.js +15 -25
  16. package/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
  17. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
  18. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  19. package/examples/jsm/libs/tween.module.js +32 -14
  20. package/examples/jsm/loaders/3DMLoader.js +57 -64
  21. package/examples/jsm/loaders/DDSLoader.js +1 -0
  22. package/examples/jsm/loaders/KTX2Loader.js +20 -5
  23. package/examples/jsm/loaders/LUT3dlLoader.js +78 -46
  24. package/examples/jsm/loaders/LUTCubeLoader.js +81 -67
  25. package/examples/jsm/loaders/LUTImageLoader.js +3 -2
  26. package/examples/jsm/loaders/MaterialXLoader.js +115 -16
  27. package/examples/jsm/loaders/SVGLoader.js +4 -3
  28. package/examples/jsm/loaders/VOXLoader.js +9 -2
  29. package/examples/jsm/loaders/VRMLLoader.js +7 -3
  30. package/examples/jsm/materials/MeshPostProcessingMaterial.js +144 -0
  31. package/examples/jsm/misc/ProgressiveLightMap.js +1 -0
  32. package/examples/jsm/misc/Timer.js +13 -4
  33. package/examples/jsm/nodes/Nodes.js +24 -11
  34. package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
  35. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +5 -3
  36. package/examples/jsm/nodes/accessors/CameraNode.js +9 -4
  37. package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
  38. package/examples/jsm/nodes/accessors/CubeTextureNode.js +12 -1
  39. package/examples/jsm/nodes/accessors/MaterialNode.js +2 -2
  40. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -12
  41. package/examples/jsm/nodes/accessors/MorphNode.js +8 -8
  42. package/examples/jsm/nodes/accessors/ReferenceNode.js +87 -29
  43. package/examples/jsm/nodes/accessors/SkinningNode.js +31 -10
  44. package/examples/jsm/nodes/accessors/StorageBufferNode.js +45 -0
  45. package/examples/jsm/nodes/accessors/TangentNode.js +8 -2
  46. package/examples/jsm/nodes/accessors/TextureNode.js +1 -1
  47. package/examples/jsm/nodes/accessors/TextureStoreNode.js +56 -3
  48. package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
  49. package/examples/jsm/nodes/accessors/VertexColorNode.js +70 -0
  50. package/examples/jsm/nodes/code/CodeNode.js +6 -0
  51. package/examples/jsm/nodes/core/AssignNode.js +68 -12
  52. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  53. package/examples/jsm/nodes/core/Node.js +14 -4
  54. package/examples/jsm/nodes/core/NodeBuilder.js +26 -27
  55. package/examples/jsm/nodes/core/NodeFrame.js +18 -10
  56. package/examples/jsm/nodes/core/TempNode.js +1 -1
  57. package/examples/jsm/nodes/core/constants.js +1 -0
  58. package/examples/jsm/nodes/display/AfterImageNode.js +148 -0
  59. package/examples/jsm/nodes/display/AnamorphicNode.js +148 -0
  60. package/examples/jsm/nodes/display/BlendModeNode.js +30 -1
  61. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +3 -0
  62. package/examples/jsm/nodes/display/GaussianBlurNode.js +33 -13
  63. package/examples/jsm/nodes/display/NormalMapNode.js +3 -5
  64. package/examples/jsm/nodes/display/PassNode.js +3 -2
  65. package/examples/jsm/nodes/display/ToneMappingNode.js +46 -3
  66. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -4
  67. package/examples/jsm/nodes/display/ViewportNode.js +0 -2
  68. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +4 -4
  69. package/examples/jsm/nodes/fog/FogNode.js +2 -1
  70. package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
  71. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +13 -5
  72. package/examples/jsm/nodes/lighting/LightingContextNode.js +1 -1
  73. package/examples/jsm/nodes/lighting/LightsNode.js +1 -1
  74. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +18 -30
  75. package/examples/jsm/nodes/materials/Materials.js +1 -0
  76. package/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +84 -0
  77. package/examples/jsm/nodes/materials/NodeMaterial.js +43 -10
  78. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +1 -7
  79. package/examples/jsm/nodes/math/CondNode.js +42 -7
  80. package/examples/jsm/nodes/math/MathNode.js +32 -2
  81. package/examples/jsm/nodes/math/MathUtils.js +15 -0
  82. package/examples/jsm/nodes/math/OperatorNode.js +13 -5
  83. package/examples/jsm/nodes/math/TriNoise3D.js +71 -0
  84. package/examples/jsm/nodes/shadernode/ShaderNode.js +10 -1
  85. package/examples/jsm/nodes/utils/JoinNode.js +2 -2
  86. package/examples/jsm/nodes/utils/LoopNode.js +5 -3
  87. package/examples/jsm/nodes/utils/ReflectorNode.js +227 -0
  88. package/examples/jsm/nodes/utils/RotateNode.js +68 -0
  89. package/examples/jsm/nodes/utils/RotateUVNode.js +1 -9
  90. package/examples/jsm/nodes/utils/SplitNode.js +4 -4
  91. package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -0
  92. package/examples/jsm/objects/GroundedSkybox.js +50 -0
  93. package/examples/jsm/objects/QuadMesh.js +8 -2
  94. package/examples/jsm/objects/Water2.js +8 -8
  95. package/examples/jsm/postprocessing/GTAOPass.js +11 -1
  96. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  97. package/examples/jsm/renderers/common/Backend.js +14 -0
  98. package/examples/jsm/renderers/common/Background.js +2 -2
  99. package/examples/jsm/renderers/common/Bindings.js +1 -1
  100. package/examples/jsm/renderers/common/ClippingContext.js +165 -0
  101. package/examples/jsm/renderers/common/DataMap.js +1 -1
  102. package/examples/jsm/renderers/common/Info.js +25 -1
  103. package/examples/jsm/renderers/common/Pipelines.js +8 -8
  104. package/examples/jsm/renderers/common/PostProcessing.js +2 -2
  105. package/examples/jsm/renderers/common/ProgrammableStage.js +3 -1
  106. package/examples/jsm/renderers/common/RenderContext.js +2 -0
  107. package/examples/jsm/renderers/common/RenderContexts.js +2 -13
  108. package/examples/jsm/renderers/common/RenderObject.js +46 -1
  109. package/examples/jsm/renderers/common/RenderObjects.js +3 -1
  110. package/examples/jsm/renderers/common/Renderer.js +290 -17
  111. package/examples/jsm/renderers/common/StorageBufferAttribute.js +17 -0
  112. package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
  113. package/examples/jsm/renderers/common/Textures.js +28 -18
  114. package/examples/jsm/renderers/common/UniformsGroup.js +6 -4
  115. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +2 -1
  116. package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
  117. package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
  118. package/examples/jsm/renderers/common/nodes/Nodes.js +5 -2
  119. package/examples/jsm/renderers/webgl/WebGLBackend.js +653 -272
  120. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +171 -39
  121. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +95 -8
  122. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +11 -0
  123. package/examples/jsm/renderers/webgl/utils/WebGLState.js +197 -0
  124. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +424 -11
  125. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -2
  126. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -21
  127. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +2 -2
  128. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +300 -112
  129. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +7 -2
  130. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +71 -79
  131. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -1
  132. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -4
  133. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +87 -14
  134. package/examples/jsm/shaders/OutputShader.js +4 -0
  135. package/examples/jsm/transpiler/AST.js +1 -1
  136. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  137. package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
  138. package/examples/jsm/transpiler/TSLEncoder.js +1 -1
  139. package/examples/jsm/utils/BufferGeometryUtils.js +23 -27
  140. package/examples/jsm/utils/SkeletonUtils.js +14 -3
  141. package/examples/jsm/utils/SortUtils.js +2 -0
  142. package/examples/jsm/webxr/ARButton.js +12 -2
  143. package/examples/jsm/webxr/VRButton.js +25 -7
  144. package/examples/jsm/webxr/XRButton.js +12 -3
  145. package/examples/jsm/webxr/XRControllerModelFactory.js +14 -1
  146. package/examples/jsm/webxr/XRHandMeshModel.js +3 -1
  147. package/package.json +5 -4
  148. package/src/Three.Legacy.js +20 -0
  149. package/src/Three.js +0 -1
  150. package/src/audio/Audio.js +1 -3
  151. package/src/cameras/PerspectiveCamera.js +35 -0
  152. package/src/constants.js +2 -6
  153. package/src/core/BufferAttribute.js +2 -12
  154. package/src/core/BufferGeometry.js +23 -29
  155. package/src/core/InterleavedBuffer.js +2 -1
  156. package/src/core/InterleavedBufferAttribute.js +20 -0
  157. package/src/core/Object3D.js +11 -0
  158. package/src/core/Raycaster.js +18 -4
  159. package/src/core/RenderTarget.js +44 -21
  160. package/src/extras/PMREMGenerator.js +2 -0
  161. package/src/extras/curves/EllipseCurve.js +2 -2
  162. package/src/helpers/SpotLightHelper.js +18 -1
  163. package/src/loaders/DataTextureLoader.js +0 -4
  164. package/src/loaders/MaterialLoader.js +1 -0
  165. package/src/loaders/ObjectLoader.js +2 -1
  166. package/src/materials/Material.js +2 -1
  167. package/src/materials/MeshBasicMaterial.js +3 -0
  168. package/src/materials/MeshLambertMaterial.js +3 -0
  169. package/src/materials/MeshPhongMaterial.js +3 -0
  170. package/src/materials/MeshStandardMaterial.js +3 -0
  171. package/src/materials/ShaderMaterial.js +2 -1
  172. package/src/math/Quaternion.js +13 -12
  173. package/src/math/Triangle.js +0 -30
  174. package/src/math/Vector3.js +7 -7
  175. package/src/objects/BatchedMesh.js +6 -7
  176. package/src/objects/InstancedMesh.js +53 -0
  177. package/src/objects/Mesh.js +0 -1
  178. package/src/objects/SkinnedMesh.js +0 -8
  179. package/src/renderers/WebGLCubeRenderTarget.js +1 -10
  180. package/src/renderers/WebGLRenderer.js +20 -23
  181. package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +9 -0
  182. package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +56 -11
  183. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -0
  184. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  185. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  186. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -1
  187. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  188. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +11 -2
  189. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +38 -7
  190. package/src/renderers/shaders/ShaderChunk.js +2 -0
  191. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
  192. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -2
  193. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +3 -2
  194. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -1
  195. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -2
  196. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  197. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +2 -2
  198. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +4 -1
  199. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  200. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -1
  201. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -1
  202. package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -1
  203. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
  204. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +1 -1
  205. package/src/renderers/shaders/ShaderLib.js +2 -1
  206. package/src/renderers/shaders/UniformsLib.js +1 -0
  207. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  208. package/src/renderers/webgl/WebGLBackground.js +18 -0
  209. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  210. package/src/renderers/webgl/WebGLMaterials.js +24 -1
  211. package/src/renderers/webgl/WebGLMorphtargets.js +15 -8
  212. package/src/renderers/webgl/WebGLProgram.js +42 -4
  213. package/src/renderers/webgl/WebGLPrograms.js +38 -27
  214. package/src/renderers/webgl/WebGLState.js +11 -21
  215. package/src/renderers/webgl/WebGLTextures.js +170 -66
  216. package/src/renderers/webxr/WebXRDepthSensing.js +105 -0
  217. package/src/renderers/webxr/WebXRManager.js +46 -0
  218. package/src/scenes/Scene.js +8 -0
  219. package/src/textures/Source.js +1 -0
  220. package/src/textures/Texture.js +1 -29
  221. package/build/three.js +0 -54519
  222. package/build/three.min.js +0 -7
  223. package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
  224. package/examples/jsm/objects/GroundProjectedSkybox.js +0 -172
  225. package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
@@ -33,6 +33,7 @@ const UniformsLib = {
33
33
  envmap: {
34
34
 
35
35
  envMap: { value: null },
36
+ envMapRotation: { value: /*@__PURE__*/ new Matrix3() },
36
37
  flipEnvMap: { value: - 1 },
37
38
  reflectivity: { value: 1.0 }, // basic, lambert, phong
38
39
  ior: { value: 1.5 }, // physical
@@ -86,7 +86,7 @@ function WebGLAttributes( gl, capabilities ) {
86
86
  function updateBuffer( buffer, attribute, bufferType ) {
87
87
 
88
88
  const array = attribute.array;
89
- const updateRange = attribute._updateRange; // deprecated
89
+ const updateRange = attribute._updateRange; // @deprecated, r159
90
90
  const updateRanges = attribute.updateRanges;
91
91
 
92
92
  gl.bindBuffer( bufferType, buffer );
@@ -121,7 +121,7 @@ function WebGLAttributes( gl, capabilities ) {
121
121
 
122
122
  }
123
123
 
124
- // deprecated
124
+ // @deprecated, r159
125
125
  if ( updateRange.count !== - 1 ) {
126
126
 
127
127
  if ( isWebGL2 ) {
@@ -4,11 +4,15 @@ import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
4
4
  import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
5
5
  import { Color } from '../../math/Color.js';
6
6
  import { ColorManagement } from '../../math/ColorManagement.js';
7
+ import { Euler } from '../../math/Euler.js';
8
+ import { Matrix4 } from '../../math/Matrix4.js';
7
9
  import { Mesh } from '../../objects/Mesh.js';
8
10
  import { ShaderLib } from '../shaders/ShaderLib.js';
9
11
  import { cloneUniforms, getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
10
12
 
11
13
  const _rgb = { r: 0, b: 0, g: 0 };
14
+ const _e1 = /*@__PURE__*/ new Euler();
15
+ const _m1 = /*@__PURE__*/ new Matrix4();
12
16
 
13
17
  function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {
14
18
 
@@ -105,10 +109,24 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
105
109
 
106
110
  }
107
111
 
112
+ _e1.copy( scene.backgroundRotation );
113
+
114
+ // accommodate left-handed frame
115
+ _e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;
116
+
117
+ if ( background.isCubeTexture && background.isRenderTargetTexture === false ) {
118
+
119
+ // environment maps which are not cube render targets or PMREMs follow a different convention
120
+ _e1.y *= - 1;
121
+ _e1.z *= - 1;
122
+
123
+ }
124
+
108
125
  boxMesh.material.uniforms.envMap.value = background;
109
126
  boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;
110
127
  boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;
111
128
  boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
129
+ boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );
112
130
  boxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;
113
131
 
114
132
  if ( currentBackground !== background ||
@@ -40,7 +40,7 @@ function WebGLCubeMaps( renderer ) {
40
40
 
41
41
  if ( image && image.height > 0 ) {
42
42
 
43
- const renderTarget = new WebGLCubeRenderTarget( image.height / 2 );
43
+ const renderTarget = new WebGLCubeRenderTarget( image.height );
44
44
  renderTarget.fromEquirectangularTexture( renderer, texture );
45
45
  cubemaps.set( texture, renderTarget );
46
46
 
@@ -1,5 +1,10 @@
1
1
  import { BackSide } from '../../constants.js';
2
2
  import { getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
3
+ import { Euler } from '../../math/Euler.js';
4
+ import { Matrix4 } from '../../math/Matrix4.js';
5
+
6
+ const _e1 = /*@__PURE__*/ new Euler();
7
+ const _m1 = /*@__PURE__*/ new Matrix4();
3
8
 
4
9
  function WebGLMaterials( renderer, properties ) {
5
10
 
@@ -209,12 +214,30 @@ function WebGLMaterials( renderer, properties ) {
209
214
 
210
215
  }
211
216
 
212
- const envMap = properties.get( material ).envMap;
217
+ const materialProperties = properties.get( material );
218
+
219
+ const envMap = materialProperties.envMap;
220
+ const envMapRotation = materialProperties.envMapRotation;
213
221
 
214
222
  if ( envMap ) {
215
223
 
216
224
  uniforms.envMap.value = envMap;
217
225
 
226
+ _e1.copy( envMapRotation );
227
+
228
+ // accommodate left-handed frame
229
+ _e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;
230
+
231
+ if ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {
232
+
233
+ // environment maps which are not cube render targets or PMREMs follow a different convention
234
+ _e1.y *= - 1;
235
+ _e1.z *= - 1;
236
+
237
+ }
238
+
239
+ uniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );
240
+
218
241
  uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
219
242
 
220
243
  uniforms.reflectivity.value = material.reflectivity;
@@ -154,24 +154,31 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
154
154
  }
155
155
 
156
156
  //
157
+ if ( object.isInstancedMesh === true && object.morphTexture !== null ) {
157
158
 
158
- let morphInfluencesSum = 0;
159
+ program.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );
159
160
 
160
- for ( let i = 0; i < objectInfluences.length; i ++ ) {
161
+ } else {
161
162
 
162
- morphInfluencesSum += objectInfluences[ i ];
163
+ let morphInfluencesSum = 0;
163
164
 
164
- }
165
+ for ( let i = 0; i < objectInfluences.length; i ++ ) {
165
166
 
166
- const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
167
+ morphInfluencesSum += objectInfluences[ i ];
167
168
 
168
- program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
169
- program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
169
+ }
170
+
171
+ const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
172
+
173
+
174
+ program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
175
+ program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
176
+
177
+ }
170
178
 
171
179
  program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );
172
180
  program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );
173
181
 
174
-
175
182
  } else {
176
183
 
177
184
  // When object doesn't have morph target influences defined, we treat it as a 0-length array
@@ -1,7 +1,7 @@
1
1
  import { WebGLUniforms } from './WebGLUniforms.js';
2
2
  import { WebGLShader } from './WebGLShader.js';
3
3
  import { ShaderChunk } from '../shaders/ShaderChunk.js';
4
- import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
4
+ import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
5
5
  import { ColorManagement } from '../../math/ColorManagement.js';
6
6
 
7
7
  // From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/
@@ -124,6 +124,10 @@ function getToneMappingFunction( functionName, toneMapping ) {
124
124
  toneMappingName = 'AgX';
125
125
  break;
126
126
 
127
+ case NeutralToneMapping:
128
+ toneMappingName = 'Neutral';
129
+ break;
130
+
127
131
  case CustomToneMapping:
128
132
  toneMappingName = 'Custom';
129
133
  break;
@@ -141,7 +145,7 @@ function getToneMappingFunction( functionName, toneMapping ) {
141
145
  function generateExtensions( parameters ) {
142
146
 
143
147
  const chunks = [
144
- ( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
148
+ ( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.alphaToCoverage || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
145
149
  ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',
146
150
  ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',
147
151
  ( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''
@@ -154,7 +158,8 @@ function generateExtensions( parameters ) {
154
158
  function generateVertexExtensions( parameters ) {
155
159
 
156
160
  const chunks = [
157
- parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : ''
161
+ parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',
162
+ parameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',
158
163
  ];
159
164
 
160
165
  return chunks.filter( filterEmptyLine ).join( '\n' );
@@ -313,7 +318,30 @@ function loopReplacer( match, start, end, snippet ) {
313
318
 
314
319
  function generatePrecision( parameters ) {
315
320
 
316
- let precisionstring = 'precision ' + parameters.precision + ' float;\nprecision ' + parameters.precision + ' int;';
321
+ let precisionstring = `precision ${parameters.precision} float;
322
+ precision ${parameters.precision} int;
323
+ precision ${parameters.precision} sampler2D;
324
+ precision ${parameters.precision} samplerCube;
325
+ `;
326
+
327
+ if ( parameters.isWebGL2 ) {
328
+
329
+ precisionstring += `precision ${parameters.precision} sampler3D;
330
+ precision ${parameters.precision} sampler2DArray;
331
+ precision ${parameters.precision} sampler2DShadow;
332
+ precision ${parameters.precision} samplerCubeShadow;
333
+ precision ${parameters.precision} sampler2DArrayShadow;
334
+ precision ${parameters.precision} isampler2D;
335
+ precision ${parameters.precision} isampler3D;
336
+ precision ${parameters.precision} isamplerCube;
337
+ precision ${parameters.precision} isampler2DArray;
338
+ precision ${parameters.precision} usampler2D;
339
+ precision ${parameters.precision} usampler3D;
340
+ precision ${parameters.precision} usamplerCube;
341
+ precision ${parameters.precision} usampler2DArray;
342
+ `;
343
+
344
+ }
317
345
 
318
346
  if ( parameters.precision === 'highp' ) {
319
347
 
@@ -525,6 +553,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
525
553
  parameters.batching ? '#define USE_BATCHING' : '',
526
554
  parameters.instancing ? '#define USE_INSTANCING' : '',
527
555
  parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
556
+ parameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',
528
557
 
529
558
  parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
530
559
  parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
@@ -656,6 +685,12 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
656
685
 
657
686
  '#endif',
658
687
 
688
+ '#ifdef USE_INSTANCING_MORPH',
689
+
690
+ ' uniform sampler2D morphTexture;',
691
+
692
+ '#endif',
693
+
659
694
  'attribute vec3 position;',
660
695
  'attribute vec3 normal;',
661
696
  'attribute vec2 uv;',
@@ -744,6 +779,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
744
779
  parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
745
780
  parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
746
781
 
782
+ parameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',
747
783
  parameters.map ? '#define USE_MAP' : '',
748
784
  parameters.matcap ? '#define USE_MATCAP' : '',
749
785
  parameters.envMap ? '#define USE_ENVMAP' : '',
@@ -992,6 +1028,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
992
1028
  console.error(
993
1029
  'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
994
1030
  'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
1031
+ 'Material Name: ' + self.name + '\n' +
1032
+ 'Material Type: ' + self.type + '\n\n' +
995
1033
  'Program Info Log: ' + programLog + '\n' +
996
1034
  vertexErrors + '\n' +
997
1035
  fragmentErrors
@@ -10,6 +10,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
10
10
 
11
11
  const _programLayers = new Layers();
12
12
  const _customShaders = new WebGLShaderCache();
13
+ const _activeChannels = new Set();
13
14
  const programs = [];
14
15
 
15
16
  const IS_WEBGL2 = capabilities.isWebGL2;
@@ -38,6 +39,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
38
39
 
39
40
  function getChannel( value ) {
40
41
 
42
+ _activeChannels.add( value );
43
+
41
44
  if ( value === 0 ) return 'uv';
42
45
 
43
46
  return `uv${ value }`;
@@ -160,10 +163,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
160
163
 
161
164
  const HAS_EXTENSIONS = !! material.extensions;
162
165
 
163
- const HAS_ATTRIBUTE_UV1 = !! geometry.attributes.uv1;
164
- const HAS_ATTRIBUTE_UV2 = !! geometry.attributes.uv2;
165
- const HAS_ATTRIBUTE_UV3 = !! geometry.attributes.uv3;
166
-
167
166
  let toneMapping = NoToneMapping;
168
167
 
169
168
  if ( material.toneMapped ) {
@@ -199,10 +198,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
199
198
  batching: IS_BATCHEDMESH,
200
199
  instancing: IS_INSTANCEDMESH,
201
200
  instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
201
+ instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
202
202
 
203
203
  supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
204
204
  numMultiviewViews: numMultiviewViews,
205
205
  outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
206
+ alphaToCoverage: !! material.alphaToCoverage,
206
207
 
207
208
  map: HAS_MAP,
208
209
  matcap: HAS_MATCAP,
@@ -248,7 +249,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
248
249
 
249
250
  gradientMap: HAS_GRADIENTMAP,
250
251
 
251
- opaque: material.transparent === false && material.blending === NormalBlending,
252
+ opaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false,
252
253
 
253
254
  alphaMap: HAS_ALPHAMAP,
254
255
  alphaTest: HAS_ALPHATEST,
@@ -295,15 +296,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
295
296
  vertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),
296
297
  vertexColors: material.vertexColors,
297
298
  vertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,
298
- vertexUv1s: HAS_ATTRIBUTE_UV1,
299
- vertexUv2s: HAS_ATTRIBUTE_UV2,
300
- vertexUv3s: HAS_ATTRIBUTE_UV3,
301
299
 
302
300
  pointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),
303
301
 
304
302
  fog: !! fog,
305
303
  useFog: material.fog === true,
306
- fogExp2: ( fog && fog.isFogExp2 ),
304
+ fogExp2: ( !! fog && fog.isFogExp2 ),
307
305
 
308
306
  flatShading: material.flatShading === true,
309
307
 
@@ -359,7 +357,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
359
357
  extensionFragDepth: HAS_EXTENSIONS && material.extensions.fragDepth === true,
360
358
  extensionDrawBuffers: HAS_EXTENSIONS && material.extensions.drawBuffers === true,
361
359
  extensionShaderTextureLOD: HAS_EXTENSIONS && material.extensions.shaderTextureLOD === true,
362
- extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance && extensions.has( 'WEBGL_clip_cull_distance' ),
360
+ extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),
361
+ extensionMultiDraw: HAS_EXTENSIONS && material.extensions.multiDraw === true && extensions.has( 'WEBGL_multi_draw' ),
363
362
 
364
363
  rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
365
364
  rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),
@@ -370,6 +369,14 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
370
369
 
371
370
  };
372
371
 
372
+ // the usage of getChannel() determines the active texture channels for this shader
373
+
374
+ parameters.vertexUv1s = _activeChannels.has( 1 );
375
+ parameters.vertexUv2s = _activeChannels.has( 2 );
376
+ parameters.vertexUv3s = _activeChannels.has( 3 );
377
+
378
+ _activeChannels.clear();
379
+
373
380
  return parameters;
374
381
 
375
382
  }
@@ -479,38 +486,40 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
479
486
  _programLayers.enable( 2 );
480
487
  if ( parameters.instancingColor )
481
488
  _programLayers.enable( 3 );
482
- if ( parameters.matcap )
489
+ if ( parameters.instancingMorph )
483
490
  _programLayers.enable( 4 );
484
- if ( parameters.envMap )
491
+ if ( parameters.matcap )
485
492
  _programLayers.enable( 5 );
486
- if ( parameters.normalMapObjectSpace )
493
+ if ( parameters.envMap )
487
494
  _programLayers.enable( 6 );
488
- if ( parameters.normalMapTangentSpace )
495
+ if ( parameters.normalMapObjectSpace )
489
496
  _programLayers.enable( 7 );
490
- if ( parameters.clearcoat )
497
+ if ( parameters.normalMapTangentSpace )
491
498
  _programLayers.enable( 8 );
492
- if ( parameters.iridescence )
499
+ if ( parameters.clearcoat )
493
500
  _programLayers.enable( 9 );
494
- if ( parameters.alphaTest )
501
+ if ( parameters.iridescence )
495
502
  _programLayers.enable( 10 );
496
- if ( parameters.vertexColors )
503
+ if ( parameters.alphaTest )
497
504
  _programLayers.enable( 11 );
498
- if ( parameters.vertexAlphas )
505
+ if ( parameters.vertexColors )
499
506
  _programLayers.enable( 12 );
500
- if ( parameters.vertexUv1s )
507
+ if ( parameters.vertexAlphas )
501
508
  _programLayers.enable( 13 );
502
- if ( parameters.vertexUv2s )
509
+ if ( parameters.vertexUv1s )
503
510
  _programLayers.enable( 14 );
504
- if ( parameters.vertexUv3s )
511
+ if ( parameters.vertexUv2s )
505
512
  _programLayers.enable( 15 );
506
- if ( parameters.vertexTangents )
513
+ if ( parameters.vertexUv3s )
507
514
  _programLayers.enable( 16 );
508
- if ( parameters.anisotropy )
515
+ if ( parameters.vertexTangents )
509
516
  _programLayers.enable( 17 );
510
- if ( parameters.alphaHash )
517
+ if ( parameters.anisotropy )
511
518
  _programLayers.enable( 18 );
512
- if ( parameters.batching )
519
+ if ( parameters.alphaHash )
513
520
  _programLayers.enable( 19 );
521
+ if ( parameters.batching )
522
+ _programLayers.enable( 20 );
514
523
 
515
524
  array.push( _programLayers.mask );
516
525
  _programLayers.disableAll();
@@ -555,8 +564,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
555
564
  _programLayers.enable( 18 );
556
565
  if ( parameters.decodeVideoTexture )
557
566
  _programLayers.enable( 19 );
558
- if ( parameters.numMultiviewViews )
567
+ if ( parameters.alphaToCoverage )
559
568
  _programLayers.enable( 20 );
569
+ if ( parameters.numMultiviewViews )
570
+ _programLayers.enable( 21 );
560
571
 
561
572
  array.push( _programLayers.mask );
562
573
 
@@ -493,33 +493,19 @@ function WebGLState( gl, extensions, capabilities ) {
493
493
 
494
494
  }
495
495
 
496
- if ( renderTarget.isWebGLMultipleRenderTargets ) {
496
+ const textures = renderTarget.textures;
497
497
 
498
- const textures = renderTarget.texture;
498
+ if ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {
499
499
 
500
- if ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {
500
+ for ( let i = 0, il = textures.length; i < il; i ++ ) {
501
501
 
502
- for ( let i = 0, il = textures.length; i < il; i ++ ) {
503
-
504
- drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;
505
-
506
- }
507
-
508
- drawBuffers.length = textures.length;
509
-
510
- needsUpdate = true;
502
+ drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;
511
503
 
512
504
  }
513
505
 
514
- } else {
515
-
516
- if ( drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {
517
-
518
- drawBuffers[ 0 ] = gl.COLOR_ATTACHMENT0;
506
+ drawBuffers.length = textures.length;
519
507
 
520
- needsUpdate = true;
521
-
522
- }
508
+ needsUpdate = true;
523
509
 
524
510
  }
525
511
 
@@ -541,10 +527,14 @@ function WebGLState( gl, extensions, capabilities ) {
541
527
 
542
528
  gl.drawBuffers( drawBuffers );
543
529
 
544
- } else {
530
+ } else if ( extensions.has( 'WEBGL_draw_buffers' ) === true ) {
545
531
 
546
532
  extensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( drawBuffers );
547
533
 
534
+ } else {
535
+
536
+ throw new Error( 'THREE.WebGLState: Usage of gl.drawBuffers() require WebGL2 or WEBGL_draw_buffers extension' );
537
+
548
538
  }
549
539
 
550
540
  }