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
package/src/Three.js CHANGED
@@ -61,10 +61,8 @@ export { SpotLight } from './lights/SpotLight.js';
61
61
  export { PointLight } from './lights/PointLight.js';
62
62
  export { RectAreaLight } from './lights/RectAreaLight.js';
63
63
  export { HemisphereLight } from './lights/HemisphereLight.js';
64
- export { HemisphereLightProbe } from './lights/HemisphereLightProbe.js';
65
64
  export { DirectionalLight } from './lights/DirectionalLight.js';
66
65
  export { AmbientLight } from './lights/AmbientLight.js';
67
- export { AmbientLightProbe } from './lights/AmbientLightProbe.js';
68
66
  export { Light } from './lights/Light.js';
69
67
  export { LightProbe } from './lights/LightProbe.js';
70
68
  export { StereoCamera } from './cameras/StereoCamera.js';
@@ -1,21 +1,6 @@
1
1
  import { Quaternion } from '../math/Quaternion.js';
2
2
  import { AdditiveAnimationBlendMode } from '../constants.js';
3
3
 
4
- // same as Array.prototype.slice, but also works on typed arrays
5
- function arraySlice( array, from, to ) {
6
-
7
- if ( isTypedArray( array ) ) {
8
-
9
- // in ios9 array.subarray(from, undefined) will return empty array
10
- // but array.subarray(from) or array.subarray(from, len) is correct
11
- return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );
12
-
13
- }
14
-
15
- return array.slice( from, to );
16
-
17
- }
18
-
19
4
  // converts an array to a specific type
20
5
  function convertArray( array, type, forceClone ) {
21
6
 
@@ -279,14 +264,14 @@ function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targe
279
264
  // Reference frame is earlier than the first keyframe, so just use the first keyframe
280
265
  const startIndex = referenceOffset;
281
266
  const endIndex = referenceValueSize - referenceOffset;
282
- referenceValue = arraySlice( referenceTrack.values, startIndex, endIndex );
267
+ referenceValue = referenceTrack.values.slice( startIndex, endIndex );
283
268
 
284
269
  } else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {
285
270
 
286
271
  // Reference frame is after the last keyframe, so just use the last keyframe
287
272
  const startIndex = lastIndex * referenceValueSize + referenceOffset;
288
273
  const endIndex = startIndex + referenceValueSize - referenceOffset;
289
- referenceValue = arraySlice( referenceTrack.values, startIndex, endIndex );
274
+ referenceValue = referenceTrack.values.slice( startIndex, endIndex );
290
275
 
291
276
  } else {
292
277
 
@@ -295,7 +280,7 @@ function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targe
295
280
  const startIndex = referenceOffset;
296
281
  const endIndex = referenceValueSize - referenceOffset;
297
282
  interpolant.evaluate( referenceTime );
298
- referenceValue = arraySlice( interpolant.resultBuffer, startIndex, endIndex );
283
+ referenceValue = interpolant.resultBuffer.slice( startIndex, endIndex );
299
284
 
300
285
  }
301
286
 
@@ -350,7 +335,6 @@ function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targe
350
335
  }
351
336
 
352
337
  const AnimationUtils = {
353
- arraySlice: arraySlice,
354
338
  convertArray: convertArray,
355
339
  isTypedArray: isTypedArray,
356
340
  getKeyframeOrder: getKeyframeOrder,
@@ -361,7 +345,6 @@ const AnimationUtils = {
361
345
  };
362
346
 
363
347
  export {
364
- arraySlice,
365
348
  convertArray,
366
349
  isTypedArray,
367
350
  getKeyframeOrder,
@@ -239,8 +239,8 @@ class KeyframeTrack {
239
239
  }
240
240
 
241
241
  const stride = this.getValueSize();
242
- this.times = AnimationUtils.arraySlice( times, from, to );
243
- this.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );
242
+ this.times = times.slice( from, to );
243
+ this.values = this.values.slice( from * stride, to * stride );
244
244
 
245
245
  }
246
246
 
@@ -330,8 +330,8 @@ class KeyframeTrack {
330
330
  optimize() {
331
331
 
332
332
  // times or values may be shared with other tracks, so overwriting is unsafe
333
- const times = AnimationUtils.arraySlice( this.times ),
334
- values = AnimationUtils.arraySlice( this.values ),
333
+ const times = this.times.slice(),
334
+ values = this.values.slice(),
335
335
  stride = this.getValueSize(),
336
336
 
337
337
  smoothInterpolation = this.getInterpolation() === InterpolateSmooth,
@@ -424,8 +424,8 @@ class KeyframeTrack {
424
424
 
425
425
  if ( writeIndex !== times.length ) {
426
426
 
427
- this.times = AnimationUtils.arraySlice( times, 0, writeIndex );
428
- this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );
427
+ this.times = times.slice( 0, writeIndex );
428
+ this.values = values.slice( 0, writeIndex * stride );
429
429
 
430
430
  } else {
431
431
 
@@ -440,8 +440,8 @@ class KeyframeTrack {
440
440
 
441
441
  clone() {
442
442
 
443
- const times = AnimationUtils.arraySlice( this.times, 0 );
444
- const values = AnimationUtils.arraySlice( this.values, 0 );
443
+ const times = this.times.slice();
444
+ const values = this.values.slice();
445
445
 
446
446
  const TypedKeyframeTrack = this.constructor;
447
447
  const track = new TypedKeyframeTrack( this.name, times, values );
@@ -38,11 +38,7 @@ class Camera extends Object3D {
38
38
 
39
39
  getWorldDirection( target ) {
40
40
 
41
- this.updateWorldMatrix( true, false );
42
-
43
- const e = this.matrixWorld.elements;
44
-
45
- return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();
41
+ return super.getWorldDirection( target ).negate();
46
42
 
47
43
  }
48
44
 
@@ -15,6 +15,7 @@ class CubeCamera extends Object3D {
15
15
 
16
16
  this.renderTarget = renderTarget;
17
17
  this.coordinateSystem = null;
18
+ this.activeMipmapLevel = 0;
18
19
 
19
20
  const cameraPX = new PerspectiveCamera( fov, aspect, near, far );
20
21
  cameraPX.layers = this.layers;
@@ -112,7 +113,7 @@ class CubeCamera extends Object3D {
112
113
 
113
114
  if ( this.parent === null ) this.updateMatrixWorld();
114
115
 
115
- const renderTarget = this.renderTarget;
116
+ const { renderTarget, activeMipmapLevel } = this;
116
117
 
117
118
  if ( this.coordinateSystem !== renderer.coordinateSystem ) {
118
119
 
@@ -125,6 +126,8 @@ class CubeCamera extends Object3D {
125
126
  const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;
126
127
 
127
128
  const currentRenderTarget = renderer.getRenderTarget();
129
+ const currentActiveCubeFace = renderer.getActiveCubeFace();
130
+ const currentActiveMipmapLevel = renderer.getActiveMipmapLevel();
128
131
 
129
132
  const currentXrEnabled = renderer.xr.enabled;
130
133
 
@@ -134,27 +137,30 @@ class CubeCamera extends Object3D {
134
137
 
135
138
  renderTarget.texture.generateMipmaps = false;
136
139
 
137
- renderer.setRenderTarget( renderTarget, 0 );
140
+ renderer.setRenderTarget( renderTarget, 0, activeMipmapLevel );
138
141
  renderer.render( scene, cameraPX );
139
142
 
140
- renderer.setRenderTarget( renderTarget, 1 );
143
+ renderer.setRenderTarget( renderTarget, 1, activeMipmapLevel );
141
144
  renderer.render( scene, cameraNX );
142
145
 
143
- renderer.setRenderTarget( renderTarget, 2 );
146
+ renderer.setRenderTarget( renderTarget, 2, activeMipmapLevel );
144
147
  renderer.render( scene, cameraPY );
145
148
 
146
- renderer.setRenderTarget( renderTarget, 3 );
149
+ renderer.setRenderTarget( renderTarget, 3, activeMipmapLevel );
147
150
  renderer.render( scene, cameraNY );
148
151
 
149
- renderer.setRenderTarget( renderTarget, 4 );
152
+ renderer.setRenderTarget( renderTarget, 4, activeMipmapLevel );
150
153
  renderer.render( scene, cameraPZ );
151
154
 
155
+ // mipmaps are generated during the last call of render()
156
+ // at this point, all sides of the cube render target are defined
157
+
152
158
  renderTarget.texture.generateMipmaps = generateMipmaps;
153
159
 
154
- renderer.setRenderTarget( renderTarget, 5 );
160
+ renderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );
155
161
  renderer.render( scene, cameraNZ );
156
162
 
157
- renderer.setRenderTarget( currentRenderTarget );
163
+ renderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
158
164
 
159
165
  renderer.xr.enabled = currentXrEnabled;
160
166
 
package/src/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- export const REVISION = '156';
1
+ export const REVISION = '157';
2
2
 
3
3
  export const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };
4
4
  export const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };
@@ -158,6 +158,12 @@ export const LinearSRGBColorSpace = 'srgb-linear';
158
158
  export const DisplayP3ColorSpace = 'display-p3';
159
159
  export const LinearDisplayP3ColorSpace = 'display-p3-linear';
160
160
 
161
+ export const LinearTransfer = 'linear';
162
+ export const SRGBTransfer = 'srgb';
163
+
164
+ export const Rec709Primaries = 'rec709';
165
+ export const P3Primaries = 'p3';
166
+
161
167
  export const ZeroStencilOp = 0;
162
168
  export const KeepStencilOp = 7680;
163
169
  export const ReplaceStencilOp = 7681;
@@ -37,20 +37,29 @@ class RenderTarget extends EventDispatcher {
37
37
 
38
38
  }
39
39
 
40
+ options = Object.assign( {
41
+ generateMipmaps: false,
42
+ internalFormat: null,
43
+ minFilter: LinearFilter,
44
+ depthBuffer: true,
45
+ stencilBuffer: false,
46
+ depthTexture: null,
47
+ samples: 0
48
+ }, options );
49
+
40
50
  this.texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );
41
51
  this.texture.isRenderTargetTexture = true;
42
52
 
43
53
  this.texture.flipY = false;
44
- this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;
45
- this.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null;
46
- this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;
54
+ this.texture.generateMipmaps = options.generateMipmaps;
55
+ this.texture.internalFormat = options.internalFormat;
47
56
 
48
- this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;
49
- this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;
57
+ this.depthBuffer = options.depthBuffer;
58
+ this.stencilBuffer = options.stencilBuffer;
50
59
 
51
- this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;
60
+ this.depthTexture = options.depthTexture;
52
61
 
53
- this.samples = options.samples !== undefined ? options.samples : 0;
62
+ this.samples = options.samples;
54
63
 
55
64
  }
56
65
 
@@ -33,10 +33,13 @@ class CurvePath extends Curve {
33
33
 
34
34
  if ( ! startPoint.equals( endPoint ) ) {
35
35
 
36
- this.curves.push( new Curves[ 'LineCurve' ]( endPoint, startPoint ) );
36
+ const lineType = ( startPoint.isVector2 === true ) ? 'LineCurve' : 'LineCurve3';
37
+ this.curves.push( new Curves[ lineType ]( endPoint, startPoint ) );
37
38
 
38
39
  }
39
40
 
41
+ return this;
42
+
40
43
  }
41
44
 
42
45
  // To get accurate point with reference to
@@ -142,7 +142,7 @@ class MaterialLoader extends Loader {
142
142
 
143
143
  if ( json.rotation !== undefined ) material.rotation = json.rotation;
144
144
 
145
- if ( json.linewidth !== 1 ) material.linewidth = json.linewidth;
145
+ if ( json.linewidth !== undefined ) material.linewidth = json.linewidth;
146
146
  if ( json.dashSize !== undefined ) material.dashSize = json.dashSize;
147
147
  if ( json.gapSize !== undefined ) material.gapSize = json.gapSize;
148
148
  if ( json.scale !== undefined ) material.scale = json.scale;
@@ -800,6 +800,12 @@ class ObjectLoader extends Loader {
800
800
 
801
801
  }
802
802
 
803
+ if ( data.fog.name !== '' ) {
804
+
805
+ object.fog.name = data.fog.name;
806
+
807
+ }
808
+
803
809
  }
804
810
 
805
811
  if ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;
@@ -320,10 +320,10 @@ class Material extends EventDispatcher {
320
320
 
321
321
  if ( this.blending !== NormalBlending ) data.blending = this.blending;
322
322
  if ( this.side !== FrontSide ) data.side = this.side;
323
- if ( this.vertexColors ) data.vertexColors = true;
323
+ if ( this.vertexColors === true ) data.vertexColors = true;
324
324
 
325
325
  if ( this.opacity < 1 ) data.opacity = this.opacity;
326
- if ( this.transparent === true ) data.transparent = this.transparent;
326
+ if ( this.transparent === true ) data.transparent = true;
327
327
 
328
328
  data.depthFunc = this.depthFunc;
329
329
  data.depthTest = this.depthTest;
@@ -354,17 +354,17 @@ class Material extends EventDispatcher {
354
354
  if ( this.dithering === true ) data.dithering = true;
355
355
 
356
356
  if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;
357
- if ( this.alphaHash === true ) data.alphaHash = this.alphaHash;
358
- if ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;
359
- if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;
360
- if ( this.forceSinglePass === true ) data.forceSinglePass = this.forceSinglePass;
357
+ if ( this.alphaHash === true ) data.alphaHash = true;
358
+ if ( this.alphaToCoverage === true ) data.alphaToCoverage = true;
359
+ if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;
360
+ if ( this.forceSinglePass === true ) data.forceSinglePass = true;
361
361
 
362
- if ( this.wireframe === true ) data.wireframe = this.wireframe;
362
+ if ( this.wireframe === true ) data.wireframe = true;
363
363
  if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;
364
364
  if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;
365
365
  if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;
366
366
 
367
- if ( this.flatShading === true ) data.flatShading = this.flatShading;
367
+ if ( this.flatShading === true ) data.flatShading = true;
368
368
 
369
369
  if ( this.visible === false ) data.visible = false;
370
370
 
package/src/math/Color.js CHANGED
@@ -442,11 +442,7 @@ class Color {
442
442
 
443
443
  this.getHSL( _hslA );
444
444
 
445
- _hslA.h += h; _hslA.s += s; _hslA.l += l;
446
-
447
- this.setHSL( _hslA.h, _hslA.s, _hslA.l );
448
-
449
- return this;
445
+ return this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );
450
446
 
451
447
  }
452
448
 
@@ -1,18 +1,6 @@
1
- import { SRGBColorSpace, LinearSRGBColorSpace, DisplayP3ColorSpace, } from '../constants.js';
1
+ import { SRGBColorSpace, LinearSRGBColorSpace, DisplayP3ColorSpace, LinearDisplayP3ColorSpace, Rec709Primaries, P3Primaries, SRGBTransfer, LinearTransfer, NoColorSpace, } from '../constants.js';
2
2
  import { Matrix3 } from './Matrix3.js';
3
3
 
4
- export function SRGBToLinear( c ) {
5
-
6
- return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );
7
-
8
- }
9
-
10
- export function LinearToSRGB( c ) {
11
-
12
- return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;
13
-
14
- }
15
-
16
4
  /**
17
5
  * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping
18
6
  * or clipping. Based on W3C specifications for sRGB and Display P3,
@@ -25,50 +13,57 @@ export function LinearToSRGB( c ) {
25
13
  * - http://www.russellcottrell.com/photo/matrixCalculator.htm
26
14
  */
27
15
 
28
- const LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().fromArray( [
29
- 0.8224621, 0.0331941, 0.0170827,
30
- 0.1775380, 0.9668058, 0.0723974,
31
- - 0.0000001, 0.0000001, 0.9105199
32
- ] );
33
-
34
- const LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().fromArray( [
35
- 1.2249401, - 0.0420569, - 0.0196376,
36
- - 0.2249404, 1.0420571, - 0.0786361,
37
- 0.0000001, 0.0000000, 1.0982735
38
- ] );
39
-
40
- function DisplayP3ToLinearSRGB( color ) {
16
+ const LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().set(
17
+ 0.8224621, 0.177538, 0.0,
18
+ 0.0331941, 0.9668058, 0.0,
19
+ 0.0170827, 0.0723974, 0.9105199,
20
+ );
41
21
 
42
- // Display P3 uses the sRGB transfer functions
43
- return color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB );
22
+ const LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().set(
23
+ 1.2249401, - 0.2249404, 0.0,
24
+ - 0.0420569, 1.0420571, 0.0,
25
+ - 0.0196376, - 0.0786361, 1.0982735
26
+ );
44
27
 
45
- }
46
-
47
- function LinearSRGBToDisplayP3( color ) {
48
-
49
- // Display P3 uses the sRGB transfer functions
50
- return color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB();
51
-
52
- }
53
-
54
- // Conversions from <source> to Linear-sRGB reference space.
55
- const TO_LINEAR = {
56
- [ LinearSRGBColorSpace ]: ( color ) => color,
57
- [ SRGBColorSpace ]: ( color ) => color.convertSRGBToLinear(),
58
- [ DisplayP3ColorSpace ]: DisplayP3ToLinearSRGB,
28
+ /**
29
+ * Defines supported color spaces by transfer function and primaries,
30
+ * and provides conversions to/from the Linear-sRGB reference space.
31
+ */
32
+ const COLOR_SPACES = {
33
+ [ LinearSRGBColorSpace ]: {
34
+ transfer: LinearTransfer,
35
+ primaries: Rec709Primaries,
36
+ toReference: ( color ) => color,
37
+ fromReference: ( color ) => color,
38
+ },
39
+ [ SRGBColorSpace ]: {
40
+ transfer: SRGBTransfer,
41
+ primaries: Rec709Primaries,
42
+ toReference: ( color ) => color.convertSRGBToLinear(),
43
+ fromReference: ( color ) => color.convertLinearToSRGB(),
44
+ },
45
+ [ LinearDisplayP3ColorSpace ]: {
46
+ transfer: LinearTransfer,
47
+ primaries: P3Primaries,
48
+ toReference: ( color ) => color.applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),
49
+ fromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ),
50
+ },
51
+ [ DisplayP3ColorSpace ]: {
52
+ transfer: SRGBTransfer,
53
+ primaries: P3Primaries,
54
+ toReference: ( color ) => color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),
55
+ fromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB(),
56
+ },
59
57
  };
60
58
 
61
- // Conversions to <target> from Linear-sRGB reference space.
62
- const FROM_LINEAR = {
63
- [ LinearSRGBColorSpace ]: ( color ) => color,
64
- [ SRGBColorSpace ]: ( color ) => color.convertLinearToSRGB(),
65
- [ DisplayP3ColorSpace ]: LinearSRGBToDisplayP3,
66
- };
59
+ const SUPPORTED_WORKING_COLOR_SPACES = new Set( [ LinearSRGBColorSpace, LinearDisplayP3ColorSpace ] );
67
60
 
68
61
  export const ColorManagement = {
69
62
 
70
63
  enabled: true,
71
64
 
65
+ _workingColorSpace: LinearSRGBColorSpace,
66
+
72
67
  get legacyMode() {
73
68
 
74
69
  console.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' );
@@ -87,13 +82,19 @@ export const ColorManagement = {
87
82
 
88
83
  get workingColorSpace() {
89
84
 
90
- return LinearSRGBColorSpace;
85
+ return this._workingColorSpace;
91
86
 
92
87
  },
93
88
 
94
89
  set workingColorSpace( colorSpace ) {
95
90
 
96
- console.warn( 'THREE.ColorManagement: .workingColorSpace is readonly.' );
91
+ if ( ! SUPPORTED_WORKING_COLOR_SPACES.has( colorSpace ) ) {
92
+
93
+ throw new Error( `Unsupported working color space, "${ colorSpace }".` );
94
+
95
+ }
96
+
97
+ this._workingColorSpace = colorSpace;
97
98
 
98
99
  },
99
100
 
@@ -105,29 +106,50 @@ export const ColorManagement = {
105
106
 
106
107
  }
107
108
 
108
- const sourceToLinear = TO_LINEAR[ sourceColorSpace ];
109
- const targetFromLinear = FROM_LINEAR[ targetColorSpace ];
109
+ const sourceToReference = COLOR_SPACES[ sourceColorSpace ].toReference;
110
+ const targetFromReference = COLOR_SPACES[ targetColorSpace ].fromReference;
110
111
 
111
- if ( sourceToLinear === undefined || targetFromLinear === undefined ) {
112
+ return targetFromReference( sourceToReference( color ) );
112
113
 
113
- throw new Error( `Unsupported color space conversion, "${ sourceColorSpace }" to "${ targetColorSpace }".` );
114
+ },
114
115
 
115
- }
116
+ fromWorkingColorSpace: function ( color, targetColorSpace ) {
116
117
 
117
- return targetFromLinear( sourceToLinear( color ) );
118
+ return this.convert( color, this._workingColorSpace, targetColorSpace );
118
119
 
119
120
  },
120
121
 
121
- fromWorkingColorSpace: function ( color, targetColorSpace ) {
122
+ toWorkingColorSpace: function ( color, sourceColorSpace ) {
122
123
 
123
- return this.convert( color, this.workingColorSpace, targetColorSpace );
124
+ return this.convert( color, sourceColorSpace, this._workingColorSpace );
124
125
 
125
126
  },
126
127
 
127
- toWorkingColorSpace: function ( color, sourceColorSpace ) {
128
+ getPrimaries: function ( colorSpace ) {
129
+
130
+ return COLOR_SPACES[ colorSpace ].primaries;
131
+
132
+ },
133
+
134
+ getTransfer: function ( colorSpace ) {
128
135
 
129
- return this.convert( color, sourceColorSpace, this.workingColorSpace );
136
+ if ( colorSpace === NoColorSpace ) return LinearTransfer;
137
+
138
+ return COLOR_SPACES[ colorSpace ].transfer;
130
139
 
131
140
  },
132
141
 
133
142
  };
143
+
144
+
145
+ export function SRGBToLinear( c ) {
146
+
147
+ return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );
148
+
149
+ }
150
+
151
+ export function LinearToSRGB( c ) {
152
+
153
+ return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;
154
+
155
+ }
@@ -28,7 +28,7 @@ const _uvC = /*@__PURE__*/ new Vector2();
28
28
 
29
29
  class Sprite extends Object3D {
30
30
 
31
- constructor( material ) {
31
+ constructor( material = new SpriteMaterial() ) {
32
32
 
33
33
  super();
34
34
 
@@ -56,7 +56,7 @@ class Sprite extends Object3D {
56
56
  }
57
57
 
58
58
  this.geometry = _geometry;
59
- this.material = ( material !== undefined ) ? material : new SpriteMaterial();
59
+ this.material = material;
60
60
 
61
61
  this.center = new Vector2( 0.5, 0.5 );
62
62
 
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @author fernandojsg / http://fernandojsg.com
3
+ * @author Takahiro https://github.com/takahirox
4
+ */
5
+
6
+ import { WebGLRenderTarget } from './WebGLRenderTarget.js';
7
+
8
+ class WebGLMultiviewRenderTarget extends WebGLRenderTarget {
9
+
10
+ constructor( width, height, numViews, options = {} ) {
11
+
12
+ super( width, height, options );
13
+
14
+ this.depthBuffer = false;
15
+ this.stencilBuffer = false;
16
+
17
+ this.numViews = numViews;
18
+
19
+ }
20
+
21
+ copy( source ) {
22
+
23
+ super.copy( source );
24
+
25
+ this.numViews = source.numViews;
26
+
27
+ return this;
28
+
29
+ }
30
+
31
+ }
32
+
33
+ WebGLMultiviewRenderTarget.prototype.isWebGLMultiviewRenderTarget = true;
34
+
35
+ export { WebGLMultiviewRenderTarget };