@combeenation/3d-viewer 6.0.0 → 6.1.0-beta2

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 (189) hide show
  1. package/README.md +111 -111
  2. package/dist/lib-cjs/api/classes/animationInterface.d.ts +8 -8
  3. package/dist/lib-cjs/api/classes/animationInterface.js +2 -2
  4. package/dist/lib-cjs/api/classes/dottedPath.d.ts +79 -79
  5. package/dist/lib-cjs/api/classes/dottedPath.js +166 -166
  6. package/dist/lib-cjs/api/classes/element.d.ts +149 -149
  7. package/dist/lib-cjs/api/classes/element.js +669 -669
  8. package/dist/lib-cjs/api/classes/event.d.ts +342 -326
  9. package/dist/lib-cjs/api/classes/event.js +365 -349
  10. package/dist/lib-cjs/api/classes/event.js.map +1 -1
  11. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
  12. package/dist/lib-cjs/api/classes/eventBroadcaster.js +49 -49
  13. package/dist/lib-cjs/api/classes/parameter.d.ts +339 -339
  14. package/dist/lib-cjs/api/classes/parameter.js +464 -464
  15. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
  16. package/dist/lib-cjs/api/classes/parameterObservable.js +97 -97
  17. package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -15
  18. package/dist/lib-cjs/api/classes/parameterizable.js +102 -102
  19. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +45 -45
  20. package/dist/lib-cjs/api/classes/placementAnimation.js +176 -176
  21. package/dist/lib-cjs/api/classes/variant.d.ts +234 -234
  22. package/dist/lib-cjs/api/classes/variant.js +836 -836
  23. package/dist/lib-cjs/api/classes/variantInstance.d.ts +44 -44
  24. package/dist/lib-cjs/api/classes/variantInstance.js +105 -105
  25. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -17
  26. package/dist/lib-cjs/api/classes/variantParameterizable.js +88 -88
  27. package/dist/lib-cjs/api/classes/viewer.d.ts +187 -189
  28. package/dist/lib-cjs/api/classes/viewer.js +594 -594
  29. package/dist/lib-cjs/api/classes/viewer.js.map +1 -1
  30. package/dist/lib-cjs/api/classes/viewerLight.d.ts +66 -66
  31. package/dist/lib-cjs/api/classes/viewerLight.js +348 -348
  32. package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
  33. package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
  34. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +13 -13
  35. package/dist/lib-cjs/api/internal/sceneSetup.js +226 -226
  36. package/dist/lib-cjs/api/manager/animationManager.d.ts +30 -30
  37. package/dist/lib-cjs/api/manager/animationManager.js +126 -126
  38. package/dist/lib-cjs/api/manager/gltfExportManager.d.ts +78 -65
  39. package/dist/lib-cjs/api/manager/gltfExportManager.js +241 -197
  40. package/dist/lib-cjs/api/manager/gltfExportManager.js.map +1 -1
  41. package/dist/lib-cjs/api/manager/sceneManager.d.ts +33 -31
  42. package/dist/lib-cjs/api/manager/sceneManager.js +130 -127
  43. package/dist/lib-cjs/api/manager/sceneManager.js.map +1 -1
  44. package/dist/lib-cjs/api/manager/textureLoadManager.d.ts +22 -0
  45. package/dist/lib-cjs/api/manager/textureLoadManager.js +98 -0
  46. package/dist/lib-cjs/api/manager/textureLoadManager.js.map +1 -0
  47. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +92 -92
  48. package/dist/lib-cjs/api/manager/variantInstanceManager.js +260 -260
  49. package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
  50. package/dist/lib-cjs/api/store/specStorage.js +50 -50
  51. package/dist/lib-cjs/api/util/babylonHelper.d.ts +183 -174
  52. package/dist/lib-cjs/api/util/babylonHelper.js +596 -585
  53. package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
  54. package/dist/lib-cjs/api/util/globalTypes.d.ts +383 -370
  55. package/dist/lib-cjs/api/util/globalTypes.js +1 -1
  56. package/dist/lib-cjs/api/util/resourceHelper.d.ts +58 -58
  57. package/dist/lib-cjs/api/util/resourceHelper.js +203 -203
  58. package/dist/lib-cjs/api/util/sceneLoaderHelper.d.ts +42 -35
  59. package/dist/lib-cjs/api/util/sceneLoaderHelper.js +139 -139
  60. package/dist/lib-cjs/api/util/sceneLoaderHelper.js.map +1 -1
  61. package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -9
  62. package/dist/lib-cjs/api/util/stringHelper.js +25 -25
  63. package/dist/lib-cjs/api/util/structureHelper.d.ts +9 -9
  64. package/dist/lib-cjs/api/util/structureHelper.js +48 -48
  65. package/dist/lib-cjs/buildinfo.json +3 -3
  66. package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
  67. package/dist/lib-cjs/index.d.ts +51 -51
  68. package/dist/lib-cjs/index.js +110 -110
  69. package/dist/webpack-stats.json +0 -0
  70. package/package.json +79 -79
  71. package/src/api/classes/animationInterface.ts +10 -10
  72. package/src/api/classes/dottedPath.ts +181 -181
  73. package/src/api/classes/element.ts +717 -717
  74. package/src/api/classes/event.ts +385 -367
  75. package/src/api/classes/eventBroadcaster.ts +52 -52
  76. package/src/api/classes/parameter.ts +497 -497
  77. package/src/api/classes/parameterObservable.ts +100 -100
  78. package/src/api/classes/parameterizable.ts +87 -87
  79. package/src/api/classes/placementAnimation.ts +162 -162
  80. package/src/api/classes/variant.ts +904 -904
  81. package/src/api/classes/variantInstance.ts +97 -97
  82. package/src/api/classes/variantParameterizable.ts +85 -85
  83. package/src/api/classes/viewer.ts +672 -670
  84. package/src/api/classes/viewerLight.ts +339 -339
  85. package/src/api/internal/debugViewer.ts +90 -90
  86. package/src/api/internal/lensRendering.ts +9 -9
  87. package/src/api/internal/sceneSetup.ts +205 -205
  88. package/src/api/manager/animationManager.ts +143 -143
  89. package/src/api/manager/gltfExportManager.ts +236 -192
  90. package/src/api/manager/sceneManager.ts +132 -127
  91. package/src/api/manager/textureLoadManager.ts +95 -0
  92. package/src/api/manager/variantInstanceManager.ts +265 -265
  93. package/src/api/store/specStorage.ts +51 -51
  94. package/src/api/util/babylonHelper.ts +658 -645
  95. package/src/api/util/globalTypes.ts +432 -417
  96. package/src/api/util/resourceHelper.ts +191 -191
  97. package/src/api/util/sceneLoaderHelper.ts +137 -144
  98. package/src/api/util/stringHelper.ts +23 -23
  99. package/src/api/util/structureHelper.ts +49 -49
  100. package/src/buildinfo.json +3 -3
  101. package/src/dev.ts +61 -61
  102. package/src/index.ts +96 -96
  103. package/src/types.d.ts +28 -28
  104. package/dist/lib-es6/api/classes/animationInterface.d.ts +0 -8
  105. package/dist/lib-es6/api/classes/animationInterface.js +0 -2
  106. package/dist/lib-es6/api/classes/animationInterface.js.map +0 -1
  107. package/dist/lib-es6/api/classes/dottedPath.d.ts +0 -79
  108. package/dist/lib-es6/api/classes/dottedPath.js +0 -163
  109. package/dist/lib-es6/api/classes/dottedPath.js.map +0 -1
  110. package/dist/lib-es6/api/classes/element.d.ts +0 -149
  111. package/dist/lib-es6/api/classes/element.js +0 -666
  112. package/dist/lib-es6/api/classes/element.js.map +0 -1
  113. package/dist/lib-es6/api/classes/event.d.ts +0 -326
  114. package/dist/lib-es6/api/classes/event.js +0 -346
  115. package/dist/lib-es6/api/classes/event.js.map +0 -1
  116. package/dist/lib-es6/api/classes/eventBroadcaster.d.ts +0 -26
  117. package/dist/lib-es6/api/classes/eventBroadcaster.js +0 -43
  118. package/dist/lib-es6/api/classes/eventBroadcaster.js.map +0 -1
  119. package/dist/lib-es6/api/classes/parameter.d.ts +0 -339
  120. package/dist/lib-es6/api/classes/parameter.js +0 -461
  121. package/dist/lib-es6/api/classes/parameter.js.map +0 -1
  122. package/dist/lib-es6/api/classes/parameterObservable.d.ts +0 -36
  123. package/dist/lib-es6/api/classes/parameterObservable.js +0 -94
  124. package/dist/lib-es6/api/classes/parameterObservable.js.map +0 -1
  125. package/dist/lib-es6/api/classes/parameterizable.d.ts +0 -15
  126. package/dist/lib-es6/api/classes/parameterizable.js +0 -99
  127. package/dist/lib-es6/api/classes/parameterizable.js.map +0 -1
  128. package/dist/lib-es6/api/classes/placementAnimation.d.ts +0 -45
  129. package/dist/lib-es6/api/classes/placementAnimation.js +0 -173
  130. package/dist/lib-es6/api/classes/placementAnimation.js.map +0 -1
  131. package/dist/lib-es6/api/classes/variant.d.ts +0 -234
  132. package/dist/lib-es6/api/classes/variant.js +0 -833
  133. package/dist/lib-es6/api/classes/variant.js.map +0 -1
  134. package/dist/lib-es6/api/classes/variantInstance.d.ts +0 -44
  135. package/dist/lib-es6/api/classes/variantInstance.js +0 -102
  136. package/dist/lib-es6/api/classes/variantInstance.js.map +0 -1
  137. package/dist/lib-es6/api/classes/variantParameterizable.d.ts +0 -17
  138. package/dist/lib-es6/api/classes/variantParameterizable.js +0 -85
  139. package/dist/lib-es6/api/classes/variantParameterizable.js.map +0 -1
  140. package/dist/lib-es6/api/classes/viewer.d.ts +0 -189
  141. package/dist/lib-es6/api/classes/viewer.js +0 -588
  142. package/dist/lib-es6/api/classes/viewer.js.map +0 -1
  143. package/dist/lib-es6/api/classes/viewerLight.d.ts +0 -66
  144. package/dist/lib-es6/api/classes/viewerLight.js +0 -322
  145. package/dist/lib-es6/api/classes/viewerLight.js.map +0 -1
  146. package/dist/lib-es6/api/internal/lensRendering.d.ts +0 -8
  147. package/dist/lib-es6/api/internal/lensRendering.js +0 -9
  148. package/dist/lib-es6/api/internal/lensRendering.js.map +0 -1
  149. package/dist/lib-es6/api/internal/sceneSetup.d.ts +0 -13
  150. package/dist/lib-es6/api/internal/sceneSetup.js +0 -199
  151. package/dist/lib-es6/api/internal/sceneSetup.js.map +0 -1
  152. package/dist/lib-es6/api/manager/animationManager.d.ts +0 -30
  153. package/dist/lib-es6/api/manager/animationManager.js +0 -123
  154. package/dist/lib-es6/api/manager/animationManager.js.map +0 -1
  155. package/dist/lib-es6/api/manager/gltfExportManager.d.ts +0 -65
  156. package/dist/lib-es6/api/manager/gltfExportManager.js +0 -194
  157. package/dist/lib-es6/api/manager/gltfExportManager.js.map +0 -1
  158. package/dist/lib-es6/api/manager/sceneManager.d.ts +0 -31
  159. package/dist/lib-es6/api/manager/sceneManager.js +0 -124
  160. package/dist/lib-es6/api/manager/sceneManager.js.map +0 -1
  161. package/dist/lib-es6/api/manager/variantInstanceManager.d.ts +0 -92
  162. package/dist/lib-es6/api/manager/variantInstanceManager.js +0 -257
  163. package/dist/lib-es6/api/manager/variantInstanceManager.js.map +0 -1
  164. package/dist/lib-es6/api/store/specStorage.d.ts +0 -24
  165. package/dist/lib-es6/api/store/specStorage.js +0 -47
  166. package/dist/lib-es6/api/store/specStorage.js.map +0 -1
  167. package/dist/lib-es6/api/util/babylonHelper.d.ts +0 -174
  168. package/dist/lib-es6/api/util/babylonHelper.js +0 -556
  169. package/dist/lib-es6/api/util/babylonHelper.js.map +0 -1
  170. package/dist/lib-es6/api/util/globalTypes.d.ts +0 -370
  171. package/dist/lib-es6/api/util/globalTypes.js +0 -2
  172. package/dist/lib-es6/api/util/globalTypes.js.map +0 -1
  173. package/dist/lib-es6/api/util/resourceHelper.d.ts +0 -58
  174. package/dist/lib-es6/api/util/resourceHelper.js +0 -194
  175. package/dist/lib-es6/api/util/resourceHelper.js.map +0 -1
  176. package/dist/lib-es6/api/util/sceneLoaderHelper.d.ts +0 -35
  177. package/dist/lib-es6/api/util/sceneLoaderHelper.js +0 -130
  178. package/dist/lib-es6/api/util/sceneLoaderHelper.js.map +0 -1
  179. package/dist/lib-es6/api/util/stringHelper.d.ts +0 -9
  180. package/dist/lib-es6/api/util/stringHelper.js +0 -22
  181. package/dist/lib-es6/api/util/stringHelper.js.map +0 -1
  182. package/dist/lib-es6/api/util/structureHelper.d.ts +0 -9
  183. package/dist/lib-es6/api/util/structureHelper.js +0 -46
  184. package/dist/lib-es6/api/util/structureHelper.js.map +0 -1
  185. package/dist/lib-es6/buildinfo.json +0 -3
  186. package/dist/lib-es6/es6.tsconfig.tsbuildinfo +0 -1
  187. package/dist/lib-es6/index.d.ts +0 -51
  188. package/dist/lib-es6/index.js +0 -49
  189. package/dist/lib-es6/index.js.map +0 -1
@@ -1,90 +1,90 @@
1
- /**
2
- * @internal
3
- */
4
- /// <reference path="../util/globalTypes.ts" />
5
- import { Event } from '../classes/event';
6
- import { Viewer } from '../classes/viewer';
7
- import { Scene } from '@babylonjs/core/scene';
8
-
9
- export class DebugViewer extends Viewer {
10
- constructor(canvas: HTMLCanvasElement, data: string | StructureJson) {
11
- super(canvas, data);
12
- }
13
-
14
- public async bootstrap(): Promise<Viewer> {
15
- for (const event of Event.all) {
16
- this.eventEmitter.addListener(event, (...args) => console.debug(`Emitting ${event}`, ...args));
17
- }
18
- for (const event of [
19
- Event.VARIANT_INSTANCE_DESTROYED,
20
- Event.VARIANT_INSTANCE_CREATED,
21
- Event.VARIANT_INSTANCE_CLONED,
22
- Event.VARIANT_PARAMETER_COMMITTED,
23
- ]) {
24
- this.eventEmitter.addListener(event, this.instanceDebugger.bind(this));
25
- }
26
- return super.bootstrap();
27
- }
28
-
29
- protected async initScene(): Promise<Scene> {
30
- const scene = await super.initScene();
31
-
32
- scene.getEngine().runRenderLoop(() => {
33
- this.fpsDebugger();
34
- });
35
-
36
- return scene;
37
- }
38
-
39
- protected instanceDebugger(instance: VariantInstance) {
40
- const instances: string[] = [];
41
- this.variantInstances.all.forEach(variantInstance => {
42
- instances.push(
43
- `${variantInstance.name}${variantInstance.variant.visible ? '' : ' [hidden]'}${
44
- variantInstance.variant.highlighted ? ' [highlighted]' : ''
45
- }`
46
- );
47
- });
48
- let debugContainer = document.getElementById('cyledge-combeenation-3d-viewer-instance-debugger');
49
- if (!debugContainer) {
50
- debugContainer = document.createElement('pre');
51
- debugContainer.setAttribute('id', 'cyledge-combeenation-3d-viewer-instance-debugger');
52
- debugContainer.setAttribute(
53
- 'style',
54
- `
55
- background: #454545;
56
- color: #fff;
57
- position: absolute;
58
- bottom: 0;
59
- right: 0;
60
- padding: 10px;
61
- margin: 0;
62
- `
63
- );
64
- document.body.appendChild(debugContainer);
65
- }
66
- debugContainer.innerHTML = JSON.stringify(instances, null, 2);
67
- }
68
-
69
- protected fpsDebugger() {
70
- let debugContainer = document.getElementById('cyledge-combeenation-3d-viewer-fps-debugger');
71
- if (!debugContainer) {
72
- debugContainer = document.createElement('pre');
73
- debugContainer.setAttribute('id', 'cyledge-combeenation-3d-viewer-fps-debugger');
74
- debugContainer.setAttribute(
75
- 'style',
76
- `
77
- background: #454545;
78
- color: #fff;
79
- position: absolute;
80
- bottom: 0;
81
- left: 0;
82
- padding: 10px;
83
- margin: 0;
84
- `
85
- );
86
- document.body.appendChild(debugContainer);
87
- }
88
- debugContainer.innerHTML = `${this.engine.getFps().toFixed(2)} fps`;
89
- }
90
- }
1
+ /**
2
+ * @internal
3
+ */
4
+ /// <reference path="../util/globalTypes.ts" />
5
+ import { Event } from '../classes/event';
6
+ import { Viewer } from '../classes/viewer';
7
+ import { Scene } from '@babylonjs/core/scene';
8
+
9
+ export class DebugViewer extends Viewer {
10
+ constructor(canvas: HTMLCanvasElement, data: string | StructureJson) {
11
+ super(canvas, data);
12
+ }
13
+
14
+ public async bootstrap(): Promise<Viewer> {
15
+ for (const event of Event.all) {
16
+ this.eventEmitter.addListener(event, (...args) => console.debug(`Emitting ${event}`, ...args));
17
+ }
18
+ for (const event of [
19
+ Event.VARIANT_INSTANCE_DESTROYED,
20
+ Event.VARIANT_INSTANCE_CREATED,
21
+ Event.VARIANT_INSTANCE_CLONED,
22
+ Event.VARIANT_PARAMETER_COMMITTED,
23
+ ]) {
24
+ this.eventEmitter.addListener(event, this.instanceDebugger.bind(this));
25
+ }
26
+ return super.bootstrap();
27
+ }
28
+
29
+ protected async initScene(): Promise<Scene> {
30
+ const scene = await super.initScene();
31
+
32
+ scene.getEngine().runRenderLoop(() => {
33
+ this.fpsDebugger();
34
+ });
35
+
36
+ return scene;
37
+ }
38
+
39
+ protected instanceDebugger(instance: VariantInstance) {
40
+ const instances: string[] = [];
41
+ this.variantInstances.all.forEach(variantInstance => {
42
+ instances.push(
43
+ `${variantInstance.name}${variantInstance.variant.visible ? '' : ' [hidden]'}${
44
+ variantInstance.variant.highlighted ? ' [highlighted]' : ''
45
+ }`
46
+ );
47
+ });
48
+ let debugContainer = document.getElementById('cyledge-combeenation-3d-viewer-instance-debugger');
49
+ if (!debugContainer) {
50
+ debugContainer = document.createElement('pre');
51
+ debugContainer.setAttribute('id', 'cyledge-combeenation-3d-viewer-instance-debugger');
52
+ debugContainer.setAttribute(
53
+ 'style',
54
+ `
55
+ background: #454545;
56
+ color: #fff;
57
+ position: absolute;
58
+ bottom: 0;
59
+ right: 0;
60
+ padding: 10px;
61
+ margin: 0;
62
+ `
63
+ );
64
+ document.body.appendChild(debugContainer);
65
+ }
66
+ debugContainer.innerHTML = JSON.stringify(instances, null, 2);
67
+ }
68
+
69
+ protected fpsDebugger() {
70
+ let debugContainer = document.getElementById('cyledge-combeenation-3d-viewer-fps-debugger');
71
+ if (!debugContainer) {
72
+ debugContainer = document.createElement('pre');
73
+ debugContainer.setAttribute('id', 'cyledge-combeenation-3d-viewer-fps-debugger');
74
+ debugContainer.setAttribute(
75
+ 'style',
76
+ `
77
+ background: #454545;
78
+ color: #fff;
79
+ position: absolute;
80
+ bottom: 0;
81
+ left: 0;
82
+ padding: 10px;
83
+ margin: 0;
84
+ `
85
+ );
86
+ document.body.appendChild(debugContainer);
87
+ }
88
+ debugContainer.innerHTML = `${this.engine.getFps().toFixed(2)} fps`;
89
+ }
90
+ }
@@ -1,9 +1,9 @@
1
- /**
2
- * Group the required LensRendering dependencies into a single file to allow a single "import"
3
- *
4
- * @internal
5
- */
6
- import { LensRenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline';
7
- import '@babylonjs/core/Rendering/depthRendererSceneComponent';
8
-
9
- export { LensRenderingPipeline };
1
+ /**
2
+ * Group the required LensRendering dependencies into a single file to allow a single "import"
3
+ *
4
+ * @internal
5
+ */
6
+ import { LensRenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline';
7
+ import '@babylonjs/core/Rendering/depthRendererSceneComponent';
8
+
9
+ export { LensRenderingPipeline };
@@ -1,205 +1,205 @@
1
- import { Parameter } from '../classes/parameter';
2
- import { Camera } from '@babylonjs/core/Cameras/camera';
3
- import { Engine } from '@babylonjs/core/Engines/engine';
4
- import '@babylonjs/core/Helpers/sceneHelpers';
5
- import '@babylonjs/core/Materials/Textures/Loaders/ddsTextureLoader';
6
- import { Color4 } from '@babylonjs/core/Maths/math.color';
7
- import { Vector3 } from '@babylonjs/core/Maths/math.vector';
8
- import { GroundMesh } from '@babylonjs/core/Meshes/groundMesh';
9
- import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
10
- import { DefaultRenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline';
11
- import { Scene } from '@babylonjs/core/scene';
12
- import { get, isEmpty } from 'lodash-es';
13
-
14
- const defaultSceneClearColor = new Color4(0, 0, 0, 0);
15
- const defaultEnvHelperColor = new Color4(1, 1, 1, 0);
16
-
17
- /**
18
- * @param scene
19
- * @param name
20
- * @param definition
21
- */
22
- const processGround = async function (
23
- scene: Scene,
24
- name: string,
25
- definition: GroundDefinition
26
- ): Promise<Mesh | GroundMesh> {
27
- return new Promise(resolve => {
28
- const _resolve = (ground: Mesh) => {
29
- if (definition.receiveShadows !== undefined) {
30
- ground.receiveShadows = definition.receiveShadows;
31
- }
32
- resolve(ground);
33
- };
34
- switch (definition.type) {
35
- case 'baked':
36
- if (!definition.meshId) {
37
- throw new Error(`A baked ground must define a "meshId".`);
38
- }
39
- _resolve(scene.getMeshByID(definition.meshId) as Mesh);
40
- break;
41
- case 'ground':
42
- _resolve(MeshBuilder.CreateGround(name, definition, scene));
43
- break;
44
- case 'heightmap':
45
- if (!definition.url) {
46
- throw new Error(`A heightmap ground must define an "url".`);
47
- }
48
- definition.onReady = (_ground: GroundMesh) => {
49
- _resolve(_ground);
50
- };
51
- MeshBuilder.CreateGroundFromHeightMap(name, definition.url, definition, scene);
52
- break;
53
- default:
54
- throw new Error(`Ground of type "${definition.type}" not implemented (yet).`);
55
- }
56
- });
57
- };
58
-
59
- /**
60
- * @param scene
61
- */
62
- const defaultCamera = async function (scene: Scene): Promise<Camera> {
63
- return await processCamera(scene, 'default_camera', {
64
- type: 'arc',
65
- active: true,
66
- });
67
- };
68
-
69
- /**
70
- * @param scene
71
- * @param name
72
- * @param cameraSetup
73
- */
74
- const processCamera = async function (scene: Scene, name: string, cameraSetup: CameraDefinition): Promise<Camera> {
75
- let camera: Camera;
76
- let target = Vector3.Zero();
77
- if (cameraSetup.target) {
78
- target = Parameter.parseVector(cameraSetup.target);
79
- }
80
- switch (cameraSetup.type) {
81
- case 'arc': {
82
- // @ts-ignore es6 build doesn't allow dynamic imports
83
- const arcCameraModule = await import(
84
- /* webpackChunkName: "arc-rotate-camera" */ '@babylonjs/core/Cameras/arcRotateCamera'
85
- );
86
- camera = new arcCameraModule.ArcRotateCamera(name, Math.PI / 4, Math.PI / 4, 2, target, scene);
87
- camera.metadata = {
88
- alpha: Math.PI / 4,
89
- beta: Math.PI / 4,
90
- radius: 2,
91
- };
92
- break;
93
- }
94
- }
95
- if (cameraSetup.active) {
96
- camera.attachControl(scene.getEngine().getRenderingCanvas()!, true);
97
- }
98
- if (cameraSetup.fov) {
99
- camera.fov = cameraSetup.fov;
100
- }
101
- camera.storeState();
102
- return camera;
103
- };
104
-
105
- /**
106
- * @param engine
107
- * @param sceneJson
108
- */
109
- const sceneSetup = async function (engine: Engine, sceneJson: SceneJson): Promise<Scene> {
110
- const scene = new Scene(engine);
111
- scene.clearColor = defaultSceneClearColor;
112
- // cameras
113
- const cameras: Camera[] = [];
114
- const cameraDefinitions = get(sceneJson.scene, 'cameras') as CameraDefinitions;
115
- if (!isEmpty(cameraDefinitions)) {
116
- for (const cameraName in cameraDefinitions) {
117
- cameras.push(await processCamera(scene, cameraName, cameraDefinitions[cameraName]));
118
- }
119
- } else {
120
- const camera = await defaultCamera(scene);
121
- cameras.push(camera);
122
- }
123
- // grounds
124
- const groundDefinitions = get(sceneJson.scene, 'grounds') as GroundDefinitions;
125
- if (!isEmpty(groundDefinitions)) {
126
- for (const groundName in groundDefinitions) {
127
- await processGround(scene, groundName, groundDefinitions[groundName]);
128
- }
129
- }
130
- // TODO: try to split this away from the default rendering pipeline to save module imports
131
- // The "hdr" setting had negative effect on rendering in Safari. Everything looked a little "edgy". I'm not completely
132
- // sure if disabling it comes with other negative side effects I don't see right now, so we should probably
133
- // investigate this a little more in detail at some point.
134
- const defaultPipeline = new DefaultRenderingPipeline('default-rendering-pipeline', false, scene);
135
- /* DISABLED: causes problems with Internet Explorer
136
- defaultPipeline.imageProcessingEnabled = true;
137
- */
138
- if (sceneJson.scene.globals.aa) {
139
- defaultPipeline.fxaaEnabled = true; //implicitly does FxaaPostProcess()
140
- }
141
- // Set samples regardless of fxaa setting since we don't want to use fxaa but still increase the sample count
142
- defaultPipeline.samples = 8;
143
- if (sceneJson.scene.globals['camera-settings']) {
144
- if (
145
- sceneJson.scene.globals['camera-settings']!.sharpen &&
146
- sceneJson.scene.globals['camera-settings']!.sharpen.enabled
147
- ) {
148
- defaultPipeline.sharpenEnabled = true; //implicitly does SharpenPostProcess()
149
- //defaultPipeline.sharpen.colorAmount = 1;
150
- //defaultPipeline.sharpen.edgeAmount = 0;
151
- }
152
- if (
153
- sceneJson.scene.globals['camera-settings']!.bloom &&
154
- sceneJson.scene.globals['camera-settings']!.bloom.enabled
155
- ) {
156
- defaultPipeline.bloomEnabled = true;
157
- if (sceneJson.scene.globals['camera-settings']!.bloom.size) {
158
- defaultPipeline.bloomScale = sceneJson.scene.globals['camera-settings']!.bloom.size;
159
- }
160
- if (sceneJson.scene.globals['camera-settings']!.bloom.threshold) {
161
- defaultPipeline.bloomThreshold = sceneJson.scene.globals['camera-settings']!.bloom.threshold;
162
- }
163
- }
164
- if (sceneJson.scene.globals['camera-settings']!.contrast) {
165
- scene.imageProcessingConfiguration.contrast = sceneJson.scene.globals['camera-settings']!.contrast;
166
- }
167
- if (sceneJson.scene.globals['camera-settings']!.exposure) {
168
- scene.imageProcessingConfiguration.exposure = sceneJson.scene.globals['camera-settings']!.exposure;
169
- }
170
- if (sceneJson.scene.globals['camera-settings']!.dof && sceneJson.scene.globals['camera-settings']!.dof.enabled) {
171
- // @ts-ignore es6 build doesn't allow dynamic imports
172
- const module = await import(/* webpackChunkName: "lens-rendering" */ './lensRendering');
173
- new module.LensRenderingPipeline(
174
- 'lens-rendering',
175
- sceneJson.scene.globals['camera-settings']!.dof.settings,
176
- scene,
177
- 1.0,
178
- cameras
179
- );
180
- }
181
- }
182
- // TODO: make this dynamic
183
- /*
184
- const texture = new HDRCubeTexture("/assets/small_cave_1k.hdr", scene, 256);
185
- texture.gammaSpace = false;
186
- scene.environmentTexture = texture;
187
- // scene.environmentTexture.
188
-
189
- const skyboxMaterial = new StandardMaterial("skyBox", scene);
190
- skyboxMaterial.backFaceCulling = false;
191
- skyboxMaterial.reflectionTexture = texture;
192
- skyboxMaterial.reflectionTexture.coordinatesMode = Texture.SKYBOX_MODE;
193
- skyboxMaterial.disableLighting = false;
194
- // TODO: replace with BoxBuilder
195
- const skybox = MeshBuilder.CreateBox("skyBox", {size: 1000.0}, scene);
196
- skybox.isPickable = false; //never pick a skybox
197
- skybox.infiniteDistance = true;
198
- skybox.material = skyboxMaterial;
199
- */
200
-
201
- // TODO: shadows don't work with HemishpericLight
202
- return scene;
203
- };
204
-
205
- export { sceneSetup, defaultSceneClearColor, defaultEnvHelperColor };
1
+ import { Parameter } from '../classes/parameter';
2
+ import { Camera } from '@babylonjs/core/Cameras/camera';
3
+ import { Engine } from '@babylonjs/core/Engines/engine';
4
+ import '@babylonjs/core/Helpers/sceneHelpers';
5
+ import '@babylonjs/core/Materials/Textures/Loaders/ddsTextureLoader';
6
+ import { Color4 } from '@babylonjs/core/Maths/math.color';
7
+ import { Vector3 } from '@babylonjs/core/Maths/math.vector';
8
+ import { GroundMesh } from '@babylonjs/core/Meshes/groundMesh';
9
+ import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
10
+ import { DefaultRenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline';
11
+ import { Scene } from '@babylonjs/core/scene';
12
+ import { get, isEmpty } from 'lodash-es';
13
+
14
+ const defaultSceneClearColor = new Color4(0, 0, 0, 0);
15
+ const defaultEnvHelperColor = new Color4(1, 1, 1, 0);
16
+
17
+ /**
18
+ * @param scene
19
+ * @param name
20
+ * @param definition
21
+ */
22
+ const processGround = async function (
23
+ scene: Scene,
24
+ name: string,
25
+ definition: GroundDefinition
26
+ ): Promise<Mesh | GroundMesh> {
27
+ return new Promise(resolve => {
28
+ const _resolve = (ground: Mesh) => {
29
+ if (definition.receiveShadows !== undefined) {
30
+ ground.receiveShadows = definition.receiveShadows;
31
+ }
32
+ resolve(ground);
33
+ };
34
+ switch (definition.type) {
35
+ case 'baked':
36
+ if (!definition.meshId) {
37
+ throw new Error(`A baked ground must define a "meshId".`);
38
+ }
39
+ _resolve(scene.getMeshByID(definition.meshId) as Mesh);
40
+ break;
41
+ case 'ground':
42
+ _resolve(MeshBuilder.CreateGround(name, definition, scene));
43
+ break;
44
+ case 'heightmap':
45
+ if (!definition.url) {
46
+ throw new Error(`A heightmap ground must define an "url".`);
47
+ }
48
+ definition.onReady = (_ground: GroundMesh) => {
49
+ _resolve(_ground);
50
+ };
51
+ MeshBuilder.CreateGroundFromHeightMap(name, definition.url, definition, scene);
52
+ break;
53
+ default:
54
+ throw new Error(`Ground of type "${definition.type}" not implemented (yet).`);
55
+ }
56
+ });
57
+ };
58
+
59
+ /**
60
+ * @param scene
61
+ */
62
+ const defaultCamera = async function (scene: Scene): Promise<Camera> {
63
+ return await processCamera(scene, 'default_camera', {
64
+ type: 'arc',
65
+ active: true,
66
+ });
67
+ };
68
+
69
+ /**
70
+ * @param scene
71
+ * @param name
72
+ * @param cameraSetup
73
+ */
74
+ const processCamera = async function (scene: Scene, name: string, cameraSetup: CameraDefinition): Promise<Camera> {
75
+ let camera: Camera;
76
+ let target = Vector3.Zero();
77
+ if (cameraSetup.target) {
78
+ target = Parameter.parseVector(cameraSetup.target);
79
+ }
80
+ switch (cameraSetup.type) {
81
+ case 'arc': {
82
+ // @ts-ignore es6 build doesn't allow dynamic imports
83
+ const arcCameraModule = await import(
84
+ /* webpackChunkName: "arc-rotate-camera" */ '@babylonjs/core/Cameras/arcRotateCamera'
85
+ );
86
+ camera = new arcCameraModule.ArcRotateCamera(name, Math.PI / 4, Math.PI / 4, 2, target, scene);
87
+ camera.metadata = {
88
+ alpha: Math.PI / 4,
89
+ beta: Math.PI / 4,
90
+ radius: 2,
91
+ };
92
+ break;
93
+ }
94
+ }
95
+ if (cameraSetup.active) {
96
+ camera.attachControl(scene.getEngine().getRenderingCanvas()!, true);
97
+ }
98
+ if (cameraSetup.fov) {
99
+ camera.fov = cameraSetup.fov;
100
+ }
101
+ camera.storeState();
102
+ return camera;
103
+ };
104
+
105
+ /**
106
+ * @param engine
107
+ * @param sceneJson
108
+ */
109
+ const sceneSetup = async function (engine: Engine, sceneJson: SceneJson): Promise<Scene> {
110
+ const scene = new Scene(engine);
111
+ scene.clearColor = defaultSceneClearColor;
112
+ // cameras
113
+ const cameras: Camera[] = [];
114
+ const cameraDefinitions = get(sceneJson.scene, 'cameras') as CameraDefinitions;
115
+ if (!isEmpty(cameraDefinitions)) {
116
+ for (const cameraName in cameraDefinitions) {
117
+ cameras.push(await processCamera(scene, cameraName, cameraDefinitions[cameraName]));
118
+ }
119
+ } else {
120
+ const camera = await defaultCamera(scene);
121
+ cameras.push(camera);
122
+ }
123
+ // grounds
124
+ const groundDefinitions = get(sceneJson.scene, 'grounds') as GroundDefinitions;
125
+ if (!isEmpty(groundDefinitions)) {
126
+ for (const groundName in groundDefinitions) {
127
+ await processGround(scene, groundName, groundDefinitions[groundName]);
128
+ }
129
+ }
130
+ // TODO: try to split this away from the default rendering pipeline to save module imports
131
+ // The "hdr" setting had negative effect on rendering in Safari. Everything looked a little "edgy". I'm not completely
132
+ // sure if disabling it comes with other negative side effects I don't see right now, so we should probably
133
+ // investigate this a little more in detail at some point.
134
+ const defaultPipeline = new DefaultRenderingPipeline('default-rendering-pipeline', false, scene);
135
+ /* DISABLED: causes problems with Internet Explorer
136
+ defaultPipeline.imageProcessingEnabled = true;
137
+ */
138
+ if (sceneJson.scene.globals.aa) {
139
+ defaultPipeline.fxaaEnabled = true; //implicitly does FxaaPostProcess()
140
+ }
141
+ // Set samples regardless of fxaa setting since we don't want to use fxaa but still increase the sample count
142
+ defaultPipeline.samples = 8;
143
+ if (sceneJson.scene.globals['camera-settings']) {
144
+ if (
145
+ sceneJson.scene.globals['camera-settings']!.sharpen &&
146
+ sceneJson.scene.globals['camera-settings']!.sharpen.enabled
147
+ ) {
148
+ defaultPipeline.sharpenEnabled = true; //implicitly does SharpenPostProcess()
149
+ //defaultPipeline.sharpen.colorAmount = 1;
150
+ //defaultPipeline.sharpen.edgeAmount = 0;
151
+ }
152
+ if (
153
+ sceneJson.scene.globals['camera-settings']!.bloom &&
154
+ sceneJson.scene.globals['camera-settings']!.bloom.enabled
155
+ ) {
156
+ defaultPipeline.bloomEnabled = true;
157
+ if (sceneJson.scene.globals['camera-settings']!.bloom.size) {
158
+ defaultPipeline.bloomScale = sceneJson.scene.globals['camera-settings']!.bloom.size;
159
+ }
160
+ if (sceneJson.scene.globals['camera-settings']!.bloom.threshold) {
161
+ defaultPipeline.bloomThreshold = sceneJson.scene.globals['camera-settings']!.bloom.threshold;
162
+ }
163
+ }
164
+ if (sceneJson.scene.globals['camera-settings']!.contrast) {
165
+ scene.imageProcessingConfiguration.contrast = sceneJson.scene.globals['camera-settings']!.contrast;
166
+ }
167
+ if (sceneJson.scene.globals['camera-settings']!.exposure) {
168
+ scene.imageProcessingConfiguration.exposure = sceneJson.scene.globals['camera-settings']!.exposure;
169
+ }
170
+ if (sceneJson.scene.globals['camera-settings']!.dof && sceneJson.scene.globals['camera-settings']!.dof.enabled) {
171
+ // @ts-ignore es6 build doesn't allow dynamic imports
172
+ const module = await import(/* webpackChunkName: "lens-rendering" */ './lensRendering');
173
+ new module.LensRenderingPipeline(
174
+ 'lens-rendering',
175
+ sceneJson.scene.globals['camera-settings']!.dof.settings,
176
+ scene,
177
+ 1.0,
178
+ cameras
179
+ );
180
+ }
181
+ }
182
+ // TODO: make this dynamic
183
+ /*
184
+ const texture = new HDRCubeTexture("/assets/small_cave_1k.hdr", scene, 256);
185
+ texture.gammaSpace = false;
186
+ scene.environmentTexture = texture;
187
+ // scene.environmentTexture.
188
+
189
+ const skyboxMaterial = new StandardMaterial("skyBox", scene);
190
+ skyboxMaterial.backFaceCulling = false;
191
+ skyboxMaterial.reflectionTexture = texture;
192
+ skyboxMaterial.reflectionTexture.coordinatesMode = Texture.SKYBOX_MODE;
193
+ skyboxMaterial.disableLighting = false;
194
+ // TODO: replace with BoxBuilder
195
+ const skybox = MeshBuilder.CreateBox("skyBox", {size: 1000.0}, scene);
196
+ skybox.isPickable = false; //never pick a skybox
197
+ skybox.infiniteDistance = true;
198
+ skybox.material = skyboxMaterial;
199
+ */
200
+
201
+ // TODO: shadows don't work with HemishpericLight
202
+ return scene;
203
+ };
204
+
205
+ export { sceneSetup, defaultSceneClearColor, defaultEnvHelperColor };