super-three 0.156.0 → 0.157.1

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 (223) hide show
  1. package/build/three.cjs +753 -277
  2. package/build/three.js +753 -277
  3. package/build/three.min.js +2 -2
  4. package/build/three.module.js +750 -276
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/capabilities/WebGL.js +17 -0
  7. package/examples/jsm/controls/DragControls.js +3 -2
  8. package/examples/jsm/csm/CSMShader.js +25 -21
  9. package/examples/jsm/exporters/EXRExporter.js +102 -24
  10. package/examples/jsm/exporters/GLTFExporter.js +1 -1
  11. package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
  12. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  14. package/examples/jsm/lights/LightProbeGenerator.js +37 -3
  15. package/examples/jsm/lines/LineMaterial.js +90 -156
  16. package/examples/jsm/loaders/3DMLoader.js +378 -104
  17. package/examples/jsm/loaders/GLTFLoader.js +1 -1
  18. package/examples/jsm/loaders/LDrawLoader.js +22 -16
  19. package/examples/jsm/loaders/RGBELoader.js +1 -1
  20. package/examples/jsm/loaders/USDZLoader.js +215 -12
  21. package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
  22. package/examples/jsm/nodes/Nodes.js +5 -1
  23. package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
  24. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +2 -2
  25. package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
  26. package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
  27. package/examples/jsm/nodes/accessors/CubeTextureNode.js +2 -2
  28. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +6 -5
  29. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
  30. package/examples/jsm/nodes/accessors/LineMaterialNode.js +7 -9
  31. package/examples/jsm/nodes/accessors/MaterialNode.js +34 -46
  32. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +9 -9
  33. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
  35. package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
  36. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  38. package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
  39. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  40. package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
  41. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
  42. package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
  43. package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
  44. package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
  45. package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
  46. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
  47. package/examples/jsm/nodes/accessors/TextureNode.js +12 -6
  48. package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
  49. package/examples/jsm/nodes/accessors/TextureStoreNode.js +1 -1
  50. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  51. package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
  52. package/examples/jsm/nodes/code/CodeNode.js +1 -1
  53. package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
  54. package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
  55. package/examples/jsm/nodes/code/FunctionNode.js +18 -7
  56. package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
  57. package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
  58. package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
  59. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  60. package/examples/jsm/nodes/core/BypassNode.js +1 -1
  61. package/examples/jsm/nodes/core/CacheNode.js +1 -1
  62. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  63. package/examples/jsm/nodes/core/ContextNode.js +2 -2
  64. package/examples/jsm/nodes/core/IndexNode.js +1 -1
  65. package/examples/jsm/nodes/core/InputNode.js +1 -1
  66. package/examples/jsm/nodes/core/Node.js +28 -13
  67. package/examples/jsm/nodes/core/NodeBuilder.js +3 -17
  68. package/examples/jsm/nodes/core/NodeFrame.js +37 -14
  69. package/examples/jsm/nodes/core/OutputStructNode.js +8 -4
  70. package/examples/jsm/nodes/core/PropertyNode.js +3 -3
  71. package/examples/jsm/nodes/core/StackNode.js +1 -1
  72. package/examples/jsm/nodes/core/StructTypeNode.js +1 -1
  73. package/examples/jsm/nodes/core/TempNode.js +1 -1
  74. package/examples/jsm/nodes/core/UniformNode.js +3 -1
  75. package/examples/jsm/nodes/core/VarNode.js +1 -1
  76. package/examples/jsm/nodes/core/VaryingNode.js +1 -1
  77. package/examples/jsm/nodes/core/constants.js +1 -1
  78. package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
  79. package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
  82. package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
  83. package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
  84. package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
  85. package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
  86. package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
  87. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
  88. package/examples/jsm/nodes/display/ViewportNode.js +2 -2
  89. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
  90. package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
  91. package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
  92. package/examples/jsm/nodes/fog/FogNode.js +2 -2
  93. package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
  94. package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
  95. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  96. package/examples/jsm/nodes/lighting/AONode.js +2 -2
  97. package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
  98. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
  99. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
  100. package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
  101. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
  102. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
  103. package/examples/jsm/nodes/lighting/LightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
  105. package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
  106. package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
  107. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  108. package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
  109. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
  111. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +2 -2
  112. package/examples/jsm/nodes/materials/Materials.js +1 -0
  113. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
  114. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
  115. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
  116. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  117. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  118. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
  119. package/examples/jsm/nodes/materials/NodeMaterial.js +27 -26
  120. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
  121. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
  122. package/examples/jsm/nodes/math/CondNode.js +1 -1
  123. package/examples/jsm/nodes/math/HashNode.js +8 -9
  124. package/examples/jsm/nodes/math/MathNode.js +2 -2
  125. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  126. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  127. package/examples/jsm/nodes/shadernode/ShaderNode.js +81 -28
  128. package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
  129. package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
  130. package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
  131. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
  132. package/examples/jsm/nodes/utils/JoinNode.js +1 -1
  133. package/examples/jsm/nodes/utils/LoopNode.js +11 -11
  134. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
  135. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  136. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  137. package/examples/jsm/nodes/utils/PackingNode.js +2 -2
  138. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  139. package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
  140. package/examples/jsm/nodes/utils/SetNode.js +62 -0
  141. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
  142. package/examples/jsm/nodes/utils/SplitNode.js +1 -1
  143. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
  144. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  145. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
  146. package/examples/jsm/objects/Sky.js +1 -3
  147. package/examples/jsm/postprocessing/OutputPass.js +3 -2
  148. package/examples/jsm/renderers/common/Background.js +2 -2
  149. package/examples/jsm/renderers/common/Bindings.js +3 -5
  150. package/examples/jsm/renderers/common/Pipelines.js +7 -7
  151. package/examples/jsm/renderers/common/RenderContext.js +3 -0
  152. package/examples/jsm/renderers/common/RenderObject.js +40 -16
  153. package/examples/jsm/renderers/common/RenderObjects.js +8 -14
  154. package/examples/jsm/renderers/common/Renderer.js +40 -13
  155. package/examples/jsm/renderers/common/SampledTexture.js +4 -2
  156. package/examples/jsm/renderers/common/StorageTexture.js +19 -0
  157. package/examples/jsm/renderers/common/Textures.js +14 -9
  158. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
  159. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +20 -10
  160. package/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -6
  161. package/examples/jsm/renderers/common/nodes/Nodes.js +51 -24
  162. package/examples/jsm/renderers/webgl/WebGLBackend.js +100 -5
  163. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +92 -6
  164. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +13 -0
  165. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +3 -3
  166. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +14 -2
  167. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +5 -5
  168. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +6 -3
  169. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +5 -5
  170. package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
  171. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +197 -167
  172. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  173. package/examples/jsm/shaders/MMDToonShader.js +4 -4
  174. package/examples/jsm/shaders/OutputShader.js +2 -2
  175. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
  176. package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
  177. package/package.json +1 -1
  178. package/src/Three.js +0 -2
  179. package/src/animation/AnimationUtils.js +3 -20
  180. package/src/animation/KeyframeTrack.js +8 -8
  181. package/src/cameras/Camera.js +1 -5
  182. package/src/cameras/CubeCamera.js +14 -8
  183. package/src/constants.js +7 -1
  184. package/src/core/RenderTarget.js +16 -7
  185. package/src/extras/core/CurvePath.js +4 -1
  186. package/src/loaders/MaterialLoader.js +1 -1
  187. package/src/loaders/ObjectLoader.js +6 -0
  188. package/src/materials/Material.js +8 -8
  189. package/src/math/Color.js +1 -5
  190. package/src/math/ColorManagement.js +82 -60
  191. package/src/objects/Sprite.js +2 -2
  192. package/src/renderers/WebGLMultiviewRenderTarget.js +35 -0
  193. package/src/renderers/WebGLRenderer.js +78 -22
  194. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  195. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
  196. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
  197. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
  198. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
  199. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
  200. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
  201. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
  202. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
  203. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
  204. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
  205. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
  206. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
  207. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
  208. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
  209. package/src/renderers/shaders/UniformsUtils.js +2 -2
  210. package/src/renderers/webgl/WebGLBackground.js +5 -4
  211. package/src/renderers/webgl/WebGLLights.js +14 -3
  212. package/src/renderers/webgl/WebGLMultiview.js +100 -0
  213. package/src/renderers/webgl/WebGLProgram.js +84 -5
  214. package/src/renderers/webgl/WebGLPrograms.js +11 -2
  215. package/src/renderers/webgl/WebGLTextures.js +214 -26
  216. package/src/renderers/webgl/WebGLUtils.js +21 -23
  217. package/src/renderers/webxr/WebXRManager.js +36 -12
  218. package/src/scenes/Fog.js +1 -0
  219. package/src/scenes/FogExp2.js +1 -0
  220. package/src/textures/Source.js +2 -2
  221. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
  222. package/src/lights/AmbientLightProbe.js +0 -21
  223. package/src/lights/HemisphereLightProbe.js +0 -30
@@ -7,15 +7,15 @@ struct ToonMaterial {
7
7
 
8
8
  };
9
9
 
10
- void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
10
+ void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
11
11
 
12
- vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;
12
+ vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;
13
13
 
14
14
  reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
15
15
 
16
16
  }
17
17
 
18
- void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
18
+ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
19
19
 
20
20
  reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
21
21
 
@@ -71,6 +71,6 @@ float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;
71
71
 
72
72
  // non perturbed normal for clearcoat among others
73
73
 
74
- vec3 geometryNormal = normal;
74
+ vec3 nonPerturbedNormal = normal;
75
75
 
76
76
  `;
@@ -203,7 +203,7 @@ void main() {
203
203
 
204
204
  #ifdef USE_CLEARCOAT
205
205
 
206
- float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );
206
+ float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );
207
207
 
208
208
  vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
209
209
 
@@ -1,4 +1,4 @@
1
- import { LinearSRGBColorSpace } from '../../constants.js';
1
+ import { ColorManagement } from '../../math/ColorManagement.js';
2
2
 
3
3
  /**
4
4
  * Uniform Utilities
@@ -93,7 +93,7 @@ export function getUnlitUniformColorSpace( renderer ) {
93
93
 
94
94
  }
95
95
 
96
- return LinearSRGBColorSpace;
96
+ return ColorManagement.workingColorSpace;
97
97
 
98
98
  }
99
99
 
@@ -1,8 +1,9 @@
1
- import { BackSide, FrontSide, CubeUVReflectionMapping, SRGBColorSpace } from '../../constants.js';
1
+ import { BackSide, FrontSide, CubeUVReflectionMapping, SRGBTransfer } from '../../constants.js';
2
2
  import { BoxGeometry } from '../../geometries/BoxGeometry.js';
3
3
  import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
4
4
  import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
5
5
  import { Color } from '../../math/Color.js';
6
+ import { ColorManagement } from '../../math/ColorManagement.js';
6
7
  import { Mesh } from '../../objects/Mesh.js';
7
8
  import { ShaderLib } from '../shaders/ShaderLib.js';
8
9
  import { cloneUniforms, getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
@@ -67,7 +68,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
67
68
  if ( boxMesh === undefined ) {
68
69
 
69
70
  boxMesh = new Mesh(
70
- new BoxGeometry( 1, 1, 1 ),
71
+ new BoxGeometry( 10000, 10000, 10000 ),
71
72
  new ShaderMaterial( {
72
73
  name: 'BackgroundCubeMaterial',
73
74
  uniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),
@@ -108,7 +109,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
108
109
  boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;
109
110
  boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;
110
111
  boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
111
- boxMesh.material.toneMapped = ( background.colorSpace === SRGBColorSpace ) ? false : true;
112
+ boxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;
112
113
 
113
114
  if ( currentBackground !== background ||
114
115
  currentBackgroundVersion !== background.version ||
@@ -164,7 +165,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
164
165
 
165
166
  planeMesh.material.uniforms.t2D.value = background;
166
167
  planeMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
167
- planeMesh.material.toneMapped = ( background.colorSpace === SRGBColorSpace ) ? false : true;
168
+ planeMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;
168
169
 
169
170
  if ( background.matrixAutoUpdate === true ) {
170
171
 
@@ -170,7 +170,9 @@ function WebGLLights( extensions, capabilities ) {
170
170
  numDirectionalShadows: - 1,
171
171
  numPointShadows: - 1,
172
172
  numSpotShadows: - 1,
173
- numSpotMaps: - 1
173
+ numSpotMaps: - 1,
174
+
175
+ numLightProbes: - 1
174
176
  },
175
177
 
176
178
  ambient: [ 0, 0, 0 ],
@@ -192,7 +194,8 @@ function WebGLLights( extensions, capabilities ) {
192
194
  pointShadowMap: [],
193
195
  pointShadowMatrix: [],
194
196
  hemi: [],
195
- numSpotLightShadowsWithMaps: 0
197
+ numSpotLightShadowsWithMaps: 0,
198
+ numLightProbes: 0
196
199
 
197
200
  };
198
201
 
@@ -220,6 +223,8 @@ function WebGLLights( extensions, capabilities ) {
220
223
  let numSpotMaps = 0;
221
224
  let numSpotShadowsWithMaps = 0;
222
225
 
226
+ let numLightProbes = 0;
227
+
223
228
  // ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]
224
229
  lights.sort( shadowCastingAndTexturingLightsFirst );
225
230
 
@@ -250,6 +255,8 @@ function WebGLLights( extensions, capabilities ) {
250
255
 
251
256
  }
252
257
 
258
+ numLightProbes ++;
259
+
253
260
  } else if ( light.isDirectionalLight ) {
254
261
 
255
262
  const uniforms = cache.get( light );
@@ -437,7 +444,8 @@ function WebGLLights( extensions, capabilities ) {
437
444
  hash.numDirectionalShadows !== numDirectionalShadows ||
438
445
  hash.numPointShadows !== numPointShadows ||
439
446
  hash.numSpotShadows !== numSpotShadows ||
440
- hash.numSpotMaps !== numSpotMaps ) {
447
+ hash.numSpotMaps !== numSpotMaps ||
448
+ hash.numLightProbes !== numLightProbes ) {
441
449
 
442
450
  state.directional.length = directionalLength;
443
451
  state.spot.length = spotLength;
@@ -456,6 +464,7 @@ function WebGLLights( extensions, capabilities ) {
456
464
  state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;
457
465
  state.spotLightMap.length = numSpotMaps;
458
466
  state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;
467
+ state.numLightProbes = numLightProbes;
459
468
 
460
469
  hash.directionalLength = directionalLength;
461
470
  hash.pointLength = pointLength;
@@ -468,6 +477,8 @@ function WebGLLights( extensions, capabilities ) {
468
477
  hash.numSpotShadows = numSpotShadows;
469
478
  hash.numSpotMaps = numSpotMaps;
470
479
 
480
+ hash.numLightProbes = numLightProbes;
481
+
471
482
  state.version = nextVersion ++;
472
483
 
473
484
  }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @author fernandojsg / http://fernandojsg.com
3
+ * @author Takahiro https://github.com/takahirox
4
+ */
5
+ import { Matrix3 } from '../../math/Matrix3.js';
6
+ import { Matrix4 } from '../../math/Matrix4.js';
7
+
8
+ class WebGLMultiview {
9
+
10
+ constructor( renderer, extensions, gl ) {
11
+
12
+ this.renderer = renderer;
13
+
14
+ this.DEFAULT_NUMVIEWS = 2;
15
+ this.maxNumViews = 0;
16
+ this.gl = gl;
17
+
18
+ this.extensions = extensions;
19
+
20
+ this.available = this.extensions.has( 'OCULUS_multiview' );
21
+
22
+ if ( this.available ) {
23
+
24
+ const extension = this.extensions.get( 'OCULUS_multiview' );
25
+
26
+ this.maxNumViews = this.gl.getParameter( extension.MAX_VIEWS_OVR );
27
+
28
+ this.mat4 = [];
29
+ this.mat3 = [];
30
+ this.cameraArray = [];
31
+
32
+ for ( var i = 0; i < this.maxNumViews; i ++ ) {
33
+
34
+ this.mat4[ i ] = new Matrix4();
35
+ this.mat3[ i ] = new Matrix3();
36
+
37
+ }
38
+
39
+ }
40
+
41
+ }
42
+
43
+ //
44
+ getCameraArray( camera ) {
45
+
46
+ if ( camera.isArrayCamera ) return camera.cameras;
47
+
48
+ this.cameraArray[ 0 ] = camera;
49
+
50
+ return this.cameraArray;
51
+
52
+ }
53
+
54
+ updateCameraProjectionMatricesUniform( camera, uniforms ) {
55
+
56
+ var cameras = this.getCameraArray( camera );
57
+
58
+ for ( var i = 0; i < cameras.length; i ++ ) {
59
+
60
+ this.mat4[ i ].copy( cameras[ i ].projectionMatrix );
61
+
62
+ }
63
+
64
+ uniforms.setValue( this.gl, 'projectionMatrices', this.mat4 );
65
+
66
+ }
67
+
68
+ updateCameraViewMatricesUniform( camera, uniforms ) {
69
+
70
+ var cameras = this.getCameraArray( camera );
71
+
72
+ for ( var i = 0; i < cameras.length; i ++ ) {
73
+
74
+ this.mat4[ i ].copy( cameras[ i ].matrixWorldInverse );
75
+
76
+ }
77
+
78
+ uniforms.setValue( this.gl, 'viewMatrices', this.mat4 );
79
+
80
+ }
81
+
82
+ updateObjectMatricesUniforms( object, camera, uniforms ) {
83
+
84
+ var cameras = this.getCameraArray( camera );
85
+
86
+ for ( var i = 0; i < cameras.length; i ++ ) {
87
+
88
+ this.mat4[ i ].multiplyMatrices( cameras[ i ].matrixWorldInverse, object.matrixWorld );
89
+ this.mat3[ i ].getNormalMatrix( this.mat4[ i ] );
90
+
91
+ }
92
+
93
+ uniforms.setValue( this.gl, 'modelViewMatrices', this.mat4 );
94
+ uniforms.setValue( this.gl, 'normalMatrices', this.mat3 );
95
+
96
+ }
97
+
98
+ }
99
+
100
+ export { WebGLMultiview };
@@ -1,7 +1,8 @@
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, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace } from '../../constants.js';
4
+ import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
5
+ import { ColorManagement } from '../../math/ColorManagement.js';
5
6
 
6
7
  let programIdCount = 0;
7
8
 
@@ -26,15 +27,38 @@ function handleSource( string, errorLine ) {
26
27
 
27
28
  function getEncodingComponents( colorSpace ) {
28
29
 
30
+ const workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );
31
+ const encodingPrimaries = ColorManagement.getPrimaries( colorSpace );
32
+
33
+ let gamutMapping;
34
+
35
+ if ( workingPrimaries === encodingPrimaries ) {
36
+
37
+ gamutMapping = '';
38
+
39
+ } else if ( workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries ) {
40
+
41
+ gamutMapping = 'LinearDisplayP3ToLinearSRGB';
42
+
43
+ } else if ( workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries ) {
44
+
45
+ gamutMapping = 'LinearSRGBToLinearDisplayP3';
46
+
47
+ }
48
+
29
49
  switch ( colorSpace ) {
30
50
 
31
51
  case LinearSRGBColorSpace:
32
- return [ 'Linear', '( value )' ];
52
+ case LinearDisplayP3ColorSpace:
53
+ return [ gamutMapping, 'LinearTransferOETF' ];
54
+
33
55
  case SRGBColorSpace:
34
- return [ 'sRGB', '( value )' ];
56
+ case DisplayP3ColorSpace:
57
+ return [ gamutMapping, 'sRGBTransferOETF' ];
58
+
35
59
  default:
36
60
  console.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );
37
- return [ 'Linear', '( value )' ];
61
+ return [ gamutMapping, 'LinearTransferOETF' ];
38
62
 
39
63
  }
40
64
 
@@ -67,7 +91,7 @@ function getShaderErrors( gl, shader, type ) {
67
91
  function getTexelEncodingFunction( functionName, colorSpace ) {
68
92
 
69
93
  const components = getEncodingComponents( colorSpace );
70
- return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';
94
+ return `vec4 ${functionName}( vec4 value ) { return ${components[ 0 ]}( ${components[ 1 ]}( value ) ); }`;
71
95
 
72
96
  }
73
97
 
@@ -431,6 +455,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
431
455
  let prefixVertex, prefixFragment;
432
456
  let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : '';
433
457
 
458
+ const numMultiviewViews = parameters.numMultiviewViews;
459
+
434
460
  if ( parameters.isRawShaderMaterial ) {
435
461
 
436
462
  prefixVertex = [
@@ -494,6 +520,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
494
520
  parameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',
495
521
  parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
496
522
 
523
+ parameters.anisotropy ? '#define USE_ANISOTROPY' : '',
497
524
  parameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',
498
525
 
499
526
  parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
@@ -581,6 +608,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
581
608
 
582
609
  parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',
583
610
 
611
+ parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
612
+
584
613
  parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
585
614
 
586
615
  parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
@@ -763,6 +792,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
763
792
 
764
793
  parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',
765
794
 
795
+ parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
796
+
766
797
  parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
767
798
 
768
799
  parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
@@ -832,6 +863,53 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
832
863
  '#define textureCubeGradEXT textureGrad'
833
864
  ].join( '\n' ) + '\n' + prefixFragment;
834
865
 
866
+ // Multiview
867
+
868
+ if ( numMultiviewViews > 0 ) {
869
+
870
+ // TODO: fix light transforms here?
871
+
872
+ prefixVertex = [
873
+ '#extension GL_OVR_multiview : require',
874
+ 'layout(num_views = ' + numMultiviewViews + ') in;',
875
+ '#define VIEW_ID gl_ViewID_OVR'
876
+ ].join( '\n' ) + '\n' + prefixVertex;
877
+
878
+ prefixVertex = prefixVertex.replace(
879
+ [
880
+ 'uniform mat4 modelViewMatrix;',
881
+ 'uniform mat4 projectionMatrix;',
882
+ 'uniform mat4 viewMatrix;',
883
+ 'uniform mat3 normalMatrix;'
884
+ ].join( '\n' ),
885
+ [
886
+ 'uniform mat4 modelViewMatrices[' + numMultiviewViews + '];',
887
+ 'uniform mat4 projectionMatrices[' + numMultiviewViews + '];',
888
+ 'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
889
+ 'uniform mat3 normalMatrices[' + numMultiviewViews + '];',
890
+
891
+ '#define modelViewMatrix modelViewMatrices[VIEW_ID]',
892
+ '#define projectionMatrix projectionMatrices[VIEW_ID]',
893
+ '#define viewMatrix viewMatrices[VIEW_ID]',
894
+ '#define normalMatrix normalMatrices[VIEW_ID]'
895
+ ].join( '\n' )
896
+ );
897
+
898
+ prefixFragment = [
899
+ '#extension GL_OVR_multiview : require',
900
+ '#define VIEW_ID gl_ViewID_OVR'
901
+ ].join( '\n' ) + '\n' + prefixFragment;
902
+
903
+ prefixFragment = prefixFragment.replace(
904
+ 'uniform mat4 viewMatrix;',
905
+ [
906
+ 'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
907
+ '#define viewMatrix viewMatrices[VIEW_ID]'
908
+ ].join( '\n' )
909
+ );
910
+
911
+ }
912
+
835
913
  }
836
914
 
837
915
  const vertexGlsl = versionString + prefixVertex + vertexShader;
@@ -996,6 +1074,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
996
1074
  this.program = program;
997
1075
  this.vertexShader = glVertexShader;
998
1076
  this.fragmentShader = glFragmentShader;
1077
+ this.numMultiviewViews = numMultiviewViews;
999
1078
 
1000
1079
  return this;
1001
1080
 
@@ -1,9 +1,10 @@
1
- import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace, SRGBColorSpace } from '../../constants.js';
1
+ import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace, SRGBTransfer } from '../../constants.js';
2
2
  import { Layers } from '../../core/Layers.js';
3
3
  import { WebGLProgram } from './WebGLProgram.js';
4
4
  import { WebGLShaderCache } from './WebGLShaderCache.js';
5
5
  import { ShaderLib } from '../shaders/ShaderLib.js';
6
6
  import { UniformsUtils } from '../shaders/UniformsUtils.js';
7
+ import { ColorManagement } from '../../math/ColorManagement.js';
7
8
 
8
9
  function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {
9
10
 
@@ -106,6 +107,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
106
107
 
107
108
  const currentRenderTarget = renderer.getRenderTarget();
108
109
 
110
+ const numMultiviewViews = currentRenderTarget && currentRenderTarget.isWebGLMultiviewRenderTarget ? currentRenderTarget.numViews : 0;
111
+
109
112
  const IS_INSTANCEDMESH = object.isInstancedMesh === true;
110
113
 
111
114
  const HAS_MAP = !! material.map;
@@ -196,6 +199,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
196
199
  instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
197
200
 
198
201
  supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
202
+ numMultiviewViews: numMultiviewViews,
199
203
  outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
200
204
 
201
205
  map: HAS_MAP,
@@ -324,6 +328,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
324
328
  numSpotLightShadows: lights.spotShadowMap.length,
325
329
  numSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,
326
330
 
331
+ numLightProbes: lights.numLightProbes,
332
+
327
333
  numClippingPlanes: clipping.numPlanes,
328
334
  numClipIntersection: clipping.numIntersection,
329
335
 
@@ -335,7 +341,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
335
341
  toneMapping: toneMapping,
336
342
  useLegacyLights: renderer._useLegacyLights,
337
343
 
338
- decodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( material.map.colorSpace === SRGBColorSpace ),
344
+ decodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),
339
345
 
340
346
  premultipliedAlpha: material.premultipliedAlpha,
341
347
 
@@ -448,6 +454,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
448
454
  array.push( parameters.numPointLightShadows );
449
455
  array.push( parameters.numSpotLightShadows );
450
456
  array.push( parameters.numSpotLightShadowsWithMaps );
457
+ array.push( parameters.numLightProbes );
451
458
  array.push( parameters.shadowMapType );
452
459
  array.push( parameters.toneMapping );
453
460
  array.push( parameters.numClippingPlanes );
@@ -540,6 +547,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
540
547
  _programLayers.enable( 18 );
541
548
  if ( parameters.decodeVideoTexture )
542
549
  _programLayers.enable( 19 );
550
+ if ( parameters.numMultiviewViews )
551
+ _programLayers.enable( 20 );
543
552
 
544
553
  array.push( _programLayers.mask );
545
554