import { type MaterialPresetPayload, type MaterialTarget, MaterialTarget as MaterialTargetSchema, } from './schema/material' export type MaterialCatalogItem = { id: string label: string category: MaterialCategory description?: string previewThumbnailUrl?: string previewColor?: string preset: MaterialPresetPayload } const WALL_TARGETS: MaterialTarget[] = [MaterialTargetSchema.enum.wall] const SLAB_TARGETS: MaterialTarget[] = [MaterialTargetSchema.enum.slab] const WALL_AND_SLAB_TARGETS: MaterialTarget[] = [ MaterialTargetSchema.enum.wall, MaterialTargetSchema.enum.slab, ] const STAIR_TARGETS: MaterialTarget[] = [ MaterialTargetSchema.enum.stair, MaterialTargetSchema.enum['stair-segment'], ] const STAIR_AND_FENCE_TARGETS: MaterialTarget[] = [ ...STAIR_TARGETS, MaterialTargetSchema.enum.fence, ] const ROOF_TARGETS: MaterialTarget[] = [ MaterialTargetSchema.enum.roof, MaterialTargetSchema.enum['roof-segment'], ] const CEILING_TARGETS: MaterialTarget[] = [MaterialTargetSchema.enum.ceiling] export const MATERIAL_CATEGORIES = ['wood', 'flooring', 'roof', 'other'] as const export type MaterialCategory = (typeof MATERIAL_CATEGORIES)[number] export const MATERIAL_CATALOG: MaterialCatalogItem[] = [ { id: 'wood-finewood27', label: 'Finewood 27', category: 'wood', description: 'Fine wood finish', previewThumbnailUrl: '/material/wood/finewood_27/finewood_27_basecolor.webp', preset: { maps: { albedoMap: '/material/wood/finewood_27/finewood_27_basecolor.webp', aoMap: '/material/wood/finewood_27/finewood_27_ambientocclusion.webp', normalMap: '/material/wood/finewood_27/finewood_27_normal.webp', roughnessMap: '/material/wood/finewood_27/finewood_27_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-floorplank1', label: 'Floor Plank 1', category: 'wood', description: 'Wood plank finish', previewThumbnailUrl: '/material/wood/floor_plank_1/floor_plank-diffuse.webp', preset: { maps: { albedoMap: '/material/wood/floor_plank_1/floor_plank-diffuse.webp', aoMap: '/material/wood/floor_plank_1/floor_plank-ao.webp', metalnessMap: '/material/wood/floor_plank_1/floor_plank-specular.webp', normalMap: '/material/wood/floor_plank_1/floor_plank-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 0.4, repeatY: 0.4, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-hungarianparquet10', label: 'Hungarian Parquet 10', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_baseColor.webp', preset: { maps: { albedoMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_baseColor.webp', metalnessMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_specularLevel.webp', normalMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_normal.webp', roughnessMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-hungarianparquet2', label: 'Hungarian Parquet 2', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_baseColor.webp', preset: { maps: { albedoMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_baseColor.webp', metalnessMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_specularLevel.webp', normalMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_normal.webp', roughnessMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-squareparquet21', label: 'Square Parquet 21', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/square_parquet_21/Square Pattern Parquet_21_baseColor.webp', preset: { maps: { albedoMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_baseColor.webp', metalnessMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_specularLevel.webp', normalMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_normal.webp', roughnessMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-squareparquet23', label: 'Square Parquet 23', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_baseColor.webp', preset: { maps: { albedoMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_baseColor.webp', metalnessMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_specularLevel.webp', normalMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_normal.webp', roughnessMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodfine1', label: 'Wood Fine 1', category: 'wood', description: 'Fine wood finish', previewThumbnailUrl: '/material/wood/wood_fine/wood_fine_1-diffuse.webp', preset: { maps: { albedoMap: '/material/wood/wood_fine/wood_fine_1-diffuse.webp', aoMap: '/material/wood/wood_fine/wood_fine_1-ao.webp', metalnessMap: '/material/wood/wood_fine/wood_fine_1-specular.webp', normalMap: '/material/wood/wood_fine/wood_fine_1-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodfine11', label: 'Wood Fine 11', category: 'wood', description: 'Fine wood finish', previewThumbnailUrl: '/material/wood/wood_fine_11/wood_fine_11-diffuse.webp', preset: { maps: { albedoMap: '/material/wood/wood_fine_11/wood_fine_11-diffuse.webp', aoMap: '/material/wood/wood_fine_11/wood_fine_11-ao.webp', metalnessMap: '/material/wood/wood_fine_11/wood_fine_11-specular.webp', normalMap: '/material/wood/wood_fine_11/wood_fine_11-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodfine13', label: 'Wood Fine 13', category: 'wood', description: 'Fine wood finish', previewThumbnailUrl: '/material/wood/wood_fine_13/wood_fine_13-diffuse.webp', preset: { maps: { albedoMap: '/material/wood/wood_fine_13/wood_fine_13-diffuse.webp', aoMap: '/material/wood/wood_fine_13/wood_fine_13-ao.webp', metalnessMap: '/material/wood/wood_fine_13/wood_fine_13-specular.webp', normalMap: '/material/wood/wood_fine_13/wood_fine_13-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodfine2', label: 'Wood Fine 2', category: 'wood', description: 'Fine wood finish', previewThumbnailUrl: '/material/wood/wood_fine_2/wood_fine_2-diffuse.webp', preset: { maps: { albedoMap: '/material/wood/wood_fine_2/wood_fine_2-diffuse.webp', aoMap: '/material/wood/wood_fine_2/wood_fine_2-ao.webp', metalnessMap: '/material/wood/wood_fine_2/wood_fine_2-specular.webp', normalMap: '/material/wood/wood_fine_2/wood_fine_2-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodfine22', label: 'Wood Fine 22', category: 'wood', description: 'Fine wood finish', previewThumbnailUrl: '/material/wood/wood_fine_22/wood_fine_22-diffuse.webp', preset: { maps: { albedoMap: '/material/wood/wood_fine_22/wood_fine_22-diffuse.webp', aoMap: '/material/wood/wood_fine_22/wood_fine_22-ao.webp', metalnessMap: '/material/wood/wood_fine_22/wood_fine_22-specular.webp', normalMap: '/material/wood/wood_fine_22/wood_fine_22-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodfine24', label: 'Wood Fine 24', category: 'wood', description: 'Fine wood finish', previewThumbnailUrl: '/material/wood/wood_fine_24/wood_fine_24-diffuse.webp', preset: { maps: { albedoMap: '/material/wood/wood_fine_24/wood_fine_24-diffuse.webp', aoMap: '/material/wood/wood_fine_24/wood_fine_24-ao.webp', metalnessMap: '/material/wood/wood_fine_24/wood_fine_24-specular.webp', normalMap: '/material/wood/wood_fine_24/wood_fine_24-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodparquet14', label: 'Wood Parquet 14', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/wood_parquet_14/woodparquet_14_basecolor.webp', preset: { maps: { albedoMap: '/material/wood/wood_parquet_14/woodparquet_14_basecolor.webp', aoMap: '/material/wood/wood_parquet_14/woodparquet_14_ambientocclusion.webp', metalnessMap: '/material/wood/wood_parquet_14/woodparquet_14_metallic.webp', normalMap: '/material/wood/wood_parquet_14/woodparquet_14_normal.webp', roughnessMap: '/material/wood/wood_parquet_14/woodparquet_14_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodenparquet11', label: 'Wooden Parquet 11', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/wooden_parquet_11/Classic Parquet_11_baseColor.webp', preset: { maps: { albedoMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_baseColor.webp', metalnessMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_specularLevel.webp', normalMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_normal.webp', roughnessMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodparquet121', label: 'Wood Parquet 121', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/woodparquet_121/woodparquet_121_basecolor.webp', preset: { maps: { albedoMap: '/material/wood/woodparquet_121/woodparquet_121_basecolor.webp', aoMap: '/material/wood/woodparquet_121/woodparquet_121_ambientocclusion.webp', normalMap: '/material/wood/woodparquet_121/woodparquet_121_normal.webp', roughnessMap: '/material/wood/woodparquet_121/woodparquet_121_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodparquet56', label: 'Wood Parquet 56', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/woodparquet_56/woodparquet_56_basecolor.webp', preset: { maps: { albedoMap: '/material/wood/woodparquet_56/woodparquet_56_basecolor.webp', aoMap: '/material/wood/woodparquet_56/woodparquet_56_ambientocclusion.webp', metalnessMap: '/material/wood/woodparquet_56/woodparquet_56_metallic.webp', normalMap: '/material/wood/woodparquet_56/woodparquet_56_normal.webp', roughnessMap: '/material/wood/woodparquet_56/woodparquet_56_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodparquet65', label: 'Wood Parquet 65', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/woodparquet_65/woodparquet_65_BaseColor.webp', preset: { maps: { albedoMap: '/material/wood/woodparquet_65/woodparquet_65_BaseColor.webp', aoMap: '/material/wood/woodparquet_65/woodparquet_65_AmbientOcclusion.webp', metalnessMap: '/material/wood/woodparquet_65/woodparquet_65_Metallic.webp', normalMap: '/material/wood/woodparquet_65/woodparquet_65_Normal.webp', roughnessMap: '/material/wood/woodparquet_65/woodparquet_65_Roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodparquet99', label: 'Wood Parquet 99', category: 'wood', description: 'Parquet wood finish', previewThumbnailUrl: '/material/wood/woodparquet_99/woodparquet_99_basecolor.webp', preset: { maps: { albedoMap: '/material/wood/woodparquet_99/woodparquet_99_basecolor.webp', aoMap: '/material/wood/woodparquet_99/woodparquet_99_ambientocclusion.webp', metalnessMap: '/material/wood/woodparquet_99/woodparquet_99_metallic.webp', normalMap: '/material/wood/woodparquet_99/woodparquet_99_normal.webp', roughnessMap: '/material/wood/woodparquet_99/woodparquet_99_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodplank19', label: 'Wood Plank 19', category: 'wood', description: 'Wood plank finish', previewThumbnailUrl: '/material/wood/woodplank_19/woodplank_19_basecolor.webp', preset: { maps: { albedoMap: '/material/wood/woodplank_19/woodplank_19_basecolor.webp', aoMap: '/material/wood/woodplank_19/woodplank_19_ambientocclusion.webp', normalMap: '/material/wood/woodplank_19/woodplank_19_normal.webp', roughnessMap: '/material/wood/woodplank_19/woodplank_19_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'wood-woodplank48', label: 'Wood Plank 48', category: 'wood', description: 'Wood plank finish', previewThumbnailUrl: '/material/wood/woodplank_48/woodplank_48_BaseColor.webp', preset: { maps: { albedoMap: '/material/wood/woodplank_48/woodplank_48_BaseColor.webp', aoMap: '/material/wood/woodplank_48/woodplank_48_AmbientOcclusion.webp', normalMap: '/material/wood/woodplank_48/woodplank_48_Normal.webp', roughnessMap: '/material/wood/woodplank_48/woodplank_48_Roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-tile85a', label: 'Quarry Tile', category: 'flooring', description: 'Floor tile finish', previewThumbnailUrl: '/material/flooring/tile_quarry/tile_quarry_basecolor.webp', preset: { maps: { albedoMap: '/material/flooring/tile_quarry/tile_quarry_basecolor.webp', aoMap: '/material/flooring/tile_quarry/tile_quarry_ambientocclusion.webp', normalMap: '/material/flooring/tile_quarry/tile_quarry_normal.webp', roughnessMap: '/material/flooring/tile_quarry/tile_quarry_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 0.3, repeatY: 0.3, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-rusticbrick', label: 'Rustic Brick', category: 'flooring', description: 'Brick finish', previewThumbnailUrl: '/material/flooring/brick_wall_rustic/brick_wall_rustic_basecolor.jpg', preset: { maps: { albedoMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_basecolor.jpg', aoMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_ambientocclusion.jpg', metalnessMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_metallic.jpg', normalMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_normal.jpg', roughnessMap: '/material/flooring/brick_wall_rustic/brick_wall_rustic_roughness.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1.5, repeatY: 1.5, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-agedbrick', label: 'Aged Brick', category: 'flooring', description: 'Brick finish', previewThumbnailUrl: '/material/flooring/brick_wall_aged/brick_wall_aged_basecolor.jpg', preset: { maps: { albedoMap: '/material/flooring/brick_wall_aged/brick_wall_aged_basecolor.jpg', aoMap: '/material/flooring/brick_wall_aged/brick_wall_aged_ambientocclusion.jpg', metalnessMap: '/material/flooring/brick_wall_aged/brick_wall_aged_metallic.jpg', normalMap: '/material/flooring/brick_wall_aged/brick_wall_aged_normal.jpg', roughnessMap: '/material/flooring/brick_wall_aged/brick_wall_aged_roughness.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1.5, repeatY: 1.5, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-weatheredbrick', label: 'Weathered Brick', category: 'flooring', description: 'Brick finish', previewThumbnailUrl: '/material/flooring/brick_wall_weathered/brick_wall_weathered_basecolor.jpg', preset: { maps: { albedoMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_basecolor.jpg', aoMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_ambientocclusion.jpg', normalMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_normal.jpg', roughnessMap: '/material/flooring/brick_wall_weathered/brick_wall_weathered_roughness.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-garagedoor', label: 'Garage Panel', category: 'flooring', description: 'Panel finish', previewThumbnailUrl: '/material/flooring/garage_panel/garage_panel_diffuse.jpg', preset: { maps: { albedoMap: '/material/flooring/garage_panel/garage_panel_diffuse.jpg', aoMap: '/material/flooring/garage_panel/garage_panel_ao.jpg', metalnessMap: '/material/flooring/garage_panel/garage_panel_specular.jpg', normalMap: '/material/flooring/garage_panel/garage_panel_normal.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-greenlabradorite', label: 'Green Labradorite', category: 'flooring', description: 'Stone flooring finish', previewThumbnailUrl: '/material/flooring/green_labradorite/green_labradorite_diffuse.jpg', preset: { maps: { albedoMap: '/material/flooring/green_labradorite/green_labradorite_diffuse.jpg', aoMap: '/material/flooring/green_labradorite/green_labradorite_ao.jpg', metalnessMap: '/material/flooring/green_labradorite/green_labradorite_specular.jpg', normalMap: '/material/flooring/green_labradorite/green_labradorite_normal.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.35, metalness: 0, repeatX: 0.6, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-ground13', label: 'Earth Ground', category: 'flooring', description: 'Ground surface finish', previewThumbnailUrl: '/material/flooring/ground_earth/ground_earth_basecolor.jpg', preset: { maps: { albedoMap: '/material/flooring/ground_earth/ground_earth_basecolor.jpg', aoMap: '/material/flooring/ground_earth/ground_earth_ambientocclusion.jpg', metalnessMap: '/material/flooring/ground_earth/ground_earth_metallic.jpg', normalMap: '/material/flooring/ground_earth/ground_earth_normal.jpg', roughnessMap: '/material/flooring/ground_earth/ground_earth_roughness.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-pooltiles', label: 'Pool Tiles', category: 'flooring', description: 'Pool tile finish', previewThumbnailUrl: '/material/flooring/pool_tiles/pool_tiles_diffuse.jpg', preset: { maps: { albedoMap: '/material/flooring/pool_tiles/pool_tiles_diffuse.jpg', aoMap: '/material/flooring/pool_tiles/pool_tiles_ao.jpg', metalnessMap: '/material/flooring/pool_tiles/pool_tiles_specular.jpg', normalMap: '/material/flooring/pool_tiles/pool_tiles_normal.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-tiles3', label: 'Checker Tiles', category: 'flooring', description: 'Tile flooring finish', previewThumbnailUrl: '/material/flooring/tiles_checker/tiles_checker_diffuse.jpg', preset: { maps: { albedoMap: '/material/flooring/tiles_checker/tiles_checker_diffuse.jpg', aoMap: '/material/flooring/tiles_checker/tiles_checker_ao.jpg', metalnessMap: '/material/flooring/tiles_checker/tiles_checker_specular.jpg', normalMap: '/material/flooring/tiles_checker/tiles_checker_normal.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-tiles4', label: 'Grid Tiles', category: 'flooring', description: 'Tile flooring finish', previewThumbnailUrl: '/material/flooring/tiles_grid/tiles_grid_diffuse.jpg', preset: { maps: { albedoMap: '/material/flooring/tiles_grid/tiles_grid_diffuse.jpg', aoMap: '/material/flooring/tiles_grid/tiles_grid_ao.jpg', metalnessMap: '/material/flooring/tiles_grid/tiles_grid_specular.jpg', normalMap: '/material/flooring/tiles_grid/tiles_grid_normal.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-wallstone1', label: 'Stone Wall', category: 'flooring', description: 'Stone finish', previewThumbnailUrl: '/material/flooring/stone_wall/stone_wall_diffuse.webp', preset: { maps: { albedoMap: '/material/flooring/stone_wall/stone_wall_diffuse.webp', aoMap: '/material/flooring/stone_wall/stone_wall_ao.webp', metalnessMap: '/material/flooring/stone_wall/stone_wall_specular.webp', normalMap: '/material/flooring/stone_wall/stone_wall_normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-woodenceramic3', label: 'Wooden Ceramic 3', category: 'flooring', description: 'Wood-look ceramic flooring finish', previewThumbnailUrl: '/material/flooring/wooden_ceramic_3/wooden_ceramic-diffuse.webp', preset: { maps: { albedoMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-diffuse.webp', aoMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-ao.webp', metalnessMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-specular.webp', normalMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-ceramic53', label: 'Ceramic Mosaic', category: 'flooring', description: 'Ceramic flooring finish', previewThumbnailUrl: '/material/flooring/ceramic_mosaic/ceramic_mosaic_basecolor.jpg', preset: { maps: { albedoMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_basecolor.jpg', aoMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_ambientocclusion.jpg', metalnessMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_metallic.jpg', normalMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_normal.png', roughnessMap: '/material/flooring/ceramic_mosaic/ceramic_mosaic_roughness.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 0.5, repeatY: 0.5, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-terrazzo19', label: 'Terrazzo', category: 'flooring', description: 'Terrazzo flooring finish', previewThumbnailUrl: '/material/flooring/terrazzo/terrazzo_basecolor.jpg', preset: { maps: { albedoMap: '/material/flooring/terrazzo/terrazzo_basecolor.jpg', metalnessMap: '/material/flooring/terrazzo/terrazzo_metallic.jpg', normalMap: '/material/flooring/terrazzo/terrazzo_normal.jpg', roughnessMap: '/material/flooring/terrazzo/terrazzo_roughness.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 0.5, repeatY: 0.5, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-tile79', label: 'Stone Tile', category: 'flooring', description: 'Floor tile finish', previewThumbnailUrl: '/material/flooring/tile_stone/tile_stone_basecolor.webp', preset: { maps: { albedoMap: '/material/flooring/tile_stone/tile_stone_basecolor.webp', aoMap: '/material/flooring/tile_stone/tile_stone_ambientocclusion.webp', normalMap: '/material/flooring/tile_stone/tile_stone_normal.webp', roughnessMap: '/material/flooring/tile_stone/tile_stone_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 0.5, repeatY: 0.5, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-tile86', label: 'Terracotta Tile', category: 'flooring', description: 'Floor tile finish', previewThumbnailUrl: '/material/flooring/tile_terracotta/tile_terracotta_basecolor.webp', preset: { maps: { albedoMap: '/material/flooring/tile_terracotta/tile_terracotta_basecolor.webp', aoMap: '/material/flooring/tile_terracotta/tile_terracotta_ambientocclusion.webp', normalMap: '/material/flooring/tile_terracotta/tile_terracotta_normal.webp', roughnessMap: '/material/flooring/tile_terracotta/tile_terracotta_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 0.5, repeatY: 0.5, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-greenquartzitea', label: 'Green Quartzite A', category: 'flooring', description: 'Green quartzite flooring finish', previewThumbnailUrl: '/material/flooring/green_glass_quartzite/green_glass_quartzite_diffuse.jpg', preset: { maps: { albedoMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_diffuse.jpg', aoMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_ao.jpg', metalnessMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_specular.jpg', normalMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_normal.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.35, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-darkceramic22', label: 'Dark Ceramic Grunge', category: 'flooring', description: 'Dark ceramic flooring finish', previewThumbnailUrl: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_basecolor.jpg', preset: { maps: { albedoMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_basecolor.jpg', aoMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_ambientocclusion.jpg', metalnessMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_metallic.jpg', normalMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_normal.jpg', roughnessMap: '/material/flooring/dark_ceramic_grunge/dark_ceramic_grunge_roughness.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-lightceramic24', label: 'Light Ceramic Grunge', category: 'flooring', description: 'Light ceramic flooring finish', previewThumbnailUrl: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_basecolor.jpg', preset: { maps: { albedoMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_basecolor.jpg', aoMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_ambientocclusion.jpg', metalnessMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_metallic.jpg', normalMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_normal.jpg', roughnessMap: '/material/flooring/light_ceramic_grunge/light_ceramic_grunge_roughness.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-statuarettowhite', label: 'Statuaretto White', category: 'flooring', description: 'White marble flooring finish', previewThumbnailUrl: '/material/flooring/statuaretto/statuaretto_diffuse.jpg', preset: { maps: { albedoMap: '/material/flooring/statuaretto/statuaretto_diffuse.jpg', aoMap: '/material/flooring/statuaretto/statuaretto_ao.jpg', metalnessMap: '/material/flooring/statuaretto/statuaretto_specular.jpg', normalMap: '/material/flooring/statuaretto/statuaretto_normal.jpg', }, mapProperties: { color: '#ffffff', roughness: 0.35, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-tile20', label: 'Mosaic Tile', category: 'flooring', description: 'Floor tile finish', previewThumbnailUrl: '/material/flooring/tile_mosaic/tile_mosaic_basecolor.webp', preset: { maps: { albedoMap: '/material/flooring/tile_mosaic/tile_mosaic_basecolor.webp', aoMap: '/material/flooring/tile_mosaic/tile_mosaic_ambientocclusion.webp', metalnessMap: '/material/flooring/tile_mosaic/tile_mosaic_metallic.webp', normalMap: '/material/flooring/tile_mosaic/tile_mosaic_normal.webp', roughnessMap: '/material/flooring/tile_mosaic/tile_mosaic_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-tile68', label: 'Pattern Tile', category: 'flooring', description: 'Floor tile finish', previewThumbnailUrl: '/material/flooring/tile_pattern/tile_pattern_basecolor.webp', preset: { maps: { albedoMap: '/material/flooring/tile_pattern/tile_pattern_basecolor.webp', aoMap: '/material/flooring/tile_pattern/tile_pattern_ambientocclusion.webp', metalnessMap: '/material/flooring/tile_pattern/tile_pattern_metallic.webp', normalMap: '/material/flooring/tile_pattern/tile_pattern_normal.webp', roughnessMap: '/material/flooring/tile_pattern/tile_pattern_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-woodenceramic2', label: 'Wooden Ceramic 2', category: 'flooring', description: 'Wood-look ceramic flooring finish', previewThumbnailUrl: '/material/flooring/wooden_ceramic_2/wooden_ceramic-diffuse.webp', preset: { maps: { albedoMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-diffuse.webp', aoMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-ao.webp', metalnessMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-specular.webp', normalMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-normal.webp', }, mapProperties: { color: '#ffffff', roughness: 0.45, metalness: 0, repeatX: 1.5, repeatY: 1.5, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'flooring-woodparquet76', label: 'Wood Parquet', category: 'flooring', description: 'Wood parquet flooring finish', previewThumbnailUrl: '/material/flooring/woodparquet/woodparquet_basecolor.webp', preset: { maps: { albedoMap: '/material/flooring/woodparquet/woodparquet_basecolor.webp', aoMap: '/material/flooring/woodparquet/woodparquet_ambientocclusion.webp', metalnessMap: '/material/flooring/woodparquet/woodparquet_metallic.webp', normalMap: '/material/flooring/woodparquet/woodparquet_normal.webp', roughnessMap: '/material/flooring/woodparquet/woodparquet_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 0.5, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'roof-classicshingles', label: 'Classic Shingles', category: 'roof', description: 'Classic roof shingle finish', previewThumbnailUrl: '/material/roofing/roof_shingles_classic/roof_shingles_classic_basecolor.webp', preset: { maps: { albedoMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_basecolor.webp', aoMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_ambientocclusion.webp', metalnessMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_metallic.webp', normalMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_normal.webp', roughnessMap: '/material/roofing/roof_shingles_classic/roof_shingles_classic_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 1, metalness: 0.15, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'roof-claytiles', label: 'Clay Tiles', category: 'roof', description: 'Clay roof tile finish', previewThumbnailUrl: '/material/roofing/roof_tiles_clay/roof_tiles_clay_basecolor.webp', preset: { maps: { albedoMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_basecolor.webp', aoMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_ambientocclusion.webp', metalnessMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_metallic.png', normalMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_normal.webp', roughnessMap: '/material/roofing/roof_tiles_clay/roof_tiles_clay_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 1, metalness: 0.1, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'roof-terracottatiles', label: 'Terracotta Tiles', category: 'roof', description: 'Terracotta roof tile finish', previewThumbnailUrl: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_basecolor.webp', preset: { maps: { albedoMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_basecolor.webp', aoMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_ambientocclusion.webp', metalnessMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_metallic.webp', normalMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_normal.webp', roughnessMap: '/material/roofing/roof_tiles_terracotta/roof_tiles_terracotta_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 1, metalness: 0.1, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'roof-weatheredshingles', label: 'Weathered Shingles', category: 'roof', description: 'Weathered roof shingle finish', previewThumbnailUrl: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_basecolor.webp', preset: { maps: { albedoMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_basecolor.webp', aoMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_ambientocclusion.webp', metalnessMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_metallic.webp', normalMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_normal.webp', roughnessMap: '/material/roofing/roof_shingles_weathered/roof_shingles_weathered_roughness.webp', }, mapProperties: { color: '#ffffff', roughness: 1, metalness: 0.1, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-white', label: 'White', category: 'other', description: 'Clean painted finish', previewColor: '#ffffff', preset: { maps: {}, mapProperties: { color: '#ffffff', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-softwhite', label: 'Soft White', category: 'other', description: 'Warm off-white painted finish', previewColor: '#f2eee6', preset: { maps: {}, mapProperties: { color: '#f2eee6', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-cream', label: 'Cream', category: 'other', description: 'Soft cream painted finish', previewColor: '#efe3cc', preset: { maps: {}, mapProperties: { color: '#efe3cc', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-beige', label: 'Beige', category: 'other', description: 'Balanced beige painted finish', previewColor: '#d9c7ad', preset: { maps: {}, mapProperties: { color: '#d9c7ad', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-greige', label: 'Greige', category: 'other', description: 'Neutral greige painted finish', previewColor: '#c8c1b8', preset: { maps: {}, mapProperties: { color: '#c8c1b8', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-sage', label: 'Sage', category: 'other', description: 'Muted sage painted finish', previewColor: '#bcc5b2', preset: { maps: {}, mapProperties: { color: '#bcc5b2', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-softblue', label: 'Soft Blue', category: 'other', description: 'Muted blue painted finish', previewColor: '#c7d6e3', preset: { maps: {}, mapProperties: { color: '#c7d6e3', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-terracotta', label: 'Terracotta', category: 'other', description: 'Warm terracotta painted finish', previewColor: '#c86f4c', preset: { maps: {}, mapProperties: { color: '#c86f4c', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-dustyrose', label: 'Dusty Rose', category: 'other', description: 'Muted rose painted finish', previewColor: '#c48a8d', preset: { maps: {}, mapProperties: { color: '#c48a8d', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-olive', label: 'Olive', category: 'other', description: 'Natural olive painted finish', previewColor: '#8d9368', preset: { maps: {}, mapProperties: { color: '#8d9368', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-forest', label: 'Forest', category: 'other', description: 'Deep forest green painted finish', previewColor: '#4f6b57', preset: { maps: {}, mapProperties: { color: '#4f6b57', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-slateblue', label: 'Slate Blue', category: 'other', description: 'Muted slate blue painted finish', previewColor: '#6f87a4', preset: { maps: {}, mapProperties: { color: '#6f87a4', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-navy', label: 'Navy', category: 'other', description: 'Classic navy painted finish', previewColor: '#2f4865', preset: { maps: {}, mapProperties: { color: '#2f4865', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-mustard', label: 'Mustard', category: 'other', description: 'Warm mustard painted finish', previewColor: '#c8a449', preset: { maps: {}, mapProperties: { color: '#c8a449', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-charcoal', label: 'Charcoal', category: 'other', description: 'Dark charcoal painted finish', previewColor: '#4e5257', preset: { maps: {}, mapProperties: { color: '#4e5257', roughness: 0.9, metalness: 0, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-metal', label: 'Metal', category: 'other', description: 'Brushed metal finish', previewColor: '#c0c0c0', preset: { maps: {}, mapProperties: { color: '#c7ccd2', roughness: 0.26, metalness: 0.82, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: false, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 0, opacity: 1, lightMapIntensity: 1, }, }, }, { id: 'preset-glass', label: 'Glass', category: 'other', description: 'Light glass finish', previewColor: '#87ceeb', preset: { maps: {}, mapProperties: { color: '#87ceeb', roughness: 0.1, metalness: 0.1, repeatX: 1, repeatY: 1, rotation: 0, wrapS: 'Repeat', wrapT: 'Repeat', normalScaleX: 1, normalScaleY: 1, emissiveIntensity: 1, displacementScale: 0.02, transparent: true, flipY: true, bumpScale: 1, emissiveColor: '#000000', aoMapIntensity: 1, side: 2, opacity: 0.3, lightMapIntensity: 1, }, }, }, ] export function getMaterialsForCategory(category: MaterialCategory): MaterialCatalogItem[] { return MATERIAL_CATALOG.filter((item) => item.category === category) } export function getCatalogMaterialById(id?: string): MaterialCatalogItem | undefined { if (!id) return undefined return MATERIAL_CATALOG.find((item) => item.id === id) } export const LIBRARY_MATERIAL_REF_PREFIX = 'library:' export function toLibraryMaterialRef(id: string) { return `${LIBRARY_MATERIAL_REF_PREFIX}${id}` } export function getLibraryMaterialIdFromRef(materialRef?: string | null) { if (!materialRef) return null if (!materialRef.startsWith(LIBRARY_MATERIAL_REF_PREFIX)) return null return materialRef.slice(LIBRARY_MATERIAL_REF_PREFIX.length) } export function getMaterialPresetByRef(materialRef?: string | null): MaterialPresetPayload | null { const materialId = getLibraryMaterialIdFromRef(materialRef) if (!materialId) return null return getCatalogMaterialById(materialId)?.preset ?? null }