@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.3.4 → 3.3.6

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 (71) hide show
  1. package/package.json +19 -20
  2. package/src/RenderingEngine.ts +0 -1336
  3. package/src/index.ts +0 -81
  4. package/src/injectors/Tag3dGeometryCreationInjector.ts +0 -154
  5. package/src/injectors/TextureUnifierInjector.ts +0 -214
  6. package/src/interfaces/ILoader.ts +0 -3
  7. package/src/interfaces/IPostProcessingEffectDefinitions.ts +0 -402
  8. package/src/interfaces/IRenderingEngine.ts +0 -48
  9. package/src/loaders/EnvironmentMapLoader.ts +0 -357
  10. package/src/loaders/GeometryLoader.ts +0 -585
  11. package/src/loaders/HTMLElementAnchorLoader.ts +0 -107
  12. package/src/loaders/LightLoader.ts +0 -171
  13. package/src/loaders/MaterialLoader.ts +0 -1413
  14. package/src/managers/CameraManager.ts +0 -178
  15. package/src/managers/EnvironmentGeometryManager.ts +0 -224
  16. package/src/managers/PostProcessingManager.ts +0 -1181
  17. package/src/managers/RenderingManager.ts +0 -657
  18. package/src/managers/SceneTracingManager.ts +0 -127
  19. package/src/managers/SceneTreeManager.ts +0 -576
  20. package/src/managers/postprocessing/GodRaysManager.ts +0 -52
  21. package/src/managers/postprocessing/OutlineManager.ts +0 -58
  22. package/src/managers/postprocessing/SSAARenderPass.ts +0 -339
  23. package/src/managers/postprocessing/SelectiveBloomManager.ts +0 -58
  24. package/src/managers/postprocessing/ao/ao/AOEffect.ts +0 -180
  25. package/src/managers/postprocessing/ao/ao/AOPass.ts +0 -128
  26. package/src/managers/postprocessing/ao/ao/shader/ao_compose.glsl +0 -17
  27. package/src/managers/postprocessing/ao/ao/shader/ao_compose.ts +0 -19
  28. package/src/managers/postprocessing/ao/hbao/HBAOEffect.ts +0 -41
  29. package/src/managers/postprocessing/ao/hbao/shader/hbao.glsl +0 -96
  30. package/src/managers/postprocessing/ao/hbao/shader/hbao.ts +0 -98
  31. package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.glsl +0 -92
  32. package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.ts +0 -95
  33. package/src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts +0 -259
  34. package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.glsl +0 -125
  35. package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts +0 -127
  36. package/src/managers/postprocessing/ao/ssao/SSAOEffect.ts +0 -106
  37. package/src/managers/postprocessing/ao/ssao/shader/ssao.glsl +0 -128
  38. package/src/managers/postprocessing/ao/ssao/shader/ssao.ts +0 -130
  39. package/src/managers/postprocessing/ao/utils/shader/basic.glsl +0 -6
  40. package/src/managers/postprocessing/ao/utils/shader/basic.ts +0 -8
  41. package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.glsl +0 -36
  42. package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.ts +0 -38
  43. package/src/managers/postprocessing/utils/CopyMaterial.ts +0 -130
  44. package/src/managers/postprocessing/utils/CopyShader.ts +0 -39
  45. package/src/managers/postprocessing/utils/FullScreenQuad.ts +0 -47
  46. package/src/managers/postprocessing/utils/NormalPass.ts +0 -222
  47. package/src/managers/postprocessing/utils/RenderPass.ts +0 -366
  48. package/src/materials/GemMaterial.ts +0 -268
  49. package/src/materials/MeshUnlitMaterialParameters.ts +0 -4
  50. package/src/materials/MultiPointsMaterial.ts +0 -646
  51. package/src/materials/SpecularGlossinessMaterial.ts +0 -182
  52. package/src/objects/SDBone.ts +0 -51
  53. package/src/objects/SDColor.ts +0 -54
  54. package/src/objects/SDData.ts +0 -44
  55. package/src/objects/SDObject.ts +0 -58
  56. package/src/shaders/PCSS.ts +0 -124
  57. package/src/shaders/gem.ts +0 -579
  58. package/src/shaders/gem_frag.glsl +0 -522
  59. package/src/shaders/gem_vert.glsl +0 -53
  60. package/src/shaders/multi_points.ts +0 -291
  61. package/src/shaders/multi_points_frag.glsl +0 -166
  62. package/src/shaders/multi_points_vert.glsl +0 -120
  63. package/src/styling/viewport-css.ts +0 -113
  64. package/src/styling/viewport.css +0 -111
  65. package/src/three/font.ts +0 -2
  66. package/src/three/geometries/TextGeometry.ts +0 -58
  67. package/src/three/loaders/FontLoader.ts +0 -205
  68. package/src/three/loaders/RGBELoader.ts +0 -496
  69. package/src/types/IThreejsData.ts +0 -16
  70. package/src/types/ThreejsData.ts +0 -43
  71. package/tsconfig.json +0 -20
@@ -1,357 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
2
- /* eslint-disable no-async-promise-executor */
3
- import * as THREE from 'three';
4
- import { Logger, EventEngine, EVENTTYPE, StateEngine, StatePromise, ShapeDiverViewerEnvironmentMapError, HttpClient, HttpResponse, Converter, UuidGenerator } from '@shapediver/viewer.shared.services';
5
-
6
- import { RenderingEngine } from '..';
7
- import { RGBELoader } from '../three/loaders/RGBELoader';
8
- import { ILoader } from '../interfaces/ILoader';
9
- import { ITaskEvent, TASK_TYPE } from '@shapediver/viewer.shared.types';
10
-
11
- export enum ENVIRONMENT_MAP_CUBE {
12
- DEFAULT = 'default',
13
- DEFAULT_BW = 'default_bw',
14
- BLURRED_LIGHTS = 'blurred_lights',
15
- GEORGENTOR = 'georgentor',
16
- GEORGENTOR_BLUR = 'georgentor_blur',
17
- GEORGENTOR_BLUE_BLUR = 'georgentor_blue_blur',
18
- GEORGENTOR_BW_BLUR = 'georgentor_bw_blur',
19
- LEVELSETS = 'levelsets',
20
- LYTHWOOD_FIELD = 'lythwood_field',
21
- MOUNTAINS = 'mountains',
22
- OCEAN = 'ocean',
23
- PIAZZA_SAN_MARCO = 'piazza_san_marco',
24
- RESIDENTIAL_GARDEN = 'residential_garden',
25
- ROOM_ABSTRACT_1 = 'room_abstract_1',
26
- SKY = 'sky',
27
- STORAGE_ROOM = 'storage_room',
28
- STORM = 'storm',
29
- SUBWAY_ENTRANCE = 'subway_entrance',
30
- SUBWAY_ENTRANCE_BW_BLUR = 'subway_entrance_bw_blur',
31
- WHITE = 'white',
32
- YOKOHAMA = 'yokohama',
33
- }
34
-
35
- export enum ENVIRONMENT_MAP {
36
- ANNIVERSARY_LOUNGE = 'anniversary_lounge',
37
- BALLROOM = 'ballroom',
38
- CANNON_EXTERIOR = 'cannon_exterior',
39
- CAPE_HILL = 'cape_hill',
40
- CHRISTMAS_PHOTO_STUDIO = 'christmas_photo_studio',
41
- CIRCUS_MAXIMUS = 'circus_maximus',
42
- COLORFUL_STUDIO = 'colorful_studio',
43
- COMBINATION_ROOM = 'combination_room',
44
- GREEN_POINT_PARK = 'green_point_park',
45
- HILLTOP_CONSTRUCTION = 'hilltop_construction',
46
- LARGE_CORRIDOR = 'large_corridor',
47
- LYTHWOOD_LOUNGE = 'lythwood_lounge',
48
- NEUTRAL = 'neutral',
49
- OBERER_KUHBERG = 'oberer_kuhberg',
50
- OLD_HALL = 'old_hall',
51
- PAUL_LOBE_HAUS = 'paul_lobe_haus',
52
- PHOTO_STUDIO = 'photo_studio',
53
- PHOTO_STUDIO_BROADWAY_HALL = 'photo_studio_broadway_hall',
54
- SNOWY_FIELD = 'snowy_field',
55
- STUDIO_SMALL = 'studio_small',
56
- SUNFLOWERS = 'sunflowers',
57
- TABLE_MOUNTAIN = 'table_mountain',
58
- VENICE_SUNSET = 'venice_sunset',
59
- WIDE_STREET = 'wide_street',
60
- }
61
-
62
- export enum ENVIRONMENT_MAP_EMPTY {
63
- NONE = 'none',
64
- NULL = 'null'
65
- }
66
-
67
- export enum ENVIRONMENT_MAP_TYPE {
68
- LDR = 'ldr',
69
- HDR = 'hdr',
70
- NONE = 'none',
71
- NULL = 'null'
72
- }
73
-
74
- export class EnvironmentMapLoader implements ILoader {
75
- // #region Properties (15)
76
-
77
- private readonly _environmentMapFilenames = ['px', 'nx', 'pz', 'nz', 'py', 'ny'];
78
- private readonly _environmentMapHDR: string[] = [];
79
- private readonly _environmentMapNamesHDR = Object.values(ENVIRONMENT_MAP).filter(value => typeof value === 'string') as string[];
80
- private readonly _environmentMapNamesHDRKhronos = ['cannon_exterior', 'colorful_studio', 'neutral', 'wide_street'];
81
- private readonly _environmentMapNamesJPG = ['default', 'default_bw', 'blurred_lights', 'georgentor', 'georgentor_blur', 'georgentor_blue_blur', 'georgentor_bw_blur', 'levelsets', 'lythwood_field', 'mountains', 'ocean', 'piazza_san_marco', 'residential_garden', 'room_abstract_1', 'sky', 'storage_room', 'storm', 'subway_entrance', 'subway_entrance_bw_blur', 'white', 'yokohama'];
82
- private readonly _environmentMaps: {
83
- [key: string]: {
84
- name: string,
85
- map: Promise<THREE.CubeTexture | THREE.Texture | null>,
86
- type: ENVIRONMENT_MAP_TYPE,
87
- resolved?: boolean
88
- }
89
- } = {};
90
- private readonly _eventEngine: EventEngine = EventEngine.instance;
91
- private readonly _httpClient: HttpClient = HttpClient.instance;
92
- private readonly _stateEngine: StateEngine = StateEngine.instance;
93
- private readonly _uuidGenerator: UuidGenerator = UuidGenerator.instance;
94
-
95
- private _envMap: THREE.CubeTexture | THREE.Texture | null = null;
96
- private _isHDRMap: boolean = false;
97
- private _pmremGenerator!: THREE.PMREMGenerator;
98
- private _textureEncoding: THREE.ColorSpace = THREE.SRGBColorSpace;
99
- private _type: ENVIRONMENT_MAP_TYPE = ENVIRONMENT_MAP_TYPE.NULL;
100
-
101
- // #endregion Properties (15)
102
-
103
- // #region Constructors (1)
104
-
105
- constructor(private readonly _renderingEngine: RenderingEngine) { }
106
-
107
- // #endregion Constructors (1)
108
-
109
- // #region Public Accessors (4)
110
-
111
- public get environmentMap(): THREE.CubeTexture | THREE.Texture | null {
112
- return this._envMap;
113
- }
114
-
115
- public get isHDRMap(): boolean {
116
- return this._isHDRMap;
117
- }
118
-
119
- public get textureEncoding(): THREE.ColorSpace {
120
- return this._textureEncoding;
121
- }
122
-
123
- public set textureEncoding(value: THREE.ColorSpace) {
124
- this._textureEncoding = value;
125
- this.assignTextureEncoding();
126
- }
127
-
128
- // #endregion Public Accessors (4)
129
-
130
- // #region Public Methods (4)
131
-
132
- public getEnvironmentMapImageUrl(name: string | string[]): string {
133
- if (Array.isArray(name)) return '';
134
-
135
- if (this._environmentMapNamesHDR.indexOf(name) >= 0) {
136
- let url_hdr = 'https://viewer.shapediver.com/v3/envmaps/1k/' + name + '_1k.hdr';
137
- if (this._environmentMapNamesHDRKhronos.indexOf(name) >= 0)
138
- url_hdr = 'https://viewer.shapediver.com/v3/envmaps/khronos/' + name + '.hdr';
139
-
140
- return url_hdr;
141
- } else if (name.startsWith('https://') || name.startsWith('http://')) {
142
- if (name.endsWith('.hdr') || name.endsWith('.jpg') || name.endsWith('.png')) {
143
- return name;
144
- }
145
- }
146
- return '';
147
- }
148
-
149
- public init(): void {
150
- this._environmentMaps['null'] = {
151
- name: 'null',
152
- map: Promise.resolve(null),
153
- type: ENVIRONMENT_MAP_TYPE.NULL
154
- };
155
- this._environmentMaps['none'] = {
156
- name: 'none',
157
- map: Promise.resolve(null),
158
- type: ENVIRONMENT_MAP_TYPE.NONE
159
- };
160
-
161
- this._pmremGenerator = new THREE.PMREMGenerator(this._renderingEngine.renderer);
162
- this._pmremGenerator.compileEquirectangularShader();
163
- }
164
-
165
- public async load(name: string | string[]): Promise<boolean> {
166
- const eventId = this._uuidGenerator.create();
167
- const res = this.loadEnvMap(name, eventId);
168
- await this.assignEnvironmentMap(res.name, res.type, eventId);
169
- return Promise.resolve(true);
170
- }
171
-
172
- public loadEnvMap(name: string | string[], eId?: string): {
173
- name: string,
174
- map: Promise<THREE.CubeTexture | THREE.Texture | null>,
175
- type: ENVIRONMENT_MAP_TYPE
176
- } {
177
- const eventId = eId || this._uuidGenerator.create();
178
- const event: ITaskEvent = { type: TASK_TYPE.ENVIRONMENT_MAP_LOADING, id: eventId, data: { input: name }, progress: 0, status: 'Loading EnvironmentMap' };
179
- this._eventEngine.emitEvent(EVENTTYPE.TASK.TASK_START, event);
180
-
181
- if (name === 'none' || name === 'null')
182
- return this._environmentMaps[name];
183
-
184
- let name_internal: string, name_caching: string, url: string[];
185
-
186
- // check if name is a JSON.stringified version of an array of urls
187
- if (!Array.isArray(name) && (name.startsWith('["https') && name.endsWith('"]')))
188
- try { name = JSON.parse(name); } catch (e) {
189
- this.notify(eventId, true);
190
- throw new ShapeDiverViewerEnvironmentMapError('EnvironmentMapLoader.load: Was not able to load environment map.', name);
191
- }
192
-
193
- // deal with string or array, define names for loading and caching
194
- if (!Array.isArray(name)) {
195
- name_internal = name.toLowerCase().replace(/ /g, '_');
196
- name_caching = name_internal + this._renderingEngine.environmentMapResolution;
197
- } else {
198
- if (name.length !== 6) {
199
- this.notify(eventId, true);
200
- throw new ShapeDiverViewerEnvironmentMapError('EnvironmentMapLoader.load: Was not able to load environment map, exactly 6 files are needed in the array.', name);
201
- }
202
- name_internal = JSON.stringify(name, null, 0);
203
- name_caching = name_internal;
204
- }
205
-
206
- // check if environment map is already cached
207
- for (const environmentMap in this._environmentMaps)
208
- if (environmentMap === name_caching)
209
- return this._environmentMaps[environmentMap];
210
-
211
- try {
212
- // define urls for 6 cube images ourselves
213
- if (!Array.isArray(name)) {
214
- url = [];
215
- let i;
216
- if (this._environmentMapNamesHDR.indexOf(name_internal) >= 0) {
217
- let url_hdr = 'https://viewer.shapediver.com/v3/envmaps/1k/' + name_internal + '_1k.hdr';
218
- if (this._environmentMapNamesHDRKhronos.indexOf(name_internal) >= 0)
219
- url_hdr = 'https://viewer.shapediver.com/v3/envmaps/khronos/' + name_internal + '.hdr';
220
-
221
- this._environmentMapHDR.push(url_hdr);
222
- return this.loadEnvironmentMap(name_caching, url_hdr, eventId);
223
- } else if (this._environmentMapNamesJPG.indexOf(name_internal) >= 0) {
224
- // found in list of available environment maps with file type jpg
225
- for (i = 0; i < this._environmentMapFilenames.length; i++)
226
- url.push('https://viewer.shapediver.com/v2/envmaps/' + this._renderingEngine.environmentMapResolution + '/' + name_internal + '/' + this._environmentMapFilenames[i] + '.jpg');
227
- } else if (name.startsWith('https://') || name.startsWith('http://')) {
228
- if (name.endsWith('.hdr')) {
229
- this._environmentMapHDR.push(name);
230
- return this.loadEnvironmentMap(name_caching, name, eventId);
231
- } else {
232
- if (!name.endsWith('/'))
233
- name += '/';
234
-
235
- for (i = 0; i < this._environmentMapFilenames.length; i++)
236
- url.push(name + this._environmentMapFilenames[i] + '.jpg');
237
- }
238
- }
239
- else {
240
- this.notify(eventId, true);
241
- throw new ShapeDiverViewerEnvironmentMapError('EnvironmentMapLoader.load: Was not able to load environment map, format not supported.', name);
242
- }
243
- } else {
244
- url = name;
245
- }
246
-
247
- return this.loadEnvironmentMap(name_caching, url, eventId);
248
- }
249
- catch (e) {
250
- this.notify(eventId, true);
251
- throw e;
252
- }
253
- }
254
-
255
- // #endregion Public Methods (4)
256
-
257
- // #region Private Methods (4)
258
-
259
- private async assignEnvironmentMap(name: string, type: ENVIRONMENT_MAP_TYPE, eventId: string) {
260
- if (name in this._environmentMaps === false) return;
261
- this._type = type;
262
- const map = await this._environmentMaps[name].map;
263
- this._renderingEngine.materialLoader.assignEnvironmentMap(map, type);
264
- this._envMap = map;
265
- this.notify(eventId);
266
- }
267
-
268
- private assignTextureEncoding() {
269
- for (const e in this._environmentMaps) {
270
- if (this._environmentMaps[e]) {
271
- if (this._environmentMaps[e].resolved === true) {
272
- this._environmentMaps[e].map.then(m => {
273
- if (m instanceof THREE.Texture) {
274
- m.dispose();
275
- m.colorSpace = this._textureEncoding;
276
- m.needsUpdate = true;
277
- }
278
- });
279
- }
280
- }
281
- }
282
- }
283
-
284
- private loadEnvironmentMap(name: string, url: string | string[], eventId: string): {
285
- name: string,
286
- map: Promise<THREE.CubeTexture | THREE.Texture | null>,
287
- type: ENVIRONMENT_MAP_TYPE
288
- } {
289
- this._environmentMaps[name] = {
290
- name,
291
- type: !Array.isArray(url) ? ENVIRONMENT_MAP_TYPE.HDR : ENVIRONMENT_MAP_TYPE.LDR,
292
- map: new Promise<THREE.CubeTexture | THREE.Texture | null>(async (resolve, reject) => {
293
- try {
294
- if (!Array.isArray(url)) {
295
- const response: HttpResponse<ArrayBuffer> = await this._httpClient.get(url, undefined, true) as HttpResponse<ArrayBuffer>;
296
- const arrayBufferView = new Uint8Array(response.data);
297
- const blob = new Blob([arrayBufferView], { type: response.headers['content-type'] });
298
- const blobUrl = URL.createObjectURL(blob);
299
- new RGBELoader().load(blobUrl, (texture) => {
300
- const map = this._pmremGenerator.fromEquirectangular(texture).texture;
301
- this._pmremGenerator.dispose();
302
- map;
303
- URL.revokeObjectURL(blobUrl);
304
- this._environmentMaps[name].resolved = true;
305
- resolve(map);
306
- },
307
- () => { },
308
- (error) => reject(error));
309
- } else {
310
- const promises: Promise<HttpResponse<ArrayBuffer>>[] = [];
311
- url.forEach(u => promises.push(this._httpClient.get(u, undefined, true) as Promise<HttpResponse<ArrayBuffer>>));
312
- const responses = await Promise.all(promises);
313
-
314
- const urls = responses.map(response => {
315
- const arrayBufferView = new Uint8Array(response.data);
316
- const blob = new Blob([arrayBufferView], { type: response.headers['content-type'] });
317
- return URL.createObjectURL(blob);
318
- });
319
-
320
- new THREE.CubeTextureLoader().load(urls,
321
- (map: THREE.CubeTexture) => {
322
- map.colorSpace = THREE.SRGBColorSpace;
323
- map.format = THREE.RGBAFormat;
324
- map.mapping = THREE.CubeReflectionMapping;
325
- urls.forEach(u => URL.revokeObjectURL(u));
326
- this._environmentMaps[name].resolved = true;
327
- resolve(map);
328
- },
329
- () => { },
330
- (error) => reject(error));
331
- }
332
- } catch (e) {
333
- this.notify(eventId, true);
334
- throw e;
335
- }
336
- })
337
- };
338
- return this._environmentMaps[name];
339
- }
340
-
341
- private notify(eventId: string, failed = false) {
342
- let event: ITaskEvent;
343
- if (failed) {
344
- event = { type: TASK_TYPE.ENVIRONMENT_MAP_LOADING, id: eventId, progress: 1, status: 'Loading of EnvironmentMap failed' };
345
- this._eventEngine.emitEvent(EVENTTYPE.TASK.TASK_CANCEL, event);
346
- } else {
347
- event = { type: TASK_TYPE.ENVIRONMENT_MAP_LOADING, id: eventId, progress: 1, status: 'Loaded EnvironmentMap' };
348
- if(this._stateEngine.viewportEngines[this._renderingEngine.id]) {
349
- this._stateEngine.viewportEngines[this._renderingEngine.id]!.environmentMapLoaded.resolve(true);
350
- this._stateEngine.viewportEngines[this._renderingEngine.id]!.environmentMapLoaded = new StatePromise();
351
- }
352
- this._eventEngine.emitEvent(EVENTTYPE.TASK.TASK_END, event);
353
- }
354
- }
355
-
356
- // #endregion Private Methods (4)
357
- }