@shapediver/viewer.data-engine.material-engine 1.15.6 → 2.0.1

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,4 +1,4 @@
1
- import { TreeNode } from '@shapediver/viewer.shared.node-tree';
1
+ import { ITreeNode } from '@shapediver/viewer.shared.node-tree';
2
2
  import { MapData, MaterialStandardData } from '@shapediver/viewer.shared.types';
3
3
  import { ShapeDiverResponseOutputContent } from '@shapediver/sdk.geometry-api-sdk-v2';
4
4
  import { IMaterialContentDataV1, IMaterialContentDataV2, IMaterialContentDataV3, ITexture } from '@shapediver/viewer.data-engine.shared-types';
@@ -13,10 +13,10 @@ export declare class MaterialEngine {
13
13
  * @param content the material content
14
14
  * @returns the scene graph node
15
15
  */
16
- loadContent(content: ShapeDiverResponseOutputContent): Promise<TreeNode>;
16
+ loadContent(content: ShapeDiverResponseOutputContent): Promise<ITreeNode>;
17
17
  private assignGeneralDefinition;
18
18
  private assignSpecificDefinition;
19
- private getClassAndSpecificID;
19
+ private getClassAndSpecificId;
20
20
  loadMap(url: string, id?: string): Promise<MapData | null>;
21
21
  loadMapWithProperties(texture: ITexture): Promise<MapData | null>;
22
22
  loadMaterialV1(data: IMaterialContentDataV1, material: MaterialStandardData): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"MaterialEngine.d.ts","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAG9D,OAAO,EACH,OAAO,EAEP,oBAAoB,EAGvB,MAAM,iCAAiC,CAAA;AAIxC,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAA;AACrF,OAAO,EAAwB,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAA6B,QAAQ,EAAE,MAAM,6CAA6C,CAAA;AAE/L,qBACa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IACjF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyD;IACrF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;;IAYrE;;;;;SAKK;IACQ,WAAW,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,QAAQ,CAAC;YA0CvE,uBAAuB;YAkCvB,wBAAwB;IAkCtC,OAAO,CAAC,qBAAqB;IAkBhB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAe1D,qBAAqB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAmBjE,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAsC3E,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAqD3E,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAwD3E,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB;CAejF"}
1
+ {"version":3,"file":"MaterialEngine.d.ts","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,qCAAqC,CAAA;AAGzE,OAAO,EACH,OAAO,EAEP,oBAAoB,EAGvB,MAAM,iCAAiC,CAAA;AAIxC,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAA;AACrF,OAAO,EAAwB,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAA6B,QAAQ,EAAE,MAAM,6CAA6C,CAAA;AAE/L,qBACa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IACjF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyD;IACrF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;;IAYrE;;;;;SAKK;IACQ,WAAW,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,SAAS,CAAC;YA0CxE,uBAAuB;YAkCvB,wBAAwB;IAkCtC,OAAO,CAAC,qBAAqB;IAkBhB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAe1D,qBAAqB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAmBjE,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAsC3E,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAqD3E,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAwD3E,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB;CAejF"}
@@ -47,7 +47,7 @@ let MaterialEngine = class MaterialEngine {
47
47
  const node = new viewer_shared_node_tree_1.TreeNode(content.name || 'material');
48
48
  if (!content) {
49
49
  const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Invalid content was provided to material engine.');
50
- throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
50
+ throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
51
51
  }
52
52
  const material = new viewer_shared_types_1.MaterialStandardData();
53
53
  node.data.push(material);
@@ -71,14 +71,14 @@ let MaterialEngine = class MaterialEngine {
71
71
  }
72
72
  else {
73
73
  const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Material data version not supported.');
74
- throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
74
+ throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
75
75
  }
76
76
  }
77
77
  }
78
78
  }
79
79
  else {
80
80
  const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: No material data was provided to material engine.');
81
- throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
81
+ throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
82
82
  }
83
83
  return node;
84
84
  });
@@ -181,7 +181,7 @@ let MaterialEngine = class MaterialEngine {
181
181
  material.side = specificDefinition.side === 'front' ? viewer_shared_types_1.MATERIAL_SIDE.FRONT : specificDefinition.side === 'back' ? viewer_shared_types_1.MATERIAL_SIDE.BACK : viewer_shared_types_1.MATERIAL_SIDE.DOUBLE;
182
182
  });
183
183
  }
184
- getClassAndSpecificID(id) {
184
+ getClassAndSpecificId(id) {
185
185
  // for a while, we had documented the presets to be 10, 20, 30 and 40 here, we allow for the few cases where this was used to succeed
186
186
  if (id < 100 && id % 10 == 0)
187
187
  id /= 10;
@@ -211,7 +211,7 @@ let MaterialEngine = class MaterialEngine {
211
211
  catch (e) {
212
212
  if (e instanceof viewer_shared_services_1.ShapeDiverViewerError || e instanceof viewer_shared_services_1.ShapeDiverBackendError)
213
213
  throw e;
214
- throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.DATA_PROCESSING, `MaterialEngine.loadMap`, e);
214
+ throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadMap`, e);
215
215
  }
216
216
  return new viewer_shared_types_1.MapData(image);
217
217
  });
@@ -225,7 +225,7 @@ let MaterialEngine = class MaterialEngine {
225
225
  catch (e) {
226
226
  if (e instanceof viewer_shared_services_1.ShapeDiverViewerError || e instanceof viewer_shared_services_1.ShapeDiverBackendError)
227
227
  throw e;
228
- throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.DATA_PROCESSING, `MaterialEngine.loadMapWithProperties`, e);
228
+ throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadMapWithProperties`, e);
229
229
  }
230
230
  const wrapS = texture.wrapS === 1 ? viewer_shared_types_1.TEXTURE_WRAPPING.CLAMP_TO_EDGE : texture.wrapS === 2 ? viewer_shared_types_1.TEXTURE_WRAPPING.MIRRORED_REPEAT : viewer_shared_types_1.TEXTURE_WRAPPING.REPEAT;
231
231
  const wrapT = texture.wrapT === 1 ? viewer_shared_types_1.TEXTURE_WRAPPING.CLAMP_TO_EDGE : texture.wrapT === 2 ? viewer_shared_types_1.TEXTURE_WRAPPING.MIRRORED_REPEAT : viewer_shared_types_1.TEXTURE_WRAPPING.REPEAT;
@@ -369,7 +369,7 @@ let MaterialEngine = class MaterialEngine {
369
369
  }
370
370
  loadPresetMaterial(preset, material) {
371
371
  return __awaiter(this, void 0, void 0, function* () {
372
- const idStrings = this.getClassAndSpecificID(preset);
372
+ const idStrings = this.getClassAndSpecificId(preset);
373
373
  if (materialDatabase_1.materialDatabase[idStrings.class] && materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific]) {
374
374
  yield this.assignSpecificDefinition(idStrings, materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific], material);
375
375
  yield this.assignGeneralDefinition(idStrings, materialDatabase_1.materialDatabase[idStrings.class].properties, materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific], material);
@@ -386,7 +386,7 @@ let MaterialEngine = class MaterialEngine {
386
386
  }
387
387
  };
388
388
  MaterialEngine = __decorate([
389
- tsyringe_1.singleton(),
389
+ (0, tsyringe_1.singleton)(),
390
390
  __metadata("design:paramtypes", [])
391
391
  ], MaterialEngine);
392
392
  exports.MaterialEngine = MaterialEngine;
@@ -1 +1 @@
1
- {"version":3,"file":"MaterialEngine.js","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MaterialEngine.js","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapediver/viewer.data-engine.material-engine",
3
- "version": "1.15.6",
3
+ "version": "2.0.1",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Michael Oppitz <michael@shapediver.com>",
@@ -10,7 +10,11 @@
10
10
  "test": "__tests__"
11
11
  },
12
12
  "files": [
13
- "dist"
13
+ "dist",
14
+ "src",
15
+ "package.json",
16
+ "README.md",
17
+ "tsconfig.json"
14
18
  ],
15
19
  "publishConfig": {
16
20
  "access": "public"
@@ -20,11 +24,10 @@
20
24
  "url": "git+https://github.com/shapediver/Viewer.git"
21
25
  },
22
26
  "scripts": {
23
- "test": "bash ../../scripts/test.sh",
24
27
  "check": "tsc --noEmit",
25
- "build": "bash ../../scripts/build.sh",
26
- "build-watch": "bash ../../scripts/build-watch.sh",
27
- "build-dep": "bash ../../scripts/build-dep.sh"
28
+ "build": "bash ../../scripts/building/build.sh",
29
+ "build-watch": "bash ../../scripts/building/build-watch.sh",
30
+ "build-dep": "bash ../../scripts/building/build-dep.sh"
28
31
  },
29
32
  "bugs": {
30
33
  "url": "https://github.com/shapediver/Viewer/issues"
@@ -37,13 +40,13 @@
37
40
  },
38
41
  "dependencies": {
39
42
  "@shapediver/sdk.geometry-api-sdk-v2": "^1.0.24",
40
- "@shapediver/viewer.data-engine.shared-types": "1.15.6",
41
- "@shapediver/viewer.shared.node-tree": "1.15.6",
42
- "@shapediver/viewer.shared.services": "1.15.6",
43
- "@shapediver/viewer.shared.types": "1.15.6",
43
+ "@shapediver/viewer.data-engine.shared-types": "2.0.1",
44
+ "@shapediver/viewer.shared.node-tree": "2.0.1",
45
+ "@shapediver/viewer.shared.services": "2.0.1",
46
+ "@shapediver/viewer.shared.types": "2.0.1",
44
47
  "axios": "^0.21.1",
45
48
  "gl-matrix": "3.3.0",
46
49
  "tsyringe": "^4.5.0"
47
50
  },
48
- "gitHead": "a127cf8efdcfdbfc99a94ce223475ecc82556952"
51
+ "gitHead": "439d43d5219976059b89ab173d54cdafdd1f5c20"
49
52
  }
@@ -0,0 +1,365 @@
1
+ import { ITreeNode, TreeNode } from '@shapediver/viewer.shared.node-tree'
2
+ import { container, singleton } from 'tsyringe'
3
+ import { Converter, HttpClient, HttpResponse, Logger, LOGGING_TOPIC, ShapeDiverBackendError, ShapeDiverViewerDataProcessingError, ShapeDiverViewerError } from '@shapediver/viewer.shared.services'
4
+ import {
5
+ MapData,
6
+ MATERIAL_SIDE,
7
+ MaterialStandardData,
8
+ TEXTURE_FILTERING,
9
+ TEXTURE_WRAPPING,
10
+ } from '@shapediver/viewer.shared.types'
11
+ import { vec2, vec3, vec4 } from 'gl-matrix'
12
+
13
+ import { materialDatabase } from './materialDatabase'
14
+ import { ShapeDiverResponseOutputContent } from '@shapediver/sdk.geometry-api-sdk-v2'
15
+ import { IMaterialContentData, IMaterialContentDataV1, IMaterialContentDataV2, IMaterialContentDataV3, IPresetMaterialDefinition, ITexture } from '@shapediver/viewer.data-engine.shared-types'
16
+
17
+ @singleton()
18
+ export class MaterialEngine {
19
+ // #region Properties (3)
20
+
21
+ private readonly _converter: Converter = <Converter>container.resolve(Converter);
22
+ private readonly _httpClient: HttpClient = <HttpClient>container.resolve(HttpClient);
23
+ private readonly _logger: Logger = <Logger>container.resolve(Logger);
24
+
25
+ // #endregion Properties (3)
26
+
27
+ // #region Constructors (1)
28
+
29
+ constructor() { }
30
+
31
+ // #endregion Constructors (1)
32
+
33
+ // #region Public Methods (1)
34
+
35
+ /**
36
+ * Load the material content into a scene graph node.
37
+ *
38
+ * @param content the material content
39
+ * @returns the scene graph node
40
+ */
41
+ public async loadContent(content: ShapeDiverResponseOutputContent): Promise<ITreeNode> {
42
+ const node = new TreeNode(content.name || 'material');
43
+ if (!content) {
44
+ const error = new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Invalid content was provided to material engine.');
45
+ throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
46
+ }
47
+
48
+ const material = new MaterialStandardData();
49
+ node.data.push(material);
50
+
51
+ if (content.data) {
52
+ const data: IMaterialContentData = content.data;
53
+ if (data.materialpreset)
54
+ await this.loadPresetMaterial(data.materialpreset, material);
55
+
56
+ if (data.materialType && data.materialType !== 'standard') {
57
+ // gem material https://shapediver.atlassian.net/browse/SS-2514
58
+ } else {
59
+ if (data.version) {
60
+ if (data.version === '1.0') {
61
+ await this.loadMaterialV1(data, material);
62
+ } else if (data.version === '2.0') {
63
+ await this.loadMaterialV2(data, material);
64
+ } else if (data.version === '3.0') {
65
+ await this.loadMaterialV3(data, material);
66
+ } else {
67
+ const error = new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Material data version not supported.');
68
+ throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
69
+ }
70
+ }
71
+ }
72
+ } else {
73
+ const error = new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: No material data was provided to material engine.');
74
+ throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
75
+ }
76
+ return node;
77
+ }
78
+
79
+ // #endregion Public Methods (1)
80
+
81
+ // #region Private Methods (9)
82
+
83
+ private async assignGeneralDefinition(id: { class: string, specific: string }, generalDefinition: IPresetMaterialDefinition, specificDefinition: IPresetMaterialDefinition, material: MaterialStandardData) {
84
+ if (generalDefinition.transparencytexture && !specificDefinition.transparencytexture) {
85
+ const map = await this.loadMap(generalDefinition.transparencytexture, id.class);
86
+ if (map) material.alphaMap = map;
87
+ }
88
+ if (generalDefinition.hasOwnProperty('alphaThreshold') && !specificDefinition.hasOwnProperty('alphaThreshold')) material.alphaCutoff = generalDefinition.alphaThreshold!;
89
+ if (generalDefinition.bumptexture && !specificDefinition.bumptexture) {
90
+ const map = await this.loadMap(generalDefinition.bumptexture, id.class);
91
+ if (map) material.bumpMap = map;
92
+ }
93
+ if (generalDefinition.hasOwnProperty('bumpAmplitude') && !specificDefinition.hasOwnProperty('bumpAmplitude')) material.bumpScale = generalDefinition.bumpAmplitude!;
94
+ if (generalDefinition.color && !specificDefinition.color) material.color = this._converter.toColor(generalDefinition.color);
95
+ if (generalDefinition.bitmaptexture && !specificDefinition.bitmaptexture) {
96
+ const map = await this.loadMap(generalDefinition.bitmaptexture, id.class);
97
+ if (map) material.map = map;
98
+ }
99
+ if (generalDefinition.hasOwnProperty('metalness') && !specificDefinition.hasOwnProperty('metalness')) material.metalness = generalDefinition.metalness!;
100
+ if (generalDefinition.metalnesstexture && !specificDefinition.metalnesstexture) {
101
+ const map = await this.loadMap(generalDefinition.metalnesstexture, id.class);
102
+ if (map) material.metalnessMap = map;
103
+ }
104
+ if (generalDefinition.normaltexture && !specificDefinition.normaltexture) {
105
+ const map = await this.loadMap(generalDefinition.normaltexture, id.class);
106
+ if (map) material.normalMap = map;
107
+ }
108
+ if (generalDefinition.hasOwnProperty('transparency') && !specificDefinition.hasOwnProperty('transparency')) material.opacity = 1 - generalDefinition.transparency!;
109
+ if (generalDefinition.hasOwnProperty('roughness') && !specificDefinition.hasOwnProperty('roughness')) material.roughness = generalDefinition.roughness!;
110
+ if (generalDefinition.roughnesstexture && !specificDefinition.roughnesstexture) {
111
+ const map = await this.loadMap(generalDefinition.roughnesstexture, id.class);
112
+ if (map) material.roughnessMap = map;
113
+ }
114
+ if (generalDefinition.side && !specificDefinition.side) material.side = generalDefinition.side === 'front' ? MATERIAL_SIDE.FRONT : generalDefinition.side === 'back' ? MATERIAL_SIDE.BACK : MATERIAL_SIDE.DOUBLE;
115
+ }
116
+
117
+ private async assignSpecificDefinition(id: { class: string, specific: string }, specificDefinition: IPresetMaterialDefinition, material: MaterialStandardData) {
118
+ if (specificDefinition.transparencytexture) {
119
+ const map = await this.loadMap(specificDefinition.transparencytexture, id.class + '/' + id.specific);
120
+ if (map) material.alphaMap = map;
121
+ }
122
+ if (specificDefinition.hasOwnProperty('alphaThreshold')) material.alphaCutoff = specificDefinition.alphaThreshold!;
123
+ if (specificDefinition.bumptexture) {
124
+ const map = await this.loadMap(specificDefinition.bumptexture, id.class + '/' + id.specific);
125
+ if (map) material.bumpMap = map;
126
+ }
127
+ if (specificDefinition.hasOwnProperty('bumpAmplitude')) material.bumpScale = specificDefinition.bumpAmplitude!;
128
+ if (specificDefinition.color) material.color = this._converter.toColor(specificDefinition.color);
129
+ if (specificDefinition.bitmaptexture) {
130
+ const map = await this.loadMap(specificDefinition.bitmaptexture, id.class + '/' + id.specific);
131
+ if (map) material.map = map;
132
+ }
133
+ if (specificDefinition.hasOwnProperty('metalness')) material.metalness = specificDefinition.metalness!;
134
+ if (specificDefinition.metalnesstexture) {
135
+ const map = await this.loadMap(specificDefinition.metalnesstexture, id.class + '/' + id.specific);
136
+ if (map) material.metalnessMap = map;
137
+ }
138
+ if (specificDefinition.normaltexture) {
139
+ const map = await this.loadMap(specificDefinition.normaltexture, id.class + '/' + id.specific);
140
+ if (map) material.normalMap = map;
141
+ }
142
+ if (specificDefinition.hasOwnProperty('transparency')) material.opacity = 1 - specificDefinition.transparency!;
143
+ if (specificDefinition.hasOwnProperty('roughness')) material.roughness = specificDefinition.roughness!;
144
+ if (specificDefinition.roughnesstexture) {
145
+ const map = await this.loadMap(specificDefinition.roughnesstexture, id.class + '/' + id.specific);
146
+ if (map) material.roughnessMap = map;
147
+ }
148
+ if (specificDefinition.side) material.side = specificDefinition.side === 'front' ? MATERIAL_SIDE.FRONT : specificDefinition.side === 'back' ? MATERIAL_SIDE.BACK : MATERIAL_SIDE.DOUBLE;
149
+ }
150
+
151
+ private getClassAndSpecificId(id: number): { class: string, specific: string } {
152
+ // for a while, we had documented the presets to be 10, 20, 30 and 40 here, we allow for the few cases where this was used to succeed
153
+ if (id < 100 && id % 10 == 0) id /= 10;
154
+
155
+ // if the id is less than 10, multiply it by 100
156
+ if (id < 10) id *= 100;
157
+
158
+ const cast = (id: number): string => {
159
+ let idString = String(id);
160
+ return idString.padStart(2, '0').slice(0, 2);
161
+ };
162
+
163
+ return {
164
+ class: cast(Math.floor(id / 100)),
165
+ specific: cast(id - (Math.floor(id / 100) * 100))
166
+ };
167
+ }
168
+
169
+ public async loadMap(url: string, id?: string): Promise<MapData | null> {
170
+ let image: HTMLImageElement;
171
+ try {
172
+ if (!id) {
173
+ image = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture(url));
174
+ } else {
175
+ image = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture('https://viewer.shapediver.com/v2/materials/1024/' + id + '/' + url));
176
+ }
177
+ } catch (e) {
178
+ if (e instanceof ShapeDiverViewerError || e instanceof ShapeDiverBackendError) throw e;
179
+ throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadMap`, e);
180
+ }
181
+ return new MapData(image);
182
+ }
183
+
184
+ public async loadMapWithProperties(texture: ITexture): Promise<MapData | null> {
185
+ let image: HTMLImageElement;
186
+ try {
187
+ image = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture(texture.href!));
188
+ } catch (e) {
189
+ if (e instanceof ShapeDiverViewerError || e instanceof ShapeDiverBackendError) throw e;
190
+ throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadMapWithProperties`, e);
191
+ }
192
+
193
+ const wrapS = texture.wrapS === 1 ? TEXTURE_WRAPPING.CLAMP_TO_EDGE : texture.wrapS === 2 ? TEXTURE_WRAPPING.MIRRORED_REPEAT : TEXTURE_WRAPPING.REPEAT;
194
+ const wrapT = texture.wrapT === 1 ? TEXTURE_WRAPPING.CLAMP_TO_EDGE : texture.wrapT === 2 ? TEXTURE_WRAPPING.MIRRORED_REPEAT : TEXTURE_WRAPPING.REPEAT;
195
+ const center = texture.center ? vec2.fromValues(texture.center[0], texture.center[1]) : vec2.fromValues(0, 0);
196
+ const color = texture.color ? vec4.fromValues(texture.color[0] / 255, texture.color[1] / 255, texture.color[2] / 255, texture.color[3] / 255) : vec4.fromValues(1, 1, 1, 1);
197
+ const offset = texture.offset ? vec2.fromValues(texture.offset[0], texture.offset[1]) : vec2.fromValues(0, 0);
198
+ const repeat = texture.repeat ? vec2.fromValues(texture.repeat[0], texture.repeat[1]) : vec2.fromValues(1, 1);
199
+
200
+ return new MapData(image, wrapS, wrapT, TEXTURE_FILTERING.LINEAR_MIPMAP_LINEAR, TEXTURE_FILTERING.LINEAR, center, this._converter.toColor(color), offset, repeat, texture.rotation || 0);
201
+ }
202
+
203
+ public async loadMaterialV1(data: IMaterialContentDataV1, material: MaterialStandardData) {
204
+ // ambient is ignored
205
+
206
+ if (data.color) {
207
+ material.color = this._converter.toColor(data.color);
208
+ } else if (data.diffuse) {
209
+ material.color = this._converter.toColor(data.diffuse);
210
+ }
211
+
212
+ if (data.emission)
213
+ material.emissiveness = this._converter.toColor(data.emission);
214
+
215
+ // specular is ignored
216
+
217
+ if (data.shine || data.shine === 0) {
218
+ material.metalness = Math.min(1, data.shine);
219
+ material.roughness = 1 - (Math.min(1, data.shine));
220
+ }
221
+
222
+ if (data.hasOwnProperty('transparency'))
223
+ material.opacity = 1 - data.transparency!;
224
+
225
+ if (data.bitmaptexture) {
226
+ const map = await this.loadMap(data.bitmaptexture);
227
+ if (map) material.map = map;
228
+ }
229
+
230
+ if (data.bumptexture) {
231
+ const map = await this.loadMap(data.bumptexture);
232
+ if (map) material.bumpMap = map;
233
+ }
234
+
235
+ if (data.transparencytexture) {
236
+ const map = await this.loadMap(data.transparencytexture);
237
+ if (map) material.alphaMap = map;
238
+ }
239
+ }
240
+
241
+ public async loadMaterialV2(data: IMaterialContentDataV2, material: MaterialStandardData) {
242
+ // ambient is ignored
243
+
244
+ if (data.color)
245
+ material.color = this._converter.toColor(data.color);
246
+
247
+ material.side = data.side === 'front' ? MATERIAL_SIDE.FRONT : data.side === 'back' ? MATERIAL_SIDE.BACK : MATERIAL_SIDE.DOUBLE;
248
+
249
+ if (data.metalness || data.metalness === 0)
250
+ material.metalness = data.metalness;
251
+
252
+ if (data.roughness || data.roughness === 0)
253
+ material.roughness = data.roughness;
254
+
255
+ if (data.hasOwnProperty('transparency'))
256
+ material.opacity = 1 - data.transparency!;
257
+
258
+ if (data.alphaThreshold || data.alphaThreshold === 0)
259
+ material.alphaCutoff = data.alphaThreshold;
260
+
261
+ if (data.bitmaptexture) {
262
+ const map = await this.loadMap(data.bitmaptexture);
263
+ if (map) material.map = map;
264
+ }
265
+
266
+ if (data.metalnesstexture) {
267
+ const map = await this.loadMap(data.metalnesstexture);
268
+ if (map) material.metalnessMap = map;
269
+ }
270
+
271
+ if (data.roughnesstexture) {
272
+ const map = await this.loadMap(data.roughnesstexture);
273
+ if (map) material.roughnessMap = map;
274
+ }
275
+
276
+ if (data.bumptexture) {
277
+ const map = await this.loadMap(data.bumptexture);
278
+ if (map) material.bumpMap = map;
279
+ }
280
+
281
+ if (data.normaltexture) {
282
+ const map = await this.loadMap(data.normaltexture);
283
+ if (map) material.normalMap = map;
284
+ }
285
+
286
+ if (data.transparencytexture) {
287
+ const map = await this.loadMap(data.transparencytexture);
288
+ if (map) material.alphaMap = map;
289
+ }
290
+
291
+ // line material https://shapediver.atlassian.net/browse/SS-2272
292
+ }
293
+
294
+ public async loadMaterialV3(data: IMaterialContentDataV3, material: MaterialStandardData) {
295
+ // ambient is ignored
296
+
297
+ if (data.color)
298
+ material.color = this._converter.toColor(data.color);
299
+
300
+ material.side = data.side === 'front' ? MATERIAL_SIDE.FRONT : data.side === 'back' ? MATERIAL_SIDE.BACK : MATERIAL_SIDE.DOUBLE;
301
+
302
+ if (data.metalness || data.metalness === 0)
303
+ material.metalness = data.metalness;
304
+
305
+ if (data.roughness || data.roughness === 0)
306
+ material.roughness = data.roughness;
307
+
308
+ if (data.hasOwnProperty('transparency'))
309
+ material.opacity = 1 - data.transparency!;
310
+
311
+ if (data.alphaThreshold || data.alphaThreshold === 0)
312
+ material.alphaCutoff = data.alphaThreshold;
313
+
314
+ if (data.bumpAmplitude || data.bumpAmplitude === 0)
315
+ material.bumpScale = data.bumpAmplitude;
316
+
317
+ if (data.bitmaptexture) {
318
+ const map = await this.loadMapWithProperties(data.bitmaptexture);
319
+ if (map) material.map = map;
320
+ }
321
+
322
+ if (data.metalnesstexture) {
323
+ const map = await this.loadMapWithProperties(data.metalnesstexture);
324
+ if (map) material.metalnessMap = map;
325
+ }
326
+
327
+ if (data.roughnesstexture) {
328
+ const map = await this.loadMapWithProperties(data.roughnesstexture);
329
+ if (map) material.roughnessMap = map;
330
+ }
331
+
332
+ if (data.bumptexture) {
333
+ const map = await this.loadMapWithProperties(data.bumptexture);
334
+ if (map) material.bumpMap = map;
335
+ }
336
+
337
+ if (data.normaltexture) {
338
+ const map = await this.loadMapWithProperties(data.normaltexture);
339
+ if (map) material.normalMap = map;
340
+ }
341
+
342
+ if (data.transparencytexture) {
343
+ const map = await this.loadMapWithProperties(data.transparencytexture);
344
+ if (map) material.alphaMap = map;
345
+ }
346
+
347
+ // line material https://shapediver.atlassian.net/browse/SS-2272
348
+ }
349
+
350
+ public async loadPresetMaterial(preset: number, material: MaterialStandardData) {
351
+ const idStrings = this.getClassAndSpecificId(preset);
352
+ if (materialDatabase[idStrings.class] && materialDatabase[idStrings.class][idStrings.specific]) {
353
+ await this.assignSpecificDefinition(idStrings, materialDatabase[idStrings.class][idStrings.specific], material);
354
+ await this.assignGeneralDefinition(idStrings, materialDatabase[idStrings.class].properties, materialDatabase[idStrings.class][idStrings.specific], material);
355
+ } else if (materialDatabase[idStrings.class] && materialDatabase[idStrings.class]['00']) {
356
+ await this.assignSpecificDefinition({ class: idStrings.class, specific: '00' }, materialDatabase[idStrings.class]['00'], material);
357
+ await this.assignGeneralDefinition({ class: idStrings.class, specific: '00' }, materialDatabase[idStrings.class].properties, materialDatabase[idStrings.class]['00'], material);
358
+ } else {
359
+ await this.assignSpecificDefinition({ class: '00', specific: '00' }, materialDatabase['00']['00'], material);
360
+ await this.assignGeneralDefinition({ class: '00', specific: '00' }, materialDatabase['00'].properties, materialDatabase['00']['00'], material);
361
+ }
362
+ }
363
+
364
+ // #endregion Private Methods (9)
365
+ }
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { MaterialEngine } from './MaterialEngine'
2
+
3
+ export {
4
+ MaterialEngine
5
+ }
@@ -0,0 +1,180 @@
1
+ export const materialDatabase: { [key: string]: any } = {
2
+ "00": {
3
+ "00": {
4
+ "name": "Default material",
5
+ "color": [211, 211, 211, 255],
6
+ "metalness": 0,
7
+ "roughness": 1
8
+ },
9
+ "properties": {
10
+ "name": "Default materials"
11
+ }
12
+ },
13
+ "01": {
14
+ "01": {
15
+ "name": "Default groundplane material",
16
+ "color": [211, 211, 211, 255],
17
+ "metalness": 0,
18
+ "roughness": 1
19
+ },
20
+ "properties": {
21
+ "name": "Groundplane materials"
22
+ }
23
+ },
24
+ "02": {
25
+ "00": {
26
+ "name": "Default plastic material",
27
+ "color": [211, 211, 211, 255],
28
+ "metalness": 0,
29
+ "roughness": 1,
30
+ "normaltexture": "normalMap.jpg",
31
+ "roughnesstexture": "roughnessMap.jpg"
32
+ },
33
+ "properties": {
34
+ "name": "Plastic materials"
35
+ }
36
+ },
37
+ "03": {
38
+ "00": {
39
+ "name": "Default metal material",
40
+ "color": [205, 205, 205, 255],
41
+ "roughness": 0.25
42
+ },
43
+ "01": {
44
+ "name": "Used metal material 1",
45
+ "color": [205, 205, 205, 255],
46
+ "roughness": 1,
47
+ "roughnesstexture": "roughnessMap.jpg"
48
+ },
49
+ "02": {
50
+ "name": "Used metal material 2",
51
+ "color": [205, 205, 205, 255],
52
+ "roughness": 1,
53
+ "roughnesstexture": "roughnessMap.jpg"
54
+ },
55
+ "03": {
56
+ "name": "Used metal material 3",
57
+ "color": [205, 205, 205, 255],
58
+ "roughness": 1,
59
+ "roughnesstexture": "roughnessMap.jpg"
60
+ },
61
+ "10": {
62
+ "name": "Gold material",
63
+ "color": [230, 207, 92, 255],
64
+ "roughness": 0
65
+ },
66
+ "11": {
67
+ "name": "Used gold material",
68
+ "color": [230, 207, 92, 255],
69
+ "roughness": 0,
70
+ "roughnesstexture": "roughnessMap.jpg"
71
+ },
72
+ "21": {
73
+ "name": "Hammered metal material",
74
+ "color": [205, 205, 205, 255],
75
+ "roughness": 1,
76
+ "normaltexture": "normalMap.jpg"
77
+ },
78
+ "properties": {
79
+ "name": "Metal materials",
80
+ "metalness": 1
81
+ }
82
+ },
83
+ "04": {
84
+ "00": {
85
+ "name": "Default glass material",
86
+ "color": [211, 211, 211, 255],
87
+ "metalness": 1,
88
+ "roughness": 0,
89
+ "transparency": 0.75
90
+ },
91
+ "properties": { "name": "Glass materials" }
92
+ },
93
+ "05": {
94
+ "00": {
95
+ "bitmaptexture": "map.jpg",
96
+ "name": "Default wood material",
97
+ "metalnesstexture": "metalnessMap.jpg",
98
+ "normaltexture": "normalMap.jpg",
99
+ "roughnesstexture": "roughnessMap.jpg"
100
+ },
101
+ "01": {
102
+ "bitmaptexture": "map.jpg",
103
+ "name": "Wood floor material",
104
+ "metalnesstexture": "metalnessMap.jpg",
105
+ "normaltexture": "normalMap.jpg",
106
+ "roughnesstexture": "roughnessMap.jpg"
107
+ },
108
+ "10": {
109
+ "bitmaptexture": "map.jpg",
110
+ "name": "Natural oak material",
111
+ "normaltexture": "normalMap.jpg",
112
+ "roughnesstexture": "roughnessMap.jpg"
113
+ },
114
+ "11": {
115
+ "bitmaptexture": "map.jpg",
116
+ "name": "Premium oak material",
117
+ "roughnesstexture": "roughnessMap.jpg"
118
+ },
119
+ "properties": {
120
+ "name": "Wood materials",
121
+ "color": [211, 211, 211, 255],
122
+ "metalness": 0,
123
+ "roughness": 1
124
+ }
125
+ },
126
+ "06": {
127
+ "00": {
128
+ "bitmaptexture": "map.jpg",
129
+ "name": "Default leather material",
130
+ "metalnesstexture": "metalnessMap.jpg",
131
+ "normaltexture": "normalMap.jpg",
132
+ "roughnesstexture": "roughnessMap.jpg"
133
+ },
134
+ "01": {
135
+ "bitmaptexture": "map.jpg",
136
+ "name": "Dark brown leather material",
137
+ "metalnesstexture": "metalnessMap.jpg",
138
+ "normaltexture": "normalMap.jpg",
139
+ "roughnesstexture": "roughnessMap.jpg"
140
+ },
141
+ "02": {
142
+ "bitmaptexture": "map.jpg",
143
+ "name": "Black leather material",
144
+ "metalnesstexture": "metalnessMap.jpg",
145
+ "normaltexture": "normalMap.jpg",
146
+ "roughnesstexture": "roughnessMap.jpg"
147
+ },
148
+ "10": {
149
+ "bitmaptexture": "map.jpg",
150
+ "name": "Worn leather material",
151
+ "metalnesstexture": "metalnessMap.jpg",
152
+ "normaltexture": "normalMap.jpg",
153
+ "roughnesstexture": "roughnessMap.jpg"
154
+ },
155
+ "properties": {
156
+ "name": "Leather materials",
157
+ "metalness": 0, "roughness": 1
158
+ }
159
+ },
160
+ "07": {
161
+ "00": {
162
+ "bitmaptexture": "map.jpg",
163
+ "name": "Default fabric material",
164
+ "metalnesstexture": "metalnessMap.jpg",
165
+ "normaltexture": "normalMap.jpg",
166
+ "roughnesstexture": "roughnessMap.jpg"
167
+ },
168
+ "01": {
169
+ "bitmaptexture": "map.jpg",
170
+ "name": "Grey fabric material",
171
+ "metalnesstexture": "metalnessMap.jpg",
172
+ "normaltexture": "normalMap.jpg",
173
+ "roughnesstexture": "roughnessMap.jpg"
174
+ },
175
+ "properties": {
176
+ "name": "Fabric materials",
177
+ "metalness": 1, "roughness": 1
178
+ }
179
+ }
180
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "include": [
4
+ "./**/*.ts"
5
+ ],
6
+ "compilerOptions": {
7
+ "rootDir": "src",
8
+ "outDir": "dist"
9
+ },
10
+ "exclude": [
11
+ "__tests__",
12
+ "node_modules",
13
+ "dist",
14
+ "dist-dev",
15
+ "dist-prod"
16
+ ]
17
+ }