configuration.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. import { ITemplateConfiguration } from './../templateManager';
  2. import { EngineOptions } from 'babylonjs';
  3. export interface ViewerConfiguration {
  4. // configuration version
  5. version?: string;
  6. extends?: string; // is this configuration extending an existing configuration?
  7. pageUrl?: string; // will be used for sharing and other fun stuff. This is the page showing the model (not the model's url!)
  8. configuration?: string | {
  9. url?: string;
  10. payload?: any;
  11. mapper?: string; // json (default), html, yaml, xml, etc'. if not provided, file extension will be used.
  12. };
  13. // names of functions in the window context.
  14. observers?: IObserversConfiguration;
  15. canvasElement?: string; // if there is a need to override the standard implementation - ID of HTMLCanvasElement
  16. model?: IModelConfiguration | string;
  17. scene?: ISceneConfiguration;
  18. optimizer?: ISceneOptimizerConfiguration | boolean;
  19. // at the moment, support only a single camera.
  20. camera?: ICameraConfiguration,
  21. skybox?: boolean | ISkyboxConfiguration;
  22. ground?: boolean | IGroundConfiguration;
  23. lights?: { [name: string]: boolean | ILightConfiguration },
  24. // engine configuration. optional!
  25. engine?: {
  26. antialiasing?: boolean;
  27. disableResize?: boolean;
  28. engineOptions?: EngineOptions;
  29. adaptiveQuality?: boolean;
  30. },
  31. //templateStructure?: ITemplateStructure,
  32. templates?: {
  33. main: ITemplateConfiguration,
  34. [key: string]: ITemplateConfiguration
  35. };
  36. customShaders?: {
  37. shaders?: {
  38. [key: string]: string;
  39. };
  40. includes?: {
  41. [key: string]: string;
  42. }
  43. }
  44. // features that are being tested.
  45. // those features' syntax will change and move out!
  46. // Don't use in production (or be ready to make the changes :) )
  47. lab?: {
  48. flashlight?: boolean | {
  49. exponent?: number;
  50. angle?: number;
  51. intensity?: number;
  52. diffuse?: { r: number, g: number, b: number };
  53. specular?: { r: number, g: number, b: number };
  54. }
  55. hideLoadingDelay?: number;
  56. }
  57. }
  58. export interface IModelConfiguration {
  59. url?: string;
  60. root?: string; //optional
  61. loader?: string; // obj, gltf?
  62. position?: { x: number, y: number, z: number };
  63. rotation?: { x: number, y: number, z: number, w?: number };
  64. scaling?: { x: number, y: number, z: number };
  65. parentObjectIndex?: number; // the index of the parent object of the model in the loaded meshes array.
  66. castShadow?: boolean;
  67. receiveShadows?: boolean;
  68. normalize?: boolean | {
  69. center?: boolean;
  70. unitSize?: boolean;
  71. parentIndex?: number;
  72. }; // shoud the model be scaled to unit-size
  73. title?: string;
  74. subtitle?: string;
  75. thumbnail?: string; // URL or data-url
  76. animation?: {
  77. autoStart?: boolean | string;
  78. playOnce?: boolean;
  79. }
  80. material?: {
  81. directEnabled?: boolean;
  82. directIntensity?: number;
  83. emissiveIntensity?: number;
  84. environmentIntensity?: number;
  85. [propName: string]: any;
  86. }
  87. /**
  88. * Rotation offset axis definition
  89. */
  90. rotationOffsetAxis?: {
  91. x: number;
  92. y: number;
  93. z: number;
  94. };
  95. /**
  96. * the offset angle
  97. */
  98. rotationOffsetAngle?: number;
  99. // [propName: string]: any; // further configuration, like title and creator
  100. }
  101. export interface ISkyboxConfiguration {
  102. cubeTexture?: {
  103. noMipMap?: boolean;
  104. gammaSpace?: boolean;
  105. url?: string | Array<string>;
  106. };
  107. color?: { r: number, g: number, b: number };
  108. pbr?: boolean; // deprecated
  109. scale?: number;
  110. blur?: number; // deprecated
  111. material?: {
  112. imageProcessingConfiguration?: IImageProcessingConfiguration;
  113. [propName: string]: any;
  114. };
  115. infiniteDistance?: boolean;
  116. }
  117. export interface IGroundConfiguration {
  118. size?: number;
  119. receiveShadows?: boolean;
  120. shadowLevel?: number;
  121. shadowOnly?: boolean; // deprecated
  122. mirror?: boolean | {
  123. sizeRatio?: number;
  124. blurKernel?: number;
  125. amount?: number;
  126. fresnelWeight?: number;
  127. fallOffDistance?: number;
  128. textureType?: number;
  129. };
  130. texture?: string;
  131. color?: { r: number, g: number, b: number };
  132. opacity?: number;
  133. material?: { // deprecated!
  134. [propName: string]: any;
  135. };
  136. }
  137. export interface ISceneConfiguration {
  138. debug?: boolean;
  139. clearColor?: { r: number, g: number, b: number, a: number };
  140. mainColor?: { r: number, g: number, b: number };
  141. imageProcessingConfiguration?: IImageProcessingConfiguration;
  142. environmentTexture?: string;
  143. colorGrading?: IColorGradingConfiguration;
  144. environmentRotationY?: number;
  145. }
  146. /**
  147. * The Color Grading Configuration groups the different settings used to define the color grading used in the viewer.
  148. */
  149. export interface IColorGradingConfiguration {
  150. /**
  151. * Transform data string, encoded as determined by transformDataFormat.
  152. */
  153. transformData: string;
  154. /**
  155. * The encoding format of TransformData (currently only raw-base16 is supported).
  156. */
  157. transformDataFormat: string;
  158. /**
  159. * The weight of the transform
  160. */
  161. transformWeight: number;
  162. /**
  163. * Color curve colorFilterHueGlobal value
  164. */
  165. colorFilterHueGlobal: number;
  166. /**
  167. * Color curve colorFilterHueShadows value
  168. */
  169. colorFilterHueShadows: number;
  170. /**
  171. * Color curve colorFilterHueMidtones value
  172. */
  173. colorFilterHueMidtones: number;
  174. /**
  175. * Color curve colorFilterHueHighlights value
  176. */
  177. colorFilterHueHighlights: number;
  178. /**
  179. * Color curve colorFilterDensityGlobal value
  180. */
  181. colorFilterDensityGlobal: number;
  182. /**
  183. * Color curve colorFilterDensityShadows value
  184. */
  185. colorFilterDensityShadows: number;
  186. /**
  187. * Color curve colorFilterDensityMidtones value
  188. */
  189. colorFilterDensityMidtones: number;
  190. /**
  191. * Color curve colorFilterDensityHighlights value
  192. */
  193. colorFilterDensityHighlights: number;
  194. /**
  195. * Color curve saturationGlobal value
  196. */
  197. saturationGlobal: number;
  198. /**
  199. * Color curve saturationShadows value
  200. */
  201. saturationShadows: number;
  202. /**
  203. * Color curve saturationMidtones value
  204. */
  205. saturationMidtones: number;
  206. /**
  207. * Color curve saturationHighlights value
  208. */
  209. saturationHighlights: number;
  210. /**
  211. * Color curve exposureGlobal value
  212. */
  213. exposureGlobal: number;
  214. /**
  215. * Color curve exposureShadows value
  216. */
  217. exposureShadows: number;
  218. /**
  219. * Color curve exposureMidtones value
  220. */
  221. exposureMidtones: number;
  222. /**
  223. * Color curve exposureHighlights value
  224. */
  225. exposureHighlights: number;
  226. }
  227. export interface ISceneOptimizerConfiguration {
  228. targetFrameRate?: number;
  229. trackerDuration?: number;
  230. autoGeneratePriorities?: boolean;
  231. improvementMode?: boolean;
  232. degradation?: string; // low, moderate, high
  233. types?: {
  234. texture?: ISceneOptimizerParameters;
  235. hardwareScaling?: ISceneOptimizerParameters;
  236. shadow?: ISceneOptimizerParameters;
  237. postProcess?: ISceneOptimizerParameters;
  238. lensFlare?: ISceneOptimizerParameters;
  239. particles?: ISceneOptimizerParameters;
  240. renderTarget?: ISceneOptimizerParameters;
  241. mergeMeshes?: ISceneOptimizerParameters;
  242. }
  243. }
  244. export interface IObserversConfiguration {
  245. onEngineInit?: string;
  246. onSceneInit?: string;
  247. onModelLoaded?: string;
  248. }
  249. export interface ICameraConfiguration {
  250. position?: { x: number, y: number, z: number };
  251. rotation?: { x: number, y: number, z: number, w: number };
  252. fov?: number;
  253. fovMode?: number;
  254. minZ?: number;
  255. maxZ?: number;
  256. inertia?: number;
  257. behaviors?: {
  258. [name: string]: number | {
  259. type: number;
  260. [propName: string]: any;
  261. };
  262. };
  263. disableCameraControl?: boolean;
  264. disableCtrlForPanning?: boolean;
  265. [propName: string]: any;
  266. }
  267. export interface ILightConfiguration {
  268. type: number;
  269. name?: string;
  270. disabled?: boolean;
  271. position?: { x: number, y: number, z: number };
  272. target?: { x: number, y: number, z: number };
  273. direction?: { x: number, y: number, z: number };
  274. diffuse?: { r: number, g: number, b: number };
  275. specular?: { r: number, g: number, b: number };
  276. intensity?: number;
  277. intensityMode?: number;
  278. radius?: number;
  279. shadownEnabled?: boolean; // only on specific lights!
  280. shadowConfig?: {
  281. useBlurExponentialShadowMap?: boolean;
  282. useKernelBlur?: boolean;
  283. blurKernel?: number;
  284. blurScale?: number;
  285. minZ?: number;
  286. maxZ?: number;
  287. frustumSize?: number;
  288. angleScale?: number;
  289. frustumEdgeFalloff?: number;
  290. [propName: string]: any;
  291. };
  292. spotAngle?: number;
  293. shadowFieldOfView?: number;
  294. shadowBufferSize?: number;
  295. shadowFrustumSize?: number;
  296. shadowMinZ?: number;
  297. shadowMaxZ?: number;
  298. [propName: string]: any;
  299. // no behaviors for light at the moment, but allowing configuration for future reference.
  300. behaviors?: {
  301. [name: string]: number | {
  302. type: number;
  303. [propName: string]: any;
  304. };
  305. };
  306. }
  307. export interface ISceneOptimizerParameters {
  308. priority?: number;
  309. maximumSize?: number;
  310. step?: number;
  311. }
  312. export interface IImageProcessingConfiguration {
  313. colorGradingEnabled?: boolean;
  314. colorCurvesEnabled?: boolean;
  315. colorCurves?: {
  316. globalHue?: number;
  317. globalDensity?: number;
  318. globalSaturation?: number;
  319. globalExposure?: number;
  320. highlightsHue?: number;
  321. highlightsDensity?: number;
  322. highlightsSaturation?: number;
  323. highlightsExposure?: number;
  324. midtonesHue?: number;
  325. midtonesDensity?: number;
  326. midtonesSaturation?: number;
  327. midtonesExposure?: number;
  328. shadowsHue?: number;
  329. shadowsDensity?: number;
  330. shadowsSaturation?: number;
  331. shadowsExposure?: number;
  332. };
  333. colorGradingWithGreenDepth?: boolean;
  334. colorGradingBGR?: boolean;
  335. exposure?: number;
  336. toneMappingEnabled?: boolean;
  337. contrast?: number;
  338. vignetteEnabled?: boolean;
  339. vignetteStretch?: number;
  340. vignetteCentreX?: number;
  341. vignetteCentreY?: number;
  342. vignetteWeight?: number;
  343. vignetteColor?: { r: number, g: number, b: number, a?: number };
  344. vignetteCameraFov?: number;
  345. vignetteBlendMode?: number;
  346. vignetteM?: boolean;
  347. applyByPostProcess?: boolean;
  348. isEnabled?: boolean;
  349. }