@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.15.12 → 3.16.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.
- package/dist/RenderingEngine.d.ts +4 -2
- package/dist/RenderingEngine.d.ts.map +1 -1
- package/dist/RenderingEngine.js +4 -0
- package/dist/RenderingEngine.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/IRenderingEngine.d.ts +2 -1
- package/dist/interfaces/IRenderingEngine.d.ts.map +1 -1
- package/dist/loaders/GeometryLoader.d.ts +6 -4
- package/dist/loaders/GeometryLoader.d.ts.map +1 -1
- package/dist/loaders/GeometryLoader.js +162 -108
- package/dist/loaders/GeometryLoader.js.map +1 -1
- package/dist/loaders/HTMLElementAnchorLoader.d.ts +1 -2
- package/dist/loaders/HTMLElementAnchorLoader.d.ts.map +1 -1
- package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -1
- package/dist/loaders/LightLoader.d.ts +4 -3
- package/dist/loaders/LightLoader.d.ts.map +1 -1
- package/dist/loaders/LightLoader.js +8 -0
- package/dist/loaders/LightLoader.js.map +1 -1
- package/dist/loaders/MaterialLoader.d.ts +15 -2
- package/dist/loaders/MaterialLoader.d.ts.map +1 -1
- package/dist/loaders/MaterialLoader.js +124 -61
- package/dist/loaders/MaterialLoader.js.map +1 -1
- package/dist/managers/CameraManager.d.ts +2 -2
- package/dist/managers/CameraManager.d.ts.map +1 -1
- package/dist/managers/CameraManager.js +25 -5
- package/dist/managers/CameraManager.js.map +1 -1
- package/dist/managers/EnvironmentGeometryManager.d.ts.map +1 -1
- package/dist/managers/EnvironmentGeometryManager.js +6 -19
- package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
- package/dist/managers/PostProcessingManager.d.ts.map +1 -1
- package/dist/managers/PostProcessingManager.js +18 -1
- package/dist/managers/PostProcessingManager.js.map +1 -1
- package/dist/managers/RenderingManager.d.ts.map +1 -1
- package/dist/managers/RenderingManager.js +6 -1
- package/dist/managers/RenderingManager.js.map +1 -1
- package/dist/managers/SceneTracingManager.d.ts.map +1 -1
- package/dist/managers/SceneTracingManager.js +2 -0
- package/dist/managers/SceneTracingManager.js.map +1 -1
- package/dist/managers/SceneTreeManager.d.ts +40 -11
- package/dist/managers/SceneTreeManager.d.ts.map +1 -1
- package/dist/managers/SceneTreeManager.js +304 -247
- package/dist/managers/SceneTreeManager.js.map +1 -1
- package/dist/managers/environmentGeometry/ContactShadow.d.ts.map +1 -1
- package/dist/managers/environmentGeometry/ContactShadow.js +2 -2
- package/dist/managers/environmentGeometry/ContactShadow.js.map +1 -1
- package/dist/managers/environmentGeometry/Grid.d.ts.map +1 -1
- package/dist/managers/environmentGeometry/Grid.js +2 -2
- package/dist/managers/environmentGeometry/Grid.js.map +1 -1
- package/dist/managers/environmentGeometry/GroundPlane.d.ts.map +1 -1
- package/dist/managers/environmentGeometry/GroundPlane.js +4 -3
- package/dist/managers/environmentGeometry/GroundPlane.js.map +1 -1
- package/dist/managers/environmentGeometry/GroundPlaneShadow.d.ts.map +1 -1
- package/dist/managers/environmentGeometry/GroundPlaneShadow.js +4 -4
- package/dist/managers/environmentGeometry/GroundPlaneShadow.js.map +1 -1
- package/dist/managers/sceneTree/SDTFUtils.d.ts +2 -2
- package/dist/managers/sceneTree/SDTFUtils.d.ts.map +1 -1
- package/dist/managers/sceneTree/SDTFUtils.js +6 -6
- package/dist/managers/sceneTree/SDTFUtils.js.map +1 -1
- package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts +3 -5
- package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts.map +1 -1
- package/dist/managers/sceneTree/SceenTreeManagerUtils.js +24 -32
- package/dist/managers/sceneTree/SceenTreeManagerUtils.js.map +1 -1
- package/dist/objects/SDObject.d.ts +15 -1
- package/dist/objects/SDObject.d.ts.map +1 -1
- package/dist/objects/SDObject.js +26 -4
- package/dist/objects/SDObject.js.map +1 -1
- package/package.json +17 -17
- package/dist/objects/SDBone.d.ts +0 -13
- package/dist/objects/SDBone.d.ts.map +0 -1
- package/dist/objects/SDBone.js +0 -75
- package/dist/objects/SDBone.js.map +0 -1
- package/dist/objects/SDData.d.ts +0 -19
- package/dist/objects/SDData.d.ts.map +0 -1
- package/dist/objects/SDData.js +0 -48
- package/dist/objects/SDData.js.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { GeometryData,
|
|
1
|
+
import { GeometryData, MaterialBasicLineData, MaterialPointData, MaterialStandardData } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
+
import { IMaterialAbstractData, MATERIAL_TYPE, PRIMITIVE_MODE } from "@shapediver/viewer.shared.types";
|
|
2
3
|
import { quat } from "gl-matrix";
|
|
3
4
|
import * as THREE from "three";
|
|
4
5
|
import { ILoader } from "../interfaces/ILoader";
|
|
@@ -38,6 +39,8 @@ export declare class MaterialLoader implements ILoader {
|
|
|
38
39
|
private _lightSizeUV;
|
|
39
40
|
private _materialOverrideType;
|
|
40
41
|
private _materialCache;
|
|
42
|
+
private _shaderProgramCache;
|
|
43
|
+
private _compiledShaderSignatures;
|
|
41
44
|
private _maxMapCount;
|
|
42
45
|
private _pointSize;
|
|
43
46
|
private _textureEncoding;
|
|
@@ -71,13 +74,23 @@ export declare class MaterialLoader implements ILoader {
|
|
|
71
74
|
assignEnvironmentMapRotation(value: quat): void;
|
|
72
75
|
assignPointSize(p: number): void;
|
|
73
76
|
cacheSize(): number;
|
|
74
|
-
createMaterial(type: GEOMETRY_MATERIAL_TYPE, incomingData: IMaterialAbstractData | GeometryData, materialData: IMaterialAbstractData | null, materialSettings?: MaterialSettings):
|
|
77
|
+
createMaterial(type: GEOMETRY_MATERIAL_TYPE, incomingData: IMaterialAbstractData | GeometryData, materialData: IMaterialAbstractData | null, materialSettings?: MaterialSettings): MultiPointsMaterial | THREE.PointsMaterial | THREE.Material | THREE.LineBasicMaterial | THREE.MeshBasicMaterial;
|
|
75
78
|
emptyMaterialCache(): void;
|
|
76
79
|
getMaterialProperties(materialData: IMaterialAbstractData | null, type: GEOMETRY_MATERIAL_TYPE, materialSettings?: MaterialSettings): {
|
|
77
80
|
properties: ThreeJsMaterialParameterTypes;
|
|
78
81
|
mapCount: number;
|
|
79
82
|
};
|
|
80
83
|
init(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Get a shader signature based on properties that affect shader compilation.
|
|
86
|
+
* Materials with the same signature can share compiled shader programs.
|
|
87
|
+
*/
|
|
88
|
+
private getShaderSignature;
|
|
89
|
+
/**
|
|
90
|
+
* Precompile shaders for a batch of materials to avoid runtime compilation costs.
|
|
91
|
+
* This should be called during initialization or loading phases.
|
|
92
|
+
*/
|
|
93
|
+
precompileShaders(materials: THREE.Material[], scene: THREE.Scene, camera: THREE.Camera): void;
|
|
81
94
|
/**
|
|
82
95
|
* Create a material object with the provided material data.
|
|
83
96
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaterialLoader.d.ts","sourceRoot":"","sources":["../../src/loaders/MaterialLoader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MaterialLoader.d.ts","sourceRoot":"","sources":["../../src/loaders/MaterialLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,13 +46,13 @@ class MaterialLoader {
|
|
|
46
46
|
this._converter = viewer_shared_services_1.Converter.instance;
|
|
47
47
|
this._sceneTree = viewer_shared_node_tree_1.Tree.instance;
|
|
48
48
|
this._blending = 0.0;
|
|
49
|
-
this._defaultLineMaterialData = new
|
|
50
|
-
this._defaultMaterialData = new
|
|
49
|
+
this._defaultLineMaterialData = new viewer_shared_node_tree_1.MaterialBasicLineData({ color: "#199b9b" });
|
|
50
|
+
this._defaultMaterialData = new viewer_shared_node_tree_1.MaterialStandardData({
|
|
51
51
|
color: "#199b9b",
|
|
52
52
|
side: viewer_shared_types_1.MATERIAL_SIDE.DOUBLE,
|
|
53
53
|
metalness: 0.0,
|
|
54
54
|
});
|
|
55
|
-
this._defaultPointMaterialData = new
|
|
55
|
+
this._defaultPointMaterialData = new viewer_shared_node_tree_1.MaterialPointData({ color: "#199b9b" });
|
|
56
56
|
this._envMap = null;
|
|
57
57
|
this._envMapIntensity = 1;
|
|
58
58
|
this._envMapType = EnvironmentMapLoader_1.ENVIRONMENT_MAP_TYPE.NULL;
|
|
@@ -61,6 +61,8 @@ class MaterialLoader {
|
|
|
61
61
|
this._lightSizeUV = 0.025;
|
|
62
62
|
this._materialOverrideType = undefined;
|
|
63
63
|
this._materialCache = {};
|
|
64
|
+
this._shaderProgramCache = new Map();
|
|
65
|
+
this._compiledShaderSignatures = new Set();
|
|
64
66
|
this._maxMapCount = 0;
|
|
65
67
|
this._pointSize = 1.0;
|
|
66
68
|
this._textureEncoding = THREE.SRGBColorSpace;
|
|
@@ -246,25 +248,25 @@ class MaterialLoader {
|
|
|
246
248
|
const material = this._materialCache[cacheKey].material;
|
|
247
249
|
if (this._materialCache[cacheKey].materialData &&
|
|
248
250
|
(this._materialCache[cacheKey].materialData instanceof
|
|
249
|
-
|
|
251
|
+
viewer_shared_node_tree_1.MaterialStandardData ||
|
|
250
252
|
this._materialCache[cacheKey].materialData instanceof
|
|
251
|
-
|
|
253
|
+
viewer_shared_node_tree_1.MaterialGemData ||
|
|
252
254
|
this._materialCache[cacheKey].materialData instanceof
|
|
253
|
-
|
|
255
|
+
viewer_shared_node_tree_1.MaterialSpecularGlossinessData ||
|
|
254
256
|
this._materialCache[cacheKey].materialData instanceof
|
|
255
|
-
|
|
257
|
+
viewer_shared_node_tree_1.MaterialUnlitData ||
|
|
256
258
|
this._materialCache[cacheKey].materialData instanceof
|
|
257
|
-
|
|
259
|
+
viewer_shared_node_tree_1.MaterialLambertData ||
|
|
258
260
|
this._materialCache[cacheKey].materialData instanceof
|
|
259
|
-
|
|
261
|
+
viewer_shared_node_tree_1.MaterialPhongData) &&
|
|
260
262
|
(this._materialCache[cacheKey].materialData).envMap !== undefined)
|
|
261
263
|
continue;
|
|
262
264
|
if ((this._materialCache[cacheKey].materialData instanceof
|
|
263
|
-
|
|
265
|
+
viewer_shared_node_tree_1.MaterialUnlitData ||
|
|
264
266
|
this._materialCache[cacheKey].materialData instanceof
|
|
265
|
-
|
|
267
|
+
viewer_shared_node_tree_1.MaterialLambertData ||
|
|
266
268
|
this._materialCache[cacheKey].materialData instanceof
|
|
267
|
-
|
|
269
|
+
viewer_shared_node_tree_1.MaterialPhongData) &&
|
|
268
270
|
this._renderingEngine.environmentMapForUnlitMaterials ===
|
|
269
271
|
false)
|
|
270
272
|
return;
|
|
@@ -292,11 +294,11 @@ class MaterialLoader {
|
|
|
292
294
|
.material;
|
|
293
295
|
if (this._materialCache[cacheKey].materialData &&
|
|
294
296
|
(this._materialCache[cacheKey].materialData instanceof
|
|
295
|
-
|
|
297
|
+
viewer_shared_node_tree_1.MaterialUnlitData ||
|
|
296
298
|
this._materialCache[cacheKey].materialData instanceof
|
|
297
|
-
|
|
299
|
+
viewer_shared_node_tree_1.MaterialLambertData ||
|
|
298
300
|
this._materialCache[cacheKey].materialData instanceof
|
|
299
|
-
|
|
301
|
+
viewer_shared_node_tree_1.MaterialPhongData) &&
|
|
300
302
|
this._materialCache[cacheKey].materialData.envMap !== undefined)
|
|
301
303
|
continue;
|
|
302
304
|
if (toggle) {
|
|
@@ -327,13 +329,13 @@ class MaterialLoader {
|
|
|
327
329
|
.material;
|
|
328
330
|
if (this._materialCache[cacheKey].materialData &&
|
|
329
331
|
(this._materialCache[cacheKey].materialData instanceof
|
|
330
|
-
|
|
332
|
+
viewer_shared_node_tree_1.MaterialStandardData ||
|
|
331
333
|
this._materialCache[cacheKey].materialData instanceof
|
|
332
|
-
|
|
334
|
+
viewer_shared_node_tree_1.MaterialGemData ||
|
|
333
335
|
this._materialCache[cacheKey].materialData instanceof
|
|
334
|
-
|
|
336
|
+
viewer_shared_node_tree_1.MaterialSpecularGlossinessData ||
|
|
335
337
|
this._materialCache[cacheKey].materialData instanceof
|
|
336
|
-
|
|
338
|
+
viewer_shared_node_tree_1.MaterialUnlitData) &&
|
|
337
339
|
(this._materialCache[cacheKey].materialData).envMap !== undefined)
|
|
338
340
|
continue;
|
|
339
341
|
material.envMapIntensity = value;
|
|
@@ -359,13 +361,13 @@ class MaterialLoader {
|
|
|
359
361
|
.material;
|
|
360
362
|
if (this._materialCache[cacheKey].materialData &&
|
|
361
363
|
(this._materialCache[cacheKey].materialData instanceof
|
|
362
|
-
|
|
364
|
+
viewer_shared_node_tree_1.MaterialStandardData ||
|
|
363
365
|
this._materialCache[cacheKey].materialData instanceof
|
|
364
|
-
|
|
366
|
+
viewer_shared_node_tree_1.MaterialGemData ||
|
|
365
367
|
this._materialCache[cacheKey].materialData instanceof
|
|
366
|
-
|
|
368
|
+
viewer_shared_node_tree_1.MaterialSpecularGlossinessData ||
|
|
367
369
|
this._materialCache[cacheKey].materialData instanceof
|
|
368
|
-
|
|
370
|
+
viewer_shared_node_tree_1.MaterialUnlitData) &&
|
|
369
371
|
this._materialCache[cacheKey].materialData.envMap !== undefined)
|
|
370
372
|
continue;
|
|
371
373
|
material.envMapRotation = this._environmentMapRotationEuler;
|
|
@@ -527,7 +529,7 @@ class MaterialLoader {
|
|
|
527
529
|
this.maxMapCount = Math.max(this.maxMapCount, mapCount);
|
|
528
530
|
let material;
|
|
529
531
|
if (type === GEOMETRY_MATERIAL_TYPE.POINT) {
|
|
530
|
-
if (materialData instanceof
|
|
532
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialMultiPointData) {
|
|
531
533
|
material = new MultiPointsMaterial_1.MultiPointsMaterial(properties);
|
|
532
534
|
}
|
|
533
535
|
else {
|
|
@@ -538,11 +540,11 @@ class MaterialLoader {
|
|
|
538
540
|
material = new THREE.LineBasicMaterial(properties);
|
|
539
541
|
}
|
|
540
542
|
else {
|
|
541
|
-
if (materialData instanceof
|
|
543
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialUnlitData) {
|
|
542
544
|
material = new THREE.MeshBasicMaterial(properties);
|
|
543
545
|
}
|
|
544
546
|
else {
|
|
545
|
-
if (materialData instanceof
|
|
547
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialShadowData) {
|
|
546
548
|
material = new THREE.ShadowMaterial({
|
|
547
549
|
opacity: properties.opacity,
|
|
548
550
|
color: properties.color,
|
|
@@ -569,16 +571,16 @@ class MaterialLoader {
|
|
|
569
571
|
material = new THREE.MeshPhysicalMaterial(properties);
|
|
570
572
|
}
|
|
571
573
|
}
|
|
572
|
-
else if (materialData instanceof
|
|
574
|
+
else if (materialData instanceof viewer_shared_node_tree_1.MaterialSpecularGlossinessData) {
|
|
573
575
|
material = new SpecularGlossinessMaterial_1.SpecularGlossinessMaterial(properties);
|
|
574
576
|
}
|
|
575
|
-
else if (materialData instanceof
|
|
577
|
+
else if (materialData instanceof viewer_shared_node_tree_1.MaterialGemData) {
|
|
576
578
|
material = new GemMaterial_1.GemMaterial(properties);
|
|
577
579
|
}
|
|
578
|
-
else if (materialData instanceof
|
|
580
|
+
else if (materialData instanceof viewer_shared_node_tree_1.MaterialLambertData) {
|
|
579
581
|
material = new THREE.MeshLambertMaterial(properties);
|
|
580
582
|
}
|
|
581
|
-
else if (materialData instanceof
|
|
583
|
+
else if (materialData instanceof viewer_shared_node_tree_1.MaterialPhongData) {
|
|
582
584
|
material = new THREE.MeshPhongMaterial(properties);
|
|
583
585
|
}
|
|
584
586
|
else {
|
|
@@ -588,8 +590,13 @@ class MaterialLoader {
|
|
|
588
590
|
const before = material.onBeforeCompile;
|
|
589
591
|
material.onBeforeCompile = (shader, renderer) => {
|
|
590
592
|
before(shader, renderer);
|
|
591
|
-
|
|
592
|
-
shader.uniforms.
|
|
593
|
+
// Only add uniforms once per shader program to improve performance
|
|
594
|
+
if (!shader.uniforms.lightSizeUV) {
|
|
595
|
+
shader.uniforms.lightSizeUV = {
|
|
596
|
+
value: this._lightSizeUV,
|
|
597
|
+
};
|
|
598
|
+
shader.uniforms.blending = { value: this._blending };
|
|
599
|
+
}
|
|
593
600
|
material.userData.shader = shader;
|
|
594
601
|
};
|
|
595
602
|
if (material instanceof SpecularGlossinessMaterial_1.SpecularGlossinessMaterial ||
|
|
@@ -608,12 +615,12 @@ class MaterialLoader {
|
|
|
608
615
|
}
|
|
609
616
|
if (materialSettings && materialSettings.useVertexColors)
|
|
610
617
|
material.vertexColors = true;
|
|
611
|
-
if (materialData instanceof
|
|
612
|
-
materialData instanceof
|
|
613
|
-
materialData instanceof
|
|
614
|
-
materialData instanceof
|
|
615
|
-
materialData instanceof
|
|
616
|
-
materialData instanceof
|
|
618
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialStandardData ||
|
|
619
|
+
materialData instanceof viewer_shared_node_tree_1.MaterialGemData ||
|
|
620
|
+
materialData instanceof viewer_shared_node_tree_1.MaterialSpecularGlossinessData ||
|
|
621
|
+
materialData instanceof viewer_shared_node_tree_1.MaterialUnlitData ||
|
|
622
|
+
materialData instanceof viewer_shared_node_tree_1.MaterialLambertData ||
|
|
623
|
+
materialData instanceof viewer_shared_node_tree_1.MaterialPhongData) {
|
|
617
624
|
if (materialData.envMap !== undefined) {
|
|
618
625
|
const envMapInput = materialData
|
|
619
626
|
.envMap;
|
|
@@ -659,6 +666,8 @@ class MaterialLoader {
|
|
|
659
666
|
}
|
|
660
667
|
emptyMaterialCache() {
|
|
661
668
|
this._materialCache = {};
|
|
669
|
+
this._shaderProgramCache.clear();
|
|
670
|
+
this._compiledShaderSignatures.clear();
|
|
662
671
|
}
|
|
663
672
|
getMaterialProperties(materialData, type, materialSettings) {
|
|
664
673
|
const generalProperties = {};
|
|
@@ -748,7 +757,7 @@ class MaterialLoader {
|
|
|
748
757
|
*
|
|
749
758
|
*/
|
|
750
759
|
if (type === GEOMETRY_MATERIAL_TYPE.POINT) {
|
|
751
|
-
if (materialData instanceof
|
|
760
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialPointData) {
|
|
752
761
|
const pointMaterialProperties = generalProperties;
|
|
753
762
|
pointMaterialProperties.size =
|
|
754
763
|
materialData.size !== undefined
|
|
@@ -773,7 +782,7 @@ class MaterialLoader {
|
|
|
773
782
|
mapCount++;
|
|
774
783
|
}
|
|
775
784
|
}
|
|
776
|
-
else if (materialData instanceof
|
|
785
|
+
else if (materialData instanceof viewer_shared_node_tree_1.MaterialMultiPointData) {
|
|
777
786
|
const multiPointMaterialProperties = generalProperties;
|
|
778
787
|
if (materialData.materialIndexDataMap) {
|
|
779
788
|
multiPointMaterialProperties.materialIndexDataTexture =
|
|
@@ -789,35 +798,35 @@ class MaterialLoader {
|
|
|
789
798
|
}
|
|
790
799
|
multiPointMaterialProperties.size_0 =
|
|
791
800
|
materialData.size_0 !== undefined
|
|
792
|
-
? materialData.size_0
|
|
801
|
+
? this._pointSize * materialData.size_0
|
|
793
802
|
: this._pointSize;
|
|
794
803
|
multiPointMaterialProperties.size_1 =
|
|
795
804
|
materialData.size_1 !== undefined
|
|
796
|
-
? materialData.size_1
|
|
805
|
+
? this._pointSize * materialData.size_1
|
|
797
806
|
: this._pointSize;
|
|
798
807
|
multiPointMaterialProperties.size_2 =
|
|
799
808
|
materialData.size_2 !== undefined
|
|
800
|
-
? materialData.size_2
|
|
809
|
+
? this._pointSize * materialData.size_2
|
|
801
810
|
: this._pointSize;
|
|
802
811
|
multiPointMaterialProperties.size_3 =
|
|
803
812
|
materialData.size_3 !== undefined
|
|
804
|
-
? materialData.size_3
|
|
813
|
+
? this._pointSize * materialData.size_3
|
|
805
814
|
: this._pointSize;
|
|
806
815
|
multiPointMaterialProperties.size_4 =
|
|
807
816
|
materialData.size_4 !== undefined
|
|
808
|
-
? materialData.size_4
|
|
817
|
+
? this._pointSize * materialData.size_4
|
|
809
818
|
: this._pointSize;
|
|
810
819
|
multiPointMaterialProperties.size_5 =
|
|
811
820
|
materialData.size_5 !== undefined
|
|
812
|
-
? materialData.size_5
|
|
821
|
+
? this._pointSize * materialData.size_5
|
|
813
822
|
: this._pointSize;
|
|
814
823
|
multiPointMaterialProperties.size_6 =
|
|
815
824
|
materialData.size_6 !== undefined
|
|
816
|
-
? materialData.size_6
|
|
825
|
+
? this._pointSize * materialData.size_6
|
|
817
826
|
: this._pointSize;
|
|
818
827
|
multiPointMaterialProperties.size_7 =
|
|
819
828
|
materialData.size_7 !== undefined
|
|
820
|
-
? materialData.size_7
|
|
829
|
+
? this._pointSize * materialData.size_7
|
|
821
830
|
: this._pointSize;
|
|
822
831
|
multiPointMaterialProperties.userData = {
|
|
823
832
|
customPointSize_0Enabled: materialData.size_0 !== undefined,
|
|
@@ -1036,7 +1045,7 @@ class MaterialLoader {
|
|
|
1036
1045
|
* Second exit, the shadow material
|
|
1037
1046
|
*
|
|
1038
1047
|
*/
|
|
1039
|
-
if (materialData instanceof
|
|
1048
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialShadowData)
|
|
1040
1049
|
return { properties: generalProperties, mapCount };
|
|
1041
1050
|
/**
|
|
1042
1051
|
* We know evaluate properties that can be applied to basic mesh materials (and the ones extending from them)
|
|
@@ -1065,12 +1074,12 @@ class MaterialLoader {
|
|
|
1065
1074
|
* Third exit, the unlit material
|
|
1066
1075
|
*
|
|
1067
1076
|
*/
|
|
1068
|
-
if (materialData instanceof
|
|
1077
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialUnlitData ||
|
|
1069
1078
|
this._materialOverrideType === viewer_shared_types_1.MATERIAL_TYPE.UNLIT ||
|
|
1070
1079
|
this._materialOverrideType === viewer_shared_types_1.MATERIAL_TYPE.LAMBERT ||
|
|
1071
1080
|
this._materialOverrideType === viewer_shared_types_1.MATERIAL_TYPE.PHONG)
|
|
1072
1081
|
return { properties: basicProperties, mapCount };
|
|
1073
|
-
if (materialData instanceof
|
|
1082
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialPhongData &&
|
|
1074
1083
|
this._materialOverrideType === undefined) {
|
|
1075
1084
|
const phongProperties = basicProperties;
|
|
1076
1085
|
phongProperties.shininess = materialData.shininess;
|
|
@@ -1090,7 +1099,7 @@ class MaterialLoader {
|
|
|
1090
1099
|
phongProperties.reflectivity = materialData.reflectivity;
|
|
1091
1100
|
return { properties: phongProperties, mapCount };
|
|
1092
1101
|
}
|
|
1093
|
-
if (materialData instanceof
|
|
1102
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialLambertData &&
|
|
1094
1103
|
this._materialOverrideType === undefined) {
|
|
1095
1104
|
const lambertProperties = basicProperties;
|
|
1096
1105
|
if (materialData.specularMap !== undefined) {
|
|
@@ -1141,9 +1150,9 @@ class MaterialLoader {
|
|
|
1141
1150
|
*
|
|
1142
1151
|
*/
|
|
1143
1152
|
if (this._materialOverrideType === viewer_shared_types_1.MATERIAL_TYPE.SPECULAR_GLOSSINESS &&
|
|
1144
|
-
!(materialData instanceof
|
|
1153
|
+
!(materialData instanceof viewer_shared_node_tree_1.MaterialSpecularGlossinessData))
|
|
1145
1154
|
return { properties: standardProperties, mapCount };
|
|
1146
|
-
if (materialData instanceof
|
|
1155
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialSpecularGlossinessData) {
|
|
1147
1156
|
const specularGlossinessProperties = standardProperties;
|
|
1148
1157
|
specularGlossinessProperties.specular =
|
|
1149
1158
|
this._renderingEngine.createThreeJsColor(materialData.specular);
|
|
@@ -1177,7 +1186,7 @@ class MaterialLoader {
|
|
|
1177
1186
|
* Fourth exit, the gem material
|
|
1178
1187
|
*
|
|
1179
1188
|
*/
|
|
1180
|
-
if (materialData instanceof
|
|
1189
|
+
if (materialData instanceof viewer_shared_node_tree_1.MaterialGemData &&
|
|
1181
1190
|
this._materialOverrideType === undefined) {
|
|
1182
1191
|
const gemProperties = standardProperties;
|
|
1183
1192
|
gemProperties.refractionIndex = materialData.refractionIndex;
|
|
@@ -1215,7 +1224,7 @@ class MaterialLoader {
|
|
|
1215
1224
|
* the final exit, the MeshPhysicalMaterial
|
|
1216
1225
|
*
|
|
1217
1226
|
*/
|
|
1218
|
-
if (!(materialData instanceof
|
|
1227
|
+
if (!(materialData instanceof viewer_shared_node_tree_1.MaterialStandardData))
|
|
1219
1228
|
return { properties: standardProperties, mapCount };
|
|
1220
1229
|
const meshPhysicalProperties = standardProperties;
|
|
1221
1230
|
meshPhysicalProperties.clearcoat = materialData.clearcoat;
|
|
@@ -1303,6 +1312,39 @@ class MaterialLoader {
|
|
|
1303
1312
|
return { properties: meshPhysicalProperties, mapCount };
|
|
1304
1313
|
}
|
|
1305
1314
|
init() { }
|
|
1315
|
+
/**
|
|
1316
|
+
* Get a shader signature based on properties that affect shader compilation.
|
|
1317
|
+
* Materials with the same signature can share compiled shader programs.
|
|
1318
|
+
*/
|
|
1319
|
+
getShaderSignature(type, materialData, materialSettings) {
|
|
1320
|
+
// Use a simple string concatenation for better performance than JSON.stringify
|
|
1321
|
+
return `${type}_${(materialData === null || materialData === void 0 ? void 0 : materialData.constructor.name) || "default"}_${this._materialOverrideType || "none"}_${(materialSettings === null || materialSettings === void 0 ? void 0 : materialSettings.useVertexColors) ? "vc" : ""}_${(materialSettings === null || materialSettings === void 0 ? void 0 : materialSettings.useFlatShading) ? "fs" : ""}_${(materialSettings === null || materialSettings === void 0 ? void 0 : materialSettings.useMorphTargets) ? "mt" : ""}_${this._envMapType}`;
|
|
1322
|
+
}
|
|
1323
|
+
/**
|
|
1324
|
+
* Precompile shaders for a batch of materials to avoid runtime compilation costs.
|
|
1325
|
+
* This should be called during initialization or loading phases.
|
|
1326
|
+
*/
|
|
1327
|
+
precompileShaders(materials, scene, camera) {
|
|
1328
|
+
if (!this._renderingEngine.renderer)
|
|
1329
|
+
return;
|
|
1330
|
+
const compiler = this._renderingEngine.renderer;
|
|
1331
|
+
const dummyGeometry = new THREE.PlaneGeometry(1, 1);
|
|
1332
|
+
for (const material of materials) {
|
|
1333
|
+
// Skip if already compiled
|
|
1334
|
+
const signature = material.userData.shaderSignature;
|
|
1335
|
+
if (signature && this._compiledShaderSignatures.has(signature)) {
|
|
1336
|
+
continue;
|
|
1337
|
+
}
|
|
1338
|
+
const dummyMesh = new THREE.Mesh(dummyGeometry, material);
|
|
1339
|
+
scene.add(dummyMesh);
|
|
1340
|
+
compiler.compile(scene, camera);
|
|
1341
|
+
scene.remove(dummyMesh);
|
|
1342
|
+
if (signature) {
|
|
1343
|
+
this._compiledShaderSignatures.add(signature);
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
dummyGeometry.dispose();
|
|
1347
|
+
}
|
|
1306
1348
|
/**
|
|
1307
1349
|
* Create a material object with the provided material data.
|
|
1308
1350
|
*
|
|
@@ -1311,7 +1353,7 @@ class MaterialLoader {
|
|
|
1311
1353
|
*/
|
|
1312
1354
|
load(incomingData, materialSettings) {
|
|
1313
1355
|
let materialData = null;
|
|
1314
|
-
if (!(incomingData instanceof
|
|
1356
|
+
if (!(incomingData instanceof viewer_shared_node_tree_1.GeometryData))
|
|
1315
1357
|
materialData = incomingData;
|
|
1316
1358
|
// evaluate which type of material properties we are constructing
|
|
1317
1359
|
let type;
|
|
@@ -1327,13 +1369,21 @@ class MaterialLoader {
|
|
|
1327
1369
|
else {
|
|
1328
1370
|
type = GEOMETRY_MATERIAL_TYPE.MESH;
|
|
1329
1371
|
}
|
|
1330
|
-
const material = this.createMaterial(type, incomingData, materialData, materialSettings);
|
|
1331
1372
|
const cacheKey = this.createDataKeyFromMaterial(incomingData, type, materialSettings);
|
|
1332
|
-
material
|
|
1373
|
+
// Check material cache first
|
|
1333
1374
|
if (this._materialCache[cacheKey]) {
|
|
1334
|
-
this._materialCache[cacheKey].material.copy(material);
|
|
1335
1375
|
return this._materialCache[cacheKey].material;
|
|
1336
1376
|
}
|
|
1377
|
+
// Create new material
|
|
1378
|
+
const material = this.createMaterial(type, incomingData, materialData, materialSettings);
|
|
1379
|
+
// Track shader signature for potential future optimizations
|
|
1380
|
+
const shaderSignature = this.getShaderSignature(type, materialData, materialSettings);
|
|
1381
|
+
material.userData.cacheKey = cacheKey;
|
|
1382
|
+
material.userData.shaderSignature = shaderSignature;
|
|
1383
|
+
// Store in shader program cache for precompilation tracking
|
|
1384
|
+
if (!this._shaderProgramCache.has(shaderSignature)) {
|
|
1385
|
+
this._shaderProgramCache.set(shaderSignature, material);
|
|
1386
|
+
}
|
|
1337
1387
|
this._materialCache[cacheKey] = {
|
|
1338
1388
|
material,
|
|
1339
1389
|
materialData,
|
|
@@ -1384,7 +1434,20 @@ class MaterialLoader {
|
|
|
1384
1434
|
}
|
|
1385
1435
|
}
|
|
1386
1436
|
createDataKeyFromMap(map) {
|
|
1387
|
-
|
|
1437
|
+
let id = "";
|
|
1438
|
+
if (map.asData === true) {
|
|
1439
|
+
id = map.id;
|
|
1440
|
+
}
|
|
1441
|
+
else if (map.image instanceof HTMLImageElement) {
|
|
1442
|
+
id = map.image.src;
|
|
1443
|
+
}
|
|
1444
|
+
else if (map.image instanceof ImageBitmap) {
|
|
1445
|
+
id = map.image.id;
|
|
1446
|
+
}
|
|
1447
|
+
else {
|
|
1448
|
+
id = String(map.data);
|
|
1449
|
+
}
|
|
1450
|
+
return (0, viewer_shared_services_1.btoaCustom)(`${id}_${map.center}_${map.color}_${map.flipY}_${map.magFilter}_${map.minFilter}_${map.offset}_${map.repeat}_${map.rotation}_${map.texCoord}_${map.wrapS}_${map.wrapT}`);
|
|
1388
1451
|
}
|
|
1389
1452
|
createDataKeyFromMaterial(data, type, materialSettings) {
|
|
1390
1453
|
return (0, viewer_shared_services_1.btoaCustom)(data.id +
|