super-three 0.155.0 → 0.157.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 (268) hide show
  1. package/build/three.cjs +361 -324
  2. package/build/three.js +361 -324
  3. package/build/three.min.js +2 -2
  4. package/build/three.module.js +354 -323
  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/controls/OrbitControls.js +13 -5
  9. package/examples/jsm/csm/CSMShader.js +59 -21
  10. package/examples/jsm/exporters/EXRExporter.js +102 -24
  11. package/examples/jsm/exporters/GLTFExporter.js +1 -1
  12. package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
  14. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  15. package/examples/jsm/libs/tween.module.js +790 -735
  16. package/examples/jsm/libs/utif.module.js +1644 -1558
  17. package/examples/jsm/lights/LightProbeGenerator.js +37 -3
  18. package/examples/jsm/lines/LineMaterial.js +90 -156
  19. package/examples/jsm/loaders/3DMLoader.js +378 -104
  20. package/examples/jsm/loaders/DDSLoader.js +46 -3
  21. package/examples/jsm/loaders/EXRLoader.js +4 -4
  22. package/examples/jsm/loaders/FBXLoader.js +2 -0
  23. package/examples/jsm/loaders/GLTFLoader.js +18 -8
  24. package/examples/jsm/loaders/KTX2Loader.js +126 -77
  25. package/examples/jsm/loaders/LDrawLoader.js +22 -16
  26. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  27. package/examples/jsm/loaders/MMDLoader.js +10 -7
  28. package/examples/jsm/loaders/RGBELoader.js +48 -66
  29. package/examples/jsm/loaders/STLLoader.js +7 -0
  30. package/examples/jsm/loaders/USDZLoader.js +215 -12
  31. package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
  32. package/examples/jsm/nodes/Nodes.js +8 -1
  33. package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +30 -4
  35. package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
  36. package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/CubeTextureNode.js +19 -4
  38. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +4 -5
  39. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
  40. package/examples/jsm/nodes/accessors/LineMaterialNode.js +29 -0
  41. package/examples/jsm/nodes/accessors/MaterialNode.js +23 -13
  42. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +12 -9
  43. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  44. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
  45. package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
  46. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  47. package/examples/jsm/nodes/accessors/Object3DNode.js +3 -3
  48. package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
  49. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  50. package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
  51. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
  52. package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
  54. package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
  55. package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
  56. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
  57. package/examples/jsm/nodes/accessors/TextureNode.js +18 -8
  58. package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
  60. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  61. package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
  62. package/examples/jsm/nodes/code/CodeNode.js +1 -1
  63. package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
  64. package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
  65. package/examples/jsm/nodes/code/FunctionNode.js +18 -7
  66. package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
  67. package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
  68. package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
  69. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  70. package/examples/jsm/nodes/core/BypassNode.js +1 -1
  71. package/examples/jsm/nodes/core/CacheNode.js +1 -1
  72. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  73. package/examples/jsm/nodes/core/ContextNode.js +2 -2
  74. package/examples/jsm/nodes/core/IndexNode.js +1 -1
  75. package/examples/jsm/nodes/core/InputNode.js +1 -1
  76. package/examples/jsm/nodes/core/Node.js +45 -14
  77. package/examples/jsm/nodes/core/NodeBuilder.js +83 -15
  78. package/examples/jsm/nodes/core/NodeFrame.js +37 -14
  79. package/examples/jsm/nodes/core/NodeUniform.js +1 -1
  80. package/examples/jsm/nodes/core/OutputStructNode.js +62 -0
  81. package/examples/jsm/nodes/core/PropertyNode.js +3 -1
  82. package/examples/jsm/nodes/core/StackNode.js +5 -5
  83. package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
  84. package/examples/jsm/nodes/core/TempNode.js +1 -1
  85. package/examples/jsm/nodes/core/UniformNode.js +3 -1
  86. package/examples/jsm/nodes/core/VarNode.js +1 -1
  87. package/examples/jsm/nodes/core/VaryingNode.js +1 -1
  88. package/examples/jsm/nodes/core/constants.js +1 -1
  89. package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
  90. package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
  91. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
  92. package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
  93. package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
  94. package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
  95. package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
  96. package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
  97. package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
  98. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
  99. package/examples/jsm/nodes/display/ViewportNode.js +21 -7
  100. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
  101. package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
  102. package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
  103. package/examples/jsm/nodes/fog/FogNode.js +2 -2
  104. package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
  105. package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
  106. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  107. package/examples/jsm/nodes/lighting/AONode.js +2 -2
  108. package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
  110. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
  111. package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
  112. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
  113. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
  114. package/examples/jsm/nodes/lighting/LightNode.js +2 -2
  115. package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
  116. package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
  117. package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
  118. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  119. package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
  120. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
  121. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
  122. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
  123. package/examples/jsm/nodes/materials/Materials.js +2 -0
  124. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
  125. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
  126. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
  127. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  128. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  129. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
  130. package/examples/jsm/nodes/materials/NodeMaterial.js +39 -29
  131. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
  132. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
  133. package/examples/jsm/nodes/math/CondNode.js +1 -1
  134. package/examples/jsm/nodes/math/HashNode.js +34 -0
  135. package/examples/jsm/nodes/math/MathNode.js +2 -2
  136. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  137. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  138. package/examples/jsm/nodes/shadernode/ShaderNode.js +85 -28
  139. package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
  140. package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
  141. package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
  142. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
  143. package/examples/jsm/nodes/utils/JoinNode.js +1 -1
  144. package/examples/jsm/nodes/utils/LoopNode.js +11 -11
  145. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
  146. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  147. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  148. package/examples/jsm/nodes/utils/PackingNode.js +2 -2
  149. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  150. package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
  151. package/examples/jsm/nodes/utils/SetNode.js +62 -0
  152. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
  153. package/examples/jsm/nodes/utils/SplitNode.js +2 -2
  154. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
  155. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  156. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
  157. package/examples/jsm/objects/Sky.js +1 -3
  158. package/examples/jsm/postprocessing/FilmPass.js +3 -5
  159. package/examples/jsm/postprocessing/OutputPass.js +3 -2
  160. package/examples/jsm/postprocessing/RenderPass.js +30 -12
  161. package/examples/jsm/postprocessing/SAOPass.js +23 -98
  162. package/examples/jsm/postprocessing/SSAOPass.js +10 -30
  163. package/examples/jsm/renderers/common/Backend.js +11 -8
  164. package/examples/jsm/renderers/common/Background.js +2 -2
  165. package/examples/jsm/renderers/common/Binding.js +6 -0
  166. package/examples/jsm/renderers/common/Bindings.js +4 -5
  167. package/examples/jsm/renderers/common/Pipelines.js +9 -9
  168. package/examples/jsm/renderers/common/RenderContext.js +3 -0
  169. package/examples/jsm/renderers/common/RenderContexts.js +26 -1
  170. package/examples/jsm/renderers/common/RenderList.js +12 -4
  171. package/examples/jsm/renderers/common/RenderObject.js +43 -15
  172. package/examples/jsm/renderers/common/RenderObjects.js +8 -14
  173. package/examples/jsm/renderers/common/Renderer.js +52 -16
  174. package/examples/jsm/renderers/common/SampledTexture.js +6 -3
  175. package/examples/jsm/renderers/common/Sampler.js +1 -1
  176. package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
  177. package/examples/jsm/renderers/common/StorageTexture.js +19 -0
  178. package/examples/jsm/renderers/common/Textures.js +166 -21
  179. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
  180. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +21 -11
  181. package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -7
  182. package/examples/jsm/renderers/common/nodes/Nodes.js +79 -18
  183. package/examples/jsm/renderers/webgl/WebGLBackend.js +702 -0
  184. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +207 -20
  185. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
  186. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
  187. package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
  188. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +212 -0
  189. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
  190. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
  191. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +4 -4
  192. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +14 -2
  193. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +282 -43
  194. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
  195. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +93 -60
  196. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
  197. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +15 -2
  198. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -14
  199. package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
  200. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +205 -284
  201. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +6 -5
  202. package/examples/jsm/shaders/FilmShader.js +11 -54
  203. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  204. package/examples/jsm/shaders/MMDToonShader.js +4 -4
  205. package/examples/jsm/shaders/OutputShader.js +2 -2
  206. package/examples/jsm/shaders/SAOShader.js +0 -13
  207. package/examples/jsm/shaders/SSAOShader.js +33 -26
  208. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
  209. package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
  210. package/package.json +1 -1
  211. package/src/Three.js +1 -2
  212. package/src/animation/AnimationUtils.js +3 -20
  213. package/src/animation/KeyframeTrack.js +8 -8
  214. package/src/audio/Audio.js +6 -0
  215. package/src/cameras/Camera.js +1 -5
  216. package/src/cameras/CubeCamera.js +14 -8
  217. package/src/constants.js +10 -1
  218. package/src/core/Object3D.js +1 -14
  219. package/src/core/RenderTarget.js +16 -7
  220. package/src/core/UniformsGroup.js +2 -2
  221. package/src/extras/core/CurvePath.js +4 -1
  222. package/src/loaders/DataTextureLoader.js +0 -2
  223. package/src/loaders/MaterialLoader.js +1 -1
  224. package/src/loaders/ObjectLoader.js +6 -0
  225. package/src/materials/Material.js +10 -10
  226. package/src/math/Color.js +1 -5
  227. package/src/math/ColorManagement.js +82 -60
  228. package/src/math/Vector2.js +2 -2
  229. package/src/math/Vector3.js +3 -3
  230. package/src/math/Vector4.js +4 -4
  231. package/src/objects/Line.js +1 -1
  232. package/src/objects/Mesh.js +1 -1
  233. package/src/objects/Points.js +1 -1
  234. package/src/objects/Sprite.js +2 -2
  235. package/src/renderers/WebGLRenderer.js +42 -51
  236. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  237. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
  238. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
  239. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
  240. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
  241. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
  242. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
  243. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
  244. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
  245. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
  246. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
  247. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
  248. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
  249. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
  250. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
  251. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
  252. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
  253. package/src/renderers/shaders/UniformsUtils.js +2 -2
  254. package/src/renderers/webgl/WebGLBackground.js +9 -17
  255. package/src/renderers/webgl/WebGLLights.js +14 -3
  256. package/src/renderers/webgl/WebGLProgram.js +36 -5
  257. package/src/renderers/webgl/WebGLPrograms.js +9 -1
  258. package/src/renderers/webgl/WebGLTextures.js +19 -8
  259. package/src/renderers/webgl/WebGLUtils.js +25 -20
  260. package/src/scenes/Fog.js +1 -0
  261. package/src/scenes/FogExp2.js +1 -0
  262. package/src/textures/Source.js +2 -2
  263. package/src/textures/Texture.js +2 -2
  264. package/src/utils.js +9 -1
  265. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
  266. package/src/lights/AmbientLightProbe.js +0 -21
  267. package/src/lights/HemisphereLightProbe.js +0 -30
  268. /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
@@ -4,7 +4,9 @@ import {
4
4
  RGBA_S3TC_DXT3_Format,
5
5
  RGBA_S3TC_DXT5_Format,
6
6
  RGB_ETC1_Format,
7
- RGB_S3TC_DXT1_Format
7
+ RGB_S3TC_DXT1_Format,
8
+ RGB_BPTC_SIGNED_Format,
9
+ RGB_BPTC_UNSIGNED_Format
8
10
  } from 'three';
9
11
 
10
12
  class DDSLoader extends CompressedTextureLoader {
@@ -56,6 +58,9 @@ class DDSLoader extends CompressedTextureLoader {
56
58
  // const DDPF_YUV = 0x200;
57
59
  // const DDPF_LUMINANCE = 0x20000;
58
60
 
61
+ const DXGI_FORMAT_BC6H_UF16 = 95;
62
+ const DXGI_FORMAT_BC6H_SF16 = 96;
63
+
59
64
  function fourCCToInt32( value ) {
60
65
 
61
66
  return value.charCodeAt( 0 ) +
@@ -108,8 +113,10 @@ class DDSLoader extends CompressedTextureLoader {
108
113
  const FOURCC_DXT3 = fourCCToInt32( 'DXT3' );
109
114
  const FOURCC_DXT5 = fourCCToInt32( 'DXT5' );
110
115
  const FOURCC_ETC1 = fourCCToInt32( 'ETC1' );
116
+ const FOURCC_DX10 = fourCCToInt32( 'DX10' );
111
117
 
112
118
  const headerLengthInt = 31; // The header length in 32 bit ints
119
+ const extendedHeaderLengthInt = 5; // The extended header length in 32 bit ints
113
120
 
114
121
  // Offsets into the header array
115
122
 
@@ -135,6 +142,9 @@ class DDSLoader extends CompressedTextureLoader {
135
142
  // const off_caps3 = 29;
136
143
  // const off_caps4 = 30;
137
144
 
145
+ // If fourCC = DX10, the extended header starts after 32
146
+ const off_dxgiFormat = 0;
147
+
138
148
  // Parse header
139
149
 
140
150
  const header = new Int32Array( buffer, 0, headerLengthInt );
@@ -152,6 +162,8 @@ class DDSLoader extends CompressedTextureLoader {
152
162
 
153
163
  let isRGBAUncompressed = false;
154
164
 
165
+ let dataOffset = header[ off_size ] + 4;
166
+
155
167
  switch ( fourCC ) {
156
168
 
157
169
  case FOURCC_DXT1:
@@ -178,6 +190,39 @@ class DDSLoader extends CompressedTextureLoader {
178
190
  dds.format = RGB_ETC1_Format;
179
191
  break;
180
192
 
193
+ case FOURCC_DX10:
194
+
195
+ dataOffset += extendedHeaderLengthInt * 4;
196
+ const extendedHeader = new Int32Array( buffer, ( headerLengthInt + 1 ) * 4, extendedHeaderLengthInt );
197
+ const dxgiFormat = extendedHeader[ off_dxgiFormat ];
198
+ switch ( dxgiFormat ) {
199
+
200
+ case DXGI_FORMAT_BC6H_SF16: {
201
+
202
+ blockBytes = 16;
203
+ dds.format = RGB_BPTC_SIGNED_Format;
204
+ break;
205
+
206
+ }
207
+
208
+ case DXGI_FORMAT_BC6H_UF16: {
209
+
210
+ blockBytes = 16;
211
+ dds.format = RGB_BPTC_UNSIGNED_Format;
212
+ break;
213
+
214
+ }
215
+
216
+ default: {
217
+
218
+ console.error( 'THREE.DDSLoader.parse: Unsupported DXGI_FORMAT code ', dxgiFormat );
219
+ return dds;
220
+
221
+ }
222
+
223
+ }
224
+ break;
225
+
181
226
  default:
182
227
 
183
228
  if ( header[ off_RGBBitCount ] === 32
@@ -226,8 +271,6 @@ class DDSLoader extends CompressedTextureLoader {
226
271
  dds.width = header[ off_width ];
227
272
  dds.height = header[ off_height ];
228
273
 
229
- let dataOffset = header[ off_size ] + 4;
230
-
231
274
  // Extract mipmaps buffers
232
275
 
233
276
  const faces = dds.isCubemap ? 6 : 1;
@@ -1996,7 +1996,7 @@ class EXRLoader extends DataTextureLoader {
1996
1996
 
1997
1997
  if ( dataView.getUint32( 0, true ) != 20000630 ) { // magic
1998
1998
 
1999
- throw new Error( 'THREE.EXRLoader: provided file doesn\'t appear to be in OpenEXR format.' );
1999
+ throw new Error( 'THREE.EXRLoader: Provided file doesn\'t appear to be in OpenEXR format.' );
2000
2000
 
2001
2001
  }
2002
2002
 
@@ -2033,7 +2033,7 @@ class EXRLoader extends DataTextureLoader {
2033
2033
 
2034
2034
  if ( attributeValue === undefined ) {
2035
2035
 
2036
- console.warn( `EXRLoader.parse: skipped unknown header attribute type \'${attributeType}\'.` );
2036
+ console.warn( `THREE.EXRLoader: Skipped unknown header attribute type \'${attributeType}\'.` );
2037
2037
 
2038
2038
  } else {
2039
2039
 
@@ -2047,8 +2047,8 @@ class EXRLoader extends DataTextureLoader {
2047
2047
 
2048
2048
  if ( ( spec & ~ 0x04 ) != 0 ) { // unsupported tiled, deep-image, multi-part
2049
2049
 
2050
- console.error( 'EXRHeader:', EXRHeader );
2051
- throw new Error( 'THREE.EXRLoader: provided file is currently unsupported.' );
2050
+ console.error( 'THREE.EXRHeader:', EXRHeader );
2051
+ throw new Error( 'THREE.EXRLoader: Provided file is currently unsupported.' );
2052
2052
 
2053
2053
  }
2054
2054
 
@@ -961,6 +961,7 @@ class FBXTreeParser {
961
961
  }
962
962
 
963
963
  model.name = node.attrName ? PropertyBinding.sanitizeNodeName( node.attrName ) : '';
964
+ model.userData.originalName = node.attrName;
964
965
 
965
966
  model.ID = id;
966
967
 
@@ -997,6 +998,7 @@ class FBXTreeParser {
997
998
  // set name and id here - otherwise in cases where "subBone" is created it will not have a name / id
998
999
 
999
1000
  bone.name = name ? PropertyBinding.sanitizeNodeName( name ) : '';
1001
+ bone.userData.originalName = name;
1000
1002
  bone.ID = id;
1001
1003
 
1002
1004
  skeleton.bones[ i ] = bone;
@@ -6,6 +6,7 @@ import {
6
6
  BufferGeometry,
7
7
  ClampToEdgeWrapping,
8
8
  Color,
9
+ ColorManagement,
9
10
  DirectionalLight,
10
11
  DoubleSide,
11
12
  FileLoader,
@@ -25,6 +26,7 @@ import {
25
26
  LinearFilter,
26
27
  LinearMipmapLinearFilter,
27
28
  LinearMipmapNearestFilter,
29
+ LinearSRGBColorSpace,
28
30
  Loader,
29
31
  LoaderUtils,
30
32
  Material,
@@ -545,7 +547,7 @@ class GLTFLightsExtension {
545
547
 
546
548
  const color = new Color( 0xffffff );
547
549
 
548
- if ( lightDef.color !== undefined ) color.fromArray( lightDef.color );
550
+ if ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );
549
551
 
550
552
  const range = lightDef.range !== undefined ? lightDef.range : 0;
551
553
 
@@ -663,7 +665,7 @@ class GLTFMaterialsUnlitExtension {
663
665
 
664
666
  const array = metallicRoughness.baseColorFactor;
665
667
 
666
- materialParams.color.fromArray( array );
668
+ materialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );
667
669
  materialParams.opacity = array[ 3 ];
668
670
 
669
671
  }
@@ -939,7 +941,8 @@ class GLTFMaterialsSheenExtension {
939
941
 
940
942
  if ( extension.sheenColorFactor !== undefined ) {
941
943
 
942
- materialParams.sheenColor.fromArray( extension.sheenColorFactor );
944
+ const colorFactor = extension.sheenColorFactor;
945
+ materialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor [ 2 ], LinearSRGBColorSpace );
943
946
 
944
947
  }
945
948
 
@@ -1077,7 +1080,7 @@ class GLTFMaterialsVolumeExtension {
1077
1080
  materialParams.attenuationDistance = extension.attenuationDistance || Infinity;
1078
1081
 
1079
1082
  const colorArray = extension.attenuationColor || [ 1, 1, 1 ];
1080
- materialParams.attenuationColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
1083
+ materialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );
1081
1084
 
1082
1085
  return Promise.all( pending );
1083
1086
 
@@ -1180,7 +1183,7 @@ class GLTFMaterialsSpecularExtension {
1180
1183
  }
1181
1184
 
1182
1185
  const colorArray = extension.specularColorFactor || [ 1, 1, 1 ];
1183
- materialParams.specularColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
1186
+ materialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );
1184
1187
 
1185
1188
  if ( extension.specularColorTexture !== undefined ) {
1186
1189
 
@@ -2541,7 +2544,7 @@ class GLTFParser {
2541
2544
 
2542
2545
  assignExtrasToUserData( result, json );
2543
2546
 
2544
- Promise.all( parser._invokeAll( function ( ext ) {
2547
+ return Promise.all( parser._invokeAll( function ( ext ) {
2545
2548
 
2546
2549
  return ext.afterRoot && ext.afterRoot( result );
2547
2550
 
@@ -3386,7 +3389,7 @@ class GLTFParser {
3386
3389
 
3387
3390
  const array = metallicRoughness.baseColorFactor;
3388
3391
 
3389
- materialParams.color.fromArray( array );
3392
+ materialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );
3390
3393
  materialParams.opacity = array[ 3 ];
3391
3394
 
3392
3395
  }
@@ -3478,7 +3481,8 @@ class GLTFParser {
3478
3481
 
3479
3482
  if ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {
3480
3483
 
3481
- materialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );
3484
+ const emissiveFactor = materialDef.emissiveFactor;
3485
+ materialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );
3482
3486
 
3483
3487
  }
3484
3488
 
@@ -4559,6 +4563,12 @@ function addPrimitiveAttributes( geometry, primitiveDef, parser ) {
4559
4563
 
4560
4564
  }
4561
4565
 
4566
+ if ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {
4567
+
4568
+ console.warn( `THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ColorManagement.workingColorSpace}" not supported.` );
4569
+
4570
+ }
4571
+
4562
4572
  assignExtrasToUserData( geometry, primitiveDef );
4563
4573
 
4564
4574
  computeBounds( geometry, primitiveDef, parser );
@@ -17,12 +17,15 @@ import {
17
17
  CompressedCubeTexture,
18
18
  Data3DTexture,
19
19
  DataTexture,
20
+ DisplayP3ColorSpace,
20
21
  FileLoader,
21
22
  FloatType,
22
23
  HalfFloatType,
23
24
  NoColorSpace,
24
25
  LinearFilter,
25
26
  LinearMipmapLinearFilter,
27
+ LinearDisplayP3ColorSpace,
28
+ LinearSRGBColorSpace,
26
29
  Loader,
27
30
  RedFormat,
28
31
  RGB_ETC1_Format,
@@ -30,6 +33,7 @@ import {
30
33
  RGB_PVRTC_4BPPV1_Format,
31
34
  RGB_S3TC_DXT1_Format,
32
35
  RGBA_ASTC_4x4_Format,
36
+ RGBA_ASTC_6x6_Format,
33
37
  RGBA_BPTC_Format,
34
38
  RGBA_ETC2_EAC_Format,
35
39
  RGBA_PVRTC_4BPPV1_Format,
@@ -59,6 +63,11 @@ import {
59
63
  VK_FORMAT_R8G8_UNORM,
60
64
  VK_FORMAT_R8G8B8A8_SRGB,
61
65
  VK_FORMAT_R8G8B8A8_UNORM,
66
+ VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
67
+ VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
68
+ KHR_DF_PRIMARIES_UNSPECIFIED,
69
+ KHR_DF_PRIMARIES_BT709,
70
+ KHR_DF_PRIMARIES_DISPLAYP3
62
71
  } from '../libs/ktx-parse.module.js';
63
72
  import { ZSTDDecoder } from '../libs/zstddec.module.js';
64
73
 
@@ -254,7 +263,7 @@ class KTX2Loader extends Loader {
254
263
 
255
264
  _createTextureFrom( transcodeResult, container ) {
256
265
 
257
- const { faces, width, height, format, type, error, dfdTransferFn, dfdFlags } = transcodeResult;
266
+ const { faces, width, height, format, type, error, dfdFlags } = transcodeResult;
258
267
 
259
268
  if ( type === 'error' ) return Promise.reject( error );
260
269
 
@@ -279,8 +288,7 @@ class KTX2Loader extends Loader {
279
288
  texture.generateMipmaps = false;
280
289
 
281
290
  texture.needsUpdate = true;
282
- // TODO: Detect NoColorSpace vs. LinearSRGBColorSpace based on primaries.
283
- texture.colorSpace = dfdTransferFn === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : NoColorSpace;
291
+ texture.colorSpace = parseColorSpace( container );
284
292
  texture.premultiplyAlpha = !! ( dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED );
285
293
 
286
294
  return texture;
@@ -298,33 +306,7 @@ class KTX2Loader extends Loader {
298
306
 
299
307
  if ( container.vkFormat !== VK_FORMAT_UNDEFINED ) {
300
308
 
301
- const mipmaps = [];
302
- const pendings = [];
303
-
304
- for ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {
305
-
306
- pendings.push( createDataTexture( container, levelIndex ).then( function ( dataTexture ) {
307
-
308
- mipmaps[ levelIndex ] = dataTexture;
309
-
310
- } ) );
311
-
312
- }
313
-
314
- await Promise.all( pendings );
315
-
316
- const texture = mipmaps[ 0 ];
317
- texture.mipmaps = mipmaps.map( dt => {
318
-
319
- return {
320
- data: dt.source.data,
321
- width: dt.source.data.width,
322
- height: dt.source.data.height,
323
- depth: dt.source.data.depth
324
- };
325
-
326
- } );
327
- return texture;
309
+ return createRawTexture( container );
328
310
 
329
311
  }
330
312
 
@@ -426,9 +408,9 @@ KTX2Loader.BasisWorker = function () {
426
408
 
427
409
  try {
428
410
 
429
- const { faces, buffers, width, height, hasAlpha, format, dfdTransferFn, dfdFlags } = transcode( message.buffer );
411
+ const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode( message.buffer );
430
412
 
431
- self.postMessage( { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdTransferFn, dfdFlags }, buffers );
413
+ self.postMessage( { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdFlags }, buffers );
432
414
 
433
415
  } catch ( error ) {
434
416
 
@@ -491,7 +473,6 @@ KTX2Loader.BasisWorker = function () {
491
473
  const levelCount = ktx2File.getLevels();
492
474
  const faceCount = ktx2File.getFaces();
493
475
  const hasAlpha = ktx2File.getHasAlpha();
494
- const dfdTransferFn = ktx2File.getDFDTransferFunc();
495
476
  const dfdFlags = ktx2File.getDFDFlags();
496
477
 
497
478
  const { transcoderFormat, engineFormat } = getTranscoderFormat( basisFormat, width, height, hasAlpha );
@@ -575,7 +556,7 @@ KTX2Loader.BasisWorker = function () {
575
556
 
576
557
  cleanup();
577
558
 
578
- return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdTransferFn, dfdFlags };
559
+ return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags };
579
560
 
580
561
  }
581
562
 
@@ -730,7 +711,10 @@ KTX2Loader.BasisWorker = function () {
730
711
  };
731
712
 
732
713
  //
733
- // DataTexture and Data3DTexture parsing.
714
+ // Parsing for non-Basis textures. These textures are may have supercompression
715
+ // like Zstd, but they do not require transcoding.
716
+
717
+ const UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGFormat, RedFormat ] );
734
718
 
735
719
  const FORMAT_MAP = {
736
720
 
@@ -749,6 +733,9 @@ const FORMAT_MAP = {
749
733
  [ VK_FORMAT_R8_SRGB ]: RedFormat,
750
734
  [ VK_FORMAT_R8_UNORM ]: RedFormat,
751
735
 
736
+ [ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: RGBA_ASTC_6x6_Format,
737
+ [ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: RGBA_ASTC_6x6_Format,
738
+
752
739
  };
753
740
 
754
741
  const TYPE_MAP = {
@@ -768,22 +755,14 @@ const TYPE_MAP = {
768
755
  [ VK_FORMAT_R8_SRGB ]: UnsignedByteType,
769
756
  [ VK_FORMAT_R8_UNORM ]: UnsignedByteType,
770
757
 
771
- };
772
-
773
- const COLOR_SPACE_MAP = {
774
-
775
- [ VK_FORMAT_R8G8B8A8_SRGB ]: SRGBColorSpace,
776
- [ VK_FORMAT_R8G8_SRGB ]: SRGBColorSpace,
777
- [ VK_FORMAT_R8_SRGB ]: SRGBColorSpace,
758
+ [ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: UnsignedByteType,
759
+ [ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: UnsignedByteType,
778
760
 
779
761
  };
780
762
 
781
- async function createDataTexture( container, levelIndex = 0 ) {
763
+ async function createRawTexture( container ) {
782
764
 
783
765
  const { vkFormat } = container;
784
- const pixelWidth = Math.max( 1, container.pixelWidth >> levelIndex );
785
- const pixelHeight = Math.max( 1, container.pixelHeight >> levelIndex );
786
- const pixelDepth = Math.max( 1, container.pixelDepth >> levelIndex );
787
766
 
788
767
  if ( FORMAT_MAP[ vkFormat ] === undefined ) {
789
768
 
@@ -791,16 +770,11 @@ async function createDataTexture( container, levelIndex = 0 ) {
791
770
 
792
771
  }
793
772
 
794
- const level = container.levels[ levelIndex ];
795
-
796
- let levelData;
797
- let view;
798
-
799
- if ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE ) {
773
+ //
800
774
 
801
- levelData = level.levelData;
775
+ let zstd;
802
776
 
803
- } else if ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD ) {
777
+ if ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD ) {
804
778
 
805
779
  if ( ! _zstd ) {
806
780
 
@@ -814,49 +788,99 @@ async function createDataTexture( container, levelIndex = 0 ) {
814
788
 
815
789
  }
816
790
 
817
- levelData = ( await _zstd ).decode( level.levelData, level.uncompressedByteLength );
791
+ zstd = await _zstd;
818
792
 
819
- } else {
793
+ }
820
794
 
821
- throw new Error( 'THREE.KTX2Loader: Unsupported supercompressionScheme.' );
795
+ //
822
796
 
823
- }
797
+ const mipmaps = [];
798
+
799
+
800
+ for ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {
801
+
802
+ const levelWidth = Math.max( 1, container.pixelWidth >> levelIndex );
803
+ const levelHeight = Math.max( 1, container.pixelHeight >> levelIndex );
804
+ const levelDepth = container.pixelDepth ? Math.max( 1, container.pixelDepth >> levelIndex ) : 0;
805
+
806
+ const level = container.levels[ levelIndex ];
824
807
 
825
- if ( TYPE_MAP[ vkFormat ] === FloatType ) {
808
+ let levelData;
826
809
 
827
- view = new Float32Array(
810
+ if ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE ) {
828
811
 
829
- levelData.buffer,
830
- levelData.byteOffset,
831
- levelData.byteLength / Float32Array.BYTES_PER_ELEMENT
812
+ levelData = level.levelData;
832
813
 
833
- );
814
+ } else if ( container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD ) {
834
815
 
835
- } else if ( TYPE_MAP[ vkFormat ] === HalfFloatType ) {
816
+ levelData = zstd.decode( level.levelData, level.uncompressedByteLength );
836
817
 
837
- view = new Uint16Array(
818
+ } else {
819
+
820
+ throw new Error( 'THREE.KTX2Loader: Unsupported supercompressionScheme.' );
821
+
822
+ }
823
+
824
+ let data;
838
825
 
839
- levelData.buffer,
840
- levelData.byteOffset,
841
- levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT
826
+ if ( TYPE_MAP[ vkFormat ] === FloatType ) {
827
+
828
+ data = new Float32Array(
829
+
830
+ levelData.buffer,
831
+ levelData.byteOffset,
832
+ levelData.byteLength / Float32Array.BYTES_PER_ELEMENT
833
+
834
+ );
842
835
 
843
- );
836
+ } else if ( TYPE_MAP[ vkFormat ] === HalfFloatType ) {
837
+
838
+ data = new Uint16Array(
839
+
840
+ levelData.buffer,
841
+ levelData.byteOffset,
842
+ levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT
843
+
844
+ );
845
+
846
+ } else {
847
+
848
+ data = levelData;
849
+
850
+ }
851
+
852
+ mipmaps.push( {
853
+
854
+ data: data,
855
+ width: levelWidth,
856
+ height: levelHeight,
857
+ depth: levelDepth,
858
+
859
+ } );
860
+
861
+ }
862
+
863
+ let texture;
864
+
865
+ if ( UNCOMPRESSED_FORMATS.has( FORMAT_MAP[ vkFormat ] ) ) {
866
+
867
+ texture = container.pixelDepth === 0
868
+ ? new DataTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight )
869
+ : new Data3DTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight, container.pixelDepth );
844
870
 
845
871
  } else {
846
872
 
847
- view = levelData;
873
+ if ( container.pixelDepth > 0 ) throw new Error( 'THREE.KTX2Loader: Unsupported pixelDepth.' );
874
+
875
+ texture = new CompressedTexture( mipmaps, container.pixelWidth, container.pixelHeight );
848
876
 
849
877
  }
850
- //
851
878
 
852
- const texture = pixelDepth === 0
853
- ? new DataTexture( view, pixelWidth, pixelHeight )
854
- : new Data3DTexture( view, pixelWidth, pixelHeight, pixelDepth );
879
+ texture.mipmaps = mipmaps;
855
880
 
856
881
  texture.type = TYPE_MAP[ vkFormat ];
857
882
  texture.format = FORMAT_MAP[ vkFormat ];
858
- texture.colorSpace = COLOR_SPACE_MAP[ vkFormat ] || NoColorSpace;
859
-
883
+ texture.colorSpace = parseColorSpace( container );
860
884
  texture.needsUpdate = true;
861
885
 
862
886
  //
@@ -865,4 +889,29 @@ async function createDataTexture( container, levelIndex = 0 ) {
865
889
 
866
890
  }
867
891
 
892
+ function parseColorSpace( container ) {
893
+
894
+ const dfd = container.dataFormatDescriptor[ 0 ];
895
+
896
+ if ( dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709 ) {
897
+
898
+ return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace;
899
+
900
+ } else if ( dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3 ) {
901
+
902
+ return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace;
903
+
904
+ } else if ( dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED ) {
905
+
906
+ return NoColorSpace;
907
+
908
+ } else {
909
+
910
+ console.warn( `THREE.KTX2Loader: Unsupported color primaries, "${ dfd.colorPrimaries }"` );
911
+ return NoColorSpace;
912
+
913
+ }
914
+
915
+ }
916
+
868
917
  export { KTX2Loader };