@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.
Files changed (78) hide show
  1. package/dist/RenderingEngine.d.ts +4 -2
  2. package/dist/RenderingEngine.d.ts.map +1 -1
  3. package/dist/RenderingEngine.js +4 -0
  4. package/dist/RenderingEngine.js.map +1 -1
  5. package/dist/index.d.ts +4 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +7 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/interfaces/IRenderingEngine.d.ts +2 -1
  10. package/dist/interfaces/IRenderingEngine.d.ts.map +1 -1
  11. package/dist/loaders/GeometryLoader.d.ts +6 -4
  12. package/dist/loaders/GeometryLoader.d.ts.map +1 -1
  13. package/dist/loaders/GeometryLoader.js +162 -108
  14. package/dist/loaders/GeometryLoader.js.map +1 -1
  15. package/dist/loaders/HTMLElementAnchorLoader.d.ts +1 -2
  16. package/dist/loaders/HTMLElementAnchorLoader.d.ts.map +1 -1
  17. package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -1
  18. package/dist/loaders/LightLoader.d.ts +4 -3
  19. package/dist/loaders/LightLoader.d.ts.map +1 -1
  20. package/dist/loaders/LightLoader.js +8 -0
  21. package/dist/loaders/LightLoader.js.map +1 -1
  22. package/dist/loaders/MaterialLoader.d.ts +15 -2
  23. package/dist/loaders/MaterialLoader.d.ts.map +1 -1
  24. package/dist/loaders/MaterialLoader.js +124 -61
  25. package/dist/loaders/MaterialLoader.js.map +1 -1
  26. package/dist/managers/CameraManager.d.ts +2 -2
  27. package/dist/managers/CameraManager.d.ts.map +1 -1
  28. package/dist/managers/CameraManager.js +25 -5
  29. package/dist/managers/CameraManager.js.map +1 -1
  30. package/dist/managers/EnvironmentGeometryManager.d.ts.map +1 -1
  31. package/dist/managers/EnvironmentGeometryManager.js +6 -19
  32. package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
  33. package/dist/managers/PostProcessingManager.d.ts.map +1 -1
  34. package/dist/managers/PostProcessingManager.js +18 -1
  35. package/dist/managers/PostProcessingManager.js.map +1 -1
  36. package/dist/managers/RenderingManager.d.ts.map +1 -1
  37. package/dist/managers/RenderingManager.js +6 -1
  38. package/dist/managers/RenderingManager.js.map +1 -1
  39. package/dist/managers/SceneTracingManager.d.ts.map +1 -1
  40. package/dist/managers/SceneTracingManager.js +2 -0
  41. package/dist/managers/SceneTracingManager.js.map +1 -1
  42. package/dist/managers/SceneTreeManager.d.ts +40 -11
  43. package/dist/managers/SceneTreeManager.d.ts.map +1 -1
  44. package/dist/managers/SceneTreeManager.js +304 -247
  45. package/dist/managers/SceneTreeManager.js.map +1 -1
  46. package/dist/managers/environmentGeometry/ContactShadow.d.ts.map +1 -1
  47. package/dist/managers/environmentGeometry/ContactShadow.js +2 -2
  48. package/dist/managers/environmentGeometry/ContactShadow.js.map +1 -1
  49. package/dist/managers/environmentGeometry/Grid.d.ts.map +1 -1
  50. package/dist/managers/environmentGeometry/Grid.js +2 -2
  51. package/dist/managers/environmentGeometry/Grid.js.map +1 -1
  52. package/dist/managers/environmentGeometry/GroundPlane.d.ts.map +1 -1
  53. package/dist/managers/environmentGeometry/GroundPlane.js +4 -3
  54. package/dist/managers/environmentGeometry/GroundPlane.js.map +1 -1
  55. package/dist/managers/environmentGeometry/GroundPlaneShadow.d.ts.map +1 -1
  56. package/dist/managers/environmentGeometry/GroundPlaneShadow.js +4 -4
  57. package/dist/managers/environmentGeometry/GroundPlaneShadow.js.map +1 -1
  58. package/dist/managers/sceneTree/SDTFUtils.d.ts +2 -2
  59. package/dist/managers/sceneTree/SDTFUtils.d.ts.map +1 -1
  60. package/dist/managers/sceneTree/SDTFUtils.js +6 -6
  61. package/dist/managers/sceneTree/SDTFUtils.js.map +1 -1
  62. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts +3 -5
  63. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts.map +1 -1
  64. package/dist/managers/sceneTree/SceenTreeManagerUtils.js +24 -32
  65. package/dist/managers/sceneTree/SceenTreeManagerUtils.js.map +1 -1
  66. package/dist/objects/SDObject.d.ts +15 -1
  67. package/dist/objects/SDObject.d.ts.map +1 -1
  68. package/dist/objects/SDObject.js +26 -4
  69. package/dist/objects/SDObject.js.map +1 -1
  70. package/package.json +17 -17
  71. package/dist/objects/SDBone.d.ts +0 -13
  72. package/dist/objects/SDBone.d.ts.map +0 -1
  73. package/dist/objects/SDBone.js +0 -75
  74. package/dist/objects/SDBone.js.map +0 -1
  75. package/dist/objects/SDData.d.ts +0 -19
  76. package/dist/objects/SDData.d.ts.map +0 -1
  77. package/dist/objects/SDData.js +0 -48
  78. package/dist/objects/SDData.js.map +0 -1
@@ -1,4 +1,5 @@
1
- import { GeometryData, IMaterialAbstractData, MaterialBasicLineData, MaterialPointData, MaterialStandardData, MATERIAL_TYPE, PRIMITIVE_MODE } from "@shapediver/viewer.shared.types";
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): THREE.Material | THREE.LineBasicMaterial | THREE.MeshBasicMaterial | THREE.PointsMaterial | MultiPointsMaterial;
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":"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"}
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 viewer_shared_types_1.MaterialBasicLineData({ color: "#199b9b" });
50
- this._defaultMaterialData = new viewer_shared_types_1.MaterialStandardData({
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 viewer_shared_types_1.MaterialPointData({ color: "#199b9b" });
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
- viewer_shared_types_1.MaterialStandardData ||
251
+ viewer_shared_node_tree_1.MaterialStandardData ||
250
252
  this._materialCache[cacheKey].materialData instanceof
251
- viewer_shared_types_1.MaterialGemData ||
253
+ viewer_shared_node_tree_1.MaterialGemData ||
252
254
  this._materialCache[cacheKey].materialData instanceof
253
- viewer_shared_types_1.MaterialSpecularGlossinessData ||
255
+ viewer_shared_node_tree_1.MaterialSpecularGlossinessData ||
254
256
  this._materialCache[cacheKey].materialData instanceof
255
- viewer_shared_types_1.MaterialUnlitData ||
257
+ viewer_shared_node_tree_1.MaterialUnlitData ||
256
258
  this._materialCache[cacheKey].materialData instanceof
257
- viewer_shared_types_1.MaterialLambertData ||
259
+ viewer_shared_node_tree_1.MaterialLambertData ||
258
260
  this._materialCache[cacheKey].materialData instanceof
259
- viewer_shared_types_1.MaterialPhongData) &&
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
- viewer_shared_types_1.MaterialUnlitData ||
265
+ viewer_shared_node_tree_1.MaterialUnlitData ||
264
266
  this._materialCache[cacheKey].materialData instanceof
265
- viewer_shared_types_1.MaterialLambertData ||
267
+ viewer_shared_node_tree_1.MaterialLambertData ||
266
268
  this._materialCache[cacheKey].materialData instanceof
267
- viewer_shared_types_1.MaterialPhongData) &&
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
- viewer_shared_types_1.MaterialUnlitData ||
297
+ viewer_shared_node_tree_1.MaterialUnlitData ||
296
298
  this._materialCache[cacheKey].materialData instanceof
297
- viewer_shared_types_1.MaterialLambertData ||
299
+ viewer_shared_node_tree_1.MaterialLambertData ||
298
300
  this._materialCache[cacheKey].materialData instanceof
299
- viewer_shared_types_1.MaterialPhongData) &&
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
- viewer_shared_types_1.MaterialStandardData ||
332
+ viewer_shared_node_tree_1.MaterialStandardData ||
331
333
  this._materialCache[cacheKey].materialData instanceof
332
- viewer_shared_types_1.MaterialGemData ||
334
+ viewer_shared_node_tree_1.MaterialGemData ||
333
335
  this._materialCache[cacheKey].materialData instanceof
334
- viewer_shared_types_1.MaterialSpecularGlossinessData ||
336
+ viewer_shared_node_tree_1.MaterialSpecularGlossinessData ||
335
337
  this._materialCache[cacheKey].materialData instanceof
336
- viewer_shared_types_1.MaterialUnlitData) &&
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
- viewer_shared_types_1.MaterialStandardData ||
364
+ viewer_shared_node_tree_1.MaterialStandardData ||
363
365
  this._materialCache[cacheKey].materialData instanceof
364
- viewer_shared_types_1.MaterialGemData ||
366
+ viewer_shared_node_tree_1.MaterialGemData ||
365
367
  this._materialCache[cacheKey].materialData instanceof
366
- viewer_shared_types_1.MaterialSpecularGlossinessData ||
368
+ viewer_shared_node_tree_1.MaterialSpecularGlossinessData ||
367
369
  this._materialCache[cacheKey].materialData instanceof
368
- viewer_shared_types_1.MaterialUnlitData) &&
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 viewer_shared_types_1.MaterialMultiPointData) {
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 viewer_shared_types_1.MaterialUnlitData) {
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 viewer_shared_types_1.MaterialShadowData) {
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 viewer_shared_types_1.MaterialSpecularGlossinessData) {
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 viewer_shared_types_1.MaterialGemData) {
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 viewer_shared_types_1.MaterialLambertData) {
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 viewer_shared_types_1.MaterialPhongData) {
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
- shader.uniforms.lightSizeUV = { value: this._lightSizeUV };
592
- shader.uniforms.blending = { value: this._blending };
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 viewer_shared_types_1.MaterialStandardData ||
612
- materialData instanceof viewer_shared_types_1.MaterialGemData ||
613
- materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData ||
614
- materialData instanceof viewer_shared_types_1.MaterialUnlitData ||
615
- materialData instanceof viewer_shared_types_1.MaterialLambertData ||
616
- materialData instanceof viewer_shared_types_1.MaterialPhongData) {
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 viewer_shared_types_1.MaterialPointData) {
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 viewer_shared_types_1.MaterialMultiPointData) {
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 viewer_shared_types_1.MaterialShadowData)
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 viewer_shared_types_1.MaterialUnlitData ||
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 viewer_shared_types_1.MaterialPhongData &&
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 viewer_shared_types_1.MaterialLambertData &&
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 viewer_shared_types_1.MaterialSpecularGlossinessData))
1153
+ !(materialData instanceof viewer_shared_node_tree_1.MaterialSpecularGlossinessData))
1145
1154
  return { properties: standardProperties, mapCount };
1146
- if (materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData) {
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 viewer_shared_types_1.MaterialGemData &&
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 viewer_shared_types_1.MaterialStandardData))
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 viewer_shared_types_1.GeometryData))
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.userData.cacheKey = cacheKey;
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
- return (0, viewer_shared_services_1.btoaCustom)(`${map.image.src}_${map.center}_${map.color}_${map.flipY}_${map.magFilter}_${map.minFilter}_${map.offset}_${map.repeat}_${map.rotation}_${map.texCoord}_${map.wrapS}_${map.wrapT}`);
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 +