@crystaldesign/real-time-viewer 25.8.0-beta.26 → 25.8.0-beta.28

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.
@@ -20,7 +20,6 @@ import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
20
20
  import { SSAO2RenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline';
21
21
  import '@babylonjs/core/Rendering/geometryBufferRendererSceneComponent';
22
22
  import '@babylonjs/core/Rendering/prePassRendererSceneComponent';
23
- import { UniversalCamera } from '@babylonjs/core/Cameras/universalCamera';
24
23
  import { PBRMetallicRoughnessMaterial } from '@babylonjs/core/Materials/PBR/pbrMetallicRoughnessMaterial';
25
24
  import { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';
26
25
  import { Tools, Observable, WebRequest } from '@babylonjs/core/Misc';
@@ -47,8 +46,9 @@ import { Matrix as Matrix$1, Vector3 as Vector3$1 } from '@babylonjs/core/Maths/
47
46
  import { EngineFactory } from '@babylonjs/core/Engines/engineFactory';
48
47
  import { Scene } from '@babylonjs/core/scene';
49
48
  import { DracoCompression } from '@babylonjs/core/Meshes/Compression/dracoCompression';
50
- import { SceneLoader } from '@babylonjs/core/Loading/sceneLoader';
49
+ import { LoadAssetContainerAsync } from '@babylonjs/core/Loading/';
51
50
  import '@babylonjs/loaders/glTF/2.0/';
51
+ import { UniversalCamera } from '@babylonjs/core/Cameras/universalCamera';
52
52
  import { jsx } from 'react/jsx-runtime';
53
53
 
54
54
  (function() {
@@ -867,7 +867,7 @@ var lightning = function lightning(diva3durl, scene, cams, sceneStore) {
867
867
  environmentTexture.rotationY = 1.45;
868
868
  scene.environmentTexture = environmentTexture;
869
869
  scene.createDefaultSkybox(environmentTexture);
870
- scene.environmentIntensity = 1;
870
+ scene.environmentIntensity = 1.2;
871
871
  scene.getMaterialByName('skyBox').alpha = 0;
872
872
  var ssao = new SSAO2RenderingPipeline('ssao', scene, {
873
873
  ssaoRatio: 0.5,
@@ -876,7 +876,7 @@ var lightning = function lightning(diva3durl, scene, cams, sceneStore) {
876
876
  }, cams);
877
877
  ssao.radius = 1.25;
878
878
  ssao.epsilon = 0.002;
879
- ssao.totalStrength = 0.7;
879
+ ssao.totalStrength = .7;
880
880
  ssao.bilateralTolerance = 0.1;
881
881
  ssao.base = 0;
882
882
  ssao.expensiveBlur = true;
@@ -890,109 +890,6 @@ var lightning = function lightning(diva3durl, scene, cams, sceneStore) {
890
890
  sceneStore.ssao = ssao;
891
891
  };
892
892
 
893
- function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
894
- function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
895
- function createCams(scene, viewpoint) {
896
- var _useUtilStoreContext = useUtilStoreContext(),
897
- vector3ToBVector3 = _useUtilStoreContext.vector3ToBVector3,
898
- degreesToRadians = _useUtilStoreContext.degreesToRadians;
899
- function createCam(_ref) {
900
- var name = _ref.name,
901
- pos = _ref.pos,
902
- rot = _ref.rot,
903
- isEnabled = _ref.isEnabled,
904
- parent = _ref.parent,
905
- target = _ref.target;
906
- var existingCam = scene.getCameraByName(name);
907
- if (existingCam) return existingCam;
908
- var camera = new UniversalCamera(name, pos, scene);
909
- camera.rotation = degreesToRadians(rot);
910
- camera.minZ = 0.1;
911
- camera.maxZ = 30;
912
- camera.fov = 0.418879;
913
- if (isEnabled) scene.activeCamera = camera;
914
- if (parent) camera.parent = parent;
915
- var canvas = scene.getEngine().getRenderingCanvas();
916
- camera.inputs.clear();
917
- camera.inputs.removeByType('FreeCameraKeyboardMoveInput');
918
- camera.inputs.removeByType('FreeCameraMouseInput');
919
- camera.inputs.add(GetCameraControls(camera));
920
- // only control the current active Cam
921
- if (isEnabled) {
922
- camera.attachControl(canvas, true);
923
- }
924
- if (target) camera.target = target;
925
- return camera;
926
- }
927
- function createDefaultCam() {
928
- return [createCam({
929
- name: 'defaultCam',
930
- isEnabled: true,
931
- pos: new Vector3(4.5, 2.2, 8),
932
- rot: new Vector3(7.75, -150, 0),
933
- parent: undefined
934
- })];
935
- }
936
- if (scene.activeCamera) return [scene.activeCamera];
937
- if (!viewpoint) return createDefaultCam();
938
- return [createCam({
939
- name: 'defaultCam',
940
- isEnabled: true,
941
- pos: vector3ToBVector3(viewpoint.pos).multiply(new Vector3(-0.01, 0.01, 0.01)),
942
- rot: vector3ToBVector3(_objectSpread$1(_objectSpread$1({}, viewpoint.rot), {}, {
943
- x: -viewpoint.rot.x
944
- })),
945
- target: vector3ToBVector3(viewpoint.targetPos).multiply(new Vector3(-0.01, 0.01, 0.01)),
946
- parent: undefined
947
- })];
948
- }
949
- function updateCam(camera, scene) {
950
- var _sceneStore$updateCam;
951
- if (camera.pos.x == 0 && camera.pos.y == 0 && camera.pos.z == 0) return;
952
- var utilStore = useUtilStoreContext();
953
- var sceneStore = useSceneStoreContext();
954
- var cam = scene.getCameraByName('defaultCam');
955
- if (!cam) {
956
- var _cam = createCams(scene, camera)[0];
957
- sceneStore.targetCameraPosition = _cam.position;
958
- sceneStore.cameraTargetPosition = _cam.target;
959
- return;
960
- }
961
- if (camera.pos.x == cam.position.x && camera.pos.y == cam.position.y && camera.pos.z == camera.pos.z) return;
962
- var position = utilStore.vector3ToBVector3(camera.pos).multiply(new Vector3(-0.01, 0.01, 0.01));
963
- var rotation = utilStore.degreesToRadians(utilStore.vector3ToBVector3(_objectSpread$1(_objectSpread$1({}, camera.rot), {}, {
964
- x: -camera.rot.x
965
- })));
966
- var target = utilStore.vector3ToBVector3(camera.targetPos).multiply(new Vector3(-0.01, 0.01, 0.01));
967
- cam.position = position;
968
- cam.rotation = rotation;
969
- cam.setTarget(target);
970
- sceneStore.targetCameraPosition = position;
971
- sceneStore.cameraTargetPosition = target;
972
- (_sceneStore$updateCam = sceneStore.updateCameraInformation) === null || _sceneStore$updateCam === void 0 || _sceneStore$updateCam.call(sceneStore, {
973
- horiFov: cam.fov * 180 / Math.PI,
974
- lensShiftX: 0,
975
- lensShiftY: 0,
976
- name: cam.name,
977
- pos: {
978
- x: position.x,
979
- y: position.y,
980
- z: position.z
981
- },
982
- rot: {
983
- x: rotation.x * 180 / Math.PI,
984
- y: rotation.y * 180 / Math.PI,
985
- z: rotation.z * 180 / Math.PI
986
- },
987
- targetPos: {
988
- x: target.x,
989
- y: target.y,
990
- z: target.z
991
- },
992
- vertFov: cam.fov * 180 / Math.PI
993
- });
994
- }
995
-
996
893
  function shadow() {
997
894
  var _useSceneStoreContext = useSceneStoreContext(),
998
895
  hasRendered = _useSceneStoreContext.hasRendered,
@@ -1001,17 +898,24 @@ function shadow() {
1001
898
  degreesToRadians = _useUtilStoreContext.degreesToRadians;
1002
899
  if (!hasRendered && !scene.getMeshByName('ground')) {
1003
900
  var light = new DirectionalLight('dirl', new Vector3(-1, 0, 0), scene);
1004
- var lightf = new DirectionalLight('dirf', new Vector3(0, -0.436, -0.9), scene);
1005
- var lightr = new DirectionalLight('dirr', new Vector3(0, -1, 0.3), scene);
1006
- var lightl = new DirectionalLight('dirb', new Vector3(0.2, -1, 0.2), scene);
1007
- lightl.intensity = 1;
1008
- lightf.intensity = 2.2;
901
+ var lightf = new DirectionalLight('dirf', new Vector3(-.55, 0, -.85), scene);
902
+ var lightl = new DirectionalLight('dirb', new Vector3(0, 0, 1), scene);
903
+ var topLight = new DirectionalLight('dirt', new Vector3(0, -1, 0), scene);
904
+ lightl.intensity = .5;
905
+ lightf.intensity = 2;
1009
906
  light.intensity = 1;
1010
- lightr.intensity = 1;
1011
- light.position = new Vector3(-2, 5, 0);
1012
- lightf.position = new Vector3(2, 5, 0);
1013
- lightr.position = new Vector3(0, 5, -2);
1014
- lightl.position = new Vector3(0, 5, -2);
907
+ topLight.intensity = 1.5;
908
+ lightl.range = 5;
909
+ lightl.falloffType = 1;
910
+ topLight.range = 5;
911
+ topLight.falloffType = 1;
912
+ lightf.range = 5;
913
+ lightf.falloffType = 1;
914
+ light.range = 5;
915
+ light.falloffType = 1;
916
+ light.position = new Vector3(-2, 3, 0);
917
+ lightf.position = new Vector3(2, 3, 0);
918
+ lightl.position = new Vector3(0, 3, -2);
1015
919
  var ground = MeshBuilder.CreatePlane('ground', {
1016
920
  width: 100,
1017
921
  height: 100
@@ -1450,7 +1354,7 @@ var SceneStore = /*#__PURE__*/function () {
1450
1354
  key: "runRenderLoop",
1451
1355
  value: function runRenderLoop() {
1452
1356
  var engine = this._scene.getEngine();
1453
- if (engine.activeRenderLoops.length != 0) return;
1357
+ if (this && engine.activeRenderLoops.length != 0) return;
1454
1358
  engine.runRenderLoop(this.renderLoop.bind(this));
1455
1359
  }
1456
1360
  }, {
@@ -1463,8 +1367,8 @@ var SceneStore = /*#__PURE__*/function () {
1463
1367
  key: "runRenderLoopForTime",
1464
1368
  value: function runRenderLoopForTime(ms) {
1465
1369
  var _this2 = this;
1466
- this.runRenderLoop();
1467
1370
  clearTimeout(this._renderLoopTimeoutId);
1371
+ this.runRenderLoop();
1468
1372
  this._renderLoopTimeoutId = setTimeout(function () {
1469
1373
  _this2.stopRenderLoop();
1470
1374
  }, ms);
@@ -1497,7 +1401,7 @@ var SceneStore = /*#__PURE__*/function () {
1497
1401
  key: "checkMaterialCache",
1498
1402
  value: function checkMaterialCache() {
1499
1403
  // material cache can't go over amount x because it leads to performance issues
1500
- if (this._materialCache.length < 10) return;
1404
+ if (this._materialCache.length < 5) return;
1501
1405
  var amountToDispose = this._materialCache.length - 11;
1502
1406
  var disposableMaterials = this._materialCache.filter(function (m) {
1503
1407
  return m.mat.getBindedMeshes().length == 0;
@@ -1507,15 +1411,13 @@ var SceneStore = /*#__PURE__*/function () {
1507
1411
  });
1508
1412
  for (var idx = 0; idx < amountToDispose; idx++) {
1509
1413
  if (idx < disposableMaterials.length - 1) {
1510
- var _mat$baseTexture, _mat$metallicRoughnes, _mat$normalTexture;
1511
1414
  var mat = disposableMaterials[idx].mat;
1512
- mat.dispose();
1513
- (_mat$baseTexture = mat.baseTexture) === null || _mat$baseTexture === void 0 || _mat$baseTexture.dispose();
1514
- (_mat$metallicRoughnes = mat.metallicRoughnessTexture) === null || _mat$metallicRoughnes === void 0 || _mat$metallicRoughnes.dispose();
1515
- (_mat$normalTexture = mat.normalTexture) === null || _mat$normalTexture === void 0 || _mat$normalTexture.dispose();
1415
+ if (!mat.isReady()) return; //disposing the material before it's compilation causes issues (HOLZ_WENGE LUECK) not compiled because on no mesh
1416
+ mat.dispose(true, true);
1516
1417
  this._materialCache.splice(this._materialCache.indexOf(disposableMaterials[idx]), 1);
1517
1418
  }
1518
1419
  }
1420
+ this._scene.resetCachedMaterial();
1519
1421
  }
1520
1422
  }, {
1521
1423
  key: "addMaterialToCache",
@@ -1533,9 +1435,8 @@ var SceneStore = /*#__PURE__*/function () {
1533
1435
  shadow();
1534
1436
  Tools.fallbackTexture = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='; // blank white image
1535
1437
  this.setResolution(gameCanvas, resolution);
1536
- var cams = createCams(this._scene, viewpoint);
1537
- this._targetCameraPosition = cams[0].position;
1538
- lightning(diva3durl, this._scene, cams, this);
1438
+ this._targetCameraPosition = this._scene.activeCamera.position;
1439
+ lightning(diva3durl, this._scene, this._scene.cameras, this);
1539
1440
  }
1540
1441
  }, {
1541
1442
  key: "setRoot",
@@ -1856,7 +1757,6 @@ var UIStore = /*#__PURE__*/function () {
1856
1757
  _defineProperty(this, "updateOverlayImage", function (overlayImage) {
1857
1758
  var _this$_diffuseTexture;
1858
1759
  if (!overlayImage || !_this._scene || ((_this$_diffuseTexture = _this._diffuseTexture) === null || _this$_diffuseTexture === void 0 ? void 0 : _this$_diffuseTexture.url) == overlayImage.base64) return;
1859
- if (!_this._scene.activeCamera) createCams(_this._scene, undefined);
1860
1760
  var utilStore = useUtilStoreContext();
1861
1761
  if (!utilStore || !utilStore.updateCam) return;
1862
1762
  _this._isStaticBg = overlayImage.isStaticBg;
@@ -1895,8 +1795,6 @@ var UIStore = /*#__PURE__*/function () {
1895
1795
  shaderMat.setVector2("scale", new Vector2(1, 1)); // adjust scale here
1896
1796
  shaderMat.alpha = 1;
1897
1797
  shaderMat.backFaceCulling = true;
1898
- this._diffuseTexture.anisotropicFilteringLevel = 16;
1899
- this._diffuseTexture.updateSamplingMode(Texture.TRILINEAR_SAMPLINGMODE);
1900
1798
 
1901
1799
  // Get aspect ratio of the current screen
1902
1800
  this._plane = MeshBuilder.CreatePlane('overlayplane', {
@@ -2107,7 +2005,7 @@ var UIStore = /*#__PURE__*/function () {
2107
2005
  value: function pointerOverElement(element) {
2108
2006
  var _this$_runRenderLoopF,
2109
2007
  _this5 = this;
2110
- this.unityCombActive && ((_this$_runRenderLoopF = this._runRenderLoopForTime) === null || _this$_runRenderLoopF === void 0 ? void 0 : _this$_runRenderLoopF.call(this, 1000));
2008
+ this.unityCombActive && ((_this$_runRenderLoopF = this._runRenderLoopForTime) === null || _this$_runRenderLoopF === void 0 ? void 0 : _this$_runRenderLoopF.call(this, 5000));
2111
2009
  this._selectedHl.removeAllMeshes();
2112
2010
  this._selectedHl.addExcludedMesh(this._plane);
2113
2011
  if (this._plane.visibility == 1) this._selectedMeshes.forEach(function (_m) {
@@ -2123,7 +2021,7 @@ var UIStore = /*#__PURE__*/function () {
2123
2021
  value: function pointerOutElement(element) {
2124
2022
  var _this$_runRenderLoopF2,
2125
2023
  _this6 = this;
2126
- this.unityCombActive && ((_this$_runRenderLoopF2 = this._runRenderLoopForTime) === null || _this$_runRenderLoopF2 === void 0 ? void 0 : _this$_runRenderLoopF2.call(this, 1000));
2024
+ this.unityCombActive && ((_this$_runRenderLoopF2 = this._runRenderLoopForTime) === null || _this$_runRenderLoopF2 === void 0 ? void 0 : _this$_runRenderLoopF2.call(this, 5000));
2127
2025
  this._selectedHl.removeAllMeshes();
2128
2026
  this._selectedHl.addExcludedMesh(this._plane);
2129
2027
  if (this._plane.visibility == 1) element.getChildMeshes().forEach(function (_m) {
@@ -2944,7 +2842,7 @@ var customMat = /*#__PURE__*/function () {
2944
2842
  sizeMb: 0
2945
2843
  });
2946
2844
  case 31:
2947
- mat = new PBRMetallicRoughnessMaterial(_customMat.name, _customMat.scene);
2845
+ mat = new PBRMetallicRoughnessMaterial(_customMat.name, sceneStore.scene);
2948
2846
  return _context.abrupt("return", {
2949
2847
  mat: mat,
2950
2848
  found: true
@@ -2992,9 +2890,7 @@ function _findAssets() {
2992
2890
  size = 0;
2993
2891
  _context2.prev = 4;
2994
2892
  _context2.next = 7;
2995
- return SceneLoader.ImportMeshAsync(null, path, geo.name + '.glb', sceneStore.scene, function (progress) {
2996
- size = progress.total;
2997
- });
2893
+ return LoadAssetContainerAsync(path + geo.name + '.glb', sceneStore.scene);
2998
2894
  case 7:
2999
2895
  result = _context2.sent;
3000
2896
  utilStore.setAnalyzeDataRow({
@@ -3045,7 +2941,7 @@ function _findAssets() {
3045
2941
  while (1) switch (_context.prev = _context.next) {
3046
2942
  case 0:
3047
2943
  if (!geo.material) {
3048
- _context.next = 20;
2944
+ _context.next = 22;
3049
2945
  break;
3050
2946
  }
3051
2947
  splittedName = geo.material.name.split('.');
@@ -3074,7 +2970,13 @@ function _findAssets() {
3074
2970
  geo: geo.name
3075
2971
  });
3076
2972
  geo.material = mat.mat;
3077
- oldMat = sceneStore.scene.getMaterialByUniqueID(oldMatId);
2973
+ oldMat = sceneStore.scene.getMaterialByUniqueId(oldMatId);
2974
+ if (oldMat) {
2975
+ _context.next = 17;
2976
+ break;
2977
+ }
2978
+ return _context.abrupt("return");
2979
+ case 17:
3078
2980
  _iterator3 = _createForOfIteratorHelper$3(oldMat.getBindedMeshes());
3079
2981
  try {
3080
2982
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -3086,40 +2988,40 @@ function _findAssets() {
3086
2988
  } finally {
3087
2989
  _iterator3.f();
3088
2990
  }
3089
- oldMat.dispose();
3090
- _context.next = 37;
2991
+ oldMat.dispose(true, true);
2992
+ _context.next = 39;
3091
2993
  break;
3092
- case 20:
2994
+ case 22:
3093
2995
  _iterator4 = _createForOfIteratorHelper$3(geo.getChildMeshes());
3094
- _context.prev = 21;
2996
+ _context.prev = 23;
3095
2997
  _iterator4.s();
3096
- case 23:
2998
+ case 25:
3097
2999
  if ((_step4 = _iterator4.n()).done) {
3098
- _context.next = 29;
3000
+ _context.next = 31;
3099
3001
  break;
3100
3002
  }
3101
3003
  child = _step4.value;
3102
- _context.next = 27;
3004
+ _context.next = 29;
3103
3005
  return unifyAndSetStdMats(child, iln);
3104
- case 27:
3105
- _context.next = 23;
3106
- break;
3107
3006
  case 29:
3108
- _context.next = 34;
3007
+ _context.next = 25;
3109
3008
  break;
3110
3009
  case 31:
3111
- _context.prev = 31;
3112
- _context.t0 = _context["catch"](21);
3010
+ _context.next = 36;
3011
+ break;
3012
+ case 33:
3013
+ _context.prev = 33;
3014
+ _context.t0 = _context["catch"](23);
3113
3015
  _iterator4.e(_context.t0);
3114
- case 34:
3115
- _context.prev = 34;
3016
+ case 36:
3017
+ _context.prev = 36;
3116
3018
  _iterator4.f();
3117
- return _context.finish(34);
3118
- case 37:
3019
+ return _context.finish(36);
3020
+ case 39:
3119
3021
  case "end":
3120
3022
  return _context.stop();
3121
3023
  }
3122
- }, _callee, null, [[21, 31, 34, 37]]);
3024
+ }, _callee, null, [[23, 33, 36, 39]]);
3123
3025
  }));
3124
3026
  return _unifyAndSetStdMats.apply(this, arguments);
3125
3027
  };
@@ -3412,8 +3314,8 @@ function _createOrGetMaterial() {
3412
3314
  function _createForOfIteratorHelper$2(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$2(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
3413
3315
  function _unsupportedIterableToArray$2(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$2(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$2(r, a) : void 0; } }
3414
3316
  function _arrayLikeToArray$2(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
3415
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3416
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3317
+ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3318
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3417
3319
  var buildScene = function buildScene(_ref) {
3418
3320
  var _sceneStore$elements;
3419
3321
  var startNode = _ref.startNode,
@@ -3440,7 +3342,7 @@ var buildScene = function buildScene(_ref) {
3440
3342
  })) === null || _cachedAssets$find === void 0 || (_cachedAssets$find = _cachedAssets$find.geo) === null || _cachedAssets$find === void 0 || _cachedAssets$find.onElements.push(curElement); // TODO
3441
3343
  var geo = mesh.clone('geo_' + mesh.name, parentNode);
3442
3344
  geo.position = new Vector3(curGeo.pos.x / 100, curGeo.pos.y / 100, -curGeo.pos.z / 100);
3443
- geo.rotation = utilStore.degreesToRadians(_objectSpread(_objectSpread({}, curGeo.rot), {}, {
3345
+ geo.rotation = utilStore.degreesToRadians(_objectSpread$1(_objectSpread$1({}, curGeo.rot), {}, {
3444
3346
  x: hqsGeo.isIDM3D ? 90 - curGeo.rot.x : curGeo.rot.x
3445
3347
  }));
3446
3348
  geo.setEnabled(true);
@@ -3723,7 +3625,9 @@ var parser = /*#__PURE__*/function () {
3723
3625
  }
3724
3626
  utilStore.setRTVAnalyzeData();
3725
3627
  deacCache(cacheGroup);
3726
- sceneStore.checkMaterialCache();
3628
+ sceneStore.scene.executeWhenReady(function () {
3629
+ return sceneStore.checkMaterialCache();
3630
+ });
3727
3631
  case 15:
3728
3632
  case "end":
3729
3633
  return _context.stop();
@@ -3735,9 +3639,112 @@ var parser = /*#__PURE__*/function () {
3735
3639
  };
3736
3640
  }();
3737
3641
 
3642
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3643
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3644
+ function createCams(scene, viewpoint) {
3645
+ var _useUtilStoreContext = useUtilStoreContext(),
3646
+ vector3ToBVector3 = _useUtilStoreContext.vector3ToBVector3,
3647
+ degreesToRadians = _useUtilStoreContext.degreesToRadians;
3648
+ function createCam(_ref) {
3649
+ var name = _ref.name,
3650
+ pos = _ref.pos,
3651
+ rot = _ref.rot,
3652
+ isEnabled = _ref.isEnabled,
3653
+ parent = _ref.parent,
3654
+ target = _ref.target;
3655
+ var existingCam = scene.getCameraByName(name);
3656
+ if (existingCam) return existingCam;
3657
+ var camera = new UniversalCamera(name, pos, scene);
3658
+ camera.rotation = degreesToRadians(rot);
3659
+ camera.minZ = 0.1;
3660
+ camera.maxZ = 30;
3661
+ camera.fov = 0.418879;
3662
+ if (isEnabled) scene.activeCamera = camera;
3663
+ if (parent) camera.parent = parent;
3664
+ var canvas = scene.getEngine().getRenderingCanvas();
3665
+ camera.inputs.clear();
3666
+ camera.inputs.removeByType('FreeCameraKeyboardMoveInput');
3667
+ camera.inputs.removeByType('FreeCameraMouseInput');
3668
+ camera.inputs.add(GetCameraControls(camera));
3669
+ // only control the current active Cam
3670
+ if (isEnabled) {
3671
+ camera.attachControl(canvas, true);
3672
+ }
3673
+ if (target) camera.target = target;
3674
+ return camera;
3675
+ }
3676
+ function createDefaultCam() {
3677
+ return [createCam({
3678
+ name: 'defaultCam',
3679
+ isEnabled: true,
3680
+ pos: new Vector3(4.5, 2.2, 8),
3681
+ rot: new Vector3(7.75, -150, 0),
3682
+ parent: undefined
3683
+ })];
3684
+ }
3685
+ if (scene.activeCamera) return [scene.activeCamera];
3686
+ if (!viewpoint) return createDefaultCam();
3687
+ return [createCam({
3688
+ name: 'defaultCam',
3689
+ isEnabled: true,
3690
+ pos: vector3ToBVector3(viewpoint.pos).multiply(new Vector3(-0.01, 0.01, 0.01)),
3691
+ rot: vector3ToBVector3(_objectSpread(_objectSpread({}, viewpoint.rot), {}, {
3692
+ x: -viewpoint.rot.x
3693
+ })),
3694
+ target: vector3ToBVector3(viewpoint.targetPos).multiply(new Vector3(-0.01, 0.01, 0.01)),
3695
+ parent: undefined
3696
+ })];
3697
+ }
3698
+ function updateCam(camera, scene) {
3699
+ var _sceneStore$updateCam;
3700
+ if (camera.pos.x == 0 && camera.pos.y == 0 && camera.pos.z == 0) return;
3701
+ var utilStore = useUtilStoreContext();
3702
+ var sceneStore = useSceneStoreContext();
3703
+ var cam = scene.getCameraByName('defaultCam');
3704
+ if (!cam) {
3705
+ var _cam = createCams(scene, camera)[0];
3706
+ sceneStore.targetCameraPosition = _cam.position;
3707
+ sceneStore.cameraTargetPosition = _cam.target;
3708
+ return;
3709
+ }
3710
+ if (camera.pos.x == cam.position.x && camera.pos.y == cam.position.y && camera.pos.z == camera.pos.z) return;
3711
+ var position = utilStore.vector3ToBVector3(camera.pos).multiply(new Vector3(-0.01, 0.01, 0.01));
3712
+ var rotation = utilStore.degreesToRadians(utilStore.vector3ToBVector3(_objectSpread(_objectSpread({}, camera.rot), {}, {
3713
+ x: -camera.rot.x
3714
+ })));
3715
+ var target = utilStore.vector3ToBVector3(camera.targetPos).multiply(new Vector3(-0.01, 0.01, 0.01));
3716
+ cam.position = position;
3717
+ cam.rotation = rotation;
3718
+ cam.setTarget(target);
3719
+ sceneStore.targetCameraPosition = position;
3720
+ sceneStore.cameraTargetPosition = target;
3721
+ (_sceneStore$updateCam = sceneStore.updateCameraInformation) === null || _sceneStore$updateCam === void 0 || _sceneStore$updateCam.call(sceneStore, {
3722
+ horiFov: cam.fov * 180 / Math.PI,
3723
+ lensShiftX: 0,
3724
+ lensShiftY: 0,
3725
+ name: cam.name,
3726
+ pos: {
3727
+ x: position.x,
3728
+ y: position.y,
3729
+ z: position.z
3730
+ },
3731
+ rot: {
3732
+ x: rotation.x * 180 / Math.PI,
3733
+ y: rotation.y * 180 / Math.PI,
3734
+ z: rotation.z * 180 / Math.PI
3735
+ },
3736
+ targetPos: {
3737
+ x: target.x,
3738
+ y: target.y,
3739
+ z: target.z
3740
+ },
3741
+ vertFov: cam.fov * 180 / Math.PI
3742
+ });
3743
+ }
3744
+
3738
3745
  var LOG = getLogger('ARViewer', 'RealTimeRenderData');
3739
3746
  function useRealTimeRenderData (_ref) {
3740
- var _sceneStore2;
3747
+ var _sceneStore3;
3741
3748
  var jwt = _ref.jwt,
3742
3749
  actions = _ref.actions,
3743
3750
  apiConfig = _ref.apiConfig,
@@ -3850,7 +3857,7 @@ function useRealTimeRenderData (_ref) {
3850
3857
  if (!sceneStore.hasRendered) {
3851
3858
  sceneStore.hasRendered = true;
3852
3859
  }
3853
- sceneStore.runRenderLoopIndefinitely();
3860
+ sceneStore.runRenderLoopForTime(5000);
3854
3861
  sceneStore.scene.onAfterRenderObservable.add(onFirstFrame);
3855
3862
  LOG.successTransaction('BUILD_SCENE');
3856
3863
  case 34:
@@ -3877,22 +3884,28 @@ function useRealTimeRenderData (_ref) {
3877
3884
  if (gameCanvas.current && sceneStore && sceneStore.scene.getEngine()) {
3878
3885
  var _queueRerender = function queueRerender() {
3879
3886
  if (sceneStore.isInitializing) setTimeout(_queueRerender, 150);else {
3880
- if (sceneStore.scene.isReady()) onSceneReady();else sceneStore.scene.executeWhenReady(function () {
3881
- return onSceneReady();
3882
- });
3887
+ if (sceneStore.scene) {
3888
+ if (sceneStore.scene.isReady()) onSceneReady();else sceneStore.scene.executeWhenReady(function () {
3889
+ return onSceneReady();
3890
+ });
3891
+ }
3883
3892
  }
3884
3893
  };
3885
3894
  _queueRerender();
3886
3895
  }
3887
3896
  useEffect(function () {
3888
- var babylonScene = undefined;
3889
- var babylonEngine = undefined;
3890
- function init() {
3897
+ var _sceneStore;
3898
+ if ((_sceneStore = sceneStore) !== null && _sceneStore !== void 0 && (_sceneStore = _sceneStore.scene) !== null && _sceneStore !== void 0 && _sceneStore.getEngine() && sceneStore.scene.getEngine().getRenderingCanvas() == null && gameCanvas.current) {
3899
+ sceneStore.scene.getEngine()._renderingCanvas = gameCanvas.current;
3900
+ }
3901
+ }, [gameCanvas.current]);
3902
+ useEffect(function () {
3903
+ function init(_x) {
3891
3904
  return _init.apply(this, arguments);
3892
3905
  }
3893
3906
  function _init() {
3894
- _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
3895
- var context;
3907
+ _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(enginePromise) {
3908
+ var babylonEngine, babylonScene, context;
3896
3909
  return _regeneratorRuntime.wrap(function _callee$(_context) {
3897
3910
  while (1) switch (_context.prev = _context.next) {
3898
3911
  case 0:
@@ -3902,43 +3915,45 @@ function useRealTimeRenderData (_ref) {
3902
3915
  }
3903
3916
  return _context.abrupt("return");
3904
3917
  case 2:
3905
- _context.next = 4;
3906
- return EngineFactory.CreateAsync(gameCanvas.current, {
3907
- antialias: true,
3908
- stencil: true,
3909
- audioEngine: false,
3910
- adaptToDeviceRatio: true
3911
- });
3918
+ if (!sceneStore) {
3919
+ _context.next = 4;
3920
+ break;
3921
+ }
3922
+ return _context.abrupt("return");
3912
3923
  case 4:
3924
+ _context.next = 6;
3925
+ return enginePromise;
3926
+ case 6:
3913
3927
  babylonEngine = _context.sent;
3914
3928
  babylonEngine.renderEvenInBackground = renderInBackground;
3915
3929
  babylonEngine.disablePerformanceMonitorInBackground = true;
3916
3930
  babylonScene = new Scene(babylonEngine, undefined);
3917
3931
  babylonScene.clearColor = new Color4(255, 255, 255, 255);
3918
3932
  context = registerContext(babylonScene, renderjob, apiConfig, jwt, viewHandler, callbacks.onMissingGeo, callbacks.requestNewOverlayImage, overlayImage, uiConfig, callbacks.updateCameraInformation, !!isMobile);
3933
+ createCams(babylonScene, viewpoint);
3919
3934
  sceneStore = context.sceneStore;
3920
3935
  utilStore = context.utilStore;
3921
3936
  gridStore = context.gridStore;
3922
3937
  uiStore = context.uiStore;
3923
3938
  if (!babylonScene.isReady()) {
3924
- _context.next = 19;
3939
+ _context.next = 22;
3925
3940
  break;
3926
3941
  }
3927
- _context.next = 17;
3928
- return onSceneReady();
3929
- case 17:
3930
3942
  _context.next = 20;
3943
+ return onSceneReady();
3944
+ case 20:
3945
+ _context.next = 23;
3931
3946
  break;
3932
- case 19:
3947
+ case 22:
3933
3948
  babylonScene.executeWhenReady(function () {
3934
3949
  return onSceneReady();
3935
3950
  });
3936
- case 20:
3951
+ case 23:
3937
3952
  if (window && gameCanvas.current) {
3938
3953
  window.addEventListener('resize', resize);
3939
3954
  new ResizeObserver(resize).observe(gameCanvas.current);
3940
3955
  }
3941
- case 21:
3956
+ case 24:
3942
3957
  case "end":
3943
3958
  return _context.stop();
3944
3959
  }
@@ -3947,16 +3962,28 @@ function useRealTimeRenderData (_ref) {
3947
3962
  return _init.apply(this, arguments);
3948
3963
  }
3949
3964
  var resize = function resize() {
3950
- var _sceneStore;
3951
- if (inBackground || !((_sceneStore = sceneStore) !== null && _sceneStore !== void 0 && _sceneStore.scene) || !sceneStore.scene.getEngine() || !sceneStore.scene.isReady()) return;
3965
+ var _sceneStore2;
3966
+ if (inBackground || !((_sceneStore2 = sceneStore) !== null && _sceneStore2 !== void 0 && _sceneStore2.scene) || !sceneStore.scene.getEngine() || !sceneStore.scene.isReady()) return;
3952
3967
  sceneStore.runRenderLoopIndefinitely();
3953
3968
  sceneStore.scene.getEngine().resize(true);
3954
3969
  uiStore.resize();
3955
3970
  uiStore.initGui(callbacks.onElementSelected, sceneStore.elements);
3956
3971
  };
3957
- init();
3972
+ if (!gameCanvas.current) return;
3973
+ var enginePrmise = EngineFactory.CreateAsync(gameCanvas.current, {
3974
+ antialias: true,
3975
+ stencil: true,
3976
+ audioEngine: false,
3977
+ adaptToDeviceRatio: true,
3978
+ useHighPrecisionFloats: true,
3979
+ preserveDrawingBuffer: true
3980
+ });
3981
+ init(enginePrmise);
3958
3982
  return function () {
3959
- if (babylonEngine || babylonScene) {
3983
+ enginePrmise.then(function (e) {
3984
+ return e.dispose();
3985
+ });
3986
+ if (sceneStore && sceneStore.scene) {
3960
3987
  unregisterContext();
3961
3988
  sceneStore.scene.dispose();
3962
3989
  if (window) {
@@ -3968,7 +3995,7 @@ function useRealTimeRenderData (_ref) {
3968
3995
  useEffect(function () {
3969
3996
  if (overlayImage && uiStore && gameCanvas.current && sceneStore && sceneStore.scene.getEngine()) {
3970
3997
  if (!utilStore.updateCam) return;
3971
- sceneStore.runRenderLoopForTime(1000);
3998
+ sceneStore.runRenderLoopForTime(5000);
3972
3999
  shadow(); // make sure the lighting is set up otherwise the image has a wrong color
3973
4000
  uiStore.updateOverlayImage(overlayImage);
3974
4001
  if (viewpoint) updateCam(viewpoint, sceneStore.scene);
@@ -3978,9 +4005,9 @@ function useRealTimeRenderData (_ref) {
3978
4005
  if (sceneStore && elementsInfo && gameCanvas.current && sceneStore.scene.getEngine()) {
3979
4006
  uiStore.addElementsInfo(elementsInfo);
3980
4007
  uiStore.initGui(callbacks.onElementSelected, sceneStore.elements);
3981
- sceneStore.runRenderLoopForTime(1000);
4008
+ sceneStore.runRenderLoopForTime(5000);
3982
4009
  }
3983
- }, [elementsInfo, (_sceneStore2 = sceneStore) === null || _sceneStore2 === void 0 ? void 0 : _sceneStore2.elements]);
4010
+ }, [elementsInfo, (_sceneStore3 = sceneStore) === null || _sceneStore3 === void 0 ? void 0 : _sceneStore3.elements]);
3984
4011
  useEffect(function () {
3985
4012
  if (!gameCanvas.current || !sceneStore) return;
3986
4013
  if (inBackground) {