feat(paint-slots): KTX2 finish library — fabric/leather/concrete/metal (phase 4)
Wire KTX2 into the catalog finish path and add 15 textured finishes across four new families, all as GPU-compressed KTX2 (512px) + a webp picker thumbnail. - Shared `ktx2-loader.ts`: one KTX2Loader (Basis transcoder) used by both the GLB loader and catalog textures; `ensureKtx2Support(renderer)` runs once at viewer init (GPUDeviceWatcher) so `.ktx2` finishes load even with no GLB in the scene. `use-gltf-ktx2` now reuses the shared instance. - `materials.ts`: texture loaders pick the KTX2 loader for `.ktx2` urls, the image loader otherwise (all three load paths). - `material-library.ts`: 15 entries (fabric ×6, leather ×2, concrete ×4, metal ×3). Neutral albedo for tinting, `flipY: false` (compressed textures can't flip), `repeat` per real-world tile size, metals `metalness: 1`. Normals encoded UASTC, data maps ETC1S/linear. Assets generated from raw sources via the new community `scripts/build-material-textures.ts`. 1024/256 tiers + raws kept out of git. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
0e8a8c3d14
commit
042f855586
@@ -3448,6 +3448,574 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'fabric-linen',
|
||||
label: 'Linen',
|
||||
category: 'fabric',
|
||||
surfaces: ['furniture', 'wall'],
|
||||
description: 'Natural linen weave',
|
||||
previewThumbnailUrl: '/material/fabric/linen_hikari_fabric/linen_hikari_fabric_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/fabric/linen_hikari_fabric/linen_hikari_fabric_basecolor_512.ktx2',
|
||||
normalMap: '/material/fabric/linen_hikari_fabric/linen_hikari_fabric_normal_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.85,
|
||||
metalness: 0,
|
||||
repeatX: 2,
|
||||
repeatY: 2,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'fabric-cotton',
|
||||
label: 'Cotton',
|
||||
category: 'fabric',
|
||||
surfaces: ['furniture', 'wall'],
|
||||
description: 'Plain cotton weave',
|
||||
previewThumbnailUrl: '/material/fabric/blue_cotton/blue_cotton_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/fabric/blue_cotton/blue_cotton_basecolor_512.ktx2',
|
||||
normalMap: '/material/fabric/blue_cotton/blue_cotton_normal_512.ktx2',
|
||||
roughnessMap: '/material/fabric/blue_cotton/blue_cotton_roughness_512.ktx2',
|
||||
aoMap: '/material/fabric/blue_cotton/blue_cotton_ao_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.85,
|
||||
metalness: 0,
|
||||
repeatX: 2,
|
||||
repeatY: 2,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'fabric-velvet',
|
||||
label: 'Velvet',
|
||||
category: 'fabric',
|
||||
surfaces: ['furniture'],
|
||||
description: 'Velvet with a soft sheen',
|
||||
previewThumbnailUrl: '/material/fabric/red_velvet/red_velvet_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/fabric/red_velvet/red_velvet_basecolor_512.ktx2',
|
||||
normalMap: '/material/fabric/red_velvet/red_velvet_normal_512.ktx2',
|
||||
roughnessMap: '/material/fabric/red_velvet/red_velvet_roughness_512.ktx2',
|
||||
aoMap: '/material/fabric/red_velvet/red_velvet_ao_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.6,
|
||||
metalness: 0,
|
||||
repeatX: 2.5,
|
||||
repeatY: 2.5,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'fabric-wool',
|
||||
label: 'Wool',
|
||||
category: 'fabric',
|
||||
surfaces: ['furniture'],
|
||||
description: 'Matte wool felt',
|
||||
previewThumbnailUrl: '/material/fabric/white_wool/white_wool_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/fabric/white_wool/white_wool_basecolor_512.ktx2',
|
||||
normalMap: '/material/fabric/white_wool/white_wool_normal_512.ktx2',
|
||||
roughnessMap: '/material/fabric/white_wool/white_wool_roughness_512.ktx2',
|
||||
aoMap: '/material/fabric/white_wool/white_wool_ao_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.9,
|
||||
metalness: 0,
|
||||
repeatX: 2.5,
|
||||
repeatY: 2.5,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'fabric-suede',
|
||||
label: 'Suede',
|
||||
category: 'fabric',
|
||||
surfaces: ['furniture'],
|
||||
description: 'Matte suede nap',
|
||||
previewThumbnailUrl: '/material/fabric/suede/suede_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/fabric/suede/suede_basecolor_512.ktx2',
|
||||
normalMap: '/material/fabric/suede/suede_normal_512.ktx2',
|
||||
roughnessMap: '/material/fabric/suede/suede_roughness_512.ktx2',
|
||||
aoMap: '/material/fabric/suede/suede_ao_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.9,
|
||||
metalness: 0,
|
||||
repeatX: 2,
|
||||
repeatY: 2,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'fabric-boucle',
|
||||
label: 'Bouclé',
|
||||
category: 'fabric',
|
||||
surfaces: ['furniture'],
|
||||
description: 'Looped bouclé upholstery',
|
||||
previewThumbnailUrl: '/material/fabric/wool_boucle/wool_boucle_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/fabric/wool_boucle/wool_boucle_basecolor_512.ktx2',
|
||||
normalMap: '/material/fabric/wool_boucle/wool_boucle_normal_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.9,
|
||||
metalness: 0,
|
||||
repeatX: 3.3,
|
||||
repeatY: 3.3,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'leather-black',
|
||||
label: 'Black Leather',
|
||||
category: 'leather',
|
||||
surfaces: ['furniture'],
|
||||
description: 'Smooth black leather',
|
||||
previewThumbnailUrl: '/material/leather/black_leather/black_leather_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/leather/black_leather/black_leather_basecolor_512.ktx2',
|
||||
normalMap: '/material/leather/black_leather/black_leather_normal_512.ktx2',
|
||||
roughnessMap: '/material/leather/black_leather/black_leather_roughness_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.5,
|
||||
metalness: 0,
|
||||
repeatX: 1.67,
|
||||
repeatY: 1.67,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'leather-calf',
|
||||
label: 'Calf Leather',
|
||||
category: 'leather',
|
||||
surfaces: ['furniture'],
|
||||
description: 'Pebbled calf leather',
|
||||
previewThumbnailUrl: '/material/leather/calf_leather/calf_leather_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/leather/calf_leather/calf_leather_basecolor_512.ktx2',
|
||||
normalMap: '/material/leather/calf_leather/calf_leather_normal_512.ktx2',
|
||||
roughnessMap: '/material/leather/calf_leather/calf_leather_roughness_512.ktx2',
|
||||
aoMap: '/material/leather/calf_leather/calf_leather_ao_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.5,
|
||||
metalness: 0,
|
||||
repeatX: 2,
|
||||
repeatY: 2,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'concrete-plaster',
|
||||
label: 'Painted Plaster',
|
||||
category: 'concrete',
|
||||
surfaces: ['wall', 'ceiling'],
|
||||
description: 'Smooth painted plaster wall',
|
||||
previewThumbnailUrl: '/material/concrete/plaster_painted/plaster_painted_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/concrete/plaster_painted/plaster_painted_basecolor_512.ktx2',
|
||||
normalMap: '/material/concrete/plaster_painted/plaster_painted_normal_512.ktx2',
|
||||
roughnessMap: '/material/concrete/plaster_painted/plaster_painted_roughness_512.ktx2',
|
||||
aoMap: '/material/concrete/plaster_painted/plaster_painted_ao_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.85,
|
||||
metalness: 0,
|
||||
repeatX: 0.67,
|
||||
repeatY: 0.67,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'concrete-polished',
|
||||
label: 'Polished Concrete',
|
||||
category: 'concrete',
|
||||
surfaces: ['floor', 'wall'],
|
||||
description: 'Polished concrete floor',
|
||||
previewThumbnailUrl: '/material/concrete/concrete_polished/concrete_polished_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/concrete/concrete_polished/concrete_polished_basecolor_512.ktx2',
|
||||
normalMap: '/material/concrete/concrete_polished/concrete_polished_normal_512.ktx2',
|
||||
roughnessMap: '/material/concrete/concrete_polished/concrete_polished_roughness_512.ktx2',
|
||||
},
|
||||
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: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'concrete-raw',
|
||||
label: 'Raw Concrete',
|
||||
category: 'concrete',
|
||||
surfaces: ['wall', 'floor', 'outdoor'],
|
||||
description: 'Board-formed raw concrete',
|
||||
previewThumbnailUrl: '/material/concrete/concrete_raw/concrete_raw_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/concrete/concrete_raw/concrete_raw_basecolor_512.ktx2',
|
||||
normalMap: '/material/concrete/concrete_raw/concrete_raw_normal_512.ktx2',
|
||||
roughnessMap: '/material/concrete/concrete_raw/concrete_raw_roughness_512.ktx2',
|
||||
aoMap: '/material/concrete/concrete_raw/concrete_raw_ao_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.8,
|
||||
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: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'concrete-stucco',
|
||||
label: 'White Stucco',
|
||||
category: 'concrete',
|
||||
surfaces: ['wall', 'outdoor'],
|
||||
description: 'Exterior stucco render',
|
||||
previewThumbnailUrl: '/material/concrete/white_stucco/white_stucco_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/concrete/white_stucco/white_stucco_basecolor_512.ktx2',
|
||||
normalMap: '/material/concrete/white_stucco/white_stucco_normal_512.ktx2',
|
||||
roughnessMap: '/material/concrete/white_stucco/white_stucco_roughness_512.ktx2',
|
||||
aoMap: '/material/concrete/white_stucco/white_stucco_ao_512.ktx2',
|
||||
},
|
||||
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,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'metal-copper',
|
||||
label: 'Copper',
|
||||
category: 'metal',
|
||||
surfaces: ['furniture', 'wall'],
|
||||
description: 'Warm copper',
|
||||
previewThumbnailUrl: '/material/metal/copper_metal/copper_metal_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/metal/copper_metal/copper_metal_basecolor_512.ktx2',
|
||||
normalMap: '/material/metal/copper_metal/copper_metal_normal_512.ktx2',
|
||||
roughnessMap: '/material/metal/copper_metal/copper_metal_roughness_512.ktx2',
|
||||
metalnessMap: '/material/metal/copper_metal/copper_metal_metallic_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.4,
|
||||
metalness: 1,
|
||||
repeatX: 1,
|
||||
repeatY: 1,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'metal-polished',
|
||||
label: 'Polished Metal',
|
||||
category: 'metal',
|
||||
surfaces: ['furniture', 'wall'],
|
||||
description: 'Polished stainless steel',
|
||||
previewThumbnailUrl: '/material/metal/polished_metal/polished_metal_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap: '/material/metal/polished_metal/polished_metal_basecolor_512.ktx2',
|
||||
normalMap: '/material/metal/polished_metal/polished_metal_normal_512.ktx2',
|
||||
roughnessMap: '/material/metal/polished_metal/polished_metal_roughness_512.ktx2',
|
||||
aoMap: '/material/metal/polished_metal/polished_metal_ao_512.ktx2',
|
||||
metalnessMap: '/material/metal/polished_metal/polished_metal_metallic_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.3,
|
||||
metalness: 1,
|
||||
repeatX: 1,
|
||||
repeatY: 1,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'metal-steel',
|
||||
label: 'Brushed Steel',
|
||||
category: 'metal',
|
||||
surfaces: ['furniture', 'wall'],
|
||||
description: 'Brushed stainless steel',
|
||||
previewThumbnailUrl:
|
||||
'/material/metal/stainless_steel_brushed/stainless_steel_brushed_thumb.webp',
|
||||
preset: {
|
||||
maps: {
|
||||
albedoMap:
|
||||
'/material/metal/stainless_steel_brushed/stainless_steel_brushed_basecolor_512.ktx2',
|
||||
normalMap:
|
||||
'/material/metal/stainless_steel_brushed/stainless_steel_brushed_normal_512.ktx2',
|
||||
roughnessMap:
|
||||
'/material/metal/stainless_steel_brushed/stainless_steel_brushed_roughness_512.ktx2',
|
||||
},
|
||||
mapProperties: {
|
||||
color: '#ffffff',
|
||||
roughness: 0.45,
|
||||
metalness: 1,
|
||||
repeatX: 1,
|
||||
repeatY: 1,
|
||||
rotation: 0,
|
||||
wrapS: 'Repeat',
|
||||
wrapT: 'Repeat',
|
||||
normalScaleX: 1,
|
||||
normalScaleY: 1,
|
||||
emissiveIntensity: 1,
|
||||
displacementScale: 0,
|
||||
transparent: false,
|
||||
flipY: false,
|
||||
bumpScale: 1,
|
||||
emissiveColor: '#000000',
|
||||
aoMapIntensity: 1,
|
||||
side: 0,
|
||||
opacity: 1,
|
||||
lightMapIntensity: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
export function getMaterialsForCategory(category: MaterialCategory): MaterialCatalogItem[] {
|
||||
|
||||
Reference in New Issue
Block a user