@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.
- package/dist/animation/animation.js +25 -117
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +191 -51
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +6 -18
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +16 -6
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +104 -0
- package/dist/animation/morphtarget.js.map +1 -0
- package/dist/animation/morphtrack.js +70 -0
- package/dist/animation/morphtrack.js.map +1 -0
- package/dist/animation/rotationtrack.js +15 -7
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +15 -7
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +107 -5
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +15 -7
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app.js +4 -26
- package/dist/app.js.map +1 -1
- package/dist/asset/assetmanager.js +60 -109
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +77 -3
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +287 -40
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +1 -1
- package/dist/asset/loaders/image/webimage_loader.js +16 -0
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/model.js +16 -9
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +222 -0
- package/dist/{render/temporalcache.js.map → blitter/bilateralblur.js.map} +1 -1
- package/dist/blitter/blitter.js +9 -3
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/depthlimitedgaussion.js +96 -39
- package/dist/blitter/depthlimitedgaussion.js.map +1 -1
- package/dist/blitter/gaussianblur.js +21 -21
- package/dist/camera/camera.js +200 -4
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +6406 -5786
- package/dist/index.js +12 -10
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +15 -4
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/lambert.js +26 -17
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +13 -2
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +103 -31
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +5 -4
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +17 -7
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +5 -5
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -7
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -7
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +2 -2
- package/dist/material/mixins/pbr/common.js +454 -19
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/pbrmr.js +28 -6
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +27 -9
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +128 -23
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/unlit.js +8 -4
- package/dist/material/unlit.js.map +1 -1
- package/dist/posteffect/bloom.js +34 -53
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +48 -58
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +3 -11
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +3 -11
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/posteffect.js +4 -0
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +55 -48
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +536 -0
- package/dist/{material/lit.js.map → posteffect/ssr.js.map} +1 -1
- package/dist/posteffect/tonemap.js +3 -11
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/posteffect/water.js +306 -340
- package/dist/posteffect/water.js.map +1 -1
- package/dist/render/abuffer_oit.js +2 -2
- package/dist/render/clipmap.js +16 -19
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cull_visitor.js +8 -6
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +30 -14
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +70 -22
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +169 -33
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +989 -0
- package/dist/{shaders/framework.js.map → render/fft_wavegenerator.js.map} +1 -1
- package/dist/render/gerstner_wavegenerator.js +265 -0
- package/dist/{material/standard.js.map → render/gerstner_wavegenerator.js.map} +1 -1
- package/dist/render/globalbindgroup_allocator.js +2 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +273 -0
- package/dist/{material/terrainlightmodel.js.map → render/hzb.js.map} +1 -1
- package/dist/render/lightpass.js +68 -28
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +51 -0
- package/dist/render/objectcolorpass.js.map +1 -0
- package/dist/render/render_queue.js +211 -158
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderbundle_wrapper.js +79 -0
- package/dist/render/renderbundle_wrapper.js.map +1 -1
- package/dist/render/renderer.js +151 -35
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +27 -20
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/shadowmap_pass.js +20 -14
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +12 -13
- package/dist/render/sky.js.map +1 -1
- package/dist/render/watermesh.js +94 -828
- package/dist/render/watermesh.js.map +1 -1
- package/dist/render/wavegenerator.js +8 -0
- package/dist/render/wavegenerator.js.map +1 -0
- package/dist/render/weightedblended_oit.js +11 -28
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/batchgroup.js +60 -14
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +24 -3
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js +0 -14
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +5 -5
- package/dist/scene/mesh.js +62 -15
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js +5 -2
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/raycast_visitor.js +4 -2
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +6 -9
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +11 -8
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain/grass.js +10 -2
- package/dist/scene/terrain/grass.js.map +1 -1
- package/dist/scene/terrain/heightfield.js +135 -53
- package/dist/scene/terrain/heightfield.js.map +1 -1
- package/dist/scene/terrain/patch.js +10 -2
- package/dist/scene/terrain/patch.js.map +1 -1
- package/dist/scene/terrain/quadtree.js +2 -2
- package/dist/scene/terrain/terrain.js +1 -1
- package/dist/scene/xform.js +7 -9
- package/dist/scene/xform.js.map +1 -1
- package/dist/shaders/misc.js +10 -1
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +81 -16
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/shadow.js +1 -9
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js +442 -0
- package/dist/{material/terrainmat.js.map → shaders/ssr.js.map} +1 -1
- package/dist/shaders/water.js +377 -250
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +4 -22
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/shadowmapper.js +56 -31
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/vsm.js +4 -24
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/cylinder.js +6 -5
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/utility/bounding_volume.js +1 -53
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/draco/decoder.js +116 -0
- package/dist/utility/draco/decoder.js.map +1 -0
- package/dist/utility/misc.js +93 -0
- package/dist/utility/misc.js.map +1 -0
- package/dist/utility/shprojection.js +2 -7
- package/dist/utility/shprojection.js.map +1 -1
- package/dist/utility/textures/ggxlut.js +213 -0
- package/dist/utility/textures/ggxlut.js.map +1 -0
- package/dist/utility/textures/gradientnoise.js +61 -0
- package/dist/utility/textures/gradientnoise.js.map +1 -0
- package/dist/utility/textures/randomnoise.js +41 -0
- package/dist/utility/textures/randomnoise.js.map +1 -0
- package/dist/values.js +25 -1
- package/dist/values.js.map +1 -1
- package/package.json +5 -8
- package/dist/animation/usertrack.js +0 -47
- package/dist/animation/usertrack.js.map +0 -1
- package/dist/material/grassmat.js +0 -127
- package/dist/material/grassmat.js.map +0 -1
- package/dist/material/lightmodel.js +0 -2074
- package/dist/material/lightmodel.js.map +0 -1
- package/dist/material/lit.js +0 -578
- package/dist/material/mixins/pbr/metallicroughness.js +0 -126
- package/dist/material/mixins/pbr/metallicroughness.js.map +0 -1
- package/dist/material/mixins/pbr/specularglossness.js +0 -104
- package/dist/material/mixins/pbr/specularglossness.js.map +0 -1
- package/dist/material/pbr.js +0 -27
- package/dist/material/pbr.js.map +0 -1
- package/dist/material/standard.js +0 -282
- package/dist/material/terrainlightmodel.js +0 -259
- package/dist/material/terrainmat.js +0 -357
- package/dist/render/depth_pass.js +0 -47
- package/dist/render/depth_pass.js.map +0 -1
- package/dist/render/forward.js +0 -186
- package/dist/render/forward.js.map +0 -1
- package/dist/render/forward_pass.js +0 -137
- package/dist/render/forward_pass.js.map +0 -1
- package/dist/render/helper.js +0 -38
- package/dist/render/helper.js.map +0 -1
- package/dist/render/renderscheme.js +0 -61
- package/dist/render/renderscheme.js.map +0 -1
- package/dist/render/temporalcache.js +0 -222
- package/dist/scene/model.js +0 -111
- package/dist/scene/model.js.map +0 -1
- package/dist/scene/octree_update_visitor.js +0 -20
- package/dist/scene/octree_update_visitor.js.map +0 -1
- package/dist/shaders/builtins.js +0 -110
- package/dist/shaders/builtins.js.map +0 -1
- package/dist/shaders/framework.js +0 -723
- package/dist/shaders/lighting.js +0 -335
- package/dist/shaders/lighting.js.map +0 -1
- package/dist/utility/sheenlut.js +0 -196
- package/dist/utility/sheenlut.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HttpRequest, isPowerOf2, nextPowerOf2
|
|
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,
|
|
170
|
+
/** @internal */ async fetchModelData(scene, url, options) {
|
|
170
171
|
let P = this._models[url];
|
|
171
172
|
if (!P) {
|
|
172
|
-
P = this.loadModel(url,
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
383
|
-
|
|
384
|
-
|
|
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
|
-
|
|
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
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
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;
|