@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.0.0

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 (301) hide show
  1. package/LICENSE +73 -0
  2. package/README.md +3 -0
  3. package/dist/RenderingEngine.d.ts +296 -0
  4. package/dist/RenderingEngine.d.ts.map +1 -0
  5. package/dist/RenderingEngine.js +1079 -0
  6. package/dist/RenderingEngine.js.map +1 -0
  7. package/dist/index.d.ts +12 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +47 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/injectors/Tag3dGeometryCreationInjector.d.ts +11 -0
  12. package/dist/injectors/Tag3dGeometryCreationInjector.d.ts.map +1 -0
  13. package/dist/injectors/Tag3dGeometryCreationInjector.js +169 -0
  14. package/dist/injectors/Tag3dGeometryCreationInjector.js.map +1 -0
  15. package/dist/injectors/TextureUnifierInjector.d.ts +14 -0
  16. package/dist/injectors/TextureUnifierInjector.d.ts.map +1 -0
  17. package/dist/injectors/TextureUnifierInjector.js +227 -0
  18. package/dist/injectors/TextureUnifierInjector.js.map +1 -0
  19. package/dist/interfaces/ILoader.d.ts +4 -0
  20. package/dist/interfaces/ILoader.d.ts.map +1 -0
  21. package/dist/interfaces/ILoader.js +3 -0
  22. package/dist/interfaces/ILoader.js.map +1 -0
  23. package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts +307 -0
  24. package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts.map +1 -0
  25. package/dist/interfaces/IPostProcessingEffectDefinitions.js +31 -0
  26. package/dist/interfaces/IPostProcessingEffectDefinitions.js.map +1 -0
  27. package/dist/interfaces/IRenderingEngine.d.ts +43 -0
  28. package/dist/interfaces/IRenderingEngine.d.ts.map +1 -0
  29. package/dist/interfaces/IRenderingEngine.js +3 -0
  30. package/dist/interfaces/IRenderingEngine.js.map +1 -0
  31. package/dist/loaders/EnvironmentMapLoader.d.ts +98 -0
  32. package/dist/loaders/EnvironmentMapLoader.d.ts.map +1 -0
  33. package/dist/loaders/EnvironmentMapLoader.js +348 -0
  34. package/dist/loaders/EnvironmentMapLoader.js.map +1 -0
  35. package/dist/loaders/GeometryLoader.d.ts +38 -0
  36. package/dist/loaders/GeometryLoader.d.ts.map +1 -0
  37. package/dist/loaders/GeometryLoader.js +505 -0
  38. package/dist/loaders/GeometryLoader.js.map +1 -0
  39. package/dist/loaders/HTMLElementAnchorLoader.d.ts +17 -0
  40. package/dist/loaders/HTMLElementAnchorLoader.d.ts.map +1 -0
  41. package/dist/loaders/HTMLElementAnchorLoader.js +84 -0
  42. package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -0
  43. package/dist/loaders/LightLoader.d.ts +19 -0
  44. package/dist/loaders/LightLoader.d.ts.map +1 -0
  45. package/dist/loaders/LightLoader.js +152 -0
  46. package/dist/loaders/LightLoader.js.map +1 -0
  47. package/dist/loaders/MaterialLoader.d.ts +99 -0
  48. package/dist/loaders/MaterialLoader.d.ts.map +1 -0
  49. package/dist/loaders/MaterialLoader.js +1175 -0
  50. package/dist/loaders/MaterialLoader.js.map +1 -0
  51. package/dist/managers/CameraManager.d.ts +20 -0
  52. package/dist/managers/CameraManager.d.ts.map +1 -0
  53. package/dist/managers/CameraManager.js +195 -0
  54. package/dist/managers/CameraManager.js.map +1 -0
  55. package/dist/managers/EnvironmentGeometryManager.d.ts +43 -0
  56. package/dist/managers/EnvironmentGeometryManager.d.ts.map +1 -0
  57. package/dist/managers/EnvironmentGeometryManager.js +210 -0
  58. package/dist/managers/EnvironmentGeometryManager.js.map +1 -0
  59. package/dist/managers/PostProcessingManager.d.ts +1014 -0
  60. package/dist/managers/PostProcessingManager.d.ts.map +1 -0
  61. package/dist/managers/PostProcessingManager.js +1013 -0
  62. package/dist/managers/PostProcessingManager.js.map +1 -0
  63. package/dist/managers/RenderingManager.d.ts +83 -0
  64. package/dist/managers/RenderingManager.d.ts.map +1 -0
  65. package/dist/managers/RenderingManager.js +567 -0
  66. package/dist/managers/RenderingManager.js.map +1 -0
  67. package/dist/managers/SceneTracingManager.d.ts +26 -0
  68. package/dist/managers/SceneTracingManager.d.ts.map +1 -0
  69. package/dist/managers/SceneTracingManager.js +122 -0
  70. package/dist/managers/SceneTracingManager.js.map +1 -0
  71. package/dist/managers/SceneTreeManager.d.ts +55 -0
  72. package/dist/managers/SceneTreeManager.d.ts.map +1 -0
  73. package/dist/managers/SceneTreeManager.js +501 -0
  74. package/dist/managers/SceneTreeManager.js.map +1 -0
  75. package/dist/managers/postprocessing/GodRaysManager.d.ts +13 -0
  76. package/dist/managers/postprocessing/GodRaysManager.d.ts.map +1 -0
  77. package/dist/managers/postprocessing/GodRaysManager.js +64 -0
  78. package/dist/managers/postprocessing/GodRaysManager.js.map +1 -0
  79. package/dist/managers/postprocessing/OutlineManager.d.ts +15 -0
  80. package/dist/managers/postprocessing/OutlineManager.d.ts.map +1 -0
  81. package/dist/managers/postprocessing/OutlineManager.js +67 -0
  82. package/dist/managers/postprocessing/OutlineManager.js.map +1 -0
  83. package/dist/managers/postprocessing/SSAARenderPass.d.ts +54 -0
  84. package/dist/managers/postprocessing/SSAARenderPass.d.ts.map +1 -0
  85. package/dist/managers/postprocessing/SSAARenderPass.js +234 -0
  86. package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -0
  87. package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +15 -0
  88. package/dist/managers/postprocessing/SelectiveBloomManager.d.ts.map +1 -0
  89. package/dist/managers/postprocessing/SelectiveBloomManager.js +67 -0
  90. package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -0
  91. package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +47 -0
  92. package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts.map +1 -0
  93. package/dist/managers/postprocessing/ao/ao/AOEffect.js +134 -0
  94. package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -0
  95. package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +13 -0
  96. package/dist/managers/postprocessing/ao/ao/AOPass.d.ts.map +1 -0
  97. package/dist/managers/postprocessing/ao/ao/AOPass.js +78 -0
  98. package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -0
  99. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +2 -0
  100. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts.map +1 -0
  101. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +23 -0
  102. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js.map +1 -0
  103. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +15 -0
  104. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts.map +1 -0
  105. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +25 -0
  106. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js.map +1 -0
  107. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +2 -0
  108. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts.map +1 -0
  109. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +102 -0
  110. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js.map +1 -0
  111. package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts +2 -0
  112. package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts.map +1 -0
  113. package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js +99 -0
  114. package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js.map +1 -0
  115. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +37 -0
  116. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts.map +1 -0
  117. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +171 -0
  118. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -0
  119. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +2 -0
  120. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts.map +1 -0
  121. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +131 -0
  122. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js.map +1 -0
  123. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +15 -0
  124. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts.map +1 -0
  125. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +76 -0
  126. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -0
  127. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +2 -0
  128. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts.map +1 -0
  129. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +134 -0
  130. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js.map +1 -0
  131. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +2 -0
  132. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts.map +1 -0
  133. package/dist/managers/postprocessing/ao/utils/shader/basic.js +12 -0
  134. package/dist/managers/postprocessing/ao/utils/shader/basic.js.map +1 -0
  135. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +2 -0
  136. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts.map +1 -0
  137. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +42 -0
  138. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js.map +1 -0
  139. package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +38 -0
  140. package/dist/managers/postprocessing/utils/CopyMaterial.d.ts.map +1 -0
  141. package/dist/managers/postprocessing/utils/CopyMaterial.js +106 -0
  142. package/dist/managers/postprocessing/utils/CopyMaterial.js.map +1 -0
  143. package/dist/managers/postprocessing/utils/CopyShader.d.ts +14 -0
  144. package/dist/managers/postprocessing/utils/CopyShader.d.ts.map +1 -0
  145. package/dist/managers/postprocessing/utils/CopyShader.js +36 -0
  146. package/dist/managers/postprocessing/utils/CopyShader.js.map +1 -0
  147. package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +10 -0
  148. package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts.map +1 -0
  149. package/dist/managers/postprocessing/utils/FullScreenQuad.js +29 -0
  150. package/dist/managers/postprocessing/utils/FullScreenQuad.js.map +1 -0
  151. package/dist/managers/postprocessing/utils/NormalPass.d.ts +88 -0
  152. package/dist/managers/postprocessing/utils/NormalPass.d.ts.map +1 -0
  153. package/dist/managers/postprocessing/utils/NormalPass.js +157 -0
  154. package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -0
  155. package/dist/managers/postprocessing/utils/RenderPass.d.ts +115 -0
  156. package/dist/managers/postprocessing/utils/RenderPass.d.ts.map +1 -0
  157. package/dist/managers/postprocessing/utils/RenderPass.js +251 -0
  158. package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -0
  159. package/dist/materials/GemMaterial.d.ts +38 -0
  160. package/dist/materials/GemMaterial.d.ts.map +1 -0
  161. package/dist/materials/GemMaterial.js +253 -0
  162. package/dist/materials/GemMaterial.js.map +1 -0
  163. package/dist/materials/MeshUnlitMaterialParameters.d.ts +4 -0
  164. package/dist/materials/MeshUnlitMaterialParameters.d.ts.map +1 -0
  165. package/dist/materials/MeshUnlitMaterialParameters.js +3 -0
  166. package/dist/materials/MeshUnlitMaterialParameters.js.map +1 -0
  167. package/dist/materials/MultiPointsMaterial.d.ts +94 -0
  168. package/dist/materials/MultiPointsMaterial.d.ts.map +1 -0
  169. package/dist/materials/MultiPointsMaterial.js +567 -0
  170. package/dist/materials/MultiPointsMaterial.js.map +1 -0
  171. package/dist/materials/SpecularGlossinessMaterial.d.ts +14 -0
  172. package/dist/materials/SpecularGlossinessMaterial.d.ts.map +1 -0
  173. package/dist/materials/SpecularGlossinessMaterial.js +162 -0
  174. package/dist/materials/SpecularGlossinessMaterial.js.map +1 -0
  175. package/dist/objects/SDBone.d.ts +13 -0
  176. package/dist/objects/SDBone.d.ts.map +1 -0
  177. package/dist/objects/SDBone.js +75 -0
  178. package/dist/objects/SDBone.js.map +1 -0
  179. package/dist/objects/SDColor.d.ts +17 -0
  180. package/dist/objects/SDColor.d.ts.map +1 -0
  181. package/dist/objects/SDColor.js +49 -0
  182. package/dist/objects/SDColor.js.map +1 -0
  183. package/dist/objects/SDData.d.ts +19 -0
  184. package/dist/objects/SDData.d.ts.map +1 -0
  185. package/dist/objects/SDData.js +48 -0
  186. package/dist/objects/SDData.js.map +1 -0
  187. package/dist/objects/SDObject.d.ts +14 -0
  188. package/dist/objects/SDObject.d.ts.map +1 -0
  189. package/dist/objects/SDObject.js +81 -0
  190. package/dist/objects/SDObject.js.map +1 -0
  191. package/dist/shaders/PCSS.d.ts +3 -0
  192. package/dist/shaders/PCSS.d.ts.map +1 -0
  193. package/dist/shaders/PCSS.js +127 -0
  194. package/dist/shaders/PCSS.js.map +1 -0
  195. package/dist/shaders/gem.d.ts +3 -0
  196. package/dist/shaders/gem.d.ts.map +1 -0
  197. package/dist/shaders/gem.js +578 -0
  198. package/dist/shaders/gem.js.map +1 -0
  199. package/dist/shaders/multi_points.d.ts +3 -0
  200. package/dist/shaders/multi_points.d.ts.map +1 -0
  201. package/dist/shaders/multi_points.js +294 -0
  202. package/dist/shaders/multi_points.js.map +1 -0
  203. package/dist/styling/viewport-css.d.ts +2 -0
  204. package/dist/styling/viewport-css.d.ts.map +1 -0
  205. package/dist/styling/viewport-css.js +117 -0
  206. package/dist/styling/viewport-css.js.map +1 -0
  207. package/dist/three/font.d.ts +2365 -0
  208. package/dist/three/font.d.ts.map +1 -0
  209. package/dist/three/font.js +6 -0
  210. package/dist/three/font.js.map +1 -0
  211. package/dist/three/geometries/TextGeometry.d.ts +22 -0
  212. package/dist/three/geometries/TextGeometry.d.ts.map +1 -0
  213. package/dist/three/geometries/TextGeometry.js +45 -0
  214. package/dist/three/geometries/TextGeometry.js.map +1 -0
  215. package/dist/three/loaders/FontLoader.d.ts +15 -0
  216. package/dist/three/loaders/FontLoader.d.ts.map +1 -0
  217. package/dist/three/loaders/FontLoader.js +118 -0
  218. package/dist/three/loaders/FontLoader.js.map +1 -0
  219. package/dist/three/loaders/RGBELoader.d.ts +24 -0
  220. package/dist/three/loaders/RGBELoader.d.ts.map +1 -0
  221. package/dist/three/loaders/RGBELoader.js +299 -0
  222. package/dist/three/loaders/RGBELoader.js.map +1 -0
  223. package/dist/types/IThreejsData.d.ts +7 -0
  224. package/dist/types/IThreejsData.d.ts.map +1 -0
  225. package/dist/types/IThreejsData.js +3 -0
  226. package/dist/types/IThreejsData.js.map +1 -0
  227. package/dist/types/ThreejsData.d.ts +11 -0
  228. package/dist/types/ThreejsData.d.ts.map +1 -0
  229. package/dist/types/ThreejsData.js +42 -0
  230. package/dist/types/ThreejsData.js.map +1 -0
  231. package/package.json +65 -0
  232. package/src/RenderingEngine.ts +1342 -0
  233. package/src/index.ts +23 -0
  234. package/src/injectors/Tag3dGeometryCreationInjector.ts +170 -0
  235. package/src/injectors/TextureUnifierInjector.ts +224 -0
  236. package/src/interfaces/ILoader.ts +3 -0
  237. package/src/interfaces/IPostProcessingEffectDefinitions.ts +402 -0
  238. package/src/interfaces/IRenderingEngine.ts +48 -0
  239. package/src/loaders/EnvironmentMapLoader.ts +355 -0
  240. package/src/loaders/GeometryLoader.ts +565 -0
  241. package/src/loaders/HTMLElementAnchorLoader.ts +107 -0
  242. package/src/loaders/LightLoader.ts +171 -0
  243. package/src/loaders/MaterialLoader.ts +1418 -0
  244. package/src/managers/CameraManager.ts +178 -0
  245. package/src/managers/EnvironmentGeometryManager.ts +224 -0
  246. package/src/managers/PostProcessingManager.ts +1169 -0
  247. package/src/managers/RenderingManager.ts +657 -0
  248. package/src/managers/SceneTracingManager.ts +120 -0
  249. package/src/managers/SceneTreeManager.ts +569 -0
  250. package/src/managers/postprocessing/GodRaysManager.ts +52 -0
  251. package/src/managers/postprocessing/OutlineManager.ts +58 -0
  252. package/src/managers/postprocessing/SSAARenderPass.ts +339 -0
  253. package/src/managers/postprocessing/SelectiveBloomManager.ts +58 -0
  254. package/src/managers/postprocessing/ao/ao/AOEffect.ts +180 -0
  255. package/src/managers/postprocessing/ao/ao/AOPass.ts +128 -0
  256. package/src/managers/postprocessing/ao/ao/shader/ao_compose.glsl +17 -0
  257. package/src/managers/postprocessing/ao/ao/shader/ao_compose.ts +19 -0
  258. package/src/managers/postprocessing/ao/hbao/HBAOEffect.ts +41 -0
  259. package/src/managers/postprocessing/ao/hbao/shader/hbao.glsl +96 -0
  260. package/src/managers/postprocessing/ao/hbao/shader/hbao.ts +98 -0
  261. package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.glsl +92 -0
  262. package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.ts +95 -0
  263. package/src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts +245 -0
  264. package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.glsl +125 -0
  265. package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts +127 -0
  266. package/src/managers/postprocessing/ao/ssao/SSAOEffect.ts +106 -0
  267. package/src/managers/postprocessing/ao/ssao/shader/ssao.glsl +128 -0
  268. package/src/managers/postprocessing/ao/ssao/shader/ssao.ts +130 -0
  269. package/src/managers/postprocessing/ao/utils/shader/basic.glsl +6 -0
  270. package/src/managers/postprocessing/ao/utils/shader/basic.ts +8 -0
  271. package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.glsl +36 -0
  272. package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.ts +38 -0
  273. package/src/managers/postprocessing/utils/CopyMaterial.ts +130 -0
  274. package/src/managers/postprocessing/utils/CopyShader.ts +39 -0
  275. package/src/managers/postprocessing/utils/FullScreenQuad.ts +47 -0
  276. package/src/managers/postprocessing/utils/NormalPass.ts +222 -0
  277. package/src/managers/postprocessing/utils/RenderPass.ts +366 -0
  278. package/src/materials/GemMaterial.ts +268 -0
  279. package/src/materials/MeshUnlitMaterialParameters.ts +4 -0
  280. package/src/materials/MultiPointsMaterial.ts +646 -0
  281. package/src/materials/SpecularGlossinessMaterial.ts +182 -0
  282. package/src/objects/SDBone.ts +51 -0
  283. package/src/objects/SDColor.ts +54 -0
  284. package/src/objects/SDData.ts +44 -0
  285. package/src/objects/SDObject.ts +58 -0
  286. package/src/shaders/PCSS.ts +124 -0
  287. package/src/shaders/gem.ts +575 -0
  288. package/src/shaders/gem_frag.glsl +517 -0
  289. package/src/shaders/gem_vert.glsl +53 -0
  290. package/src/shaders/multi_points.ts +291 -0
  291. package/src/shaders/multi_points_frag.glsl +166 -0
  292. package/src/shaders/multi_points_vert.glsl +120 -0
  293. package/src/styling/viewport-css.ts +113 -0
  294. package/src/styling/viewport.css +111 -0
  295. package/src/three/font.ts +2 -0
  296. package/src/three/geometries/TextGeometry.ts +58 -0
  297. package/src/three/loaders/FontLoader.ts +205 -0
  298. package/src/three/loaders/RGBELoader.ts +496 -0
  299. package/src/types/IThreejsData.ts +16 -0
  300. package/src/types/ThreejsData.ts +43 -0
  301. package/tsconfig.json +20 -0
@@ -0,0 +1,1175 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.adaptShaders = exports.MATERIAL_TYPE = exports.MaterialLoader = void 0;
27
+ const THREE = __importStar(require("three"));
28
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
29
+ const PCSS_1 = require("../shaders/PCSS");
30
+ const EnvironmentMapLoader_1 = require("./EnvironmentMapLoader");
31
+ const GemMaterial_1 = require("../materials/GemMaterial");
32
+ const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
33
+ const gl_matrix_1 = require("gl-matrix");
34
+ const MultiPointsMaterial_1 = require("../materials/MultiPointsMaterial");
35
+ const SDColor_1 = require("../objects/SDColor");
36
+ const SpecularGlossinessMaterial_1 = require("../materials/SpecularGlossinessMaterial");
37
+ // #endregion Type aliases (6)
38
+ // #region Classes (1)
39
+ class MaterialLoader {
40
+ // #endregion Properties (16)
41
+ // #region Constructors (1)
42
+ constructor(_renderingEngine) {
43
+ this._renderingEngine = _renderingEngine;
44
+ // #region Properties (16)
45
+ this._converter = viewer_shared_services_1.Converter.instance;
46
+ this._blending = 0.0;
47
+ this._defaultLineMaterialData = new viewer_shared_types_1.MaterialBasicLineData({ color: '#199b9b' });
48
+ this._defaultMaterialData = new viewer_shared_types_1.MaterialStandardData({ color: '#199b9b', side: viewer_shared_types_1.MATERIAL_SIDE.DOUBLE, metalness: 0.0 });
49
+ this._defaultPointMaterialData = new viewer_shared_types_1.MaterialPointData({ color: '#199b9b' });
50
+ this._envMap = null;
51
+ this._envMapIntensity = 1;
52
+ this._envMapType = EnvironmentMapLoader_1.ENVIRONMENT_MAP_TYPE.NULL;
53
+ this._environmentMapRotationEuler = new THREE.Euler();
54
+ this._height = 1020;
55
+ this._lightSizeUV = 0.025;
56
+ this._materialCache = {};
57
+ this._maxMapCount = 0;
58
+ this._pointSize = 1.0;
59
+ this._textureEncoding = THREE.SRGBColorSpace;
60
+ this._threeJsTextureCache = {};
61
+ }
62
+ // #endregion Constructors (1)
63
+ // #region Public Getters And Setters (12)
64
+ get defaultLineMaterialData() {
65
+ return this._defaultLineMaterialData;
66
+ }
67
+ set defaultLineMaterialData(value) {
68
+ this._defaultLineMaterialData = value;
69
+ this.assignDefaultLineMaterial();
70
+ }
71
+ get defaultMaterialData() {
72
+ return this._defaultMaterialData;
73
+ }
74
+ set defaultMaterialData(value) {
75
+ this._defaultMaterialData = value;
76
+ this.assignDefaultMaterial();
77
+ }
78
+ get defaultPointMaterialData() {
79
+ return this._defaultPointMaterialData;
80
+ }
81
+ set defaultPointMaterialData(value) {
82
+ this._defaultPointMaterialData = value;
83
+ this.assignDefaultPointMaterial();
84
+ }
85
+ get maxMapCount() {
86
+ return this._maxMapCount;
87
+ }
88
+ set maxMapCount(value) {
89
+ this._maxMapCount = value;
90
+ }
91
+ get textureEncoding() {
92
+ return this._textureEncoding;
93
+ }
94
+ set textureEncoding(value) {
95
+ this._textureEncoding = value;
96
+ this.assignTextureEncoding();
97
+ }
98
+ get threeJsTextureCache() {
99
+ return this._threeJsTextureCache;
100
+ }
101
+ set threeJsTextureCache(value) {
102
+ this._threeJsTextureCache = value;
103
+ }
104
+ // #endregion Public Getters And Setters (12)
105
+ // #region Public Methods (18)
106
+ assignColorCorrection(value) {
107
+ const convertColor = (c, toggle) => {
108
+ if (!c)
109
+ return;
110
+ if (c instanceof SDColor_1.SDColor) {
111
+ c.colorCorrection(toggle);
112
+ return c;
113
+ }
114
+ else {
115
+ const sdColor = this._renderingEngine.colorCache.find(color => color.equals(c));
116
+ if (sdColor) {
117
+ sdColor.colorCorrection(toggle);
118
+ return sdColor;
119
+ }
120
+ else {
121
+ // we check in this case if the converted color has been stored already
122
+ const clone = c.clone();
123
+ toggle === true ? clone.convertSRGBToLinear() : clone.convertLinearToSRGB();
124
+ const sdColorClone = this._renderingEngine.colorCache.find(color => color.equals(clone));
125
+ if (sdColorClone) {
126
+ sdColorClone.colorCorrection(toggle);
127
+ return sdColorClone;
128
+ }
129
+ else {
130
+ // some colors may not have been set by us, but have been set automatically
131
+ // in this case we expect the color to be linear either way and therefore omit a color correction
132
+ return c;
133
+ }
134
+ }
135
+ }
136
+ };
137
+ for (const cacheKey in this._materialCache) {
138
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
+ const material = this._materialCache[cacheKey].material;
140
+ if (material.color)
141
+ material.color = convertColor(material.color, value);
142
+ if (material.specular)
143
+ material.specular = convertColor(material.specular, value);
144
+ if (material.emissive)
145
+ material.emissive = convertColor(material.emissive, value);
146
+ if (material.colorTransferBegin)
147
+ material.colorTransferBegin = convertColor(material.colorTransferBegin, value);
148
+ if (material.colorTransferEnd)
149
+ material.colorTransferEnd = convertColor(material.colorTransferEnd, value);
150
+ if (material.attenuationColor)
151
+ material.attenuationColor = convertColor(material.attenuationColor, value);
152
+ if (material.sheencolor)
153
+ material.sheencolor = convertColor(material.sheencolor, value);
154
+ if (material.specularColor)
155
+ material.specularColor = convertColor(material.specularColor, value);
156
+ material.needsUpdate = true;
157
+ }
158
+ }
159
+ assignDefaultLineMaterial() {
160
+ for (const cacheKey in this._materialCache) {
161
+ if (this._materialCache[cacheKey].material instanceof THREE.LineBasicMaterial && this._materialCache[cacheKey].materialData === undefined) {
162
+ const material = this._materialCache[cacheKey].material;
163
+ if (this._materialCache[cacheKey].materialData && this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialBasicLineData)
164
+ continue;
165
+ const { properties, mapCount } = this.getMaterialProperties(this._defaultLineMaterialData, MATERIAL_TYPE.LINE, undefined);
166
+ this.maxMapCount = Math.max(this.maxMapCount, mapCount);
167
+ material.copy(new THREE.LineBasicMaterial(properties));
168
+ material.needsUpdate = true;
169
+ }
170
+ }
171
+ }
172
+ assignDefaultMaterial() {
173
+ for (const cacheKey in this._materialCache) {
174
+ if (this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial && this._materialCache[cacheKey].materialData === undefined) {
175
+ const material = this._materialCache[cacheKey].material;
176
+ if (this._materialCache[cacheKey].materialData && this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialStandardData)
177
+ continue;
178
+ const { properties, mapCount } = this.getMaterialProperties(this._defaultMaterialData, MATERIAL_TYPE.MESH, this._materialCache[cacheKey].materialSettings);
179
+ this.maxMapCount = Math.max(this.maxMapCount, mapCount);
180
+ material.copy(new THREE.MeshPhysicalMaterial(properties));
181
+ material.needsUpdate = true;
182
+ }
183
+ }
184
+ }
185
+ assignDefaultPointMaterial() {
186
+ for (const cacheKey in this._materialCache) {
187
+ if (this._materialCache[cacheKey].material instanceof THREE.PointsMaterial && this._materialCache[cacheKey].materialData === undefined) {
188
+ const material = this._materialCache[cacheKey].material;
189
+ if (this._materialCache[cacheKey].materialData && this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialPointData)
190
+ continue;
191
+ const { properties, mapCount } = this.getMaterialProperties(this._defaultPointMaterialData, MATERIAL_TYPE.POINT, undefined);
192
+ this.maxMapCount = Math.max(this.maxMapCount, mapCount);
193
+ material.copy(new THREE.PointsMaterial(properties));
194
+ material.needsUpdate = true;
195
+ }
196
+ }
197
+ }
198
+ assignEnvironmentMap(e, type) {
199
+ this._envMap = e;
200
+ this._envMapType = type;
201
+ for (const cacheKey in this._materialCache) {
202
+ if ((this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshStandardMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshBasicMaterial)) {
203
+ const material = this._materialCache[cacheKey].material;
204
+ if (this._materialCache[cacheKey].materialData &&
205
+ (this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialStandardData ||
206
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialGemData ||
207
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData ||
208
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData) &&
209
+ this._materialCache[cacheKey].materialData.envMap !== undefined)
210
+ continue;
211
+ if (this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData && this._renderingEngine.environmentMapForUnlitMaterials === false)
212
+ return;
213
+ material.envMap = e;
214
+ material.needsUpdate = true;
215
+ for (const d in material.defines) {
216
+ if (d.startsWith('ENVMAP_TYPE_'))
217
+ delete material.defines[d];
218
+ }
219
+ if (material.defines)
220
+ material.defines['ENVMAP_TYPE_' + this._envMapType.toUpperCase()] = '';
221
+ this.assignEnvironmentMapRotation(this._renderingEngine.environmentMapRotation);
222
+ }
223
+ }
224
+ }
225
+ assignEnvironmentMapForUnlitMaterials(toggle) {
226
+ for (const cacheKey in this._materialCache) {
227
+ if (this._materialCache[cacheKey].material instanceof THREE.MeshBasicMaterial) {
228
+ const material = this._materialCache[cacheKey].material;
229
+ if (this._materialCache[cacheKey].materialData &&
230
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData &&
231
+ this._materialCache[cacheKey].materialData.envMap !== undefined)
232
+ continue;
233
+ if (toggle) {
234
+ material.envMap = this._envMap;
235
+ material.needsUpdate = true;
236
+ for (const d in material.defines) {
237
+ if (d.startsWith('ENVMAP_TYPE_'))
238
+ delete material.defines[d];
239
+ }
240
+ if (material.defines)
241
+ material.defines['ENVMAP_TYPE_' + this._envMapType.toUpperCase()] = '';
242
+ }
243
+ else {
244
+ material.envMap = null;
245
+ material.needsUpdate = true;
246
+ }
247
+ }
248
+ }
249
+ }
250
+ assignEnvironmentMapIntensity(value) {
251
+ this._envMapIntensity = value;
252
+ for (const cacheKey in this._materialCache) {
253
+ if ((this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshStandardMaterial)) {
254
+ const material = this._materialCache[cacheKey].material;
255
+ if (this._materialCache[cacheKey].materialData &&
256
+ (this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialStandardData ||
257
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialGemData ||
258
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData ||
259
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData) &&
260
+ this._materialCache[cacheKey].materialData.envMap !== undefined)
261
+ continue;
262
+ material.envMapIntensity = value;
263
+ material.needsUpdate = true;
264
+ }
265
+ }
266
+ }
267
+ assignEnvironmentMapRotation(value) {
268
+ // we switch the y and z axis to match the three.js coordinate system
269
+ const rotationMatrix = new THREE.Matrix4().fromArray(gl_matrix_1.mat4.fromQuat(gl_matrix_1.mat4.create(), gl_matrix_1.quat.fromValues(value[0], value[2], -value[1], value[3]))).transpose();
270
+ this._environmentMapRotationEuler = new THREE.Euler().setFromRotationMatrix(rotationMatrix);
271
+ this._renderingEngine.scene.backgroundRotation = this._environmentMapRotationEuler;
272
+ for (const cacheKey in this._materialCache) {
273
+ if ((this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshStandardMaterial)) {
274
+ const material = this._materialCache[cacheKey].material;
275
+ if (this._materialCache[cacheKey].materialData &&
276
+ (this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialStandardData ||
277
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialGemData ||
278
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData ||
279
+ this._materialCache[cacheKey].materialData instanceof viewer_shared_types_1.MaterialUnlitData) &&
280
+ this._materialCache[cacheKey].materialData.envMap !== undefined)
281
+ continue;
282
+ material.envMapRotation = this._environmentMapRotationEuler;
283
+ material.needsUpdate = true;
284
+ }
285
+ }
286
+ }
287
+ assignPointSize(p) {
288
+ const height = this._renderingEngine.renderer ? this._renderingEngine.renderer.getSize(new THREE.Vector2()).y : 1080;
289
+ if (height === this._height && p * (this._height / 1080) === this._pointSize)
290
+ return;
291
+ this._height = height;
292
+ this._pointSize = p * (this._height / 1080);
293
+ for (const cacheKey in this._materialCache) {
294
+ if (this._materialCache[cacheKey].material instanceof MultiPointsMaterial_1.MultiPointsMaterial) {
295
+ const material = this._materialCache[cacheKey].material;
296
+ if (this._materialCache[cacheKey].material.userData.customPointSize_0Enabled && this._materialCache[cacheKey].material.userData.customPointSize_0Enabled === true) {
297
+ material.size_0 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_0;
298
+ material.needsUpdate = true;
299
+ }
300
+ else {
301
+ material.size_0 = this._pointSize;
302
+ material.needsUpdate = true;
303
+ }
304
+ if (this._materialCache[cacheKey].material.userData.customPointSize_1Enabled && this._materialCache[cacheKey].material.userData.customPointSize_1Enabled === true) {
305
+ material.size_1 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_1;
306
+ material.needsUpdate = true;
307
+ }
308
+ else {
309
+ material.size_1 = this._pointSize;
310
+ material.needsUpdate = true;
311
+ }
312
+ if (this._materialCache[cacheKey].material.userData.customPointSize_2Enabled && this._materialCache[cacheKey].material.userData.customPointSize_2Enabled === true) {
313
+ material.size_2 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_2;
314
+ material.needsUpdate = true;
315
+ }
316
+ else {
317
+ material.size_2 = this._pointSize;
318
+ material.needsUpdate = true;
319
+ }
320
+ if (this._materialCache[cacheKey].material.userData.customPointSize_3Enabled && this._materialCache[cacheKey].material.userData.customPointSize_3Enabled === true) {
321
+ material.size_3 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_3;
322
+ material.needsUpdate = true;
323
+ }
324
+ else {
325
+ material.size_3 = this._pointSize;
326
+ material.needsUpdate = true;
327
+ }
328
+ if (this._materialCache[cacheKey].material.userData.customPointSize_4Enabled && this._materialCache[cacheKey].material.userData.customPointSize_4Enabled === true) {
329
+ material.size_4 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_4;
330
+ material.needsUpdate = true;
331
+ }
332
+ else {
333
+ material.size_4 = this._pointSize;
334
+ material.needsUpdate = true;
335
+ }
336
+ if (this._materialCache[cacheKey].material.userData.customPointSize_5Enabled && this._materialCache[cacheKey].material.userData.customPointSize_5Enabled === true) {
337
+ material.size_5 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_5;
338
+ material.needsUpdate = true;
339
+ }
340
+ else {
341
+ material.size_5 = this._pointSize;
342
+ material.needsUpdate = true;
343
+ }
344
+ if (this._materialCache[cacheKey].material.userData.customPointSize_6Enabled && this._materialCache[cacheKey].material.userData.customPointSize_6Enabled === true) {
345
+ material.size_6 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_6;
346
+ material.needsUpdate = true;
347
+ }
348
+ else {
349
+ material.size_6 = this._pointSize;
350
+ material.needsUpdate = true;
351
+ }
352
+ if (this._materialCache[cacheKey].material.userData.customPointSize_7Enabled && this._materialCache[cacheKey].material.userData.customPointSize_7Enabled === true) {
353
+ material.size_7 = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize_7;
354
+ material.needsUpdate = true;
355
+ }
356
+ else {
357
+ material.size_7 = this._pointSize;
358
+ material.needsUpdate = true;
359
+ }
360
+ }
361
+ else if (this._materialCache[cacheKey].material instanceof THREE.PointsMaterial) {
362
+ const material = this._materialCache[cacheKey].material;
363
+ if (this._materialCache[cacheKey].material.userData.customPointSizeEnabled && this._materialCache[cacheKey].material.userData.customPointSizeEnabled === true) {
364
+ material.size = this._pointSize * this._materialCache[cacheKey].material.userData.customPointSize;
365
+ material.needsUpdate = true;
366
+ }
367
+ else {
368
+ material.size = this._pointSize;
369
+ material.needsUpdate = true;
370
+ }
371
+ }
372
+ }
373
+ }
374
+ cacheSize() {
375
+ return Object.entries(this._materialCache).length;
376
+ }
377
+ createMaterial(type, incomingData, materialData, materialSettings) {
378
+ const { properties, mapCount } = this.getMaterialProperties(materialData, type, materialSettings);
379
+ this.maxMapCount = Math.max(this.maxMapCount, mapCount);
380
+ let material;
381
+ if (type === MATERIAL_TYPE.POINT) {
382
+ if (materialData instanceof viewer_shared_types_1.MaterialMultiPointData) {
383
+ material = new MultiPointsMaterial_1.MultiPointsMaterial(properties);
384
+ }
385
+ else {
386
+ material = new THREE.PointsMaterial(properties);
387
+ }
388
+ }
389
+ else if (type === MATERIAL_TYPE.LINE) {
390
+ material = new THREE.LineBasicMaterial(properties);
391
+ }
392
+ else {
393
+ if (materialData instanceof viewer_shared_types_1.MaterialUnlitData) {
394
+ material = new THREE.MeshBasicMaterial(properties);
395
+ }
396
+ else {
397
+ if (materialData instanceof viewer_shared_types_1.MaterialShadowData) {
398
+ material = new THREE.ShadowMaterial({ opacity: properties.opacity, color: properties.color });
399
+ }
400
+ else if (materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData) {
401
+ material = new SpecularGlossinessMaterial_1.SpecularGlossinessMaterial(properties);
402
+ }
403
+ else if (materialData instanceof viewer_shared_types_1.MaterialGemData) {
404
+ material = new GemMaterial_1.GemMaterial(properties);
405
+ }
406
+ else {
407
+ material = new THREE.MeshPhysicalMaterial(properties);
408
+ }
409
+ const before = material.onBeforeCompile;
410
+ material.onBeforeCompile = (shader, renderer) => {
411
+ before(shader, renderer);
412
+ shader.uniforms.lightSizeUV = { value: this._lightSizeUV };
413
+ shader.uniforms.blending = { value: this._blending };
414
+ material.userData.shader = shader;
415
+ };
416
+ if (material instanceof SpecularGlossinessMaterial_1.SpecularGlossinessMaterial || material instanceof THREE.MeshPhysicalMaterial) {
417
+ material.defines['ENVMAP_TYPE_' + this._envMapType.toUpperCase()] = '';
418
+ if (materialSettings && materialSettings.useVertexTangents)
419
+ material.normalScale.y *= -1;
420
+ if (materialSettings && materialSettings.useVertexTangents && material instanceof THREE.MeshPhysicalMaterial)
421
+ material.clearcoatNormalScale.y *= -1;
422
+ if (materialSettings && materialSettings.useFlatShading)
423
+ material.flatShading = true;
424
+ }
425
+ }
426
+ }
427
+ if (materialSettings && materialSettings.useVertexColors)
428
+ material.vertexColors = true;
429
+ if (materialData instanceof viewer_shared_types_1.MaterialStandardData || materialData instanceof viewer_shared_types_1.MaterialGemData || materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData || materialData instanceof viewer_shared_types_1.MaterialUnlitData) {
430
+ if (materialData.envMap !== undefined) {
431
+ const envMapInput = materialData.envMap;
432
+ if (envMapInput !== undefined) {
433
+ const envMapResult = this._renderingEngine.environmentMapLoader.loadEnvMap(envMapInput);
434
+ envMapResult.map.then(envMap => {
435
+ if (material instanceof THREE.MeshBasicMaterial && this._renderingEngine.environmentMapForUnlitMaterials === false)
436
+ return;
437
+ material.envMap = envMap;
438
+ const envMapType = material.envMap instanceof THREE.CubeTexture ? EnvironmentMapLoader_1.ENVIRONMENT_MAP_TYPE.LDR : EnvironmentMapLoader_1.ENVIRONMENT_MAP_TYPE.HDR;
439
+ for (const d in material.defines) {
440
+ if (d.startsWith('ENVMAP_TYPE_'))
441
+ delete material.defines[d];
442
+ }
443
+ if (material.defines)
444
+ material.defines['ENVMAP_TYPE_' + envMapType.toUpperCase()] = '';
445
+ material.needsUpdate = true;
446
+ });
447
+ }
448
+ }
449
+ }
450
+ if (materialData)
451
+ materialData.convertedObject[this._renderingEngine.id] = material;
452
+ material.needsUpdate = true;
453
+ if (material.userData) {
454
+ material.userData.SDid = incomingData.id;
455
+ material.userData.SDversion = incomingData.version;
456
+ }
457
+ else {
458
+ material.userData = {
459
+ SDid: incomingData.id,
460
+ SDversion: incomingData.version
461
+ };
462
+ }
463
+ return material;
464
+ }
465
+ emptyMaterialCache() {
466
+ this._materialCache = {};
467
+ }
468
+ getMaterialProperties(materialData, type, materialSettings) {
469
+ const generalProperties = {};
470
+ let mapCount = 0;
471
+ // if no MaterialStandardData is provided, we return our default
472
+ if (!materialData) {
473
+ if (type === MATERIAL_TYPE.POINT) {
474
+ return this.getMaterialProperties(this._defaultPointMaterialData, type, materialSettings);
475
+ }
476
+ else if (type === MATERIAL_TYPE.LINE) {
477
+ return this.getMaterialProperties(this._defaultLineMaterialData, type, materialSettings);
478
+ }
479
+ else {
480
+ if (materialSettings !== undefined && materialSettings.useVertexColors) {
481
+ const currentDefaultMaterialColor = this._defaultMaterialData.color;
482
+ this._defaultMaterialData.color = '#d3d3d3';
483
+ const properties = this.getMaterialProperties(this._defaultMaterialData, type, materialSettings);
484
+ this._defaultMaterialData.color = currentDefaultMaterialColor;
485
+ return properties;
486
+ }
487
+ else {
488
+ return this.getMaterialProperties(this._defaultMaterialData, type, materialSettings);
489
+ }
490
+ }
491
+ }
492
+ /**
493
+ * We know evaluate properties that can be applied to all materials
494
+ */
495
+ generalProperties.alphaTest = materialData.alphaCutoff;
496
+ if (materialData.opacity !== undefined) {
497
+ generalProperties.opacity = materialData.opacity;
498
+ generalProperties.transparent = generalProperties.opacity < 1;
499
+ }
500
+ if (materialData.alphaMode === viewer_shared_types_1.MATERIAL_ALPHA.BLEND) {
501
+ generalProperties.transparent = true;
502
+ generalProperties.depthWrite = false;
503
+ }
504
+ else if (!generalProperties.transparent) {
505
+ generalProperties.transparent = false;
506
+ }
507
+ if (materialData.depthTest !== undefined) {
508
+ generalProperties.depthTest = materialData.depthTest;
509
+ }
510
+ if (materialData.depthWrite !== undefined) {
511
+ generalProperties.depthWrite = materialData.depthWrite;
512
+ }
513
+ if (materialData.transparent !== undefined) {
514
+ generalProperties.transparent = materialData.transparent;
515
+ }
516
+ if (materialData.color !== undefined)
517
+ generalProperties.color = this._renderingEngine.createThreeJsColor(materialData.color);
518
+ if (materialData.color === undefined && materialData.map !== undefined && materialData.map.color !== undefined)
519
+ generalProperties.color = this._renderingEngine.createThreeJsColor(materialData.map.color);
520
+ if (materialData.color === undefined && materialData.map !== undefined && materialData.map.color === undefined && !(materialSettings !== undefined && materialSettings.useVertexColors))
521
+ generalProperties.color = this._renderingEngine.createThreeJsColor(this._renderingEngine.defaultMaterialColor);
522
+ if ((materialSettings !== undefined && materialSettings.useVertexColors) && (materialData.color === this._converter.toHexColor(this._renderingEngine.defaultMaterialColor) || materialData.color + 'ff' === this._converter.toHexColor(this._renderingEngine.defaultMaterialColor) || materialData.color === this._renderingEngine.defaultMaterialColor || materialData.color === this._renderingEngine.defaultMaterialColor + 'ff' || materialData.color === undefined))
523
+ generalProperties.color = this._renderingEngine.createThreeJsColor('#d3d3d3');
524
+ if (materialData.side !== undefined)
525
+ generalProperties.side = materialData.side === viewer_shared_types_1.MATERIAL_SIDE.BACK ? THREE.BackSide : materialData.side === viewer_shared_types_1.MATERIAL_SIDE.FRONT ? THREE.FrontSide : THREE.DoubleSide;
526
+ /**
527
+ *
528
+ * First exit, lines ans points
529
+ *
530
+ */
531
+ if (type === MATERIAL_TYPE.POINT) {
532
+ if (materialData instanceof viewer_shared_types_1.MaterialPointData) {
533
+ const pointMaterialProperties = generalProperties;
534
+ pointMaterialProperties.size = materialData.size !== undefined ? materialData.size : this._pointSize;
535
+ pointMaterialProperties.userData = {
536
+ customPointSizeEnabled: materialData.size !== undefined,
537
+ customPointSize: materialData.size
538
+ };
539
+ pointMaterialProperties.sizeAttenuation = materialData.sizeAttenuation !== undefined ? materialData.sizeAttenuation : true;
540
+ if (materialData.map !== undefined) {
541
+ pointMaterialProperties.map = this.createTexture(materialData.map);
542
+ mapCount++;
543
+ }
544
+ if (materialData.alphaMap !== undefined) {
545
+ pointMaterialProperties.alphaMap = this.createTexture(materialData.alphaMap);
546
+ pointMaterialProperties.transparent = true;
547
+ pointMaterialProperties.depthWrite = false;
548
+ mapCount++;
549
+ }
550
+ }
551
+ else if (materialData instanceof viewer_shared_types_1.MaterialMultiPointData) {
552
+ const multiPointMaterialProperties = generalProperties;
553
+ if (materialData.materialIndexDataMap) {
554
+ multiPointMaterialProperties.materialIndexDataTexture = this.createTexture(materialData.materialIndexDataMap);
555
+ }
556
+ else {
557
+ multiPointMaterialProperties.materialIndexDataTexture =
558
+ new THREE.DataTexture(new Uint8Array(multiPointMaterialProperties.materialIndexDataTextureSize || 1024), multiPointMaterialProperties.materialIndexDataTextureSize || 1024, 1, THREE.RedIntegerFormat, THREE.UnsignedIntType);
559
+ multiPointMaterialProperties.materialIndexDataTexture.internalFormat = 'R32UI';
560
+ }
561
+ multiPointMaterialProperties.size_0 = materialData.size_0 !== undefined ? materialData.size_0 : this._pointSize;
562
+ multiPointMaterialProperties.size_1 = materialData.size_1 !== undefined ? materialData.size_1 : this._pointSize;
563
+ multiPointMaterialProperties.size_2 = materialData.size_2 !== undefined ? materialData.size_2 : this._pointSize;
564
+ multiPointMaterialProperties.size_3 = materialData.size_3 !== undefined ? materialData.size_3 : this._pointSize;
565
+ multiPointMaterialProperties.size_4 = materialData.size_4 !== undefined ? materialData.size_4 : this._pointSize;
566
+ multiPointMaterialProperties.size_5 = materialData.size_5 !== undefined ? materialData.size_5 : this._pointSize;
567
+ multiPointMaterialProperties.size_6 = materialData.size_6 !== undefined ? materialData.size_6 : this._pointSize;
568
+ multiPointMaterialProperties.size_7 = materialData.size_7 !== undefined ? materialData.size_7 : this._pointSize;
569
+ multiPointMaterialProperties.userData = {
570
+ customPointSize_0Enabled: materialData.size_0 !== undefined,
571
+ customPointSize_1Enabled: materialData.size_1 !== undefined,
572
+ customPointSize_2Enabled: materialData.size_2 !== undefined,
573
+ customPointSize_3Enabled: materialData.size_3 !== undefined,
574
+ customPointSize_4Enabled: materialData.size_4 !== undefined,
575
+ customPointSize_5Enabled: materialData.size_5 !== undefined,
576
+ customPointSize_6Enabled: materialData.size_6 !== undefined,
577
+ customPointSize_7Enabled: materialData.size_7 !== undefined,
578
+ customPointSize_0: materialData.size_0,
579
+ customPointSize_1: materialData.size_1,
580
+ customPointSize_2: materialData.size_2,
581
+ customPointSize_3: materialData.size_3,
582
+ customPointSize_4: materialData.size_4,
583
+ customPointSize_5: materialData.size_5,
584
+ customPointSize_6: materialData.size_6,
585
+ customPointSize_7: materialData.size_7
586
+ };
587
+ multiPointMaterialProperties.sizeAttenuation_0 = materialData.sizeAttenuation_0 !== undefined ? materialData.sizeAttenuation_0 : false;
588
+ multiPointMaterialProperties.sizeAttenuation_1 = materialData.sizeAttenuation_1 !== undefined ? materialData.sizeAttenuation_1 : false;
589
+ multiPointMaterialProperties.sizeAttenuation_2 = materialData.sizeAttenuation_2 !== undefined ? materialData.sizeAttenuation_2 : false;
590
+ multiPointMaterialProperties.sizeAttenuation_3 = materialData.sizeAttenuation_3 !== undefined ? materialData.sizeAttenuation_3 : false;
591
+ multiPointMaterialProperties.sizeAttenuation_4 = materialData.sizeAttenuation_4 !== undefined ? materialData.sizeAttenuation_4 : false;
592
+ multiPointMaterialProperties.sizeAttenuation_5 = materialData.sizeAttenuation_5 !== undefined ? materialData.sizeAttenuation_5 : false;
593
+ multiPointMaterialProperties.sizeAttenuation_6 = materialData.sizeAttenuation_6 !== undefined ? materialData.sizeAttenuation_6 : false;
594
+ multiPointMaterialProperties.sizeAttenuation_7 = materialData.sizeAttenuation_7 !== undefined ? materialData.sizeAttenuation_7 : false;
595
+ if (materialData.map_0 !== undefined) {
596
+ multiPointMaterialProperties.map_0 = this.createTexture(materialData.map_0);
597
+ multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
598
+ mapCount++;
599
+ }
600
+ if (materialData.map_1 !== undefined) {
601
+ multiPointMaterialProperties.map_1 = this.createTexture(materialData.map_1);
602
+ multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
603
+ mapCount++;
604
+ }
605
+ if (materialData.map_2 !== undefined) {
606
+ multiPointMaterialProperties.map_2 = this.createTexture(materialData.map_2);
607
+ multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
608
+ mapCount++;
609
+ }
610
+ if (materialData.map_3 !== undefined) {
611
+ multiPointMaterialProperties.map_3 = this.createTexture(materialData.map_3);
612
+ multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
613
+ mapCount++;
614
+ }
615
+ if (materialData.map_4 !== undefined) {
616
+ multiPointMaterialProperties.map_4 = this.createTexture(materialData.map_4);
617
+ multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
618
+ mapCount++;
619
+ }
620
+ if (materialData.map_5 !== undefined) {
621
+ multiPointMaterialProperties.map_5 = this.createTexture(materialData.map_5);
622
+ multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
623
+ mapCount++;
624
+ }
625
+ if (materialData.map_6 !== undefined) {
626
+ multiPointMaterialProperties.map_6 = this.createTexture(materialData.map_6);
627
+ multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
628
+ mapCount++;
629
+ }
630
+ if (materialData.map_7 !== undefined) {
631
+ multiPointMaterialProperties.map_7 = this.createTexture(materialData.map_7);
632
+ multiPointMaterialProperties.map = multiPointMaterialProperties.map_0;
633
+ mapCount++;
634
+ }
635
+ if (materialData.alphaMap_0 !== undefined) {
636
+ multiPointMaterialProperties.alphaMap_0 = this.createTexture(materialData.alphaMap_0);
637
+ multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
638
+ multiPointMaterialProperties.transparent = true;
639
+ multiPointMaterialProperties.depthWrite = false;
640
+ mapCount++;
641
+ }
642
+ if (materialData.alphaMap_1 !== undefined) {
643
+ multiPointMaterialProperties.alphaMap_1 = this.createTexture(materialData.alphaMap_1);
644
+ multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
645
+ multiPointMaterialProperties.transparent = true;
646
+ multiPointMaterialProperties.depthWrite = false;
647
+ mapCount++;
648
+ }
649
+ if (materialData.alphaMap_2 !== undefined) {
650
+ multiPointMaterialProperties.alphaMap_2 = this.createTexture(materialData.alphaMap_2);
651
+ multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
652
+ multiPointMaterialProperties.transparent = true;
653
+ multiPointMaterialProperties.depthWrite = false;
654
+ mapCount++;
655
+ }
656
+ if (materialData.alphaMap_3 !== undefined) {
657
+ multiPointMaterialProperties.alphaMap_3 = this.createTexture(materialData.alphaMap_3);
658
+ multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
659
+ multiPointMaterialProperties.transparent = true;
660
+ multiPointMaterialProperties.depthWrite = false;
661
+ mapCount++;
662
+ }
663
+ if (materialData.alphaMap_4 !== undefined) {
664
+ multiPointMaterialProperties.alphaMap_4 = this.createTexture(materialData.alphaMap_4);
665
+ multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
666
+ multiPointMaterialProperties.transparent = true;
667
+ multiPointMaterialProperties.depthWrite = false;
668
+ mapCount++;
669
+ }
670
+ if (materialData.alphaMap_5 !== undefined) {
671
+ multiPointMaterialProperties.alphaMap_5 = this.createTexture(materialData.alphaMap_5);
672
+ multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
673
+ multiPointMaterialProperties.transparent = true;
674
+ multiPointMaterialProperties.depthWrite = false;
675
+ mapCount++;
676
+ }
677
+ if (materialData.alphaMap_6 !== undefined) {
678
+ multiPointMaterialProperties.alphaMap_6 = this.createTexture(materialData.alphaMap_6);
679
+ multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
680
+ multiPointMaterialProperties.transparent = true;
681
+ multiPointMaterialProperties.depthWrite = false;
682
+ mapCount++;
683
+ }
684
+ if (materialData.alphaMap_7 !== undefined) {
685
+ multiPointMaterialProperties.alphaMap_7 = this.createTexture(materialData.alphaMap_7);
686
+ multiPointMaterialProperties.alphaMap = multiPointMaterialProperties.alphaMap_0;
687
+ multiPointMaterialProperties.transparent = true;
688
+ multiPointMaterialProperties.depthWrite = false;
689
+ mapCount++;
690
+ }
691
+ if (materialData.color_0 !== undefined) {
692
+ multiPointMaterialProperties.color_0 = this._renderingEngine.createThreeJsColor(materialData.color_0);
693
+ }
694
+ if (materialData.color_1 !== undefined) {
695
+ multiPointMaterialProperties.color_1 = this._renderingEngine.createThreeJsColor(materialData.color_1);
696
+ }
697
+ if (materialData.color_2 !== undefined) {
698
+ multiPointMaterialProperties.color_2 = this._renderingEngine.createThreeJsColor(materialData.color_2);
699
+ }
700
+ if (materialData.color_3 !== undefined) {
701
+ multiPointMaterialProperties.color_3 = this._renderingEngine.createThreeJsColor(materialData.color_3);
702
+ }
703
+ if (materialData.color_4 !== undefined) {
704
+ multiPointMaterialProperties.color_4 = this._renderingEngine.createThreeJsColor(materialData.color_4);
705
+ }
706
+ if (materialData.color_5 !== undefined) {
707
+ multiPointMaterialProperties.color_5 = this._renderingEngine.createThreeJsColor(materialData.color_5);
708
+ }
709
+ if (materialData.color_6 !== undefined) {
710
+ multiPointMaterialProperties.color_6 = this._renderingEngine.createThreeJsColor(materialData.color_6);
711
+ }
712
+ if (materialData.color_7 !== undefined) {
713
+ multiPointMaterialProperties.color_7 = this._renderingEngine.createThreeJsColor(materialData.color_7);
714
+ }
715
+ }
716
+ else {
717
+ const pointMaterialProperties = generalProperties;
718
+ pointMaterialProperties.size = this._pointSize;
719
+ }
720
+ return { properties: generalProperties, mapCount };
721
+ }
722
+ else if (type === MATERIAL_TYPE.LINE) {
723
+ return { properties: generalProperties, mapCount };
724
+ }
725
+ /**
726
+ *
727
+ * Second exit, the shadow material
728
+ *
729
+ */
730
+ if (materialData instanceof viewer_shared_types_1.MaterialShadowData)
731
+ return { properties: generalProperties, mapCount };
732
+ /**
733
+ * We know evaluate properties that can be applied to basic mesh materials (and the ones extending from them)
734
+ */
735
+ const basicProperties = generalProperties;
736
+ if (materialData.alphaMap !== undefined) {
737
+ basicProperties.alphaMap = this.createTexture(materialData.alphaMap);
738
+ basicProperties.transparent = true;
739
+ basicProperties.depthWrite = false;
740
+ mapCount++;
741
+ }
742
+ if (materialData.aoMap !== undefined) {
743
+ basicProperties.aoMap = this.createTexture(materialData.aoMap);
744
+ mapCount++;
745
+ }
746
+ if (materialData.aoMapIntensity !== undefined) {
747
+ basicProperties.aoMapIntensity = materialData.aoMapIntensity;
748
+ }
749
+ if (materialData.map !== undefined) {
750
+ basicProperties.map = this.createTexture(materialData.map);
751
+ basicProperties.map.colorSpace = this._textureEncoding;
752
+ mapCount++;
753
+ }
754
+ /**
755
+ *
756
+ * Third exit, the unlit material
757
+ *
758
+ */
759
+ if (materialData instanceof viewer_shared_types_1.MaterialUnlitData)
760
+ return { properties: basicProperties, mapCount };
761
+ /**
762
+ * We know evaluate properties that can be applied to MeshPhysicalMaterials, SpecularGlossinessMaterials and GemMaterialParameters
763
+ */
764
+ const standardProperties = basicProperties;
765
+ if (materialData.shading !== undefined)
766
+ standardProperties.flatShading = materialData.shading !== 'smooth';
767
+ if (materialData.bumpMap !== undefined) {
768
+ standardProperties.bumpMap = this.createTexture(materialData.bumpMap);
769
+ mapCount++;
770
+ }
771
+ standardProperties.bumpScale = materialData.bumpScale;
772
+ if (materialData.emissiveness !== undefined)
773
+ standardProperties.emissive = this._renderingEngine.createThreeJsColor(materialData.emissiveness);
774
+ if (materialData.emissiveMap !== undefined) {
775
+ standardProperties.emissiveMap = this.createTexture(materialData.emissiveMap);
776
+ standardProperties.emissiveMap.colorSpace = this._textureEncoding;
777
+ mapCount++;
778
+ }
779
+ standardProperties.envMap = this._envMap;
780
+ standardProperties.envMapIntensity = this._envMapIntensity;
781
+ standardProperties.envMapRotation = this._environmentMapRotationEuler;
782
+ if (materialData.normalMap !== undefined) {
783
+ standardProperties.normalMap = this.createTexture(materialData.normalMap);
784
+ mapCount++;
785
+ }
786
+ if (materialData.normalScale !== undefined)
787
+ standardProperties.normalScale = new THREE.Vector2(materialData.normalScale, -materialData.normalScale);
788
+ /**
789
+ *
790
+ * Fourth exit, the specular-glossiness material
791
+ *
792
+ */
793
+ if (materialData instanceof viewer_shared_types_1.MaterialSpecularGlossinessData) {
794
+ const specularGlossinessProperties = standardProperties;
795
+ specularGlossinessProperties.specular = this._renderingEngine.createThreeJsColor(materialData.specular);
796
+ specularGlossinessProperties.glossiness = materialData.glossiness;
797
+ if (materialData.specularGlossinessMap !== undefined) {
798
+ specularGlossinessProperties.specularMap2 = this.createTexture(materialData.specularGlossinessMap);
799
+ specularGlossinessProperties.specularMap2.colorSpace = THREE.SRGBColorSpace;
800
+ specularGlossinessProperties.glossinessMap = specularGlossinessProperties.specularMap2;
801
+ mapCount++;
802
+ }
803
+ else {
804
+ if (materialData.specularMap !== undefined) {
805
+ specularGlossinessProperties.specularMap2 = this.createTexture(materialData.specularMap);
806
+ specularGlossinessProperties.specularMap2.colorSpace = THREE.SRGBColorSpace;
807
+ mapCount++;
808
+ }
809
+ if (materialData.glossinessMap !== undefined) {
810
+ specularGlossinessProperties.glossinessMap = this.createTexture(materialData.glossinessMap);
811
+ mapCount++;
812
+ }
813
+ }
814
+ return { properties: specularGlossinessProperties, mapCount };
815
+ }
816
+ /**
817
+ *
818
+ * Fourth exit, the gem material
819
+ *
820
+ */
821
+ if (materialData instanceof viewer_shared_types_1.MaterialGemData) {
822
+ const gemProperties = standardProperties;
823
+ gemProperties.refractionIndex = materialData.refractionIndex;
824
+ if (materialData.impurityMap !== undefined) {
825
+ gemProperties.impurityMap = this.createTexture(materialData.impurityMap);
826
+ mapCount++;
827
+ }
828
+ gemProperties.impurityScale = materialData.impurityScale;
829
+ if (materialData.colorTransferBegin !== undefined) {
830
+ gemProperties.colorTransferBegin = this._renderingEngine.createThreeJsColor(materialData.colorTransferBegin);
831
+ }
832
+ if (materialData.colorTransferEnd !== undefined) {
833
+ gemProperties.colorTransferEnd = this._renderingEngine.createThreeJsColor(materialData.colorTransferEnd);
834
+ }
835
+ gemProperties.center = new THREE.Vector3(materialData.center[0], materialData.center[1], materialData.center[2]);
836
+ gemProperties.tracingDepth = materialData.tracingDepth;
837
+ gemProperties.radius = materialData.radius;
838
+ gemProperties.sphericalNormalMap = materialData.sphericalNormalMap;
839
+ gemProperties.gamma = materialData.gamma;
840
+ gemProperties.contrast = materialData.contrast;
841
+ gemProperties.brightness = materialData.brightness;
842
+ gemProperties.dispersion = materialData.dispersion;
843
+ gemProperties.tracingOpacity = materialData.tracingOpacity;
844
+ gemProperties.roughness = 0;
845
+ gemProperties.metalness = 1;
846
+ gemProperties.transparent = true;
847
+ gemProperties.opacity = 1.0;
848
+ gemProperties.side = THREE.FrontSide;
849
+ return { properties: gemProperties, mapCount };
850
+ }
851
+ /**
852
+ *
853
+ * the final exit, the MeshPhysicalMaterial
854
+ *
855
+ */
856
+ if (materialData instanceof viewer_shared_types_1.MaterialStandardData) {
857
+ const meshPhysicalProperties = standardProperties;
858
+ meshPhysicalProperties.clearcoat = materialData.clearcoat;
859
+ if (materialData.clearcoatMap !== undefined) {
860
+ meshPhysicalProperties.clearcoatMap = this.createTexture(materialData.clearcoatMap);
861
+ mapCount++;
862
+ }
863
+ if (materialData.clearcoatNormalMap !== undefined) {
864
+ meshPhysicalProperties.clearcoatNormalMap = this.createTexture(materialData.clearcoatNormalMap);
865
+ mapCount++;
866
+ }
867
+ meshPhysicalProperties.clearcoatRoughness = materialData.clearcoatRoughness;
868
+ if (materialData.clearcoatRoughnessMap !== undefined) {
869
+ meshPhysicalProperties.clearcoatRoughnessMap = this.createTexture(materialData.clearcoatRoughnessMap);
870
+ mapCount++;
871
+ }
872
+ if (materialData.displacementMap !== undefined) {
873
+ meshPhysicalProperties.displacementMap = this.createTexture(materialData.displacementMap);
874
+ mapCount++;
875
+ }
876
+ meshPhysicalProperties.displacementScale = materialData.displacementScale;
877
+ meshPhysicalProperties.displacementBias = materialData.displacementBias;
878
+ meshPhysicalProperties.ior = materialData.ior;
879
+ meshPhysicalProperties.transmission = materialData.transmission;
880
+ if (materialData.transmissionMap !== undefined) {
881
+ meshPhysicalProperties.transmissionMap = this.createTexture(materialData.transmissionMap);
882
+ mapCount++;
883
+ }
884
+ meshPhysicalProperties.thickness = materialData.thickness;
885
+ if (materialData.thicknessMap !== undefined) {
886
+ meshPhysicalProperties.thicknessMap = this.createTexture(materialData.thicknessMap);
887
+ mapCount++;
888
+ }
889
+ meshPhysicalProperties.attenuationDistance = materialData.attenuationDistance;
890
+ meshPhysicalProperties.attenuationColor = this._renderingEngine.createThreeJsColor(materialData.attenuationColor);
891
+ meshPhysicalProperties.sheen = materialData.sheen;
892
+ meshPhysicalProperties.sheenColor = this._renderingEngine.createThreeJsColor(materialData.sheenColor);
893
+ meshPhysicalProperties.sheenRoughness = materialData.sheenRoughness;
894
+ if (materialData.sheenColorMap !== undefined) {
895
+ meshPhysicalProperties.sheenColorMap = this.createTexture(materialData.sheenColorMap);
896
+ mapCount++;
897
+ }
898
+ if (materialData.sheenRoughnessMap !== undefined) {
899
+ meshPhysicalProperties.sheenRoughnessMap = this.createTexture(materialData.sheenRoughnessMap);
900
+ mapCount++;
901
+ }
902
+ meshPhysicalProperties.specularIntensity = materialData.specularIntensity;
903
+ if (materialData.specularIntensityMap !== undefined) {
904
+ meshPhysicalProperties.specularIntensityMap = this.createTexture(materialData.specularIntensityMap);
905
+ mapCount++;
906
+ }
907
+ meshPhysicalProperties.specularColor = this._renderingEngine.createThreeJsColor(materialData.specularColor);
908
+ if (materialData.specularColorMap !== undefined) {
909
+ meshPhysicalProperties.specularColorMap = this.createTexture(materialData.specularColorMap);
910
+ mapCount++;
911
+ }
912
+ meshPhysicalProperties.metalness = materialData.metalness;
913
+ meshPhysicalProperties.roughness = materialData.roughness;
914
+ if (materialData.metalnessRoughnessMap !== undefined) {
915
+ meshPhysicalProperties.metalnessMap = this.createTexture(materialData.metalnessRoughnessMap);
916
+ meshPhysicalProperties.roughnessMap = meshPhysicalProperties.metalnessMap;
917
+ mapCount++;
918
+ }
919
+ else {
920
+ if (materialData.metalnessMap !== undefined) {
921
+ meshPhysicalProperties.metalnessMap = this.createTexture(materialData.metalnessMap);
922
+ mapCount++;
923
+ }
924
+ if (materialData.roughnessMap !== undefined) {
925
+ meshPhysicalProperties.roughnessMap = this.createTexture(materialData.roughnessMap);
926
+ mapCount++;
927
+ }
928
+ }
929
+ return { properties: meshPhysicalProperties, mapCount };
930
+ }
931
+ // we should never get here
932
+ throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialLoader.getMaterialProperties: No proper material properties were found.');
933
+ }
934
+ init() { }
935
+ /**
936
+ * Create a material object with the provided material data.
937
+ *
938
+ * @param material the material data
939
+ * @returns the material object
940
+ */
941
+ load(incomingData, materialSettings) {
942
+ let materialData = null;
943
+ if (!(incomingData instanceof viewer_shared_types_1.GeometryData))
944
+ materialData = incomingData;
945
+ // evaluate which type of material properties we are constructing
946
+ let type;
947
+ if (materialSettings && materialSettings.mode === 0) {
948
+ type = MATERIAL_TYPE.POINT;
949
+ }
950
+ else if (materialSettings && (materialSettings.mode === 1 || materialSettings.mode === 2 || materialSettings.mode === 3)) {
951
+ type = MATERIAL_TYPE.LINE;
952
+ }
953
+ else {
954
+ type = MATERIAL_TYPE.MESH;
955
+ }
956
+ const material = this.createMaterial(type, incomingData, materialData, materialSettings);
957
+ const cacheKey = this.createDataKeyFromMaterial(incomingData, type, materialSettings);
958
+ if (this._materialCache[cacheKey]) {
959
+ this._materialCache[cacheKey].material.copy(material);
960
+ return this._materialCache[cacheKey].material;
961
+ }
962
+ this._materialCache[cacheKey] = {
963
+ material,
964
+ materialData,
965
+ materialSettings
966
+ };
967
+ return material;
968
+ }
969
+ removeFromMaterialCache(id) {
970
+ for (const cacheKey in this._materialCache) {
971
+ const decodedCacheKey = (0, viewer_shared_services_1.atobCustom)(cacheKey);
972
+ if (decodedCacheKey.startsWith(id)) {
973
+ delete this._materialCache[cacheKey];
974
+ }
975
+ }
976
+ }
977
+ updateMaterials() {
978
+ for (const cacheKey in this._materialCache)
979
+ this._materialCache[cacheKey].material.needsUpdate = true;
980
+ }
981
+ updateSoftShadow(lightSizeUV, blending) {
982
+ this._lightSizeUV = lightSizeUV;
983
+ this._blending = blending;
984
+ for (const cacheKey in this._materialCache) {
985
+ if (this._materialCache[cacheKey].material.userData.shader) {
986
+ this._materialCache[cacheKey].material.userData.shader.uniforms.lightSizeUV.value = lightSizeUV;
987
+ this._materialCache[cacheKey].material.userData.shader.uniforms.blending.value = blending;
988
+ }
989
+ }
990
+ }
991
+ // #endregion Public Methods (18)
992
+ // #region Private Methods (4)
993
+ assignTextureEncoding() {
994
+ for (const cacheKey in this._materialCache) {
995
+ if (this._materialCache[cacheKey].material instanceof THREE.MeshPhysicalMaterial || this._materialCache[cacheKey].material instanceof THREE.MeshStandardMaterial) {
996
+ const material = this._materialCache[cacheKey].material;
997
+ if (material.emissiveMap) {
998
+ material.emissiveMap.colorSpace = this._textureEncoding;
999
+ material.emissiveMap.needsUpdate = true;
1000
+ }
1001
+ if (material.map) {
1002
+ material.map.colorSpace = this._textureEncoding;
1003
+ material.map.needsUpdate = true;
1004
+ }
1005
+ material.needsUpdate = true;
1006
+ }
1007
+ }
1008
+ }
1009
+ createDataKeyFromMap(map) {
1010
+ 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}`);
1011
+ }
1012
+ createDataKeyFromMaterial(data, type, materialSettings) {
1013
+ return data ? (0, viewer_shared_services_1.btoaCustom)(data.id + '_' + data.version + '_' + type + '_' + JSON.stringify(materialSettings)) : (0, viewer_shared_services_1.btoaCustom)(type + '_' + JSON.stringify(materialSettings));
1014
+ }
1015
+ createTexture(map) {
1016
+ if (map.image instanceof ArrayBuffer)
1017
+ return new THREE.Texture();
1018
+ const key = this.createDataKeyFromMap(map);
1019
+ // texture in this structure are only stored until the next scene tree update call
1020
+ // therefore no cache management is needed, as these textures need to be created either way
1021
+ // the cache is cleared in updateSceneTree
1022
+ if (this._threeJsTextureCache[key]) {
1023
+ this._threeJsTextureCache[key].usage++;
1024
+ return this._threeJsTextureCache[key].texture;
1025
+ }
1026
+ let texture;
1027
+ if (map.asData === true) {
1028
+ texture = new THREE.DataTexture(new Uint32Array(map.data), map.data.length, 1, THREE.RedIntegerFormat, THREE.UnsignedIntType);
1029
+ texture.internalFormat = 'R32UI';
1030
+ }
1031
+ else {
1032
+ texture = new THREE.Texture(map.image);
1033
+ texture.format = THREE.RGBAFormat;
1034
+ texture.minFilter = (() => {
1035
+ switch (map.minFilter) {
1036
+ case viewer_shared_types_1.TEXTURE_FILTERING.NEAREST:
1037
+ return THREE.NearestFilter;
1038
+ case viewer_shared_types_1.TEXTURE_FILTERING.NEAREST_MIPMAP_NEAREST:
1039
+ return THREE.NearestMipMapNearestFilter;
1040
+ case viewer_shared_types_1.TEXTURE_FILTERING.LINEAR_MIPMAP_NEAREST:
1041
+ return THREE.LinearMipMapNearestFilter;
1042
+ case viewer_shared_types_1.TEXTURE_FILTERING.NEAREST_MIPMAP_LINEAR:
1043
+ return THREE.NearestMipMapLinearFilter;
1044
+ case viewer_shared_types_1.TEXTURE_FILTERING.LINEAR:
1045
+ return THREE.LinearFilter;
1046
+ case viewer_shared_types_1.TEXTURE_FILTERING.LINEAR_MIPMAP_LINEAR:
1047
+ default:
1048
+ return THREE.LinearMipMapLinearFilter;
1049
+ }
1050
+ })();
1051
+ texture.magFilter = (() => {
1052
+ switch (map.magFilter) {
1053
+ case viewer_shared_types_1.TEXTURE_FILTERING.NEAREST:
1054
+ return THREE.NearestFilter;
1055
+ case viewer_shared_types_1.TEXTURE_FILTERING.LINEAR:
1056
+ default:
1057
+ return THREE.LinearFilter;
1058
+ }
1059
+ })();
1060
+ texture.wrapS = (() => {
1061
+ switch (map.wrapS) {
1062
+ case viewer_shared_types_1.TEXTURE_WRAPPING.CLAMP_TO_EDGE:
1063
+ return THREE.ClampToEdgeWrapping;
1064
+ case viewer_shared_types_1.TEXTURE_WRAPPING.MIRRORED_REPEAT:
1065
+ return THREE.MirroredRepeatWrapping;
1066
+ case viewer_shared_types_1.TEXTURE_WRAPPING.REPEAT:
1067
+ default:
1068
+ return THREE.RepeatWrapping;
1069
+ }
1070
+ })();
1071
+ texture.wrapT = (() => {
1072
+ switch (map.wrapT) {
1073
+ case viewer_shared_types_1.TEXTURE_WRAPPING.CLAMP_TO_EDGE:
1074
+ return THREE.ClampToEdgeWrapping;
1075
+ case viewer_shared_types_1.TEXTURE_WRAPPING.MIRRORED_REPEAT:
1076
+ return THREE.MirroredRepeatWrapping;
1077
+ case viewer_shared_types_1.TEXTURE_WRAPPING.REPEAT:
1078
+ default:
1079
+ return THREE.RepeatWrapping;
1080
+ }
1081
+ })();
1082
+ texture.center = new THREE.Vector2(map.center[0], map.center[1]);
1083
+ texture.offset = new THREE.Vector2(map.offset[0], map.offset[1]);
1084
+ texture.repeat = new THREE.Vector2(map.repeat[0], map.repeat[1]);
1085
+ texture.rotation = map.rotation;
1086
+ if (map.texCoord !== undefined)
1087
+ texture.channel = map.texCoord;
1088
+ texture.flipY = map.flipY;
1089
+ }
1090
+ texture.needsUpdate = true;
1091
+ texture.userData.cacheKey = key;
1092
+ this._threeJsTextureCache[key] = {
1093
+ texture,
1094
+ usage: 1,
1095
+ initialized: false
1096
+ };
1097
+ return this._threeJsTextureCache[key].texture;
1098
+ }
1099
+ }
1100
+ exports.MaterialLoader = MaterialLoader;
1101
+ // #endregion Classes (1)
1102
+ // #region Enums (1)
1103
+ /* eslint-disable @typescript-eslint/no-empty-function */
1104
+ var MATERIAL_TYPE;
1105
+ (function (MATERIAL_TYPE) {
1106
+ MATERIAL_TYPE["POINT"] = "point";
1107
+ MATERIAL_TYPE["LINE"] = "line";
1108
+ MATERIAL_TYPE["MESH"] = "mesh";
1109
+ })(MATERIAL_TYPE = exports.MATERIAL_TYPE || (exports.MATERIAL_TYPE = {}));
1110
+ // #endregion Enums (1)
1111
+ // #region Variables (1)
1112
+ const adaptShaders = () => {
1113
+ let shader = THREE.ShaderChunk.shadowmap_pars_fragment;
1114
+ if (!shader.includes('PCSS implementation')) {
1115
+ shader = shader.replace('#ifdef USE_SHADOWMAP', '#ifdef USE_SHADOWMAP' + PCSS_1.main);
1116
+ shader = shader.replace(shader.substr(shader.indexOf('#if defined( SHADOWMAP_TYPE_PCF )'), shader.indexOf('#elif defined( SHADOWMAP_TYPE_PCF_SOFT )') - shader.indexOf('#if defined( SHADOWMAP_TYPE_PCF )')), '#if defined( SHADOWMAP_TYPE_PCF )\n' + PCSS_1.entry);
1117
+ }
1118
+ THREE.ShaderChunk.shadowmap_pars_fragment = shader;
1119
+ // here we replace in the background cube fragment shader the y component of the reflection vector with the negative y component and inverse the rotation in the case of a LDR environment map
1120
+ // console.log(THREE.ShaderChunk.backgroundCube_frag.includes('vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );'))
1121
+ THREE.ShaderChunk.backgroundCube_frag = THREE.ShaderChunk.backgroundCube_frag.replace('vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );', 'vec4 texColor = textureCube( envMap, inverse(backgroundRotation) * vec3( flipEnvMap * vWorldDirection.x, -vWorldDirection.y, vWorldDirection.z ) );');
1122
+ THREE.ShaderLib.backgroundCube.fragmentShader = THREE.ShaderChunk.backgroundCube_frag;
1123
+ // here we replace in the envmap_physical_pars_fragment the z component of the reflection vector with the negative z component in the case of a LDR environment map
1124
+ // console.log(THREE.ShaderChunk.envmap_physical_pars_fragment, THREE.ShaderChunk.envmap_physical_pars_fragment.includes('vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );'));
1125
+ THREE.ShaderChunk.envmap_physical_pars_fragment = THREE.ShaderChunk.envmap_physical_pars_fragment.replace('vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );', `
1126
+ #ifdef ENVMAP_TYPE_LDR
1127
+ vec3 rotatedReflectVec = vec3(envMapRotation * worldNormal).xzy;
1128
+ vec4 envMapColor = textureCubeUV( envMap, vec3(rotatedReflectVec.xy, -rotatedReflectVec.z), 1.0 );
1129
+ #else
1130
+ vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );
1131
+ #endif
1132
+ `);
1133
+ // here we replace in the envmap_fragment the z component of the reflection vector with the negative z component in the case of a LDR environment map
1134
+ // console.log(THREE.ShaderChunk.envmap_physical_pars_fragment, THREE.ShaderChunk.envmap_physical_pars_fragment.includes('vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );'));
1135
+ THREE.ShaderChunk.envmap_physical_pars_fragment = THREE.ShaderChunk.envmap_physical_pars_fragment.replace('vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );', `
1136
+ #ifdef ENVMAP_TYPE_LDR
1137
+ vec3 rotatedReflectVec = vec3(envMapRotation * reflectVec).xzy;
1138
+ vec4 envMapColor = textureCubeUV( envMap, vec3(rotatedReflectVec.xy, -rotatedReflectVec.z), roughness );
1139
+ #else
1140
+ vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );
1141
+ #endif
1142
+ `);
1143
+ // here we replace in the envmap_fragment the z component of the reflection vector with the negative z component in the case of a LDR environment map
1144
+ // console.log(THREE.ShaderChunk.envmap_fragment, THREE.ShaderChunk.envmap_fragment.includes('vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );'));
1145
+ THREE.ShaderChunk.envmap_fragment = THREE.ShaderChunk.envmap_fragment.replace('vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );', `
1146
+ #ifdef ENVMAP_TYPE_LDR
1147
+ vec4 envColor = textureCube( envMap, envMapRotation * vec3(flipEnvMap * reflectVec.x, reflectVec.y, -reflectVec.z ) );
1148
+ #else
1149
+ vec4 envColor = textureCube( envMap, envMapRotation * vec3( -flipEnvMap * reflectVec.x, reflectVec.zy ) );
1150
+ #endif
1151
+ `);
1152
+ // here we replace the z and y component of the sampleDir in the cube_uv_reflection_fragment
1153
+ // console.log(THREE.ShaderChunk.cube_uv_reflection_fragment.includes('vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );'))
1154
+ THREE.ShaderChunk.cube_uv_reflection_fragment = THREE.ShaderChunk.cube_uv_reflection_fragment.replace('vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );', 'vec3 color0 = bilinearCubeUV( envMap, sampleDir.xzy, mipInt );');
1155
+ // here we replace the z and y component of the sampleDir in the cube_uv_reflection_fragment
1156
+ // console.log(THREE.ShaderChunk.cube_uv_reflection_fragment)
1157
+ THREE.ShaderChunk.cube_uv_reflection_fragment = THREE.ShaderChunk.cube_uv_reflection_fragment.replace('vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );', 'vec3 color1 = bilinearCubeUV( envMap, sampleDir.xzy, mipInt + 1.0 );');
1158
+ // here we create a new case in the lights_fragment_maps for the case of ENVMAP_TYPE_NONE
1159
+ if (!THREE.ShaderChunk.lights_fragment_maps.includes('vec3 reflectVec')) {
1160
+ const index = THREE.ShaderChunk.lights_fragment_maps.lastIndexOf('#endif');
1161
+ THREE.ShaderChunk.lights_fragment_maps = THREE.ShaderChunk.lights_fragment_maps.substring(0, index) +
1162
+ `#else
1163
+ #ifdef ENVMAP_TYPE_NONE
1164
+ vec3 reflectVec = reflect( -geometryViewDir, geometryNormal );
1165
+ reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
1166
+ vec4 adjustedEnvReflectVector = vec4(reflectVec, 1.0);
1167
+ radiance += (vec3((adjustedEnvReflectVector.z + 1.0) / 2.0) + 0.5) / 1.5;
1168
+ #endif
1169
+ #endif
1170
+ ` + THREE.ShaderChunk.lights_fragment_maps.substring(index + '#endif'.length);
1171
+ }
1172
+ };
1173
+ exports.adaptShaders = adaptShaders;
1174
+ // #endregion Variables (1)
1175
+ //# sourceMappingURL=MaterialLoader.js.map