@zephyr3d/scene 0.1.1 → 0.2.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 (146) hide show
  1. package/dist/asset/assetmanager.js +124 -67
  2. package/dist/asset/assetmanager.js.map +1 -1
  3. package/dist/asset/builtin.js +2 -2
  4. package/dist/asset/loaders/gltf/gltf_loader.js +105 -59
  5. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  6. package/dist/asset/loaders/hdr/hdr.js +1 -1
  7. package/dist/blitter/blitter.js +0 -1
  8. package/dist/blitter/blitter.js.map +1 -1
  9. package/dist/blitter/depthlimitedgaussion.js +0 -1
  10. package/dist/blitter/depthlimitedgaussion.js.map +1 -1
  11. package/dist/blitter/gaussianblur.js +0 -1
  12. package/dist/blitter/gaussianblur.js.map +1 -1
  13. package/dist/camera/camera.js +10 -8
  14. package/dist/camera/camera.js.map +1 -1
  15. package/dist/camera/orbit.js +24 -7
  16. package/dist/camera/orbit.js.map +1 -1
  17. package/dist/index.d.ts +1842 -2484
  18. package/dist/index.js +21 -10
  19. package/dist/index.js.map +1 -1
  20. package/dist/material/blinn.js +47 -57
  21. package/dist/material/blinn.js.map +1 -1
  22. package/dist/material/grassmat.js +127 -0
  23. package/dist/material/grassmat.js.map +1 -0
  24. package/dist/material/grassmaterial.js +66 -194
  25. package/dist/material/grassmaterial.js.map +1 -1
  26. package/dist/material/lambert.js +48 -22
  27. package/dist/material/lambert.js.map +1 -1
  28. package/dist/material/lightmodel.js +4 -4
  29. package/dist/material/material.js +100 -59
  30. package/dist/material/material.js.map +1 -1
  31. package/dist/material/meshmaterial.js +227 -186
  32. package/dist/material/meshmaterial.js.map +1 -1
  33. package/dist/material/mixins/albedocolor.js +29 -100
  34. package/dist/material/mixins/albedocolor.js.map +1 -1
  35. package/dist/material/mixins/foliage.js +47 -0
  36. package/dist/material/mixins/foliage.js.map +1 -0
  37. package/dist/material/mixins/ggxlut.js +213 -0
  38. package/dist/material/mixins/ggxlut.js.map +1 -0
  39. package/dist/material/mixins/lightmodel/blinnphong.js +89 -0
  40. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -0
  41. package/dist/material/mixins/lightmodel/lambert.js +58 -0
  42. package/dist/material/mixins/lightmodel/lambert.js.map +1 -0
  43. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +132 -0
  44. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  45. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +105 -0
  46. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  47. package/dist/material/mixins/lit.js +464 -0
  48. package/dist/material/mixins/lit.js.map +1 -0
  49. package/dist/material/mixins/pbr/common.js +451 -0
  50. package/dist/material/mixins/pbr/common.js.map +1 -0
  51. package/dist/material/mixins/pbr/metallicroughness.js +126 -0
  52. package/dist/material/mixins/pbr/metallicroughness.js.map +1 -0
  53. package/dist/material/mixins/pbr/specularglossness.js +104 -0
  54. package/dist/material/mixins/pbr/specularglossness.js.map +1 -0
  55. package/dist/material/mixins/texture.js +157 -0
  56. package/dist/material/mixins/texture.js.map +1 -0
  57. package/dist/material/mixins/vertexcolor.js +16 -11
  58. package/dist/material/mixins/vertexcolor.js.map +1 -1
  59. package/dist/material/pbrmr.js +65 -0
  60. package/dist/material/pbrmr.js.map +1 -0
  61. package/dist/material/pbrsg.js +64 -0
  62. package/dist/material/pbrsg.js.map +1 -0
  63. package/dist/material/shader/helper.js +903 -0
  64. package/dist/material/shader/helper.js.map +1 -0
  65. package/dist/material/terrainmat.js +357 -0
  66. package/dist/material/terrainmat.js.map +1 -0
  67. package/dist/material/terrainmaterial.js +311 -103
  68. package/dist/material/terrainmaterial.js.map +1 -1
  69. package/dist/material/unlit.js +12 -9
  70. package/dist/material/unlit.js.map +1 -1
  71. package/dist/posteffect/bloom.js +8 -6
  72. package/dist/posteffect/bloom.js.map +1 -1
  73. package/dist/posteffect/compositor.js +14 -6
  74. package/dist/posteffect/compositor.js.map +1 -1
  75. package/dist/posteffect/posteffect.js +1 -1
  76. package/dist/posteffect/sao.js +8 -5
  77. package/dist/posteffect/sao.js.map +1 -1
  78. package/dist/posteffect/tonemap.js +2 -2
  79. package/dist/posteffect/water.js +10 -8
  80. package/dist/posteffect/water.js.map +1 -1
  81. package/dist/render/cluster_light.js +6 -5
  82. package/dist/render/cluster_light.js.map +1 -1
  83. package/dist/render/depthpass.js +46 -0
  84. package/dist/render/depthpass.js.map +1 -0
  85. package/dist/render/envlight.js +26 -24
  86. package/dist/render/envlight.js.map +1 -1
  87. package/dist/render/fullscreenquad.js +38 -0
  88. package/dist/render/fullscreenquad.js.map +1 -0
  89. package/dist/render/lightpass.js +98 -0
  90. package/dist/render/lightpass.js.map +1 -0
  91. package/dist/render/render_queue.js +2 -1
  92. package/dist/render/render_queue.js.map +1 -1
  93. package/dist/render/renderer.js +191 -0
  94. package/dist/render/renderer.js.map +1 -0
  95. package/dist/render/renderpass.js +10 -8
  96. package/dist/render/renderpass.js.map +1 -1
  97. package/dist/render/shadowmap_pass.js +3 -4
  98. package/dist/render/shadowmap_pass.js.map +1 -1
  99. package/dist/render/sky.js +31 -15
  100. package/dist/render/sky.js.map +1 -1
  101. package/dist/scene/environment.js +8 -6
  102. package/dist/scene/environment.js.map +1 -1
  103. package/dist/scene/graph_node.js +3 -0
  104. package/dist/scene/graph_node.js.map +1 -1
  105. package/dist/scene/mesh.js +13 -12
  106. package/dist/scene/mesh.js.map +1 -1
  107. package/dist/scene/scene.js +11 -15
  108. package/dist/scene/scene.js.map +1 -1
  109. package/dist/scene/scene_node.js +10 -16
  110. package/dist/scene/scene_node.js.map +1 -1
  111. package/dist/scene/terrain/grass.js +4 -14
  112. package/dist/scene/terrain/grass.js.map +1 -1
  113. package/dist/scene/terrain/patch.js +3 -3
  114. package/dist/scene/terrain/terrain.js +4 -9
  115. package/dist/scene/terrain/terrain.js.map +1 -1
  116. package/dist/shaders/framework.js +17 -3
  117. package/dist/shaders/framework.js.map +1 -1
  118. package/dist/shaders/misc.js +13 -161
  119. package/dist/shaders/misc.js.map +1 -1
  120. package/dist/shaders/noise.js +7 -7
  121. package/dist/shaders/pbr.js +1 -82
  122. package/dist/shaders/pbr.js.map +1 -1
  123. package/dist/shaders/shadow.js +33 -31
  124. package/dist/shaders/shadow.js.map +1 -1
  125. package/dist/shaders/water.js +3 -9
  126. package/dist/shaders/water.js.map +1 -1
  127. package/dist/shadow/esm.js +11 -9
  128. package/dist/shadow/esm.js.map +1 -1
  129. package/dist/shadow/pcf_opt.js +15 -15
  130. package/dist/shadow/pcf_pd.js +15 -15
  131. package/dist/shadow/shadowmapper.js +13 -15
  132. package/dist/shadow/shadowmapper.js.map +1 -1
  133. package/dist/shadow/ssm.js +21 -55
  134. package/dist/shadow/ssm.js.map +1 -1
  135. package/dist/shadow/vsm.js +15 -13
  136. package/dist/shadow/vsm.js.map +1 -1
  137. package/dist/shapes/torus.js +2 -2
  138. package/dist/utility/bounding_volume.js +27 -27
  139. package/dist/utility/pmrem.js +4 -4
  140. package/dist/utility/sheenlut.js +196 -0
  141. package/dist/utility/sheenlut.js.map +1 -0
  142. package/dist/utility/shprojection.js +0 -1
  143. package/dist/utility/shprojection.js.map +1 -1
  144. package/dist/values.js +11 -8
  145. package/dist/values.js.map +1 -1
  146. package/package.json +9 -9
@@ -14,7 +14,6 @@ import { ScaleTrack } from '../animation/scaletrack.js';
14
14
  import { Skeleton } from '../animation/skeleton.js';
15
15
  import { BoundingBox } from '../utility/bounding_volume.js';
16
16
  import { Application } from '../app.js';
17
- import '../shaders/framework.js';
18
17
  import '@zephyr3d/device';
19
18
  import { CopyBlitter } from '../blitter/copy.js';
20
19
  import { getSheenLutLoader, getTestCubemapLoader } from './builtin.js';
@@ -22,9 +21,9 @@ import { GraphNode } from '../scene/graph_node.js';
22
21
  import { BUILTIN_ASSET_TEXTURE_SHEEN_LUT, BUILTIN_ASSET_TEST_CUBEMAP } from '../values.js';
23
22
  import { TGALoader } from './loaders/image/tga_Loader.js';
24
23
 
25
- /**
26
- * The asset manager
27
- * @public
24
+ /**
25
+ * The asset manager
26
+ * @public
28
27
  */ class AssetManager {
29
28
  /** @internal */ static _builtinTextures = {};
30
29
  /** @internal */ static _builtinTextureLoaders = {
@@ -38,8 +37,8 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
38
37
  /** @internal */ _models;
39
38
  /** @internal */ _binaryDatas;
40
39
  /** @internal */ _textDatas;
41
- /**
42
- * Creates an instance of AssetManager
40
+ /**
41
+ * Creates an instance of AssetManager
43
42
  */ constructor(){
44
43
  this._httpRequest = new HttpRequest();
45
44
  this._textureLoaders = [
@@ -56,72 +55,99 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
56
55
  this._binaryDatas = {};
57
56
  this._textDatas = {};
58
57
  }
59
- /**
60
- * HttpRequest instance of the asset manager
58
+ /**
59
+ * HttpRequest instance of the asset manager
61
60
  */ get httpRequest() {
62
61
  return this._httpRequest;
63
62
  }
64
- /**
65
- * Removes all cached assets
63
+ /**
64
+ * Removes all cached assets
66
65
  */ clearCache() {
67
66
  this._textures = {};
68
67
  this._models = {};
69
68
  this._binaryDatas = {};
70
69
  this._textDatas = {};
71
70
  }
72
- /**
73
- * Adds a texture loader to the asset manager
74
- *
75
- * @remarks
76
- * TODO: this should be a static method
77
- *
78
- * @param loader - The texture loader to be added
71
+ /**
72
+ * Remove and dispose all cached assets
73
+ */ purgeCache() {
74
+ for(const k in this._textures){
75
+ this._textures[k].then((tex)=>tex?.dispose()).catch((err)=>{});
76
+ delete this._textures[k];
77
+ }
78
+ this._models = {};
79
+ this._binaryDatas = {};
80
+ this._textDatas = {};
81
+ }
82
+ /**
83
+ * Adds a texture loader to the asset manager
84
+ *
85
+ * @remarks
86
+ * TODO: this should be a static method
87
+ *
88
+ * @param loader - The texture loader to be added
79
89
  */ addTextureLoader(loader) {
80
90
  if (loader) {
81
91
  this._textureLoaders.unshift(loader);
82
92
  }
83
93
  }
84
- /**
85
- * Adds a model loader to the asset manager
86
- *
87
- * @remarks
88
- * TODO: this should be a static method
89
- *
90
- * @param loader - The model loader to be added
94
+ /**
95
+ * Adds a model loader to the asset manager
96
+ *
97
+ * @remarks
98
+ * TODO: this should be a static method
99
+ *
100
+ * @param loader - The model loader to be added
91
101
  */ addModelLoader(loader) {
92
102
  if (loader) {
93
103
  this._modelLoaders.unshift(loader);
94
104
  }
95
105
  }
96
- /**
97
- * Fetches a text resource from a given URL
98
- * @param url - The URL from where to fetch the resource
99
- * @returns The fetched text
100
- */ async fetchTextData(url) {
106
+ /**
107
+ * Fetches a text resource from a given URL
108
+ * @param url - The URL from where to fetch the resource
109
+ * @param postProcess - A function that will be involved when the text data was loaded.
110
+ *
111
+ * @remarks
112
+ * If a text data has already been loaded, the function will ignore the
113
+ * postProcess parameter and directly return the text loaded previously.
114
+ * To load the same text with different postProcess parameters,
115
+ * use different AssetManager instances separately.
116
+ *
117
+ * @returns The fetched text
118
+ */ async fetchTextData(url, postProcess) {
101
119
  let P = this._textDatas[url];
102
120
  if (!P) {
103
- P = this.loadTextData(url);
121
+ P = this.loadTextData(url, postProcess);
104
122
  this._textDatas[url] = P;
105
123
  }
106
124
  return P;
107
125
  }
108
- /**
109
- * Fetches a binary resource from a given URL
110
- * @param url - The URL from where to fetch the resource
111
- * @returns
112
- */ async fetchBinaryData(url) {
126
+ /**
127
+ * Fetches a binary resource from a given URL
128
+ * @param url - The URL from where to fetch the resource
129
+ * @param postProcess - A function that will be involved when the binary data was loaded.
130
+ *
131
+ * @remarks
132
+ * If a binary data has already been loaded, the function will ignore the
133
+ * postProcess parameter and directly return the data loaded previously.
134
+ * To load the same data with different postProcess parameters,
135
+ * use different AssetManager instances separately.
136
+ *
137
+ * @returns Binary data as ArrayBuffer
138
+ */ async fetchBinaryData(url, postProcess) {
113
139
  let P = this._binaryDatas[url];
114
140
  if (!P) {
115
- P = this.loadBinaryData(url);
141
+ P = this.loadBinaryData(url, postProcess);
116
142
  this._binaryDatas[url] = P;
117
143
  }
118
144
  return P;
119
145
  }
120
- /**
121
- * Fetches a texture resource from a given URL
122
- * @param url - The URL from where to fetch the resource
123
- * @param options - Options for texture fetching
124
- * @returns The fetched texture
146
+ /**
147
+ * Fetches a texture resource from a given URL
148
+ * @param url - The URL from where to fetch the resource
149
+ * @param options - Options for texture fetching
150
+ * @returns The fetched texture
125
151
  */ async fetchTexture(url, options) {
126
152
  if (options?.texture) {
127
153
  return this.loadTexture(url, options.mimeType ?? null, !options.linearColorSpace, options.samplerOptions, options.texture);
@@ -141,29 +167,53 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
141
167
  return P;
142
168
  }
143
169
  }
144
- /** @internal */ async fetchModelData(scene, url, mimeType) {
170
+ /** @internal */ async fetchModelData(scene, url, mimeType, postProcess) {
145
171
  let P = this._models[url];
146
172
  if (!P) {
147
- P = this.loadModel(url, mimeType);
173
+ P = this.loadModel(url, mimeType, postProcess);
148
174
  this._models[url] = P;
149
175
  }
150
176
  return P;
151
177
  }
152
- /**
153
- * Fetches a model resource from a given URL and adds it to a scene
154
- * @param scene - The scene to which the model node belongs
155
- * @param url - The URL from where to fetch the resource
156
- * @param mimeType - The MIME type of the model resource
157
- * @returns The created model node
158
- */ async fetchModel(scene, url, mimeType) {
159
- const sharedModel = await this.fetchModelData(scene, url, mimeType);
178
+ /**
179
+ * Fetches a model resource from a given URL and adds it to a scene
180
+ * @param scene - The scene to which the model node belongs
181
+ * @param url - The URL from where to fetch the resource
182
+ * @param mimeType - The MIME type of the model resource, if not provided, model type will be determined by file extension
183
+ * @param postProcess - A function that will be involved when the model was loaded.
184
+ *
185
+ * @remarks
186
+ * If a model has already been loaded, the function will ignore the
187
+ * postProcess parameter and directly return the model loaded previously.
188
+ * To load the same model with different postProcess parameters,
189
+ * use different AssetManager instances separately.
190
+ *
191
+ * @returns The created model node
192
+ */ async fetchModel(scene, url, mimeType, postProcess) {
193
+ const sharedModel = await this.fetchModelData(scene, url, mimeType, postProcess);
160
194
  return this.createSceneNode(scene, sharedModel);
161
195
  }
162
- /** @internal */ async loadTextData(url) {
163
- return this._httpRequest.requestText(url);
196
+ /** @internal */ async loadTextData(url, postProcess) {
197
+ let text = await this._httpRequest.requestText(url);
198
+ if (postProcess) {
199
+ try {
200
+ text = postProcess(text);
201
+ } catch (err) {
202
+ throw new Error(`Load text data post process failed: ${err}`);
203
+ }
204
+ }
205
+ return text;
164
206
  }
165
- /** @internal */ async loadBinaryData(url) {
166
- return this._httpRequest.requestArrayBuffer(url);
207
+ /** @internal */ async loadBinaryData(url, postProcess) {
208
+ let data = await this._httpRequest.requestArrayBuffer(url);
209
+ if (postProcess) {
210
+ try {
211
+ data = postProcess(data);
212
+ } catch (err) {
213
+ throw new Error(`Load binary data post process failed: ${err}`);
214
+ }
215
+ }
216
+ return data;
167
217
  }
168
218
  /** @internal */ async loadTexture(url, mimeType, srgb, samplerOptions, texture) {
169
219
  const data = await this._httpRequest.requestArrayBuffer(url);
@@ -254,7 +304,7 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
254
304
  return tex;
255
305
  }
256
306
  }
257
- /** @internal */ async loadModel(url, mimeType, name) {
307
+ /** @internal */ async loadModel(url, mimeType, postProcess) {
258
308
  const data = await this.httpRequest.requestBlob(url);
259
309
  const filename = new URL(url, new URL(location.href).origin).pathname.split('/').filter((val)=>!!val).slice(-1)[0];
260
310
  const p = filename ? filename.lastIndexOf('.') : -1;
@@ -263,19 +313,26 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
263
313
  if (!loader.supportExtension(ext) && !loader.supportMIMEType(mimeType || data.type)) {
264
314
  continue;
265
315
  }
266
- const model = await loader.load(this, url, mimeType || data.type, data);
316
+ let model = await loader.load(this, url, mimeType || data.type, data);
267
317
  if (!model) {
268
318
  throw new Error(`Load asset failed: ${url}`);
269
319
  }
270
- model.name = name || filename;
320
+ if (postProcess) {
321
+ try {
322
+ model = postProcess(model);
323
+ } catch (err) {
324
+ throw new Error(`Model loader post process failed: ${err}`);
325
+ }
326
+ }
327
+ model.name = filename;
271
328
  return model;
272
329
  }
273
330
  throw new Error(`Can not find loader for asset ${url}`);
274
331
  }
275
- /**
276
- * Fetches a built-in texture
277
- * @param name - Name of the built-in texture
278
- * @returns The built-in texture
332
+ /**
333
+ * Fetches a built-in texture
334
+ * @param name - Name of the built-in texture
335
+ * @returns The built-in texture
279
336
  */ async fetchBuiltinTexture(name, texture) {
280
337
  const loader = AssetManager._builtinTextureLoaders[name];
281
338
  if (!loader) {
@@ -323,7 +380,7 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
323
380
  } else if (track.type === 'rotation') {
324
381
  animation.addTrack(nodeMap.get(track.node), new RotationTrack(track.interpolator));
325
382
  } else {
326
- throw new Error(`Could not load model: invalid animation track type: ${track.type}`);
383
+ console.error(`Invalid animation track type: ${track.type}`);
327
384
  }
328
385
  }
329
386
  for (const sk of animationData.skeletons){
@@ -346,10 +403,10 @@ import { TGALoader } from './loaders/image/tga_Loader.js';
346
403
  animationSet
347
404
  };
348
405
  }
349
- /**
350
- * Sets the loader for a given builtin-texture
351
- * @param name - Name of the builtin texture
352
- * @param loader - Loader for the builtin texture
406
+ /**
407
+ * Sets the loader for a given builtin-texture
408
+ * @param name - Name of the builtin texture
409
+ * @param loader - Loader for the builtin texture
353
410
  */ static setBuiltinTextureLoader(name, loader) {
354
411
  if (loader) {
355
412
  this._builtinTextureLoaders[name] = loader;
@@ -1 +1 @@
1
- {"version":3,"file":"assetmanager.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"assetmanager.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -349,12 +349,12 @@ interface MicrofacetDistributionSample {
349
349
  const image = new Uint16Array(textureSize * textureSize * 4);
350
350
  let p = 0;
351
351
  const one = encodeF16(1);
352
- for(let y = 0; y < textureSize; y++){
352
+ for(let y = textureSize - 1; y >= 0; y--){
353
353
  const coord = Math.min(Math.max((y + 0.5) / textureSize, 0), 1);
354
354
  const roughness = coord * coord;
355
355
  for(let x = 0; x < textureSize; x++){
356
356
  const NdotV = Math.min(Math.max((x + 0.5) / textureSize, 0), 1);
357
- const c = dfvCharlieUniform(NdotV, roughness, 4096);
357
+ const c = dfvCharlieUniform(NdotV, roughness, 512);
358
358
  const f16 = encodeF16(c);
359
359
  image[p++] = 0;
360
360
  image[p++] = 0;
@@ -2,16 +2,17 @@ import { Matrix4x4, Vector3, Quaternion, Interpolator, Vector4 } from '@zephyr3d
2
2
  import { AssetScene, AssetSkeleton, SharedModel } from '../../model.js';
3
3
  import { BoundingBox } from '../../../utility/bounding_volume.js';
4
4
  import { Primitive } from '../../../render/primitive.js';
5
- import '../../../material/material.js';
6
- import '@zephyr3d/device';
7
- import '../../../shaders/framework.js';
8
- import { Application } from '../../../app.js';
9
- import '../../../render/scatteringlut.js';
5
+ import '../../../material/shader/helper.js';
10
6
  import '../../../material/lambert.js';
11
7
  import '../../../material/blinn.js';
12
8
  import { UnlitMaterial } from '../../../material/unlit.js';
13
- import { PBRSpecularGlossinessMaterial, PBRMetallicRoughnessMaterial } from '../../../material/pbr.js';
14
- import '../../../material/lightmodel.js';
9
+ import '../../../material/material.js';
10
+ import '../../../material/meshmaterial.js';
11
+ import '../../../material/grassmaterial.js';
12
+ import '../../../material/terrainmaterial.js';
13
+ import { PBRMetallicRoughnessMaterial } from '../../../material/pbrmr.js';
14
+ import { PBRSpecularGlossinessMaterial } from '../../../material/pbrsg.js';
15
+ import { Application } from '../../../app.js';
15
16
  import { GLTFAccessor, ComponentType } from './helpers.js';
16
17
  import { AbstractModelLoader } from '../loader.js';
17
18
 
@@ -379,13 +380,13 @@ import { AbstractModelLoader } from '../loader.js';
379
380
  async _createMaterial(assetManager, assetMaterial) {
380
381
  if (assetMaterial.type === 'unlit') {
381
382
  const unlitAssetMaterial = assetMaterial;
382
- const unlitMaterial = new UnlitMaterial; //new NewLambertMaterial();// new TestLitMaterial();// new UnlitMaterial();
383
+ const unlitMaterial = new UnlitMaterial(); //new NewLambertMaterial();// new TestLitMaterial();// new UnlitMaterial();
383
384
  unlitMaterial.albedoColor = unlitAssetMaterial.diffuse ?? Vector4.one();
384
385
  if (unlitAssetMaterial.diffuseMap) {
385
386
  unlitMaterial.albedoTexture = unlitAssetMaterial.diffuseMap.texture;
386
387
  unlitMaterial.albedoTextureSampler = unlitAssetMaterial.diffuseMap.sampler;
387
388
  unlitMaterial.albedoTexCoordIndex = unlitAssetMaterial.diffuseMap.texCoord;
388
- unlitMaterial.albedoTexMatrix = unlitAssetMaterial.diffuseMap.transform;
389
+ unlitMaterial.albedoTexCoordMatrix = unlitAssetMaterial.diffuseMap.transform;
389
390
  }
390
391
  unlitMaterial.vertexColor = unlitAssetMaterial.common.vertexColor;
391
392
  if (assetMaterial.common.alphaMode === 'blend') {
@@ -401,33 +402,48 @@ import { AbstractModelLoader } from '../loader.js';
401
402
  } else if (assetMaterial.type === 'pbrSpecularGlossiness') {
402
403
  const assetPBRMaterial = assetMaterial;
403
404
  const pbrMaterial = new PBRSpecularGlossinessMaterial();
404
- pbrMaterial.lightModel.ior = assetPBRMaterial.ior;
405
- pbrMaterial.lightModel.albedo = assetPBRMaterial.diffuse;
406
- pbrMaterial.lightModel.specularFactor = new Vector4(assetPBRMaterial.specular.x, assetPBRMaterial.specular.y, assetPBRMaterial.specular.z, 1);
407
- pbrMaterial.lightModel.glossinessFactor = assetPBRMaterial.glossness;
405
+ pbrMaterial.ior = assetPBRMaterial.ior;
406
+ pbrMaterial.albedoColor = assetPBRMaterial.diffuse;
407
+ pbrMaterial.specularFactor = new Vector4(assetPBRMaterial.specular.x, assetPBRMaterial.specular.y, assetPBRMaterial.specular.z, 1);
408
+ pbrMaterial.glossinessFactor = assetPBRMaterial.glossness;
408
409
  if (assetPBRMaterial.diffuseMap) {
409
- pbrMaterial.lightModel.setAlbedoMap(assetPBRMaterial.diffuseMap.texture, assetPBRMaterial.diffuseMap.sampler, assetPBRMaterial.diffuseMap.texCoord, assetPBRMaterial.diffuseMap.transform);
410
+ pbrMaterial.albedoTexture = assetPBRMaterial.diffuseMap.texture;
411
+ pbrMaterial.albedoTextureSampler = assetPBRMaterial.diffuseMap.sampler;
412
+ pbrMaterial.albedoTexCoordIndex = assetPBRMaterial.diffuseMap.texCoord;
413
+ pbrMaterial.albedoTexCoordMatrix = assetPBRMaterial.diffuseMap.transform;
410
414
  }
411
415
  if (assetPBRMaterial.common.normalMap) {
412
- pbrMaterial.lightModel.setNormalMap(assetPBRMaterial.common.normalMap.texture, assetPBRMaterial.common.normalMap.sampler, assetPBRMaterial.common.normalMap.texCoord, assetPBRMaterial.common.normalMap.transform);
416
+ pbrMaterial.normalTexture = assetPBRMaterial.common.normalMap.texture;
417
+ pbrMaterial.normalTextureSampler = assetPBRMaterial.common.normalMap.sampler;
418
+ pbrMaterial.normalTexCoordIndex = assetPBRMaterial.common.normalMap.texCoord;
419
+ pbrMaterial.normalTexCoordMatrix = assetPBRMaterial.common.normalMap.transform;
413
420
  }
414
- pbrMaterial.lightModel.normalScale = assetPBRMaterial.common.bumpScale;
421
+ pbrMaterial.normalScale = assetPBRMaterial.common.bumpScale;
415
422
  if (assetPBRMaterial.common.emissiveMap) {
416
- pbrMaterial.lightModel.setEmissiveMap(assetPBRMaterial.common.emissiveMap.texture, assetPBRMaterial.common.emissiveMap.sampler, assetPBRMaterial.common.emissiveMap.texCoord, assetPBRMaterial.common.emissiveMap.transform);
423
+ pbrMaterial.emissiveTexture = assetPBRMaterial.common.emissiveMap.texture;
424
+ pbrMaterial.emissiveTextureSampler = assetPBRMaterial.common.emissiveMap.sampler;
425
+ pbrMaterial.emissiveTexCoordIndex = assetPBRMaterial.common.emissiveMap.texCoord;
426
+ pbrMaterial.emissiveTexCoordMatrix = assetPBRMaterial.common.emissiveMap.transform;
417
427
  }
418
- pbrMaterial.lightModel.emissiveColor = assetPBRMaterial.common.emissiveColor;
419
- pbrMaterial.lightModel.emissiveStrength = assetPBRMaterial.common.emissiveStrength;
428
+ pbrMaterial.emissiveColor = assetPBRMaterial.common.emissiveColor;
429
+ pbrMaterial.emissiveStrength = assetPBRMaterial.common.emissiveStrength;
420
430
  if (assetPBRMaterial.common.occlusionMap) {
421
- pbrMaterial.lightModel.setOcclusionMap(assetPBRMaterial.common.occlusionMap.texture, assetPBRMaterial.common.occlusionMap.sampler, assetPBRMaterial.common.occlusionMap.texCoord, assetPBRMaterial.common.occlusionMap.transform);
431
+ pbrMaterial.occlusionTexture = assetPBRMaterial.common.occlusionMap.texture;
432
+ pbrMaterial.occlusionTextureSampler = assetPBRMaterial.common.occlusionMap.sampler;
433
+ pbrMaterial.occlusionTexCoordIndex = assetPBRMaterial.common.occlusionMap.texCoord;
434
+ pbrMaterial.occlusionTexCoordMatrix = assetPBRMaterial.common.occlusionMap.transform;
422
435
  }
423
- pbrMaterial.lightModel.occlusionStrength = assetPBRMaterial.common.occlusionStrength;
436
+ pbrMaterial.occlusionStrength = assetPBRMaterial.common.occlusionStrength;
424
437
  if (assetPBRMaterial.specularGlossnessMap) {
425
- pbrMaterial.lightModel.setSpecularMap(assetPBRMaterial.specularGlossnessMap.texture, assetPBRMaterial.specularGlossnessMap.sampler, assetPBRMaterial.specularGlossnessMap.texCoord, assetPBRMaterial.specularGlossnessMap.transform);
438
+ pbrMaterial.specularTexture = assetPBRMaterial.specularGlossnessMap.texture;
439
+ pbrMaterial.specularTextureSampler = assetPBRMaterial.specularGlossnessMap.sampler;
440
+ pbrMaterial.specularTexCoordIndex = assetPBRMaterial.specularGlossnessMap.texCoord;
441
+ pbrMaterial.specularTexCoordMatrix = assetPBRMaterial.specularGlossnessMap.transform;
426
442
  }
427
443
  pbrMaterial.vertexTangent = assetPBRMaterial.common.useTangent;
428
444
  pbrMaterial.vertexColor = assetPBRMaterial.common.vertexColor;
429
445
  if (assetPBRMaterial.common.alphaMode === 'blend') {
430
- pbrMaterial.alphaBlend = true;
446
+ pbrMaterial.blendMode = 'blend';
431
447
  } else if (assetPBRMaterial.common.alphaMode === 'mask') {
432
448
  pbrMaterial.alphaCutoff = assetPBRMaterial.common.alphaCutoff;
433
449
  }
@@ -440,73 +456,103 @@ import { AbstractModelLoader } from '../loader.js';
440
456
  } else if (assetMaterial.type === 'pbrMetallicRoughness') {
441
457
  const assetPBRMaterial = assetMaterial;
442
458
  const pbrMaterial = new PBRMetallicRoughnessMaterial();
443
- pbrMaterial.lightModel.ior = assetPBRMaterial.ior;
444
- pbrMaterial.lightModel.albedo = assetPBRMaterial.diffuse;
445
- pbrMaterial.lightModel.metallic = assetPBRMaterial.metallic;
446
- pbrMaterial.lightModel.roughness = assetPBRMaterial.roughness;
459
+ pbrMaterial.ior = assetPBRMaterial.ior;
460
+ pbrMaterial.albedoColor = assetPBRMaterial.diffuse;
461
+ pbrMaterial.metallic = assetPBRMaterial.metallic;
462
+ pbrMaterial.roughness = assetPBRMaterial.roughness;
447
463
  if (assetPBRMaterial.diffuseMap) {
448
- pbrMaterial.lightModel.setAlbedoMap(assetPBRMaterial.diffuseMap.texture, assetPBRMaterial.diffuseMap.sampler, assetPBRMaterial.diffuseMap.texCoord, assetPBRMaterial.diffuseMap.transform);
464
+ pbrMaterial.albedoTexture = assetPBRMaterial.diffuseMap.texture;
465
+ pbrMaterial.albedoTextureSampler = assetPBRMaterial.diffuseMap.sampler;
466
+ pbrMaterial.albedoTexCoordIndex = assetPBRMaterial.diffuseMap.texCoord;
467
+ pbrMaterial.albedoTexCoordMatrix = assetPBRMaterial.diffuseMap.transform;
449
468
  }
450
469
  if (assetPBRMaterial.common.normalMap) {
451
- pbrMaterial.lightModel.setNormalMap(assetPBRMaterial.common.normalMap.texture, assetPBRMaterial.common.normalMap.sampler, assetPBRMaterial.common.normalMap.texCoord, assetPBRMaterial.common.normalMap.transform);
470
+ pbrMaterial.normalTexture = assetPBRMaterial.common.normalMap.texture;
471
+ pbrMaterial.normalTextureSampler = assetPBRMaterial.common.normalMap.sampler;
472
+ pbrMaterial.normalTexCoordIndex = assetPBRMaterial.common.normalMap.texCoord;
473
+ pbrMaterial.normalTexCoordMatrix = assetPBRMaterial.common.normalMap.transform;
452
474
  }
453
- pbrMaterial.lightModel.normalScale = assetPBRMaterial.common.bumpScale;
475
+ pbrMaterial.normalScale = assetPBRMaterial.common.bumpScale;
454
476
  if (assetPBRMaterial.common.emissiveMap) {
455
- pbrMaterial.lightModel.setEmissiveMap(assetPBRMaterial.common.emissiveMap.texture, assetPBRMaterial.common.emissiveMap.sampler, assetPBRMaterial.common.emissiveMap.texCoord, assetPBRMaterial.common.emissiveMap.transform);
477
+ pbrMaterial.emissiveTexture = assetPBRMaterial.common.emissiveMap.texture;
478
+ pbrMaterial.emissiveTextureSampler = assetPBRMaterial.common.emissiveMap.sampler;
479
+ pbrMaterial.emissiveTexCoordIndex = assetPBRMaterial.common.emissiveMap.texCoord;
480
+ pbrMaterial.emissiveTexCoordMatrix = assetPBRMaterial.common.emissiveMap.transform;
456
481
  }
457
- pbrMaterial.lightModel.emissiveColor = assetPBRMaterial.common.emissiveColor;
458
- pbrMaterial.lightModel.emissiveStrength = assetPBRMaterial.common.emissiveStrength;
482
+ pbrMaterial.emissiveColor = assetPBRMaterial.common.emissiveColor;
483
+ pbrMaterial.emissiveStrength = assetPBRMaterial.common.emissiveStrength;
459
484
  if (assetPBRMaterial.common.occlusionMap) {
460
- pbrMaterial.lightModel.setOcclusionMap(assetPBRMaterial.common.occlusionMap.texture, assetPBRMaterial.common.occlusionMap.sampler, assetPBRMaterial.common.occlusionMap.texCoord, assetPBRMaterial.common.occlusionMap.transform);
485
+ pbrMaterial.occlusionTexture = assetPBRMaterial.common.occlusionMap.texture;
486
+ pbrMaterial.occlusionTextureSampler = assetPBRMaterial.common.occlusionMap.sampler;
487
+ pbrMaterial.occlusionTexCoordIndex = assetPBRMaterial.common.occlusionMap.texCoord;
488
+ pbrMaterial.occlusionTexCoordMatrix = assetPBRMaterial.common.occlusionMap.transform;
489
+ pbrMaterial.occlusionStrength = assetPBRMaterial.common.occlusionStrength;
461
490
  }
462
- pbrMaterial.lightModel.occlusionStrength = assetPBRMaterial.common.occlusionStrength;
463
491
  if (assetPBRMaterial.metallicMap) {
464
- pbrMaterial.lightModel.setMetallicMap(assetPBRMaterial.metallicMap.texture, assetPBRMaterial.metallicMap.sampler, assetPBRMaterial.metallicMap.texCoord, assetPBRMaterial.metallicMap.transform);
492
+ pbrMaterial.metallicRoughnessTexture = assetPBRMaterial.metallicMap.texture;
493
+ pbrMaterial.metallicRoughnessTextureSampler = assetPBRMaterial.metallicMap.sampler;
494
+ pbrMaterial.metallicRoughnessTexCoordIndex = assetPBRMaterial.metallicMap.texCoord;
495
+ pbrMaterial.metallicRoughnessTexCoordMatrix = assetPBRMaterial.metallicMap.transform;
465
496
  }
466
- pbrMaterial.lightModel.metallicIndex = assetPBRMaterial.metallicIndex;
467
- pbrMaterial.lightModel.roughnessIndex = assetPBRMaterial.roughnessIndex;
468
- pbrMaterial.lightModel.specularFactor = assetPBRMaterial.specularFactor;
497
+ pbrMaterial.specularFactor = assetPBRMaterial.specularFactor;
469
498
  if (assetPBRMaterial.specularMap) {
470
- pbrMaterial.lightModel.setSpecularMap(assetPBRMaterial.specularMap.texture, assetPBRMaterial.specularMap.sampler, assetPBRMaterial.specularMap.texCoord, assetPBRMaterial.specularMap.transform);
499
+ pbrMaterial.specularTexture = assetPBRMaterial.specularMap.texture;
500
+ pbrMaterial.specularTextureSampler = assetPBRMaterial.specularMap.sampler;
501
+ pbrMaterial.specularTexCoordIndex = assetPBRMaterial.specularMap.texCoord;
502
+ pbrMaterial.specularTexCoordMatrix = assetPBRMaterial.specularMap.transform;
471
503
  }
472
504
  if (assetPBRMaterial.specularColorMap) {
473
- pbrMaterial.lightModel.setSpecularColorMap(assetPBRMaterial.specularColorMap.texture, assetPBRMaterial.specularColorMap.sampler, assetPBRMaterial.specularColorMap.texCoord, assetPBRMaterial.specularColorMap.transform);
505
+ pbrMaterial.specularColorTexture = assetPBRMaterial.specularColorMap.texture;
506
+ pbrMaterial.specularColorTextureSampler = assetPBRMaterial.specularColorMap.sampler;
507
+ pbrMaterial.specularColorTexCoordIndex = assetPBRMaterial.specularColorMap.texCoord;
508
+ pbrMaterial.specularColorTexCoordMatrix = assetPBRMaterial.specularColorMap.transform;
474
509
  }
475
510
  if (assetPBRMaterial.sheen) {
476
511
  const sheen = assetPBRMaterial.sheen;
477
- pbrMaterial.lightModel.useSheen = true;
478
- pbrMaterial.lightModel.sheenColorFactor = sheen.sheenColorFactor;
479
- pbrMaterial.lightModel.sheenRoughnessFactor = sheen.sheenRoughnessFactor;
480
- /*
481
- pbrMaterial.lightModel.setSheenLut(
482
- await assetManager.fetchBuiltinTexture(BUILTIN_ASSET_TEXTURE_SHEEN_LUT)
483
- );
484
- */ if (sheen.sheenColorMap) {
485
- pbrMaterial.lightModel.setSheenColorMap(sheen.sheenColorMap.texture, sheen.sheenColorMap.sampler, sheen.sheenColorMap.texCoord, sheen.sheenColorMap.transform);
512
+ pbrMaterial.sheen = true;
513
+ pbrMaterial.sheenColorFactor = sheen.sheenColorFactor;
514
+ pbrMaterial.sheenRoughnessFactor = sheen.sheenRoughnessFactor;
515
+ if (sheen.sheenColorMap) {
516
+ pbrMaterial.sheenColorTexture = sheen.sheenColorMap.texture;
517
+ pbrMaterial.sheenColorTextureSampler = sheen.sheenColorMap.sampler;
518
+ pbrMaterial.sheenColorTexCoordIndex = sheen.sheenColorMap.texCoord;
519
+ pbrMaterial.sheenColorTexCoordMatrix = sheen.sheenColorMap.transform;
486
520
  }
487
521
  if (sheen.sheenRoughnessMap) {
488
- pbrMaterial.lightModel.setSheenRoughnessMap(sheen.sheenRoughnessMap.texture, sheen.sheenRoughnessMap.sampler, sheen.sheenRoughnessMap.texCoord, sheen.sheenRoughnessMap.transform);
522
+ pbrMaterial.sheenRoughnessTexture = sheen.sheenRoughnessMap.texture;
523
+ pbrMaterial.sheenRoughnessTextureSampler = sheen.sheenRoughnessMap.sampler;
524
+ pbrMaterial.sheenRoughnessTexCoordIndex = sheen.sheenRoughnessMap.texCoord;
525
+ pbrMaterial.sheenRoughnessTexCoordMatrix = sheen.sheenRoughnessMap.transform;
489
526
  }
490
527
  }
491
528
  if (assetPBRMaterial.clearcoat) {
492
529
  const cc = assetPBRMaterial.clearcoat;
493
- pbrMaterial.lightModel.useClearcoat = true;
494
- pbrMaterial.lightModel.clearcoatIntensity = cc.clearCoatFactor;
495
- pbrMaterial.lightModel.clearcoatRoughnessFactor = cc.clearCoatRoughnessFactor;
530
+ pbrMaterial.clearcoat = true;
531
+ pbrMaterial.clearcoatIntensity = cc.clearCoatFactor;
532
+ pbrMaterial.clearcoatRoughnessFactor = cc.clearCoatRoughnessFactor;
496
533
  if (cc.clearCoatIntensityMap) {
497
- pbrMaterial.lightModel.setClearcoatIntensityMap(cc.clearCoatIntensityMap.texture, cc.clearCoatIntensityMap.sampler, cc.clearCoatIntensityMap.texCoord, cc.clearCoatIntensityMap.transform);
534
+ pbrMaterial.clearcoatIntensityTexture = cc.clearCoatIntensityMap.texture;
535
+ pbrMaterial.clearcoatIntensityTextureSampler = cc.clearCoatIntensityMap.sampler;
536
+ pbrMaterial.clearcoatIntensityTexCoordIndex = cc.clearCoatIntensityMap.texCoord;
537
+ pbrMaterial.clearcoatIntensityTexCoordMatrix = cc.clearCoatIntensityMap.transform;
498
538
  }
499
539
  if (cc.clearCoatRoughnessMap) {
500
- pbrMaterial.lightModel.setClearcoatRoughnessMap(cc.clearCoatRoughnessMap.texture, cc.clearCoatRoughnessMap.sampler, cc.clearCoatRoughnessMap.texCoord, cc.clearCoatRoughnessMap.transform);
540
+ pbrMaterial.clearcoatRoughnessTexture = cc.clearCoatRoughnessMap.texture;
541
+ pbrMaterial.clearcoatRoughnessTextureSampler = cc.clearCoatRoughnessMap.sampler;
542
+ pbrMaterial.clearcoatRoughnessTexCoordIndex = cc.clearCoatRoughnessMap.texCoord;
543
+ pbrMaterial.clearcoatRoughnessTexCoordMatrix = cc.clearCoatRoughnessMap.transform;
501
544
  }
502
545
  if (cc.clearCoatNormalMap) {
503
- pbrMaterial.lightModel.setClearcoatNormalMap(cc.clearCoatNormalMap.texture, cc.clearCoatNormalMap.sampler, cc.clearCoatNormalMap.texCoord, cc.clearCoatNormalMap.transform);
546
+ pbrMaterial.clearcoatNormalTexture = cc.clearCoatNormalMap.texture;
547
+ pbrMaterial.clearcoatNormalTextureSampler = cc.clearCoatNormalMap.sampler;
548
+ pbrMaterial.clearcoatNormalTexCoordIndex = cc.clearCoatNormalMap.texCoord;
549
+ pbrMaterial.clearcoatNormalTexCoordMatrix = cc.clearCoatNormalMap.transform;
504
550
  }
505
551
  }
506
552
  pbrMaterial.vertexTangent = assetPBRMaterial.common.useTangent;
507
553
  pbrMaterial.vertexColor = assetPBRMaterial.common.vertexColor;
508
554
  if (assetPBRMaterial.common.alphaMode === 'blend') {
509
- pbrMaterial.alphaBlend = true;
555
+ pbrMaterial.blendMode = 'blend';
510
556
  } else if (assetPBRMaterial.common.alphaMode === 'mask') {
511
557
  pbrMaterial.alphaCutoff = assetPBRMaterial.common.alphaCutoff;
512
558
  }
@@ -875,7 +921,7 @@ import { AbstractModelLoader } from '../loader.js';
875
921
  const accessor = gltf._accessors[accessorIndex];
876
922
  const componentCount = accessor.getComponentCount(accessor.type);
877
923
  const normalized = !!accessor.normalized;
878
- const hash = `${accessorIndex}:${!!semantic}:${Number(normalized)}`;
924
+ const hash = `${accessorIndex}:${semantic || ''}:${Number(normalized)}`;
879
925
  let buffer = gltf._bufferCache[hash];
880
926
  if (!buffer) {
881
927
  let data = accessor.getNormalizedDeinterlacedView(gltf);
@@ -1 +1 @@
1
- {"version":3,"file":"gltf_loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"gltf_loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -126,7 +126,7 @@ const _f16one = floatToHalf(1);
126
126
  for(let j = 0; j < height; j++){
127
127
  const scanline = [];
128
128
  let rgbe = d8.slice(pos, pos += 4);
129
- const isNewRLE = rgbe[0] == 2 && rgbe[1] == 2 && rgbe[2] == (width >> 8 & 0xFF) && rgbe[3] == (width & 0xFF);
129
+ const isNewRLE = rgbe[0] == 2 && rgbe[1] == 2 && rgbe[2] == (width >> 8 & 0xff) && rgbe[3] == (width & 0xff);
130
130
  if (isNewRLE && width >= 8 && width < 32768) {
131
131
  for(let i = 0; i < 4; i++){
132
132
  let ptr = i * width;
@@ -1,7 +1,6 @@
1
1
  import { Vector4 } from '@zephyr3d/base';
2
2
  import { Application } from '../app.js';
3
3
  import { Primitive } from '../render/primitive.js';
4
- import '../shaders/framework.js';
5
4
  import { linearToGamma } from '../shaders/misc.js';
6
5
 
7
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"blitter.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"blitter.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,4 @@
1
1
  import { Blitter } from './blitter.js';
2
- import '../shaders/framework.js';
3
2
  import { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc.js';
4
3
  import '../app.js';
5
4
  import { Vector2 } from '@zephyr3d/base';
@@ -1 +1 @@
1
- {"version":3,"file":"depthlimitedgaussion.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"depthlimitedgaussion.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,4 @@
1
1
  import { Blitter } from './blitter.js';
2
- import '../shaders/framework.js';
3
2
  import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
4
3
  import '../app.js';
5
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"gaussianblur.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"gaussianblur.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}