@base2datadesign/viewer-kit 0.2.6 → 0.2.8

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.
@@ -18,6 +18,7 @@ export declare class ViewerEngine {
18
18
  private animationFrame;
19
19
  private lastWidth;
20
20
  private lastHeight;
21
+ private maxPixelRatio;
21
22
  constructor(options: ViewerCreateOptions);
22
23
  getHandle(): ViewerHandle;
23
24
  start(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ViewerEngine.d.ts","sourceRoot":"","sources":["../../src/engine/ViewerEngine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,WAAW,EAAiB,sBAAsB,EAAE,mBAAmB,EAAmB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQrK,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;IAE1D,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,iBAAiB,CAAU;IAEnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,mBAAmB;IAkDxC,SAAS,IAAI,YAAY;IAkBzB,KAAK,IAAI,IAAI;IAgBb,IAAI,IAAI,IAAI;IAQZ,MAAM,IAAI,IAAI;IAYd,OAAO,IAAI,IAAI;IAef,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIjC,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAStD,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAwBjC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAe5C,cAAc,IAAI,WAAW;IAQvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCjC,WAAW,IAAI,cAAc;IAe7B,OAAO,CAAC,YAAY;IAuCpB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,aAAa;CAKtB"}
1
+ {"version":3,"file":"ViewerEngine.d.ts","sourceRoot":"","sources":["../../src/engine/ViewerEngine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,WAAW,EAAiB,sBAAsB,EAAE,mBAAmB,EAAmB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQrK,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;IAE1D,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,iBAAiB,CAAU;IAEnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,EAAE,mBAAmB;IAwDxC,SAAS,IAAI,YAAY;IAkBzB,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,IAAI;IAQZ,MAAM,IAAI,IAAI;IAcd,OAAO,IAAI,IAAI;IAef,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIjC,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAStD,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAwBjC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAe5C,cAAc,IAAI,WAAW;IAQvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCjC,WAAW,IAAI,cAAc;IAe7B,OAAO,CAAC,YAAY;IAuCpB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,aAAa;CAKtB"}
@@ -25,6 +25,7 @@ export class ViewerEngine {
25
25
  animationFrame = null;
26
26
  lastWidth;
27
27
  lastHeight;
28
+ maxPixelRatio;
28
29
  constructor(options) {
29
30
  this.container = options.container;
30
31
  const basePresets = options.presets ?? DEFAULT_PRESETS;
@@ -47,6 +48,11 @@ export class ViewerEngine {
47
48
  this.controls = new OrbitControls(this.camera, this.renderer.domElement);
48
49
  this.controls.enableDamping = true;
49
50
  this.controls.dampingFactor = 0.05;
51
+ this.controls.addEventListener("change", () => {
52
+ if (this.usePostprocessing) {
53
+ this.postFxSystem.invalidate();
54
+ }
55
+ });
50
56
  const target = options.camera?.target ?? [0, 1.5, 0];
51
57
  this.controls.target.set(...target);
52
58
  this.controls.update();
@@ -59,6 +65,7 @@ export class ViewerEngine {
59
65
  this.usePostprocessing = options.usePostprocessing ?? true;
60
66
  this.lastWidth = width;
61
67
  this.lastHeight = height;
68
+ this.maxPixelRatio = 1.75;
62
69
  this.postFxSystem.resize(width, height);
63
70
  this.applyPreset(this.presetId);
64
71
  }
@@ -86,6 +93,9 @@ export class ViewerEngine {
86
93
  const loop = () => {
87
94
  if (!this.running)
88
95
  return;
96
+ if (this.container.clientWidth !== this.lastWidth || this.container.clientHeight !== this.lastHeight) {
97
+ this.resize();
98
+ }
89
99
  this.controls.update();
90
100
  if (this.usePostprocessing) {
91
101
  this.postFxSystem.render();
@@ -109,6 +119,8 @@ export class ViewerEngine {
109
119
  const height = this.container.clientHeight || 1;
110
120
  this.lastWidth = width;
111
121
  this.lastHeight = height;
122
+ const deviceRatio = typeof window !== "undefined" ? window.devicePixelRatio : 1;
123
+ this.renderer.setPixelRatio(Math.min(deviceRatio, this.maxPixelRatio));
112
124
  this.camera.aspect = width / height;
113
125
  this.camera.updateProjectionMatrix();
114
126
  this.renderer.setSize(width, height);
@@ -278,12 +290,14 @@ export class ViewerEngine {
278
290
  ? { ...preset.renderer, toneMappingExposure: exposureOverride }
279
291
  : preset.renderer;
280
292
  applyRendererConfig(this.renderer, rendererConfig);
293
+ this.maxPixelRatio = rendererConfig?.maxPixelRatio ?? this.maxPixelRatio;
281
294
  // applyRendererConfig can change pixel ratio; keep drawing buffer in sync.
282
295
  this.renderer.setSize(this.lastWidth, this.lastHeight);
283
296
  this.postFxSystem.resize(this.lastWidth, this.lastHeight);
284
297
  void this.environmentSystem.apply(preset);
285
298
  this.lightingSystem.apply(preset);
286
299
  this.postFxSystem.apply(this.usePostprocessing ? preset.postfx : undefined);
300
+ this.postFxSystem.invalidate();
287
301
  this.debugSystem.apply(preset);
288
302
  }
289
303
  resolvePreset(presetId) {
@@ -1 +1 @@
1
- {"version":3,"file":"sciencePresets.d.ts","sourceRoot":"","sources":["../../src/presets/sciencePresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAOd,MAAM,iBAAiB,CAAC;AA6fzB,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE3D,CAAC;AAEF,eAAO,MAAM,yBAAyB,kBAA6B,CAAC;AAEpE,wBAAgB,kBAAkB,IAAI,aAAa,CA6BlD;AAGD,eAAO,MAAM,mBAAmB,2BAAqB,CAAC;AAEtD,eAAO,MAAM,eAAe,eAAuB,CAAC"}
1
+ {"version":3,"file":"sciencePresets.d.ts","sourceRoot":"","sources":["../../src/presets/sciencePresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAOd,MAAM,iBAAiB,CAAC;AAkgBzB,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE3D,CAAC;AAEF,eAAO,MAAM,yBAAyB,kBAA6B,CAAC;AAEpE,wBAAgB,kBAAkB,IAAI,aAAa,CA6BlD;AAGD,eAAO,MAAM,mBAAmB,2BAAqB,CAAC;AAEtD,eAAO,MAAM,eAAe,eAAuB,CAAC"}
@@ -427,6 +427,8 @@ const buildRendererConfig = (preset) => ({
427
427
  type: "pcfsoft",
428
428
  },
429
429
  });
430
+ const DEFAULT_AO_COLOR = "#000000";
431
+ const DEFAULT_AO_QUALITY = "high";
430
432
  const buildPostFxConfig = (preset) => ({
431
433
  ao: preset.config.ao
432
434
  ? {
@@ -435,6 +437,8 @@ const buildPostFxConfig = (preset) => ({
435
437
  radius: preset.config.ao.radius,
436
438
  distanceFalloff: preset.config.ao.distanceFalloff,
437
439
  halfRes: preset.config.ao.halfRes,
440
+ quality: DEFAULT_AO_QUALITY,
441
+ color: DEFAULT_AO_COLOR,
438
442
  }
439
443
  : { enabled: false },
440
444
  });
@@ -218,7 +218,7 @@ export class EnvironmentSystem {
218
218
  const token = ++this.loadToken;
219
219
  const backgroundEnabled = cube.showBackground !== false;
220
220
  const lightingEnabled = cube.showLighting !== false;
221
- const usePmrem = cube.usePmrem !== false;
221
+ const usePmrem = cube.usePmrem ?? false;
222
222
  const faces = await Promise.all([
223
223
  this.resolveAsset(cube.px, "cubeface"),
224
224
  this.resolveAsset(cube.nx, "cubeface"),
@@ -1 +1 @@
1
- {"version":3,"file":"postfxSystem.d.ts","sourceRoot":"","sources":["../../src/systems/postfxSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAA6B;gBAEtC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,iBAAiB;IAM9F,KAAK,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI;IA2GlC,MAAM,IAAI,IAAI;IAUd,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY3C,OAAO,IAAI,IAAI;IAaf,UAAU,IAAI,IAAI;IAqBlB,QAAQ,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE;CAOpF"}
1
+ {"version":3,"file":"postfxSystem.d.ts","sourceRoot":"","sources":["../../src/systems/postfxSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAA6B;gBAEtC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,iBAAiB;IAM9F,KAAK,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI;IA6GlC,MAAM,IAAI,IAAI;IAUd,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAa3C,OAAO,IAAI,IAAI;IAaf,UAAU,IAAI,IAAI;IAqBlB,QAAQ,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE;CAOpF"}
@@ -121,6 +121,7 @@ export class PostFxSystem {
121
121
  if (lastPass) {
122
122
  lastPass.renderToScreen = true;
123
123
  }
124
+ this.invalidate();
124
125
  }
125
126
  render() {
126
127
  if (this.enabled && this.composer) {
@@ -138,6 +139,7 @@ export class PostFxSystem {
138
139
  this.composer.setSize(width, height);
139
140
  if (this.aoPass)
140
141
  this.aoPass.setSize(width, height);
142
+ this.invalidate();
141
143
  if (this.pendingConfig) {
142
144
  const pending = this.pendingConfig;
143
145
  this.pendingConfig = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base2datadesign/viewer-kit",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "main": "./dist/index.js",