super-three 0.162.0 → 0.164.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 (187) hide show
  1. package/build/three.cjs +847 -1226
  2. package/build/three.module.js +846 -1225
  3. package/build/three.module.min.js +2 -2
  4. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  5. package/examples/jsm/controls/TransformControls.js +3 -3
  6. package/examples/jsm/exporters/GLTFExporter.js +66 -5
  7. package/examples/jsm/exporters/USDZExporter.js +22 -1
  8. package/examples/jsm/geometries/TextGeometry.js +10 -2
  9. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  10. package/examples/jsm/libs/draco/README.md +2 -2
  11. package/examples/jsm/libs/fflate.module.js +694 -496
  12. package/examples/jsm/lines/LineMaterial.js +0 -2
  13. package/examples/jsm/loaders/3MFLoader.js +2 -0
  14. package/examples/jsm/loaders/EXRLoader.js +351 -97
  15. package/examples/jsm/loaders/FBXLoader.js +1 -1
  16. package/examples/jsm/loaders/GLTFLoader.js +59 -0
  17. package/examples/jsm/loaders/KTX2Loader.js +3 -10
  18. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  19. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  20. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  21. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  22. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  23. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  24. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  25. package/examples/jsm/math/Octree.js +26 -20
  26. package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
  27. package/examples/jsm/nodes/Nodes.js +10 -4
  28. package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
  29. package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
  30. package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
  31. package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
  32. package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
  33. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
  35. package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
  36. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
  38. package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
  39. package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
  40. package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
  41. package/examples/jsm/nodes/code/FunctionNode.js +0 -8
  42. package/examples/jsm/nodes/core/Node.js +63 -4
  43. package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
  44. package/examples/jsm/nodes/core/NodeFrame.js +10 -10
  45. package/examples/jsm/nodes/core/NodeUtils.js +2 -2
  46. package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
  47. package/examples/jsm/nodes/core/PropertyNode.js +10 -0
  48. package/examples/jsm/nodes/core/UniformNode.js +20 -0
  49. package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
  50. package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
  51. package/examples/jsm/nodes/display/PassNode.js +17 -1
  52. package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
  53. package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
  54. package/examples/jsm/nodes/display/ViewportNode.js +4 -2
  55. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
  56. package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
  57. package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
  58. package/examples/jsm/nodes/fog/FogNode.js +13 -3
  59. package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
  60. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
  61. package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  62. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
  63. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  64. package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
  65. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +164 -10
  66. package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
  67. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
  68. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
  69. package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
  70. package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
  71. package/examples/jsm/nodes/lighting/LightsNode.js +11 -1
  72. package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
  73. package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
  74. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +10 -6
  75. package/examples/jsm/nodes/materials/Materials.js +1 -0
  76. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
  77. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
  78. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +76 -5
  79. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
  80. package/examples/jsm/nodes/materials/NodeMaterial.js +55 -43
  81. package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
  82. package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
  83. package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
  84. package/examples/jsm/nodes/shadernode/ShaderNode.js +3 -9
  85. package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
  86. package/examples/jsm/objects/QuadMesh.js +7 -23
  87. package/examples/jsm/physics/JoltPhysics.js +281 -0
  88. package/examples/jsm/physics/RapierPhysics.js +4 -4
  89. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  90. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  91. package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
  92. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  93. package/examples/jsm/postprocessing/SSAOPass.js +0 -3
  94. package/examples/jsm/renderers/common/Animation.js +3 -0
  95. package/examples/jsm/renderers/common/Background.js +8 -8
  96. package/examples/jsm/renderers/common/ClippingContext.js +1 -1
  97. package/examples/jsm/renderers/common/Info.js +11 -19
  98. package/examples/jsm/renderers/common/PostProcessing.js +12 -4
  99. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  100. package/examples/jsm/renderers/common/RenderList.js +1 -1
  101. package/examples/jsm/renderers/common/RenderObject.js +47 -5
  102. package/examples/jsm/renderers/common/RenderObjects.js +1 -1
  103. package/examples/jsm/renderers/common/Renderer.js +153 -21
  104. package/examples/jsm/renderers/common/Textures.js +1 -1
  105. package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
  106. package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
  107. package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
  108. package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
  109. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
  110. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
  111. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
  112. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
  113. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
  115. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
  116. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
  119. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  120. package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
  121. package/examples/jsm/utils/GPUStatsPanel.js +10 -45
  122. package/examples/jsm/utils/SceneUtils.js +60 -1
  123. package/examples/jsm/utils/TextureUtils.js +1 -1
  124. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  125. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  126. package/package.json +1 -1
  127. package/src/Three.js +0 -1
  128. package/src/animation/AnimationClip.js +1 -1
  129. package/src/constants.js +3 -3
  130. package/src/core/Object3D.js +10 -7
  131. package/src/core/RenderTarget.js +8 -0
  132. package/src/extras/PMREMGenerator.js +21 -11
  133. package/src/loaders/FileLoader.js +1 -1
  134. package/src/loaders/MaterialLoader.js +1 -0
  135. package/src/loaders/ObjectLoader.js +2 -0
  136. package/src/materials/Material.js +2 -0
  137. package/src/materials/MeshPhysicalMaterial.js +20 -0
  138. package/src/materials/ShaderMaterial.js +0 -4
  139. package/src/math/Spherical.js +4 -5
  140. package/src/objects/BatchedMesh.js +27 -3
  141. package/src/objects/InstancedMesh.js +10 -0
  142. package/src/objects/Line.js +66 -43
  143. package/src/renderers/WebGLRenderer.js +130 -158
  144. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  145. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  146. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  147. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  148. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  149. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  150. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
  151. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
  152. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  153. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  154. package/src/renderers/shaders/ShaderChunk.js +0 -2
  155. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  156. package/src/renderers/shaders/ShaderLib.js +2 -1
  157. package/src/renderers/shaders/UniformsUtils.js +10 -1
  158. package/src/renderers/webgl/WebGLAttributes.js +6 -33
  159. package/src/renderers/webgl/WebGLBackground.js +18 -3
  160. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  161. package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
  162. package/src/renderers/webgl/WebGLCapabilities.js +35 -13
  163. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  164. package/src/renderers/webgl/WebGLExtensions.js +4 -19
  165. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
  166. package/src/renderers/webgl/WebGLLights.js +6 -32
  167. package/src/renderers/webgl/WebGLMaterials.js +8 -3
  168. package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
  169. package/src/renderers/webgl/WebGLProgram.js +21 -52
  170. package/src/renderers/webgl/WebGLPrograms.js +24 -31
  171. package/src/renderers/webgl/WebGLRenderStates.js +13 -7
  172. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  173. package/src/renderers/webgl/WebGLState.js +15 -59
  174. package/src/renderers/webgl/WebGLTextures.js +138 -292
  175. package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
  176. package/src/renderers/webgl/WebGLUtils.js +9 -78
  177. package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
  178. package/src/renderers/webxr/WebXRManager.js +4 -6
  179. package/src/scenes/Scene.js +7 -1
  180. package/src/textures/Texture.js +11 -1
  181. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  182. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
  183. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
  184. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
  185. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
  186. package/src/renderers/WebGL1Renderer.js +0 -7
  187. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
@@ -7,10 +7,10 @@ import {
7
7
  NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter,
8
8
  RepeatWrapping, MirroredRepeatWrapping,
9
9
  RGB_ETC2_Format, RGBA_ETC2_EAC_Format,
10
- RGBAFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBColorSpace, DepthFormat, DepthStencilFormat,
10
+ RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBColorSpace, DepthFormat, DepthStencilFormat,
11
11
  RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format,
12
- RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type,
13
- NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare
12
+ RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
13
+ NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat
14
14
  } from 'three';
15
15
 
16
16
  import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping, DepthTexture } from 'three';
@@ -38,8 +38,8 @@ class WebGPUTextureUtils {
38
38
 
39
39
  this._passUtils = null;
40
40
 
41
- this.defaultTexture = null;
42
- this.defaultCubeTexture = null;
41
+ this.defaultTexture = {};
42
+ this.defaultCubeTexture = {};
43
43
 
44
44
  this.colorBuffer = null;
45
45
 
@@ -79,13 +79,15 @@ class WebGPUTextureUtils {
79
79
 
80
80
  let textureGPU;
81
81
 
82
+ const format = getFormat( texture );
83
+
82
84
  if ( texture.isCubeTexture ) {
83
85
 
84
- textureGPU = this._getDefaultCubeTextureGPU();
86
+ textureGPU = this._getDefaultCubeTextureGPU( format );
85
87
 
86
88
  } else {
87
89
 
88
- textureGPU = this._getDefaultTextureGPU();
90
+ textureGPU = this._getDefaultTextureGPU( format );
89
91
 
90
92
  }
91
93
 
@@ -111,7 +113,7 @@ class WebGPUTextureUtils {
111
113
  const { width, height, depth, levels } = options;
112
114
 
113
115
  const dimension = this._getDimension( texture );
114
- const format = texture.internalFormat || getFormat( texture, backend.device );
116
+ const format = texture.internalFormat || options.format || getFormat( texture, backend.device );
115
117
 
116
118
  let sampleCount = options.sampleCount !== undefined ? options.sampleCount : 1;
117
119
 
@@ -268,7 +270,7 @@ class WebGPUTextureUtils {
268
270
 
269
271
  }
270
272
 
271
- getDepthBuffer( depth = true, stencil = true ) {
273
+ getDepthBuffer( depth = true, stencil = false ) {
272
274
 
273
275
  const backend = this.backend;
274
276
  const { width, height } = backend.getDrawingBufferSize();
@@ -422,19 +424,19 @@ class WebGPUTextureUtils {
422
424
 
423
425
  }
424
426
 
425
- _getDefaultTextureGPU() {
427
+ _getDefaultTextureGPU( format ) {
426
428
 
427
- let defaultTexture = this.defaultTexture;
429
+ let defaultTexture = this.defaultTexture[ format ];
428
430
 
429
- if ( defaultTexture === null ) {
431
+ if ( defaultTexture === undefined ) {
430
432
 
431
433
  const texture = new Texture();
432
434
  texture.minFilter = NearestFilter;
433
435
  texture.magFilter = NearestFilter;
434
436
 
435
- this.createTexture( texture, { width: 1, height: 1 } );
437
+ this.createTexture( texture, { width: 1, height: 1, format } );
436
438
 
437
- this.defaultTexture = defaultTexture = texture;
439
+ this.defaultTexture[ format ] = defaultTexture = texture;
438
440
 
439
441
  }
440
442
 
@@ -442,11 +444,11 @@ class WebGPUTextureUtils {
442
444
 
443
445
  }
444
446
 
445
- _getDefaultCubeTextureGPU() {
447
+ _getDefaultCubeTextureGPU( format ) {
446
448
 
447
- let defaultCubeTexture = this.defaultTexture;
449
+ let defaultCubeTexture = this.defaultTexture[ format ];
448
450
 
449
- if ( defaultCubeTexture === null ) {
451
+ if ( defaultCubeTexture === undefined ) {
450
452
 
451
453
  const texture = new CubeTexture();
452
454
  texture.minFilter = NearestFilter;
@@ -454,7 +456,7 @@ class WebGPUTextureUtils {
454
456
 
455
457
  this.createTexture( texture, { width: 1, height: 1, depth: 6 } );
456
458
 
457
- this.defaultCubeTexture = defaultCubeTexture = texture;
459
+ this.defaultCubeTexture[ format ] = defaultCubeTexture = texture;
458
460
 
459
461
  }
460
462
 
@@ -930,6 +932,21 @@ export function getFormat( texture, device = null ) {
930
932
 
931
933
  break;
932
934
 
935
+ case RGBFormat:
936
+
937
+ switch ( type ) {
938
+
939
+ case UnsignedInt5999Type:
940
+ formatGPU = GPUTextureFormat.RGB9E5UFloat;
941
+ break;
942
+
943
+ default:
944
+ console.error( 'WebGPURenderer: Unsupported texture type with RGBFormat.', type );
945
+
946
+ }
947
+
948
+ break;
949
+
933
950
  case RedFormat:
934
951
 
935
952
  switch ( type ) {
@@ -1026,6 +1043,63 @@ export function getFormat( texture, device = null ) {
1026
1043
 
1027
1044
  break;
1028
1045
 
1046
+ case RedIntegerFormat:
1047
+
1048
+ switch ( type ) {
1049
+
1050
+ case IntType:
1051
+ formatGPU = GPUTextureFormat.R32Sint;
1052
+ break;
1053
+
1054
+ case UnsignedIntType:
1055
+ formatGPU = GPUTextureFormat.R32Uint;
1056
+ break;
1057
+
1058
+ default:
1059
+ console.error( 'WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type );
1060
+
1061
+ }
1062
+
1063
+ break;
1064
+
1065
+ case RGIntegerFormat:
1066
+
1067
+ switch ( type ) {
1068
+
1069
+ case IntType:
1070
+ formatGPU = GPUTextureFormat.RG32Sint;
1071
+ break;
1072
+
1073
+ case UnsignedIntType:
1074
+ formatGPU = GPUTextureFormat.RG32Uint;
1075
+ break;
1076
+
1077
+ default:
1078
+ console.error( 'WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type );
1079
+
1080
+ }
1081
+
1082
+ break;
1083
+
1084
+ case RGBAIntegerFormat:
1085
+
1086
+ switch ( type ) {
1087
+
1088
+ case IntType:
1089
+ formatGPU = GPUTextureFormat.RGBA32Sint;
1090
+ break;
1091
+
1092
+ case UnsignedIntType:
1093
+ formatGPU = GPUTextureFormat.RGBA32Uint;
1094
+ break;
1095
+
1096
+ default:
1097
+ console.error( 'WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type );
1098
+
1099
+ }
1100
+
1101
+ break;
1102
+
1029
1103
  default:
1030
1104
  console.error( 'WebGPURenderer: Unsupported texture format.', format );
1031
1105
 
@@ -218,7 +218,7 @@ class GLSLDecoder {
218
218
 
219
219
  this._currentFunction = null;
220
220
 
221
- this.addPolyfill( 'gl_FragCoord', 'vec2 gl_FragCoord = vec2( viewportCoordinate.x, viewportCoordinate.y.oneMinus() );' );
221
+ this.addPolyfill( 'gl_FragCoord', 'vec3 gl_FragCoord = vec3( viewportCoordinate.x, viewportCoordinate.y.oneMinus(), viewportCoordinate.z );' );
222
222
 
223
223
  }
224
224
 
@@ -9,7 +9,7 @@ class ShaderToyDecoder extends GLSLDecoder {
9
9
 
10
10
  this.addPolyfill( 'iTime', 'float iTime = timerGlobal();' );
11
11
  this.addPolyfill( 'iResolution', 'vec2 iResolution = viewportResolution;' );
12
- this.addPolyfill( 'fragCoord', 'vec2 fragCoord = vec2( viewportCoordinate.x, viewportResolution.y - viewportCoordinate.y );' );
12
+ this.addPolyfill( 'fragCoord', 'vec3 fragCoord = vec3( viewportCoordinate.x, viewportResolution.y - viewportCoordinate.y, viewportCoordinate.z );' );
13
13
 
14
14
  }
15
15
 
@@ -1,6 +1,5 @@
1
1
  import Stats from '../libs/stats.module.js';
2
2
 
3
- // https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/
4
3
  // https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/
5
4
  export class GPUStatsPanel extends Stats.Panel {
6
5
 
@@ -8,18 +7,11 @@ export class GPUStatsPanel extends Stats.Panel {
8
7
 
9
8
  super( name, '#f90', '#210' );
10
9
 
11
- let isWebGL2 = true;
12
- let extension = context.getExtension( 'EXT_disjoint_timer_query_webgl2' );
13
- if ( extension === null ) {
14
-
15
- isWebGL2 = false;
16
- extension = context.getExtension( 'EXT_disjoint_timer_query' );
17
-
18
- if ( extension === null ) {
10
+ const extension = context.getExtension( 'EXT_disjoint_timer_query_webgl2' );
19
11
 
20
- console.warn( 'GPUStatsPanel: disjoint_time_query extension not available.' );
12
+ if ( extension === null ) {
21
13
 
22
- }
14
+ console.warn( 'GPUStatsPanel: disjoint_time_query extension not available.' );
23
15
 
24
16
  }
25
17
 
@@ -40,40 +32,21 @@ export class GPUStatsPanel extends Stats.Panel {
40
32
  }
41
33
 
42
34
  // create the query object
43
- let query;
44
- if ( isWebGL2 ) {
45
-
46
- query = gl.createQuery();
47
- gl.beginQuery( ext.TIME_ELAPSED_EXT, query );
48
-
49
- } else {
50
-
51
- query = ext.createQueryEXT();
52
- ext.beginQueryEXT( ext.TIME_ELAPSED_EXT, query );
53
-
54
- }
35
+ const query = gl.createQuery();
36
+ gl.beginQuery( ext.TIME_ELAPSED_EXT, query );
55
37
 
56
38
  this.activeQueries ++;
57
39
 
58
40
  const checkQuery = () => {
59
41
 
60
42
  // check if the query is available and valid
61
- let available, disjoint, ns;
62
- if ( isWebGL2 ) {
63
43
 
64
- available = gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE );
65
- disjoint = gl.getParameter( ext.GPU_DISJOINT_EXT );
66
- ns = gl.getQueryParameter( query, gl.QUERY_RESULT );
67
-
68
- } else {
69
-
70
- available = ext.getQueryObjectEXT( query, ext.QUERY_RESULT_AVAILABLE_EXT );
71
- disjoint = gl.getParameter( ext.GPU_DISJOINT_EXT );
72
- ns = ext.getQueryObjectEXT( query, ext.QUERY_RESULT_EXT );
73
-
74
- }
44
+ const available = gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE );
45
+ const disjoint = gl.getParameter( ext.GPU_DISJOINT_EXT );
46
+ const ns = gl.getQueryParameter( query, gl.QUERY_RESULT );
75
47
 
76
48
  const ms = ns * 1e-6;
49
+
77
50
  if ( available ) {
78
51
 
79
52
  // update the display if it is valid
@@ -111,15 +84,7 @@ export class GPUStatsPanel extends Stats.Panel {
111
84
 
112
85
  }
113
86
 
114
- if ( isWebGL2 ) {
115
-
116
- gl.endQuery( ext.TIME_ELAPSED_EXT );
117
-
118
- } else {
119
-
120
- ext.endQueryEXT( ext.TIME_ELAPSED_EXT );
121
-
122
- }
87
+ gl.endQuery( ext.TIME_ELAPSED_EXT );
123
88
 
124
89
  };
125
90
 
@@ -245,10 +245,69 @@ function sortInstancedMesh( mesh, compareFn ) {
245
245
 
246
246
  }
247
247
 
248
+ /**
249
+ * @param {Object3D} object Object to traverse.
250
+ * @yields {Object3D} Objects that passed the filter condition.
251
+ */
252
+ function* traverseGenerator( object ) {
253
+
254
+ yield object;
255
+
256
+ const children = object.children;
257
+
258
+ for ( let i = 0, l = children.length; i < l; i ++ ) {
259
+
260
+ yield* traverseGenerator( children[ i ] );
261
+
262
+ }
263
+
264
+ }
265
+
266
+ /**
267
+ * @param {Object3D} object Object to traverse.
268
+ * @yields {Object3D} Objects that passed the filter condition.
269
+ */
270
+ function* traverseVisibleGenerator( object ) {
271
+
272
+ if ( object.visible === false ) return;
273
+
274
+ yield object;
275
+
276
+ const children = object.children;
277
+
278
+ for ( let i = 0, l = children.length; i < l; i ++ ) {
279
+
280
+ yield* traverseVisibleGenerator( children[ i ] );
281
+
282
+ }
283
+
284
+ }
285
+
286
+ /**
287
+ * @param {Object3D} object Object to traverse.
288
+ * @yields {Object3D} Objects that passed the filter condition.
289
+ */
290
+ function* traverseAncestorsGenerator( object ) {
291
+
292
+ const parent = object.parent;
293
+
294
+ if ( parent !== null ) {
295
+
296
+ yield parent;
297
+
298
+ yield* traverseAncestorsGenerator( parent );
299
+
300
+ }
301
+
302
+ }
303
+
248
304
  export {
249
305
  createMeshesFromInstancedMesh,
250
306
  createMeshesFromMultiMaterialMesh,
251
307
  createMultiMaterialObject,
252
308
  reduceVertices,
253
- sortInstancedMesh
309
+ sortInstancedMesh,
310
+ traverseGenerator,
311
+ traverseVisibleGenerator,
312
+ traverseAncestorsGenerator
254
313
  };
@@ -48,7 +48,7 @@ export function decompress( texture, maxTextureSize = Infinity, renderer = null
48
48
  if ( ! fullscreenQuad ) {
49
49
 
50
50
  fullscreenQuad = new Mesh( fullscreenQuadGeometry, fullscreenQuadMaterial );
51
- fullscreenQuad.frustrumCulled = false;
51
+ fullscreenQuad.frustumCulled = false;
52
52
 
53
53
  }
54
54
 
@@ -6,7 +6,7 @@ const POINTING_JOINT = 'index-finger-tip';
6
6
 
7
7
  class OculusHandModel extends Object3D {
8
8
 
9
- constructor( controller, loader = null ) {
9
+ constructor( controller, loader = null, onLoad = null ) {
10
10
 
11
11
  super();
12
12
 
@@ -14,6 +14,7 @@ class OculusHandModel extends Object3D {
14
14
  this.motionController = null;
15
15
  this.envMap = null;
16
16
  this.loader = loader;
17
+ this.onLoad = onLoad;
17
18
 
18
19
  this.mesh = null;
19
20
 
@@ -25,7 +26,7 @@ class OculusHandModel extends Object3D {
25
26
 
26
27
  this.xrInputSource = xrInputSource;
27
28
 
28
- this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader );
29
+ this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader, this.onLoad );
29
30
 
30
31
  }
31
32
 
@@ -40,9 +40,11 @@ class XRHandModel extends Object3D {
40
40
 
41
41
  class XRHandModelFactory {
42
42
 
43
- constructor() {
43
+ constructor( gltfLoader = null, onLoad = null ) {
44
44
 
45
+ this.gltfLoader = gltfLoader;
45
46
  this.path = null;
47
+ this.onLoad = onLoad;
46
48
 
47
49
  }
48
50
 
@@ -77,7 +79,7 @@ class XRHandModelFactory {
77
79
 
78
80
  } else if ( profile === 'mesh' ) {
79
81
 
80
- handModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness );
82
+ handModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness, this.gltfLoader, this.onLoad );
81
83
 
82
84
  }
83
85
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-three",
3
- "version": "0.162.0",
3
+ "version": "0.164.0",
4
4
  "description": "JavaScript 3D library",
5
5
  "type": "module",
6
6
  "main": "./build/three.cjs",
package/src/Three.js CHANGED
@@ -5,7 +5,6 @@ export { WebGL3DRenderTarget } from './renderers/WebGL3DRenderTarget.js';
5
5
  export { WebGLCubeRenderTarget } from './renderers/WebGLCubeRenderTarget.js';
6
6
  export { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js';
7
7
  export { WebGLRenderer } from './renderers/WebGLRenderer.js';
8
- export { WebGL1Renderer } from './renderers/WebGL1Renderer.js';
9
8
  export { ShaderLib } from './renderers/shaders/ShaderLib.js';
10
9
  export { UniformsLib } from './renderers/shaders/UniformsLib.js';
11
10
  export { UniformsUtils } from './renderers/shaders/UniformsUtils.js';
@@ -11,7 +11,7 @@ import { NormalAnimationBlendMode } from '../constants.js';
11
11
 
12
12
  class AnimationClip {
13
13
 
14
- constructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {
14
+ constructor( name = '', duration = - 1, tracks = [], blendMode = NormalAnimationBlendMode ) {
15
15
 
16
16
  this.name = name;
17
17
  this.tracks = tracks;
package/src/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- export const REVISION = '162';
1
+ export const REVISION = '164';
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 };
@@ -91,7 +91,9 @@ export const HalfFloatType = 1016;
91
91
  export const UnsignedShort4444Type = 1017;
92
92
  export const UnsignedShort5551Type = 1018;
93
93
  export const UnsignedInt248Type = 1020;
94
+ export const UnsignedInt5999Type = 35902;
94
95
  export const AlphaFormat = 1021;
96
+ export const RGBFormat = 1022;
95
97
  export const RGBAFormat = 1023;
96
98
  export const LuminanceFormat = 1024;
97
99
  export const LuminanceAlphaFormat = 1025;
@@ -207,7 +209,5 @@ export const StreamCopyUsage = 35042;
207
209
  export const GLSL1 = '100';
208
210
  export const GLSL3 = '300 es';
209
211
 
210
- export const _SRGBAFormat = 1035; // fallback for WebGL 1
211
-
212
212
  export const WebGLCoordinateSystem = 2000;
213
213
  export const WebGPUCoordinateSystem = 2001;
@@ -333,12 +333,7 @@ class Object3D extends EventDispatcher {
333
333
 
334
334
  if ( object && object.isObject3D ) {
335
335
 
336
- if ( object.parent !== null ) {
337
-
338
- object.parent.remove( object );
339
-
340
- }
341
-
336
+ object.removeFromParent();
342
337
  object.parent = this;
343
338
  this.children.push( object );
344
339
 
@@ -431,10 +426,18 @@ class Object3D extends EventDispatcher {
431
426
 
432
427
  object.applyMatrix4( _m1 );
433
428
 
434
- this.add( object );
429
+ object.removeFromParent();
430
+ object.parent = this;
431
+ this.children.push( object );
435
432
 
436
433
  object.updateWorldMatrix( false, true );
437
434
 
435
+ object.dispatchEvent( _addedEvent );
436
+
437
+ _childaddedEvent.child = object;
438
+ this.dispatchEvent( _childaddedEvent );
439
+ _childaddedEvent.child = null;
440
+
438
441
  return this;
439
442
 
440
443
  }
@@ -34,6 +34,8 @@ class RenderTarget extends EventDispatcher {
34
34
  minFilter: LinearFilter,
35
35
  depthBuffer: true,
36
36
  stencilBuffer: false,
37
+ resolveDepthBuffer: true,
38
+ resolveStencilBuffer: true,
37
39
  depthTexture: null,
38
40
  samples: 0,
39
41
  count: 1
@@ -58,6 +60,9 @@ class RenderTarget extends EventDispatcher {
58
60
  this.depthBuffer = options.depthBuffer;
59
61
  this.stencilBuffer = options.stencilBuffer;
60
62
 
63
+ this.resolveDepthBuffer = options.resolveDepthBuffer;
64
+ this.resolveStencilBuffer = options.resolveStencilBuffer;
65
+
61
66
  this.depthTexture = options.depthTexture;
62
67
 
63
68
  this.samples = options.samples;
@@ -135,6 +140,9 @@ class RenderTarget extends EventDispatcher {
135
140
  this.depthBuffer = source.depthBuffer;
136
141
  this.stencilBuffer = source.stencilBuffer;
137
142
 
143
+ this.resolveDepthBuffer = source.resolveDepthBuffer;
144
+ this.resolveStencilBuffer = source.resolveStencilBuffer;
145
+
138
146
  if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();
139
147
 
140
148
  this.samples = source.samples;
@@ -40,6 +40,7 @@ const _clearColor = /*@__PURE__*/ new Color();
40
40
  let _oldTarget = null;
41
41
  let _oldActiveCubeFace = 0;
42
42
  let _oldActiveMipmapLevel = 0;
43
+ let _oldXrEnabled = false;
43
44
 
44
45
  // Golden Ratio
45
46
  const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
@@ -48,16 +49,16 @@ const INV_PHI = 1 / PHI;
48
49
  // Vertices of a dodecahedron (except the opposites, which represent the
49
50
  // same axis), used as axis directions evenly spread on a sphere.
50
51
  const _axisDirections = [
51
- /*@__PURE__*/ new Vector3( 1, 1, 1 ),
52
- /*@__PURE__*/ new Vector3( - 1, 1, 1 ),
53
- /*@__PURE__*/ new Vector3( 1, 1, - 1 ),
54
- /*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
55
- /*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
56
- /*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
57
- /*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
58
- /*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
52
+ /*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),
59
53
  /*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
60
- /*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];
54
+ /*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
55
+ /*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
56
+ /*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
57
+ /*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
58
+ /*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
59
+ /*@__PURE__*/ new Vector3( 1, 1, - 1 ),
60
+ /*@__PURE__*/ new Vector3( - 1, 1, 1 ),
61
+ /*@__PURE__*/ new Vector3( 1, 1, 1 ) ];
61
62
 
62
63
  /**
63
64
  * This class generates a Prefiltered, Mipmapped Radiance Environment Map
@@ -107,6 +108,9 @@ class PMREMGenerator {
107
108
  _oldTarget = this._renderer.getRenderTarget();
108
109
  _oldActiveCubeFace = this._renderer.getActiveCubeFace();
109
110
  _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
111
+ _oldXrEnabled = this._renderer.xr.enabled;
112
+
113
+ this._renderer.xr.enabled = false;
110
114
 
111
115
  this._setSize( 256 );
112
116
 
@@ -222,6 +226,8 @@ class PMREMGenerator {
222
226
  _cleanup( outputTarget ) {
223
227
 
224
228
  this._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );
229
+ this._renderer.xr.enabled = _oldXrEnabled;
230
+
225
231
  outputTarget.scissorTest = false;
226
232
  _setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
227
233
 
@@ -242,6 +248,9 @@ class PMREMGenerator {
242
248
  _oldTarget = this._renderer.getRenderTarget();
243
249
  _oldActiveCubeFace = this._renderer.getActiveCubeFace();
244
250
  _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
251
+ _oldXrEnabled = this._renderer.xr.enabled;
252
+
253
+ this._renderer.xr.enabled = false;
245
254
 
246
255
  const cubeUVRenderTarget = renderTarget || this._allocateTargets();
247
256
  this._textureToCubeUV( texture, cubeUVRenderTarget );
@@ -435,12 +444,13 @@ class PMREMGenerator {
435
444
  const renderer = this._renderer;
436
445
  const autoClear = renderer.autoClear;
437
446
  renderer.autoClear = false;
447
+ const n = this._lodPlanes.length;
438
448
 
439
- for ( let i = 1; i < this._lodPlanes.length; i ++ ) {
449
+ for ( let i = 1; i < n; i ++ ) {
440
450
 
441
451
  const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );
442
452
 
443
- const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];
453
+ const poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];
444
454
 
445
455
  this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );
446
456
 
@@ -112,7 +112,7 @@ class FileLoader extends Loader {
112
112
 
113
113
  // Nginx needs X-File-Size check
114
114
  // https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content
115
- const contentLength = response.headers.get( 'Content-Length' ) || response.headers.get( 'X-File-Size' );
115
+ const contentLength = response.headers.get( 'X-File-Size' ) || response.headers.get( 'Content-Length' );
116
116
  const total = contentLength ? parseInt( contentLength ) : 0;
117
117
  const lengthComputable = total !== 0;
118
118
  let loaded = 0;
@@ -103,6 +103,7 @@ class MaterialLoader extends Loader {
103
103
  if ( json.shininess !== undefined ) material.shininess = json.shininess;
104
104
  if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;
105
105
  if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;
106
+ if ( json.dispersion !== undefined ) material.dispersion = json.dispersion;
106
107
  if ( json.iridescence !== undefined ) material.iridescence = json.iridescence;
107
108
  if ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;
108
109
  if ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;
@@ -813,6 +813,8 @@ class ObjectLoader extends Loader {
813
813
  if ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;
814
814
  if ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;
815
815
  if ( data.backgroundRotation !== undefined ) object.backgroundRotation.fromArray( data.backgroundRotation );
816
+
817
+ if ( data.environmentIntensity !== undefined ) object.environmentIntensity = data.environmentIntensity;
816
818
  if ( data.environmentRotation !== undefined ) object.environmentRotation.fromArray( data.environmentRotation );
817
819
 
818
820
  break;
@@ -218,6 +218,8 @@ class Material extends EventDispatcher {
218
218
 
219
219
  }
220
220
 
221
+ if ( this.dispersion !== undefined ) data.dispersion = this.dispersion;
222
+
221
223
  if ( this.iridescence !== undefined ) data.iridescence = this.iridescence;
222
224
  if ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;
223
225
  if ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;