@pascal-app/core 0.9.1 → 0.9.2

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 (321) hide show
  1. package/dist/events/bus.d.ts +30 -2
  2. package/dist/events/bus.d.ts.map +1 -1
  3. package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
  4. package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
  5. package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
  6. package/dist/hooks/scene-registry/scene-registry.d.ts +8 -1
  7. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  8. package/dist/hooks/scene-registry/scene-registry.js +27 -1
  9. package/dist/hooks/scene-registry/scene-registry.test.d.ts +2 -0
  10. package/dist/hooks/scene-registry/scene-registry.test.d.ts.map +1 -0
  11. package/dist/hooks/scene-registry/scene-registry.test.js +26 -0
  12. package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +93 -0
  13. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +69 -12
  14. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  15. package/dist/hooks/spatial-grid/spatial-grid-manager.js +476 -195
  16. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  17. package/dist/hooks/spatial-grid/spatial-grid-sync.js +19 -1
  18. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +2 -0
  19. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +1 -0
  20. package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +363 -0
  21. package/dist/index.d.ts +16 -6
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +15 -5
  24. package/dist/lib/level-name.d.ts +4 -0
  25. package/dist/lib/level-name.d.ts.map +1 -0
  26. package/dist/lib/level-name.js +10 -0
  27. package/dist/lib/measurement-geometry.d.ts +19 -0
  28. package/dist/lib/measurement-geometry.d.ts.map +1 -0
  29. package/dist/lib/measurement-geometry.js +232 -0
  30. package/dist/lib/measurement-geometry.test.d.ts +2 -0
  31. package/dist/lib/measurement-geometry.test.d.ts.map +1 -0
  32. package/dist/lib/measurement-geometry.test.js +102 -0
  33. package/dist/lib/polygon-geometry.d.ts +0 -1
  34. package/dist/lib/polygon-geometry.d.ts.map +1 -1
  35. package/dist/lib/polygon-geometry.js +0 -18
  36. package/dist/lib/selection-proxy.d.ts +4 -0
  37. package/dist/lib/selection-proxy.d.ts.map +1 -0
  38. package/dist/lib/selection-proxy.js +12 -0
  39. package/dist/lib/slab-polygon.d.ts +31 -2
  40. package/dist/lib/slab-polygon.d.ts.map +1 -1
  41. package/dist/lib/slab-polygon.js +525 -31
  42. package/dist/lib/slab-polygon.test.d.ts +2 -0
  43. package/dist/lib/slab-polygon.test.d.ts.map +1 -0
  44. package/dist/lib/slab-polygon.test.js +635 -0
  45. package/dist/lib/slots.d.ts +14 -0
  46. package/dist/lib/slots.d.ts.map +1 -0
  47. package/dist/lib/slots.js +26 -0
  48. package/dist/lib/space-detection.d.ts +25 -2
  49. package/dist/lib/space-detection.d.ts.map +1 -1
  50. package/dist/lib/space-detection.js +414 -118
  51. package/dist/lib/space-detection.test.js +301 -2
  52. package/dist/lib/wall-distance.d.ts +60 -0
  53. package/dist/lib/wall-distance.d.ts.map +1 -0
  54. package/dist/lib/wall-distance.js +85 -0
  55. package/dist/lib/zone-quantities.d.ts +21 -0
  56. package/dist/lib/zone-quantities.d.ts.map +1 -0
  57. package/dist/lib/zone-quantities.js +183 -0
  58. package/dist/lib/zone-quantities.test.d.ts +2 -0
  59. package/dist/lib/zone-quantities.test.d.ts.map +1 -0
  60. package/dist/lib/zone-quantities.test.js +82 -0
  61. package/dist/material-library.d.ts +20 -1
  62. package/dist/material-library.d.ts.map +1 -1
  63. package/dist/material-library.js +2181 -441
  64. package/dist/registry/handles.d.ts +75 -2
  65. package/dist/registry/handles.d.ts.map +1 -1
  66. package/dist/registry/index.d.ts +3 -3
  67. package/dist/registry/index.d.ts.map +1 -1
  68. package/dist/registry/index.js +1 -1
  69. package/dist/registry/registry.d.ts +46 -3
  70. package/dist/registry/registry.d.ts.map +1 -1
  71. package/dist/registry/registry.js +82 -1
  72. package/dist/registry/registry.test.js +14 -1
  73. package/dist/registry/subtree.d.ts.map +1 -1
  74. package/dist/registry/subtree.js +4 -0
  75. package/dist/registry/subtree.test.js +30 -0
  76. package/dist/registry/types.d.ts +717 -38
  77. package/dist/registry/types.d.ts.map +1 -1
  78. package/dist/schema/index.d.ts +21 -5
  79. package/dist/schema/index.d.ts.map +1 -1
  80. package/dist/schema/index.js +17 -3
  81. package/dist/schema/material.d.ts +3 -2
  82. package/dist/schema/material.d.ts.map +1 -1
  83. package/dist/schema/material.js +7 -5
  84. package/dist/schema/material.test.d.ts +2 -0
  85. package/dist/schema/material.test.d.ts.map +1 -0
  86. package/dist/schema/material.test.js +43 -0
  87. package/dist/schema/nodes/box-vent.d.ts +2 -2
  88. package/dist/schema/nodes/cabinet.d.ts +534 -0
  89. package/dist/schema/nodes/cabinet.d.ts.map +1 -0
  90. package/dist/schema/nodes/cabinet.js +137 -0
  91. package/dist/schema/nodes/ceiling.d.ts +3 -2
  92. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  93. package/dist/schema/nodes/ceiling.js +4 -0
  94. package/dist/schema/nodes/chimney.d.ts +4 -4
  95. package/dist/schema/nodes/column.d.ts +3 -2
  96. package/dist/schema/nodes/column.d.ts.map +1 -1
  97. package/dist/schema/nodes/column.js +3 -0
  98. package/dist/schema/nodes/cupola.d.ts +2 -2
  99. package/dist/schema/nodes/door.d.ts +13 -5
  100. package/dist/schema/nodes/door.d.ts.map +1 -1
  101. package/dist/schema/nodes/door.js +12 -0
  102. package/dist/schema/nodes/dormer.d.ts +8 -8
  103. package/dist/schema/nodes/dormer.js +1 -1
  104. package/dist/schema/nodes/downspout.d.ts +2 -2
  105. package/dist/schema/nodes/duct-fitting.d.ts +91 -0
  106. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
  107. package/dist/schema/nodes/duct-fitting.js +92 -0
  108. package/dist/schema/nodes/duct-segment.d.ts +61 -0
  109. package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
  110. package/dist/schema/nodes/duct-segment.js +73 -0
  111. package/dist/schema/nodes/duct-terminal.d.ts +57 -0
  112. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
  113. package/dist/schema/nodes/duct-terminal.js +51 -0
  114. package/dist/schema/nodes/elevator.d.ts +3 -2
  115. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  116. package/dist/schema/nodes/elevator.js +3 -0
  117. package/dist/schema/nodes/eyebrow-vent.d.ts +2 -2
  118. package/dist/schema/nodes/fence.d.ts +18 -2
  119. package/dist/schema/nodes/fence.d.ts.map +1 -1
  120. package/dist/schema/nodes/fence.js +25 -2
  121. package/dist/schema/nodes/gutter.d.ts +2 -2
  122. package/dist/schema/nodes/hvac-equipment.d.ts +63 -0
  123. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
  124. package/dist/schema/nodes/hvac-equipment.js +55 -0
  125. package/dist/schema/nodes/item.d.ts +8 -0
  126. package/dist/schema/nodes/item.d.ts.map +1 -1
  127. package/dist/schema/nodes/item.js +11 -0
  128. package/dist/schema/nodes/level.d.ts +1 -1
  129. package/dist/schema/nodes/level.d.ts.map +1 -1
  130. package/dist/schema/nodes/level.js +2 -0
  131. package/dist/schema/nodes/lineset.d.ts +42 -0
  132. package/dist/schema/nodes/lineset.d.ts.map +1 -0
  133. package/dist/schema/nodes/lineset.js +38 -0
  134. package/dist/schema/nodes/liquid-line.d.ts +34 -0
  135. package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
  136. package/dist/schema/nodes/liquid-line.js +24 -0
  137. package/dist/schema/nodes/measurement.d.ts +306 -0
  138. package/dist/schema/nodes/measurement.d.ts.map +1 -0
  139. package/dist/schema/nodes/measurement.js +87 -0
  140. package/dist/schema/nodes/measurement.test.d.ts +2 -0
  141. package/dist/schema/nodes/measurement.test.d.ts.map +1 -0
  142. package/dist/schema/nodes/measurement.test.js +139 -0
  143. package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
  144. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
  145. package/dist/schema/nodes/pipe-fitting.js +45 -0
  146. package/dist/schema/nodes/pipe-segment.d.ts +48 -0
  147. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
  148. package/dist/schema/nodes/pipe-segment.js +36 -0
  149. package/dist/schema/nodes/pipe-trap.d.ts +43 -0
  150. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
  151. package/dist/schema/nodes/pipe-trap.js +36 -0
  152. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +2 -0
  153. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +1 -0
  154. package/dist/schema/nodes/ridge-vent-defaults.test.js +205 -0
  155. package/dist/schema/nodes/ridge-vent.d.ts +18 -3
  156. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  157. package/dist/schema/nodes/ridge-vent.js +221 -3
  158. package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
  159. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
  160. package/dist/schema/nodes/roof-segment-shape.js +318 -0
  161. package/dist/schema/nodes/roof-segment-shape.test.d.ts +2 -0
  162. package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +1 -0
  163. package/dist/schema/nodes/roof-segment-shape.test.js +175 -0
  164. package/dist/schema/nodes/roof-segment-surface.test.d.ts +2 -0
  165. package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +1 -0
  166. package/dist/schema/nodes/roof-segment-surface.test.js +48 -0
  167. package/dist/schema/nodes/roof-segment-trim.test.d.ts +2 -0
  168. package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +1 -0
  169. package/dist/schema/nodes/roof-segment-trim.test.js +107 -0
  170. package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
  171. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
  172. package/dist/schema/nodes/roof-segment-walls.js +330 -0
  173. package/dist/schema/nodes/roof-segment-walls.test.d.ts +2 -0
  174. package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +1 -0
  175. package/dist/schema/nodes/roof-segment-walls.test.js +92 -0
  176. package/dist/schema/nodes/roof-segment.d.ts +84 -8
  177. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  178. package/dist/schema/nodes/roof-segment.js +290 -5
  179. package/dist/schema/nodes/roof.d.ts +8 -8
  180. package/dist/schema/nodes/shelf.d.ts +3 -2
  181. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  182. package/dist/schema/nodes/shelf.js +6 -0
  183. package/dist/schema/nodes/skylight.d.ts +10 -10
  184. package/dist/schema/nodes/slab.d.ts +3 -2
  185. package/dist/schema/nodes/slab.d.ts.map +1 -1
  186. package/dist/schema/nodes/slab.js +4 -0
  187. package/dist/schema/nodes/solar-panel.d.ts +4 -4
  188. package/dist/schema/nodes/stair-segment.d.ts +4 -4
  189. package/dist/schema/nodes/stair.d.ts +13 -12
  190. package/dist/schema/nodes/stair.d.ts.map +1 -1
  191. package/dist/schema/nodes/stair.js +3 -0
  192. package/dist/schema/nodes/turbine-vent.d.ts +2 -2
  193. package/dist/schema/nodes/wall.d.ts +245 -6
  194. package/dist/schema/nodes/wall.d.ts.map +1 -1
  195. package/dist/schema/nodes/wall.js +257 -0
  196. package/dist/schema/nodes/wall.test.d.ts +2 -0
  197. package/dist/schema/nodes/wall.test.d.ts.map +1 -0
  198. package/dist/schema/nodes/wall.test.js +208 -0
  199. package/dist/schema/nodes/window.d.ts +11 -3
  200. package/dist/schema/nodes/window.d.ts.map +1 -1
  201. package/dist/schema/nodes/window.js +12 -0
  202. package/dist/schema/nodes/zone.d.ts +2 -0
  203. package/dist/schema/nodes/zone.d.ts.map +1 -1
  204. package/dist/schema/nodes/zone.js +6 -0
  205. package/dist/schema/scene-material.d.ts +41 -0
  206. package/dist/schema/scene-material.d.ts.map +1 -0
  207. package/dist/schema/scene-material.js +9 -0
  208. package/dist/schema/types.d.ts +1089 -94
  209. package/dist/schema/types.d.ts.map +1 -1
  210. package/dist/schema/types.js +23 -0
  211. package/dist/services/alignment-anchors.d.ts.map +1 -1
  212. package/dist/services/alignment-anchors.js +30 -1
  213. package/dist/services/alignment.d.ts +5 -0
  214. package/dist/services/alignment.d.ts.map +1 -1
  215. package/dist/services/alignment.js +2 -0
  216. package/dist/services/hosting.d.ts +8 -0
  217. package/dist/services/hosting.d.ts.map +1 -1
  218. package/dist/services/hosting.js +13 -4
  219. package/dist/services/hosting.test.js +32 -1
  220. package/dist/services/index.d.ts +8 -2
  221. package/dist/services/index.d.ts.map +1 -1
  222. package/dist/services/index.js +8 -2
  223. package/dist/services/level-height.d.ts +28 -0
  224. package/dist/services/level-height.d.ts.map +1 -0
  225. package/dist/services/level-height.js +62 -0
  226. package/dist/services/opening-guides.d.ts +141 -0
  227. package/dist/services/opening-guides.d.ts.map +1 -0
  228. package/dist/services/opening-guides.js +267 -0
  229. package/dist/services/opening-guides.test.d.ts +2 -0
  230. package/dist/services/opening-guides.test.d.ts.map +1 -0
  231. package/dist/services/opening-guides.test.js +208 -0
  232. package/dist/services/port-connectivity.d.ts +115 -0
  233. package/dist/services/port-connectivity.d.ts.map +1 -0
  234. package/dist/services/port-connectivity.js +300 -0
  235. package/dist/services/port-connectivity.test.d.ts +2 -0
  236. package/dist/services/port-connectivity.test.d.ts.map +1 -0
  237. package/dist/services/port-connectivity.test.js +297 -0
  238. package/dist/services/riser-diagram.d.ts +40 -0
  239. package/dist/services/riser-diagram.d.ts.map +1 -0
  240. package/dist/services/riser-diagram.js +110 -0
  241. package/dist/services/riser-diagram.test.d.ts +2 -0
  242. package/dist/services/riser-diagram.test.d.ts.map +1 -0
  243. package/dist/services/riser-diagram.test.js +66 -0
  244. package/dist/services/snap.d.ts +9 -1
  245. package/dist/services/snap.d.ts.map +1 -1
  246. package/dist/services/snap.js +21 -1
  247. package/dist/services/snap.test.js +43 -1
  248. package/dist/services/system-graph.d.ts +30 -0
  249. package/dist/services/system-graph.d.ts.map +1 -0
  250. package/dist/services/system-graph.js +164 -0
  251. package/dist/services/system-graph.test.d.ts +2 -0
  252. package/dist/services/system-graph.test.d.ts.map +1 -0
  253. package/dist/services/system-graph.test.js +138 -0
  254. package/dist/services/validate-dwv.d.ts +32 -0
  255. package/dist/services/validate-dwv.d.ts.map +1 -0
  256. package/dist/services/validate-dwv.js +118 -0
  257. package/dist/services/validate-dwv.test.d.ts +2 -0
  258. package/dist/services/validate-dwv.test.d.ts.map +1 -0
  259. package/dist/services/validate-dwv.test.js +109 -0
  260. package/dist/store/actions/node-actions.d.ts.map +1 -1
  261. package/dist/store/actions/node-actions.js +94 -1
  262. package/dist/store/actions/ridge-vent-update.test.d.ts +2 -0
  263. package/dist/store/actions/ridge-vent-update.test.d.ts.map +1 -0
  264. package/dist/store/actions/ridge-vent-update.test.js +264 -0
  265. package/dist/store/history-control.d.ts +11 -0
  266. package/dist/store/history-control.d.ts.map +1 -1
  267. package/dist/store/history-control.js +33 -0
  268. package/dist/store/use-scene-dirty-tracking.test.d.ts +2 -0
  269. package/dist/store/use-scene-dirty-tracking.test.d.ts.map +1 -0
  270. package/dist/store/use-scene-dirty-tracking.test.js +68 -0
  271. package/dist/store/use-scene-measurement-roundtrip.test.d.ts +2 -0
  272. package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +1 -0
  273. package/dist/store/use-scene-measurement-roundtrip.test.js +97 -0
  274. package/dist/store/use-scene-plugins.test.d.ts +2 -0
  275. package/dist/store/use-scene-plugins.test.d.ts.map +1 -0
  276. package/dist/store/use-scene-plugins.test.js +51 -0
  277. package/dist/store/use-scene-wall-slot-migration.test.d.ts +2 -0
  278. package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +1 -0
  279. package/dist/store/use-scene-wall-slot-migration.test.js +210 -0
  280. package/dist/store/use-scene-window-migration.test.d.ts +2 -0
  281. package/dist/store/use-scene-window-migration.test.d.ts.map +1 -0
  282. package/dist/store/use-scene-window-migration.test.js +85 -0
  283. package/dist/store/use-scene.d.ts +17 -2
  284. package/dist/store/use-scene.d.ts.map +1 -1
  285. package/dist/store/use-scene.js +358 -51
  286. package/dist/systems/elevator/elevator-service.js +1 -1
  287. package/dist/systems/fence/fence-centerline.d.ts +12 -0
  288. package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
  289. package/dist/systems/fence/fence-centerline.js +37 -0
  290. package/dist/systems/fence/fence-spline.d.ts +39 -0
  291. package/dist/systems/fence/fence-spline.d.ts.map +1 -0
  292. package/dist/systems/fence/fence-spline.js +196 -0
  293. package/dist/systems/fence/fence-spline.test.d.ts +2 -0
  294. package/dist/systems/fence/fence-spline.test.d.ts.map +1 -0
  295. package/dist/systems/fence/fence-spline.test.js +136 -0
  296. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  297. package/dist/systems/stair/stair-footprint.js +21 -11
  298. package/dist/systems/stair/stair-opening-preview.d.ts +1139 -469
  299. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  300. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  301. package/dist/systems/stair/stair-opening-sync.js +1 -18
  302. package/dist/systems/stair/stair-opening-sync.test.js +39 -0
  303. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  304. package/dist/systems/wall/wall-mitering.js +38 -2
  305. package/dist/systems/wall/wall-mitering.test.d.ts +2 -0
  306. package/dist/systems/wall/wall-mitering.test.d.ts.map +1 -0
  307. package/dist/systems/wall/wall-mitering.test.js +63 -0
  308. package/dist/utils/clone-scene-graph.d.ts +1 -0
  309. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  310. package/dist/utils/clone-scene-graph.js +23 -3
  311. package/dist/utils/clone-scene-graph.test.js +3 -0
  312. package/dist/utils/heal-scene-graph.d.ts +18 -0
  313. package/dist/utils/heal-scene-graph.d.ts.map +1 -0
  314. package/dist/utils/heal-scene-graph.js +90 -0
  315. package/dist/utils/heal-scene-graph.test.d.ts +2 -0
  316. package/dist/utils/heal-scene-graph.test.d.ts.map +1 -0
  317. package/dist/utils/heal-scene-graph.test.js +88 -0
  318. package/dist/validation/validate-build-json.d.ts +1 -0
  319. package/dist/validation/validate-build-json.d.ts.map +1 -1
  320. package/dist/validation/validate-build-json.js +31 -2
  321. package/package.json +3 -3
@@ -29,20 +29,42 @@ const ROOF_TARGETS = [
29
29
  MaterialTargetSchema.enum.dormer,
30
30
  ];
31
31
  const CEILING_TARGETS = [MaterialTargetSchema.enum.ceiling];
32
- export const MATERIAL_CATEGORIES = ['wood', 'flooring', 'roof', 'other'];
32
+ export const MATERIAL_CATEGORIES = [
33
+ 'colors',
34
+ 'wood',
35
+ 'stone',
36
+ 'brick',
37
+ 'tile',
38
+ 'concrete',
39
+ 'metal',
40
+ 'fabric',
41
+ 'leather',
42
+ 'roofing',
43
+ 'ground',
44
+ 'glass',
45
+ ];
46
+ export const MATERIAL_SURFACES = [
47
+ 'floor',
48
+ 'wall',
49
+ 'ceiling',
50
+ 'roof',
51
+ 'furniture',
52
+ 'outdoor',
53
+ ];
33
54
  export const MATERIAL_CATALOG = [
34
55
  {
35
56
  id: 'wood-finewood27',
36
57
  label: 'Finewood 27',
37
58
  category: 'wood',
59
+ surfaces: ['floor', 'wall', 'furniture'],
38
60
  description: 'Fine wood finish',
39
- previewThumbnailUrl: '/material/wood/finewood_27/finewood_27_basecolor.webp',
61
+ previewThumbnailUrl: '/material/wood/finewood_27/finewood_27_thumb.webp',
40
62
  preset: {
41
63
  maps: {
42
- albedoMap: '/material/wood/finewood_27/finewood_27_basecolor.webp',
43
- aoMap: '/material/wood/finewood_27/finewood_27_ambientocclusion.webp',
44
- normalMap: '/material/wood/finewood_27/finewood_27_normal.webp',
45
- roughnessMap: '/material/wood/finewood_27/finewood_27_roughness.webp',
64
+ albedoMap: '/material/wood/finewood_27/finewood_27_basecolor_512.ktx2',
65
+ aoMap: '/material/wood/finewood_27/finewood_27_ao_512.ktx2',
66
+ normalMap: '/material/wood/finewood_27/finewood_27_normal_512.ktx2',
67
+ roughnessMap: '/material/wood/finewood_27/finewood_27_roughness_512.ktx2',
46
68
  },
47
69
  mapProperties: {
48
70
  color: '#ffffff',
@@ -58,7 +80,7 @@ export const MATERIAL_CATALOG = [
58
80
  emissiveIntensity: 1,
59
81
  displacementScale: 0,
60
82
  transparent: false,
61
- flipY: true,
83
+ flipY: false,
62
84
  bumpScale: 1,
63
85
  emissiveColor: '#000000',
64
86
  aoMapIntensity: 1,
@@ -72,14 +94,14 @@ export const MATERIAL_CATALOG = [
72
94
  id: 'wood-floorplank1',
73
95
  label: 'Floor Plank 1',
74
96
  category: 'wood',
97
+ surfaces: ['floor'],
75
98
  description: 'Wood plank finish',
76
- previewThumbnailUrl: '/material/wood/floor_plank_1/floor_plank-diffuse.webp',
99
+ previewThumbnailUrl: '/material/wood/floor_plank_1/floor_plank_1_thumb.webp',
77
100
  preset: {
78
101
  maps: {
79
- albedoMap: '/material/wood/floor_plank_1/floor_plank-diffuse.webp',
80
- aoMap: '/material/wood/floor_plank_1/floor_plank-ao.webp',
81
- metalnessMap: '/material/wood/floor_plank_1/floor_plank-specular.webp',
82
- normalMap: '/material/wood/floor_plank_1/floor_plank-normal.webp',
102
+ albedoMap: '/material/wood/floor_plank_1/floor_plank_1_basecolor_512.ktx2',
103
+ aoMap: '/material/wood/floor_plank_1/floor_plank_1_ao_512.ktx2',
104
+ normalMap: '/material/wood/floor_plank_1/floor_plank_1_normal_512.ktx2',
83
105
  },
84
106
  mapProperties: {
85
107
  color: '#ffffff',
@@ -95,7 +117,7 @@ export const MATERIAL_CATALOG = [
95
117
  emissiveIntensity: 1,
96
118
  displacementScale: 0,
97
119
  transparent: false,
98
- flipY: true,
120
+ flipY: false,
99
121
  bumpScale: 1,
100
122
  emissiveColor: '#000000',
101
123
  aoMapIntensity: 1,
@@ -109,14 +131,14 @@ export const MATERIAL_CATALOG = [
109
131
  id: 'wood-hungarianparquet10',
110
132
  label: 'Hungarian Parquet 10',
111
133
  category: 'wood',
134
+ surfaces: ['floor'],
112
135
  description: 'Parquet wood finish',
113
- previewThumbnailUrl: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_baseColor.webp',
136
+ previewThumbnailUrl: '/material/wood/hungarian_parquet_10/hungarian_parquet_10_thumb.webp',
114
137
  preset: {
115
138
  maps: {
116
- albedoMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_baseColor.webp',
117
- metalnessMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_specularLevel.webp',
118
- normalMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_normal.webp',
119
- roughnessMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_roughness.webp',
139
+ albedoMap: '/material/wood/hungarian_parquet_10/hungarian_parquet_10_basecolor_512.ktx2',
140
+ normalMap: '/material/wood/hungarian_parquet_10/hungarian_parquet_10_normal_512.ktx2',
141
+ roughnessMap: '/material/wood/hungarian_parquet_10/hungarian_parquet_10_roughness_512.ktx2',
120
142
  },
121
143
  mapProperties: {
122
144
  color: '#ffffff',
@@ -132,7 +154,7 @@ export const MATERIAL_CATALOG = [
132
154
  emissiveIntensity: 1,
133
155
  displacementScale: 0,
134
156
  transparent: false,
135
- flipY: true,
157
+ flipY: false,
136
158
  bumpScale: 1,
137
159
  emissiveColor: '#000000',
138
160
  aoMapIntensity: 1,
@@ -146,14 +168,14 @@ export const MATERIAL_CATALOG = [
146
168
  id: 'wood-hungarianparquet2',
147
169
  label: 'Hungarian Parquet 2',
148
170
  category: 'wood',
171
+ surfaces: ['floor'],
149
172
  description: 'Parquet wood finish',
150
- previewThumbnailUrl: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_baseColor.webp',
173
+ previewThumbnailUrl: '/material/wood/hungarian_parquet_2/hungarian_parquet_2_thumb.webp',
151
174
  preset: {
152
175
  maps: {
153
- albedoMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_baseColor.webp',
154
- metalnessMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_specularLevel.webp',
155
- normalMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_normal.webp',
156
- roughnessMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_roughness.webp',
176
+ albedoMap: '/material/wood/hungarian_parquet_2/hungarian_parquet_2_basecolor_512.ktx2',
177
+ normalMap: '/material/wood/hungarian_parquet_2/hungarian_parquet_2_normal_512.ktx2',
178
+ roughnessMap: '/material/wood/hungarian_parquet_2/hungarian_parquet_2_roughness_512.ktx2',
157
179
  },
158
180
  mapProperties: {
159
181
  color: '#ffffff',
@@ -169,7 +191,7 @@ export const MATERIAL_CATALOG = [
169
191
  emissiveIntensity: 1,
170
192
  displacementScale: 0,
171
193
  transparent: false,
172
- flipY: true,
194
+ flipY: false,
173
195
  bumpScale: 1,
174
196
  emissiveColor: '#000000',
175
197
  aoMapIntensity: 1,
@@ -183,14 +205,14 @@ export const MATERIAL_CATALOG = [
183
205
  id: 'wood-squareparquet21',
184
206
  label: 'Square Parquet 21',
185
207
  category: 'wood',
208
+ surfaces: ['floor'],
186
209
  description: 'Parquet wood finish',
187
- previewThumbnailUrl: '/material/wood/square_parquet_21/Square Pattern Parquet_21_baseColor.webp',
210
+ previewThumbnailUrl: '/material/wood/square_parquet_21/square_parquet_21_thumb.webp',
188
211
  preset: {
189
212
  maps: {
190
- albedoMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_baseColor.webp',
191
- metalnessMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_specularLevel.webp',
192
- normalMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_normal.webp',
193
- roughnessMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_roughness.webp',
213
+ albedoMap: '/material/wood/square_parquet_21/square_parquet_21_basecolor_512.ktx2',
214
+ normalMap: '/material/wood/square_parquet_21/square_parquet_21_normal_512.ktx2',
215
+ roughnessMap: '/material/wood/square_parquet_21/square_parquet_21_roughness_512.ktx2',
194
216
  },
195
217
  mapProperties: {
196
218
  color: '#ffffff',
@@ -206,7 +228,7 @@ export const MATERIAL_CATALOG = [
206
228
  emissiveIntensity: 1,
207
229
  displacementScale: 0,
208
230
  transparent: false,
209
- flipY: true,
231
+ flipY: false,
210
232
  bumpScale: 1,
211
233
  emissiveColor: '#000000',
212
234
  aoMapIntensity: 1,
@@ -220,14 +242,14 @@ export const MATERIAL_CATALOG = [
220
242
  id: 'wood-squareparquet23',
221
243
  label: 'Square Parquet 23',
222
244
  category: 'wood',
245
+ surfaces: ['floor'],
223
246
  description: 'Parquet wood finish',
224
- previewThumbnailUrl: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_baseColor.webp',
247
+ previewThumbnailUrl: '/material/wood/square_wood_parquet_23/square_wood_parquet_23_thumb.webp',
225
248
  preset: {
226
249
  maps: {
227
- albedoMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_baseColor.webp',
228
- metalnessMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_specularLevel.webp',
229
- normalMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_normal.webp',
230
- roughnessMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_roughness.webp',
250
+ albedoMap: '/material/wood/square_wood_parquet_23/square_wood_parquet_23_basecolor_512.ktx2',
251
+ normalMap: '/material/wood/square_wood_parquet_23/square_wood_parquet_23_normal_512.ktx2',
252
+ roughnessMap: '/material/wood/square_wood_parquet_23/square_wood_parquet_23_roughness_512.ktx2',
231
253
  },
232
254
  mapProperties: {
233
255
  color: '#ffffff',
@@ -243,7 +265,7 @@ export const MATERIAL_CATALOG = [
243
265
  emissiveIntensity: 1,
244
266
  displacementScale: 0,
245
267
  transparent: false,
246
- flipY: true,
268
+ flipY: false,
247
269
  bumpScale: 1,
248
270
  emissiveColor: '#000000',
249
271
  aoMapIntensity: 1,
@@ -257,14 +279,14 @@ export const MATERIAL_CATALOG = [
257
279
  id: 'wood-woodfine1',
258
280
  label: 'Wood Fine 1',
259
281
  category: 'wood',
282
+ surfaces: ['floor', 'wall', 'furniture'],
260
283
  description: 'Fine wood finish',
261
- previewThumbnailUrl: '/material/wood/wood_fine/wood_fine_1-diffuse.webp',
284
+ previewThumbnailUrl: '/material/wood/wood_fine/wood_fine_thumb.webp',
262
285
  preset: {
263
286
  maps: {
264
- albedoMap: '/material/wood/wood_fine/wood_fine_1-diffuse.webp',
265
- aoMap: '/material/wood/wood_fine/wood_fine_1-ao.webp',
266
- metalnessMap: '/material/wood/wood_fine/wood_fine_1-specular.webp',
267
- normalMap: '/material/wood/wood_fine/wood_fine_1-normal.webp',
287
+ albedoMap: '/material/wood/wood_fine/wood_fine_basecolor_512.ktx2',
288
+ aoMap: '/material/wood/wood_fine/wood_fine_ao_512.ktx2',
289
+ normalMap: '/material/wood/wood_fine/wood_fine_normal_512.ktx2',
268
290
  },
269
291
  mapProperties: {
270
292
  color: '#ffffff',
@@ -280,7 +302,7 @@ export const MATERIAL_CATALOG = [
280
302
  emissiveIntensity: 1,
281
303
  displacementScale: 0,
282
304
  transparent: false,
283
- flipY: true,
305
+ flipY: false,
284
306
  bumpScale: 1,
285
307
  emissiveColor: '#000000',
286
308
  aoMapIntensity: 1,
@@ -294,14 +316,14 @@ export const MATERIAL_CATALOG = [
294
316
  id: 'wood-woodfine11',
295
317
  label: 'Wood Fine 11',
296
318
  category: 'wood',
319
+ surfaces: ['floor', 'wall', 'furniture'],
297
320
  description: 'Fine wood finish',
298
- previewThumbnailUrl: '/material/wood/wood_fine_11/wood_fine_11-diffuse.webp',
321
+ previewThumbnailUrl: '/material/wood/wood_fine_11/wood_fine_11_thumb.webp',
299
322
  preset: {
300
323
  maps: {
301
- albedoMap: '/material/wood/wood_fine_11/wood_fine_11-diffuse.webp',
302
- aoMap: '/material/wood/wood_fine_11/wood_fine_11-ao.webp',
303
- metalnessMap: '/material/wood/wood_fine_11/wood_fine_11-specular.webp',
304
- normalMap: '/material/wood/wood_fine_11/wood_fine_11-normal.webp',
324
+ albedoMap: '/material/wood/wood_fine_11/wood_fine_11_basecolor_512.ktx2',
325
+ aoMap: '/material/wood/wood_fine_11/wood_fine_11_ao_512.ktx2',
326
+ normalMap: '/material/wood/wood_fine_11/wood_fine_11_normal_512.ktx2',
305
327
  },
306
328
  mapProperties: {
307
329
  color: '#ffffff',
@@ -317,7 +339,7 @@ export const MATERIAL_CATALOG = [
317
339
  emissiveIntensity: 1,
318
340
  displacementScale: 0,
319
341
  transparent: false,
320
- flipY: true,
342
+ flipY: false,
321
343
  bumpScale: 1,
322
344
  emissiveColor: '#000000',
323
345
  aoMapIntensity: 1,
@@ -331,14 +353,14 @@ export const MATERIAL_CATALOG = [
331
353
  id: 'wood-woodfine13',
332
354
  label: 'Wood Fine 13',
333
355
  category: 'wood',
356
+ surfaces: ['floor', 'wall', 'furniture'],
334
357
  description: 'Fine wood finish',
335
- previewThumbnailUrl: '/material/wood/wood_fine_13/wood_fine_13-diffuse.webp',
358
+ previewThumbnailUrl: '/material/wood/wood_fine_13/wood_fine_13_thumb.webp',
336
359
  preset: {
337
360
  maps: {
338
- albedoMap: '/material/wood/wood_fine_13/wood_fine_13-diffuse.webp',
339
- aoMap: '/material/wood/wood_fine_13/wood_fine_13-ao.webp',
340
- metalnessMap: '/material/wood/wood_fine_13/wood_fine_13-specular.webp',
341
- normalMap: '/material/wood/wood_fine_13/wood_fine_13-normal.webp',
361
+ albedoMap: '/material/wood/wood_fine_13/wood_fine_13_basecolor_512.ktx2',
362
+ aoMap: '/material/wood/wood_fine_13/wood_fine_13_ao_512.ktx2',
363
+ normalMap: '/material/wood/wood_fine_13/wood_fine_13_normal_512.ktx2',
342
364
  },
343
365
  mapProperties: {
344
366
  color: '#ffffff',
@@ -354,7 +376,7 @@ export const MATERIAL_CATALOG = [
354
376
  emissiveIntensity: 1,
355
377
  displacementScale: 0,
356
378
  transparent: false,
357
- flipY: true,
379
+ flipY: false,
358
380
  bumpScale: 1,
359
381
  emissiveColor: '#000000',
360
382
  aoMapIntensity: 1,
@@ -368,14 +390,14 @@ export const MATERIAL_CATALOG = [
368
390
  id: 'wood-woodfine2',
369
391
  label: 'Wood Fine 2',
370
392
  category: 'wood',
393
+ surfaces: ['floor', 'wall', 'furniture'],
371
394
  description: 'Fine wood finish',
372
- previewThumbnailUrl: '/material/wood/wood_fine_2/wood_fine_2-diffuse.webp',
395
+ previewThumbnailUrl: '/material/wood/wood_fine_2/wood_fine_2_thumb.webp',
373
396
  preset: {
374
397
  maps: {
375
- albedoMap: '/material/wood/wood_fine_2/wood_fine_2-diffuse.webp',
376
- aoMap: '/material/wood/wood_fine_2/wood_fine_2-ao.webp',
377
- metalnessMap: '/material/wood/wood_fine_2/wood_fine_2-specular.webp',
378
- normalMap: '/material/wood/wood_fine_2/wood_fine_2-normal.webp',
398
+ albedoMap: '/material/wood/wood_fine_2/wood_fine_2_basecolor_512.ktx2',
399
+ aoMap: '/material/wood/wood_fine_2/wood_fine_2_ao_512.ktx2',
400
+ normalMap: '/material/wood/wood_fine_2/wood_fine_2_normal_512.ktx2',
379
401
  },
380
402
  mapProperties: {
381
403
  color: '#ffffff',
@@ -391,7 +413,7 @@ export const MATERIAL_CATALOG = [
391
413
  emissiveIntensity: 1,
392
414
  displacementScale: 0,
393
415
  transparent: false,
394
- flipY: true,
416
+ flipY: false,
395
417
  bumpScale: 1,
396
418
  emissiveColor: '#000000',
397
419
  aoMapIntensity: 1,
@@ -405,14 +427,14 @@ export const MATERIAL_CATALOG = [
405
427
  id: 'wood-woodfine22',
406
428
  label: 'Wood Fine 22',
407
429
  category: 'wood',
430
+ surfaces: ['floor', 'wall', 'furniture'],
408
431
  description: 'Fine wood finish',
409
- previewThumbnailUrl: '/material/wood/wood_fine_22/wood_fine_22-diffuse.webp',
432
+ previewThumbnailUrl: '/material/wood/wood_fine_22/wood_fine_22_thumb.webp',
410
433
  preset: {
411
434
  maps: {
412
- albedoMap: '/material/wood/wood_fine_22/wood_fine_22-diffuse.webp',
413
- aoMap: '/material/wood/wood_fine_22/wood_fine_22-ao.webp',
414
- metalnessMap: '/material/wood/wood_fine_22/wood_fine_22-specular.webp',
415
- normalMap: '/material/wood/wood_fine_22/wood_fine_22-normal.webp',
435
+ albedoMap: '/material/wood/wood_fine_22/wood_fine_22_basecolor_512.ktx2',
436
+ aoMap: '/material/wood/wood_fine_22/wood_fine_22_ao_512.ktx2',
437
+ normalMap: '/material/wood/wood_fine_22/wood_fine_22_normal_512.ktx2',
416
438
  },
417
439
  mapProperties: {
418
440
  color: '#ffffff',
@@ -428,7 +450,7 @@ export const MATERIAL_CATALOG = [
428
450
  emissiveIntensity: 1,
429
451
  displacementScale: 0,
430
452
  transparent: false,
431
- flipY: true,
453
+ flipY: false,
432
454
  bumpScale: 1,
433
455
  emissiveColor: '#000000',
434
456
  aoMapIntensity: 1,
@@ -442,14 +464,14 @@ export const MATERIAL_CATALOG = [
442
464
  id: 'wood-woodfine24',
443
465
  label: 'Wood Fine 24',
444
466
  category: 'wood',
467
+ surfaces: ['floor', 'wall', 'furniture'],
445
468
  description: 'Fine wood finish',
446
- previewThumbnailUrl: '/material/wood/wood_fine_24/wood_fine_24-diffuse.webp',
469
+ previewThumbnailUrl: '/material/wood/wood_fine_24/wood_fine_24_thumb.webp',
447
470
  preset: {
448
471
  maps: {
449
- albedoMap: '/material/wood/wood_fine_24/wood_fine_24-diffuse.webp',
450
- aoMap: '/material/wood/wood_fine_24/wood_fine_24-ao.webp',
451
- metalnessMap: '/material/wood/wood_fine_24/wood_fine_24-specular.webp',
452
- normalMap: '/material/wood/wood_fine_24/wood_fine_24-normal.webp',
472
+ albedoMap: '/material/wood/wood_fine_24/wood_fine_24_basecolor_512.ktx2',
473
+ aoMap: '/material/wood/wood_fine_24/wood_fine_24_ao_512.ktx2',
474
+ normalMap: '/material/wood/wood_fine_24/wood_fine_24_normal_512.ktx2',
453
475
  },
454
476
  mapProperties: {
455
477
  color: '#ffffff',
@@ -465,7 +487,7 @@ export const MATERIAL_CATALOG = [
465
487
  emissiveIntensity: 1,
466
488
  displacementScale: 0,
467
489
  transparent: false,
468
- flipY: true,
490
+ flipY: false,
469
491
  bumpScale: 1,
470
492
  emissiveColor: '#000000',
471
493
  aoMapIntensity: 1,
@@ -479,15 +501,16 @@ export const MATERIAL_CATALOG = [
479
501
  id: 'wood-woodparquet14',
480
502
  label: 'Wood Parquet 14',
481
503
  category: 'wood',
504
+ surfaces: ['floor'],
482
505
  description: 'Parquet wood finish',
483
- previewThumbnailUrl: '/material/wood/wood_parquet_14/woodparquet_14_basecolor.webp',
506
+ previewThumbnailUrl: '/material/wood/wood_parquet_14/wood_parquet_14_thumb.webp',
484
507
  preset: {
485
508
  maps: {
486
- albedoMap: '/material/wood/wood_parquet_14/woodparquet_14_basecolor.webp',
487
- aoMap: '/material/wood/wood_parquet_14/woodparquet_14_ambientocclusion.webp',
488
- metalnessMap: '/material/wood/wood_parquet_14/woodparquet_14_metallic.webp',
489
- normalMap: '/material/wood/wood_parquet_14/woodparquet_14_normal.webp',
490
- roughnessMap: '/material/wood/wood_parquet_14/woodparquet_14_roughness.webp',
509
+ albedoMap: '/material/wood/wood_parquet_14/wood_parquet_14_basecolor_512.ktx2',
510
+ aoMap: '/material/wood/wood_parquet_14/wood_parquet_14_ao_512.ktx2',
511
+ metalnessMap: '/material/wood/wood_parquet_14/wood_parquet_14_metallic_512.ktx2',
512
+ normalMap: '/material/wood/wood_parquet_14/wood_parquet_14_normal_512.ktx2',
513
+ roughnessMap: '/material/wood/wood_parquet_14/wood_parquet_14_roughness_512.ktx2',
491
514
  },
492
515
  mapProperties: {
493
516
  color: '#ffffff',
@@ -503,7 +526,7 @@ export const MATERIAL_CATALOG = [
503
526
  emissiveIntensity: 1,
504
527
  displacementScale: 0,
505
528
  transparent: false,
506
- flipY: true,
529
+ flipY: false,
507
530
  bumpScale: 1,
508
531
  emissiveColor: '#000000',
509
532
  aoMapIntensity: 1,
@@ -517,14 +540,14 @@ export const MATERIAL_CATALOG = [
517
540
  id: 'wood-woodenparquet11',
518
541
  label: 'Wooden Parquet 11',
519
542
  category: 'wood',
543
+ surfaces: ['floor'],
520
544
  description: 'Parquet wood finish',
521
- previewThumbnailUrl: '/material/wood/wooden_parquet_11/Classic Parquet_11_baseColor.webp',
545
+ previewThumbnailUrl: '/material/wood/wooden_parquet_11/wooden_parquet_11_thumb.webp',
522
546
  preset: {
523
547
  maps: {
524
- albedoMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_baseColor.webp',
525
- metalnessMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_specularLevel.webp',
526
- normalMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_normal.webp',
527
- roughnessMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_roughness.webp',
548
+ albedoMap: '/material/wood/wooden_parquet_11/wooden_parquet_11_basecolor_512.ktx2',
549
+ normalMap: '/material/wood/wooden_parquet_11/wooden_parquet_11_normal_512.ktx2',
550
+ roughnessMap: '/material/wood/wooden_parquet_11/wooden_parquet_11_roughness_512.ktx2',
528
551
  },
529
552
  mapProperties: {
530
553
  color: '#ffffff',
@@ -540,7 +563,7 @@ export const MATERIAL_CATALOG = [
540
563
  emissiveIntensity: 1,
541
564
  displacementScale: 0,
542
565
  transparent: false,
543
- flipY: true,
566
+ flipY: false,
544
567
  bumpScale: 1,
545
568
  emissiveColor: '#000000',
546
569
  aoMapIntensity: 1,
@@ -554,14 +577,15 @@ export const MATERIAL_CATALOG = [
554
577
  id: 'wood-woodparquet121',
555
578
  label: 'Wood Parquet 121',
556
579
  category: 'wood',
580
+ surfaces: ['floor'],
557
581
  description: 'Parquet wood finish',
558
- previewThumbnailUrl: '/material/wood/woodparquet_121/woodparquet_121_basecolor.webp',
582
+ previewThumbnailUrl: '/material/wood/woodparquet_121/woodparquet_121_thumb.webp',
559
583
  preset: {
560
584
  maps: {
561
- albedoMap: '/material/wood/woodparquet_121/woodparquet_121_basecolor.webp',
562
- aoMap: '/material/wood/woodparquet_121/woodparquet_121_ambientocclusion.webp',
563
- normalMap: '/material/wood/woodparquet_121/woodparquet_121_normal.webp',
564
- roughnessMap: '/material/wood/woodparquet_121/woodparquet_121_roughness.webp',
585
+ albedoMap: '/material/wood/woodparquet_121/woodparquet_121_basecolor_512.ktx2',
586
+ aoMap: '/material/wood/woodparquet_121/woodparquet_121_ao_512.ktx2',
587
+ normalMap: '/material/wood/woodparquet_121/woodparquet_121_normal_512.ktx2',
588
+ roughnessMap: '/material/wood/woodparquet_121/woodparquet_121_roughness_512.ktx2',
565
589
  },
566
590
  mapProperties: {
567
591
  color: '#ffffff',
@@ -577,7 +601,7 @@ export const MATERIAL_CATALOG = [
577
601
  emissiveIntensity: 1,
578
602
  displacementScale: 0,
579
603
  transparent: false,
580
- flipY: true,
604
+ flipY: false,
581
605
  bumpScale: 1,
582
606
  emissiveColor: '#000000',
583
607
  aoMapIntensity: 1,
@@ -591,15 +615,16 @@ export const MATERIAL_CATALOG = [
591
615
  id: 'wood-woodparquet56',
592
616
  label: 'Wood Parquet 56',
593
617
  category: 'wood',
618
+ surfaces: ['floor'],
594
619
  description: 'Parquet wood finish',
595
- previewThumbnailUrl: '/material/wood/woodparquet_56/woodparquet_56_basecolor.webp',
620
+ previewThumbnailUrl: '/material/wood/woodparquet_56/woodparquet_56_thumb.webp',
596
621
  preset: {
597
622
  maps: {
598
- albedoMap: '/material/wood/woodparquet_56/woodparquet_56_basecolor.webp',
599
- aoMap: '/material/wood/woodparquet_56/woodparquet_56_ambientocclusion.webp',
600
- metalnessMap: '/material/wood/woodparquet_56/woodparquet_56_metallic.webp',
601
- normalMap: '/material/wood/woodparquet_56/woodparquet_56_normal.webp',
602
- roughnessMap: '/material/wood/woodparquet_56/woodparquet_56_roughness.webp',
623
+ albedoMap: '/material/wood/woodparquet_56/woodparquet_56_basecolor_512.ktx2',
624
+ aoMap: '/material/wood/woodparquet_56/woodparquet_56_ao_512.ktx2',
625
+ metalnessMap: '/material/wood/woodparquet_56/woodparquet_56_metallic_512.ktx2',
626
+ normalMap: '/material/wood/woodparquet_56/woodparquet_56_normal_512.ktx2',
627
+ roughnessMap: '/material/wood/woodparquet_56/woodparquet_56_roughness_512.ktx2',
603
628
  },
604
629
  mapProperties: {
605
630
  color: '#ffffff',
@@ -615,7 +640,7 @@ export const MATERIAL_CATALOG = [
615
640
  emissiveIntensity: 1,
616
641
  displacementScale: 0,
617
642
  transparent: false,
618
- flipY: true,
643
+ flipY: false,
619
644
  bumpScale: 1,
620
645
  emissiveColor: '#000000',
621
646
  aoMapIntensity: 1,
@@ -629,15 +654,16 @@ export const MATERIAL_CATALOG = [
629
654
  id: 'wood-woodparquet65',
630
655
  label: 'Wood Parquet 65',
631
656
  category: 'wood',
657
+ surfaces: ['floor'],
632
658
  description: 'Parquet wood finish',
633
- previewThumbnailUrl: '/material/wood/woodparquet_65/woodparquet_65_BaseColor.webp',
659
+ previewThumbnailUrl: '/material/wood/woodparquet_65/woodparquet_65_thumb.webp',
634
660
  preset: {
635
661
  maps: {
636
- albedoMap: '/material/wood/woodparquet_65/woodparquet_65_BaseColor.webp',
637
- aoMap: '/material/wood/woodparquet_65/woodparquet_65_AmbientOcclusion.webp',
638
- metalnessMap: '/material/wood/woodparquet_65/woodparquet_65_Metallic.webp',
639
- normalMap: '/material/wood/woodparquet_65/woodparquet_65_Normal.webp',
640
- roughnessMap: '/material/wood/woodparquet_65/woodparquet_65_Roughness.webp',
662
+ albedoMap: '/material/wood/woodparquet_65/woodparquet_65_basecolor_512.ktx2',
663
+ aoMap: '/material/wood/woodparquet_65/woodparquet_65_ao_512.ktx2',
664
+ metalnessMap: '/material/wood/woodparquet_65/woodparquet_65_metallic_512.ktx2',
665
+ normalMap: '/material/wood/woodparquet_65/woodparquet_65_normal_512.ktx2',
666
+ roughnessMap: '/material/wood/woodparquet_65/woodparquet_65_roughness_512.ktx2',
641
667
  },
642
668
  mapProperties: {
643
669
  color: '#ffffff',
@@ -653,7 +679,7 @@ export const MATERIAL_CATALOG = [
653
679
  emissiveIntensity: 1,
654
680
  displacementScale: 0,
655
681
  transparent: false,
656
- flipY: true,
682
+ flipY: false,
657
683
  bumpScale: 1,
658
684
  emissiveColor: '#000000',
659
685
  aoMapIntensity: 1,
@@ -667,15 +693,16 @@ export const MATERIAL_CATALOG = [
667
693
  id: 'wood-woodparquet99',
668
694
  label: 'Wood Parquet 99',
669
695
  category: 'wood',
696
+ surfaces: ['floor'],
670
697
  description: 'Parquet wood finish',
671
- previewThumbnailUrl: '/material/wood/woodparquet_99/woodparquet_99_basecolor.webp',
698
+ previewThumbnailUrl: '/material/wood/woodparquet_99/woodparquet_99_thumb.webp',
672
699
  preset: {
673
700
  maps: {
674
- albedoMap: '/material/wood/woodparquet_99/woodparquet_99_basecolor.webp',
675
- aoMap: '/material/wood/woodparquet_99/woodparquet_99_ambientocclusion.webp',
676
- metalnessMap: '/material/wood/woodparquet_99/woodparquet_99_metallic.webp',
677
- normalMap: '/material/wood/woodparquet_99/woodparquet_99_normal.webp',
678
- roughnessMap: '/material/wood/woodparquet_99/woodparquet_99_roughness.webp',
701
+ albedoMap: '/material/wood/woodparquet_99/woodparquet_99_basecolor_512.ktx2',
702
+ aoMap: '/material/wood/woodparquet_99/woodparquet_99_ao_512.ktx2',
703
+ metalnessMap: '/material/wood/woodparquet_99/woodparquet_99_metallic_512.ktx2',
704
+ normalMap: '/material/wood/woodparquet_99/woodparquet_99_normal_512.ktx2',
705
+ roughnessMap: '/material/wood/woodparquet_99/woodparquet_99_roughness_512.ktx2',
679
706
  },
680
707
  mapProperties: {
681
708
  color: '#ffffff',
@@ -691,7 +718,7 @@ export const MATERIAL_CATALOG = [
691
718
  emissiveIntensity: 1,
692
719
  displacementScale: 0,
693
720
  transparent: false,
694
- flipY: true,
721
+ flipY: false,
695
722
  bumpScale: 1,
696
723
  emissiveColor: '#000000',
697
724
  aoMapIntensity: 1,
@@ -705,14 +732,15 @@ export const MATERIAL_CATALOG = [
705
732
  id: 'wood-woodplank19',
706
733
  label: 'Wood Plank 19',
707
734
  category: 'wood',
735
+ surfaces: ['floor', 'wall'],
708
736
  description: 'Wood plank finish',
709
- previewThumbnailUrl: '/material/wood/woodplank_19/woodplank_19_basecolor.webp',
737
+ previewThumbnailUrl: '/material/wood/woodplank_19/woodplank_19_thumb.webp',
710
738
  preset: {
711
739
  maps: {
712
- albedoMap: '/material/wood/woodplank_19/woodplank_19_basecolor.webp',
713
- aoMap: '/material/wood/woodplank_19/woodplank_19_ambientocclusion.webp',
714
- normalMap: '/material/wood/woodplank_19/woodplank_19_normal.webp',
715
- roughnessMap: '/material/wood/woodplank_19/woodplank_19_roughness.webp',
740
+ albedoMap: '/material/wood/woodplank_19/woodplank_19_basecolor_512.ktx2',
741
+ aoMap: '/material/wood/woodplank_19/woodplank_19_ao_512.ktx2',
742
+ normalMap: '/material/wood/woodplank_19/woodplank_19_normal_512.ktx2',
743
+ roughnessMap: '/material/wood/woodplank_19/woodplank_19_roughness_512.ktx2',
716
744
  },
717
745
  mapProperties: {
718
746
  color: '#ffffff',
@@ -728,7 +756,7 @@ export const MATERIAL_CATALOG = [
728
756
  emissiveIntensity: 1,
729
757
  displacementScale: 0,
730
758
  transparent: false,
731
- flipY: true,
759
+ flipY: false,
732
760
  bumpScale: 1,
733
761
  emissiveColor: '#000000',
734
762
  aoMapIntensity: 1,
@@ -742,14 +770,15 @@ export const MATERIAL_CATALOG = [
742
770
  id: 'wood-woodplank48',
743
771
  label: 'Wood Plank 48',
744
772
  category: 'wood',
773
+ surfaces: ['floor', 'wall'],
745
774
  description: 'Wood plank finish',
746
- previewThumbnailUrl: '/material/wood/woodplank_48/woodplank_48_BaseColor.webp',
775
+ previewThumbnailUrl: '/material/wood/woodplank_48/woodplank_48_thumb.webp',
747
776
  preset: {
748
777
  maps: {
749
- albedoMap: '/material/wood/woodplank_48/woodplank_48_BaseColor.webp',
750
- aoMap: '/material/wood/woodplank_48/woodplank_48_AmbientOcclusion.webp',
751
- normalMap: '/material/wood/woodplank_48/woodplank_48_Normal.webp',
752
- roughnessMap: '/material/wood/woodplank_48/woodplank_48_Roughness.webp',
778
+ albedoMap: '/material/wood/woodplank_48/woodplank_48_basecolor_512.ktx2',
779
+ aoMap: '/material/wood/woodplank_48/woodplank_48_ao_512.ktx2',
780
+ normalMap: '/material/wood/woodplank_48/woodplank_48_normal_512.ktx2',
781
+ roughnessMap: '/material/wood/woodplank_48/woodplank_48_roughness_512.ktx2',
753
782
  },
754
783
  mapProperties: {
755
784
  color: '#ffffff',
@@ -765,7 +794,7 @@ export const MATERIAL_CATALOG = [
765
794
  emissiveIntensity: 1,
766
795
  displacementScale: 0,
767
796
  transparent: false,
768
- flipY: true,
797
+ flipY: false,
769
798
  bumpScale: 1,
770
799
  emissiveColor: '#000000',
771
800
  aoMapIntensity: 1,
@@ -778,15 +807,16 @@ export const MATERIAL_CATALOG = [
778
807
  {
779
808
  id: 'flooring-tile85a',
780
809
  label: 'Quarry Tile',
781
- category: 'flooring',
810
+ category: 'tile',
811
+ surfaces: ['floor'],
782
812
  description: 'Floor tile finish',
783
- previewThumbnailUrl: '/material/flooring/tile_quarry/tile_quarry_basecolor.webp',
813
+ previewThumbnailUrl: '/material/flooring/tile_quarry/tile_quarry_thumb.webp',
784
814
  preset: {
785
815
  maps: {
786
- albedoMap: '/material/flooring/tile_quarry/tile_quarry_basecolor.webp',
787
- aoMap: '/material/flooring/tile_quarry/tile_quarry_ambientocclusion.webp',
788
- normalMap: '/material/flooring/tile_quarry/tile_quarry_normal.webp',
789
- roughnessMap: '/material/flooring/tile_quarry/tile_quarry_roughness.webp',
816
+ albedoMap: '/material/flooring/tile_quarry/tile_quarry_basecolor_512.ktx2',
817
+ aoMap: '/material/flooring/tile_quarry/tile_quarry_ao_512.ktx2',
818
+ normalMap: '/material/flooring/tile_quarry/tile_quarry_normal_512.ktx2',
819
+ roughnessMap: '/material/flooring/tile_quarry/tile_quarry_roughness_512.ktx2',
790
820
  },
791
821
  mapProperties: {
792
822
  color: '#ffffff',
@@ -802,7 +832,7 @@ export const MATERIAL_CATALOG = [
802
832
  emissiveIntensity: 1,
803
833
  displacementScale: 0,
804
834
  transparent: false,
805
- flipY: true,
835
+ flipY: false,
806
836
  bumpScale: 1,
807
837
  emissiveColor: '#000000',
808
838
  aoMapIntensity: 1,
@@ -815,16 +845,17 @@ export const MATERIAL_CATALOG = [
815
845
  {
816
846
  id: 'flooring-rusticbrick',
817
847
  label: 'Rustic Brick',
818
- category: 'flooring',
848
+ category: 'brick',
849
+ surfaces: ['wall', 'floor', 'outdoor'],
819
850
  description: 'Brick finish',
820
- previewThumbnailUrl: '/material/flooring/brick_wall_rustic/brick_wall_rustic_basecolor.jpg',
851
+ previewThumbnailUrl: '/material/flooring/brick_wall_rustic/brick_wall_rustic_thumb.webp',
821
852
  preset: {
822
853
  maps: {
823
- albedoMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_basecolor.jpg',
824
- aoMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_ambientocclusion.jpg',
825
- metalnessMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_metallic.jpg',
826
- normalMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_normal.jpg',
827
- roughnessMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_roughness.jpg',
854
+ albedoMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_basecolor_512.ktx2',
855
+ aoMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_ao_512.ktx2',
856
+ metalnessMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_metallic_512.ktx2',
857
+ normalMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_normal_512.ktx2',
858
+ roughnessMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_roughness_512.ktx2',
828
859
  },
829
860
  mapProperties: {
830
861
  color: '#ffffff',
@@ -840,7 +871,7 @@ export const MATERIAL_CATALOG = [
840
871
  emissiveIntensity: 1,
841
872
  displacementScale: 0,
842
873
  transparent: false,
843
- flipY: true,
874
+ flipY: false,
844
875
  bumpScale: 1,
845
876
  emissiveColor: '#000000',
846
877
  aoMapIntensity: 1,
@@ -853,16 +884,17 @@ export const MATERIAL_CATALOG = [
853
884
  {
854
885
  id: 'flooring-agedbrick',
855
886
  label: 'Aged Brick',
856
- category: 'flooring',
887
+ category: 'brick',
888
+ surfaces: ['wall', 'floor', 'outdoor'],
857
889
  description: 'Brick finish',
858
- previewThumbnailUrl: '/material/flooring/brick_wall_aged/brick_wall_aged_basecolor.jpg',
890
+ previewThumbnailUrl: '/material/flooring/brick_wall_aged/brick_wall_aged_thumb.webp',
859
891
  preset: {
860
892
  maps: {
861
- albedoMap: '/material/flooring/brick_wall_aged/brick_wall_aged_basecolor.jpg',
862
- aoMap: '/material/flooring/brick_wall_aged/brick_wall_aged_ambientocclusion.jpg',
863
- metalnessMap: '/material/flooring/brick_wall_aged/brick_wall_aged_metallic.jpg',
864
- normalMap: '/material/flooring/brick_wall_aged/brick_wall_aged_normal.jpg',
865
- roughnessMap: '/material/flooring/brick_wall_aged/brick_wall_aged_roughness.jpg',
893
+ albedoMap: '/material/flooring/brick_wall_aged/brick_wall_aged_basecolor_512.ktx2',
894
+ aoMap: '/material/flooring/brick_wall_aged/brick_wall_aged_ao_512.ktx2',
895
+ metalnessMap: '/material/flooring/brick_wall_aged/brick_wall_aged_metallic_512.ktx2',
896
+ normalMap: '/material/flooring/brick_wall_aged/brick_wall_aged_normal_512.ktx2',
897
+ roughnessMap: '/material/flooring/brick_wall_aged/brick_wall_aged_roughness_512.ktx2',
866
898
  },
867
899
  mapProperties: {
868
900
  color: '#ffffff',
@@ -878,7 +910,7 @@ export const MATERIAL_CATALOG = [
878
910
  emissiveIntensity: 1,
879
911
  displacementScale: 0,
880
912
  transparent: false,
881
- flipY: true,
913
+ flipY: false,
882
914
  bumpScale: 1,
883
915
  emissiveColor: '#000000',
884
916
  aoMapIntensity: 1,
@@ -891,15 +923,16 @@ export const MATERIAL_CATALOG = [
891
923
  {
892
924
  id: 'flooring-weatheredbrick',
893
925
  label: 'Weathered Brick',
894
- category: 'flooring',
926
+ category: 'brick',
927
+ surfaces: ['wall', 'floor', 'outdoor'],
895
928
  description: 'Brick finish',
896
- previewThumbnailUrl: '/material/flooring/brick_wall_weathered/brick_wall_weathered_basecolor.jpg',
929
+ previewThumbnailUrl: '/material/flooring/brick_wall_weathered/brick_wall_weathered_thumb.webp',
897
930
  preset: {
898
931
  maps: {
899
- albedoMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_basecolor.jpg',
900
- aoMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_ambientocclusion.jpg',
901
- normalMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_normal.jpg',
902
- roughnessMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_roughness.jpg',
932
+ albedoMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_basecolor_512.ktx2',
933
+ aoMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_ao_512.ktx2',
934
+ normalMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_normal_512.ktx2',
935
+ roughnessMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_roughness_512.ktx2',
903
936
  },
904
937
  mapProperties: {
905
938
  color: '#ffffff',
@@ -915,7 +948,7 @@ export const MATERIAL_CATALOG = [
915
948
  emissiveIntensity: 1,
916
949
  displacementScale: 0,
917
950
  transparent: false,
918
- flipY: true,
951
+ flipY: false,
919
952
  bumpScale: 1,
920
953
  emissiveColor: '#000000',
921
954
  aoMapIntensity: 1,
@@ -928,15 +961,15 @@ export const MATERIAL_CATALOG = [
928
961
  {
929
962
  id: 'flooring-garagedoor',
930
963
  label: 'Garage Panel',
931
- category: 'flooring',
964
+ category: 'metal',
965
+ surfaces: ['wall', 'furniture'],
932
966
  description: 'Panel finish',
933
- previewThumbnailUrl: '/material/flooring/garage_panel/garage_panel_diffuse.jpg',
967
+ previewThumbnailUrl: '/material/flooring/garage_panel/garage_panel_thumb.webp',
934
968
  preset: {
935
969
  maps: {
936
- albedoMap: '/material/flooring/garage_panel/garage_panel_diffuse.jpg',
937
- aoMap: '/material/flooring/garage_panel/garage_panel_ao.jpg',
938
- metalnessMap: '/material/flooring/garage_panel/garage_panel_specular.jpg',
939
- normalMap: '/material/flooring/garage_panel/garage_panel_normal.jpg',
970
+ albedoMap: '/material/flooring/garage_panel/garage_panel_basecolor_512.ktx2',
971
+ aoMap: '/material/flooring/garage_panel/garage_panel_ao_512.ktx2',
972
+ normalMap: '/material/flooring/garage_panel/garage_panel_normal_512.ktx2',
940
973
  },
941
974
  mapProperties: {
942
975
  color: '#ffffff',
@@ -952,7 +985,7 @@ export const MATERIAL_CATALOG = [
952
985
  emissiveIntensity: 1,
953
986
  displacementScale: 0,
954
987
  transparent: false,
955
- flipY: true,
988
+ flipY: false,
956
989
  bumpScale: 1,
957
990
  emissiveColor: '#000000',
958
991
  aoMapIntensity: 1,
@@ -965,15 +998,15 @@ export const MATERIAL_CATALOG = [
965
998
  {
966
999
  id: 'flooring-greenlabradorite',
967
1000
  label: 'Green Labradorite',
968
- category: 'flooring',
1001
+ category: 'stone',
1002
+ surfaces: ['floor', 'wall'],
969
1003
  description: 'Stone flooring finish',
970
- previewThumbnailUrl: '/material/flooring/green_labradorite/green_labradorite_diffuse.jpg',
1004
+ previewThumbnailUrl: '/material/flooring/green_labradorite/green_labradorite_thumb.webp',
971
1005
  preset: {
972
1006
  maps: {
973
- albedoMap: '/material/flooring/green_labradorite/green_labradorite_diffuse.jpg',
974
- aoMap: '/material/flooring/green_labradorite/green_labradorite_ao.jpg',
975
- metalnessMap: '/material/flooring/green_labradorite/green_labradorite_specular.jpg',
976
- normalMap: '/material/flooring/green_labradorite/green_labradorite_normal.jpg',
1007
+ albedoMap: '/material/flooring/green_labradorite/green_labradorite_basecolor_512.ktx2',
1008
+ aoMap: '/material/flooring/green_labradorite/green_labradorite_ao_512.ktx2',
1009
+ normalMap: '/material/flooring/green_labradorite/green_labradorite_normal_512.ktx2',
977
1010
  },
978
1011
  mapProperties: {
979
1012
  color: '#ffffff',
@@ -989,7 +1022,7 @@ export const MATERIAL_CATALOG = [
989
1022
  emissiveIntensity: 1,
990
1023
  displacementScale: 0,
991
1024
  transparent: false,
992
- flipY: true,
1025
+ flipY: false,
993
1026
  bumpScale: 1,
994
1027
  emissiveColor: '#000000',
995
1028
  aoMapIntensity: 1,
@@ -1002,16 +1035,17 @@ export const MATERIAL_CATALOG = [
1002
1035
  {
1003
1036
  id: 'flooring-ground13',
1004
1037
  label: 'Earth Ground',
1005
- category: 'flooring',
1038
+ category: 'ground',
1039
+ surfaces: ['outdoor', 'floor'],
1006
1040
  description: 'Ground surface finish',
1007
- previewThumbnailUrl: '/material/flooring/ground_earth/ground_earth_basecolor.jpg',
1041
+ previewThumbnailUrl: '/material/flooring/ground_earth/ground_earth_thumb.webp',
1008
1042
  preset: {
1009
1043
  maps: {
1010
- albedoMap: '/material/flooring/ground_earth/ground_earth_basecolor.jpg',
1011
- aoMap: '/material/flooring/ground_earth/ground_earth_ambientocclusion.jpg',
1012
- metalnessMap: '/material/flooring/ground_earth/ground_earth_metallic.jpg',
1013
- normalMap: '/material/flooring/ground_earth/ground_earth_normal.jpg',
1014
- roughnessMap: '/material/flooring/ground_earth/ground_earth_roughness.jpg',
1044
+ albedoMap: '/material/flooring/ground_earth/ground_earth_basecolor_512.ktx2',
1045
+ aoMap: '/material/flooring/ground_earth/ground_earth_ao_512.ktx2',
1046
+ metalnessMap: '/material/flooring/ground_earth/ground_earth_metallic_512.ktx2',
1047
+ normalMap: '/material/flooring/ground_earth/ground_earth_normal_512.ktx2',
1048
+ roughnessMap: '/material/flooring/ground_earth/ground_earth_roughness_512.ktx2',
1015
1049
  },
1016
1050
  mapProperties: {
1017
1051
  color: '#ffffff',
@@ -1027,7 +1061,7 @@ export const MATERIAL_CATALOG = [
1027
1061
  emissiveIntensity: 1,
1028
1062
  displacementScale: 0,
1029
1063
  transparent: false,
1030
- flipY: true,
1064
+ flipY: false,
1031
1065
  bumpScale: 1,
1032
1066
  emissiveColor: '#000000',
1033
1067
  aoMapIntensity: 1,
@@ -1040,15 +1074,15 @@ export const MATERIAL_CATALOG = [
1040
1074
  {
1041
1075
  id: 'flooring-pooltiles',
1042
1076
  label: 'Pool Tiles',
1043
- category: 'flooring',
1077
+ category: 'tile',
1078
+ surfaces: ['floor', 'outdoor'],
1044
1079
  description: 'Pool tile finish',
1045
- previewThumbnailUrl: '/material/flooring/pool_tiles/pool_tiles_diffuse.jpg',
1080
+ previewThumbnailUrl: '/material/flooring/pool_tiles/pool_tiles_thumb.webp',
1046
1081
  preset: {
1047
1082
  maps: {
1048
- albedoMap: '/material/flooring/pool_tiles/pool_tiles_diffuse.jpg',
1049
- aoMap: '/material/flooring/pool_tiles/pool_tiles_ao.jpg',
1050
- metalnessMap: '/material/flooring/pool_tiles/pool_tiles_specular.jpg',
1051
- normalMap: '/material/flooring/pool_tiles/pool_tiles_normal.jpg',
1083
+ albedoMap: '/material/flooring/pool_tiles/pool_tiles_basecolor_512.ktx2',
1084
+ aoMap: '/material/flooring/pool_tiles/pool_tiles_ao_512.ktx2',
1085
+ normalMap: '/material/flooring/pool_tiles/pool_tiles_normal_512.ktx2',
1052
1086
  },
1053
1087
  mapProperties: {
1054
1088
  color: '#ffffff',
@@ -1064,7 +1098,7 @@ export const MATERIAL_CATALOG = [
1064
1098
  emissiveIntensity: 1,
1065
1099
  displacementScale: 0,
1066
1100
  transparent: false,
1067
- flipY: true,
1101
+ flipY: false,
1068
1102
  bumpScale: 1,
1069
1103
  emissiveColor: '#000000',
1070
1104
  aoMapIntensity: 1,
@@ -1077,15 +1111,15 @@ export const MATERIAL_CATALOG = [
1077
1111
  {
1078
1112
  id: 'flooring-tiles3',
1079
1113
  label: 'Checker Tiles',
1080
- category: 'flooring',
1114
+ category: 'tile',
1115
+ surfaces: ['floor'],
1081
1116
  description: 'Tile flooring finish',
1082
- previewThumbnailUrl: '/material/flooring/tiles_checker/tiles_checker_diffuse.jpg',
1117
+ previewThumbnailUrl: '/material/flooring/tiles_checker/tiles_checker_thumb.webp',
1083
1118
  preset: {
1084
1119
  maps: {
1085
- albedoMap: '/material/flooring/tiles_checker/tiles_checker_diffuse.jpg',
1086
- aoMap: '/material/flooring/tiles_checker/tiles_checker_ao.jpg',
1087
- metalnessMap: '/material/flooring/tiles_checker/tiles_checker_specular.jpg',
1088
- normalMap: '/material/flooring/tiles_checker/tiles_checker_normal.jpg',
1120
+ albedoMap: '/material/flooring/tiles_checker/tiles_checker_basecolor_512.ktx2',
1121
+ aoMap: '/material/flooring/tiles_checker/tiles_checker_ao_512.ktx2',
1122
+ normalMap: '/material/flooring/tiles_checker/tiles_checker_normal_512.ktx2',
1089
1123
  },
1090
1124
  mapProperties: {
1091
1125
  color: '#ffffff',
@@ -1101,7 +1135,7 @@ export const MATERIAL_CATALOG = [
1101
1135
  emissiveIntensity: 1,
1102
1136
  displacementScale: 0,
1103
1137
  transparent: false,
1104
- flipY: true,
1138
+ flipY: false,
1105
1139
  bumpScale: 1,
1106
1140
  emissiveColor: '#000000',
1107
1141
  aoMapIntensity: 1,
@@ -1114,15 +1148,15 @@ export const MATERIAL_CATALOG = [
1114
1148
  {
1115
1149
  id: 'flooring-tiles4',
1116
1150
  label: 'Grid Tiles',
1117
- category: 'flooring',
1151
+ category: 'tile',
1152
+ surfaces: ['floor'],
1118
1153
  description: 'Tile flooring finish',
1119
- previewThumbnailUrl: '/material/flooring/tiles_grid/tiles_grid_diffuse.jpg',
1154
+ previewThumbnailUrl: '/material/flooring/tiles_grid/tiles_grid_thumb.webp',
1120
1155
  preset: {
1121
1156
  maps: {
1122
- albedoMap: '/material/flooring/tiles_grid/tiles_grid_diffuse.jpg',
1123
- aoMap: '/material/flooring/tiles_grid/tiles_grid_ao.jpg',
1124
- metalnessMap: '/material/flooring/tiles_grid/tiles_grid_specular.jpg',
1125
- normalMap: '/material/flooring/tiles_grid/tiles_grid_normal.jpg',
1157
+ albedoMap: '/material/flooring/tiles_grid/tiles_grid_basecolor_512.ktx2',
1158
+ aoMap: '/material/flooring/tiles_grid/tiles_grid_ao_512.ktx2',
1159
+ normalMap: '/material/flooring/tiles_grid/tiles_grid_normal_512.ktx2',
1126
1160
  },
1127
1161
  mapProperties: {
1128
1162
  color: '#ffffff',
@@ -1138,7 +1172,7 @@ export const MATERIAL_CATALOG = [
1138
1172
  emissiveIntensity: 1,
1139
1173
  displacementScale: 0,
1140
1174
  transparent: false,
1141
- flipY: true,
1175
+ flipY: false,
1142
1176
  bumpScale: 1,
1143
1177
  emissiveColor: '#000000',
1144
1178
  aoMapIntensity: 1,
@@ -1151,15 +1185,15 @@ export const MATERIAL_CATALOG = [
1151
1185
  {
1152
1186
  id: 'flooring-wallstone1',
1153
1187
  label: 'Stone Wall',
1154
- category: 'flooring',
1188
+ category: 'stone',
1189
+ surfaces: ['wall', 'floor', 'outdoor'],
1155
1190
  description: 'Stone finish',
1156
- previewThumbnailUrl: '/material/flooring/stone_wall/stone_wall_diffuse.webp',
1191
+ previewThumbnailUrl: '/material/flooring/stone_wall/stone_wall_thumb.webp',
1157
1192
  preset: {
1158
1193
  maps: {
1159
- albedoMap: '/material/flooring/stone_wall/stone_wall_diffuse.webp',
1160
- aoMap: '/material/flooring/stone_wall/stone_wall_ao.webp',
1161
- metalnessMap: '/material/flooring/stone_wall/stone_wall_specular.webp',
1162
- normalMap: '/material/flooring/stone_wall/stone_wall_normal.webp',
1194
+ albedoMap: '/material/flooring/stone_wall/stone_wall_basecolor_512.ktx2',
1195
+ aoMap: '/material/flooring/stone_wall/stone_wall_ao_512.ktx2',
1196
+ normalMap: '/material/flooring/stone_wall/stone_wall_normal_512.ktx2',
1163
1197
  },
1164
1198
  mapProperties: {
1165
1199
  color: '#ffffff',
@@ -1175,7 +1209,7 @@ export const MATERIAL_CATALOG = [
1175
1209
  emissiveIntensity: 1,
1176
1210
  displacementScale: 0,
1177
1211
  transparent: false,
1178
- flipY: true,
1212
+ flipY: false,
1179
1213
  bumpScale: 1,
1180
1214
  emissiveColor: '#000000',
1181
1215
  aoMapIntensity: 1,
@@ -1188,15 +1222,15 @@ export const MATERIAL_CATALOG = [
1188
1222
  {
1189
1223
  id: 'flooring-woodenceramic3',
1190
1224
  label: 'Wooden Ceramic 3',
1191
- category: 'flooring',
1225
+ category: 'tile',
1226
+ surfaces: ['floor'],
1192
1227
  description: 'Wood-look ceramic flooring finish',
1193
- previewThumbnailUrl: '/material/flooring/wooden_ceramic_3/wooden_ceramic-diffuse.webp',
1228
+ previewThumbnailUrl: '/material/flooring/wooden_ceramic_3/wooden_ceramic_3_thumb.webp',
1194
1229
  preset: {
1195
1230
  maps: {
1196
- albedoMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-diffuse.webp',
1197
- aoMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-ao.webp',
1198
- metalnessMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-specular.webp',
1199
- normalMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-normal.webp',
1231
+ albedoMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic_3_basecolor_512.ktx2',
1232
+ aoMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic_3_ao_512.ktx2',
1233
+ normalMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic_3_normal_512.ktx2',
1200
1234
  },
1201
1235
  mapProperties: {
1202
1236
  color: '#ffffff',
@@ -1212,7 +1246,7 @@ export const MATERIAL_CATALOG = [
1212
1246
  emissiveIntensity: 1,
1213
1247
  displacementScale: 0,
1214
1248
  transparent: false,
1215
- flipY: true,
1249
+ flipY: false,
1216
1250
  bumpScale: 1,
1217
1251
  emissiveColor: '#000000',
1218
1252
  aoMapIntensity: 1,
@@ -1225,16 +1259,17 @@ export const MATERIAL_CATALOG = [
1225
1259
  {
1226
1260
  id: 'flooring-ceramic53',
1227
1261
  label: 'Ceramic Mosaic',
1228
- category: 'flooring',
1262
+ category: 'tile',
1263
+ surfaces: ['floor', 'wall'],
1229
1264
  description: 'Ceramic flooring finish',
1230
- previewThumbnailUrl: '/material/flooring/ceramic_mosaic/ceramic_mosaic_basecolor.jpg',
1265
+ previewThumbnailUrl: '/material/flooring/ceramic_mosaic/ceramic_mosaic_thumb.webp',
1231
1266
  preset: {
1232
1267
  maps: {
1233
- albedoMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_basecolor.jpg',
1234
- aoMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_ambientocclusion.jpg',
1235
- metalnessMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_metallic.jpg',
1236
- normalMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_normal.png',
1237
- roughnessMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_roughness.jpg',
1268
+ albedoMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_basecolor_512.ktx2',
1269
+ aoMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_ao_512.ktx2',
1270
+ metalnessMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_metallic_512.ktx2',
1271
+ normalMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_normal_512.ktx2',
1272
+ roughnessMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_roughness_512.ktx2',
1238
1273
  },
1239
1274
  mapProperties: {
1240
1275
  color: '#ffffff',
@@ -1250,7 +1285,7 @@ export const MATERIAL_CATALOG = [
1250
1285
  emissiveIntensity: 1,
1251
1286
  displacementScale: 0,
1252
1287
  transparent: false,
1253
- flipY: true,
1288
+ flipY: false,
1254
1289
  bumpScale: 1,
1255
1290
  emissiveColor: '#000000',
1256
1291
  aoMapIntensity: 1,
@@ -1263,15 +1298,16 @@ export const MATERIAL_CATALOG = [
1263
1298
  {
1264
1299
  id: 'flooring-terrazzo19',
1265
1300
  label: 'Terrazzo',
1266
- category: 'flooring',
1301
+ category: 'stone',
1302
+ surfaces: ['floor', 'wall'],
1267
1303
  description: 'Terrazzo flooring finish',
1268
- previewThumbnailUrl: '/material/flooring/terrazzo/terrazzo_basecolor.jpg',
1304
+ previewThumbnailUrl: '/material/flooring/terrazzo/terrazzo_thumb.webp',
1269
1305
  preset: {
1270
1306
  maps: {
1271
- albedoMap: '/material/flooring/terrazzo/terrazzo_basecolor.jpg',
1272
- metalnessMap: '/material/flooring/terrazzo/terrazzo_metallic.jpg',
1273
- normalMap: '/material/flooring/terrazzo/terrazzo_normal.jpg',
1274
- roughnessMap: '/material/flooring/terrazzo/terrazzo_roughness.jpg',
1307
+ albedoMap: '/material/flooring/terrazzo/terrazzo_basecolor_512.ktx2',
1308
+ metalnessMap: '/material/flooring/terrazzo/terrazzo_metallic_512.ktx2',
1309
+ normalMap: '/material/flooring/terrazzo/terrazzo_normal_512.ktx2',
1310
+ roughnessMap: '/material/flooring/terrazzo/terrazzo_roughness_512.ktx2',
1275
1311
  },
1276
1312
  mapProperties: {
1277
1313
  color: '#ffffff',
@@ -1287,7 +1323,7 @@ export const MATERIAL_CATALOG = [
1287
1323
  emissiveIntensity: 1,
1288
1324
  displacementScale: 0,
1289
1325
  transparent: false,
1290
- flipY: true,
1326
+ flipY: false,
1291
1327
  bumpScale: 1,
1292
1328
  emissiveColor: '#000000',
1293
1329
  aoMapIntensity: 1,
@@ -1300,15 +1336,16 @@ export const MATERIAL_CATALOG = [
1300
1336
  {
1301
1337
  id: 'flooring-tile79',
1302
1338
  label: 'Stone Tile',
1303
- category: 'flooring',
1339
+ category: 'stone',
1340
+ surfaces: ['floor', 'wall'],
1304
1341
  description: 'Floor tile finish',
1305
- previewThumbnailUrl: '/material/flooring/tile_stone/tile_stone_basecolor.webp',
1342
+ previewThumbnailUrl: '/material/flooring/tile_stone/tile_stone_thumb.webp',
1306
1343
  preset: {
1307
1344
  maps: {
1308
- albedoMap: '/material/flooring/tile_stone/tile_stone_basecolor.webp',
1309
- aoMap: '/material/flooring/tile_stone/tile_stone_ambientocclusion.webp',
1310
- normalMap: '/material/flooring/tile_stone/tile_stone_normal.webp',
1311
- roughnessMap: '/material/flooring/tile_stone/tile_stone_roughness.webp',
1345
+ albedoMap: '/material/flooring/tile_stone/tile_stone_basecolor_512.ktx2',
1346
+ aoMap: '/material/flooring/tile_stone/tile_stone_ao_512.ktx2',
1347
+ normalMap: '/material/flooring/tile_stone/tile_stone_normal_512.ktx2',
1348
+ roughnessMap: '/material/flooring/tile_stone/tile_stone_roughness_512.ktx2',
1312
1349
  },
1313
1350
  mapProperties: {
1314
1351
  color: '#ffffff',
@@ -1324,7 +1361,7 @@ export const MATERIAL_CATALOG = [
1324
1361
  emissiveIntensity: 1,
1325
1362
  displacementScale: 0,
1326
1363
  transparent: false,
1327
- flipY: true,
1364
+ flipY: false,
1328
1365
  bumpScale: 1,
1329
1366
  emissiveColor: '#000000',
1330
1367
  aoMapIntensity: 1,
@@ -1337,15 +1374,16 @@ export const MATERIAL_CATALOG = [
1337
1374
  {
1338
1375
  id: 'flooring-tile86',
1339
1376
  label: 'Terracotta Tile',
1340
- category: 'flooring',
1377
+ category: 'tile',
1378
+ surfaces: ['floor'],
1341
1379
  description: 'Floor tile finish',
1342
- previewThumbnailUrl: '/material/flooring/tile_terracotta/tile_terracotta_basecolor.webp',
1380
+ previewThumbnailUrl: '/material/flooring/tile_terracotta/tile_terracotta_thumb.webp',
1343
1381
  preset: {
1344
1382
  maps: {
1345
- albedoMap: '/material/flooring/tile_terracotta/tile_terracotta_basecolor.webp',
1346
- aoMap: '/material/flooring/tile_terracotta/tile_terracotta_ambientocclusion.webp',
1347
- normalMap: '/material/flooring/tile_terracotta/tile_terracotta_normal.webp',
1348
- roughnessMap: '/material/flooring/tile_terracotta/tile_terracotta_roughness.webp',
1383
+ albedoMap: '/material/flooring/tile_terracotta/tile_terracotta_basecolor_512.ktx2',
1384
+ aoMap: '/material/flooring/tile_terracotta/tile_terracotta_ao_512.ktx2',
1385
+ normalMap: '/material/flooring/tile_terracotta/tile_terracotta_normal_512.ktx2',
1386
+ roughnessMap: '/material/flooring/tile_terracotta/tile_terracotta_roughness_512.ktx2',
1349
1387
  },
1350
1388
  mapProperties: {
1351
1389
  color: '#ffffff',
@@ -1361,7 +1399,7 @@ export const MATERIAL_CATALOG = [
1361
1399
  emissiveIntensity: 1,
1362
1400
  displacementScale: 0,
1363
1401
  transparent: false,
1364
- flipY: true,
1402
+ flipY: false,
1365
1403
  bumpScale: 1,
1366
1404
  emissiveColor: '#000000',
1367
1405
  aoMapIntensity: 1,
@@ -1374,15 +1412,15 @@ export const MATERIAL_CATALOG = [
1374
1412
  {
1375
1413
  id: 'flooring-greenquartzitea',
1376
1414
  label: 'Green Quartzite A',
1377
- category: 'flooring',
1415
+ category: 'stone',
1416
+ surfaces: ['floor', 'wall'],
1378
1417
  description: 'Green quartzite flooring finish',
1379
- previewThumbnailUrl: '/material/flooring/green_glass_quartzite/green_glass_quartzite_diffuse.jpg',
1418
+ previewThumbnailUrl: '/material/flooring/green_glass_quartzite/green_glass_quartzite_thumb.webp',
1380
1419
  preset: {
1381
1420
  maps: {
1382
- albedoMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_diffuse.jpg',
1383
- aoMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_ao.jpg',
1384
- metalnessMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_specular.jpg',
1385
- normalMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_normal.jpg',
1421
+ albedoMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_basecolor_512.ktx2',
1422
+ aoMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_ao_512.ktx2',
1423
+ normalMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_normal_512.ktx2',
1386
1424
  },
1387
1425
  mapProperties: {
1388
1426
  color: '#ffffff',
@@ -1398,7 +1436,7 @@ export const MATERIAL_CATALOG = [
1398
1436
  emissiveIntensity: 1,
1399
1437
  displacementScale: 0,
1400
1438
  transparent: false,
1401
- flipY: true,
1439
+ flipY: false,
1402
1440
  bumpScale: 1,
1403
1441
  emissiveColor: '#000000',
1404
1442
  aoMapIntensity: 1,
@@ -1411,16 +1449,17 @@ export const MATERIAL_CATALOG = [
1411
1449
  {
1412
1450
  id: 'flooring-darkceramic22',
1413
1451
  label: 'Dark Ceramic Grunge',
1414
- category: 'flooring',
1452
+ category: 'tile',
1453
+ surfaces: ['floor'],
1415
1454
  description: 'Dark ceramic flooring finish',
1416
- previewThumbnailUrl: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_basecolor.jpg',
1455
+ previewThumbnailUrl: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_thumb.webp',
1417
1456
  preset: {
1418
1457
  maps: {
1419
- albedoMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_basecolor.jpg',
1420
- aoMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_ambientocclusion.jpg',
1421
- metalnessMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_metallic.jpg',
1422
- normalMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_normal.jpg',
1423
- roughnessMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_roughness.jpg',
1458
+ albedoMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_basecolor_512.ktx2',
1459
+ aoMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_ao_512.ktx2',
1460
+ metalnessMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_metallic_512.ktx2',
1461
+ normalMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_normal_512.ktx2',
1462
+ roughnessMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_roughness_512.ktx2',
1424
1463
  },
1425
1464
  mapProperties: {
1426
1465
  color: '#ffffff',
@@ -1436,7 +1475,7 @@ export const MATERIAL_CATALOG = [
1436
1475
  emissiveIntensity: 1,
1437
1476
  displacementScale: 0,
1438
1477
  transparent: false,
1439
- flipY: true,
1478
+ flipY: false,
1440
1479
  bumpScale: 1,
1441
1480
  emissiveColor: '#000000',
1442
1481
  aoMapIntensity: 1,
@@ -1449,16 +1488,17 @@ export const MATERIAL_CATALOG = [
1449
1488
  {
1450
1489
  id: 'flooring-lightceramic24',
1451
1490
  label: 'Light Ceramic Grunge',
1452
- category: 'flooring',
1491
+ category: 'tile',
1492
+ surfaces: ['floor'],
1453
1493
  description: 'Light ceramic flooring finish',
1454
- previewThumbnailUrl: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_basecolor.jpg',
1494
+ previewThumbnailUrl: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_thumb.webp',
1455
1495
  preset: {
1456
1496
  maps: {
1457
- albedoMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_basecolor.jpg',
1458
- aoMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_ambientocclusion.jpg',
1459
- metalnessMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_metallic.jpg',
1460
- normalMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_normal.jpg',
1461
- roughnessMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_roughness.jpg',
1497
+ albedoMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_basecolor_512.ktx2',
1498
+ aoMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_ao_512.ktx2',
1499
+ metalnessMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_metallic_512.ktx2',
1500
+ normalMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_normal_512.ktx2',
1501
+ roughnessMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_roughness_512.ktx2',
1462
1502
  },
1463
1503
  mapProperties: {
1464
1504
  color: '#ffffff',
@@ -1474,7 +1514,7 @@ export const MATERIAL_CATALOG = [
1474
1514
  emissiveIntensity: 1,
1475
1515
  displacementScale: 0,
1476
1516
  transparent: false,
1477
- flipY: true,
1517
+ flipY: false,
1478
1518
  bumpScale: 1,
1479
1519
  emissiveColor: '#000000',
1480
1520
  aoMapIntensity: 1,
@@ -1487,15 +1527,15 @@ export const MATERIAL_CATALOG = [
1487
1527
  {
1488
1528
  id: 'flooring-statuarettowhite',
1489
1529
  label: 'Statuaretto White',
1490
- category: 'flooring',
1530
+ category: 'stone',
1531
+ surfaces: ['floor', 'wall'],
1491
1532
  description: 'White marble flooring finish',
1492
- previewThumbnailUrl: '/material/flooring/statuaretto/statuaretto_diffuse.jpg',
1533
+ previewThumbnailUrl: '/material/flooring/statuaretto/statuaretto_thumb.webp',
1493
1534
  preset: {
1494
1535
  maps: {
1495
- albedoMap: '/material/flooring/statuaretto/statuaretto_diffuse.jpg',
1496
- aoMap: '/material/flooring/statuaretto/statuaretto_ao.jpg',
1497
- metalnessMap: '/material/flooring/statuaretto/statuaretto_specular.jpg',
1498
- normalMap: '/material/flooring/statuaretto/statuaretto_normal.jpg',
1536
+ albedoMap: '/material/flooring/statuaretto/statuaretto_basecolor_512.ktx2',
1537
+ aoMap: '/material/flooring/statuaretto/statuaretto_ao_512.ktx2',
1538
+ normalMap: '/material/flooring/statuaretto/statuaretto_normal_512.ktx2',
1499
1539
  },
1500
1540
  mapProperties: {
1501
1541
  color: '#ffffff',
@@ -1511,7 +1551,7 @@ export const MATERIAL_CATALOG = [
1511
1551
  emissiveIntensity: 1,
1512
1552
  displacementScale: 0,
1513
1553
  transparent: false,
1514
- flipY: true,
1554
+ flipY: false,
1515
1555
  bumpScale: 1,
1516
1556
  emissiveColor: '#000000',
1517
1557
  aoMapIntensity: 1,
@@ -1524,16 +1564,17 @@ export const MATERIAL_CATALOG = [
1524
1564
  {
1525
1565
  id: 'flooring-tile20',
1526
1566
  label: 'Mosaic Tile',
1527
- category: 'flooring',
1567
+ category: 'tile',
1568
+ surfaces: ['floor', 'wall'],
1528
1569
  description: 'Floor tile finish',
1529
- previewThumbnailUrl: '/material/flooring/tile_mosaic/tile_mosaic_basecolor.webp',
1570
+ previewThumbnailUrl: '/material/flooring/tile_mosaic/tile_mosaic_thumb.webp',
1530
1571
  preset: {
1531
1572
  maps: {
1532
- albedoMap: '/material/flooring/tile_mosaic/tile_mosaic_basecolor.webp',
1533
- aoMap: '/material/flooring/tile_mosaic/tile_mosaic_ambientocclusion.webp',
1534
- metalnessMap: '/material/flooring/tile_mosaic/tile_mosaic_metallic.webp',
1535
- normalMap: '/material/flooring/tile_mosaic/tile_mosaic_normal.webp',
1536
- roughnessMap: '/material/flooring/tile_mosaic/tile_mosaic_roughness.webp',
1573
+ albedoMap: '/material/flooring/tile_mosaic/tile_mosaic_basecolor_512.ktx2',
1574
+ aoMap: '/material/flooring/tile_mosaic/tile_mosaic_ao_512.ktx2',
1575
+ metalnessMap: '/material/flooring/tile_mosaic/tile_mosaic_metallic_512.ktx2',
1576
+ normalMap: '/material/flooring/tile_mosaic/tile_mosaic_normal_512.ktx2',
1577
+ roughnessMap: '/material/flooring/tile_mosaic/tile_mosaic_roughness_512.ktx2',
1537
1578
  },
1538
1579
  mapProperties: {
1539
1580
  color: '#ffffff',
@@ -1549,7 +1590,7 @@ export const MATERIAL_CATALOG = [
1549
1590
  emissiveIntensity: 1,
1550
1591
  displacementScale: 0,
1551
1592
  transparent: false,
1552
- flipY: true,
1593
+ flipY: false,
1553
1594
  bumpScale: 1,
1554
1595
  emissiveColor: '#000000',
1555
1596
  aoMapIntensity: 1,
@@ -1562,16 +1603,17 @@ export const MATERIAL_CATALOG = [
1562
1603
  {
1563
1604
  id: 'flooring-tile68',
1564
1605
  label: 'Pattern Tile',
1565
- category: 'flooring',
1606
+ category: 'tile',
1607
+ surfaces: ['floor', 'wall'],
1566
1608
  description: 'Floor tile finish',
1567
- previewThumbnailUrl: '/material/flooring/tile_pattern/tile_pattern_basecolor.webp',
1609
+ previewThumbnailUrl: '/material/flooring/tile_pattern/tile_pattern_thumb.webp',
1568
1610
  preset: {
1569
1611
  maps: {
1570
- albedoMap: '/material/flooring/tile_pattern/tile_pattern_basecolor.webp',
1571
- aoMap: '/material/flooring/tile_pattern/tile_pattern_ambientocclusion.webp',
1572
- metalnessMap: '/material/flooring/tile_pattern/tile_pattern_metallic.webp',
1573
- normalMap: '/material/flooring/tile_pattern/tile_pattern_normal.webp',
1574
- roughnessMap: '/material/flooring/tile_pattern/tile_pattern_roughness.webp',
1612
+ albedoMap: '/material/flooring/tile_pattern/tile_pattern_basecolor_512.ktx2',
1613
+ aoMap: '/material/flooring/tile_pattern/tile_pattern_ao_512.ktx2',
1614
+ metalnessMap: '/material/flooring/tile_pattern/tile_pattern_metallic_512.ktx2',
1615
+ normalMap: '/material/flooring/tile_pattern/tile_pattern_normal_512.ktx2',
1616
+ roughnessMap: '/material/flooring/tile_pattern/tile_pattern_roughness_512.ktx2',
1575
1617
  },
1576
1618
  mapProperties: {
1577
1619
  color: '#ffffff',
@@ -1587,7 +1629,7 @@ export const MATERIAL_CATALOG = [
1587
1629
  emissiveIntensity: 1,
1588
1630
  displacementScale: 0,
1589
1631
  transparent: false,
1590
- flipY: true,
1632
+ flipY: false,
1591
1633
  bumpScale: 1,
1592
1634
  emissiveColor: '#000000',
1593
1635
  aoMapIntensity: 1,
@@ -1600,15 +1642,15 @@ export const MATERIAL_CATALOG = [
1600
1642
  {
1601
1643
  id: 'flooring-woodenceramic2',
1602
1644
  label: 'Wooden Ceramic 2',
1603
- category: 'flooring',
1645
+ category: 'tile',
1646
+ surfaces: ['floor'],
1604
1647
  description: 'Wood-look ceramic flooring finish',
1605
- previewThumbnailUrl: '/material/flooring/wooden_ceramic_2/wooden_ceramic-diffuse.webp',
1648
+ previewThumbnailUrl: '/material/flooring/wooden_ceramic_2/wooden_ceramic_2_thumb.webp',
1606
1649
  preset: {
1607
1650
  maps: {
1608
- albedoMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-diffuse.webp',
1609
- aoMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-ao.webp',
1610
- metalnessMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-specular.webp',
1611
- normalMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-normal.webp',
1651
+ albedoMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic_2_basecolor_512.ktx2',
1652
+ aoMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic_2_ao_512.ktx2',
1653
+ normalMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic_2_normal_512.ktx2',
1612
1654
  },
1613
1655
  mapProperties: {
1614
1656
  color: '#ffffff',
@@ -1624,7 +1666,7 @@ export const MATERIAL_CATALOG = [
1624
1666
  emissiveIntensity: 1,
1625
1667
  displacementScale: 0,
1626
1668
  transparent: false,
1627
- flipY: true,
1669
+ flipY: false,
1628
1670
  bumpScale: 1,
1629
1671
  emissiveColor: '#000000',
1630
1672
  aoMapIntensity: 1,
@@ -1637,16 +1679,17 @@ export const MATERIAL_CATALOG = [
1637
1679
  {
1638
1680
  id: 'flooring-woodparquet76',
1639
1681
  label: 'Wood Parquet',
1640
- category: 'flooring',
1682
+ category: 'wood',
1683
+ surfaces: ['floor'],
1641
1684
  description: 'Wood parquet flooring finish',
1642
- previewThumbnailUrl: '/material/flooring/woodparquet/woodparquet_basecolor.webp',
1685
+ previewThumbnailUrl: '/material/flooring/woodparquet/woodparquet_thumb.webp',
1643
1686
  preset: {
1644
1687
  maps: {
1645
- albedoMap: '/material/flooring/woodparquet/woodparquet_basecolor.webp',
1646
- aoMap: '/material/flooring/woodparquet/woodparquet_ambientocclusion.webp',
1647
- metalnessMap: '/material/flooring/woodparquet/woodparquet_metallic.webp',
1648
- normalMap: '/material/flooring/woodparquet/woodparquet_normal.webp',
1649
- roughnessMap: '/material/flooring/woodparquet/woodparquet_roughness.webp',
1688
+ albedoMap: '/material/flooring/woodparquet/woodparquet_basecolor_512.ktx2',
1689
+ aoMap: '/material/flooring/woodparquet/woodparquet_ao_512.ktx2',
1690
+ metalnessMap: '/material/flooring/woodparquet/woodparquet_metallic_512.ktx2',
1691
+ normalMap: '/material/flooring/woodparquet/woodparquet_normal_512.ktx2',
1692
+ roughnessMap: '/material/flooring/woodparquet/woodparquet_roughness_512.ktx2',
1650
1693
  },
1651
1694
  mapProperties: {
1652
1695
  color: '#ffffff',
@@ -1662,7 +1705,7 @@ export const MATERIAL_CATALOG = [
1662
1705
  emissiveIntensity: 1,
1663
1706
  displacementScale: 0,
1664
1707
  transparent: false,
1665
- flipY: true,
1708
+ flipY: false,
1666
1709
  bumpScale: 1,
1667
1710
  emissiveColor: '#000000',
1668
1711
  aoMapIntensity: 1,
@@ -1675,16 +1718,17 @@ export const MATERIAL_CATALOG = [
1675
1718
  {
1676
1719
  id: 'roof-classicshingles',
1677
1720
  label: 'Classic Shingles',
1678
- category: 'roof',
1721
+ category: 'roofing',
1722
+ surfaces: ['roof'],
1679
1723
  description: 'Classic roof shingle finish',
1680
- previewThumbnailUrl: '/material/roofing/roof_shingles_classic/roof_shingles_classic_basecolor.webp',
1724
+ previewThumbnailUrl: '/material/roofing/roof_shingles_classic/roof_shingles_classic_thumb.webp',
1681
1725
  preset: {
1682
1726
  maps: {
1683
- albedoMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_basecolor.webp',
1684
- aoMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_ambientocclusion.webp',
1685
- metalnessMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_metallic.webp',
1686
- normalMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_normal.webp',
1687
- roughnessMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_roughness.webp',
1727
+ albedoMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_basecolor_512.ktx2',
1728
+ aoMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_ao_512.ktx2',
1729
+ metalnessMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_metallic_512.ktx2',
1730
+ normalMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_normal_512.ktx2',
1731
+ roughnessMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_roughness_512.ktx2',
1688
1732
  },
1689
1733
  mapProperties: {
1690
1734
  color: '#ffffff',
@@ -1700,7 +1744,7 @@ export const MATERIAL_CATALOG = [
1700
1744
  emissiveIntensity: 1,
1701
1745
  displacementScale: 0,
1702
1746
  transparent: false,
1703
- flipY: true,
1747
+ flipY: false,
1704
1748
  bumpScale: 1,
1705
1749
  emissiveColor: '#000000',
1706
1750
  aoMapIntensity: 1,
@@ -1713,16 +1757,17 @@ export const MATERIAL_CATALOG = [
1713
1757
  {
1714
1758
  id: 'roof-claytiles',
1715
1759
  label: 'Clay Tiles',
1716
- category: 'roof',
1760
+ category: 'roofing',
1761
+ surfaces: ['roof'],
1717
1762
  description: 'Clay roof tile finish',
1718
- previewThumbnailUrl: '/material/roofing/roof_tiles_clay/roof_tiles_clay_basecolor.webp',
1763
+ previewThumbnailUrl: '/material/roofing/roof_tiles_clay/roof_tiles_clay_thumb.webp',
1719
1764
  preset: {
1720
1765
  maps: {
1721
- albedoMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_basecolor.webp',
1722
- aoMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_ambientocclusion.webp',
1723
- metalnessMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_metallic.png',
1724
- normalMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_normal.webp',
1725
- roughnessMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_roughness.webp',
1766
+ albedoMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_basecolor_512.ktx2',
1767
+ aoMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_ao_512.ktx2',
1768
+ metalnessMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_metallic_512.ktx2',
1769
+ normalMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_normal_512.ktx2',
1770
+ roughnessMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_roughness_512.ktx2',
1726
1771
  },
1727
1772
  mapProperties: {
1728
1773
  color: '#ffffff',
@@ -1738,7 +1783,7 @@ export const MATERIAL_CATALOG = [
1738
1783
  emissiveIntensity: 1,
1739
1784
  displacementScale: 0,
1740
1785
  transparent: false,
1741
- flipY: true,
1786
+ flipY: false,
1742
1787
  bumpScale: 1,
1743
1788
  emissiveColor: '#000000',
1744
1789
  aoMapIntensity: 1,
@@ -1751,16 +1796,17 @@ export const MATERIAL_CATALOG = [
1751
1796
  {
1752
1797
  id: 'roof-terracottatiles',
1753
1798
  label: 'Terracotta Tiles',
1754
- category: 'roof',
1799
+ category: 'roofing',
1800
+ surfaces: ['roof'],
1755
1801
  description: 'Terracotta roof tile finish',
1756
- previewThumbnailUrl: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_basecolor.webp',
1802
+ previewThumbnailUrl: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_thumb.webp',
1757
1803
  preset: {
1758
1804
  maps: {
1759
- albedoMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_basecolor.webp',
1760
- aoMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_ambientocclusion.webp',
1761
- metalnessMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_metallic.webp',
1762
- normalMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_normal.webp',
1763
- roughnessMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_roughness.webp',
1805
+ albedoMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_basecolor_512.ktx2',
1806
+ aoMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_ao_512.ktx2',
1807
+ metalnessMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_metallic_512.ktx2',
1808
+ normalMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_normal_512.ktx2',
1809
+ roughnessMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_roughness_512.ktx2',
1764
1810
  },
1765
1811
  mapProperties: {
1766
1812
  color: '#ffffff',
@@ -1776,7 +1822,7 @@ export const MATERIAL_CATALOG = [
1776
1822
  emissiveIntensity: 1,
1777
1823
  displacementScale: 0,
1778
1824
  transparent: false,
1779
- flipY: true,
1825
+ flipY: false,
1780
1826
  bumpScale: 1,
1781
1827
  emissiveColor: '#000000',
1782
1828
  aoMapIntensity: 1,
@@ -1789,16 +1835,17 @@ export const MATERIAL_CATALOG = [
1789
1835
  {
1790
1836
  id: 'roof-weatheredshingles',
1791
1837
  label: 'Weathered Shingles',
1792
- category: 'roof',
1838
+ category: 'roofing',
1839
+ surfaces: ['roof'],
1793
1840
  description: 'Weathered roof shingle finish',
1794
- previewThumbnailUrl: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_basecolor.webp',
1841
+ previewThumbnailUrl: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_thumb.webp',
1795
1842
  preset: {
1796
1843
  maps: {
1797
- albedoMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_basecolor.webp',
1798
- aoMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_ambientocclusion.webp',
1799
- metalnessMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_metallic.webp',
1800
- normalMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_normal.webp',
1801
- roughnessMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_roughness.webp',
1844
+ albedoMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_basecolor_512.ktx2',
1845
+ aoMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_ao_512.ktx2',
1846
+ metalnessMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_metallic_512.ktx2',
1847
+ normalMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_normal_512.ktx2',
1848
+ roughnessMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_roughness_512.ktx2',
1802
1849
  },
1803
1850
  mapProperties: {
1804
1851
  color: '#ffffff',
@@ -1814,7 +1861,7 @@ export const MATERIAL_CATALOG = [
1814
1861
  emissiveIntensity: 1,
1815
1862
  displacementScale: 0,
1816
1863
  transparent: false,
1817
- flipY: true,
1864
+ flipY: false,
1818
1865
  bumpScale: 1,
1819
1866
  emissiveColor: '#000000',
1820
1867
  aoMapIntensity: 1,
@@ -1827,13 +1874,15 @@ export const MATERIAL_CATALOG = [
1827
1874
  {
1828
1875
  id: 'preset-white',
1829
1876
  label: 'White',
1830
- category: 'other',
1877
+ category: 'colors',
1831
1878
  description: 'Clean painted finish',
1832
- previewColor: '#ffffff',
1879
+ // Real white paint reflects ~80%; a literal #ffffff albedo kills GI/shadow
1880
+ // contrast, so "white" is clamped to ≈0.83 linear.
1881
+ previewColor: '#e9e9e9',
1833
1882
  preset: {
1834
1883
  maps: {},
1835
1884
  mapProperties: {
1836
- color: '#ffffff',
1885
+ color: '#e9e9e9',
1837
1886
  roughness: 0.9,
1838
1887
  metalness: 0,
1839
1888
  repeatX: 1,
@@ -1859,13 +1908,13 @@ export const MATERIAL_CATALOG = [
1859
1908
  {
1860
1909
  id: 'preset-softwhite',
1861
1910
  label: 'Soft White',
1862
- category: 'other',
1911
+ category: 'colors',
1863
1912
  description: 'Warm off-white painted finish',
1864
- previewColor: '#f2eee6',
1913
+ previewColor: '#ebe7df',
1865
1914
  preset: {
1866
1915
  maps: {},
1867
1916
  mapProperties: {
1868
- color: '#f2eee6',
1917
+ color: '#ebe7df',
1869
1918
  roughness: 0.9,
1870
1919
  metalness: 0,
1871
1920
  repeatX: 1,
@@ -1891,7 +1940,7 @@ export const MATERIAL_CATALOG = [
1891
1940
  {
1892
1941
  id: 'preset-cream',
1893
1942
  label: 'Cream',
1894
- category: 'other',
1943
+ category: 'colors',
1895
1944
  description: 'Soft cream painted finish',
1896
1945
  previewColor: '#efe3cc',
1897
1946
  preset: {
@@ -1923,7 +1972,7 @@ export const MATERIAL_CATALOG = [
1923
1972
  {
1924
1973
  id: 'preset-beige',
1925
1974
  label: 'Beige',
1926
- category: 'other',
1975
+ category: 'colors',
1927
1976
  description: 'Balanced beige painted finish',
1928
1977
  previewColor: '#d9c7ad',
1929
1978
  preset: {
@@ -1952,10 +2001,42 @@ export const MATERIAL_CATALOG = [
1952
2001
  },
1953
2002
  },
1954
2003
  },
2004
+ {
2005
+ id: 'preset-lightgrey',
2006
+ label: 'Light grey',
2007
+ category: 'colors',
2008
+ description: 'Cool light grey painted finish',
2009
+ previewColor: '#d8d6d1',
2010
+ preset: {
2011
+ maps: {},
2012
+ mapProperties: {
2013
+ color: '#d8d6d1',
2014
+ roughness: 0.9,
2015
+ metalness: 0,
2016
+ repeatX: 1,
2017
+ repeatY: 1,
2018
+ rotation: 0,
2019
+ wrapS: 'Repeat',
2020
+ wrapT: 'Repeat',
2021
+ normalScaleX: 1,
2022
+ normalScaleY: 1,
2023
+ emissiveIntensity: 1,
2024
+ displacementScale: 0.02,
2025
+ transparent: false,
2026
+ flipY: true,
2027
+ bumpScale: 1,
2028
+ emissiveColor: '#000000',
2029
+ aoMapIntensity: 1,
2030
+ side: 0,
2031
+ opacity: 1,
2032
+ lightMapIntensity: 1,
2033
+ },
2034
+ },
2035
+ },
1955
2036
  {
1956
2037
  id: 'preset-greige',
1957
2038
  label: 'Greige',
1958
- category: 'other',
2039
+ category: 'colors',
1959
2040
  description: 'Neutral greige painted finish',
1960
2041
  previewColor: '#c8c1b8',
1961
2042
  preset: {
@@ -1985,15 +2066,15 @@ export const MATERIAL_CATALOG = [
1985
2066
  },
1986
2067
  },
1987
2068
  {
1988
- id: 'preset-sage',
1989
- label: 'Sage',
1990
- category: 'other',
1991
- description: 'Muted sage painted finish',
1992
- previewColor: '#bcc5b2',
2069
+ id: 'preset-midgrey',
2070
+ label: 'Mid grey',
2071
+ category: 'colors',
2072
+ description: 'Neutral mid grey painted finish',
2073
+ previewColor: '#8b8a86',
1993
2074
  preset: {
1994
2075
  maps: {},
1995
2076
  mapProperties: {
1996
- color: '#bcc5b2',
2077
+ color: '#8b8a86',
1997
2078
  roughness: 0.9,
1998
2079
  metalness: 0,
1999
2080
  repeatX: 1,
@@ -2017,15 +2098,15 @@ export const MATERIAL_CATALOG = [
2017
2098
  },
2018
2099
  },
2019
2100
  {
2020
- id: 'preset-softblue',
2021
- label: 'Soft Blue',
2022
- category: 'other',
2023
- description: 'Muted blue painted finish',
2024
- previewColor: '#c7d6e3',
2101
+ id: 'preset-charcoal',
2102
+ label: 'Charcoal',
2103
+ category: 'colors',
2104
+ description: 'Dark charcoal painted finish',
2105
+ previewColor: '#4e5257',
2025
2106
  preset: {
2026
2107
  maps: {},
2027
2108
  mapProperties: {
2028
- color: '#c7d6e3',
2109
+ color: '#4e5257',
2029
2110
  roughness: 0.9,
2030
2111
  metalness: 0,
2031
2112
  repeatX: 1,
@@ -2049,15 +2130,15 @@ export const MATERIAL_CATALOG = [
2049
2130
  },
2050
2131
  },
2051
2132
  {
2052
- id: 'preset-terracotta',
2053
- label: 'Terracotta',
2054
- category: 'other',
2055
- description: 'Warm terracotta painted finish',
2056
- previewColor: '#c86f4c',
2133
+ id: 'preset-nearblack',
2134
+ label: 'Near-black',
2135
+ category: 'colors',
2136
+ description: 'Soft near-black painted finish',
2137
+ previewColor: '#232322',
2057
2138
  preset: {
2058
2139
  maps: {},
2059
2140
  mapProperties: {
2060
- color: '#c86f4c',
2141
+ color: '#232322',
2061
2142
  roughness: 0.9,
2062
2143
  metalness: 0,
2063
2144
  repeatX: 1,
@@ -2081,15 +2162,15 @@ export const MATERIAL_CATALOG = [
2081
2162
  },
2082
2163
  },
2083
2164
  {
2084
- id: 'preset-dustyrose',
2085
- label: 'Dusty Rose',
2086
- category: 'other',
2087
- description: 'Muted rose painted finish',
2088
- previewColor: '#c48a8d',
2165
+ id: 'preset-blush',
2166
+ label: 'Blush',
2167
+ category: 'colors',
2168
+ description: 'Pale blush painted finish',
2169
+ previewColor: '#e8c6c0',
2089
2170
  preset: {
2090
2171
  maps: {},
2091
2172
  mapProperties: {
2092
- color: '#c48a8d',
2173
+ color: '#e8c6c0',
2093
2174
  roughness: 0.9,
2094
2175
  metalness: 0,
2095
2176
  repeatX: 1,
@@ -2113,15 +2194,15 @@ export const MATERIAL_CATALOG = [
2113
2194
  },
2114
2195
  },
2115
2196
  {
2116
- id: 'preset-olive',
2117
- label: 'Olive',
2118
- category: 'other',
2119
- description: 'Natural olive painted finish',
2120
- previewColor: '#8d9368',
2197
+ id: 'preset-tomato',
2198
+ label: 'Tomato',
2199
+ category: 'colors',
2200
+ description: 'Warm tomato red painted finish',
2201
+ previewColor: '#c0594f',
2121
2202
  preset: {
2122
2203
  maps: {},
2123
2204
  mapProperties: {
2124
- color: '#8d9368',
2205
+ color: '#c0594f',
2125
2206
  roughness: 0.9,
2126
2207
  metalness: 0,
2127
2208
  repeatX: 1,
@@ -2145,15 +2226,15 @@ export const MATERIAL_CATALOG = [
2145
2226
  },
2146
2227
  },
2147
2228
  {
2148
- id: 'preset-forest',
2149
- label: 'Forest',
2150
- category: 'other',
2151
- description: 'Deep forest green painted finish',
2152
- previewColor: '#4f6b57',
2229
+ id: 'preset-brickred',
2230
+ label: 'Brick red',
2231
+ category: 'colors',
2232
+ description: 'Deep brick red painted finish',
2233
+ previewColor: '#9e3b34',
2153
2234
  preset: {
2154
2235
  maps: {},
2155
2236
  mapProperties: {
2156
- color: '#4f6b57',
2237
+ color: '#9e3b34',
2157
2238
  roughness: 0.9,
2158
2239
  metalness: 0,
2159
2240
  repeatX: 1,
@@ -2177,15 +2258,15 @@ export const MATERIAL_CATALOG = [
2177
2258
  },
2178
2259
  },
2179
2260
  {
2180
- id: 'preset-slateblue',
2181
- label: 'Slate Blue',
2182
- category: 'other',
2183
- description: 'Muted slate blue painted finish',
2184
- previewColor: '#6f87a4',
2261
+ id: 'preset-oxblood',
2262
+ label: 'Oxblood',
2263
+ category: 'colors',
2264
+ description: 'Dark oxblood painted finish',
2265
+ previewColor: '#6f2c2a',
2185
2266
  preset: {
2186
2267
  maps: {},
2187
2268
  mapProperties: {
2188
- color: '#6f87a4',
2269
+ color: '#6f2c2a',
2189
2270
  roughness: 0.9,
2190
2271
  metalness: 0,
2191
2272
  repeatX: 1,
@@ -2209,15 +2290,15 @@ export const MATERIAL_CATALOG = [
2209
2290
  },
2210
2291
  },
2211
2292
  {
2212
- id: 'preset-navy',
2213
- label: 'Navy',
2214
- category: 'other',
2215
- description: 'Classic navy painted finish',
2216
- previewColor: '#2f4865',
2293
+ id: 'preset-peach',
2294
+ label: 'Peach',
2295
+ category: 'colors',
2296
+ description: 'Soft peach painted finish',
2297
+ previewColor: '#f0c3a0',
2217
2298
  preset: {
2218
2299
  maps: {},
2219
2300
  mapProperties: {
2220
- color: '#2f4865',
2301
+ color: '#f0c3a0',
2221
2302
  roughness: 0.9,
2222
2303
  metalness: 0,
2223
2304
  repeatX: 1,
@@ -2241,15 +2322,15 @@ export const MATERIAL_CATALOG = [
2241
2322
  },
2242
2323
  },
2243
2324
  {
2244
- id: 'preset-mustard',
2245
- label: 'Mustard',
2246
- category: 'other',
2247
- description: 'Warm mustard painted finish',
2248
- previewColor: '#c8a449',
2325
+ id: 'preset-terracotta',
2326
+ label: 'Terracotta',
2327
+ category: 'colors',
2328
+ description: 'Warm terracotta painted finish',
2329
+ previewColor: '#c86f4c',
2249
2330
  preset: {
2250
2331
  maps: {},
2251
2332
  mapProperties: {
2252
- color: '#c8a449',
2333
+ color: '#c86f4c',
2253
2334
  roughness: 0.9,
2254
2335
  metalness: 0,
2255
2336
  repeatX: 1,
@@ -2273,15 +2354,15 @@ export const MATERIAL_CATALOG = [
2273
2354
  },
2274
2355
  },
2275
2356
  {
2276
- id: 'preset-charcoal',
2277
- label: 'Charcoal',
2278
- category: 'other',
2279
- description: 'Dark charcoal painted finish',
2280
- previewColor: '#4e5257',
2357
+ id: 'preset-burntorange',
2358
+ label: 'Burnt orange',
2359
+ category: 'colors',
2360
+ description: 'Burnt orange painted finish',
2361
+ previewColor: '#b25a2c',
2281
2362
  preset: {
2282
2363
  maps: {},
2283
2364
  mapProperties: {
2284
- color: '#4e5257',
2365
+ color: '#b25a2c',
2285
2366
  roughness: 0.9,
2286
2367
  metalness: 0,
2287
2368
  repeatX: 1,
@@ -2305,17 +2386,17 @@ export const MATERIAL_CATALOG = [
2305
2386
  },
2306
2387
  },
2307
2388
  {
2308
- id: 'preset-metal',
2309
- label: 'Metal',
2310
- category: 'other',
2311
- description: 'Brushed metal finish',
2312
- previewColor: '#c0c0c0',
2389
+ id: 'preset-clay',
2390
+ label: 'Clay',
2391
+ category: 'colors',
2392
+ description: 'Deep clay painted finish',
2393
+ previewColor: '#8f4a2e',
2313
2394
  preset: {
2314
2395
  maps: {},
2315
2396
  mapProperties: {
2316
- color: '#c7ccd2',
2317
- roughness: 0.26,
2318
- metalness: 0.82,
2397
+ color: '#8f4a2e',
2398
+ roughness: 0.9,
2399
+ metalness: 0,
2319
2400
  repeatX: 1,
2320
2401
  repeatY: 1,
2321
2402
  rotation: 0,
@@ -2337,17 +2418,17 @@ export const MATERIAL_CATALOG = [
2337
2418
  },
2338
2419
  },
2339
2420
  {
2340
- id: 'preset-glass',
2341
- label: 'Glass',
2342
- category: 'other',
2343
- description: 'Light glass finish',
2344
- previewColor: '#87ceeb',
2421
+ id: 'preset-paleyellow',
2422
+ label: 'Pale yellow',
2423
+ category: 'colors',
2424
+ description: 'Pale yellow painted finish',
2425
+ previewColor: '#f2e3b3',
2345
2426
  preset: {
2346
2427
  maps: {},
2347
2428
  mapProperties: {
2348
- color: '#87ceeb',
2349
- roughness: 0.1,
2350
- metalness: 0.1,
2429
+ color: '#f2e3b3',
2430
+ roughness: 0.9,
2431
+ metalness: 0,
2351
2432
  repeatX: 1,
2352
2433
  repeatY: 1,
2353
2434
  rotation: 0,
@@ -2357,36 +2438,1695 @@ export const MATERIAL_CATALOG = [
2357
2438
  normalScaleY: 1,
2358
2439
  emissiveIntensity: 1,
2359
2440
  displacementScale: 0.02,
2360
- transparent: true,
2441
+ transparent: false,
2361
2442
  flipY: true,
2362
2443
  bumpScale: 1,
2363
2444
  emissiveColor: '#000000',
2364
2445
  aoMapIntensity: 1,
2365
- side: 2,
2366
- opacity: 0.3,
2446
+ side: 0,
2447
+ opacity: 1,
2367
2448
  lightMapIntensity: 1,
2368
2449
  },
2369
2450
  },
2370
2451
  },
2371
- ];
2372
- export function getMaterialsForCategory(category) {
2373
- return MATERIAL_CATALOG.filter((item) => item.category === category);
2374
- }
2375
- export function getCatalogMaterialById(id) {
2376
- if (!id)
2377
- return undefined;
2378
- return MATERIAL_CATALOG.find((item) => item.id === id);
2379
- }
2380
- export const LIBRARY_MATERIAL_REF_PREFIX = 'library:';
2381
- export function toLibraryMaterialRef(id) {
2382
- return `${LIBRARY_MATERIAL_REF_PREFIX}${id}`;
2383
- }
2384
- export function getLibraryMaterialIdFromRef(materialRef) {
2385
- if (!materialRef)
2386
- return null;
2387
- if (!materialRef.startsWith(LIBRARY_MATERIAL_REF_PREFIX))
2388
- return null;
2389
- return materialRef.slice(LIBRARY_MATERIAL_REF_PREFIX.length);
2452
+ {
2453
+ id: 'preset-mustard',
2454
+ label: 'Mustard',
2455
+ category: 'colors',
2456
+ description: 'Warm mustard painted finish',
2457
+ previewColor: '#c8a449',
2458
+ preset: {
2459
+ maps: {},
2460
+ mapProperties: {
2461
+ color: '#c8a449',
2462
+ roughness: 0.9,
2463
+ metalness: 0,
2464
+ repeatX: 1,
2465
+ repeatY: 1,
2466
+ rotation: 0,
2467
+ wrapS: 'Repeat',
2468
+ wrapT: 'Repeat',
2469
+ normalScaleX: 1,
2470
+ normalScaleY: 1,
2471
+ emissiveIntensity: 1,
2472
+ displacementScale: 0.02,
2473
+ transparent: false,
2474
+ flipY: true,
2475
+ bumpScale: 1,
2476
+ emissiveColor: '#000000',
2477
+ aoMapIntensity: 1,
2478
+ side: 0,
2479
+ opacity: 1,
2480
+ lightMapIntensity: 1,
2481
+ },
2482
+ },
2483
+ },
2484
+ {
2485
+ id: 'preset-ochre',
2486
+ label: 'Ochre',
2487
+ category: 'colors',
2488
+ description: 'Warm ochre painted finish',
2489
+ previewColor: '#b8852f',
2490
+ preset: {
2491
+ maps: {},
2492
+ mapProperties: {
2493
+ color: '#b8852f',
2494
+ roughness: 0.9,
2495
+ metalness: 0,
2496
+ repeatX: 1,
2497
+ repeatY: 1,
2498
+ rotation: 0,
2499
+ wrapS: 'Repeat',
2500
+ wrapT: 'Repeat',
2501
+ normalScaleX: 1,
2502
+ normalScaleY: 1,
2503
+ emissiveIntensity: 1,
2504
+ displacementScale: 0.02,
2505
+ transparent: false,
2506
+ flipY: true,
2507
+ bumpScale: 1,
2508
+ emissiveColor: '#000000',
2509
+ aoMapIntensity: 1,
2510
+ side: 0,
2511
+ opacity: 1,
2512
+ lightMapIntensity: 1,
2513
+ },
2514
+ },
2515
+ },
2516
+ {
2517
+ id: 'preset-gold',
2518
+ label: 'Gold',
2519
+ category: 'colors',
2520
+ description: 'Deep gold painted finish',
2521
+ previewColor: '#9c7320',
2522
+ preset: {
2523
+ maps: {},
2524
+ mapProperties: {
2525
+ color: '#9c7320',
2526
+ roughness: 0.9,
2527
+ metalness: 0,
2528
+ repeatX: 1,
2529
+ repeatY: 1,
2530
+ rotation: 0,
2531
+ wrapS: 'Repeat',
2532
+ wrapT: 'Repeat',
2533
+ normalScaleX: 1,
2534
+ normalScaleY: 1,
2535
+ emissiveIntensity: 1,
2536
+ displacementScale: 0.02,
2537
+ transparent: false,
2538
+ flipY: true,
2539
+ bumpScale: 1,
2540
+ emissiveColor: '#000000',
2541
+ aoMapIntensity: 1,
2542
+ side: 0,
2543
+ opacity: 1,
2544
+ lightMapIntensity: 1,
2545
+ },
2546
+ },
2547
+ },
2548
+ {
2549
+ id: 'preset-mint',
2550
+ label: 'Mint',
2551
+ category: 'colors',
2552
+ description: 'Soft mint painted finish',
2553
+ previewColor: '#cfe0cf',
2554
+ preset: {
2555
+ maps: {},
2556
+ mapProperties: {
2557
+ color: '#cfe0cf',
2558
+ roughness: 0.9,
2559
+ metalness: 0,
2560
+ repeatX: 1,
2561
+ repeatY: 1,
2562
+ rotation: 0,
2563
+ wrapS: 'Repeat',
2564
+ wrapT: 'Repeat',
2565
+ normalScaleX: 1,
2566
+ normalScaleY: 1,
2567
+ emissiveIntensity: 1,
2568
+ displacementScale: 0.02,
2569
+ transparent: false,
2570
+ flipY: true,
2571
+ bumpScale: 1,
2572
+ emissiveColor: '#000000',
2573
+ aoMapIntensity: 1,
2574
+ side: 0,
2575
+ opacity: 1,
2576
+ lightMapIntensity: 1,
2577
+ },
2578
+ },
2579
+ },
2580
+ {
2581
+ id: 'preset-sage',
2582
+ label: 'Sage',
2583
+ category: 'colors',
2584
+ description: 'Muted sage painted finish',
2585
+ previewColor: '#bcc5b2',
2586
+ preset: {
2587
+ maps: {},
2588
+ mapProperties: {
2589
+ color: '#bcc5b2',
2590
+ roughness: 0.9,
2591
+ metalness: 0,
2592
+ repeatX: 1,
2593
+ repeatY: 1,
2594
+ rotation: 0,
2595
+ wrapS: 'Repeat',
2596
+ wrapT: 'Repeat',
2597
+ normalScaleX: 1,
2598
+ normalScaleY: 1,
2599
+ emissiveIntensity: 1,
2600
+ displacementScale: 0.02,
2601
+ transparent: false,
2602
+ flipY: true,
2603
+ bumpScale: 1,
2604
+ emissiveColor: '#000000',
2605
+ aoMapIntensity: 1,
2606
+ side: 0,
2607
+ opacity: 1,
2608
+ lightMapIntensity: 1,
2609
+ },
2610
+ },
2611
+ },
2612
+ {
2613
+ id: 'preset-olive',
2614
+ label: 'Olive',
2615
+ category: 'colors',
2616
+ description: 'Natural olive painted finish',
2617
+ previewColor: '#8d9368',
2618
+ preset: {
2619
+ maps: {},
2620
+ mapProperties: {
2621
+ color: '#8d9368',
2622
+ roughness: 0.9,
2623
+ metalness: 0,
2624
+ repeatX: 1,
2625
+ repeatY: 1,
2626
+ rotation: 0,
2627
+ wrapS: 'Repeat',
2628
+ wrapT: 'Repeat',
2629
+ normalScaleX: 1,
2630
+ normalScaleY: 1,
2631
+ emissiveIntensity: 1,
2632
+ displacementScale: 0.02,
2633
+ transparent: false,
2634
+ flipY: true,
2635
+ bumpScale: 1,
2636
+ emissiveColor: '#000000',
2637
+ aoMapIntensity: 1,
2638
+ side: 0,
2639
+ opacity: 1,
2640
+ lightMapIntensity: 1,
2641
+ },
2642
+ },
2643
+ },
2644
+ {
2645
+ id: 'preset-forest',
2646
+ label: 'Forest',
2647
+ category: 'colors',
2648
+ description: 'Deep forest green painted finish',
2649
+ previewColor: '#4f6b57',
2650
+ preset: {
2651
+ maps: {},
2652
+ mapProperties: {
2653
+ color: '#4f6b57',
2654
+ roughness: 0.9,
2655
+ metalness: 0,
2656
+ repeatX: 1,
2657
+ repeatY: 1,
2658
+ rotation: 0,
2659
+ wrapS: 'Repeat',
2660
+ wrapT: 'Repeat',
2661
+ normalScaleX: 1,
2662
+ normalScaleY: 1,
2663
+ emissiveIntensity: 1,
2664
+ displacementScale: 0.02,
2665
+ transparent: false,
2666
+ flipY: true,
2667
+ bumpScale: 1,
2668
+ emissiveColor: '#000000',
2669
+ aoMapIntensity: 1,
2670
+ side: 0,
2671
+ opacity: 1,
2672
+ lightMapIntensity: 1,
2673
+ },
2674
+ },
2675
+ },
2676
+ {
2677
+ id: 'preset-paleteal',
2678
+ label: 'Pale teal',
2679
+ category: 'colors',
2680
+ description: 'Pale teal painted finish',
2681
+ previewColor: '#b9d2cf',
2682
+ preset: {
2683
+ maps: {},
2684
+ mapProperties: {
2685
+ color: '#b9d2cf',
2686
+ roughness: 0.9,
2687
+ metalness: 0,
2688
+ repeatX: 1,
2689
+ repeatY: 1,
2690
+ rotation: 0,
2691
+ wrapS: 'Repeat',
2692
+ wrapT: 'Repeat',
2693
+ normalScaleX: 1,
2694
+ normalScaleY: 1,
2695
+ emissiveIntensity: 1,
2696
+ displacementScale: 0.02,
2697
+ transparent: false,
2698
+ flipY: true,
2699
+ bumpScale: 1,
2700
+ emissiveColor: '#000000',
2701
+ aoMapIntensity: 1,
2702
+ side: 0,
2703
+ opacity: 1,
2704
+ lightMapIntensity: 1,
2705
+ },
2706
+ },
2707
+ },
2708
+ {
2709
+ id: 'preset-teal',
2710
+ label: 'Teal',
2711
+ category: 'colors',
2712
+ description: 'Balanced teal painted finish',
2713
+ previewColor: '#4f8a86',
2714
+ preset: {
2715
+ maps: {},
2716
+ mapProperties: {
2717
+ color: '#4f8a86',
2718
+ roughness: 0.9,
2719
+ metalness: 0,
2720
+ repeatX: 1,
2721
+ repeatY: 1,
2722
+ rotation: 0,
2723
+ wrapS: 'Repeat',
2724
+ wrapT: 'Repeat',
2725
+ normalScaleX: 1,
2726
+ normalScaleY: 1,
2727
+ emissiveIntensity: 1,
2728
+ displacementScale: 0.02,
2729
+ transparent: false,
2730
+ flipY: true,
2731
+ bumpScale: 1,
2732
+ emissiveColor: '#000000',
2733
+ aoMapIntensity: 1,
2734
+ side: 0,
2735
+ opacity: 1,
2736
+ lightMapIntensity: 1,
2737
+ },
2738
+ },
2739
+ },
2740
+ {
2741
+ id: 'preset-deepteal',
2742
+ label: 'Deep teal',
2743
+ category: 'colors',
2744
+ description: 'Deep teal painted finish',
2745
+ previewColor: '#2f5f5c',
2746
+ preset: {
2747
+ maps: {},
2748
+ mapProperties: {
2749
+ color: '#2f5f5c',
2750
+ roughness: 0.9,
2751
+ metalness: 0,
2752
+ repeatX: 1,
2753
+ repeatY: 1,
2754
+ rotation: 0,
2755
+ wrapS: 'Repeat',
2756
+ wrapT: 'Repeat',
2757
+ normalScaleX: 1,
2758
+ normalScaleY: 1,
2759
+ emissiveIntensity: 1,
2760
+ displacementScale: 0.02,
2761
+ transparent: false,
2762
+ flipY: true,
2763
+ bumpScale: 1,
2764
+ emissiveColor: '#000000',
2765
+ aoMapIntensity: 1,
2766
+ side: 0,
2767
+ opacity: 1,
2768
+ lightMapIntensity: 1,
2769
+ },
2770
+ },
2771
+ },
2772
+ {
2773
+ id: 'preset-powderblue',
2774
+ label: 'Powder blue',
2775
+ category: 'colors',
2776
+ description: 'Powder blue painted finish',
2777
+ previewColor: '#cddce8',
2778
+ preset: {
2779
+ maps: {},
2780
+ mapProperties: {
2781
+ color: '#cddce8',
2782
+ roughness: 0.9,
2783
+ metalness: 0,
2784
+ repeatX: 1,
2785
+ repeatY: 1,
2786
+ rotation: 0,
2787
+ wrapS: 'Repeat',
2788
+ wrapT: 'Repeat',
2789
+ normalScaleX: 1,
2790
+ normalScaleY: 1,
2791
+ emissiveIntensity: 1,
2792
+ displacementScale: 0.02,
2793
+ transparent: false,
2794
+ flipY: true,
2795
+ bumpScale: 1,
2796
+ emissiveColor: '#000000',
2797
+ aoMapIntensity: 1,
2798
+ side: 0,
2799
+ opacity: 1,
2800
+ lightMapIntensity: 1,
2801
+ },
2802
+ },
2803
+ },
2804
+ {
2805
+ id: 'preset-softblue',
2806
+ label: 'Soft Blue',
2807
+ category: 'colors',
2808
+ description: 'Muted blue painted finish',
2809
+ previewColor: '#c7d6e3',
2810
+ preset: {
2811
+ maps: {},
2812
+ mapProperties: {
2813
+ color: '#c7d6e3',
2814
+ roughness: 0.9,
2815
+ metalness: 0,
2816
+ repeatX: 1,
2817
+ repeatY: 1,
2818
+ rotation: 0,
2819
+ wrapS: 'Repeat',
2820
+ wrapT: 'Repeat',
2821
+ normalScaleX: 1,
2822
+ normalScaleY: 1,
2823
+ emissiveIntensity: 1,
2824
+ displacementScale: 0.02,
2825
+ transparent: false,
2826
+ flipY: true,
2827
+ bumpScale: 1,
2828
+ emissiveColor: '#000000',
2829
+ aoMapIntensity: 1,
2830
+ side: 0,
2831
+ opacity: 1,
2832
+ lightMapIntensity: 1,
2833
+ },
2834
+ },
2835
+ },
2836
+ {
2837
+ id: 'preset-sky',
2838
+ label: 'Sky',
2839
+ category: 'colors',
2840
+ description: 'Sky blue painted finish',
2841
+ previewColor: '#8fb4d4',
2842
+ preset: {
2843
+ maps: {},
2844
+ mapProperties: {
2845
+ color: '#8fb4d4',
2846
+ roughness: 0.9,
2847
+ metalness: 0,
2848
+ repeatX: 1,
2849
+ repeatY: 1,
2850
+ rotation: 0,
2851
+ wrapS: 'Repeat',
2852
+ wrapT: 'Repeat',
2853
+ normalScaleX: 1,
2854
+ normalScaleY: 1,
2855
+ emissiveIntensity: 1,
2856
+ displacementScale: 0.02,
2857
+ transparent: false,
2858
+ flipY: true,
2859
+ bumpScale: 1,
2860
+ emissiveColor: '#000000',
2861
+ aoMapIntensity: 1,
2862
+ side: 0,
2863
+ opacity: 1,
2864
+ lightMapIntensity: 1,
2865
+ },
2866
+ },
2867
+ },
2868
+ {
2869
+ id: 'preset-slateblue',
2870
+ label: 'Slate Blue',
2871
+ category: 'colors',
2872
+ description: 'Muted slate blue painted finish',
2873
+ previewColor: '#6f87a4',
2874
+ preset: {
2875
+ maps: {},
2876
+ mapProperties: {
2877
+ color: '#6f87a4',
2878
+ roughness: 0.9,
2879
+ metalness: 0,
2880
+ repeatX: 1,
2881
+ repeatY: 1,
2882
+ rotation: 0,
2883
+ wrapS: 'Repeat',
2884
+ wrapT: 'Repeat',
2885
+ normalScaleX: 1,
2886
+ normalScaleY: 1,
2887
+ emissiveIntensity: 1,
2888
+ displacementScale: 0.02,
2889
+ transparent: false,
2890
+ flipY: true,
2891
+ bumpScale: 1,
2892
+ emissiveColor: '#000000',
2893
+ aoMapIntensity: 1,
2894
+ side: 0,
2895
+ opacity: 1,
2896
+ lightMapIntensity: 1,
2897
+ },
2898
+ },
2899
+ },
2900
+ {
2901
+ id: 'preset-royalblue',
2902
+ label: 'Royal blue',
2903
+ category: 'colors',
2904
+ description: 'Royal blue painted finish',
2905
+ previewColor: '#3a5a9c',
2906
+ preset: {
2907
+ maps: {},
2908
+ mapProperties: {
2909
+ color: '#3a5a9c',
2910
+ roughness: 0.9,
2911
+ metalness: 0,
2912
+ repeatX: 1,
2913
+ repeatY: 1,
2914
+ rotation: 0,
2915
+ wrapS: 'Repeat',
2916
+ wrapT: 'Repeat',
2917
+ normalScaleX: 1,
2918
+ normalScaleY: 1,
2919
+ emissiveIntensity: 1,
2920
+ displacementScale: 0.02,
2921
+ transparent: false,
2922
+ flipY: true,
2923
+ bumpScale: 1,
2924
+ emissiveColor: '#000000',
2925
+ aoMapIntensity: 1,
2926
+ side: 0,
2927
+ opacity: 1,
2928
+ lightMapIntensity: 1,
2929
+ },
2930
+ },
2931
+ },
2932
+ {
2933
+ id: 'preset-navy',
2934
+ label: 'Navy',
2935
+ category: 'colors',
2936
+ description: 'Classic navy painted finish',
2937
+ previewColor: '#2f4865',
2938
+ preset: {
2939
+ maps: {},
2940
+ mapProperties: {
2941
+ color: '#2f4865',
2942
+ roughness: 0.9,
2943
+ metalness: 0,
2944
+ repeatX: 1,
2945
+ repeatY: 1,
2946
+ rotation: 0,
2947
+ wrapS: 'Repeat',
2948
+ wrapT: 'Repeat',
2949
+ normalScaleX: 1,
2950
+ normalScaleY: 1,
2951
+ emissiveIntensity: 1,
2952
+ displacementScale: 0.02,
2953
+ transparent: false,
2954
+ flipY: true,
2955
+ bumpScale: 1,
2956
+ emissiveColor: '#000000',
2957
+ aoMapIntensity: 1,
2958
+ side: 0,
2959
+ opacity: 1,
2960
+ lightMapIntensity: 1,
2961
+ },
2962
+ },
2963
+ },
2964
+ {
2965
+ id: 'preset-lavender',
2966
+ label: 'Lavender',
2967
+ category: 'colors',
2968
+ description: 'Soft lavender painted finish',
2969
+ previewColor: '#c9c2da',
2970
+ preset: {
2971
+ maps: {},
2972
+ mapProperties: {
2973
+ color: '#c9c2da',
2974
+ roughness: 0.9,
2975
+ metalness: 0,
2976
+ repeatX: 1,
2977
+ repeatY: 1,
2978
+ rotation: 0,
2979
+ wrapS: 'Repeat',
2980
+ wrapT: 'Repeat',
2981
+ normalScaleX: 1,
2982
+ normalScaleY: 1,
2983
+ emissiveIntensity: 1,
2984
+ displacementScale: 0.02,
2985
+ transparent: false,
2986
+ flipY: true,
2987
+ bumpScale: 1,
2988
+ emissiveColor: '#000000',
2989
+ aoMapIntensity: 1,
2990
+ side: 0,
2991
+ opacity: 1,
2992
+ lightMapIntensity: 1,
2993
+ },
2994
+ },
2995
+ },
2996
+ {
2997
+ id: 'preset-plum',
2998
+ label: 'Plum',
2999
+ category: 'colors',
3000
+ description: 'Muted plum painted finish',
3001
+ previewColor: '#6d4a63',
3002
+ preset: {
3003
+ maps: {},
3004
+ mapProperties: {
3005
+ color: '#6d4a63',
3006
+ roughness: 0.9,
3007
+ metalness: 0,
3008
+ repeatX: 1,
3009
+ repeatY: 1,
3010
+ rotation: 0,
3011
+ wrapS: 'Repeat',
3012
+ wrapT: 'Repeat',
3013
+ normalScaleX: 1,
3014
+ normalScaleY: 1,
3015
+ emissiveIntensity: 1,
3016
+ displacementScale: 0.02,
3017
+ transparent: false,
3018
+ flipY: true,
3019
+ bumpScale: 1,
3020
+ emissiveColor: '#000000',
3021
+ aoMapIntensity: 1,
3022
+ side: 0,
3023
+ opacity: 1,
3024
+ lightMapIntensity: 1,
3025
+ },
3026
+ },
3027
+ },
3028
+ {
3029
+ id: 'preset-aubergine',
3030
+ label: 'Aubergine',
3031
+ category: 'colors',
3032
+ description: 'Deep aubergine painted finish',
3033
+ previewColor: '#594354',
3034
+ preset: {
3035
+ maps: {},
3036
+ mapProperties: {
3037
+ color: '#594354',
3038
+ roughness: 0.9,
3039
+ metalness: 0,
3040
+ repeatX: 1,
3041
+ repeatY: 1,
3042
+ rotation: 0,
3043
+ wrapS: 'Repeat',
3044
+ wrapT: 'Repeat',
3045
+ normalScaleX: 1,
3046
+ normalScaleY: 1,
3047
+ emissiveIntensity: 1,
3048
+ displacementScale: 0.02,
3049
+ transparent: false,
3050
+ flipY: true,
3051
+ bumpScale: 1,
3052
+ emissiveColor: '#000000',
3053
+ aoMapIntensity: 1,
3054
+ side: 0,
3055
+ opacity: 1,
3056
+ lightMapIntensity: 1,
3057
+ },
3058
+ },
3059
+ },
3060
+ {
3061
+ id: 'preset-petal',
3062
+ label: 'Petal',
3063
+ category: 'colors',
3064
+ description: 'Pale petal pink painted finish',
3065
+ previewColor: '#f0d3da',
3066
+ preset: {
3067
+ maps: {},
3068
+ mapProperties: {
3069
+ color: '#f0d3da',
3070
+ roughness: 0.9,
3071
+ metalness: 0,
3072
+ repeatX: 1,
3073
+ repeatY: 1,
3074
+ rotation: 0,
3075
+ wrapS: 'Repeat',
3076
+ wrapT: 'Repeat',
3077
+ normalScaleX: 1,
3078
+ normalScaleY: 1,
3079
+ emissiveIntensity: 1,
3080
+ displacementScale: 0.02,
3081
+ transparent: false,
3082
+ flipY: true,
3083
+ bumpScale: 1,
3084
+ emissiveColor: '#000000',
3085
+ aoMapIntensity: 1,
3086
+ side: 0,
3087
+ opacity: 1,
3088
+ lightMapIntensity: 1,
3089
+ },
3090
+ },
3091
+ },
3092
+ {
3093
+ id: 'preset-rose',
3094
+ label: 'Rose',
3095
+ category: 'colors',
3096
+ description: 'Muted rose painted finish',
3097
+ previewColor: '#cf8fa6',
3098
+ preset: {
3099
+ maps: {},
3100
+ mapProperties: {
3101
+ color: '#cf8fa6',
3102
+ roughness: 0.9,
3103
+ metalness: 0,
3104
+ repeatX: 1,
3105
+ repeatY: 1,
3106
+ rotation: 0,
3107
+ wrapS: 'Repeat',
3108
+ wrapT: 'Repeat',
3109
+ normalScaleX: 1,
3110
+ normalScaleY: 1,
3111
+ emissiveIntensity: 1,
3112
+ displacementScale: 0.02,
3113
+ transparent: false,
3114
+ flipY: true,
3115
+ bumpScale: 1,
3116
+ emissiveColor: '#000000',
3117
+ aoMapIntensity: 1,
3118
+ side: 0,
3119
+ opacity: 1,
3120
+ lightMapIntensity: 1,
3121
+ },
3122
+ },
3123
+ },
3124
+ {
3125
+ id: 'preset-dustyrose',
3126
+ label: 'Dusty Rose',
3127
+ category: 'colors',
3128
+ description: 'Muted rose painted finish',
3129
+ previewColor: '#c48a8d',
3130
+ preset: {
3131
+ maps: {},
3132
+ mapProperties: {
3133
+ color: '#c48a8d',
3134
+ roughness: 0.9,
3135
+ metalness: 0,
3136
+ repeatX: 1,
3137
+ repeatY: 1,
3138
+ rotation: 0,
3139
+ wrapS: 'Repeat',
3140
+ wrapT: 'Repeat',
3141
+ normalScaleX: 1,
3142
+ normalScaleY: 1,
3143
+ emissiveIntensity: 1,
3144
+ displacementScale: 0.02,
3145
+ transparent: false,
3146
+ flipY: true,
3147
+ bumpScale: 1,
3148
+ emissiveColor: '#000000',
3149
+ aoMapIntensity: 1,
3150
+ side: 0,
3151
+ opacity: 1,
3152
+ lightMapIntensity: 1,
3153
+ },
3154
+ },
3155
+ },
3156
+ {
3157
+ id: 'preset-berry',
3158
+ label: 'Berry',
3159
+ category: 'colors',
3160
+ description: 'Deep berry painted finish',
3161
+ previewColor: '#8f4a5a',
3162
+ preset: {
3163
+ maps: {},
3164
+ mapProperties: {
3165
+ color: '#8f4a5a',
3166
+ roughness: 0.9,
3167
+ metalness: 0,
3168
+ repeatX: 1,
3169
+ repeatY: 1,
3170
+ rotation: 0,
3171
+ wrapS: 'Repeat',
3172
+ wrapT: 'Repeat',
3173
+ normalScaleX: 1,
3174
+ normalScaleY: 1,
3175
+ emissiveIntensity: 1,
3176
+ displacementScale: 0.02,
3177
+ transparent: false,
3178
+ flipY: true,
3179
+ bumpScale: 1,
3180
+ emissiveColor: '#000000',
3181
+ aoMapIntensity: 1,
3182
+ side: 0,
3183
+ opacity: 1,
3184
+ lightMapIntensity: 1,
3185
+ },
3186
+ },
3187
+ },
3188
+ {
3189
+ id: 'preset-sand',
3190
+ label: 'Sand',
3191
+ category: 'colors',
3192
+ description: 'Warm sand painted finish',
3193
+ previewColor: '#ddccae',
3194
+ preset: {
3195
+ maps: {},
3196
+ mapProperties: {
3197
+ color: '#ddccae',
3198
+ roughness: 0.9,
3199
+ metalness: 0,
3200
+ repeatX: 1,
3201
+ repeatY: 1,
3202
+ rotation: 0,
3203
+ wrapS: 'Repeat',
3204
+ wrapT: 'Repeat',
3205
+ normalScaleX: 1,
3206
+ normalScaleY: 1,
3207
+ emissiveIntensity: 1,
3208
+ displacementScale: 0.02,
3209
+ transparent: false,
3210
+ flipY: true,
3211
+ bumpScale: 1,
3212
+ emissiveColor: '#000000',
3213
+ aoMapIntensity: 1,
3214
+ side: 0,
3215
+ opacity: 1,
3216
+ lightMapIntensity: 1,
3217
+ },
3218
+ },
3219
+ },
3220
+ {
3221
+ id: 'preset-tan',
3222
+ label: 'Tan',
3223
+ category: 'colors',
3224
+ description: 'Natural tan painted finish',
3225
+ previewColor: '#c4a87f',
3226
+ preset: {
3227
+ maps: {},
3228
+ mapProperties: {
3229
+ color: '#c4a87f',
3230
+ roughness: 0.9,
3231
+ metalness: 0,
3232
+ repeatX: 1,
3233
+ repeatY: 1,
3234
+ rotation: 0,
3235
+ wrapS: 'Repeat',
3236
+ wrapT: 'Repeat',
3237
+ normalScaleX: 1,
3238
+ normalScaleY: 1,
3239
+ emissiveIntensity: 1,
3240
+ displacementScale: 0.02,
3241
+ transparent: false,
3242
+ flipY: true,
3243
+ bumpScale: 1,
3244
+ emissiveColor: '#000000',
3245
+ aoMapIntensity: 1,
3246
+ side: 0,
3247
+ opacity: 1,
3248
+ lightMapIntensity: 1,
3249
+ },
3250
+ },
3251
+ },
3252
+ {
3253
+ id: 'preset-taupe',
3254
+ label: 'Taupe',
3255
+ category: 'colors',
3256
+ description: 'Earthy taupe painted finish',
3257
+ previewColor: '#8f7a64',
3258
+ preset: {
3259
+ maps: {},
3260
+ mapProperties: {
3261
+ color: '#8f7a64',
3262
+ roughness: 0.9,
3263
+ metalness: 0,
3264
+ repeatX: 1,
3265
+ repeatY: 1,
3266
+ rotation: 0,
3267
+ wrapS: 'Repeat',
3268
+ wrapT: 'Repeat',
3269
+ normalScaleX: 1,
3270
+ normalScaleY: 1,
3271
+ emissiveIntensity: 1,
3272
+ displacementScale: 0.02,
3273
+ transparent: false,
3274
+ flipY: true,
3275
+ bumpScale: 1,
3276
+ emissiveColor: '#000000',
3277
+ aoMapIntensity: 1,
3278
+ side: 0,
3279
+ opacity: 1,
3280
+ lightMapIntensity: 1,
3281
+ },
3282
+ },
3283
+ },
3284
+ {
3285
+ id: 'preset-espresso',
3286
+ label: 'Espresso',
3287
+ category: 'colors',
3288
+ description: 'Dark espresso painted finish',
3289
+ previewColor: '#4a382c',
3290
+ preset: {
3291
+ maps: {},
3292
+ mapProperties: {
3293
+ color: '#4a382c',
3294
+ roughness: 0.9,
3295
+ metalness: 0,
3296
+ repeatX: 1,
3297
+ repeatY: 1,
3298
+ rotation: 0,
3299
+ wrapS: 'Repeat',
3300
+ wrapT: 'Repeat',
3301
+ normalScaleX: 1,
3302
+ normalScaleY: 1,
3303
+ emissiveIntensity: 1,
3304
+ displacementScale: 0.02,
3305
+ transparent: false,
3306
+ flipY: true,
3307
+ bumpScale: 1,
3308
+ emissiveColor: '#000000',
3309
+ aoMapIntensity: 1,
3310
+ side: 0,
3311
+ opacity: 1,
3312
+ lightMapIntensity: 1,
3313
+ },
3314
+ },
3315
+ },
3316
+ {
3317
+ id: 'preset-metal',
3318
+ label: 'Metal',
3319
+ category: 'metal',
3320
+ surfaces: ['furniture', 'wall'],
3321
+ description: 'Brushed metal finish',
3322
+ previewColor: '#c0c0c0',
3323
+ preset: {
3324
+ maps: {},
3325
+ mapProperties: {
3326
+ color: '#c7ccd2',
3327
+ roughness: 0.26,
3328
+ metalness: 0.82,
3329
+ repeatX: 1,
3330
+ repeatY: 1,
3331
+ rotation: 0,
3332
+ wrapS: 'Repeat',
3333
+ wrapT: 'Repeat',
3334
+ normalScaleX: 1,
3335
+ normalScaleY: 1,
3336
+ emissiveIntensity: 1,
3337
+ displacementScale: 0.02,
3338
+ transparent: false,
3339
+ flipY: true,
3340
+ bumpScale: 1,
3341
+ emissiveColor: '#000000',
3342
+ aoMapIntensity: 1,
3343
+ side: 0,
3344
+ opacity: 1,
3345
+ lightMapIntensity: 1,
3346
+ },
3347
+ },
3348
+ },
3349
+ {
3350
+ id: 'preset-glass',
3351
+ label: 'Glass',
3352
+ category: 'glass',
3353
+ description: 'Light glass finish',
3354
+ previewColor: '#87ceeb',
3355
+ preset: {
3356
+ maps: {},
3357
+ mapProperties: {
3358
+ color: '#87ceeb',
3359
+ roughness: 0.1,
3360
+ metalness: 0.1,
3361
+ repeatX: 1,
3362
+ repeatY: 1,
3363
+ rotation: 0,
3364
+ wrapS: 'Repeat',
3365
+ wrapT: 'Repeat',
3366
+ normalScaleX: 1,
3367
+ normalScaleY: 1,
3368
+ emissiveIntensity: 1,
3369
+ displacementScale: 0.02,
3370
+ transparent: true,
3371
+ flipY: true,
3372
+ bumpScale: 1,
3373
+ emissiveColor: '#000000',
3374
+ aoMapIntensity: 1,
3375
+ // FrontSide — DoubleSide on a NodeMaterial poisons the WebGPU MRT scene
3376
+ // pass (window/door glass relies on this). It's the only glass we use.
3377
+ side: 0,
3378
+ opacity: 0.3,
3379
+ lightMapIntensity: 1,
3380
+ },
3381
+ },
3382
+ },
3383
+ {
3384
+ id: 'fabric-linen',
3385
+ label: 'Linen',
3386
+ category: 'fabric',
3387
+ surfaces: ['furniture', 'wall'],
3388
+ description: 'Natural linen weave',
3389
+ previewThumbnailUrl: '/material/fabric/linen_hikari_fabric/linen_hikari_fabric_thumb.webp',
3390
+ preset: {
3391
+ maps: {
3392
+ albedoMap: '/material/fabric/linen_hikari_fabric/linen_hikari_fabric_basecolor_512.ktx2',
3393
+ normalMap: '/material/fabric/linen_hikari_fabric/linen_hikari_fabric_normal_512.ktx2',
3394
+ },
3395
+ mapProperties: {
3396
+ color: '#ffffff',
3397
+ roughness: 0.85,
3398
+ metalness: 0,
3399
+ repeatX: 2,
3400
+ repeatY: 2,
3401
+ rotation: 0,
3402
+ wrapS: 'Repeat',
3403
+ wrapT: 'Repeat',
3404
+ normalScaleX: 1,
3405
+ normalScaleY: 1,
3406
+ emissiveIntensity: 1,
3407
+ displacementScale: 0,
3408
+ transparent: false,
3409
+ flipY: false,
3410
+ bumpScale: 1,
3411
+ emissiveColor: '#000000',
3412
+ aoMapIntensity: 1,
3413
+ side: 0,
3414
+ opacity: 1,
3415
+ lightMapIntensity: 1,
3416
+ },
3417
+ },
3418
+ },
3419
+ {
3420
+ id: 'fabric-cotton',
3421
+ label: 'Cotton',
3422
+ category: 'fabric',
3423
+ surfaces: ['furniture', 'wall'],
3424
+ description: 'Plain cotton weave',
3425
+ previewThumbnailUrl: '/material/fabric/blue_cotton/blue_cotton_thumb.webp',
3426
+ preset: {
3427
+ maps: {
3428
+ albedoMap: '/material/fabric/blue_cotton/blue_cotton_basecolor_512.ktx2',
3429
+ normalMap: '/material/fabric/blue_cotton/blue_cotton_normal_512.ktx2',
3430
+ roughnessMap: '/material/fabric/blue_cotton/blue_cotton_roughness_512.ktx2',
3431
+ aoMap: '/material/fabric/blue_cotton/blue_cotton_ao_512.ktx2',
3432
+ },
3433
+ mapProperties: {
3434
+ color: '#ffffff',
3435
+ roughness: 0.85,
3436
+ metalness: 0,
3437
+ repeatX: 2,
3438
+ repeatY: 2,
3439
+ rotation: 0,
3440
+ wrapS: 'Repeat',
3441
+ wrapT: 'Repeat',
3442
+ normalScaleX: 1,
3443
+ normalScaleY: 1,
3444
+ emissiveIntensity: 1,
3445
+ displacementScale: 0,
3446
+ transparent: false,
3447
+ flipY: false,
3448
+ bumpScale: 1,
3449
+ emissiveColor: '#000000',
3450
+ aoMapIntensity: 1,
3451
+ side: 0,
3452
+ opacity: 1,
3453
+ lightMapIntensity: 1,
3454
+ },
3455
+ },
3456
+ },
3457
+ {
3458
+ id: 'fabric-velvet',
3459
+ label: 'Velvet',
3460
+ category: 'fabric',
3461
+ surfaces: ['furniture'],
3462
+ description: 'Velvet with a soft sheen',
3463
+ previewThumbnailUrl: '/material/fabric/red_velvet/red_velvet_thumb.webp',
3464
+ preset: {
3465
+ maps: {
3466
+ albedoMap: '/material/fabric/red_velvet/red_velvet_basecolor_512.ktx2',
3467
+ normalMap: '/material/fabric/red_velvet/red_velvet_normal_512.ktx2',
3468
+ roughnessMap: '/material/fabric/red_velvet/red_velvet_roughness_512.ktx2',
3469
+ aoMap: '/material/fabric/red_velvet/red_velvet_ao_512.ktx2',
3470
+ },
3471
+ mapProperties: {
3472
+ color: '#ffffff',
3473
+ roughness: 0.6,
3474
+ metalness: 0,
3475
+ repeatX: 2.5,
3476
+ repeatY: 2.5,
3477
+ rotation: 0,
3478
+ wrapS: 'Repeat',
3479
+ wrapT: 'Repeat',
3480
+ normalScaleX: 1,
3481
+ normalScaleY: 1,
3482
+ emissiveIntensity: 1,
3483
+ displacementScale: 0,
3484
+ transparent: false,
3485
+ flipY: false,
3486
+ bumpScale: 1,
3487
+ emissiveColor: '#000000',
3488
+ aoMapIntensity: 1,
3489
+ side: 0,
3490
+ opacity: 1,
3491
+ lightMapIntensity: 1,
3492
+ },
3493
+ },
3494
+ },
3495
+ {
3496
+ id: 'fabric-wool',
3497
+ label: 'Wool',
3498
+ category: 'fabric',
3499
+ surfaces: ['furniture'],
3500
+ description: 'Matte wool felt',
3501
+ previewThumbnailUrl: '/material/fabric/white_wool/white_wool_thumb.webp',
3502
+ preset: {
3503
+ maps: {
3504
+ albedoMap: '/material/fabric/white_wool/white_wool_basecolor_512.ktx2',
3505
+ normalMap: '/material/fabric/white_wool/white_wool_normal_512.ktx2',
3506
+ roughnessMap: '/material/fabric/white_wool/white_wool_roughness_512.ktx2',
3507
+ aoMap: '/material/fabric/white_wool/white_wool_ao_512.ktx2',
3508
+ },
3509
+ mapProperties: {
3510
+ color: '#ffffff',
3511
+ roughness: 0.9,
3512
+ metalness: 0,
3513
+ repeatX: 2.5,
3514
+ repeatY: 2.5,
3515
+ rotation: 0,
3516
+ wrapS: 'Repeat',
3517
+ wrapT: 'Repeat',
3518
+ normalScaleX: 1,
3519
+ normalScaleY: 1,
3520
+ emissiveIntensity: 1,
3521
+ displacementScale: 0,
3522
+ transparent: false,
3523
+ flipY: false,
3524
+ bumpScale: 1,
3525
+ emissiveColor: '#000000',
3526
+ aoMapIntensity: 1,
3527
+ side: 0,
3528
+ opacity: 1,
3529
+ lightMapIntensity: 1,
3530
+ },
3531
+ },
3532
+ },
3533
+ {
3534
+ id: 'fabric-suede',
3535
+ label: 'Suede',
3536
+ category: 'fabric',
3537
+ surfaces: ['furniture'],
3538
+ description: 'Matte suede nap',
3539
+ previewThumbnailUrl: '/material/fabric/suede/suede_thumb.webp',
3540
+ preset: {
3541
+ maps: {
3542
+ albedoMap: '/material/fabric/suede/suede_basecolor_512.ktx2',
3543
+ normalMap: '/material/fabric/suede/suede_normal_512.ktx2',
3544
+ roughnessMap: '/material/fabric/suede/suede_roughness_512.ktx2',
3545
+ aoMap: '/material/fabric/suede/suede_ao_512.ktx2',
3546
+ },
3547
+ mapProperties: {
3548
+ color: '#ffffff',
3549
+ roughness: 0.9,
3550
+ metalness: 0,
3551
+ repeatX: 2,
3552
+ repeatY: 2,
3553
+ rotation: 0,
3554
+ wrapS: 'Repeat',
3555
+ wrapT: 'Repeat',
3556
+ normalScaleX: 1,
3557
+ normalScaleY: 1,
3558
+ emissiveIntensity: 1,
3559
+ displacementScale: 0,
3560
+ transparent: false,
3561
+ flipY: false,
3562
+ bumpScale: 1,
3563
+ emissiveColor: '#000000',
3564
+ aoMapIntensity: 1,
3565
+ side: 0,
3566
+ opacity: 1,
3567
+ lightMapIntensity: 1,
3568
+ },
3569
+ },
3570
+ },
3571
+ {
3572
+ id: 'fabric-boucle',
3573
+ label: 'Bouclé',
3574
+ category: 'fabric',
3575
+ surfaces: ['furniture'],
3576
+ description: 'Looped bouclé upholstery',
3577
+ previewThumbnailUrl: '/material/fabric/wool_boucle/wool_boucle_thumb.webp',
3578
+ preset: {
3579
+ maps: {
3580
+ albedoMap: '/material/fabric/wool_boucle/wool_boucle_basecolor_512.ktx2',
3581
+ normalMap: '/material/fabric/wool_boucle/wool_boucle_normal_512.ktx2',
3582
+ },
3583
+ mapProperties: {
3584
+ color: '#ffffff',
3585
+ roughness: 0.9,
3586
+ metalness: 0,
3587
+ repeatX: 3.3,
3588
+ repeatY: 3.3,
3589
+ rotation: 0,
3590
+ wrapS: 'Repeat',
3591
+ wrapT: 'Repeat',
3592
+ normalScaleX: 1,
3593
+ normalScaleY: 1,
3594
+ emissiveIntensity: 1,
3595
+ displacementScale: 0,
3596
+ transparent: false,
3597
+ flipY: false,
3598
+ bumpScale: 1,
3599
+ emissiveColor: '#000000',
3600
+ aoMapIntensity: 1,
3601
+ side: 0,
3602
+ opacity: 1,
3603
+ lightMapIntensity: 1,
3604
+ },
3605
+ },
3606
+ },
3607
+ {
3608
+ id: 'leather-black',
3609
+ label: 'Black Leather',
3610
+ category: 'leather',
3611
+ surfaces: ['furniture'],
3612
+ description: 'Smooth black leather',
3613
+ previewThumbnailUrl: '/material/leather/black_leather/black_leather_thumb.webp',
3614
+ preset: {
3615
+ maps: {
3616
+ albedoMap: '/material/leather/black_leather/black_leather_basecolor_512.ktx2',
3617
+ normalMap: '/material/leather/black_leather/black_leather_normal_512.ktx2',
3618
+ roughnessMap: '/material/leather/black_leather/black_leather_roughness_512.ktx2',
3619
+ },
3620
+ mapProperties: {
3621
+ color: '#ffffff',
3622
+ roughness: 0.5,
3623
+ metalness: 0,
3624
+ repeatX: 1.67,
3625
+ repeatY: 1.67,
3626
+ rotation: 0,
3627
+ wrapS: 'Repeat',
3628
+ wrapT: 'Repeat',
3629
+ normalScaleX: 1,
3630
+ normalScaleY: 1,
3631
+ emissiveIntensity: 1,
3632
+ displacementScale: 0,
3633
+ transparent: false,
3634
+ flipY: false,
3635
+ bumpScale: 1,
3636
+ emissiveColor: '#000000',
3637
+ aoMapIntensity: 1,
3638
+ side: 0,
3639
+ opacity: 1,
3640
+ lightMapIntensity: 1,
3641
+ },
3642
+ },
3643
+ },
3644
+ {
3645
+ id: 'leather-calf',
3646
+ label: 'Calf Leather',
3647
+ category: 'leather',
3648
+ surfaces: ['furniture'],
3649
+ description: 'Pebbled calf leather',
3650
+ previewThumbnailUrl: '/material/leather/calf_leather/calf_leather_thumb.webp',
3651
+ preset: {
3652
+ maps: {
3653
+ albedoMap: '/material/leather/calf_leather/calf_leather_basecolor_512.ktx2',
3654
+ normalMap: '/material/leather/calf_leather/calf_leather_normal_512.ktx2',
3655
+ roughnessMap: '/material/leather/calf_leather/calf_leather_roughness_512.ktx2',
3656
+ aoMap: '/material/leather/calf_leather/calf_leather_ao_512.ktx2',
3657
+ },
3658
+ mapProperties: {
3659
+ color: '#ffffff',
3660
+ roughness: 0.5,
3661
+ metalness: 0,
3662
+ repeatX: 2,
3663
+ repeatY: 2,
3664
+ rotation: 0,
3665
+ wrapS: 'Repeat',
3666
+ wrapT: 'Repeat',
3667
+ normalScaleX: 1,
3668
+ normalScaleY: 1,
3669
+ emissiveIntensity: 1,
3670
+ displacementScale: 0,
3671
+ transparent: false,
3672
+ flipY: false,
3673
+ bumpScale: 1,
3674
+ emissiveColor: '#000000',
3675
+ aoMapIntensity: 1,
3676
+ side: 0,
3677
+ opacity: 1,
3678
+ lightMapIntensity: 1,
3679
+ },
3680
+ },
3681
+ },
3682
+ {
3683
+ id: 'concrete-plaster',
3684
+ label: 'Painted Plaster',
3685
+ category: 'concrete',
3686
+ surfaces: ['wall', 'ceiling'],
3687
+ description: 'Smooth painted plaster wall',
3688
+ previewThumbnailUrl: '/material/concrete/plaster_painted/plaster_painted_thumb.webp',
3689
+ preset: {
3690
+ maps: {
3691
+ albedoMap: '/material/concrete/plaster_painted/plaster_painted_basecolor_512.ktx2',
3692
+ normalMap: '/material/concrete/plaster_painted/plaster_painted_normal_512.ktx2',
3693
+ roughnessMap: '/material/concrete/plaster_painted/plaster_painted_roughness_512.ktx2',
3694
+ aoMap: '/material/concrete/plaster_painted/plaster_painted_ao_512.ktx2',
3695
+ },
3696
+ mapProperties: {
3697
+ color: '#ffffff',
3698
+ roughness: 0.85,
3699
+ metalness: 0,
3700
+ repeatX: 0.67,
3701
+ repeatY: 0.67,
3702
+ rotation: 0,
3703
+ wrapS: 'Repeat',
3704
+ wrapT: 'Repeat',
3705
+ normalScaleX: 1,
3706
+ normalScaleY: 1,
3707
+ emissiveIntensity: 1,
3708
+ displacementScale: 0,
3709
+ transparent: false,
3710
+ flipY: false,
3711
+ bumpScale: 1,
3712
+ emissiveColor: '#000000',
3713
+ aoMapIntensity: 1,
3714
+ side: 0,
3715
+ opacity: 1,
3716
+ lightMapIntensity: 1,
3717
+ },
3718
+ },
3719
+ },
3720
+ {
3721
+ id: 'concrete-polished',
3722
+ label: 'Polished Concrete',
3723
+ category: 'concrete',
3724
+ surfaces: ['floor', 'wall'],
3725
+ description: 'Polished concrete floor',
3726
+ previewThumbnailUrl: '/material/concrete/concrete_polished/concrete_polished_thumb.webp',
3727
+ preset: {
3728
+ maps: {
3729
+ albedoMap: '/material/concrete/concrete_polished/concrete_polished_basecolor_512.ktx2',
3730
+ normalMap: '/material/concrete/concrete_polished/concrete_polished_normal_512.ktx2',
3731
+ roughnessMap: '/material/concrete/concrete_polished/concrete_polished_roughness_512.ktx2',
3732
+ },
3733
+ mapProperties: {
3734
+ color: '#ffffff',
3735
+ roughness: 0.5,
3736
+ metalness: 0,
3737
+ repeatX: 0.5,
3738
+ repeatY: 0.5,
3739
+ rotation: 0,
3740
+ wrapS: 'Repeat',
3741
+ wrapT: 'Repeat',
3742
+ normalScaleX: 1,
3743
+ normalScaleY: 1,
3744
+ emissiveIntensity: 1,
3745
+ displacementScale: 0,
3746
+ transparent: false,
3747
+ flipY: false,
3748
+ bumpScale: 1,
3749
+ emissiveColor: '#000000',
3750
+ aoMapIntensity: 1,
3751
+ side: 0,
3752
+ opacity: 1,
3753
+ lightMapIntensity: 1,
3754
+ },
3755
+ },
3756
+ },
3757
+ {
3758
+ id: 'concrete-raw',
3759
+ label: 'Raw Concrete',
3760
+ category: 'concrete',
3761
+ surfaces: ['wall', 'floor', 'outdoor'],
3762
+ description: 'Board-formed raw concrete',
3763
+ previewThumbnailUrl: '/material/concrete/concrete_raw/concrete_raw_thumb.webp',
3764
+ preset: {
3765
+ maps: {
3766
+ albedoMap: '/material/concrete/concrete_raw/concrete_raw_basecolor_512.ktx2',
3767
+ normalMap: '/material/concrete/concrete_raw/concrete_raw_normal_512.ktx2',
3768
+ roughnessMap: '/material/concrete/concrete_raw/concrete_raw_roughness_512.ktx2',
3769
+ aoMap: '/material/concrete/concrete_raw/concrete_raw_ao_512.ktx2',
3770
+ },
3771
+ mapProperties: {
3772
+ color: '#ffffff',
3773
+ roughness: 0.8,
3774
+ metalness: 0,
3775
+ repeatX: 0.5,
3776
+ repeatY: 0.5,
3777
+ rotation: 0,
3778
+ wrapS: 'Repeat',
3779
+ wrapT: 'Repeat',
3780
+ normalScaleX: 1,
3781
+ normalScaleY: 1,
3782
+ emissiveIntensity: 1,
3783
+ displacementScale: 0,
3784
+ transparent: false,
3785
+ flipY: false,
3786
+ bumpScale: 1,
3787
+ emissiveColor: '#000000',
3788
+ aoMapIntensity: 1,
3789
+ side: 0,
3790
+ opacity: 1,
3791
+ lightMapIntensity: 1,
3792
+ },
3793
+ },
3794
+ },
3795
+ {
3796
+ id: 'concrete-plate',
3797
+ label: 'Concrete Plate',
3798
+ category: 'concrete',
3799
+ surfaces: ['wall', 'floor'],
3800
+ description: 'Smooth cast concrete plate',
3801
+ previewThumbnailUrl: '/material/concrete/concrete_plate/concrete_plate_thumb.webp',
3802
+ preset: {
3803
+ maps: {
3804
+ albedoMap: '/material/concrete/concrete_plate/concrete_plate_basecolor_512.ktx2',
3805
+ normalMap: '/material/concrete/concrete_plate/concrete_plate_normal_512.ktx2',
3806
+ roughnessMap: '/material/concrete/concrete_plate/concrete_plate_roughness_512.ktx2',
3807
+ aoMap: '/material/concrete/concrete_plate/concrete_plate_ao_512.ktx2',
3808
+ },
3809
+ mapProperties: {
3810
+ color: '#ffffff',
3811
+ roughness: 0.8,
3812
+ metalness: 0,
3813
+ repeatX: 0.5,
3814
+ repeatY: 0.5,
3815
+ rotation: 0,
3816
+ wrapS: 'Repeat',
3817
+ wrapT: 'Repeat',
3818
+ normalScaleX: 1,
3819
+ normalScaleY: 1,
3820
+ emissiveIntensity: 1,
3821
+ displacementScale: 0,
3822
+ transparent: false,
3823
+ flipY: false,
3824
+ bumpScale: 1,
3825
+ emissiveColor: '#000000',
3826
+ aoMapIntensity: 1,
3827
+ side: 0,
3828
+ opacity: 1,
3829
+ lightMapIntensity: 1,
3830
+ },
3831
+ },
3832
+ },
3833
+ {
3834
+ id: 'concrete-stucco',
3835
+ label: 'White Stucco',
3836
+ category: 'concrete',
3837
+ surfaces: ['wall', 'outdoor'],
3838
+ description: 'Exterior stucco render',
3839
+ previewThumbnailUrl: '/material/concrete/white_stucco/white_stucco_thumb.webp',
3840
+ preset: {
3841
+ maps: {
3842
+ albedoMap: '/material/concrete/white_stucco/white_stucco_basecolor_512.ktx2',
3843
+ normalMap: '/material/concrete/white_stucco/white_stucco_normal_512.ktx2',
3844
+ roughnessMap: '/material/concrete/white_stucco/white_stucco_roughness_512.ktx2',
3845
+ aoMap: '/material/concrete/white_stucco/white_stucco_ao_512.ktx2',
3846
+ },
3847
+ mapProperties: {
3848
+ color: '#ffffff',
3849
+ roughness: 0.9,
3850
+ metalness: 0,
3851
+ repeatX: 1,
3852
+ repeatY: 1,
3853
+ rotation: 0,
3854
+ wrapS: 'Repeat',
3855
+ wrapT: 'Repeat',
3856
+ normalScaleX: 1,
3857
+ normalScaleY: 1,
3858
+ emissiveIntensity: 1,
3859
+ displacementScale: 0,
3860
+ transparent: false,
3861
+ flipY: false,
3862
+ bumpScale: 1,
3863
+ emissiveColor: '#000000',
3864
+ aoMapIntensity: 1,
3865
+ side: 0,
3866
+ opacity: 1,
3867
+ lightMapIntensity: 1,
3868
+ },
3869
+ },
3870
+ },
3871
+ {
3872
+ id: 'concrete-drywall',
3873
+ label: 'Prepared Drywall',
3874
+ category: 'concrete',
3875
+ surfaces: ['wall', 'ceiling'],
3876
+ description: 'Smooth prepared drywall ready for paint',
3877
+ previewThumbnailUrl: '/material/concrete/prepared_drywall/prepared_drywall_thumb.webp',
3878
+ preset: {
3879
+ maps: {
3880
+ albedoMap: '/material/concrete/prepared_drywall/prepared_drywall_basecolor_512.ktx2',
3881
+ normalMap: '/material/concrete/prepared_drywall/prepared_drywall_normal_512.ktx2',
3882
+ roughnessMap: '/material/concrete/prepared_drywall/prepared_drywall_roughness_512.ktx2',
3883
+ aoMap: '/material/concrete/prepared_drywall/prepared_drywall_ao_512.ktx2',
3884
+ },
3885
+ mapProperties: {
3886
+ color: '#ffffff',
3887
+ roughness: 0.9,
3888
+ metalness: 0,
3889
+ repeatX: 0.5,
3890
+ repeatY: 0.5,
3891
+ rotation: 0,
3892
+ wrapS: 'Repeat',
3893
+ wrapT: 'Repeat',
3894
+ normalScaleX: 1,
3895
+ normalScaleY: 1,
3896
+ emissiveIntensity: 1,
3897
+ displacementScale: 0,
3898
+ transparent: false,
3899
+ flipY: false,
3900
+ bumpScale: 1,
3901
+ emissiveColor: '#000000',
3902
+ aoMapIntensity: 1,
3903
+ side: 0,
3904
+ opacity: 1,
3905
+ lightMapIntensity: 1,
3906
+ },
3907
+ },
3908
+ },
3909
+ {
3910
+ id: 'metal-copper',
3911
+ label: 'Copper',
3912
+ category: 'metal',
3913
+ surfaces: ['furniture', 'wall'],
3914
+ description: 'Warm copper',
3915
+ previewThumbnailUrl: '/material/metal/copper_metal/copper_metal_thumb.webp',
3916
+ preset: {
3917
+ maps: {
3918
+ albedoMap: '/material/metal/copper_metal/copper_metal_basecolor_512.ktx2',
3919
+ normalMap: '/material/metal/copper_metal/copper_metal_normal_512.ktx2',
3920
+ roughnessMap: '/material/metal/copper_metal/copper_metal_roughness_512.ktx2',
3921
+ metalnessMap: '/material/metal/copper_metal/copper_metal_metallic_512.ktx2',
3922
+ },
3923
+ mapProperties: {
3924
+ color: '#ffffff',
3925
+ roughness: 0.4,
3926
+ metalness: 0.6,
3927
+ repeatX: 1,
3928
+ repeatY: 1,
3929
+ rotation: 0,
3930
+ wrapS: 'Repeat',
3931
+ wrapT: 'Repeat',
3932
+ normalScaleX: 1,
3933
+ normalScaleY: 1,
3934
+ emissiveIntensity: 1,
3935
+ displacementScale: 0,
3936
+ transparent: false,
3937
+ flipY: false,
3938
+ bumpScale: 1,
3939
+ emissiveColor: '#000000',
3940
+ aoMapIntensity: 1,
3941
+ side: 0,
3942
+ opacity: 1,
3943
+ lightMapIntensity: 1,
3944
+ },
3945
+ },
3946
+ },
3947
+ {
3948
+ id: 'metal-polished',
3949
+ label: 'Polished Metal',
3950
+ category: 'metal',
3951
+ surfaces: ['furniture', 'wall'],
3952
+ description: 'Polished stainless steel',
3953
+ previewThumbnailUrl: '/material/metal/polished_metal/polished_metal_thumb.webp',
3954
+ preset: {
3955
+ maps: {
3956
+ albedoMap: '/material/metal/polished_metal/polished_metal_basecolor_512.ktx2',
3957
+ normalMap: '/material/metal/polished_metal/polished_metal_normal_512.ktx2',
3958
+ roughnessMap: '/material/metal/polished_metal/polished_metal_roughness_512.ktx2',
3959
+ aoMap: '/material/metal/polished_metal/polished_metal_ao_512.ktx2',
3960
+ metalnessMap: '/material/metal/polished_metal/polished_metal_metallic_512.ktx2',
3961
+ },
3962
+ mapProperties: {
3963
+ color: '#ffffff',
3964
+ roughness: 0.3,
3965
+ metalness: 0.6,
3966
+ repeatX: 1,
3967
+ repeatY: 1,
3968
+ rotation: 0,
3969
+ wrapS: 'Repeat',
3970
+ wrapT: 'Repeat',
3971
+ normalScaleX: 1,
3972
+ normalScaleY: 1,
3973
+ emissiveIntensity: 1,
3974
+ displacementScale: 0,
3975
+ transparent: false,
3976
+ flipY: false,
3977
+ bumpScale: 1,
3978
+ emissiveColor: '#000000',
3979
+ aoMapIntensity: 1,
3980
+ side: 0,
3981
+ opacity: 1,
3982
+ lightMapIntensity: 1,
3983
+ },
3984
+ },
3985
+ },
3986
+ {
3987
+ id: 'metal-steel',
3988
+ label: 'Brushed Steel',
3989
+ category: 'metal',
3990
+ surfaces: ['furniture', 'wall'],
3991
+ description: 'Brushed stainless steel',
3992
+ previewThumbnailUrl: '/material/metal/stainless_steel_brushed/stainless_steel_brushed_thumb.webp',
3993
+ preset: {
3994
+ maps: {
3995
+ albedoMap: '/material/metal/stainless_steel_brushed/stainless_steel_brushed_basecolor_512.ktx2',
3996
+ normalMap: '/material/metal/stainless_steel_brushed/stainless_steel_brushed_normal_512.ktx2',
3997
+ roughnessMap: '/material/metal/stainless_steel_brushed/stainless_steel_brushed_roughness_512.ktx2',
3998
+ },
3999
+ mapProperties: {
4000
+ color: '#ffffff',
4001
+ roughness: 0.45,
4002
+ metalness: 0.6,
4003
+ repeatX: 1,
4004
+ repeatY: 1,
4005
+ rotation: 0,
4006
+ wrapS: 'Repeat',
4007
+ wrapT: 'Repeat',
4008
+ normalScaleX: 1,
4009
+ normalScaleY: 1,
4010
+ emissiveIntensity: 1,
4011
+ displacementScale: 0,
4012
+ transparent: false,
4013
+ flipY: false,
4014
+ bumpScale: 1,
4015
+ emissiveColor: '#000000',
4016
+ aoMapIntensity: 1,
4017
+ side: 0,
4018
+ opacity: 1,
4019
+ lightMapIntensity: 1,
4020
+ },
4021
+ },
4022
+ },
4023
+ {
4024
+ // Parameter-only metal (no texture maps) — a worked example of a non-PBR
4025
+ // catalog finish driven purely by three.js material settings.
4026
+ id: 'metal-brass',
4027
+ label: 'Brass',
4028
+ category: 'metal',
4029
+ surfaces: ['furniture', 'wall'],
4030
+ description: 'Polished brass (flat metal, no maps)',
4031
+ previewColor: '#b08d57',
4032
+ preset: {
4033
+ maps: {},
4034
+ mapProperties: {
4035
+ color: '#b08d57',
4036
+ roughness: 0.35,
4037
+ metalness: 0.9,
4038
+ repeatX: 1,
4039
+ repeatY: 1,
4040
+ rotation: 0,
4041
+ wrapS: 'Repeat',
4042
+ wrapT: 'Repeat',
4043
+ normalScaleX: 1,
4044
+ normalScaleY: 1,
4045
+ emissiveIntensity: 1,
4046
+ displacementScale: 0,
4047
+ transparent: false,
4048
+ flipY: false,
4049
+ bumpScale: 1,
4050
+ emissiveColor: '#000000',
4051
+ aoMapIntensity: 1,
4052
+ side: 0,
4053
+ opacity: 1,
4054
+ lightMapIntensity: 1,
4055
+ },
4056
+ },
4057
+ },
4058
+ {
4059
+ // Parameter-only chrome (no texture maps) — moderate metalness so it reads
4060
+ // as bright metal under direct/ambient light without needing an env map.
4061
+ id: 'metal-chrome',
4062
+ label: 'Chrome',
4063
+ category: 'metal',
4064
+ surfaces: ['furniture', 'wall'],
4065
+ description: 'Polished chrome (flat metal, no maps)',
4066
+ previewColor: '#c8ccce',
4067
+ preset: {
4068
+ maps: {},
4069
+ mapProperties: {
4070
+ color: '#c8ccce',
4071
+ roughness: 0.2,
4072
+ metalness: 0.6,
4073
+ repeatX: 1,
4074
+ repeatY: 1,
4075
+ rotation: 0,
4076
+ wrapS: 'Repeat',
4077
+ wrapT: 'Repeat',
4078
+ normalScaleX: 1,
4079
+ normalScaleY: 1,
4080
+ emissiveIntensity: 1,
4081
+ displacementScale: 0,
4082
+ transparent: false,
4083
+ flipY: false,
4084
+ bumpScale: 1,
4085
+ emissiveColor: '#000000',
4086
+ aoMapIntensity: 1,
4087
+ side: 0,
4088
+ opacity: 1,
4089
+ lightMapIntensity: 1,
4090
+ },
4091
+ },
4092
+ },
4093
+ ];
4094
+ export function getMaterialsForCategory(category) {
4095
+ return MATERIAL_CATALOG.filter((item) => item.category === category);
4096
+ }
4097
+ export function getCatalogMaterialById(id) {
4098
+ if (!id)
4099
+ return undefined;
4100
+ return MATERIAL_CATALOG.find((item) => item.id === id);
4101
+ }
4102
+ export const LIBRARY_MATERIAL_REF_PREFIX = 'library:';
4103
+ export const SCENE_MATERIAL_REF_PREFIX = 'scene:';
4104
+ export function toLibraryMaterialRef(id) {
4105
+ return `${LIBRARY_MATERIAL_REF_PREFIX}${id}`;
4106
+ }
4107
+ export function toSceneMaterialRef(id) {
4108
+ return `${SCENE_MATERIAL_REF_PREFIX}${id}`;
4109
+ }
4110
+ export function getLibraryMaterialIdFromRef(materialRef) {
4111
+ if (!materialRef)
4112
+ return null;
4113
+ if (!materialRef.startsWith(LIBRARY_MATERIAL_REF_PREFIX))
4114
+ return null;
4115
+ return materialRef.slice(LIBRARY_MATERIAL_REF_PREFIX.length);
4116
+ }
4117
+ export function getSceneMaterialIdFromRef(materialRef) {
4118
+ if (!materialRef?.startsWith(SCENE_MATERIAL_REF_PREFIX))
4119
+ return null;
4120
+ return materialRef.slice(SCENE_MATERIAL_REF_PREFIX.length);
4121
+ }
4122
+ export function parseMaterialRef(ref) {
4123
+ const lib = getLibraryMaterialIdFromRef(ref);
4124
+ if (lib)
4125
+ return { kind: 'library', id: lib };
4126
+ const scene = getSceneMaterialIdFromRef(ref);
4127
+ if (scene)
4128
+ return { kind: 'scene', id: scene };
4129
+ return null;
2390
4130
  }
2391
4131
  export function getMaterialPresetByRef(materialRef) {
2392
4132
  const materialId = getLibraryMaterialIdFromRef(materialRef);