@zephyr3d/scene 0.4.0 → 0.6.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 (233) hide show
  1. package/dist/animation/animation.js +25 -117
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +191 -51
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +6 -18
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +16 -6
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +104 -0
  10. package/dist/animation/morphtarget.js.map +1 -0
  11. package/dist/animation/morphtrack.js +70 -0
  12. package/dist/animation/morphtrack.js.map +1 -0
  13. package/dist/animation/rotationtrack.js +15 -7
  14. package/dist/animation/rotationtrack.js.map +1 -1
  15. package/dist/animation/scaletrack.js +15 -7
  16. package/dist/animation/scaletrack.js.map +1 -1
  17. package/dist/animation/skeleton.js +107 -5
  18. package/dist/animation/skeleton.js.map +1 -1
  19. package/dist/animation/translationtrack.js +15 -7
  20. package/dist/animation/translationtrack.js.map +1 -1
  21. package/dist/app.js +4 -26
  22. package/dist/app.js.map +1 -1
  23. package/dist/asset/assetmanager.js +60 -109
  24. package/dist/asset/assetmanager.js.map +1 -1
  25. package/dist/asset/loaders/dds/dds.js +77 -3
  26. package/dist/asset/loaders/dds/dds.js.map +1 -1
  27. package/dist/asset/loaders/dds/dds_loader.js +1 -1
  28. package/dist/asset/loaders/gltf/gltf_loader.js +287 -40
  29. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  30. package/dist/asset/loaders/image/tga_Loader.js +1 -1
  31. package/dist/asset/loaders/image/webimage_loader.js +16 -0
  32. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  33. package/dist/asset/model.js +16 -9
  34. package/dist/asset/model.js.map +1 -1
  35. package/dist/blitter/bilateralblur.js +222 -0
  36. package/dist/{render/temporalcache.js.map → blitter/bilateralblur.js.map} +1 -1
  37. package/dist/blitter/blitter.js +9 -3
  38. package/dist/blitter/blitter.js.map +1 -1
  39. package/dist/blitter/depthlimitedgaussion.js +96 -39
  40. package/dist/blitter/depthlimitedgaussion.js.map +1 -1
  41. package/dist/blitter/gaussianblur.js +21 -21
  42. package/dist/camera/camera.js +200 -4
  43. package/dist/camera/camera.js.map +1 -1
  44. package/dist/index.d.ts +6406 -5786
  45. package/dist/index.js +12 -10
  46. package/dist/index.js.map +1 -1
  47. package/dist/material/blinn.js +15 -4
  48. package/dist/material/blinn.js.map +1 -1
  49. package/dist/material/lambert.js +26 -17
  50. package/dist/material/lambert.js.map +1 -1
  51. package/dist/material/material.js +13 -2
  52. package/dist/material/material.js.map +1 -1
  53. package/dist/material/meshmaterial.js +103 -31
  54. package/dist/material/meshmaterial.js.map +1 -1
  55. package/dist/material/mixins/albedocolor.js +5 -4
  56. package/dist/material/mixins/albedocolor.js.map +1 -1
  57. package/dist/material/mixins/lightmodel/blinnphong.js +17 -7
  58. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  59. package/dist/material/mixins/lightmodel/lambert.js +5 -5
  60. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -7
  61. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  62. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -7
  63. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  64. package/dist/material/mixins/lit.js +2 -2
  65. package/dist/material/mixins/pbr/common.js +454 -19
  66. package/dist/material/mixins/pbr/common.js.map +1 -1
  67. package/dist/material/pbrmr.js +28 -6
  68. package/dist/material/pbrmr.js.map +1 -1
  69. package/dist/material/pbrsg.js +27 -9
  70. package/dist/material/pbrsg.js.map +1 -1
  71. package/dist/material/shader/helper.js +128 -23
  72. package/dist/material/shader/helper.js.map +1 -1
  73. package/dist/material/unlit.js +8 -4
  74. package/dist/material/unlit.js.map +1 -1
  75. package/dist/posteffect/bloom.js +34 -53
  76. package/dist/posteffect/bloom.js.map +1 -1
  77. package/dist/posteffect/compositor.js +48 -58
  78. package/dist/posteffect/compositor.js.map +1 -1
  79. package/dist/posteffect/fxaa.js +3 -11
  80. package/dist/posteffect/fxaa.js.map +1 -1
  81. package/dist/posteffect/grayscale.js +3 -11
  82. package/dist/posteffect/grayscale.js.map +1 -1
  83. package/dist/posteffect/posteffect.js +4 -0
  84. package/dist/posteffect/posteffect.js.map +1 -1
  85. package/dist/posteffect/sao.js +55 -48
  86. package/dist/posteffect/sao.js.map +1 -1
  87. package/dist/posteffect/ssr.js +536 -0
  88. package/dist/{material/lit.js.map → posteffect/ssr.js.map} +1 -1
  89. package/dist/posteffect/tonemap.js +3 -11
  90. package/dist/posteffect/tonemap.js.map +1 -1
  91. package/dist/posteffect/water.js +306 -340
  92. package/dist/posteffect/water.js.map +1 -1
  93. package/dist/render/abuffer_oit.js +2 -2
  94. package/dist/render/clipmap.js +16 -19
  95. package/dist/render/clipmap.js.map +1 -1
  96. package/dist/render/cull_visitor.js +8 -6
  97. package/dist/render/cull_visitor.js.map +1 -1
  98. package/dist/render/depthpass.js +30 -14
  99. package/dist/render/depthpass.js.map +1 -1
  100. package/dist/render/drawable_mixin.js +70 -22
  101. package/dist/render/drawable_mixin.js.map +1 -1
  102. package/dist/render/envlight.js +169 -33
  103. package/dist/render/envlight.js.map +1 -1
  104. package/dist/render/fft_wavegenerator.js +989 -0
  105. package/dist/{shaders/framework.js.map → render/fft_wavegenerator.js.map} +1 -1
  106. package/dist/render/gerstner_wavegenerator.js +265 -0
  107. package/dist/{material/standard.js.map → render/gerstner_wavegenerator.js.map} +1 -1
  108. package/dist/render/globalbindgroup_allocator.js +2 -1
  109. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  110. package/dist/render/hzb.js +273 -0
  111. package/dist/{material/terrainlightmodel.js.map → render/hzb.js.map} +1 -1
  112. package/dist/render/lightpass.js +68 -28
  113. package/dist/render/lightpass.js.map +1 -1
  114. package/dist/render/objectcolorpass.js +51 -0
  115. package/dist/render/objectcolorpass.js.map +1 -0
  116. package/dist/render/render_queue.js +211 -158
  117. package/dist/render/render_queue.js.map +1 -1
  118. package/dist/render/renderbundle_wrapper.js +79 -0
  119. package/dist/render/renderbundle_wrapper.js.map +1 -1
  120. package/dist/render/renderer.js +151 -35
  121. package/dist/render/renderer.js.map +1 -1
  122. package/dist/render/renderpass.js +27 -20
  123. package/dist/render/renderpass.js.map +1 -1
  124. package/dist/render/shadowmap_pass.js +20 -14
  125. package/dist/render/shadowmap_pass.js.map +1 -1
  126. package/dist/render/sky.js +12 -13
  127. package/dist/render/sky.js.map +1 -1
  128. package/dist/render/watermesh.js +94 -828
  129. package/dist/render/watermesh.js.map +1 -1
  130. package/dist/render/wavegenerator.js +8 -0
  131. package/dist/render/wavegenerator.js.map +1 -0
  132. package/dist/render/weightedblended_oit.js +11 -28
  133. package/dist/render/weightedblended_oit.js.map +1 -1
  134. package/dist/scene/batchgroup.js +60 -14
  135. package/dist/scene/batchgroup.js.map +1 -1
  136. package/dist/scene/environment.js +24 -3
  137. package/dist/scene/environment.js.map +1 -1
  138. package/dist/scene/graph_node.js +0 -14
  139. package/dist/scene/graph_node.js.map +1 -1
  140. package/dist/scene/light.js +5 -5
  141. package/dist/scene/mesh.js +62 -15
  142. package/dist/scene/mesh.js.map +1 -1
  143. package/dist/scene/octree.js +5 -2
  144. package/dist/scene/octree.js.map +1 -1
  145. package/dist/scene/raycast_visitor.js +4 -2
  146. package/dist/scene/raycast_visitor.js.map +1 -1
  147. package/dist/scene/scene.js +6 -9
  148. package/dist/scene/scene.js.map +1 -1
  149. package/dist/scene/scene_node.js +11 -8
  150. package/dist/scene/scene_node.js.map +1 -1
  151. package/dist/scene/terrain/grass.js +10 -2
  152. package/dist/scene/terrain/grass.js.map +1 -1
  153. package/dist/scene/terrain/heightfield.js +135 -53
  154. package/dist/scene/terrain/heightfield.js.map +1 -1
  155. package/dist/scene/terrain/patch.js +10 -2
  156. package/dist/scene/terrain/patch.js.map +1 -1
  157. package/dist/scene/terrain/quadtree.js +2 -2
  158. package/dist/scene/terrain/terrain.js +1 -1
  159. package/dist/scene/xform.js +7 -9
  160. package/dist/scene/xform.js.map +1 -1
  161. package/dist/shaders/misc.js +10 -1
  162. package/dist/shaders/misc.js.map +1 -1
  163. package/dist/shaders/noise.js +81 -16
  164. package/dist/shaders/noise.js.map +1 -1
  165. package/dist/shaders/shadow.js +1 -9
  166. package/dist/shaders/shadow.js.map +1 -1
  167. package/dist/shaders/ssr.js +442 -0
  168. package/dist/{material/terrainmat.js.map → shaders/ssr.js.map} +1 -1
  169. package/dist/shaders/water.js +377 -250
  170. package/dist/shaders/water.js.map +1 -1
  171. package/dist/shadow/esm.js +4 -22
  172. package/dist/shadow/esm.js.map +1 -1
  173. package/dist/shadow/shadowmapper.js +56 -31
  174. package/dist/shadow/shadowmapper.js.map +1 -1
  175. package/dist/shadow/vsm.js +4 -24
  176. package/dist/shadow/vsm.js.map +1 -1
  177. package/dist/shapes/cylinder.js +6 -5
  178. package/dist/shapes/cylinder.js.map +1 -1
  179. package/dist/utility/bounding_volume.js +1 -53
  180. package/dist/utility/bounding_volume.js.map +1 -1
  181. package/dist/utility/draco/decoder.js +116 -0
  182. package/dist/utility/draco/decoder.js.map +1 -0
  183. package/dist/utility/misc.js +93 -0
  184. package/dist/utility/misc.js.map +1 -0
  185. package/dist/utility/shprojection.js +2 -7
  186. package/dist/utility/shprojection.js.map +1 -1
  187. package/dist/utility/textures/ggxlut.js +213 -0
  188. package/dist/utility/textures/ggxlut.js.map +1 -0
  189. package/dist/utility/textures/gradientnoise.js +61 -0
  190. package/dist/utility/textures/gradientnoise.js.map +1 -0
  191. package/dist/utility/textures/randomnoise.js +41 -0
  192. package/dist/utility/textures/randomnoise.js.map +1 -0
  193. package/dist/values.js +25 -1
  194. package/dist/values.js.map +1 -1
  195. package/package.json +5 -8
  196. package/dist/animation/usertrack.js +0 -47
  197. package/dist/animation/usertrack.js.map +0 -1
  198. package/dist/material/grassmat.js +0 -127
  199. package/dist/material/grassmat.js.map +0 -1
  200. package/dist/material/lightmodel.js +0 -2074
  201. package/dist/material/lightmodel.js.map +0 -1
  202. package/dist/material/lit.js +0 -578
  203. package/dist/material/mixins/pbr/metallicroughness.js +0 -126
  204. package/dist/material/mixins/pbr/metallicroughness.js.map +0 -1
  205. package/dist/material/mixins/pbr/specularglossness.js +0 -104
  206. package/dist/material/mixins/pbr/specularglossness.js.map +0 -1
  207. package/dist/material/pbr.js +0 -27
  208. package/dist/material/pbr.js.map +0 -1
  209. package/dist/material/standard.js +0 -282
  210. package/dist/material/terrainlightmodel.js +0 -259
  211. package/dist/material/terrainmat.js +0 -357
  212. package/dist/render/depth_pass.js +0 -47
  213. package/dist/render/depth_pass.js.map +0 -1
  214. package/dist/render/forward.js +0 -186
  215. package/dist/render/forward.js.map +0 -1
  216. package/dist/render/forward_pass.js +0 -137
  217. package/dist/render/forward_pass.js.map +0 -1
  218. package/dist/render/helper.js +0 -38
  219. package/dist/render/helper.js.map +0 -1
  220. package/dist/render/renderscheme.js +0 -61
  221. package/dist/render/renderscheme.js.map +0 -1
  222. package/dist/render/temporalcache.js +0 -222
  223. package/dist/scene/model.js +0 -111
  224. package/dist/scene/model.js.map +0 -1
  225. package/dist/scene/octree_update_visitor.js +0 -20
  226. package/dist/scene/octree_update_visitor.js.map +0 -1
  227. package/dist/shaders/builtins.js +0 -110
  228. package/dist/shaders/builtins.js.map +0 -1
  229. package/dist/shaders/framework.js +0 -723
  230. package/dist/shaders/lighting.js +0 -335
  231. package/dist/shaders/lighting.js.map +0 -1
  232. package/dist/utility/sheenlut.js +0 -196
  233. package/dist/utility/sheenlut.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { HttpRequest, isPowerOf2, nextPowerOf2, Vector3 } from '@zephyr3d/base';
1
+ import { HttpRequest, isPowerOf2, nextPowerOf2 } from '@zephyr3d/base';
2
2
  import { GLTFLoader } from './loaders/gltf/gltf_loader.js';
3
3
  import { WebImageLoader } from './loaders/image/webimage_loader.js';
4
4
  import { DDSLoader } from './loaders/dds/dds_loader.js';
@@ -12,13 +12,14 @@ import { RotationTrack } from '../animation/rotationtrack.js';
12
12
  import '../animation/eulerrotationtrack.js';
13
13
  import { ScaleTrack } from '../animation/scaletrack.js';
14
14
  import { Skeleton } from '../animation/skeleton.js';
15
- import { BoundingBox } from '../utility/bounding_volume.js';
16
15
  import { Application } from '../app.js';
17
16
  import '@zephyr3d/device';
18
17
  import { CopyBlitter } from '../blitter/copy.js';
19
18
  import { getSheenLutLoader, getTestCubemapLoader } from './builtin.js';
20
- import { BUILTIN_ASSET_TEXTURE_SHEEN_LUT, BUILTIN_ASSET_TEST_CUBEMAP } from '../values.js';
19
+ import { BUILTIN_ASSET_TEXTURE_SHEEN_LUT, BUILTIN_ASSET_TEST_CUBEMAP, MAX_MORPH_TARGETS } from '../values.js';
21
20
  import { TGALoader } from './loaders/image/tga_Loader.js';
21
+ import { MorphTargetTrack } from '../animation/morphtrack.js';
22
+ import { processMorphData } from '../animation/morphtarget.js';
22
23
 
23
24
  /**
24
25
  * The asset manager
@@ -72,8 +73,8 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
72
73
  */ purgeCache() {
73
74
  for(const k in this._textures){
74
75
  this._textures[k].then((tex)=>tex?.dispose()).catch((err)=>{});
75
- delete this._textures[k];
76
76
  }
77
+ this._textures = {};
77
78
  this._models = {};
78
79
  this._binaryDatas = {};
79
80
  this._textDatas = {};
@@ -166,10 +167,10 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
166
167
  return P;
167
168
  }
168
169
  }
169
- /** @internal */ async fetchModelData(scene, url, mimeType, postProcess) {
170
+ /** @internal */ async fetchModelData(scene, url, options) {
170
171
  let P = this._models[url];
171
172
  if (!P) {
172
- P = this.loadModel(url, mimeType, postProcess);
173
+ P = this.loadModel(url, options);
173
174
  this._models[url] = P;
174
175
  }
175
176
  return P;
@@ -188,7 +189,7 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
188
189
  *
189
190
  * @returns The created model node
190
191
  */ async fetchModel(scene, url, options) {
191
- const sharedModel = await this.fetchModelData(scene, url, options?.mimeType, options?.postProcess);
192
+ const sharedModel = await this.fetchModelData(scene, url, options);
192
193
  return this.createSceneNode(scene, sharedModel, !!options?.enableInstancing);
193
194
  }
194
195
  /** @internal */ async loadTextData(url, postProcess) {
@@ -302,22 +303,22 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
302
303
  return tex;
303
304
  }
304
305
  }
305
- /** @internal */ async loadModel(url, mimeType, postProcess) {
306
+ /** @internal */ async loadModel(url, options) {
306
307
  const data = await this.httpRequest.requestBlob(url);
307
308
  const filename = new URL(url, new URL(location.href).origin).pathname.split('/').filter((val)=>!!val).slice(-1)[0];
308
309
  const p = filename ? filename.lastIndexOf('.') : -1;
309
310
  const ext = p >= 0 ? filename.substring(p) : null;
310
311
  for (const loader of this._modelLoaders){
311
- if (!loader.supportExtension(ext) && !loader.supportMIMEType(mimeType || data.type)) {
312
+ if (!loader.supportExtension(ext) && !loader.supportMIMEType(options?.mimeType || data.type)) {
312
313
  continue;
313
314
  }
314
- let model = await loader.load(this, url, mimeType || data.type, data);
315
+ let model = await loader.load(this, url, options?.mimeType || data.type, data, options?.dracoDecoderModule);
315
316
  if (!model) {
316
317
  throw new Error(`Load asset failed: ${url}`);
317
318
  }
318
- if (postProcess) {
319
+ if (options?.postProcess) {
319
320
  try {
320
- model = postProcess(model);
321
+ model = options.postProcess(model);
321
322
  } catch (err) {
322
323
  throw new Error(`Model loader post process failed: ${err}`);
323
324
  }
@@ -354,7 +355,7 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
354
355
  /** @internal */ createSceneNode(scene, model, instancing) {
355
356
  const group = new SceneNode(scene);
356
357
  group.name = model.name;
357
- let animationSet = new AnimationSet(scene);
358
+ let animationSet = new AnimationSet(scene, group);
358
359
  for(let i = 0; i < model.scenes.length; i++){
359
360
  const assetScene = model.scenes[i];
360
361
  const skeletonMeshMap = new Map();
@@ -363,8 +364,7 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
363
364
  this.setAssetNodeToSceneNode(scene, group, model, assetScene.rootNodes[k], skeletonMeshMap, nodeMap, instancing);
364
365
  }
365
366
  for (const animationData of model.animations){
366
- const animation = new AnimationClip(animationData.name, group);
367
- animationSet.add(animation);
367
+ const animation = new AnimationClip(animationData.name);
368
368
  for (const track of animationData.tracks){
369
369
  if (track.type === 'translation') {
370
370
  animation.addTrack(nodeMap.get(track.node), new TranslationTrack(track.interpolator));
@@ -372,19 +372,32 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
372
372
  animation.addTrack(nodeMap.get(track.node), new ScaleTrack(track.interpolator));
373
373
  } else if (track.type === 'rotation') {
374
374
  animation.addTrack(nodeMap.get(track.node), new RotationTrack(track.interpolator));
375
+ } else if (track.type === 'weights') {
376
+ for (const m of track.node.mesh.subMeshes){
377
+ if (track.interpolator.stride > MAX_MORPH_TARGETS) {
378
+ console.error(`Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`);
379
+ } else {
380
+ const morphTrack = new MorphTargetTrack(track, m);
381
+ animation.addTrack(m.mesh, morphTrack);
382
+ }
383
+ }
375
384
  } else {
376
385
  console.error(`Invalid animation track type: ${track.type}`);
377
386
  }
378
387
  }
388
+ if (animation.tracks.size === 0) {
389
+ continue;
390
+ }
391
+ animationSet.add(animation);
379
392
  for (const sk of animationData.skeletons){
380
393
  const nodes = skeletonMeshMap.get(sk);
381
394
  if (nodes) {
382
- const skeleton = new Skeleton(sk.joints.map((val)=>nodeMap.get(val)), sk.inverseBindMatrices, sk.bindPoseMatrices);
383
- skeleton.updateJointMatrices();
384
- animation.addSkeleton(skeleton, nodes.mesh, nodes.bounding.map((val)=>this.getBoundingInfo(skeleton, val)));
395
+ if (!nodes.skeleton) {
396
+ nodes.skeleton = new Skeleton(sk.joints.map((val)=>nodeMap.get(val)), sk.inverseBindMatrices, sk.bindPoseMatrices, nodes.mesh, nodes.bounding);
397
+ }
398
+ animation.addSkeleton(nodes.skeleton);
385
399
  }
386
400
  }
387
- animation.stop();
388
401
  }
389
402
  }
390
403
  if (animationSet.numAnimations === 0) {
@@ -404,77 +417,9 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
404
417
  if (loader) {
405
418
  this._builtinTextureLoaders[name] = loader;
406
419
  } else {
407
- delete this._builtinTextureLoaders[name];
420
+ this._builtinTextureLoaders[name] = undefined;
408
421
  }
409
422
  }
410
- /** @internal */ getBoundingInfo(skeleton, meshData) {
411
- const indices = [
412
- 0,
413
- 0,
414
- 0,
415
- 0,
416
- 0,
417
- 0
418
- ];
419
- let minx = Number.MAX_VALUE;
420
- let maxx = -Number.MAX_VALUE;
421
- let miny = Number.MAX_VALUE;
422
- let maxy = -Number.MAX_VALUE;
423
- let minz = Number.MAX_VALUE;
424
- let maxz = -Number.MAX_VALUE;
425
- const v = meshData.rawPositions;
426
- const vert = new Vector3();
427
- const tmpV0 = new Vector3();
428
- const tmpV1 = new Vector3();
429
- const tmpV2 = new Vector3();
430
- const tmpV3 = new Vector3();
431
- const numVertices = Math.floor(v.length / 3);
432
- for(let i = 0; i < numVertices; i++){
433
- vert.setXYZ(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]);
434
- skeleton.jointMatrices[meshData.rawBlendIndices[i * 4 + 0]].transformPointAffine(vert, tmpV0).scaleBy(meshData.rawJointWeights[i * 4 + 0]);
435
- skeleton.jointMatrices[meshData.rawBlendIndices[i * 4 + 1]].transformPointAffine(vert, tmpV1).scaleBy(meshData.rawJointWeights[i * 4 + 1]);
436
- skeleton.jointMatrices[meshData.rawBlendIndices[i * 4 + 2]].transformPointAffine(vert, tmpV2).scaleBy(meshData.rawJointWeights[i * 4 + 2]);
437
- skeleton.jointMatrices[meshData.rawBlendIndices[i * 4 + 3]].transformPointAffine(vert, tmpV3).scaleBy(meshData.rawJointWeights[i * 4 + 3]);
438
- tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);
439
- if (tmpV0.x < minx) {
440
- minx = tmpV0.x;
441
- indices[0] = i;
442
- }
443
- if (tmpV0.x > maxx) {
444
- maxx = tmpV0.x;
445
- indices[1] = i;
446
- }
447
- if (tmpV0.y < miny) {
448
- miny = tmpV0.y;
449
- indices[2] = i;
450
- }
451
- if (tmpV0.y > maxy) {
452
- maxy = tmpV0.y;
453
- indices[3] = i;
454
- }
455
- if (tmpV0.z < minz) {
456
- minz = tmpV0.z;
457
- indices[4] = i;
458
- }
459
- if (tmpV0.z > maxz) {
460
- maxz = tmpV0.z;
461
- indices[5] = i;
462
- }
463
- }
464
- const info = {
465
- boundingVertexBlendIndices: new Float32Array(Array.from({
466
- length: 6 * 4
467
- }).map((val, index)=>meshData.rawBlendIndices[indices[index >> 2] * 4 + index % 4])),
468
- boundingVertexJointWeights: new Float32Array(Array.from({
469
- length: 6 * 4
470
- }).map((val, index)=>meshData.rawJointWeights[indices[index >> 2] * 4 + index % 4])),
471
- boundingVertices: Array.from({
472
- length: 6
473
- }).map((val, index)=>new Vector3(meshData.rawPositions[indices[index] * 3], meshData.rawPositions[indices[index] * 3 + 1], meshData.rawPositions[indices[index] * 3 + 2])),
474
- boundingBox: new BoundingBox()
475
- };
476
- return info;
477
- }
478
423
  /** @internal */ setAssetNodeToSceneNode(scene, parent, model, assetNode, skeletonMeshMap, nodeMap, instancing) {
479
424
  const node = new SceneNode(scene);
480
425
  nodeMap.set(assetNode, node);
@@ -486,27 +431,33 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
486
431
  const meshData = assetNode.mesh;
487
432
  const skeleton = assetNode.skeleton;
488
433
  for (const subMesh of meshData.subMeshes){
489
- const meshNode = new Mesh(scene);
490
- meshNode.name = subMesh.name;
491
- meshNode.clipTestEnabled = true;
492
- meshNode.showState = 'inherit';
493
- meshNode.primitive = subMesh.primitive;
494
- meshNode.material = instancing ? subMesh.material.createInstance() : subMesh.material;
495
- // meshNode.drawBoundingBox = true;
496
- meshNode.reparent(node);
497
- if (skeleton) {
498
- if (!skeletonMeshMap.has(skeleton)) {
499
- skeletonMeshMap.set(skeleton, {
500
- mesh: [
501
- meshNode
502
- ],
503
- bounding: [
504
- subMesh
505
- ]
506
- });
507
- } else {
508
- skeletonMeshMap.get(skeleton).mesh.push(meshNode);
509
- skeletonMeshMap.get(skeleton).bounding.push(subMesh);
434
+ for (const instance of assetNode.instances){
435
+ const meshNode = new Mesh(scene);
436
+ meshNode.position = instance.t;
437
+ meshNode.scale = instance.s;
438
+ meshNode.rotation = instance.r;
439
+ meshNode.name = subMesh.name;
440
+ meshNode.clipTestEnabled = true;
441
+ meshNode.showState = 'inherit';
442
+ meshNode.primitive = subMesh.primitive;
443
+ meshNode.material = instancing ? subMesh.material.createInstance() : subMesh.material;
444
+ meshNode.reparent(node);
445
+ subMesh.mesh = meshNode;
446
+ processMorphData(subMesh, meshData.morphWeights);
447
+ if (skeleton) {
448
+ if (!skeletonMeshMap.has(skeleton)) {
449
+ skeletonMeshMap.set(skeleton, {
450
+ mesh: [
451
+ meshNode
452
+ ],
453
+ bounding: [
454
+ subMesh
455
+ ]
456
+ });
457
+ } else {
458
+ skeletonMeshMap.get(skeleton).mesh.push(meshNode);
459
+ skeletonMeshMap.get(skeleton).bounding.push(subMesh);
460
+ }
510
461
  }
511
462
  }
512
463
  }
@@ -1 +1 @@
1
- {"version":3,"file":"assetmanager.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"assetmanager.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -77,6 +77,8 @@ var D3DFormat;
77
77
  D3DFormat[D3DFormat["D3DFMT_DXT3"] = FourCCToInt32('DXT3')] = "D3DFMT_DXT3";
78
78
  D3DFormat[D3DFormat["D3DFMT_DXT4"] = FourCCToInt32('DXT4')] = "D3DFMT_DXT4";
79
79
  D3DFormat[D3DFormat["D3DFMT_DXT5"] = FourCCToInt32('DXT5')] = "D3DFMT_DXT5";
80
+ D3DFormat[D3DFormat["D3DFMT_BC4"] = FourCCToInt32('ATI1')] = "D3DFMT_BC4";
81
+ D3DFormat[D3DFormat["D3DFMT_BC5"] = FourCCToInt32('ATI2')] = "D3DFMT_BC5";
80
82
  D3DFormat[D3DFormat["D3DFMT_R16F"] = 111] = "D3DFMT_R16F";
81
83
  D3DFormat[D3DFormat["D3DFMT_RG16F"] = 112] = "D3DFMT_RG16F";
82
84
  D3DFormat[D3DFormat["D3DFMT_RGBA16F"] = 113] = "D3DFMT_RGBA16F";
@@ -176,7 +178,15 @@ const dxgiFormatMap = {
176
178
  [74]: 'dxt3',
177
179
  [75]: 'dxt3-srgb',
178
180
  [77]: 'dxt5',
179
- [78]: 'dxt5-srgb'
181
+ [78]: 'dxt5-srgb',
182
+ [80]: 'bc4',
183
+ [81]: 'bc4-signed',
184
+ [83]: 'bc5',
185
+ [84]: 'bc5-signed',
186
+ [95]: 'bc6h',
187
+ [96]: 'bc6h-signed',
188
+ [98]: 'bc7',
189
+ [99]: 'bc7-srgb'
180
190
  };
181
191
  const legacyDDSMap = [
182
192
  {
@@ -203,6 +213,62 @@ const legacyDDSMap = [
203
213
  dwFourCC: FourCCToInt32('DXT5')
204
214
  }
205
215
  },
216
+ {
217
+ format: 'bc4',
218
+ convertFlags: 0,
219
+ pf: {
220
+ dwFlags: DDPF_FOURCC,
221
+ dwFourCC: FourCCToInt32('ATI1')
222
+ }
223
+ },
224
+ {
225
+ format: 'bc4',
226
+ convertFlags: 0,
227
+ pf: {
228
+ dwFlags: DDPF_FOURCC,
229
+ dwFourCC: FourCCToInt32('BC4U')
230
+ }
231
+ },
232
+ {
233
+ format: 'bc4-signed',
234
+ convertFlags: 0,
235
+ pf: {
236
+ dwFlags: DDPF_FOURCC,
237
+ dwFourCC: FourCCToInt32('BC4S')
238
+ }
239
+ },
240
+ {
241
+ format: 'bc5',
242
+ convertFlags: 0,
243
+ pf: {
244
+ dwFlags: DDPF_FOURCC,
245
+ dwFourCC: FourCCToInt32('ATI2')
246
+ }
247
+ },
248
+ {
249
+ format: 'bc5',
250
+ convertFlags: 0,
251
+ pf: {
252
+ dwFlags: DDPF_FOURCC,
253
+ dwFourCC: FourCCToInt32('ATI2')
254
+ }
255
+ },
256
+ {
257
+ format: 'bc5',
258
+ convertFlags: 0,
259
+ pf: {
260
+ dwFlags: DDPF_FOURCC,
261
+ dwFourCC: FourCCToInt32('BC5U')
262
+ }
263
+ },
264
+ {
265
+ format: 'bc5-signed',
266
+ convertFlags: 0,
267
+ pf: {
268
+ dwFlags: DDPF_FOURCC,
269
+ dwFourCC: FourCCToInt32('BC5S')
270
+ }
271
+ },
206
272
  {
207
273
  format: 'bgra8unorm',
208
274
  convertFlags: 1,
@@ -393,7 +459,7 @@ function getMetaDataFromHeader(header, metaData) {
393
459
  if (metaData.format === null) {
394
460
  return null;
395
461
  }
396
- metaData.isCompressed = metaData.format === 'dxt1' || metaData.format === 'dxt3' || metaData.format === 'dxt5';
462
+ metaData.isCompressed = metaData.format === 'dxt1' || metaData.format === 'dxt3' || metaData.format === 'dxt5' || metaData.format === 'bc4' || metaData.format === 'bc4-signed' || metaData.format === 'bc5' || metaData.format === 'bc5-signed' || metaData.format === 'bc6h' || metaData.format === 'bc6h-signed' || metaData.format === 'bc7' || metaData.format === 'bc7-srgb';
397
463
  metaData.dataOffset = header.ddsHeaderDX10 ? 37 * 4 : 32 * 4;
398
464
  metaData.width = header.dwWidth;
399
465
  metaData.height = header.dwHeight;
@@ -407,7 +473,7 @@ function getMetaDataFromHeader(header, metaData) {
407
473
  } else if (header.dwCaps2 & DDSCAPS2_VOLUME) {
408
474
  metaData.isVolume = true;
409
475
  metaData.depth = header.dwDepth;
410
- } else if (header.ddsHeaderDX10) {
476
+ } else if (header.ddsHeaderDX10 && header.ddsHeaderDX10.arraySize > 1) {
411
477
  metaData.isArray = true;
412
478
  metaData.depth = header.ddsHeaderDX10.arraySize;
413
479
  }
@@ -431,9 +497,17 @@ function getMipmapData(dds, width, height, format, dataOffset) {
431
497
  case 'rgba32f':
432
498
  return new Float32Array(dds, dataOffset, width * height * 4);
433
499
  case 'dxt1':
500
+ case 'bc4':
501
+ case 'bc4-signed':
434
502
  return new Uint8Array(dds, dataOffset, Math.max(4, width) / 4 * Math.max(4, height) / 4 * 8);
435
503
  case 'dxt3':
436
504
  case 'dxt5':
505
+ case 'bc5':
506
+ case 'bc5-signed':
507
+ case 'bc6h':
508
+ case 'bc6h-signed':
509
+ case 'bc7':
510
+ case 'bc7-srgb':
437
511
  return new Uint8Array(dds, dataOffset, Math.max(4, width) / 4 * Math.max(4, height) / 4 * 16);
438
512
  default:
439
513
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"dds.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"dds.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -10,7 +10,7 @@ import { Application } from '../../../app.js';
10
10
  return ext === '.dds';
11
11
  }
12
12
  supportMIMEType(mimeType) {
13
- return mimeType === 'image/dds';
13
+ return mimeType === 'image/dds' || mimeType === 'image/x-dds';
14
14
  }
15
15
  async load(assetManager, url, mimeType, data, srgb, samplerOptions, texture) {
16
16
  const arrayBuffer = data;