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