@luma.gl/gltf 9.1.0-alpha.9 → 9.1.0-beta.11

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.
@@ -1,5 +1,6 @@
1
- import type { Device, Texture, Binding, Parameters } from '@luma.gl/core';
1
+ import type { Device, Texture, Parameters } from '@luma.gl/core';
2
2
  import { PBREnvironment } from "./pbr-environment.js";
3
+ import { PBRMaterialBindings, PBRMaterialUniforms, PBRProjectionProps } from '@luma.gl/shadertools';
3
4
  export type ParsePBRMaterialOptions = {
4
5
  /** Debug PBR shader */
5
6
  pbrDebug?: boolean;
@@ -12,8 +13,8 @@ export type ParsePBRMaterialOptions = {
12
13
  };
13
14
  export type ParsedPBRMaterial = {
14
15
  readonly defines: Record<string, number | boolean>;
15
- readonly bindings: Record<string, Binding>;
16
- readonly uniforms: Record<string, any>;
16
+ readonly bindings: Partial<PBRMaterialBindings>;
17
+ readonly uniforms: Partial<PBRProjectionProps & PBRMaterialUniforms>;
17
18
  readonly parameters: Parameters;
18
19
  readonly glParameters: Record<string, any>;
19
20
  /** List of all generated textures, makes it easy to destroy them later */
@@ -1 +1 @@
1
- {"version":3,"file":"parse-pbr-material.d.ts","sourceRoot":"","sources":["../../src/pbr/parse-pbr-material.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAExE,OAAO,EAAC,cAAc,EAAC,6BAA0B;AAIjD,MAAM,MAAM,uBAAuB,GAAG;IACpC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,mBAAmB;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iEAAiE;IACjE,6BAA6B,CAAC,EAAE,cAAc,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;CACvC,CAAC;AAgBF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,KAAA,EACR,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,OAAO,EAAE,uBAAuB,GAC/B,iBAAiB,CAmDnB"}
1
+ {"version":3,"file":"parse-pbr-material.d.ts","sourceRoot":"","sources":["../../src/pbr/parse-pbr-material.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAC,cAAc,EAAC,6BAA0B;AACjD,OAAO,EAAC,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAIlG,MAAM,MAAM,uBAAuB,GAAG;IACpC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,mBAAmB;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iEAAiE;IACjE,6BAA6B,CAAC,EAAE,cAAc,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,GAAG,mBAAmB,CAAC,CAAC;IACrE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;CACvC,CAAC;AAiBF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,KAAA,EACR,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,OAAO,EAAE,uBAAuB,GAC/B,iBAAiB,CAmDnB"}
@@ -2,6 +2,7 @@ import { log } from '@luma.gl/core';
2
2
  // NOTE: Modules other than `@luma.gl/webgl` should not import `GL` from
3
3
  // `@luma.gl/constants`. Locally we use `GLEnum` instead of `GL` to avoid
4
4
  // conflicts with the `babel-plugin-inline-webgl-constants` plugin.
5
+ // eslint-disable-next-line no-shadow
5
6
  var GLEnum;
6
7
  (function (GLEnum) {
7
8
  GLEnum[GLEnum["FUNC_ADD"] = 32774] = "FUNC_ADD";
@@ -26,8 +27,8 @@ export function parsePBRMaterial(device, material, attributes, options) {
26
27
  bindings: {},
27
28
  uniforms: {
28
29
  // TODO: find better values?
29
- u_Camera: [0, 0, 0], // Model should override
30
- u_MetallicRoughnessValues: [1, 1] // Default is 1 and 1
30
+ camera: [0, 0, 0], // Model should override
31
+ metallicRoughnessValues: [1, 1] // Default is 1 and 1
31
32
  },
32
33
  parameters: {},
33
34
  glParameters: {},
@@ -37,18 +38,18 @@ export function parsePBRMaterial(device, material, attributes, options) {
37
38
  parsedMaterial.defines.USE_TEX_LOD = 1;
38
39
  const { imageBasedLightingEnvironment } = options;
39
40
  if (imageBasedLightingEnvironment) {
40
- parsedMaterial.bindings.u_DiffuseEnvSampler =
41
+ parsedMaterial.bindings.pbr_diffuseEnvSampler =
41
42
  imageBasedLightingEnvironment.diffuseEnvSampler.texture;
42
- parsedMaterial.bindings.u_SpecularEnvSampler =
43
+ parsedMaterial.bindings.pbr_specularEnvSampler =
43
44
  imageBasedLightingEnvironment.specularEnvSampler.texture;
44
- parsedMaterial.bindings.u_brdfLUT = imageBasedLightingEnvironment.brdfLutTexture.texture;
45
- parsedMaterial.uniforms.u_ScaleIBLAmbient = [1, 1];
45
+ parsedMaterial.bindings.pbr_BrdfLUT = imageBasedLightingEnvironment.brdfLutTexture.texture;
46
+ parsedMaterial.uniforms.scaleIBLAmbient = [1, 1];
46
47
  }
47
48
  if (options?.pbrDebug) {
48
49
  parsedMaterial.defines.PBR_DEBUG = 1;
49
50
  // Override final color for reference app visualization of various parameters in the lighting equation.
50
- parsedMaterial.uniforms.u_ScaleDiffBaseMR = [0, 0, 0, 0];
51
- parsedMaterial.uniforms.u_ScaleFGDSpec = [0, 0, 0, 0];
51
+ parsedMaterial.uniforms.scaleDiffBaseMR = [0, 0, 0, 0];
52
+ parsedMaterial.uniforms.scaleFGDSpec = [0, 0, 0, 0];
52
53
  }
53
54
  if (attributes.NORMAL)
54
55
  parsedMaterial.defines.HAS_NORMALS = 1;
@@ -67,29 +68,29 @@ export function parsePBRMaterial(device, material, attributes, options) {
67
68
  }
68
69
  /** Parse GLTF material record */
69
70
  function parseMaterial(device, material, parsedMaterial) {
70
- parsedMaterial.uniforms.pbr_uUnlit = Boolean(material.unlit);
71
+ parsedMaterial.uniforms.unlit = Boolean(material.unlit);
71
72
  if (material.pbrMetallicRoughness) {
72
73
  parsePbrMetallicRoughness(device, material.pbrMetallicRoughness, parsedMaterial);
73
74
  }
74
75
  if (material.normalTexture) {
75
- addTexture(device, material.normalTexture, 'u_NormalSampler', 'HAS_NORMALMAP', parsedMaterial);
76
+ addTexture(device, material.normalTexture, 'pbr_normalSampler', 'HAS_NORMALMAP', parsedMaterial);
76
77
  const { scale = 1 } = material.normalTexture;
77
- parsedMaterial.uniforms.u_NormalScale = scale;
78
+ parsedMaterial.uniforms.normalScale = scale;
78
79
  }
79
80
  if (material.occlusionTexture) {
80
- addTexture(device, material.occlusionTexture, 'u_OcclusionSampler', 'HAS_OCCLUSIONMAP', parsedMaterial);
81
+ addTexture(device, material.occlusionTexture, 'pbr_occlusionSampler', 'HAS_OCCLUSIONMAP', parsedMaterial);
81
82
  const { strength = 1 } = material.occlusionTexture;
82
- parsedMaterial.uniforms.u_OcclusionStrength = strength;
83
+ parsedMaterial.uniforms.occlusionStrength = strength;
83
84
  }
84
85
  if (material.emissiveTexture) {
85
- addTexture(device, material.emissiveTexture, 'u_EmissiveSampler', 'HAS_EMISSIVEMAP', parsedMaterial);
86
- parsedMaterial.uniforms.u_EmissiveFactor = material.emissiveFactor || [0, 0, 0];
86
+ addTexture(device, material.emissiveTexture, 'pbr_emissiveSampler', 'HAS_EMISSIVEMAP', parsedMaterial);
87
+ parsedMaterial.uniforms.emissiveFactor = material.emissiveFactor || [0, 0, 0];
87
88
  }
88
89
  switch (material.alphaMode) {
89
90
  case 'MASK':
90
91
  const { alphaCutoff = 0.5 } = material;
91
92
  parsedMaterial.defines.ALPHA_CUTOFF = 1;
92
- parsedMaterial.uniforms.u_AlphaCutoff = alphaCutoff;
93
+ parsedMaterial.uniforms.alphaCutoff = alphaCutoff;
93
94
  break;
94
95
  case 'BLEND':
95
96
  log.warn('glTF BLEND alphaMode might not work well because it requires mesh sorting')();
@@ -115,14 +116,14 @@ function parseMaterial(device, material, parsedMaterial) {
115
116
  /** Parse GLTF material sub record */
116
117
  function parsePbrMetallicRoughness(device, pbrMetallicRoughness, parsedMaterial) {
117
118
  if (pbrMetallicRoughness.baseColorTexture) {
118
- addTexture(device, pbrMetallicRoughness.baseColorTexture, 'u_BaseColorSampler', 'HAS_BASECOLORMAP', parsedMaterial);
119
+ addTexture(device, pbrMetallicRoughness.baseColorTexture, 'pbr_baseColorSampler', 'HAS_BASECOLORMAP', parsedMaterial);
119
120
  }
120
- parsedMaterial.uniforms.u_BaseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];
121
+ parsedMaterial.uniforms.baseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];
121
122
  if (pbrMetallicRoughness.metallicRoughnessTexture) {
122
- addTexture(device, pbrMetallicRoughness.metallicRoughnessTexture, 'u_MetallicRoughnessSampler', 'HAS_METALROUGHNESSMAP', parsedMaterial);
123
+ addTexture(device, pbrMetallicRoughness.metallicRoughnessTexture, 'pbr_metallicRoughnessSampler', 'HAS_METALROUGHNESSMAP', parsedMaterial);
123
124
  }
124
125
  const { metallicFactor = 1, roughnessFactor = 1 } = pbrMetallicRoughness;
125
- parsedMaterial.uniforms.u_MetallicRoughnessValues = [metallicFactor, roughnessFactor];
126
+ parsedMaterial.uniforms.metallicRoughnessValues = [metallicFactor, roughnessFactor];
126
127
  }
127
128
  /** Create a texture from a glTF texture/sampler/image combo and add it to bindings */
128
129
  function addTexture(device, gltfTexture, uniformName, define = null, parsedMaterial) {
@@ -188,9 +189,9 @@ export class PBRMaterialParser {
188
189
 
189
190
  this.uniforms = {
190
191
  // TODO: find better values?
191
- u_Camera: [0, 0, 0], // Model should override
192
+ camera: [0, 0, 0], // Model should override
192
193
 
193
- u_MetallicRoughnessValues: [1, 1] // Default is 1 and 1
194
+ metallicRoughnessValues: [1, 1] // Default is 1 and 1
194
195
  };
195
196
 
196
197
  this.bindings = {};
@@ -199,17 +200,17 @@ export class PBRMaterialParser {
199
200
  this.generatedTextures = [];
200
201
 
201
202
  if (imageBasedLightingEnvironment) {
202
- this.bindings.u_DiffuseEnvSampler = imageBasedLightingEnvironment.getDiffuseEnvSampler();
203
- this.bindings.u_SpecularEnvSampler = imageBasedLightingEnvironment.getSpecularEnvSampler();
204
- this.bindings.u_brdfLUT = imageBasedLightingEnvironment.getBrdfTexture();
205
- this.uniforms.u_ScaleIBLAmbient = [1, 1];
203
+ this.bindings.pbr_diffuseEnvSampler = imageBasedLightingEnvironment.getDiffuseEnvSampler();
204
+ this.bindings.pbr_specularEnvSampler = imageBasedLightingEnvironment.getSpecularEnvSampler();
205
+ this.bindings.pbr_BrdfLUT = imageBasedLightingEnvironment.getBrdfTexture();
206
+ this.uniforms.scaleIBLAmbient = [1, 1];
206
207
  }
207
208
 
208
209
  if (pbrDebug) {
209
210
  // Override final color for reference app visualization
210
211
  // of various parameters in the lighting equation.
211
- this.uniforms.u_ScaleDiffBaseMR = [0, 0, 0, 0];
212
- this.uniforms.u_ScaleFGDSpec = [0, 0, 0, 0];
212
+ this.uniforms.scaleDiffBaseMR = [0, 0, 0, 0];
213
+ this.uniforms.scaleFGDSpec = [0, 0, 0, 0];
213
214
  }
214
215
 
215
216
  this.defineIfPresent(attributes.NORMAL, 'HAS_NORMALS');
@@ -241,31 +242,31 @@ export class PBRMaterialParser {
241
242
 
242
243
  /** Parse GLTF material record *
243
244
  parseMaterial(material) {
244
- this.uniforms.pbr_uUnlit = Boolean(material.unlit);
245
+ this.uniforms.unlit = Boolean(material.unlit);
245
246
 
246
247
  if (material.pbrMetallicRoughness) {
247
248
  this.parsePbrMetallicRoughness(material.pbrMetallicRoughness);
248
249
  }
249
250
  if (material.normalTexture) {
250
- this.addTexture(material.normalTexture, 'u_NormalSampler', 'HAS_NORMALMAP');
251
+ this.addTexture(material.normalTexture, 'pbr_normalSampler', 'HAS_NORMALMAP');
251
252
 
252
253
  const {scale = 1} = material.normalTexture;
253
- this.uniforms.u_NormalScale = scale;
254
+ this.uniforms.normalScale = scale;
254
255
  }
255
256
  if (material.occlusionTexture) {
256
- this.addTexture(material.occlusionTexture, 'u_OcclusionSampler', 'HAS_OCCLUSIONMAP');
257
+ this.addTexture(material.occlusionTexture, 'pbr_occlusionSampler', 'HAS_OCCLUSIONMAP');
257
258
 
258
259
  const {strength = 1} = material.occlusionTexture;
259
- this.uniforms.u_OcclusionStrength = strength;
260
+ this.uniforms.occlusionStrength = strength;
260
261
  }
261
262
  if (material.emissiveTexture) {
262
- this.addTexture(material.emissiveTexture, 'u_EmissiveSampler', 'HAS_EMISSIVEMAP');
263
- this.uniforms.u_EmissiveFactor = material.emissiveFactor || [0, 0, 0];
263
+ this.addTexture(material.emissiveTexture, 'pbr_emissiveSampler', 'HAS_EMISSIVEMAP');
264
+ this.uniforms.emissiveFactor = material.emissiveFactor || [0, 0, 0];
264
265
  }
265
266
  if (material.alphaMode === 'MASK') {
266
267
  const {alphaCutoff = 0.5} = material;
267
268
  this.defines.ALPHA_CUTOFF = 1;
268
- this.uniforms.u_AlphaCutoff = alphaCutoff;
269
+ this.uniforms.alphaCutoff = alphaCutoff;
269
270
  } else if (material.alphaMode === 'BLEND') {
270
271
  log.warn('BLEND alphaMode might not work well because it requires mesh sorting')();
271
272
  Object.assign(this.parameters, {
@@ -281,21 +282,21 @@ export class PBRMaterialParser {
281
282
  if (pbrMetallicRoughness.baseColorTexture) {
282
283
  this.addTexture(
283
284
  pbrMetallicRoughness.baseColorTexture,
284
- 'u_BaseColorSampler',
285
+ 'pbr_baseColorSampler',
285
286
  'HAS_BASECOLORMAP'
286
287
  );
287
288
  }
288
- this.uniforms.u_BaseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];
289
+ this.uniforms.baseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];
289
290
 
290
291
  if (pbrMetallicRoughness.metallicRoughnessTexture) {
291
292
  this.addTexture(
292
293
  pbrMetallicRoughness.metallicRoughnessTexture,
293
- 'u_MetallicRoughnessSampler',
294
+ 'pbr_metallicRoughnessSampler',
294
295
  'HAS_METALROUGHNESSMAP'
295
296
  );
296
297
  }
297
298
  const {metallicFactor = 1, roughnessFactor = 1} = pbrMetallicRoughness;
298
- this.uniforms.u_MetallicRoughnessValues = [metallicFactor, roughnessFactor];
299
+ this.uniforms.metallicRoughnessValues = [metallicFactor, roughnessFactor];
299
300
  }
300
301
 
301
302
  /** Create a texture from a glTF texture/sampler/image combo and add it to bindings *
@@ -332,3 +333,4 @@ export class PBRMaterialParser {
332
333
  }
333
334
  }
334
335
  */
336
+ //# sourceMappingURL=parse-pbr-material.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-pbr-material.js","sourceRoot":"","sources":["../../src/pbr/parse-pbr-material.ts"],"names":[],"mappings":"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"}
@@ -62,3 +62,4 @@ function makeCube(device, { id, getTextureForFace, sampler }) {
62
62
  data
63
63
  });
64
64
  }
65
+ //# sourceMappingURL=pbr-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbr-environment.js","sourceRoot":"","sources":["../../src/pbr/pbr-environment.ts"],"names":[],"mappings":"AAAA,uBAAuB;AAGvB,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAgBtD,yCAAyC;AACzC,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,KAA0B;IAC3E,MAAM,cAAc,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE;QAC9C,EAAE,EAAE,SAAS;QACb,OAAO,EAAE;YACP,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,QAAQ;SACJ;QACjB,2EAA2E;QAC3E,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;KACzC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,EAAE;QACzC,EAAE,EAAE,mBAAmB;QACvB,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9E,OAAO,EAAE;YACP,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,QAAQ;SACJ;KAClB,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,EAAE;QAC1C,EAAE,EAAE,oBAAoB;QACxB,iBAAiB,EAAE,CAAC,GAAW,EAAE,EAAE;YACjC,MAAM,UAAU,GAAG,EAAE,CAAC;YACtB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;gBAC5D,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,EAAE;YACP,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,QAAQ,EAAE,oDAAoD;YACzE,SAAS,EAAE,QAAQ;SACJ;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc;QACd,iBAAiB;QACjB,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAED,4BAA4B;AAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjC,SAAS,QAAQ,CACf,MAAc,EACd,EACE,EAAE,EACF,iBAAiB,EACjB,OAAO,EAKR;IAED,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE;QAC9B,EAAE;QACF,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,KAAK;QACd,OAAO;QACP,mBAAmB;QACnB,IAAI;KACL,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/gltf",
3
- "version": "9.1.0-alpha.9",
3
+ "version": "9.1.0-beta.11",
4
4
  "description": "glTF support for luma.gl",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -40,14 +40,14 @@
40
40
  "prepublishOnly": "npm run build-minified-bundle && npm run build-dev-bundle"
41
41
  },
42
42
  "peerDependencies": {
43
- "@luma.gl/core": "^9.0.0-beta",
44
- "@luma.gl/engine": "^9.0.0-beta"
43
+ "@luma.gl/core": "^9.1.0-beta.1",
44
+ "@luma.gl/engine": "^9.1.0-beta.1",
45
+ "@luma.gl/shadertools": "^9.1.0-beta.1"
45
46
  },
46
47
  "dependencies": {
47
48
  "@loaders.gl/core": "^4.2.0",
48
49
  "@loaders.gl/textures": "^4.2.0",
49
- "@luma.gl/shadertools": "9.1.0-alpha.9",
50
- "@math.gl/core": "^4.0.0"
50
+ "@math.gl/core": "^4.1.0"
51
51
  },
52
- "gitHead": "ff05b21269181dbb782ba7c8c1546900288ee6a1"
52
+ "gitHead": "aab3748ab83360e6ee611f9b4a2d805e5f17fb01"
53
53
  }
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import {Device, RenderPipelineParameters, log} from '@luma.gl/core';
6
- import {pbr} from '@luma.gl/shadertools';
6
+ import {pbrMaterial, ShaderModule} from '@luma.gl/shadertools';
7
7
  import {Geometry, Model, ModelNode, ModelProps} from '@luma.gl/engine';
8
8
  import {ParsePBRMaterialOptions, parsePBRMaterial} from '../pbr/parse-pbr-material';
9
9
 
@@ -94,7 +94,7 @@ const vs = /* glsl */ `\
94
94
  #endif
95
95
 
96
96
  pbr_setPositionNormalTangentUV(positions, _NORMAL, _TANGENT, _TEXCOORD_0);
97
- gl_Position = u_MVPMatrix * positions;
97
+ gl_Position = pbrProjection.modelViewProjectionMatrix * positions;
98
98
  }
99
99
  `;
100
100
 
@@ -145,15 +145,22 @@ export function createGLTFModel(device: Device, options: CreateGLTFModelOptions)
145
145
  geometry,
146
146
  topology: geometry.topology,
147
147
  vertexCount,
148
- modules: [pbr],
148
+ modules: [pbrMaterial as unknown as ShaderModule],
149
149
  ...modelOptions,
150
150
 
151
- bindings: {...parsedMaterial.bindings, ...modelOptions.bindings},
152
151
  defines: {...parsedMaterial.defines, ...modelOptions.defines},
153
- parameters: {...parameters, ...parsedMaterial.parameters, ...modelOptions.parameters},
154
- uniforms: {...parsedMaterial.uniforms, ...modelOptions.uniforms}
152
+ parameters: {...parameters, ...parsedMaterial.parameters, ...modelOptions.parameters}
155
153
  };
156
154
 
157
155
  const model = new Model(device, modelProps);
156
+
157
+ const {camera, ...pbrMaterialProps} = {
158
+ ...parsedMaterial.uniforms,
159
+ ...modelOptions.uniforms,
160
+ ...parsedMaterial.bindings,
161
+ ...modelOptions.bindings
162
+ };
163
+
164
+ model.shaderInputs.setProps({pbrMaterial: pbrMaterialProps, pbrProjection: {camera}});
158
165
  return new ModelNode({managedResources, model});
159
166
  }
@@ -7,6 +7,7 @@ import {PrimitiveTopology} from '@luma.gl/core';
7
7
  // NOTE: Modules other than `@luma.gl/webgl` should not import `GL` from
8
8
  // `@luma.gl/constants`. Locally we use `GLEnum` instead of `GL` to avoid
9
9
  // conflicts with the `babel-plugin-inline-webgl-constants` plugin.
10
+ // eslint-disable-next-line no-shadow
10
11
  export enum GLEnum {
11
12
  POINTS = 0x0,
12
13
  LINES = 0x1,
@@ -42,8 +42,8 @@ export class GLTFInstantiator {
42
42
  }
43
43
 
44
44
  instantiate(gltf: any): GroupNode[] {
45
- this.gltf = gltf;
46
- const scenes = (gltf.scenes || []).map(scene => this.createScene(scene));
45
+ this.gltf = deepCopy(gltf);
46
+ const scenes = (this.gltf.scenes || []).map(scene => this.createScene(scene));
47
47
  return scenes;
48
48
  }
49
49
 
@@ -101,6 +101,10 @@ export class GLTFInstantiator {
101
101
  gltfNode._node = node;
102
102
  }
103
103
 
104
+ // Copy _node so that gltf-animator can access
105
+ const topLevelNode = this.gltf.nodes.find(node => node.id === gltfNode.id);
106
+ topLevelNode._node = gltfNode._node;
107
+
104
108
  return gltfNode._node;
105
109
  }
106
110
 
@@ -204,3 +208,26 @@ export class GLTFInstantiator {
204
208
  return false;
205
209
  }
206
210
  }
211
+
212
+ /** Deeply copies a JS data structure */
213
+ function deepCopy(object: any): any {
214
+ // don't copy binary data
215
+ if (
216
+ ArrayBuffer.isView(object) ||
217
+ object instanceof ArrayBuffer ||
218
+ object instanceof ImageBitmap
219
+ ) {
220
+ return object;
221
+ }
222
+ if (Array.isArray(object)) {
223
+ return object.map(deepCopy);
224
+ }
225
+ if (object && typeof object === 'object') {
226
+ const result = {};
227
+ for (const key in object) {
228
+ result[key] = deepCopy(object[key]);
229
+ }
230
+ return result;
231
+ }
232
+ return object;
233
+ }
@@ -1,6 +1,7 @@
1
- import type {Device, Texture, Binding, Parameters} from '@luma.gl/core';
1
+ import type {Device, Texture, Parameters} from '@luma.gl/core';
2
2
  import {log} from '@luma.gl/core';
3
3
  import {PBREnvironment} from './pbr-environment';
4
+ import {PBRMaterialBindings, PBRMaterialUniforms, PBRProjectionProps} from '@luma.gl/shadertools';
4
5
 
5
6
  /* eslint-disable camelcase */
6
7
 
@@ -17,8 +18,8 @@ export type ParsePBRMaterialOptions = {
17
18
 
18
19
  export type ParsedPBRMaterial = {
19
20
  readonly defines: Record<string, number | boolean>;
20
- readonly bindings: Record<string, Binding>;
21
- readonly uniforms: Record<string, any>;
21
+ readonly bindings: Partial<PBRMaterialBindings>;
22
+ readonly uniforms: Partial<PBRProjectionProps & PBRMaterialUniforms>;
22
23
  readonly parameters: Parameters;
23
24
  readonly glParameters: Record<string, any>;
24
25
  /** List of all generated textures, makes it easy to destroy them later */
@@ -28,6 +29,7 @@ export type ParsedPBRMaterial = {
28
29
  // NOTE: Modules other than `@luma.gl/webgl` should not import `GL` from
29
30
  // `@luma.gl/constants`. Locally we use `GLEnum` instead of `GL` to avoid
30
31
  // conflicts with the `babel-plugin-inline-webgl-constants` plugin.
32
+ // eslint-disable-next-line no-shadow
31
33
  enum GLEnum {
32
34
  FUNC_ADD = 0x8006,
33
35
  ONE = 1,
@@ -57,9 +59,9 @@ export function parsePBRMaterial(
57
59
  bindings: {},
58
60
  uniforms: {
59
61
  // TODO: find better values?
60
- u_Camera: [0, 0, 0], // Model should override
62
+ camera: [0, 0, 0], // Model should override
61
63
 
62
- u_MetallicRoughnessValues: [1, 1] // Default is 1 and 1
64
+ metallicRoughnessValues: [1, 1] // Default is 1 and 1
63
65
  },
64
66
  parameters: {},
65
67
  glParameters: {},
@@ -71,19 +73,19 @@ export function parsePBRMaterial(
71
73
 
72
74
  const {imageBasedLightingEnvironment} = options;
73
75
  if (imageBasedLightingEnvironment) {
74
- parsedMaterial.bindings.u_DiffuseEnvSampler =
76
+ parsedMaterial.bindings.pbr_diffuseEnvSampler =
75
77
  imageBasedLightingEnvironment.diffuseEnvSampler.texture;
76
- parsedMaterial.bindings.u_SpecularEnvSampler =
78
+ parsedMaterial.bindings.pbr_specularEnvSampler =
77
79
  imageBasedLightingEnvironment.specularEnvSampler.texture;
78
- parsedMaterial.bindings.u_brdfLUT = imageBasedLightingEnvironment.brdfLutTexture.texture;
79
- parsedMaterial.uniforms.u_ScaleIBLAmbient = [1, 1];
80
+ parsedMaterial.bindings.pbr_BrdfLUT = imageBasedLightingEnvironment.brdfLutTexture.texture;
81
+ parsedMaterial.uniforms.scaleIBLAmbient = [1, 1];
80
82
  }
81
83
 
82
84
  if (options?.pbrDebug) {
83
85
  parsedMaterial.defines.PBR_DEBUG = 1;
84
86
  // Override final color for reference app visualization of various parameters in the lighting equation.
85
- parsedMaterial.uniforms.u_ScaleDiffBaseMR = [0, 0, 0, 0];
86
- parsedMaterial.uniforms.u_ScaleFGDSpec = [0, 0, 0, 0];
87
+ parsedMaterial.uniforms.scaleDiffBaseMR = [0, 0, 0, 0];
88
+ parsedMaterial.uniforms.scaleFGDSpec = [0, 0, 0, 0];
87
89
  }
88
90
 
89
91
  if (attributes.NORMAL) parsedMaterial.defines.HAS_NORMALS = 1;
@@ -102,45 +104,51 @@ export function parsePBRMaterial(
102
104
 
103
105
  /** Parse GLTF material record */
104
106
  function parseMaterial(device: Device, material, parsedMaterial: ParsedPBRMaterial): void {
105
- parsedMaterial.uniforms.pbr_uUnlit = Boolean(material.unlit);
107
+ parsedMaterial.uniforms.unlit = Boolean(material.unlit);
106
108
 
107
109
  if (material.pbrMetallicRoughness) {
108
110
  parsePbrMetallicRoughness(device, material.pbrMetallicRoughness, parsedMaterial);
109
111
  }
110
112
  if (material.normalTexture) {
111
- addTexture(device, material.normalTexture, 'u_NormalSampler', 'HAS_NORMALMAP', parsedMaterial);
113
+ addTexture(
114
+ device,
115
+ material.normalTexture,
116
+ 'pbr_normalSampler',
117
+ 'HAS_NORMALMAP',
118
+ parsedMaterial
119
+ );
112
120
 
113
121
  const {scale = 1} = material.normalTexture;
114
- parsedMaterial.uniforms.u_NormalScale = scale;
122
+ parsedMaterial.uniforms.normalScale = scale;
115
123
  }
116
124
  if (material.occlusionTexture) {
117
125
  addTexture(
118
126
  device,
119
127
  material.occlusionTexture,
120
- 'u_OcclusionSampler',
128
+ 'pbr_occlusionSampler',
121
129
  'HAS_OCCLUSIONMAP',
122
130
  parsedMaterial
123
131
  );
124
132
 
125
133
  const {strength = 1} = material.occlusionTexture;
126
- parsedMaterial.uniforms.u_OcclusionStrength = strength;
134
+ parsedMaterial.uniforms.occlusionStrength = strength;
127
135
  }
128
136
  if (material.emissiveTexture) {
129
137
  addTexture(
130
138
  device,
131
139
  material.emissiveTexture,
132
- 'u_EmissiveSampler',
140
+ 'pbr_emissiveSampler',
133
141
  'HAS_EMISSIVEMAP',
134
142
  parsedMaterial
135
143
  );
136
- parsedMaterial.uniforms.u_EmissiveFactor = material.emissiveFactor || [0, 0, 0];
144
+ parsedMaterial.uniforms.emissiveFactor = material.emissiveFactor || [0, 0, 0];
137
145
  }
138
146
 
139
147
  switch (material.alphaMode) {
140
148
  case 'MASK':
141
149
  const {alphaCutoff = 0.5} = material;
142
150
  parsedMaterial.defines.ALPHA_CUTOFF = 1;
143
- parsedMaterial.uniforms.u_AlphaCutoff = alphaCutoff;
151
+ parsedMaterial.uniforms.alphaCutoff = alphaCutoff;
144
152
  break;
145
153
  case 'BLEND':
146
154
  log.warn('glTF BLEND alphaMode might not work well because it requires mesh sorting')();
@@ -178,24 +186,24 @@ function parsePbrMetallicRoughness(
178
186
  addTexture(
179
187
  device,
180
188
  pbrMetallicRoughness.baseColorTexture,
181
- 'u_BaseColorSampler',
189
+ 'pbr_baseColorSampler',
182
190
  'HAS_BASECOLORMAP',
183
191
  parsedMaterial
184
192
  );
185
193
  }
186
- parsedMaterial.uniforms.u_BaseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];
194
+ parsedMaterial.uniforms.baseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];
187
195
 
188
196
  if (pbrMetallicRoughness.metallicRoughnessTexture) {
189
197
  addTexture(
190
198
  device,
191
199
  pbrMetallicRoughness.metallicRoughnessTexture,
192
- 'u_MetallicRoughnessSampler',
200
+ 'pbr_metallicRoughnessSampler',
193
201
  'HAS_METALROUGHNESSMAP',
194
202
  parsedMaterial
195
203
  );
196
204
  }
197
205
  const {metallicFactor = 1, roughnessFactor = 1} = pbrMetallicRoughness;
198
- parsedMaterial.uniforms.u_MetallicRoughnessValues = [metallicFactor, roughnessFactor];
206
+ parsedMaterial.uniforms.metallicRoughnessValues = [metallicFactor, roughnessFactor];
199
207
  }
200
208
 
201
209
  /** Create a texture from a glTF texture/sampler/image combo and add it to bindings */
@@ -270,9 +278,9 @@ export class PBRMaterialParser {
270
278
 
271
279
  this.uniforms = {
272
280
  // TODO: find better values?
273
- u_Camera: [0, 0, 0], // Model should override
281
+ camera: [0, 0, 0], // Model should override
274
282
 
275
- u_MetallicRoughnessValues: [1, 1] // Default is 1 and 1
283
+ metallicRoughnessValues: [1, 1] // Default is 1 and 1
276
284
  };
277
285
 
278
286
  this.bindings = {};
@@ -281,17 +289,17 @@ export class PBRMaterialParser {
281
289
  this.generatedTextures = [];
282
290
 
283
291
  if (imageBasedLightingEnvironment) {
284
- this.bindings.u_DiffuseEnvSampler = imageBasedLightingEnvironment.getDiffuseEnvSampler();
285
- this.bindings.u_SpecularEnvSampler = imageBasedLightingEnvironment.getSpecularEnvSampler();
286
- this.bindings.u_brdfLUT = imageBasedLightingEnvironment.getBrdfTexture();
287
- this.uniforms.u_ScaleIBLAmbient = [1, 1];
292
+ this.bindings.pbr_diffuseEnvSampler = imageBasedLightingEnvironment.getDiffuseEnvSampler();
293
+ this.bindings.pbr_specularEnvSampler = imageBasedLightingEnvironment.getSpecularEnvSampler();
294
+ this.bindings.pbr_BrdfLUT = imageBasedLightingEnvironment.getBrdfTexture();
295
+ this.uniforms.scaleIBLAmbient = [1, 1];
288
296
  }
289
297
 
290
298
  if (pbrDebug) {
291
299
  // Override final color for reference app visualization
292
300
  // of various parameters in the lighting equation.
293
- this.uniforms.u_ScaleDiffBaseMR = [0, 0, 0, 0];
294
- this.uniforms.u_ScaleFGDSpec = [0, 0, 0, 0];
301
+ this.uniforms.scaleDiffBaseMR = [0, 0, 0, 0];
302
+ this.uniforms.scaleFGDSpec = [0, 0, 0, 0];
295
303
  }
296
304
 
297
305
  this.defineIfPresent(attributes.NORMAL, 'HAS_NORMALS');
@@ -323,31 +331,31 @@ export class PBRMaterialParser {
323
331
 
324
332
  /** Parse GLTF material record *
325
333
  parseMaterial(material) {
326
- this.uniforms.pbr_uUnlit = Boolean(material.unlit);
334
+ this.uniforms.unlit = Boolean(material.unlit);
327
335
 
328
336
  if (material.pbrMetallicRoughness) {
329
337
  this.parsePbrMetallicRoughness(material.pbrMetallicRoughness);
330
338
  }
331
339
  if (material.normalTexture) {
332
- this.addTexture(material.normalTexture, 'u_NormalSampler', 'HAS_NORMALMAP');
340
+ this.addTexture(material.normalTexture, 'pbr_normalSampler', 'HAS_NORMALMAP');
333
341
 
334
342
  const {scale = 1} = material.normalTexture;
335
- this.uniforms.u_NormalScale = scale;
343
+ this.uniforms.normalScale = scale;
336
344
  }
337
345
  if (material.occlusionTexture) {
338
- this.addTexture(material.occlusionTexture, 'u_OcclusionSampler', 'HAS_OCCLUSIONMAP');
346
+ this.addTexture(material.occlusionTexture, 'pbr_occlusionSampler', 'HAS_OCCLUSIONMAP');
339
347
 
340
348
  const {strength = 1} = material.occlusionTexture;
341
- this.uniforms.u_OcclusionStrength = strength;
349
+ this.uniforms.occlusionStrength = strength;
342
350
  }
343
351
  if (material.emissiveTexture) {
344
- this.addTexture(material.emissiveTexture, 'u_EmissiveSampler', 'HAS_EMISSIVEMAP');
345
- this.uniforms.u_EmissiveFactor = material.emissiveFactor || [0, 0, 0];
352
+ this.addTexture(material.emissiveTexture, 'pbr_emissiveSampler', 'HAS_EMISSIVEMAP');
353
+ this.uniforms.emissiveFactor = material.emissiveFactor || [0, 0, 0];
346
354
  }
347
355
  if (material.alphaMode === 'MASK') {
348
356
  const {alphaCutoff = 0.5} = material;
349
357
  this.defines.ALPHA_CUTOFF = 1;
350
- this.uniforms.u_AlphaCutoff = alphaCutoff;
358
+ this.uniforms.alphaCutoff = alphaCutoff;
351
359
  } else if (material.alphaMode === 'BLEND') {
352
360
  log.warn('BLEND alphaMode might not work well because it requires mesh sorting')();
353
361
  Object.assign(this.parameters, {
@@ -363,21 +371,21 @@ export class PBRMaterialParser {
363
371
  if (pbrMetallicRoughness.baseColorTexture) {
364
372
  this.addTexture(
365
373
  pbrMetallicRoughness.baseColorTexture,
366
- 'u_BaseColorSampler',
374
+ 'pbr_baseColorSampler',
367
375
  'HAS_BASECOLORMAP'
368
376
  );
369
377
  }
370
- this.uniforms.u_BaseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];
378
+ this.uniforms.baseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];
371
379
 
372
380
  if (pbrMetallicRoughness.metallicRoughnessTexture) {
373
381
  this.addTexture(
374
382
  pbrMetallicRoughness.metallicRoughnessTexture,
375
- 'u_MetallicRoughnessSampler',
383
+ 'pbr_metallicRoughnessSampler',
376
384
  'HAS_METALROUGHNESSMAP'
377
385
  );
378
386
  }
379
387
  const {metallicFactor = 1, roughnessFactor = 1} = pbrMetallicRoughness;
380
- this.uniforms.u_MetallicRoughnessValues = [metallicFactor, roughnessFactor];
388
+ this.uniforms.metallicRoughnessValues = [metallicFactor, roughnessFactor];
381
389
  }
382
390
 
383
391
  /** Create a texture from a glTF texture/sampler/image combo and add it to bindings *