From e4cbb588c379b51287f7a468123453240eb1786f Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 12:03:26 +0900 Subject: [PATCH 01/10] =?UTF-8?q?fix:=20=EC=B2=B4=ED=97=98=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=9D=BC=EC=9A=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20enterDemoMode=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - HeroSection.tsx: Link(/sorting) → button(enterDemoMode + /game 이동) - unifiedStore.ts: enterDemoMode 액션 추가 (fallback 시나리오 지원) - Matcap 404 에러 해결 확인 (GitHub 호스팅 URL 정상) --- src/components/landing/HeroSection.tsx | 20 +++++++++++++++++--- src/store/unifiedStore.ts | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/components/landing/HeroSection.tsx b/src/components/landing/HeroSection.tsx index 428e1d2..f47e072 100644 --- a/src/components/landing/HeroSection.tsx +++ b/src/components/landing/HeroSection.tsx @@ -9,11 +9,25 @@ import Link from 'next/link'; import dynamic from 'next/dynamic'; +import { useRouter } from 'next/navigation'; +import { useUnifiedStore } from '@/store/unifiedStore'; +import { DEFAULT_SCENARIO } from '@/data/scenarios'; // 3D 캔버스는 클라이언트에서만 로드 const HeroCanvas = dynamic(() => import('./HeroCanvas'), { ssr: false }); export function HeroSection() { + const router = useRouter(); + const unifiedStore = useUnifiedStore(); + + const handleStartDemo = () => { + // [SSOT] 통합 스토어 액션 사용 + Fallback 시나리오 주입 + unifiedStore.enterDemoMode(DEFAULT_SCENARIO); + + // 게임 페이지로 이동 + router.push('/game'); + }; + return (
{/* 3D 배경 */} @@ -59,12 +73,12 @@ export function HeroSection() {
- 🎩 데모 체험하기 - +
{/* 기술 스택 미니 배지 */} diff --git a/src/store/unifiedStore.ts b/src/store/unifiedStore.ts index 740d9c0..896e9fb 100644 --- a/src/store/unifiedStore.ts +++ b/src/store/unifiedStore.ts @@ -32,6 +32,7 @@ import { export type UnifiedStore = WorldSlice & SimulationSlice & EditorSlice & { // 통합 액션 enterAIWorld: () => void; + enterDemoMode: (fallbackScenario?: any) => void; resetAll: () => void; }; @@ -83,6 +84,28 @@ const createUnifiedSlice: StateCreator = (se console.log('[UnifiedStore] AI 월드 진입 완료:', scenario.nodes.length, '개 오브젝트'); }, + /** + * 데모 모드 진입 (체험하기 버튼용) + * + * @param fallbackScenario AI 씬이 없을 경우 사용할 기본 시나리오 + */ + enterDemoMode: (fallbackScenario?: any) => { + const state = get(); + + if (state.aiScene.isGenerated && state.aiScene.objects.length > 0) { + state.enterAIWorld(); + } else { + console.warn('[UnifiedStore] 생성된 씬이 없어 기본 데모 모드로 진입합니다.'); + + if (fallbackScenario) { + state.loadScenario(fallbackScenario); + } + + state.setGameMode('demo'); + state.setNarrativeState('intro'); + } + }, + /** * 전체 리셋 */ From 341979a20c05c49c18f59ab25e7c5a6978c32be3 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 12:08:44 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat:=20Tripo=20API=20=EC=9D=BC=EC=9D=BC?= =?UTF-8?q?=205=ED=9A=8C=20=ED=98=B8=EC=B6=9C=20=EC=A0=9C=ED=95=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TripoService에 localStorage 기반 일일 사용량 추적 구현 - 한도 도달 시 API 호출 전 차단 (throw Error) - 자정 자동 리셋, isDailyLimitReached/getRemainingCalls 공개 API 추가 - 호출 횟수는 API 호출 직전에 증가시켜 실패 시에도 차감 --- src/services/TripoService.ts | 78 +++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 2 deletions(-) diff --git a/src/services/TripoService.ts b/src/services/TripoService.ts index 3611186..8f1e978 100644 --- a/src/services/TripoService.ts +++ b/src/services/TripoService.ts @@ -46,6 +46,69 @@ class TripoServiceClass { private proxyUrl = '/api/tripo'; private generationCache = new Map(); + // ─── 일일 API 호출 제한 (하루 5회) ─── + private static readonly DAILY_LIMIT = 5; + private static readonly STORAGE_KEY = 'tripo_daily_usage'; + + /** + * 오늘 날짜 기준 API 사용량 조회 + * localStorage에 { date: 'YYYY-MM-DD', count: number } 형태로 저장 + */ + private getDailyUsage(): { date: string; count: number } { + const today = new Date().toISOString().slice(0, 10); // 'YYYY-MM-DD' + try { + const raw = typeof window !== 'undefined' + ? localStorage.getItem(TripoServiceClass.STORAGE_KEY) + : null; + if (raw) { + const parsed = JSON.parse(raw); + // 날짜가 다르면 리셋 + if (parsed.date === today) { + return parsed; + } + } + } catch { + // localStorage 접근 불가 (SSR 등) — 메모리 폴백 아래에서 처리 + } + return { date: today, count: 0 }; + } + + /** + * API 호출 횟수 증가 + 저장 + */ + private incrementDailyUsage(): number { + const usage = this.getDailyUsage(); + usage.count += 1; + try { + if (typeof window !== 'undefined') { + localStorage.setItem( + TripoServiceClass.STORAGE_KEY, + JSON.stringify(usage) + ); + } + } catch { + // localStorage 접근 불가 시 무시 + } + console.log(`[Tripo] 일일 사용량: ${usage.count}/${TripoServiceClass.DAILY_LIMIT}`); + return usage.count; + } + + /** + * 일일 한도 도달 여부 확인 + */ + isDailyLimitReached(): boolean { + const usage = this.getDailyUsage(); + return usage.count >= TripoServiceClass.DAILY_LIMIT; + } + + /** + * 남은 일일 호출 횟수 반환 + */ + getRemainingCalls(): number { + const usage = this.getDailyUsage(); + return Math.max(0, TripoServiceClass.DAILY_LIMIT - usage.count); + } + /** * 시맨틱 중복 체크 (Semantic Guardrail) * 유사도 0.9 이상이면 기존 에셋 재사용 @@ -75,15 +138,26 @@ class TripoServiceClass { /** * Text-to-3D 모델 생성 요청 + * ⚠️ 하루 5회 제한 — 초과 시 차단 */ async generateFromText(prompt: string, isCritical = false): Promise { console.log(`[Tripo] 생성 시작: "${prompt}" (핵심: ${isCritical})`); - // 1. 중복 체크 + // 1. 중복 체크 (API 호출 아님 — 한도에 포함하지 않음) const existing = await this.checkSemanticDuplicate(prompt); if (existing) return existing; - // 2. Tripo API 호출 + // 2. ⛔ 일일 한도 확인 — 초과 시 API 호출 차단 + if (this.isDailyLimitReached()) { + const msg = `[Tripo] ⛔ 일일 API 호출 한도(${TripoServiceClass.DAILY_LIMIT}회) 도달! 내일 자정에 리셋됩니다. 남은 호출: 0`; + console.error(msg); + throw new Error(msg); + } + + // 3. 호출 횟수 증가 (API 호출 전에 카운트하여 실패해도 차감) + this.incrementDailyUsage(); + + // 4. Tripo API 호출 const response = await fetch(this.proxyUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, From c1654e46281911d8d95901d4fef890ab09dfea91 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 12:14:33 +0900 Subject: [PATCH 03/10] =?UTF-8?q?fix:=20KTX2=20=ED=85=8D=EC=8A=A4=EC=B2=98?= =?UTF-8?q?=20=EB=A1=9C=EB=8D=94=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20(4=EA=B3=B3=20GLTFLoader=20=EC=B4=88=EA=B8=B0=ED=99=94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GLTFLoaderConfig.tsx: 전역 KTX2Loader + Basis Universal CDN 설정 - useSafeGLTF.ts: KTX2Loader 싱글톤 + GPU 감지 - AssetLoader.ts: KTX2Loader lazy 초기화 - AssetOrchestrator.ts: KTX2Loader 싱글톤 + dispose 정리 GLB 파일의 KTX2 압축 텍스처 로드 시 발생하던 'setKTX2Loader must be called' 에러 수정 --- src/components/providers/GLTFLoaderConfig.tsx | 32 +++++++++++++-- src/hooks/useSafeGLTF.ts | 40 +++++++++++++++++++ src/services/AssetOrchestrator.ts | 36 ++++++++++++++++- src/utils/AssetLoader.ts | 22 +++++++++- 4 files changed, 125 insertions(+), 5 deletions(-) diff --git a/src/components/providers/GLTFLoaderConfig.tsx b/src/components/providers/GLTFLoaderConfig.tsx index 9727b2d..1d56e1d 100644 --- a/src/components/providers/GLTFLoaderConfig.tsx +++ b/src/components/providers/GLTFLoaderConfig.tsx @@ -15,12 +15,16 @@ import { useEffect } from 'react'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'; +import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js'; import { useGLTF } from '@react-three/drei'; import * as THREE from 'three'; // Draco CDN 경로 const DRACO_CDN = 'https://www.gstatic.com/draco/versioned/decoders/1.5.7/'; +// KTX2 Basis Universal 트랜스코더 CDN 경로 +const KTX2_TRANSCODER_CDN = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets/basis/'; + // 에러 로그 중복 방지용 캐시 const loggedErrors = new Set(); @@ -92,19 +96,41 @@ export default function GLTFLoaderConfig() { const gltfLoader = new GLTFLoader(); gltfLoader.setDRACOLoader(dracoLoader); - // 4. DefaultLoadingManager에 등록 (drei useGLTF와 연동) + // 4. KTX2Loader 설정 (KTX2 텍스처 지원) + let ktx2Loader: KTX2Loader | null = null; + try { + ktx2Loader = new KTX2Loader(); + ktx2Loader.setTranscoderPath(KTX2_TRANSCODER_CDN); + + // KTX2는 GPU 지원 감지를 위해 WebGLRenderer가 필요 + const tempCanvas = document.createElement('canvas'); + const tempRenderer = new THREE.WebGLRenderer({ + canvas: tempCanvas, + context: tempCanvas.getContext('webgl2') || undefined, + }); + ktx2Loader.detectSupport(tempRenderer); + tempRenderer.dispose(); + + gltfLoader.setKTX2Loader(ktx2Loader); + console.log('[GLTFLoaderConfig] ⚙️ KTX2 트랜스코더 설정 완료'); + } catch (e) { + console.warn('[GLTFLoaderConfig] ⚠️ KTX2Loader 초기화 실패 (무시):', e); + } + + // 5. DefaultLoadingManager에 등록 (drei useGLTF와 연동) THREE.DefaultLoadingManager.addHandler(/\.glb$/i, gltfLoader); THREE.DefaultLoadingManager.addHandler(/\.gltf$/i, gltfLoader); - // 5. Drei 전용 설정도 유지 (호환성) + // 6. Drei 전용 설정도 유지 (호환성) useGLTF.setDecoderPath(DRACO_CDN); - console.log('[GLTFLoaderConfig] ⚙️ Draco 디코더 설정 완료'); + console.log('[GLTFLoaderConfig] ⚙️ Draco + KTX2 디코더 설정 완료'); console.log(' - 중복 에러 로그 억제 활성화'); // Cleanup return () => { dracoLoader.dispose(); + ktx2Loader?.dispose(); restoreLogs(); loggedErrors.clear(); }; diff --git a/src/hooks/useSafeGLTF.ts b/src/hooks/useSafeGLTF.ts index d93ce31..4a3c333 100644 --- a/src/hooks/useSafeGLTF.ts +++ b/src/hooks/useSafeGLTF.ts @@ -13,13 +13,17 @@ import { useLoader } from '@react-three/fiber'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'; +import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js'; import type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js'; +import * as THREE from 'three'; // Draco CDN 경로 const DRACO_CDN = 'https://www.gstatic.com/draco/versioned/decoders/1.5.7/'; +const KTX2_CDN = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets/basis/'; // DRACOLoader 싱글톤 (메모리 효율) let dracoLoaderInstance: DRACOLoader | null = null; +let ktx2LoaderInstance: KTX2Loader | null = null; function getDracoLoader(): DRACOLoader { if (!dracoLoaderInstance) { @@ -33,6 +37,30 @@ function getDracoLoader(): DRACOLoader { return dracoLoaderInstance; } +function getKTX2Loader(): KTX2Loader | null { + if (!ktx2LoaderInstance && typeof window !== 'undefined') { + try { + ktx2LoaderInstance = new KTX2Loader(); + ktx2LoaderInstance.setTranscoderPath(KTX2_CDN); + + // GPU 지원 감지를 위한 임시 렌더러 + const tempCanvas = document.createElement('canvas'); + const tempRenderer = new THREE.WebGLRenderer({ + canvas: tempCanvas, + context: tempCanvas.getContext('webgl2') || undefined, + }); + ktx2LoaderInstance.detectSupport(tempRenderer); + tempRenderer.dispose(); + + console.log('[useSafeGLTF] KTX2Loader 초기화 완료'); + } catch (e) { + console.warn('[useSafeGLTF] KTX2Loader 초기화 실패 (무시):', e); + ktx2LoaderInstance = null; + } + } + return ktx2LoaderInstance; +} + /** * useGLTF 대체 훅 * Draco JS 디코더를 강제 사용하여 BYTES_PER_ELEMENT 에러 방지 @@ -45,6 +73,12 @@ export function useSafeGLTF(path: string): GLTF { // GLTFLoader에 DRACOLoader 설정 const dracoLoader = getDracoLoader(); loader.setDRACOLoader(dracoLoader); + + // KTX2Loader 설정 + const ktx2Loader = getKTX2Loader(); + if (ktx2Loader) { + loader.setKTX2Loader(ktx2Loader); + } } ) as GLTF; @@ -63,6 +97,8 @@ useSafeGLTF.preload = (path: string) => { const loader = new GLTFLoader(); loader.setDRACOLoader(getDracoLoader()); + const ktx2 = getKTX2Loader(); + if (ktx2) loader.setKTX2Loader(ktx2); loader.load(path, () => { }, undefined, (error) => { console.warn(`[useSafeGLTF] 프리로드 실패: ${path}`, error); }); @@ -85,4 +121,8 @@ export function disposeDracoLoader() { dracoLoaderInstance.dispose(); dracoLoaderInstance = null; } + if (ktx2LoaderInstance) { + ktx2LoaderInstance.dispose(); + ktx2LoaderInstance = null; + } } diff --git a/src/services/AssetOrchestrator.ts b/src/services/AssetOrchestrator.ts index 5493aee..2936a6b 100644 --- a/src/services/AssetOrchestrator.ts +++ b/src/services/AssetOrchestrator.ts @@ -16,6 +16,8 @@ // [중요] three-stdlib 사용 (@react-three/drei의 useGLTF와 호환) import { DRACOLoader } from 'three-stdlib'; import { GLTFLoader, GLTF } from 'three-stdlib'; +import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js'; +import * as THREE from 'three'; import { MissingResourceTracker } from './MissingResourceTracker'; // 자산 로딩 결과 타입 @@ -61,6 +63,9 @@ export class AssetOrchestrator { // 싱글톤 GLTFLoader 인스턴스 private gltfLoader: GLTFLoader | null = null; + // KTX2Loader 인스턴스 + private ktx2Loader: KTX2Loader | null = null; + // 검증 캐시 (중복 HEAD 요청 방지) private validationCache: Map = new Map(); @@ -92,6 +97,9 @@ export class AssetOrchestrator { // 로컬 Draco 폴백 경로 private readonly DRACO_LOCAL_PATH = '/draco/'; + // KTX2 Basis Universal 트랜스코더 CDN + private readonly KTX2_TRANSCODER_CDN = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets/basis/'; + private constructor() { this.detectDeviceCapabilities(); this.initializeLoaders(); @@ -130,6 +138,7 @@ export class AssetOrchestrator { /** * 로더 초기화 (싱글톤) * [Fix] JS 디코더 강제 사용으로 WASM BYTES_PER_ELEMENT 에러 방지 + * [Fix] KTX2Loader 추가로 KTX2 텍스처 지원 */ private initializeLoaders(): void { // DRACOLoader 싱글톤 생성 @@ -148,7 +157,28 @@ export class AssetOrchestrator { this.gltfLoader = new GLTFLoader(); this.gltfLoader.setDRACOLoader(this.dracoLoader); - console.log('[AssetOrchestrator] ✅ 로더 초기화 완료 (Draco JS 싱글톤)'); + // KTX2Loader 설정 (브라우저 환경에서만) + if (typeof window !== 'undefined') { + try { + this.ktx2Loader = new KTX2Loader(); + this.ktx2Loader.setTranscoderPath(this.KTX2_TRANSCODER_CDN); + + const tempCanvas = document.createElement('canvas'); + const tempRenderer = new THREE.WebGLRenderer({ + canvas: tempCanvas, + context: tempCanvas.getContext('webgl2') || undefined, + }); + this.ktx2Loader.detectSupport(tempRenderer); + tempRenderer.dispose(); + + this.gltfLoader.setKTX2Loader(this.ktx2Loader as any); + console.log('[AssetOrchestrator] ⚙️ KTX2 트랜스코더 설정 완료'); + } catch (e) { + console.warn('[AssetOrchestrator] ⚠️ KTX2Loader 초기화 실패 (무시):', e); + } + } + + console.log('[AssetOrchestrator] ✅ 로더 초기화 완료 (Draco JS + KTX2)'); } /** @@ -410,6 +440,10 @@ export class AssetOrchestrator { this.dracoLoader.dispose(); this.dracoLoader = null; } + if (this.ktx2Loader) { + this.ktx2Loader.dispose(); + this.ktx2Loader = null; + } this.gltfLoader = null; this.validationCache.clear(); this.failedPaths.clear(); diff --git a/src/utils/AssetLoader.ts b/src/utils/AssetLoader.ts index 1c6176e..eadf09a 100644 --- a/src/utils/AssetLoader.ts +++ b/src/utils/AssetLoader.ts @@ -1,5 +1,6 @@ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'; +import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js'; import * as THREE from 'three'; class AssetLoader { @@ -7,11 +8,30 @@ class AssetLoader { private getLoader(): GLTFLoader { if (!this.loader) { - // Ensure we are in a browser environment if necessary (though simple instantiation might be safe, but worker setup isn't) this.loader = new GLTFLoader(); + + // Draco 디코더 설정 const dracoLoader = new DRACOLoader(); dracoLoader.setDecoderPath('https://www.gstatic.com/draco/versioned/decoders/1.5.7/'); this.loader.setDRACOLoader(dracoLoader); + + // KTX2 텍스처 지원 (브라우저 환경에서만) + if (typeof window !== 'undefined') { + try { + const ktx2Loader = new KTX2Loader(); + ktx2Loader.setTranscoderPath('https://cdn.jsdelivr.net/gh/pmndrs/drei-assets/basis/'); + const tempCanvas = document.createElement('canvas'); + const tempRenderer = new THREE.WebGLRenderer({ + canvas: tempCanvas, + context: tempCanvas.getContext('webgl2') || undefined, + }); + ktx2Loader.detectSupport(tempRenderer); + tempRenderer.dispose(); + this.loader.setKTX2Loader(ktx2Loader); + } catch (e) { + console.warn('[AssetLoader] KTX2Loader 초기화 실패 (무시):', e); + } + } } return this.loader; } From 3adf971707bcd3bed1a03d740b48d540404b610c Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 12:19:29 +0900 Subject: [PATCH 04/10] =?UTF-8?q?fix:=20PreviewCanvas=20API=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EC=8B=9C=20type=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=20=EC=B6=94=EA=B0=80=20(404=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95)\n\n-=20/api/resources/match=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EC=8B=9C=20type:=20'asset'=20=EB=88=84=EB=9D=BD?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=AA=A8=EB=93=A0=20=EB=B6=84=EA=B8=B0=20?= =?UTF-8?q?=ED=86=B5=EA=B3=BC=20=ED=9B=84=20404=20=EB=B0=98=ED=99=98\n-=20?= =?UTF-8?q?API=20=EC=97=90=EB=9F=AC=20=EB=B0=A9=EC=96=B4=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B0=95=ED=99=94=20(=EB=84=A4=ED=8A=B8=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=20=EC=97=90=EB=9F=AC=20=EC=A1=B0=EC=9A=A9=ED=9E=88=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC)\n-=20404=EB=8A=94=20=EB=A7=A4=EC=B9=AD=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8=EC=9D=98=20=EC=A0=95=EC=83=81=20=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=EB=A1=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/studio/PreviewCanvas.tsx | 48 ++++++++++++++----------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/src/components/studio/PreviewCanvas.tsx b/src/components/studio/PreviewCanvas.tsx index 7137741..52a4cf4 100644 --- a/src/components/studio/PreviewCanvas.tsx +++ b/src/components/studio/PreviewCanvas.tsx @@ -206,10 +206,12 @@ function PreviewNode({ node }: { node: SceneNode }) { // 로컬 경로인 경우에만 /models/ prefix 적용 const isExternalUrl = rawUrl.startsWith('http://') || rawUrl.startsWith('https://'); const modelUrl = isExternalUrl - ? rawUrl // 외부 URL은 그대로 + ? rawUrl : rawUrl.startsWith('/') - ? rawUrl // /로 시작하는 로컬 경로는 그대로 - : `/models/${rawUrl}.glb`; // 그 외는 로컬 모델로 취급 + ? rawUrl + : rawUrl.endsWith('.glb') + ? `/models/${rawUrl}` + : `/models/${rawUrl}.glb`; console.log(`[PreviewNode] 📌 직접 지정: ${node.name} → ${modelUrl}`); setModelPath(modelUrl); setSearchAttempted(true); @@ -229,26 +231,32 @@ function PreviewNode({ node }: { node: SceneNode }) { } // 2단계: API 폴백 (DB 기반 검색 - 2400+ 에셋) - console.log(`[PreviewNode] 🔍 API 검색 시도: "${searchKey}"`); - const response = await fetch('/api/resources/match', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ description: searchKey }) - }); - - if (response.ok) { - const result = await response.json(); - // ResourceMatcher는 filePath를 반환, 일부는 url 사용 - const modelUrl = result?.url || result?.filePath; - if (modelUrl) { - console.log(`[PreviewNode] ✅ API 매칭: "${searchKey}" → ${modelUrl}`); - setModelPath(modelUrl); - setSearchAttempted(true); - return; + // type: 'asset' 필수 — API 라우트가 타입별 분기 처리 + try { + console.log(`[PreviewNode] 🔍 API 검색 시도: "${searchKey}"`); + const response = await fetch('/api/resources/match', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ type: 'asset', description: searchKey }) + }); + + if (response.ok) { + const result = await response.json(); + // ResourceMatcher는 filePath를 반환, 일부는 url 사용 + const modelUrl = result?.url || result?.filePath; + if (modelUrl) { + console.log(`[PreviewNode] ✅ API 매칭: "${searchKey}" → ${modelUrl}`); + setModelPath(modelUrl); + setSearchAttempted(true); + return; + } } + // 404는 매칭 실패의 정상 케이스 — 조용히 처리 + } catch { + // API 서버 미응답 등 네트워크 에러 — 무시하고 폴백 진행 } - // 모든 매칭 실패 + // 모든 매칭 실패 — 절차적 메시로 폴백 console.log(`[PreviewNode] ❌ 매칭 실패: "${searchKey}" (${node.type})`); setSearchAttempted(true); From c4bba04061f6f696a486985f472d9bdf70478617 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 12:57:48 +0900 Subject: [PATCH 05/10] =?UTF-8?q?fix:=20=EC=9B=94=EB=93=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EA=B5=AC=EC=A1=B0=EC=A0=81=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?3=EA=B1=B4=20=ED=95=B4=EA=B2=B0=20-=20=EC=97=90=EC=85=8B=20?= =?UTF-8?q?=EB=A7=A4=EC=B9=AD=20=ED=8E=B8=ED=96=A5,=20API=20404,=20?= =?UTF-8?q?=EC=94=AC=20=EB=B3=B5=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - assets.ts: findAssetByKeyword 동적 유사도 스코어링 방식 전면 교체 (양방향 partial match → computeMatchScore + 동적 임계값) - AssetRegistry.ts: searchAssets 스코어 기반 매칭으로 개선 (부분 문자열 → assetMatchScore + 정렬) - DynamicModel.tsx: API 호출에 type:'asset' 파라미터 추가 (404 해결) - Experience.tsx: sessionStorage 복원 조건 완화 (gameMode 폴백)" --- src/components/canvas/DynamicModel.tsx | 2 +- src/components/canvas/Experience.tsx | 7 ++-- src/data/AssetRegistry.ts | 52 +++++++++++++++++++++++--- src/data/assets.ts | 45 +++++++++++++++++++--- 4 files changed, 91 insertions(+), 15 deletions(-) diff --git a/src/components/canvas/DynamicModel.tsx b/src/components/canvas/DynamicModel.tsx index 839b424..56c010b 100644 --- a/src/components/canvas/DynamicModel.tsx +++ b/src/components/canvas/DynamicModel.tsx @@ -409,7 +409,7 @@ export default function DynamicModel({ const response = await fetch('/api/resources/match', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ description, theme, tags }) + body: JSON.stringify({ type: 'asset', description, theme, tags }) }); if (response.ok) { diff --git a/src/components/canvas/Experience.tsx b/src/components/canvas/Experience.tsx index d1f6552..8635fa6 100644 --- a/src/components/canvas/Experience.tsx +++ b/src/components/canvas/Experience.tsx @@ -74,10 +74,11 @@ export default function Experience() { if (savedScene && !store.currentScenario) { try { const parsed = JSON.parse(savedScene); - if (parsed.scenario && parsed.gameMode === 'custom') { - console.log('[Experience] ✅ AI 씬 복원:', parsed.scenario.nodes?.length, '개 노드'); + if (parsed.scenario?.nodes?.length > 0) { + const restoredMode = parsed.gameMode || 'custom'; + console.log('[Experience] ✅ AI 씬 복원:', parsed.scenario.nodes.length, '개 노드, 모드:', restoredMode); store.loadScenario(parsed.scenario); - store.setGameMode('custom'); + store.setGameMode(restoredMode); store.setLoading(false); // 통합 스토어에도 동기화 diff --git a/src/data/AssetRegistry.ts b/src/data/AssetRegistry.ts index 212d72e..9ed1c7c 100644 --- a/src/data/AssetRegistry.ts +++ b/src/data/AssetRegistry.ts @@ -15000,14 +15000,54 @@ function isBlacklistedPath(path: string): boolean { return ASSET_PATH_BLACKLIST.some(pattern => lowerPath.includes(pattern.toLowerCase())); } +/** + * 키워드-에셋 간 동적 매칭 점수 계산 + * - 정확 일치 = 1.0 + * - 키워드가 에셋 키에 포함 = 키워드 길이/키 길이 × 0.5 (역방향 페널티) + * - 에셋 키가 키워드에 포함 = 키 길이/키워드 길이 (정규화 점수) + */ +function assetMatchScore(query: string, assetKeyword: string): number { + if (query === assetKeyword) return 1.0; + if (assetKeyword.includes(query)) { + return (query.length / assetKeyword.length) * 0.5; + } + if (query.includes(assetKeyword)) { + return assetKeyword.length / query.length; + } + return 0; +} + export function searchAssets(keyword: string): AssetMetadata[] { const lower = keyword.toLowerCase(); - return ASSETS.filter(a => - !isBlacklistedPath(a.path) && ( - a.id.includes(lower) || - a.keywords.some(k => k.includes(lower)) - ) - ); + const scored: { asset: AssetMetadata; score: number }[] = []; + + for (const a of ASSETS) { + if (isBlacklistedPath(a.path)) continue; + + // ID 정확 매칭 + if (a.id.toLowerCase() === lower) { + scored.push({ asset: a, score: 1.0 }); + continue; + } + + // 키워드 중 최고 스코어 채택 + let bestScore = 0; + for (const k of a.keywords) { + const s = assetMatchScore(lower, k.toLowerCase()); + if (s > bestScore) bestScore = s; + } + + // 동적 임계값: 쿼리 길이에 비례 + const threshold = lower.length / (lower.length + 1); + if (bestScore >= threshold) { + scored.push({ asset: a, score: bestScore }); + } + } + + // 스코어 내림차순 정렬 → 최적 매칭 우선 + return scored + .sort((a, b) => b.score - a.score) + .map(s => s.asset); } diff --git a/src/data/assets.ts b/src/data/assets.ts index 3916d02..3776c27 100644 --- a/src/data/assets.ts +++ b/src/data/assets.ts @@ -1119,7 +1119,32 @@ export const HOGWARTS_KEYWORDS: Record = { }; /** - * 키워드로 에셋 경로 찾기 + * 키워드-키 간 동적 매칭 점수 계산 + * - 정확 일치 = 1.0 + * - 키가 쿼리에 포함 = 키 길이/쿼리 길이 (길수록 높은 점수) + * - 쿼리가 키에 포함 = 쿼리 길이/키 길이 × 0.5 (역방향 페널티) + */ +function computeMatchScore(query: string, key: string): number { + const keyLower = key.toLowerCase(); + + // 정확 매칭 + if (query === keyLower) return 1.0; + + // 키가 쿼리 안에 포함 (예: query="medieval_stone", key="stone") + if (query.includes(keyLower)) { + return keyLower.length / query.length; + } + + // 쿼리가 키 안에 포함 (예: query="car", key="carconcept") + if (keyLower.includes(query)) { + return (query.length / keyLower.length) * 0.5; + } + + return 0; +} + +/** + * 키워드로 에셋 경로 찾기 — 동적 유사도 스코어링 */ export function findAssetByKeyword(keyword: string): string | null { const lower = keyword.toLowerCase(); @@ -1133,14 +1158,24 @@ export function findAssetByKeyword(keyword: string): string | null { } } - // 2. ASSET_LIBRARY 직접 매칭 + // 2. 정확 매칭 (최우선) + if (ASSET_LIBRARY[lower]) return ASSET_LIBRARY[lower]; + + // 3. 유사도 기반 최적 매칭 + let bestMatch: string | null = null; + let bestScore = 0; + for (const [key, path] of Object.entries(ASSET_LIBRARY)) { - if (lower.includes(key.toLowerCase()) || key.toLowerCase().includes(lower)) { - return path; + const score = computeMatchScore(lower, key); + if (score > bestScore) { + bestScore = score; + bestMatch = path; } } - return null; + // 동적 임계값: 키워드 길이에 비례 (짧은 키워드는 높은 정확도 요구) + const minThreshold = lower.length / (lower.length + 1); + return bestScore >= minThreshold ? bestMatch : null; } /** From aee1ccd6ccfed9e42e61ccda645d8dc7e95e4978 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 13:23:13 +0900 Subject: [PATCH 06/10] =?UTF-8?q?fix:=20Matcap=20=EC=99=B8=EB=B6=80=20URL?= =?UTF-8?q?=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F?= =?UTF-8?q?=20=EB=A1=9C=EB=94=A9=20=EC=95=88=EC=A0=95=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AssetHunterCell: 접근 불가능한 외부 URL(nidorx) 제거, 내장 프로시저럴 텍스처 폴백 적용 - MainScene: MatcapLoader 컴포넌트 분리로 조건부 Hook 호출 구현 (타입 에러 방지) - useSceneStore: matcapTexture 전역 상태 인터페이스 추가 --- src/cells/musculoskeletal/AssetHunterCell.ts | 43 +++++-------------- src/components/scene/MainScene.tsx | 44 +++++++++++++------- src/store/useSceneStore.ts | 7 ++++ 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/src/cells/musculoskeletal/AssetHunterCell.ts b/src/cells/musculoskeletal/AssetHunterCell.ts index de4b880..aae34f2 100644 --- a/src/cells/musculoskeletal/AssetHunterCell.ts +++ b/src/cells/musculoskeletal/AssetHunterCell.ts @@ -257,20 +257,16 @@ export class AssetHunterCell extends BaseCell { // ══════════════════════════════════════════════════════════ // 카테고리 → Matcap 텍스처 자동 매핑 - // nidorx/matcaps 저장소의 텍스처 URL 사용 (CC0) - private static readonly MATCAP_BY_CATEGORY: Record = { - // 가구/나무 → 따뜻한 나무 톤 - furniture: 'https://raw.githubusercontent.com/nidorx/matcaps/master/1024/C7B898_6C4B25_A08552_8C704C.png', - // 차량/금속 → 메탈릭 - vehicle: 'https://raw.githubusercontent.com/nidorx/matcaps/master/1024/C8C8C8_4B4B4B_8E8E8E_6C6C6C.png', - // 자연/식물 → 녹색 무광 - nature: 'https://raw.githubusercontent.com/nidorx/matcaps/master/1024/4B6B35_BEE08C_8DA962_698844.png', - // 건물/구조물 → 밝은 콘크리트 - structural: 'https://raw.githubusercontent.com/nidorx/matcaps/master/1024/E6BF3C_864A1C_B69131_FEEA74.png', - // 기본값 → 세라믹/클레이 - default: 'https://raw.githubusercontent.com/nidorx/matcaps/master/1024/3B3C3F_76777B_505255_626469.png', + // nidorx/matcaps 저장소 URL이 불안정하므로, 기본적으로 undefined를 반환하여 + // LowPolyMaterialAdapter가 내부 프로시저럴 텍스처를 생성하도록 유도합니다. + private static readonly MATCAP_URLS: Record = { + // user-defined types can be added here if we host them locally }; + private getMatcapForType(type: string): string | undefined { + return AssetHunterCell.MATCAP_URLS[type]; + } + /** * 렌더 스타일 해소 — 3단계 폴백 전략 * @@ -412,30 +408,13 @@ export class AssetHunterCell extends BaseCell { * 1순위: DB에서 subCategory 기반 랜덤 선택 * 2순위: 기존 고정 URL 폴백 */ - private async pickMatcapByCategory(category?: string): Promise { + private async pickMatcapByCategory(category?: string): Promise { // DB 동적 조회 시도 const dbMatcap = await this.queryMatcapFromDB(category); if (dbMatcap) return dbMatcap; - // 폴백: 기존 고정 URL - if (!category) return AssetHunterCell.MATCAP_BY_CATEGORY.default; - - const lower = category.toLowerCase(); - - if (['furniture', 'support'].some(k => lower.includes(k))) { - return AssetHunterCell.MATCAP_BY_CATEGORY.furniture; - } - if (['vehicle', 'car', 'metal'].some(k => lower.includes(k))) { - return AssetHunterCell.MATCAP_BY_CATEGORY.vehicle; - } - if (['nature', 'tree', 'plant', 'vegetation', 'ambient'].some(k => lower.includes(k))) { - return AssetHunterCell.MATCAP_BY_CATEGORY.nature; - } - if (['structural', 'building', 'wall', 'floor', 'focal'].some(k => lower.includes(k))) { - return AssetHunterCell.MATCAP_BY_CATEGORY.structural; - } - - return AssetHunterCell.MATCAP_BY_CATEGORY.default; + // 폴백: 외부 URL이 없으므로 undefined 반환 -> 내장 프로시저럴 텍스처 사용 + return undefined; } /** diff --git a/src/components/scene/MainScene.tsx b/src/components/scene/MainScene.tsx index 0b6e338..76e9f43 100644 --- a/src/components/scene/MainScene.tsx +++ b/src/components/scene/MainScene.tsx @@ -1,15 +1,12 @@ - "use client"; -import React, { Suspense } from 'react'; +import React, { Suspense, useState, useRef, useEffect } from 'react'; import { Canvas } from '@react-three/fiber'; -import { OrbitControls, Environment, ContactShadows, useGLTF } from '@react-three/drei'; +import { OrbitControls, Environment, ContactShadows, useGLTF, useTexture } from '@react-three/drei'; import { useSceneStore, SceneObject } from '../../store/useSceneStore'; // Model Loader Component -import { useRef, useEffect } from 'react'; import * as THREE from 'three'; -import { useTexture } from '@react-three/drei'; import { LowPolyMaterialAdapter } from '../../services/LowPolyMaterialAdapter'; // Model Loader Component @@ -28,33 +25,50 @@ const ModelBase = ({ info }: { info: SceneObject }) => { ); }; +// Matcap 텍스처 로더 컴포넌트 (조건부 Hook 호출을 위해 분리) +function MatcapLoader({ url, onLoad }: { url: string; onLoad: (tex: THREE.Texture) => void }) { + const texture = useTexture(url); + useEffect(() => { + if (texture) onLoad(texture); + }, [texture, url, onLoad]); + return null; +} + // Matcap 전용 Model Component — useTexture 조건 분리 const ModelWithMatcap = ({ info }: { info: SceneObject }) => { const { scene } = useGLTF(info.path); const clonedScene = React.useMemo(() => scene.clone(), [scene]); const group = useRef(null); + const [loadedMatcap, setLoadedMatcap] = useState(undefined); // Matcap 텍스처 로드 (info.matcapTexture 또는 기본값) - const matcapUrl = info.matcapTexture - || 'https://raw.githubusercontent.com/nidorx/matcaps/master/1024/3B3C3F_76777B_505255_626469.png'; - const matcapTexture = useTexture(matcapUrl); + // 외부 URL 제거 내장 프로시저럴 텍스처 사용 + const matcapFromStore = useSceneStore((state) => state.matcapTexture); + const matcapUrl = info.matcapTexture || matcapFromStore; + + // Matcap 텍스처가 준비되면 적용 + const matcapTexture = loadedMatcap; // Matcap 스타일 적용 useEffect(() => { if (!group.current) return; + // 텍스처가 없으면 내부 프로시저럴 텍스처 사용 LowPolyMaterialAdapter.applyMatcapStyle(group.current, { customMatcap: matcapTexture }); }, [matcapTexture, clonedScene]); return ( - + <> + {matcapUrl && } + + ); }; diff --git a/src/store/useSceneStore.ts b/src/store/useSceneStore.ts index d9b9081..fa1040d 100644 --- a/src/store/useSceneStore.ts +++ b/src/store/useSceneStore.ts @@ -19,8 +19,12 @@ export interface SceneState { preset: string; background: boolean; }; + // [Integration] 전역 렌더링 스타일 설정 + matcapTexture?: string; + addObject: (obj: SceneObject) => void; setScene: (objects: SceneObject[]) => void; + setMatcapTexture: (url?: string) => void; resetScene: () => void; } @@ -35,7 +39,10 @@ export const useSceneStore = create((set) => ({ preset: 'sunset', background: true }, + matcapTexture: undefined, + addObject: (obj) => set((state) => ({ objects: [...state.objects, obj] })), setScene: (objects) => set({ objects }), + setMatcapTexture: (url) => set({ matcapTexture: url }), resetScene: () => set({ objects: [] }), })); From 5509e8c5cbccb0ef34317989cf4c4607c59fe4a9 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 13:44:16 +0900 Subject: [PATCH 07/10] =?UTF-8?q?fix:=20=EC=97=90=EC=85=8B=20=EB=A7=A4?= =?UTF-8?q?=EC=B9=AD=20=ED=92=88=EC=A7=88=20v3=20-=20=EC=97=AD=EB=B0=A9?= =?UTF-8?q?=ED=96=A5=20=ED=8E=98=EB=84=90=ED=8B=B0=20=EA=B0=95=ED=99=94,?= =?UTF-8?q?=20=EB=8B=A4=EC=A4=91=20=ED=9B=84=EB=B3=B4=20=EB=B9=84=EA=B5=90?= =?UTF-8?q?,=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=ED=8E=98=EB=84=90?= =?UTF-8?q?=ED=8B=B0,=20=EC=9E=84=EA=B3=84=EA=B0=92=20=EB=B3=B4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/AssetRegistry.ts | 5 ++-- src/data/assets.ts | 21 +++++++++----- src/lib/ClientResourceMatcher.ts | 45 ++++++++++++++--------------- src/services/VectorSearchService.ts | 6 ++++ 4 files changed, 45 insertions(+), 32 deletions(-) diff --git a/src/data/AssetRegistry.ts b/src/data/AssetRegistry.ts index 9ed1c7c..6702e27 100644 --- a/src/data/AssetRegistry.ts +++ b/src/data/AssetRegistry.ts @@ -15037,8 +15037,9 @@ export function searchAssets(keyword: string): AssetMetadata[] { if (s > bestScore) bestScore = s; } - // 동적 임계값: 쿼리 길이에 비례 - const threshold = lower.length / (lower.length + 1); + // 동적 임계값: 쿼리 길이에 비례하되 0.4~0.7 범위로 클램프 (v3) + const rawThreshold = lower.length / (lower.length + 2); + const threshold = Math.max(0.4, Math.min(0.7, rawThreshold)); if (bestScore >= threshold) { scored.push({ asset: a, score: bestScore }); } diff --git a/src/data/assets.ts b/src/data/assets.ts index 3776c27..3141ce8 100644 --- a/src/data/assets.ts +++ b/src/data/assets.ts @@ -1119,10 +1119,12 @@ export const HOGWARTS_KEYWORDS: Record = { }; /** - * 키워드-키 간 동적 매칭 점수 계산 + * 키워드-키 간 동적 매칭 점수 계산 (v3 — 하드코딩 금지) * - 정확 일치 = 1.0 - * - 키가 쿼리에 포함 = 키 길이/쿼리 길이 (길수록 높은 점수) - * - 쿼리가 키에 포함 = 쿼리 길이/키 길이 × 0.5 (역방향 페널티) + * - 키가 쿼리에 포함 = 키 길이/쿼리 길이 (키가 길수록 관련성 높음) + * - 쿼리가 키에 포함 = 쿼리 길이/키 길이 × 0.3 (역방향 페널티 강화) + * + * 키 길이가 짧을수록 비율 점수가 자연적으로 낮아져 오매칭 방지 */ function computeMatchScore(query: string, key: string): number { const keyLower = key.toLowerCase(); @@ -1131,13 +1133,15 @@ function computeMatchScore(query: string, key: string): number { if (query === keyLower) return 1.0; // 키가 쿼리 안에 포함 (예: query="medieval_stone", key="stone") + // 키가 길수록 더 높은 점수 (3자 키 → 3/15=0.2, 8자 키 → 8/15=0.53) if (query.includes(keyLower)) { return keyLower.length / query.length; } - // 쿼리가 키 안에 포함 (예: query="car", key="carconcept") + // 역방향: 쿼리가 키에 포함 (예: query="car", key="carconcept") + // 0.5 → 0.3으로 페널티 강화 (의도치 않은 매칭 최소화) if (keyLower.includes(query)) { - return (query.length / keyLower.length) * 0.5; + return (query.length / keyLower.length) * 0.3; } return 0; @@ -1173,8 +1177,11 @@ export function findAssetByKeyword(keyword: string): string | null { } } - // 동적 임계값: 키워드 길이에 비례 (짧은 키워드는 높은 정확도 요구) - const minThreshold = lower.length / (lower.length + 1); + // 동적 임계값: 키워드 길이에 비례하되 0.4~0.7 범위로 클램프 + // 기존: length/(length+1) → 5자에서 0.83 (너무 높아 대부분 거부) + // 개선: length/(length+2) → 5자에서 0.71, 클램프 → 0.7 (적절한 필터) + const rawThreshold = lower.length / (lower.length + 2); + const minThreshold = Math.max(0.4, Math.min(0.7, rawThreshold)); return bestScore >= minThreshold ? bestMatch : null; } diff --git a/src/lib/ClientResourceMatcher.ts b/src/lib/ClientResourceMatcher.ts index 264716c..f7d5174 100644 --- a/src/lib/ClientResourceMatcher.ts +++ b/src/lib/ClientResourceMatcher.ts @@ -37,36 +37,35 @@ export function matchStaticOrRemote(description: string): ClientMatchResult | nu const keywords = extractKeywords(description); console.log(`[ClientMatcher] 추출된 키워드: ${keywords.join(', ')}`); - // 2. 개별 단어로 Static Library 검색 + // 2. 모든 키워드에 대한 최적 매칭 수집 (v3: 즉시 반환 → 다중 후보 비교) + let bestResult: ClientMatchResult | null = null; + let bestScore = 0; + for (const keyword of keywords) { const libraryPath = findAssetByKeyword(keyword); if (libraryPath) { - console.log(`[ClientMatcher] Static 매칭: "${keyword}" → ${libraryPath}`); - return { - type: 'asset', - source: 'library', - id: keyword.replace(/\s+/g, '_'), - filePath: libraryPath, - similarity: 1.0 - }; + // 키워드 길이 기반 관련성 점수: 긴 키워드 = 더 구체적 = 더 높은 점수 + const score = keyword.length / (keyword.length + 2); + if (score > bestScore) { + bestScore = score; + bestResult = { + type: 'asset', + source: 'library', + id: keyword.replace(/\s+/g, '_'), + filePath: libraryPath, + similarity: score + }; + } } } - // 3. 개별 단어로 Remote CDN 검색 + if (bestResult) { + console.log(`[ClientMatcher] Static 최적 매칭: "${bestResult.id}" → ${bestResult.filePath} (score: ${bestScore.toFixed(3)})`); + return bestResult; + } + + // 3. Remote CDN 검색 (현재 비활성화) // [FIX] Poly Pizza CORS/Auth Issues - Temporarily Disabled - // for (const keyword of keywords) { - // const remotePath = findRemoteAsset(keyword); - // if (remotePath) { - // console.log(`[ClientMatcher] Remote 매칭: "${keyword}" → ${remotePath}`); - // return { - // type: 'asset', - // source: 'remote', - // id: `remote_${keyword.replace(/\s+/g, '_')}`, - // filePath: remotePath, - // similarity: 0.95 - // }; - // } - // } console.log(`[ClientMatcher] 매칭 실패: ${description}`); return null; diff --git a/src/services/VectorSearchService.ts b/src/services/VectorSearchService.ts index 299ab2c..10e2b42 100644 --- a/src/services/VectorSearchService.ts +++ b/src/services/VectorSearchService.ts @@ -394,6 +394,12 @@ class VectorSearchServiceClass { score *= 1.3; } + // [v3] 카테고리 불일치 페널티: 추론된 카테고리와 완전히 다르면 ×0.5 + // 하드코딩 없이 기존 inferCategoryFromQuery 결과만 활용 + if (inferredCategory && asset.category !== inferredCategory && score > 0) { + score *= 0.5; + } + return { asset, score, matchCount: score }; }); From a7bdd228f6cce53a3c45c817778f93247950d9a4 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 13:57:57 +0900 Subject: [PATCH 08/10] =?UTF-8?q?fix:=20=EC=9B=94=EB=93=9C=20=EC=9E=85?= =?UTF-8?q?=EC=9E=A5=20=EC=BA=90=EC=8B=9C=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20+=20=ED=81=AC=EA=B8=B0=20=EA=B8=B0=EB=B0=98=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20=EC=A4=91=EB=B3=B5=20=EB=B0=A9=EC=A7=80=20?= =?UTF-8?q?+=20=EB=B0=B0=ED=8F=AC=20Dev/Live=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agent/data/credentials_registry.md | 62 + .agent/data/git_changelog.json | 1069 +++++++++++++++++ .agent/rules/rule.md | 133 ++ .agent/workflows/deploy_master_rule.md | 92 ++ src/app/page.tsx | 74 +- .../ai-pipeline/AssetRetrievalService.ts | 32 +- 6 files changed, 1445 insertions(+), 17 deletions(-) create mode 100644 .agent/data/credentials_registry.md create mode 100644 .agent/data/git_changelog.json create mode 100644 .agent/rules/rule.md create mode 100644 .agent/workflows/deploy_master_rule.md diff --git a/.agent/data/credentials_registry.md b/.agent/data/credentials_registry.md new file mode 100644 index 0000000..f7d428b --- /dev/null +++ b/.agent/data/credentials_registry.md @@ -0,0 +1,62 @@ +# 🔐 WebPilot-Engine 크리덴셜 레지스트리 (SSOT) + +> **이 파일은 프로젝트의 모든 API 키/토큰 메타정보를 기록하는 단일 진실 소스(SSOT)입니다.** +> **에이전트는 `.env*` 파일 수정 전에 반드시 이 레지스트리를 참조해야 합니다.** + +--- + +## .env (Git 추적됨 ⚠️) + +| 환경변수명 | 용도 | 발급처 | +|------------|------|--------| +| `DATABASE_URL` | SQLite 로컬 DB | 내부 설정 | +| `NEXT_PUBLIC_BLOCKADE_LABS_API_KEY` | Blockade Labs 스카이박스 AI | [Blockade Labs](https://skybox.blockadelabs.com/) | +| `NEXT_PUBLIC_TRIPO_API_KEY` | Tripo3D 3D 모델 생성 | [Tripo3D](https://www.tripo3d.ai/) | +| `GEMINI_API_KEY` | Google Gemini AI (서버) | [Google AI Studio](https://aistudio.google.com/apikey) | +| `NEXT_PUBLIC_GEMINI_API_KEY` | Google Gemini AI (클라이언트) | 위와 동일 | +| `SUNO_API_KEY` | Suno AI BGM 생성 | [Suno AI](https://suno.ai/) | +| `ELEVENLABS_API_KEY` | ElevenLabs SFX 생성 | [ElevenLabs](https://elevenlabs.io/) | +| `NEXT_PUBLIC_SLYTHERIN_*` | 테마 설정 (5개) | 내부 설정 | +| `HYPER3D_API_KEY` | Hyper3D Rodin 3D 생성 | [Hyper3D](https://hyper3d.ai/) | +| `R2_BUCKET_URL` | Cloudflare R2 스토리지 | [Cloudflare](https://dash.cloudflare.com/) | +| `R2_ACCOUNT_ID` | R2 계정 ID | 위와 동일 | +| `R2_BUCKET_NAME` | R2 버킷 이름 | 위와 동일 | +| `R2_ACCESS_KEY_ID` | R2 API 키 | 위와 동일 | +| `R2_SECRET_ACCESS_KEY` | R2 시크릿 | 위와 동일 | +| `SKETCHFAB_API_KEY` | Sketchfab 3D 검색 | [Sketchfab](https://sketchfab.com/) | + +## .env.local (Git 추적 안 됨 🔒) + +| 환경변수명 | 용도 | 발급처 | +|------------|------|--------| +| `SLACK_WEBHOOK_URL` | Slack 알림 웹훅 | Slack App 설정 | +| `OPENAI_API_KEY` | OpenAI (Vector Search Embedding) | [OpenAI](https://platform.openai.com/api-keys) | +| `NEXT_PUBLIC_OPENAI_API_KEY` | OpenAI (클라이언트) | 위와 동일 | +| `REPLICATE_API_TOKEN` | Replicate TripoSR | [Replicate](https://replicate.com/account/api-tokens) | +| `POLY_PIZZA_API_KEY` | Poly Pizza 3D 검색 | [Poly Pizza](https://polypizza.xyz/) | +| `FREESOUND_CLIENT_ID` | Freesound 클라이언트 ID | [Freesound API](https://freesound.org/apiv2/apply/) | +| `FREESOUND_API_KEY` | Freesound CC0 효과음 수집 | 위와 동일 | + +--- + +## 주요 프로젝트 경로 + +| 항목 | 경로/URL | +|------|----------| +| 로컬 프로젝트 | `D:\test\WebPilot-Engine` | +| Git 원격 | GitHub `yesol/webpilot-engine` (main) | +| Vercel 배포 | webpilot-engine.vercel.app | +| **개발 서버** | **`localhost:8090`** (`next dev -p 8090`) | +| 빌드 명령 | `cross-env NEXT_TURBOPACK=0 next build` | +| Dev 배포 | `vercel` (기본 — 에이전트 자동 허용) | +| Live 배포 | `vercel --prod` (**사용자 명시 요청 시에만**) | +| GLB 모델 | `public/models/` (1,680개) | +| HDRI | `public/skybox/` (30개) | +| PBR 텍스처 | `public/textures/` (70개) | +| 파티클 | `public/textures/particles/kenney/` (193개) | +| 효과음 | `public/sounds/` | +| 메타데이터 | `public/models/_metadata_physical.json`, `_metadata_semantic.json` | +| .env 파일 | `.env` (Git 추적), `.env.local` (Git 미추적) | + +--- +*마지막 업데이트: 2026-02-13* diff --git a/.agent/data/git_changelog.json b/.agent/data/git_changelog.json new file mode 100644 index 0000000..52bd139 --- /dev/null +++ b/.agent/data/git_changelog.json @@ -0,0 +1,1069 @@ +{ + "lastUpdated": "2026-02-13T13:40:00+09:00", + "pushHistory": [ + { + "timestamp": "2026-02-13T13:40:00+09:00", + "commits": [ + { + "hash": "5509e8c", + "message": "fix: 에셋 매칭 품질 v3 - 역방향 페널티 강화, 다중 후보 비교, 카테고리 페널티, 임계값 보정", + "description": "computeMatchScore 역방향 페널티 0.5→0.3, findAssetByKeyword 임계값 클램프 0.4~0.7, ClientResourceMatcher 다중 후보 비교, VectorSearchService 카테고리 불일치 ×0.5, AssetRegistry 임계값 동일 보정", + "filesChanged": 4, + "insertions": 45, + "deletions": 32 + } + ], + "totalCommits": 1, + "summary": "에셋 매칭 품질 v3 — 4개 파일 동적 스코어링 강화 (하드코딩 없음)", + "category": [ + "fix" + ], + "impact": { + "bugFixes": 1, + "totalFilesChanged": 4, + "totalInsertions": 45, + "totalDeletions": 32 + } + }, + { + "timestamp": "2026-02-12T09:52:00+09:00", + "commits": [ + { + "hash": "e2422ad", + "message": "feat: 누락 리소스 자동 추적 시스템 (MissingResourceTracker)", + "filesChanged": 5, + "insertions": 505, + "deletions": 1 + } + ], + "totalCommits": 1, + "summary": "1개 기능 추가 — MissingResourceTracker 싱글톤 서비스 + AssetRetrieval/AssetOrchestrator/AIPipeline 통합 + API 엔드포인트", + "category": [ + "feat" + ], + "impact": { + "newFiles": 2, + "modifiedFiles": 3 + } + }, + { + "timestamp": "2026-02-12T09:23:00+09:00", + "commits": [ + { + "hash": "a44fda0", + "message": "feat: 3D asset pipeline workflow + R&D reports + analysis scripts", + "filesChanged": 28, + "insertions": 2215, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "feat: 3D 에셋 파이프라인 워크플로우 가이드 + R&D 리포트(HTML) + 에셋 갭 분석 스크립트 추가" + }, + { + "timestamp": "2026-02-11T15:36:00+09:00", + "commits": [ + { + "hash": "0474521", + "message": "feat(Phase4): QualityGate 6개 Validator Tier 통합 — ArchitectAgent 연결 + QualityGateService 삭제", + "filesChanged": 7, + "insertions": 36623, + "deletions": 579 + } + ], + "totalCommits": 1, + "summary": "feat: Phase 4 품질 게이트 통합 (ArchitectAgent → QualityGate 6개 Validator, QualityGateService 삭제, 타입 에러 0건)" + }, + { + "timestamp": "2026-02-11T15:10:00+09:00", + "commits": [ + { + "hash": "9b2d0e4", + "message": "feat(Phase0): 시맨틱 검색 B+C 통합 — AI 태깅 + 사전 벡터 인덱스", + "filesChanged": 7, + "insertions": 94193, + "deletions": 15369 + } + ], + "totalCommits": 1, + "summary": "feat: Phase 0 시맨틱 검색 통합 (AI 태깅 semanticAssets 재생성 + Float32 벡터 인덱스 + VectorSearchService 사전 로드)" + }, + { + "timestamp": "2026-02-11T14:55:00+09:00", + "commits": [ + { + "hash": "a8d1907", + "message": "feat(Phase0): Step 3 벡터 임베딩 생성 완료", + "filesChanged": 2, + "insertions": 3, + "deletions": 1 + } + ], + "totalCommits": 1, + "summary": "feat: Phase 0 Step 3 — gemini-embedding-001 모델로 1,680개 3072차원 벡터 임베딩 생성 (249초). .gitignore 업데이트" + }, + { + "timestamp": "2026-02-11T14:00:00+09:00", + "commits": [ + { + "hash": "a990d9b", + "message": "feat(Phase5): 에셋 자동 인덱싱 파이프라인 완성", + "filesChanged": 31, + "insertions": 197221, + "deletions": 219 + } + ], + "totalCommits": 1, + "summary": "feat: Phase 5 에셋 자동 인덱싱 — audio/sfx/skybox 라이브러리 JSON 자동 머지 리팩터링, build-asset-registry.ts, package.json 스크립트 추가" + }, + { + "timestamp": "2026-02-11T01:05:00+09:00", + "commits": [ + { + "hash": "22c0636", + "message": "fix: MCTS-ReflexArc 충돌 감지 불일치 해결", + "filesChanged": 3, + "insertions": 85, + "deletions": 24 + } + ], + "totalCommits": 1, + "summary": "MCTS-ReflexArc 충돌 불일치 해결 — createBBox 중심AABB, 동적 perturbation, 충돌에너지 강화, seededRandomPosition 충돌회피, 동적 NUDGE_MARGIN", + "category": [ + "fix" + ], + "impact": { + "totalFiles": 3, + "totalInsertions": 85, + "totalDeletions": 24 + } + }, + { + "timestamp": "2026-02-10T17:05:00+09:00", + "commits": [ + { + "hash": "1839690", + "message": "fix(pipeline): 에셋 매칭 품질 강화 + WebGL/Audio/404 버그 수정", + "filesChanged": 4, + "insertions": 178, + "deletions": 43 + } + ], + "totalCommits": 1, + "summary": "4건 버그 수정 — 에셋 매칭(토큰 기반+카테고리 보너스), WebGL 최적화, grid-bg SVG 대체, Audio SFX 풀링", + "category": [ + "fix" + ], + "impact": { + "newFiles": 0, + "modifiedFiles": 4 + } + }, + { + "timestamp": "2026-02-10T15:48:00+09:00", + "commits": [ + { + "hash": "b2da52e", + "message": "feat(matcap-phase2): 100개 CC0 Matcap 텍스처 수집 + DB 동적 조회 전환", + "filesChanged": 2, + "insertions": 108, + "deletions": 10 + } + ], + "totalCommits": 1, + "summary": "Matcap Phase 2 — 100개 CC0 텍스처 R2 수집 + pickMatcapByCategory DB 동적 조회 전환", + "category": [ + "feat" + ], + "impact": { + "newFiles": 0, + "modifiedFiles": 2 + } + }, + { + "timestamp": "2026-02-10T15:20:00+09:00", + "commits": [ + { + "hash": "a30c1c2", + "message": "feat: AssetHunterCell renderStyle 3단계 폴백 + MainScene matcap 라우팅 최적화", + "filesChanged": 2, + "insertions": 200, + "deletions": 22 + } + ], + "totalCommits": 1, + "summary": "1개 기능 추가, 2개 파일 변경 — Matcap 자동 감지 폴백 (DB→컬럼→경로) + MainScene 컴포넌트 분리", + "category": [ + "feat" + ], + "impact": { + "newFiles": 0, + "modifiedFiles": 2 + } + }, + { + "timestamp": "2026-02-10T10:37:00+09:00", + "commits": [ + { + "hash": "f120fde", + "message": "feat: 로컬 리소스 DB 마이그레이션 — 1,752건 등록", + "filesChanged": 2, + "insertions": 281, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "로컬 에셋 1,752건 DB 마이그레이션 (모델 1,678 + 스카이박스 62 + 오디오 12)", + "category": [ + "feat" + ], + "impact": { + "newFiles": 1, + "modifiedFiles": 1 + } + }, + { + "timestamp": "2026-02-10T10:31:00+09:00", + "commits": [ + { + "hash": "7014a77", + "message": "fix: audioSaver + tts/synthesize + ResourceMatcher R2 아카이빙 보완", + "filesChanged": 3, + "insertions": 34, + "deletions": 6 + } + ], + "totalCommits": 1, + "summary": "2차 전수 감사로 발견한 audioSaver, tts/synthesize, ResourceMatcher 3곳 추가 보완", + "category": [ + "fix" + ], + "impact": { + "newFiles": 0, + "modifiedFiles": 3 + } + }, + { + "timestamp": "2026-02-10T10:26:00+09:00", + "commits": [ + { + "hash": "016c6d1", + "message": "fix: model/save + skybox/save R2 아카이빙 누락 보완 — 100% 파이프라인 완성", + "filesChanged": 2, + "insertions": 25, + "deletions": 19 + } + ], + "totalCommits": 1, + "summary": "model/save + skybox/save R2 아카이빙 누락 보완 → 전체 8개 route 100% 커버리지", + "category": [ + "fix" + ], + "impact": { + "newFiles": 0, + "modifiedFiles": 2 + } + }, + { + "timestamp": "2026-02-10T09:59:00+09:00", + "commits": [ + { + "hash": "089a62e", + "message": "feat: ResourceArchiver 중앙 서비스 + 전체 API route R2 아카이빙 연결", + "filesChanged": 7, + "insertions": 337, + "deletions": 4 + } + ], + "totalCommits": 1, + "summary": "ResourceArchiver 중앙 서비스 구현 + 6개 API route R2 아카이빙 연결 (fire-and-forget 패턴)", + "category": [ + "feat" + ], + "impact": { + "newFiles": 1, + "modifiedFiles": 6 + } + }, + { + "timestamp": "2026-02-09T15:50:00+09:00", + "commits": [ + { + "hash": "61465a0", + "message": "feat(commander): MS3 면역 핸드쉐이크 — PLACEMENT_DONE 후 SemanticNK+AestheticMacro 검증 대기, 10초 타임아웃", + "filesChanged": 1, + "insertions": 83, + "deletions": 13 + } + ], + "totalCommits": 1, + "summary": "Commander ↔ 면역 세포 핸드쉐이크 완성", + "category": [ + "feat" + ], + "impact": { + "newFiles": 0, + "modifiedFiles": 1 + } + }, + { + "timestamp": "2026-02-09T15:45:00+09:00", + "commits": [ + { + "hash": "8fdbdcc", + "message": "feat(immune): MS3 면역 분대 — SemanticNKCell 의미검증 + AestheticMacrophage 심미검증 + page.tsx 통합", + "filesChanged": 5, + "insertions": 403, + "deletions": 5 + } + ], + "totalCommits": 1, + "summary": "MS3 면역 분대 (의미 + 심미 검증 세포)", + "category": [ + "feat" + ], + "impact": { + "newFiles": 2, + "modifiedFiles": 3 + } + }, + { + "timestamp": "2026-02-09T15:30:00+09:00", + "commits": [ + { + "hash": "e062fa3", + "message": "feat(cells): MS1.5 하드닝 — PropMaster 서사적 스케일링, AssetHunter 서사 검색어, SpatialZoner mitosis", + "filesChanged": 3, + "insertions": 176, + "deletions": 11 + } + ], + "totalCommits": 1, + "summary": "MS1.5 하드닝 (서사적 DNA 실질 활용 + 세포 분열)", + "category": [ + "feat" + ], + "impact": { + "newFiles": 0, + "modifiedFiles": 3 + } + }, + { + "timestamp": "2026-02-09T15:14:00+09:00", + "commits": [ + { + "hash": "0e0538d", + "message": "feat(cells): MS1.5 시냅스 연결 — Feature Flag, Commander narrative 전달, PLACEMENT_DONE, page.tsx 통합", + "filesChanged": 4, + "insertions": 210, + "deletions": 50 + } + ], + "totalCommits": 1, + "summary": "MS1.5 시냅스 연결 (두뇌-근골격 전체 파이프라인 연결)", + "category": [ + "feat" + ], + "impact": { + "newFiles": 1, + "modifiedFiles": 3 + } + }, + { + "timestamp": "2026-02-09T14:58:00+09:00", + "commits": [ + { + "hash": "c4aee21", + "message": "fix(cells): MS2 코드 하드닝 — Seeded RNG, Shrink 시작점, Zone ID, ALARM 전파, SIGNALS 타입안전성, 증분 캐싱", + "filesChanged": 6, + "insertions": 216, + "deletions": 62 + } + ], + "totalCommits": 1, + "summary": "MS2 하드닝 (버그 3건 + 구조개선 3건)", + "category": [ + "fix" + ], + "impact": { + "newFiles": 0, + "modifiedFiles": 6 + } + }, + { + "timestamp": "2026-02-09T14:10:00+09:00", + "commits": [ + { + "hash": "d79ca79", + "message": "feat(cells): MS2 근골격계 핵심 세포 5개 구현 완료 + API 정합", + "filesChanged": 8, + "insertions": 1482, + "deletions": 7 + } + ], + "totalCommits": 1, + "summary": "MS2 세포 구현 (ReflexArc, SpatialZoner, PropMaster, AssetHunter, ConstructorSquad) + API 정합", + "category": [ + "feat" + ], + "impact": { + "newFiles": 5, + "modifiedFiles": 3 + } + }, + { + "timestamp": "2026-02-09T13:38:00+09:00", + "commits": [ + { + "hash": "7ee1bad", + "message": "feat(cells): MS1 뉴로-유기적 세포 구현 — CommanderCell, IntentAnalystCell, LoreWeaverCell, ScenarioArchitectCell", + "filesChanged": 6, + "insertions": 968, + "deletions": 9 + } + ], + "totalCommits": 1, + "summary": "MS1 세포 구현 (CommanderCell FSM, IntentAnalyst 3단계 태그, LoreWeaver 마이크로스토리, ScenarioArchitect Reflexion Loop)", + "category": [ + "feat" + ], + "impact": { + "filesChanged": 6, + "insertions": 968, + "deletions": 9 + } + }, + { + "timestamp": "2026-02-09T12:57:00+09:00", + "commits": [ + { + "hash": "41c820f", + "message": "feat(cells): 신경-유기적 아키텍처 인프라 구축 - BaseCell/types/index + AgentRoleSchema 확장", + "filesChanged": 4, + "insertions": 457, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "신경-유기적 아키텍처 인프라 구축 (cells/ 폴더 구조, BaseCell 추상 클래스, 17종 CellType 타입, AgentRoleSchema 확장)", + "category": [ + "feat" + ], + "impact": { + "newFeatures": 1, + "totalFilesChanged": 4, + "totalInsertions": 457, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-02-09T10:20:00+09:00", + "commits": [ + { + "hash": "ec92d49", + "message": "fix: AI 씬 상태 보존 (sessionStorage) + 하드코딩 제거 (VectorSearch 연동)", + "filesChanged": 3, + "insertions": 141, + "deletions": 18 + } + ], + "totalCommits": 1, + "summary": "AI 씬 sessionStorage 영속화, 하드코딩 키워드 매핑 제거, VectorSearchService 시맨틱 검색 연동", + "category": [ + "fix" + ], + "impact": { + "bugFixes": 2, + "totalFilesChanged": 3, + "totalInsertions": 141, + "totalDeletions": 18 + } + }, + { + "timestamp": "2026-02-04T10:33:00+09:00", + "commits": [ + { + "hash": "e90112c", + "message": "feat(ai): 시맨틱 검색 활성화 및 다국어 지원", + "filesChanged": 9, + "insertions": 582, + "deletions": 123 + } + ], + "totalCommits": 1, + "summary": "시맨틱 검색 활성화, Director 다국어 지원, React Hook 수정, 서사 엔진 통합", + "category": [ + "feat" + ], + "impact": { + "newFeatures": 4, + "totalFilesChanged": 9, + "totalInsertions": 582, + "totalDeletions": 123 + } + }, + { + "timestamp": "2026-02-03T17:05:00+09:00", + "commits": [ + { + "hash": "eef8470", + "message": "feat(core): Phase 2 완료 - LLM & Vector Search 통합", + "filesChanged": 3, + "insertions": 185, + "deletions": 26 + } + ], + "totalCommits": 1, + "summary": "Phase 2 완료 (LLM, Vector Search, MCTS, Reflexion Loop)", + "category": [ + "feat" + ], + "impact": { + "newFeatures": 3, + "totalFilesChanged": 3, + "totalInsertions": 185, + "totalDeletions": 26 + } + }, + { + "timestamp": "2026-02-03T16:25:00+09:00", + "commits": [ + { + "hash": "8d6e92d", + "message": "feat(audio): SFX 49개 추가 대량 생성 (총 62개)", + "filesChanged": 51, + "insertions": 446, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "SFX 대량 생성: environment(15), magic(10), combat(10), object(10), ui(5) - 2MB", + "category": [ + "feat" + ], + "impact": { + "totalFilesChanged": 51, + "totalInsertions": 446, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-02-03T16:20:00+09:00", + "commits": [ + { + "hash": "92649fc", + "message": "feat(audio): ElevenLabs SFX 10개 추가 생성 (총 13개)", + "filesChanged": 11, + "insertions": 135, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "SFX 10개 추가: environment, ui, object, character 카테고리", + "category": [ + "feat" + ], + "impact": { + "totalFilesChanged": 11, + "totalInsertions": 135, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-02-03T16:15:00+09:00", + "commits": [ + { + "hash": "3be61fd", + "message": "feat(audio): ElevenLabs SFX 3개 생성", + "filesChanged": 4, + "insertions": 122, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "ElevenLabs로 SFX 생성: fire_crackle, door_open, magic_sparkle", + "category": [ + "feat" + ], + "impact": { + "totalFilesChanged": 4, + "totalInsertions": 122, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-02-03T16:10:00+09:00", + "commits": [ + { + "hash": "36a7576", + "message": "feat(assets): 무료 에셋 다운로드 및 중복 검증 시스템", + "filesChanged": 6, + "insertions": 2258, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "GitHub Raw에서 CC0 에셋 다운로드, 중복 검사 및 GLB 검증 시스템 구축", + "category": [ + "feat" + ], + "impact": { + "totalFilesChanged": 6, + "totalInsertions": 2258, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-02-03T15:20:00+09:00", + "commits": [ + { + "hash": "a73f334", + "message": "feat(cache): 시맨틱 캐시 시스템 구현", + "filesChanged": 4, + "insertions": 843, + "deletions": 2 + } + ], + "totalCommits": 1, + "summary": "시맨틱 캐시 시스템 구현 (SemanticCacheService, 캐시 통계 API, 오디오 생성 스크립트)", + "category": [ + "feat" + ], + "impact": { + "totalFilesChanged": 4, + "totalInsertions": 843, + "totalDeletions": 2 + } + }, + { + "timestamp": "2026-02-03T14:43:00+09:00", + "commits": [ + { + "hash": "e4b83d2", + "message": "docs: Git changelog 세 번째 push 이력 및 JSON 구문 수정", + "filesChanged": 1, + "insertions": 24, + "deletions": 1 + } + ], + "totalCommits": 1, + "summary": "Git changelog 최종 정리", + "category": [ + "docs" + ], + "impact": { + "totalFilesChanged": 1, + "totalInsertions": 24, + "totalDeletions": 1 + } + }, + { + "timestamp": "2026-02-03T14:42:00+09:00", + "commits": [ + { + "hash": "2e0c157", + "message": "docs: Git changelog 두 번째 push 이력 추가 및 JSON 구문 수정", + "description": "changelog JSON 구문 수정", + "filesChanged": 1, + "insertions": 25, + "deletions": 1 + } + ], + "totalCommits": 1, + "summary": "Git changelog JSON 정규화", + "category": [ + "docs" + ], + "impact": { + "totalFilesChanged": 1, + "totalInsertions": 25, + "totalDeletions": 1 + } + }, + { + "timestamp": "2026-02-03T14:40:00+09:00", + "commits": [ + { + "hash": "681528c", + "message": "chore: Git changelog 업데이트 및 강제 정책 추가", + "description": "changelog 이력 기록, 강제 정책 파일 생성", + "filesChanged": 2, + "insertions": 86, + "deletions": 1 + } + ], + "totalCommits": 1, + "summary": "Git changelog 강제 정책 시스템 구축", + "category": [ + "chore" + ], + "impact": { + "infrastructure": 1, + "totalFilesChanged": 2, + "totalInsertions": 86, + "totalDeletions": 1 + } + }, + { + "timestamp": "2026-02-03T14:38:00+09:00", + "commits": [ + { + "hash": "f0c2a64", + "message": "feat(placement): 3계층 AI 의존성 안전 체계 및 MCTS 폴백 구현", + "description": "getYRange, getPlacementStrategy 헬퍼, 프롬프트 필수화, 스키마 기본값, 포인트 부족 MCTS 폴백", + "filesChanged": 8, + "insertions": 1447, + "deletions": 10 + } + ], + "totalCommits": 1, + "summary": "AI 배치 의존성 완전 해결 - 3계층 안전장치 + 데이터 확보 + MCTS 폴백", + "category": [ + "feat" + ], + "impact": { + "newFeatures": 4, + "totalFilesChanged": 8, + "totalInsertions": 1447, + "totalDeletions": 10 + } + }, + { + "timestamp": "2026-01-29T17:00:00+09:00", + "commits": [ + { + "hash": "8ca0655", + "message": "feat(ai-pipeline): BVH 기반 충돌 검사 통합", + "description": "MCTSPlacementService v2.0, SpatialValidator v6.0 BVH 통합", + "filesChanged": 2, + "insertions": 399, + "deletions": 134 + } + ], + "totalCommits": 1, + "summary": "AI 파이프라인 BVH 충돌 검사 통합", + "category": [ + "feat" + ], + "impact": { + "newFeatures": 2, + "totalFilesChanged": 2, + "totalInsertions": 399, + "totalDeletions": 134 + } + }, + { + "timestamp": "2026-01-29T16:35:00+09:00", + "commits": [ + { + "hash": "d55260d", + "message": "feat(usn): Phase 5-6 실시간 최적화 및 품질 검증 구현", + "description": "AssetQualityValidator, LODAssigner 구현", + "filesChanged": 3, + "insertions": 907, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "Phase 5-6 실시간 최적화 및 품질 검증 시스템", + "category": [ + "feat" + ], + "impact": { + "newFeatures": 2, + "totalFilesChanged": 3, + "totalInsertions": 907, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-01-29T16:24:00+09:00", + "commits": [ + { + "hash": "4588618", + "message": "feat(geometry): Phase A 핵심 기하 엔진 구현 완료", + "description": "BVHTree, SurfaceAnalyzer, PlacementSolver, SpatialRaycaster, OBBGenerator, ContainmentScanner, GeometryEngine 7개 모듈", + "filesChanged": 9, + "insertions": 3273, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "Phase A 핵심 기하 엔진 구현 - 오브젝트 배치 시스템 기반", + "category": [ + "feat" + ], + "impact": { + "newFeatures": 7, + "totalFilesChanged": 9, + "totalInsertions": 3273, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-01-28T18:05:00+09:00", + "commits": [ + { + "hash": "c14f50a", + "message": "docs: Update daily report for Phase 2.5 Scale Stabilization", + "filesChanged": 1, + "insertions": 42, + "deletions": 58 + } + ], + "totalCommits": 1, + "summary": "Phase 2.5 스케일 정규화 및 리포트 업데이트", + "category": [ + "docs" + ], + "impact": { + "totalFilesChanged": 1, + "totalInsertions": 42, + "totalDeletions": 58 + } + }, + { + "timestamp": "2026-01-28T11:48:00+09:00", + "commits": [ + { + "hash": "c546bc2", + "message": "feat: Reports 페이지에 Git Changelog 탭 추가", + "description": "Deployment History → Git Changelog 탭 교체, GitPushCard 컴포넌트 생성", + "filesChanged": 4, + "insertions": 199, + "deletions": 24 + } + ], + "totalCommits": 1, + "summary": "Reports 페이지 Git Changelog 탭 UI 구현", + "category": [ + "feat" + ], + "impact": { + "newFeatures": 1, + "totalFilesChanged": 4, + "totalInsertions": 199, + "totalDeletions": 24 + } + }, + { + "timestamp": "2026-01-28T11:45:00+09:00", + "commits": [ + { + "hash": "fd50bdb", + "message": "chore: 에이전트 자동화 규칙 추가 - Git Push 시 자동 개발 로그 기록", + "filesChanged": 1, + "insertions": 27, + "deletions": 0 + }, + { + "hash": "bdf9f8f", + "message": "feat: Git Changelog Tracker 스킬 추가 + Daily 리포트 (2026-01-28)", + "filesChanged": 3, + "insertions": 350, + "deletions": 0 + } + ], + "totalCommits": 2, + "summary": "Git Push 자동 개발 로그 기록 시스템 구축", + "category": [ + "chore", + "feat" + ], + "impact": { + "newFeatures": 1, + "infrastructure": 1, + "totalFilesChanged": 4, + "totalInsertions": 377, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-01-28T11:41:00+09:00", + "commits": [ + { + "hash": "e52a4d4", + "message": "fix: AssetRetrievalService 코드 리뷰 반영", + "filesChanged": 1, + "insertions": 6, + "deletions": 4 + }, + { + "hash": "2bce0ea", + "message": "feat: AI Scene Pipeline Phase 2 구현 (Stage 4-6)", + "filesChanged": 6, + "insertions": 1070, + "deletions": 7 + } + ], + "totalCommits": 2, + "summary": "AI Pipeline Phase 2 (Stage 4-6) 구현 완료", + "category": [ + "feat", + "fix" + ], + "impact": { + "newFeatures": 3, + "bugFixes": 1, + "totalFilesChanged": 7, + "totalInsertions": 1076, + "totalDeletions": 11 + } + }, + { + "timestamp": "2026-01-27T09:00:00+09:00", + "commits": [ + { + "hash": "1d0bdeb", + "message": "feat: Vercel Daily Report 스킬 추가", + "filesChanged": 5, + "insertions": 409, + "deletions": 0 + }, + { + "hash": "b7f1adf", + "message": "docs: daily summary with all commits (2026-01-27)", + "filesChanged": 1, + "insertions": 56, + "deletions": 0 + } + ], + "totalCommits": 2, + "summary": "Vercel Daily Reporter 스킬 구현", + "category": [ + "feat", + "docs" + ], + "impact": { + "newFeatures": 1, + "totalFilesChanged": 6, + "totalInsertions": 465, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-01-26T18:00:00+09:00", + "commits": [ + { + "hash": "991d3c9", + "message": "feat(env): 스카이박스 폴더 생성 및 README 추가", + "filesChanged": 2, + "insertions": 45, + "deletions": 0 + } + ], + "totalCommits": 1, + "summary": "환경 에셋 구조 정리", + "category": [ + "feat" + ], + "impact": { + "totalFilesChanged": 2, + "totalInsertions": 45, + "totalDeletions": 0 + } + }, + { + "timestamp": "2026-01-22T12:30:00+09:00", + "commits": [ + { + "hash": "21f6b23", + "message": "refactor: LLMProvider lint fix", + "filesChanged": 1, + "insertions": 5, + "deletions": 3 + }, + { + "hash": "e2c9a4a", + "message": "feat: ScenePlanner 완전 구현", + "filesChanged": 8, + "insertions": 892, + "deletions": 45 + }, + { + "hash": "7ac12b5", + "message": "feat: VerifiedAssetPool 기반 에셋 매칭", + "filesChanged": 5, + "insertions": 1200, + "deletions": 120 + } + ], + "totalCommits": 3, + "summary": "ScenePlanner 및 VerifiedAssetPool 구현", + "category": [ + "feat", + "refactor" + ], + "impact": { + "newFeatures": 2, + "totalFilesChanged": 14, + "totalInsertions": 2097, + "totalDeletions": 168 + } + }, + { + "timestamp": "2026-01-21T18:00:00+09:00", + "commits": [ + { + "hash": "3cc17b0", + "message": "fix: Lint 에러 수정 (동적 import)", + "filesChanged": 3, + "insertions": 15, + "deletions": 12 + }, + { + "hash": "8f5d2e1", + "message": "feat: Smart Fallback System 구현", + "filesChanged": 4, + "insertions": 245, + "deletions": 30 + } + ], + "totalCommits": 2, + "summary": "에셋 Fallback 시스템 및 안정화", + "category": [ + "feat", + "fix" + ], + "impact": { + "newFeatures": 1, + "bugFixes": 1, + "totalFilesChanged": 7, + "totalInsertions": 260, + "totalDeletions": 42 + } + }, + { + "timestamp": "2026-01-20T12:00:00+09:00", + "commits": [ + { + "hash": "71db06a", + "message": "fix: 패턴 우선순위 수정 및 매칭 테스트 추가", + "filesChanged": 2, + "insertions": 85, + "deletions": 20 + }, + { + "hash": "a3f8b21", + "message": "feat: LayoutResolver 최초 구현", + "filesChanged": 6, + "insertions": 520, + "deletions": 0 + } + ], + "totalCommits": 2, + "summary": "LayoutResolver 초기 구현", + "category": [ + "feat", + "fix" + ], + "impact": { + "newFeatures": 1, + "bugFixes": 1, + "totalFilesChanged": 8, + "totalInsertions": 605, + "totalDeletions": 20 + } + } + ] +} \ No newline at end of file diff --git a/.agent/rules/rule.md b/.agent/rules/rule.md new file mode 100644 index 0000000..a7e0bcd --- /dev/null +++ b/.agent/rules/rule.md @@ -0,0 +1,133 @@ +--- +trigger: always_on +--- + +# 🎯 프로젝트 최우선 목적 (Mission Priority #1) + +> **"텍스트 한 줄로 완전한 3D 세계를 창조한다"** + +모든 개발은 **AI-Native Scene Generation Pipeline** 완성을 향해야 한다: + +- ❌ 하드코딩된 규칙 금지 → ✅ AI가 규칙을 동적 생성 +- ❌ 키워드 매칭 금지 → ✅ Vector DB 시맨틱 검색 +- ❌ 일괄 스케일 금지 → ✅ 개별 오브젝트 AI 추론 +- ❌ 직접 좌표 생성 금지 → ✅ MCTS 기반 최적 배치 + +## 아키텍처: Director-Architect-Renderer Triad + +- 🎬 **Director**: 시나리오 → 장면 명세서 (전역 최적화) +- 📐 **Architect**: MCTS 기반 충돌 없는 배치 (지역 최적화) +- 🎨 **Renderer**: WebGPU + NPR + ControlNet 스타일 변환 + +--- + +# ⚠️ 에이전트 금지 규칙 (NEVER DO) + +## 브라우저 테스트 금지 (CRITICAL) + +**다음 조건에서 브라우저 자동화 테스트(browser_subagent)를 절대 실행하지 않는다:** + +1. **로컬 서버 실행 중일 때** - `localhost`, `127.0.0.1` 등 로컬 주소 테스트 금지 +2. **사용자가 명시적으로 허용하지 않은 경우** - 기본값은 "금지" +3. **브라우저 연결 오류 발생 시** - 재시도 금지 (토큰 낭비) + +**대안:** + +- 사용자가 직접 테스트하고 콘솔 로그/스크린샷 제공 +- 터미널 명령으로 빌드/타입체크만 수행 + +## 하드코딩 금지 (중요!) + +**특정 키워드에 대한 하드코딩된 매핑을 추가하지 않는다:** + +```typescript +// ❌ 절대 하지 말 것 +if (concept.includes('hogwarts')) return '/models/Harry/hogwarts.glb'; +if (concept.includes('candle')) return '/models/candle.glb'; + +// ✅ 대신 시맨틱 검색 사용 +const result = await VectorSearchService.search(concept); +``` + +**이유:** 하드코딩은 확장성이 없고, 새 에셋 추가 시마다 코드 수정 필요 + +--- + +# 기술 표준 (Technical Standards) + +3D 좌표계 표준화: "모든 Three.js 객체 배치는 Y-up 좌표계를 따르며, 바닥면은 y=0으로 고정한다. 객체 간의 겹침(Overlapping)을 방지하기 위해 Bounding Box 계산을 필수적으로 수행하라." + +상태 관리 원칙: "모든 인터랙션 로직은 XState 머신으로 정의되어야 하며, 불확실한 if-else 분기 대신 명시적인 상태 전이(State Transition)를 사용하라." + +리소스 관리: "생성된 3D 자산(GLB/Texture)은 반드시 비동기적으로 로드되어야 하며, Suspense와 Fallback 컴포넌트를 사용하여 사용자 경험을 저해하지 않도록 한다." + +--- + +# 에이전트 자동화 규칙 (Agent Automation Rules) + +## Git Push 자동 로깅 + +**Git Push를 실행할 때마다 자동으로 다음을 수행한다:** + +1. **개발 로그 업데이트**: `.agent/data/git_changelog.json`에 Push 이력 추가 + - 커밋 해시, 메시지, 변경 파일 수, insertions/deletions 기록 + - 자동 summary 생성 (feat/fix 분류) + +2. **기록할 정보**: + + ```json + { + "timestamp": "ISO 8601 형식", + "commits": [{ "hash", "message", "filesChanged", "insertions", "deletions" }], + "totalCommits": 숫자, + "summary": "자동 생성된 요약" + } + ``` + +3. **실행 시점**: `git push` 직후 즉시 실행 (사용자에게 묻지 않음) + +> ⚠️ 이 규칙은 WebPilot-Engine 프로젝트에서 항상 적용된다. + +--- + +# 🔐 크리덴셜 보안 관리 (Credential Security — MANDATORY) + +## 절대 금지 사항 + +1. **API 키/토큰을 코드, 주석, 로그, 아티팩트, 문서에 직접 기재하지 않는다** +2. **`.env*` 파일 내용을 그대로 출력하거나 인용하지 않는다** +3. **커밋 메시지, PR 설명, walkthrough에 키 값을 포함하지 않는다** +4. **사용자가 제공한 키를 채팅 응답에 그대로 반복하지 않는다** + +## 레지스트리 참조 의무 + +- `.env*` 파일 수정 전 **반드시** `.agent/data/credentials_registry.md` 참조 +- 새 API 키 추가 시 **즉시** 레지스트리에 메타정보(변수명, 용도, 발급처) 등록 +- 키가 "없다"고 판단하기 전에 `.env`, `.env.local` **양쪽 모두** 확인 +- 에이전트는 키를 "유실"했다고 판단하면 사용자에게 즉시 보고 + +## .env 파일 안전 규칙 + +- `.env`와 `.env.local` 수정 시 기존 내용을 **정확히 보존** +- NULL 바이트, 인코딩 깨짐 발견 시 즉시 수정 (UTF-8 강제) +- `.gitignore`에 `.env*` 패턴이 반드시 있는지 확인 후 작업 + +--- + +# 📍 프로젝트 주요 경로 (SSOT) + +| 항목 | 값 | +|------|-----| +| 로컬 경로 | `D:\test\WebPilot-Engine` | +| Git 원격 | GitHub `yesol/webpilot-engine` (main) | +| Vercel | webpilot-engine.vercel.app | +| **개발 서버** | **`localhost:8090`** (`next dev -p 8090`) | +| 빌드 명령 | `cross-env NEXT_TURBOPACK=0 next build` | +| 배포 명령 | `vercel` (Dev), `vercel --prod` (Live — 사용자 명시 시만) | +| GLB 모델 | `public/models/` (1,680개) | +| HDRI | `public/skybox/` | +| PBR 텍스처 | `public/textures/` | +| 사운드 | `public/sounds/` | +| 크리덴셜 레지스트리 | `.agent/data/credentials_registry.md` | +| Git 변경 로그 | `.agent/data/git_changelog.json` | +| .env | `.env` (추적), `.env.local` (미추적) | diff --git a/.agent/workflows/deploy_master_rule.md b/.agent/workflows/deploy_master_rule.md new file mode 100644 index 0000000..818d566 --- /dev/null +++ b/.agent/workflows/deploy_master_rule.md @@ -0,0 +1,92 @@ +--- +description: WebPilot-Engine 배포 마스터 룰 — Dev/Live 구분 배포 (Vercel CLI Direct Deploy) +--- + +# 배포 마스터 룰 (Deployment Master Rule) + +**원칙**: GitHub 용량 제한(100MB) 및 네트워크 불안정성을 우회하기 위해 **Git을 거치지 않고 Vercel CLI를 통해 로컬에서 직접 배포**한다. + +--- + +## 🚨 최우선 규칙: Dev / Live 분리 + +| 환경 | 명령어 | URL | 에이전트 자동 실행 | +|------|--------|-----|-------------------| +| **Dev (Preview)** | `vercel` | `*.vercel.app` (Preview URL) | ✅ 허용 | +| **Live (Production)** | `vercel --prod` | `web-pilot-engine.vercel.app` | ❌ **절대 금지** | + +> [!CAUTION] +> **에이전트는 `vercel --prod` (라이브 배포)를 절대 자동 실행하지 않는다.** +> 라이브 배포는 반드시 사용자가 "라이브 배포해", "프로덕션 배포해" 등 **명시적으로 요청**했을 때만 실행한다. +> 그 외 모든 상황에서는 **Dev(Preview) 배포만** 수행한다. + +--- + +## 1. 사전 점검 + +- 프로젝트 루트 경로(`d:\test\WebPilot-Engine`)에 위치해야 한다. +- `.vercelignore` 파일이 존재하고, 다음 항목이 포함되어 있는지 확인한다: + - `.git` + - `public/models/` (50MB 이상 대용량 파일) + +## 2. Dev 배포 (기본) + +에이전트가 배포할 때는 **항상 Dev(Preview) 배포**를 기본으로 한다. + +```powershell +# Dev(Preview) 배포 — 에이전트 기본 동작 +vercel +``` + +- 배포 완료 후 생성되는 **Preview URL**을 사용자에게 전달한다. +- Preview URL 형식: `webpilot-engine-.vercel.app` + +## 3. Live 배포 (사용자 명시 요청 시에만) + +사용자가 아래와 같은 **명시적 키워드**를 사용한 경우에만 실행한다: + +- "라이브 배포", "프로덕션 배포", "prod 배포", "--prod 배포" +- "라이브에 올려", "프로덕션에 올려" +- "실서버 배포" + +```powershell +# Live(Production) 배포 — 사용자 명시 요청 시에만 +vercel --prod +``` + +- Live URL: `web-pilot-engine.vercel.app` + +## 4. 설정 확인 (최초 실행 시) + +- **Log in**: GitHub 계정으로 로그인 (브라우저 인증) +- **Scope**: 개인 계정 또는 팀 선택 +- **Link**: No ('N') -> 새 프로젝트 생성 +- **Project Name**: `webpilot-engine` +- **Settings**: 기본값 유지 ('Y') + +## 5. 환경 변수 동기화 (필수) + +배포 후 Vercel 대시보드(Settings > Environment Variables)에서 `.env.local`의 다음 키가 등록되어 있는지 반드시 확인한다. + +- `NEXT_PUBLIC_TRIPO_API_KEY` +- `NEXT_PUBLIC_BLOCKADE_LABS_API_KEY` +- `GEMINI_API_KEY` (서버용) + +## 6. 배포 검증 + +- Vercel CLI 출력에서 배포 완료 여부를 확인한다. +- 생성된 URL(Preview 또는 Production)을 기록한다. +- **⚠️ 브라우저 직접 테스트 금지** — 사용자가 직접 확인 + +--- + +## 요약 의사결정 트리 + +``` +사용자가 "배포해" 요청 + ├─ "라이브/프로덕션/prod" 키워드 포함? + │ ├─ Yes → vercel --prod (Live 배포) + │ └─ No → vercel (Dev 배포) + └─ 에이전트 자체 판단으로 배포? + └─ 항상 vercel (Dev 배포만 허용) +``` diff --git a/src/app/page.tsx b/src/app/page.tsx index 93a7721..4cc6152 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { useSceneData } from '@/context/SceneContext'; import { GeminiService } from '@/services/GeminiService'; @@ -201,12 +201,38 @@ export default function CreatorStudioPage() { } }; + // [FIX] AI 파이프라인이 통합 스토어에 씬을 설정하면 previewNodes 자동 동기화 + const aiSceneObjects = useUnifiedStore((s) => s.aiScene.objects); + const aiSceneGenerated = useUnifiedStore((s) => s.aiScene.isGenerated); + + React.useEffect(() => { + if (aiSceneGenerated && aiSceneObjects.length > 0 && previewNodes.length === 0) { + // AI 파이프라인이 씬을 생성했지만 previewNodes가 비어있는 경우 동기화 + const nodes = aiSceneObjects.map((obj: any) => ({ + id: obj.id || obj.concept, + name: obj.name || obj.concept, + modelUrl: obj.modelUrl || obj.file_path, + position: obj.position || [0, 0, 0], + rotation: obj.rotation || [0, 0, 0], + scale: obj.scale || [1, 1, 1], + })); + setPreviewNodes(nodes as any); + setStatus('🎮 "월드 입장" 버튼을 클릭하세요!'); + setLoading(false); + console.log('[Studio] AI 파이프라인 씬 → previewNodes 동기화:', nodes.length, '개'); + } + }, [aiSceneGenerated, aiSceneObjects]); + // 생성 핸들러 const handleGenerate = async () => { setError(''); setLoading(true); setStatus(inputMode === 'image' ? '🔍 이미지 분석 중...' : '📝 시나리오 작성 중...'); + // [FIX] 이전 씬 데이터 클리어 (캐시 잔재 방지) + setPreviewNodes([]); + sessionStorage.removeItem('webpilot_ai_scene'); + // 생성 카운터 초기화 (1회 시도당 5개 제한) if (typeof window !== 'undefined') { (window as Window & { __GENERATION_COUNT?: number }).__GENERATION_COUNT = 0; @@ -325,16 +351,48 @@ export default function CreatorStudioPage() { }; // 월드 입장 (Seamless Transition) + // [FIX] 통합 스토어의 최신 AI 씬을 우선 사용 (stale 캐시 방지) const handleEnterWorld = () => { + const unifiedStore = getUnifiedStore(); const store = useGameStore.getState(); - store.setLoaded(true); - - // [FIX] game.ts 스토어에도 시나리오 데이터 동기화 - // Experience.tsx가 game.ts의 currentScenario를 사용하기 때문 const gameStore2 = useGameStore2.getState(); - if (store.scenario && store.scenario.id) { - gameStore2.loadScenario(store.scenario as any); // [FIX] 타입 호환성 (optional id vs required id) - gameStore2.setGameMode('custom'); + + // 1. 통합 스토어에서 최신 AI 씬 확인 + if (unifiedStore.aiScene.isGenerated && unifiedStore.aiScene.objects.length > 0) { + console.log('[Studio] ✅ 통합 스토어 AI 씬으로 월드 진입:', unifiedStore.aiScene.objects.length, '개 오브젝트'); + + // AI 씬 → Scenario 변환 + unifiedStore.enterAIWorld(); + const scenario = unifiedStore.convertAISceneToScenario(); + + if (scenario) { + // 레거시 스토어 동기화 + setSceneData(scenario as any); + store.setScenario(scenario as any); + store.setLoaded(true); + gameStore2.loadScenario(scenario as any); + gameStore2.setGameMode('custom'); + + // sessionStorage에 저장 (페이지 리로드 생존) + try { + sessionStorage.setItem('webpilot_ai_scene', JSON.stringify({ + scenario, + gameMode: 'custom', + aiScene: unifiedStore.aiScene, + timestamp: Date.now(), + })); + } catch (e) { + console.warn('[Studio] sessionStorage 저장 실패:', e); + } + } + } else if (store.scenario) { + // 2. 레거시 시나리오 사용 (AI 파이프라인 아닌 경우) + console.log('[Studio] 레거시 시나리오로 월드 진입'); + store.setLoaded(true); + if (store.scenario.id) { + gameStore2.loadScenario(store.scenario as any); + gameStore2.setGameMode('custom'); + } } setIsIngame(true); // 페이지 이동 없이 즉시 게임 모드 전환 diff --git a/src/services/ai-pipeline/AssetRetrievalService.ts b/src/services/ai-pipeline/AssetRetrievalService.ts index d34a833..9597a59 100644 --- a/src/services/ai-pipeline/AssetRetrievalService.ts +++ b/src/services/ai-pipeline/AssetRetrievalService.ts @@ -183,19 +183,33 @@ export const AssetRetrievalService = { }, /** - * [Phase 2.5] 파일 경로로 유니크 에셋 여부 확인 + * [Phase 2.5] 크기/카테고리 기반 유니크 에셋 자동 판단 + * + * 키워드 하드코딩 대신 AssetMetadataService의 크기 추정을 활용: + * - 높이(y) ≥ 4m → 대형 구조물 (건물, 성, 탑 등) + * - 바닥면적(x * z) ≥ 50m² → 환경/지형 에셋 + * → 씬에 같은 파일이 1개만 배치되도록 보장 */ isUniqueAssetPath: (filePath: string): boolean => { - const lowerPath = filePath.toLowerCase(); + // Procedural 에셋은 유니크 판단 제외 + if (filePath.startsWith('__PROCEDURAL__')) return false; + + // 파일명에서 에셋 이름 추출 (경로의 마지막 부분, 확장자 제거) + const fileName = filePath.split('/').pop()?.replace(/\.glb$/i, '') || ''; + if (!fileName) return false; + + // AssetMetadataService로 크기 추정 + const { AssetMetadataService } = require('@/services/AssetMetadataService'); + const size = AssetMetadataService.estimateSizeByName(fileName); - // 대형 건물/환경 에셋 패턴 - const uniquePatterns = [ - 'hogwarts', 'castle', 'grand_hall', 'hall', - 'fortress', 'palace', 'cathedral', 'temple', - 'building', 'tower', 'mansion', - ]; + // 대형 구조물: 높이 4m 이상 또는 바닥면적 50m² 이상 + const isLargeStructure = size.y >= 4 || (size.x * size.z) >= 50; + + if (isLargeStructure) { + console.log(`[AssetRetrieval] 🏗️ 유니크 에셋 감지 (크기 기반): "${fileName}" (${size.x.toFixed(1)}×${size.y.toFixed(1)}×${size.z.toFixed(1)})`); + } - return uniquePatterns.some(pattern => lowerPath.includes(pattern)); + return isLargeStructure; }, /** From babf056843d05cc15fb79808349fd541ab8e0cdf Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Fri, 13 Feb 2026 14:07:48 +0900 Subject: [PATCH 09/10] =?UTF-8?q?fix:=20character=20=EC=97=90=EC=85=8B?= =?UTF-8?q?=EC=9D=B4=20non-character=20=EA=B0=9C=EB=85=90=EC=97=90=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91=EB=90=98=EB=8A=94=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(Phase=206=20role=20=ED=95=84=ED=84=B0?= =?UTF-8?q?=EB=A7=81)\n\n-=20findBestHybridMatch=EC=97=90=20roleHint=20?= =?UTF-8?q?=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=B6=94=EA=B0=80\n-=20?= =?UTF-8?q?character=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EC=97=90?= =?UTF-8?q?=EC=85=8B=EC=9D=80=20role=EC=9D=B4=20character/npc=EC=9D=BC=20?= =?UTF-8?q?=EB=95=8C=EB=A7=8C=20=EB=A7=A4=EC=B9=AD=20=ED=97=88=EC=9A=A9\n-?= =?UTF-8?q?=20searchLocalCache=EC=97=90=20role=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=A0=84=EB=8B=AC=20(3=EA=B3=B3)\n-=20security=5Fdrone=20?= =?UTF-8?q?=E2=86=92=20HVGirl.glb=20=EA=B1=B0=EB=8C=80=20=EC=97=AC?= =?UTF-8?q?=EC=84=B1=20=EC=BA=90=EB=A6=AD=ED=84=B0=20=EC=B6=9C=ED=98=84=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/VectorSearchService.ts | 41 +++++++++++++------ .../ai-pipeline/AssetRetrievalService.ts | 14 +++---- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/services/VectorSearchService.ts b/src/services/VectorSearchService.ts index 10e2b42..3133d13 100644 --- a/src/services/VectorSearchService.ts +++ b/src/services/VectorSearchService.ts @@ -597,7 +597,9 @@ class VectorSearchServiceClass { * [Phase 3] 정확 매칭 우선 처리 추가 * [Phase 4] 시맨틱 캐시 통합 (접근법 D) */ - async findBestHybridMatch(concept: string): Promise { + async findBestHybridMatch(concept: string, roleHint?: string): Promise { + // [Phase 6] role 기반 카테고리 필터 — character 에셋이 non-character 개념에 매핑되는 것을 방지 + const isCharacterRole = roleHint && ['character', 'npc', 'hero_character'].includes(roleHint.toLowerCase()); // [Phase 4] 시맨틱 캐시 조회 먼저 시도 const cacheResult = await AssetSearchCache.lookup(concept); if (cacheResult.hit && cacheResult.value) { @@ -652,23 +654,36 @@ class VectorSearchServiceClass { } if (exactMatch && !isBlacklistedPath(exactMatch.path)) { - console.log(`[HybridSearch] 🎯 정확 매칭 발견: "${concept}" → ${exactMatch.id} (path: ${exactMatch.path})`); - return { - asset: exactMatch, - score: 1.0, - confidence: 1.0, - vectorRank: 1, - lexicalRank: 1, - rrfScore: 1.0, - matchedTerms: [concept], - }; + // [Phase 6] 정확 매칭에도 character 카테고리 필터 적용 + if (exactMatch.category === 'character' && !isCharacterRole) { + console.log(`[HybridSearch] 🚫 정확 매칭 character 필터링: ${exactMatch.id} (role: ${roleHint || 'unknown'})`); + } else { + console.log(`[HybridSearch] 🎯 정확 매칭 발견: "${concept}" → ${exactMatch.id} (path: ${exactMatch.path})`); + return { + asset: exactMatch, + score: 1.0, + confidence: 1.0, + vectorRank: 1, + lexicalRank: 1, + rrfScore: 1.0, + matchedTerms: [concept], + }; + } } // 일반 하이브리드 검색 const allResults = await this.hybridSearch(concept, 10); - // 블랙리스트 경로 제외 - const filteredResults = allResults.filter(r => !isBlacklistedPath(r.asset.path)); + // 블랙리스트 경로 제외 + [Phase 6] character 카테고리 필터링 + const filteredResults = allResults.filter(r => { + if (isBlacklistedPath(r.asset.path)) return false; + // character 카테고리 에셋은 role이 명시적으로 character/npc일 때만 허용 + if (r.asset.category === 'character' && !isCharacterRole) { + console.log(`[HybridSearch] 🚫 character 에셋 필터링: ${r.asset.id} (role: ${roleHint || 'unknown'})`); + return false; + } + return true; + }); if (filteredResults.length > 0) { const bestResult = filteredResults[0]; diff --git a/src/services/ai-pipeline/AssetRetrievalService.ts b/src/services/ai-pipeline/AssetRetrievalService.ts index 9597a59..abb9338 100644 --- a/src/services/ai-pipeline/AssetRetrievalService.ts +++ b/src/services/ai-pipeline/AssetRetrievalService.ts @@ -259,12 +259,12 @@ export const AssetRetrievalService = { // 1단계: 로컬 캐시 검색 (다중 쿼리 전략) // 1-1: 원본 concept으로 검색 - let localPath = await AssetRetrievalService.searchLocalCache(conceptName); + let localPath = await AssetRetrievalService.searchLocalCache(conceptName, concept.role); // 1-2: concept 검색 실패 시 search_keywords로 순차 검색 if (!localPath && searchKeywords.length > 0) { for (const keyword of searchKeywords) { - localPath = await AssetRetrievalService.searchLocalCache(keyword); + localPath = await AssetRetrievalService.searchLocalCache(keyword, concept.role); if (localPath) { console.log(`[AssetRetrieval] ✅ search_keywords 매칭: "${keyword}" → ${localPath}`); break; @@ -276,7 +276,7 @@ export const AssetRetrievalService = { if (!localPath) { const tokens = conceptName.split(/[_\s-]+/).filter(t => t.length > 2); for (const token of tokens) { - localPath = await AssetRetrievalService.searchLocalCache(token); + localPath = await AssetRetrievalService.searchLocalCache(token, concept.role); if (localPath) { console.log(`[AssetRetrieval] ✅ 토큰 매칭: "${token}" → ${localPath}`); break; @@ -347,11 +347,11 @@ export const AssetRetrievalService = { * 로컬 캐시에서 에셋 검색 (Phase 2: 하이브리드 검색) * - BM25 (렉시컬) + Vector (시맨틱) + RRF 융합 */ - searchLocalCache: async (concept: string): Promise => { - console.log(`[AssetRetrieval] 🔍 searchLocalCache 호출 (하이브리드 검색): "${concept}"`); + searchLocalCache: async (concept: string, roleHint?: string): Promise => { + console.log(`[AssetRetrieval] 🔍 searchLocalCache 호출 (하이브리드 검색): "${concept}"${roleHint ? ` (role: ${roleHint})` : ''}`); - // Phase 2: 하이브리드 검색 (Vector + BM25 + RRF 융합) - const result = await VectorSearchService.findBestHybridMatch(concept); + // Phase 2: 하이브리드 검색 (Vector + BM25 + RRF 융합) + Phase 6: role 필터링 + const result = await VectorSearchService.findBestHybridMatch(concept, roleHint); if (result) { console.log(`[AssetRetrieval] 🔍 HybridSearch 결과: ${result.asset?.id} (RRF: ${result.rrfScore.toFixed(4)}, confidence: ${result.confidence.toFixed(2)})`); From ba87ee0830e86f9c9cbf50eba6857628c675c14b Mon Sep 17 00:00:00 2001 From: "DESKTOP-9CCMIAM\\CTS_Sol" Date: Mon, 23 Feb 2026 15:43:07 +0900 Subject: [PATCH 10/10] =?UTF-8?q?feat(v4.0):=20Phase=203=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=20-=20=EC=9E=90=EA=B0=80=20=EC=A7=84=ED=99=94=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=B4=ED=94=84=EB=9D=BC=EC=9D=B8=20=ED=86=B5?= =?UTF-8?q?=ED=95=A9=20(12-Step=20Pipeline)\n\n-=20[Stage=207]=20PhysicsSc?= =?UTF-8?q?atteringService:=20Rapier.js=20=EB=AC=BC=EB=A6=AC=20=EC=8B=9C?= =?UTF-8?q?=EB=AE=AC=EB=A0=88=EC=9D=B4=EC=85=98=20=EA=B8=B0=EB=B0=98=20?= =?UTF-8?q?=EC=98=A4=EB=B8=8C=EC=A0=9D=ED=8A=B8=20=EC=95=88=EC=B0=A9\n-=20?= =?UTF-8?q?[Stage=208]=20PBRMaterialConverter:=20PBR=20=EC=9E=AC=EC=A7=88?= =?UTF-8?q?=20=EC=9E=90=EB=8F=99=20=EB=B3=80=ED=99=98\n-=20[Stage=209]=20V?= =?UTF-8?q?LMFeedbackService:=20Gemini=20Vision=20=EC=9E=A5=EB=A9=B4=20?= =?UTF-8?q?=EB=B6=84=EC=84=9D=20=EB=B0=8F=20=ED=92=88=EC=A7=88=20=EC=A0=90?= =?UTF-8?q?=EC=88=98=20=EC=82=B0=EC=B6=9C\n-=20[Stage=2010]=20AutoFix:=20V?= =?UTF-8?q?LM=20=ED=94=BC=EB=93=9C=EB=B0=B1=20=EA=B8=B0=EB=B0=98=20?= =?UTF-8?q?=EC=9E=90=EC=9C=A8=20=EA=B5=90=EC=A0=95=20(=EC=9C=84=EC=B9=98/?= =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=9D=BC/=EB=B6=84=EC=9C=84=EA=B8=B0)\n-=20[?= =?UTF-8?q?Stage=2011]=20NavMeshGenerationService:=20=EC=9D=B4=EB=8F=99=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=20=EC=98=81=EC=97=AD=20=EC=9E=90=EB=8F=99=20?= =?UTF-8?q?=EC=82=B0=EC=B6=9C\n-=20[Stage=2012]=20EffectComposer:=20Bloom/?= =?UTF-8?q?SSAO/Vignette=20+=20=ED=85=8C=EB=A7=88=EB=B3=84=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=AC=20=EA=B7=B8=EB=A0=88=EC=9D=B4=EB=94=A9\n-=20README.md?= =?UTF-8?q?:=20=EC=97=90=EC=85=8B=2026,926=EA=B0=9C,=2012-Step=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=B4=ED=94=84=EB=9D=BC=EC=9D=B8=20=EB=B0=98=EC=98=81=20?= =?UTF-8?q?=EC=A0=84=EB=A9=B4=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8\n-=20?= =?UTF-8?q?=EC=97=90=EC=85=8B=2025,400+=20=ED=86=B5=ED=95=A9=20=EB=B0=8F?= =?UTF-8?q?=20=EB=B9=84=EB=8F=99=EA=B8=B0=20=EB=A1=9C=EB=94=A9=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vercelignore | 10 +- README.md | 61 +- src/app/api/ai/expand-prompt/route.ts | 4 +- src/app/api/ai/quality-gate/route.ts | 79 + src/app/api/ai/unified-scene/route.ts | 31 +- src/app/api/ai/utils/gemini.ts | 79 +- src/app/api/analyze/route.ts | 102 +- src/app/api/assets/search/route.ts | 8 +- src/app/api/chat/npc/route.ts | 5 +- src/app/api/resources/match/route.ts | 12 +- src/cells/core/ReflexArc.ts | 6 +- src/components/3d/AssetLoader.tsx | 8 +- src/components/audio/AudioManager.tsx | 38 +- src/components/canvas/DynamicModel.tsx | 13 +- src/components/canvas/LayoutResolver.tsx | 10 +- src/components/canvas/SceneCanvas.tsx | 2 +- src/components/scene/GeneratedModel.tsx | 46 +- src/components/studio/PreviewCanvas.tsx | 192 +- src/config/ScaleNormalizationConfig.ts | 4 +- src/data/AssetRegistry.ts | 15077 +--------------- src/data/semanticAssets.generated.ts | 3095 ++-- src/data/semanticAssets.ts | 13 +- src/data/sfx_library.ts | 75 +- src/hooks/useBGMPlayer.ts | 5 +- src/lib/PromptExpander.ts | 6 +- src/lib/ScenePlanner.ts | 5 +- src/lib/audioManager.ts | 58 +- src/lib/geometry/OBBCollisionSystem.ts | 10 +- src/lib/schema/nsse-constraints.ts | 16 + src/lib/schema/scene.ts | 4 + src/services/AssetMetadataService.ts | 3 +- src/services/VectorSearchService.ts | 228 +- src/services/a2a/VisualCriticAgent.ts | 2 +- .../ai-pipeline/AIPipelineOrchestrator.ts | 278 +- .../ai-pipeline/AssetIntelligenceService.ts | 4 +- .../ai-pipeline/AssetRetrievalService.ts | 18 +- .../ai-pipeline/NavMeshGenerationService.ts | 104 + .../ai-pipeline/PBRMaterialConverter.ts | 87 + .../ai-pipeline/PhysicsScatteringService.ts | 110 + .../ai-pipeline/RelativeScalePolicy.ts | 4 + .../ai-pipeline/RenderValidationService.ts | 128 +- .../ai-pipeline/SemanticScaleResolver.ts | 4 + .../UnifiedSceneGenerationService.ts | 7 +- .../ai-pipeline/VLMFeedbackService.ts | 147 + src/services/judge/LLMJudgeService.ts | 6 +- src/services/search/LexicalSearchService.ts | 2 +- src/utils/autoScaleAsset.ts | 45 +- 47 files changed, 3295 insertions(+), 16956 deletions(-) create mode 100644 src/app/api/ai/quality-gate/route.ts create mode 100644 src/services/ai-pipeline/NavMeshGenerationService.ts create mode 100644 src/services/ai-pipeline/PBRMaterialConverter.ts create mode 100644 src/services/ai-pipeline/PhysicsScatteringService.ts create mode 100644 src/services/ai-pipeline/VLMFeedbackService.ts diff --git a/.vercelignore b/.vercelignore index 928a3f3..0faad4a 100644 --- a/.vercelignore +++ b/.vercelignore @@ -85,17 +85,21 @@ Thumbs.db .vercel -# Large Files (>100MB) - GitHub 제한 +# Large Files (>100MB) - Vercel 파일 크기 제한 +# 모든 대용량 3D 모델 에셋 제외 — 런타임에서 외부 CDN 또는 R2로 제공 +public/models/buildings/ +public/models/samples/ +public/models/weapons/ +public/models/characters/ public/models/dae_blacksmith_store.glb public/models/cartoon_bedroom.glb - -# Large Files (>50MB) - 배포 안정성 및 Vercel 용량 확보 public/models/cartoon_two-story_villa_low_polygon_3d_model.glb public/models/low_poly__sofa.glb public/models/onigiri.glb public/models/tyrant_king_-_tyrannosaurus.glb public/models/cc0_axe.glb public/models/angelic child 3d model.glb +public/models/_index.json .git # Large Serverless Functions (gltf-transform 라이브러리로 인해 제외) diff --git a/README.md b/README.md index 3bc1fa3..9870035 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,28 @@

WebPilot Engine + v4.0

🌍 WebPilot Engine

- 텍스트 한 줄로 완전한 3D 세계를 창조하는 AI-Native World Generator + 텍스트 한 줄로 완전한 3D 세계를 창조하는 AI-Native World Generator
+ 자가 진화형 파이프라인 · VLM 폐쇄 루프 · 물리 시뮬레이션 · AAA급 포스트 프로세싱

- "마법의 숲을 만들어줘" → AI 시나리오 구상 → 에셋 검색 → 공간 배치 → 실시간 3D 렌더링 + "마법의 숲을 만들어줘" → AI 시나리오 구상 → 에셋 검색 → 물리 배치 → VLM 비평 → 자율 교정 → 실시간 3D 렌더링

Live Demo R&D Reports CI - Assets - GLB + Assets + GLB Cells - Services + Services + Pipeline License

@@ -28,7 +31,7 @@

- 👆 "Create a cyberpunk alley" → AI가 시나리오를 분석하고 3D 월드를 실시간 생성 + 👆 "Create a cyberpunk alley" → AI가 시나리오를 분석하고 3D 월드를 실시간 생성 → VLM이 비평하고 자율 교정

@@ -46,7 +49,9 @@ WebPilot Engine은 기존 3D 씬 생성 방식의 모든 한계를 **AI 추론** | ❌ 하드코딩된 배치 규칙 | ✅ AI가 문맥에 맞는 규칙을 **동적 생성** | | ❌ 키워드 매칭 에셋 검색 | ✅ Gemini Embedding 기반 **시맨틱 벡터 검색** | | ❌ 모든 오브젝트 동일 스케일 | ✅ 각 오브젝트의 역할/맥락을 이해한 **개별 AI 추론** | -| ❌ 좌표 수동 지정 | ✅ MCTS 에너지 함수 기반 **최적 배치** + 충돌 회피 | +| ❌ 좌표 수동 지정 | ✅ MCTS 에너지 함수 기반 **최적 배치** + 물리 시뮬레이션 | +| ❌ 생성 후 수정 불가 | ✅ **VLM(Gemini Vision) 자율 비평 → 자동 교정** 폐쇄 루프 | +| ❌ 기본 렌더링 | ✅ **Bloom/SSAO/Vignette** AAA급 포스트 프로세싱 | --- @@ -135,9 +140,9 @@ graph LR --- -## 🔧 7-Step AI 파이프라인 +## 🔧 12-Step AI 파이프라인 (v4.0) -사용자 프롬프트 → 완성된 3D 씬까지 **7단계 자동 처리**: +사용자 프롬프트 → 완성된 3D 씬까지 **12단계 자동 처리** + **자가 진화 루프**: ```mermaid graph LR @@ -147,8 +152,14 @@ graph LR S3 --> S4["❹ Asset
Retrieval"] S4 --> S5["❺ Scale
Reasoning"] S5 --> S6["❻ MCTS
Placement"] - S6 --> S7["❼ Render &
Validate"] - S7 --> OUTPUT["🎮 3D 씬"] + S6 --> S7["❼ Physics
Scattering"] + S7 --> S8["❽ PBR
Materials"] + S8 --> S9["❾ VLM
Feedback"] + S9 --> S10["❿ Auto-Fix
(Closed-loop)"] + S10 --> S11["⓫ NavMesh
Generation"] + S11 --> S12["⓬ Post-
Processing"] + S12 --> OUTPUT["🎮 3D 씬"] + S10 -.->|"Score < 85"| S6 ``` | 단계 | 서비스 | 설명 | @@ -156,10 +167,15 @@ graph LR | ❶ | `PromptExpansionService` | 사용자 입력을 세분화된 씬 설명으로 확장 | | ❷ | `SpatialZoningService` | 공간을 중앙/주변/코너 영역으로 분할 | | ❸ | `AssetIntelligenceService` | 필요 에셋 추론 (역할/크기/수량/위치 힌트) | -| ❹ | `AssetRetrievalService` + `VectorSearchService` | 3,477개 에셋에서 시맨틱 벡터 검색 | +| ❹ | `AssetRetrievalService` + `VectorSearchService` | 26,926개 에셋에서 시맨틱 벡터 검색 | | ❺ | `ScaleReasoningService` + `SemanticScaleResolver` | 오브젝트별 개별 스케일 AI 추론 | | ❻ | `MCTSPlacementService` | 에너지 함수 기반 최적 배치 + BVH 충돌 회피 | -| ❼ | `RenderValidationService` + `VQALoop` | WebGL 렌더링 + VLM 품질 검증 루프 | +| ❼ | `PhysicsScatteringService` | **[v4.0]** Rapier.js 물리 시뮬레이션 기반 자연스러운 안착 | +| ❽ | `PBRMaterialConverter` | **[v4.0]** PBR 재질 자동 변환 (Metalness/Roughness) | +| ❾ | `VLMFeedbackService` | **[v4.0]** Gemini Vision 장면 분석 + 품질 점수 산출 | +| ❿ | `AutoFixEngine` | **[v4.0]** VLM 피드백 기반 자율 교정 (위치/스케일/분위기) | +| ⓫ | `NavMeshGenerationService` | **[v4.0]** 이동 가능 영역 자동 산출 + 공간 활용성 검증 | +| ⓬ | `EffectComposer` | **[v4.0]** Bloom/SSAO/Vignette + 테마별 컬러 그레이딩 | --- @@ -221,11 +237,11 @@ UnifiedStore (Slice Architecture) --- -## 📦 에셋 라이브러리 — 3,477개 +## 📦 에셋 라이브러리 — 26,926+ 개 | 유형 | 수량 | 출처 | |:-----|-----:|:-----| -| 3D 모델 (GLB) | 2,632 | SDXL + TripoSR (자체 생성 952) + CC0 | +| 3D 모델 (GLB) | 26,926 | SDXL + TripoSR (자체 생성 25,400+) + CC0 | | BGM | 20 | ElevenLabs AI | | SFX | 94 | Freesound CC0 + ElevenLabs | | Ambient | 114 | Freesound CC0 | @@ -234,7 +250,7 @@ UnifiedStore (Slice Architecture) | PBR 텍스처 | 334 | Kenney + Poly Haven CC0 | | 파티클 | 193 | Kenney CC0 | -> 📊 29개 카테고리 · 전수 감사 손상률 0% · 밀봉률 83% +> 📊 29개 카테고리 · 전수 감사 완료 · 비동기 로딩 최적화 적용 --- @@ -242,13 +258,16 @@ UnifiedStore (Slice Architecture) | 계층 | 기술 | |:-----|:-----| -| **프레임워크** | Next.js 14 (App Router) | -| **3D 엔진** | Three.js 0.170 / React Three Fiber 8 | +| **프레임워크** | Next.js 16 (App Router) | +| **3D 엔진** | Three.js 0.160 / React Three Fiber 9 | | **AI 모델** | Gemini 2.0 Flash / Pro | +| **AI 비전** | Gemini Vision (VLM 폐쇄 루프) | | **임베딩** | gemini-embedding-001 | +| **물리 엔진** | Rapier.js (Physics Scattering) | +| **포스트 프로세싱** | @react-three/postprocessing (Bloom/SSAO/Vignette) | | **상태 관리** | Zustand (UnifiedStore, Slice Pattern) | | **상태 머신** | XState 5 | -| **공간 연산** | MCTS + BVH + Poisson Disk Sampling | +| **공간 연산** | MCTS + BVH + Poisson Disk + NavMesh | | **스타일링** | TailwindCSS 3 | | **런타임 검증** | Zod (Schema Validation) | | **스토리지** | Cloudflare R2 | @@ -331,8 +350,8 @@ src/ └── config/ # ⚙️ 설정 public/ -├── models/ # 2,632 GLB (Git LFS · 29 카테고리) -│ ├── generated/ # 952개 — SDXL+TripoSR 자체 생성 +├── models/ # 26,926 GLB (Git LFS · 29 카테고리) +│ ├── generated/ # 25,400+ — SDXL+TripoSR 자체 생성 │ ├── Kenney/ # 800개 — CC0 │ ├── PolyPizza/ # 600개 — CC 인증 │ └── Quaternius/ # 200개 — CC0 diff --git a/src/app/api/ai/expand-prompt/route.ts b/src/app/api/ai/expand-prompt/route.ts index 2f2ebc0..b76b325 100644 --- a/src/app/api/ai/expand-prompt/route.ts +++ b/src/app/api/ai/expand-prompt/route.ts @@ -2,6 +2,6 @@ * Stage 1: Prompt Expansion API Route */ -import { createAIHandler } from '../utils/gemini'; +import { createAIHandler, AIModelTier } from '../utils/gemini'; -export const POST = createAIHandler('PromptExpansion'); +export const POST = createAIHandler('PromptExpansion', AIModelTier.ULTRA); diff --git a/src/app/api/ai/quality-gate/route.ts b/src/app/api/ai/quality-gate/route.ts new file mode 100644 index 0000000..f31137d --- /dev/null +++ b/src/app/api/ai/quality-gate/route.ts @@ -0,0 +1,79 @@ +/** + * /api/ai/quality-gate/route.ts + * + * Stage 7: Quality Gate API + * 배치 결과의 논리적/심미적 무결성을 비평하고 수정 제안 발행 + */ + +import { NextRequest, NextResponse } from 'next/server'; +import { callGemini, AIModelTier } from '../utils/gemini'; + +export async function POST(request: NextRequest) { + try { + const { placementResult, sceneSpec } = await request.json(); + + if (!placementResult || !sceneSpec) { + return NextResponse.json( + { error: 'placementResult와 sceneSpec이 필요합니다' }, + { status: 400 } + ); + } + + const prompt = ` +당신은 3D 씬 품질 검수관(Quality Inspector)입니다. +다음은 사용자의 요청 사항과 그에 따라 생성된 3D 오브젝트 배치 데이터입니다. + +## 사용자 요청 (Scene Specification) +${JSON.stringify(sceneSpec, null, 2)} + +## 배치 데이터 (Placement Result) +${JSON.stringify(placementResult.objects.map((o: any) => ({ + name: o.concept, + role: o.semantic_role, + pos: o.position, + scale: o.scale + })), null, 2)} + +## 작업 가이드: +1. 배치가 사용자의 의도와 일치하는지 논리적으로 검토하세요. +2. 오브젝트 간의 너무 심한 겹침이나 지면 아래 파묻힘, 하늘에 뜬 어색한 배치(부유 설정이 아닌 경우)를 찾으세요. +3. 각 노드별로 "검증 결과"와 "수정 제안"을 JSON으로 응답하세요. + +## 응답 형식 (JSON): +{ + "issues": [ + { + "object_id": "대상 ID", + "issue_type": "ground_penetration | collision | out_of_bounds | aesthetic_clutter", + "severity": "warning | error | fixed", + "description": "한글로 된 문제 설명", + "suggested_adjustment": { + "position": [x, y, z], + "scale": [sx, sy, sz] + } + } + ], + "render_ready": true/false +} + +오직 JSON만 응답하세요. +`; + + console.log('[QualityGate API] 검증 요청 수신 (Tier: FLASH)'); + + const resultText = await callGemini(prompt, AIModelTier.FLASH, { + responseMimeType: 'application/json', + temperature: 0.3, // 일관된 비평을 위해 낮은 온도로 설정 + }); + + const parsed = JSON.parse(resultText); + return NextResponse.json(parsed); + + } catch (error) { + console.error('[QualityGate API] 에러:', error); + return NextResponse.json( + { error: error instanceof Error ? error.message : '알 수 없는 오류' }, + { status: 500 } + ); + } +} diff --git a/src/app/api/ai/unified-scene/route.ts b/src/app/api/ai/unified-scene/route.ts index 577ff5f..3454175 100644 --- a/src/app/api/ai/unified-scene/route.ts +++ b/src/app/api/ai/unified-scene/route.ts @@ -6,10 +6,7 @@ */ import { NextRequest, NextResponse } from 'next/server'; -import { GoogleGenerativeAI } from '@google/generative-ai'; - -// Gemini API 클라이언트 -const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY || ''); +import { callGemini, AIModelTier } from '../utils/gemini'; export async function POST(request: NextRequest) { try { @@ -22,34 +19,22 @@ export async function POST(request: NextRequest) { ); } - console.log('[UnifiedScene API] 요청 수신:', prompt.substring(0, 100)); + console.log('[UnifiedScene API] 요청 수신 (Tier: ULTRA):', prompt.substring(0, 100)); - // Gemini 모델 호출 - const model = genAI.getGenerativeModel({ - model: 'gemini-1.5-flash', - generationConfig: { - responseMimeType: 'application/json', - temperature: 0.7, - }, + // [v3.0] ULTRA 티어(gemini-2.0-pro-exp) 모델 사용 + const resultText = await callGemini(prompt, AIModelTier.ULTRA, { + responseMimeType: 'application/json', + temperature: 0.7, }); - const result = await model.generateContent(prompt); - const response = result.response; - const text = response.text(); - // JSON 파싱 let parsed; try { - // JSON 블록 추출 (마크다운 코드 블록 처리) - const jsonMatch = text.match(/```json\s*([\s\S]*?)\s*```/) || - text.match(/```\s*([\s\S]*?)\s*```/) || - [null, text]; - const jsonStr = jsonMatch[1] || text; - parsed = JSON.parse(jsonStr.trim()); + parsed = JSON.parse(resultText); } catch (parseError) { console.error('[UnifiedScene API] JSON 파싱 실패:', parseError); return NextResponse.json( - { error: 'AI 응답 파싱 실패', raw: text }, + { error: 'AI 응답 파싱 실패', raw: resultText }, { status: 500 } ); } diff --git a/src/app/api/ai/utils/gemini.ts b/src/app/api/ai/utils/gemini.ts index e026780..a6952eb 100644 --- a/src/app/api/ai/utils/gemini.ts +++ b/src/app/api/ai/utils/gemini.ts @@ -5,7 +5,26 @@ */ import { NextRequest, NextResponse } from 'next/server'; -import { GoogleGenerativeAI } from '@google/generative-ai'; +import { GoogleGenerativeAI, Part } from '@google/generative-ai'; + +/** + * AI 모델 티어 정의 + */ +export enum AIModelTier { + ULTRA = 'gemini-2.0-pro-exp', // 최고 지능 (전략/평가) + PRO = 'gemini-2.0-pro', // 고지능 (비평/심층 분석) + FLASH = 'gemini-2.0-flash', // 고속 (일반 배치/채팅/이미지 분석) + LITE = 'gemini-1.5-flash', // 경량 (단순 처리) + EMBEDDING = 'text-embedding-004' // 임베딩 +} + +/** + * 티어별 모델 ID 반환 (환경 변수 우선) + */ +export function getModelForTier(tier: AIModelTier): string { + const envKey = `MODEL_${tier.replace(/-/g, '_').toUpperCase()}`; + return process.env[envKey] || tier; +} // Gemini 클라이언트 초기화 const getGeminiClient = () => { @@ -17,13 +36,33 @@ const getGeminiClient = () => { }; /** - * Gemini 호출 공통 핸들러 + * Gemini 호출 공통 핸들러 (텍스트 + 이미지 지원) */ -export async function callGemini(prompt: string, model: string = 'gemini-2.0-flash'): Promise { +export async function callGemini( + prompt: string, + tier: AIModelTier = AIModelTier.FLASH, + options: { + temperature?: number; + responseMimeType?: string; + imageParts?: Part[]; // 멀티모달 지원 + } = {} +): Promise { const genAI = getGeminiClient(); - const generativeModel = genAI.getGenerativeModel({ model }); + const modelId = getModelForTier(tier); + const generativeModel = genAI.getGenerativeModel({ + model: modelId, + generationConfig: { + temperature: options.temperature ?? 1.0, + responseMimeType: options.responseMimeType + } + }); - const result = await generativeModel.generateContent(prompt); + // 텍스트와 이미지 파트 결합 + const content = options.imageParts + ? [prompt, ...options.imageParts] + : [prompt]; + + const result = await generativeModel.generateContent(content); const response = await result.response; const text = response.text(); @@ -39,10 +78,15 @@ export async function callGemini(prompt: string, model: string = 'gemini-2.0-fla /** * AI 프롬프트 처리 API Route 팩토리 */ -export function createAIHandler(stageName: string) { +export function createAIHandler(stageName: string, defaultTier: AIModelTier = AIModelTier.FLASH) { return async function handler(request: NextRequest) { try { - const { prompt } = await request.json(); + const body = await request.json(); + const { + prompt, + tier = defaultTier, + images = [] // base64 이미지 배열 지원 + } = body; if (!prompt) { return NextResponse.json( @@ -51,10 +95,27 @@ export function createAIHandler(stageName: string) { ); } - console.log(`[API/${stageName}] 요청 처리 중...`); + // 이미지 파트 생성 (멀티모달) + const imageParts: Part[] = images.map((base64: string) => { + // 'data:image/jpeg;base64,' 등의 접두사 제거 + const cleanBase64 = base64.includes('base64,') + ? base64.split('base64,')[1] + : base64; + + return { + inlineData: { + data: cleanBase64, + mimeType: 'image/jpeg' + } + }; + }); + + console.log(`[API/${stageName}] 요청 처리 중... (Tier: ${tier}, Images: ${imageParts.length})`); const startTime = Date.now(); - const result = await callGemini(prompt); + const result = await callGemini(prompt, tier as AIModelTier, { + imageParts: imageParts.length > 0 ? imageParts : undefined + }); const duration = Date.now() - startTime; console.log(`[API/${stageName}] 완료 (${duration}ms)`); diff --git a/src/app/api/analyze/route.ts b/src/app/api/analyze/route.ts index 27cbba2..2d29150 100644 --- a/src/app/api/analyze/route.ts +++ b/src/app/api/analyze/route.ts @@ -1,11 +1,7 @@ import { NextRequest, NextResponse } from 'next/server'; -import { GoogleGenerativeAI } from '@google/generative-ai'; -import { ScenarioSchema } from '@/types/schema'; import { prisma } from '@/lib/prisma'; import { formatErrorResponse } from '@/lib/errorMessages'; - -// Gemini API Client Init -const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY || ''); +import { callGemini, AIModelTier } from '../ai/utils/gemini'; export async function POST(req: NextRequest) { try { @@ -19,77 +15,39 @@ export async function POST(req: NextRequest) { }, { status: 400 }); } - const apiKey = process.env.GEMINI_API_KEY || ''; - if (!apiKey) { - return NextResponse.json({ - error: '🔑 API 키가 설정되지 않았습니다.', - message: 'Gemini API 키가 누락되었습니다.', - suggestion: '.env.local 파일에 GEMINI_API_KEY를 추가해 주세요.' - }, { status: 500 }); - } - console.log('Gemini API Key loaded:', `Yes (${apiKey.substring(0, 4)}...)`); - - const model = genAI.getGenerativeModel({ - model: "gemini-2.0-flash", - generationConfig: { - responseMimeType: "application/json", - } - }); - // [Feature] Genre-Specific Deep System Prompts (Visual Literalism) - // Minimizes hallucinations by enforcing strict visual constraints. const GENRE_PROMPTS: Record = { fantasy: ` **CRITICAL ROLE: FANTASY ENVIRONMENT ARTIST** OBJECTIVE: Create a magical, medieval fantasy scene. -VISUAL STYLE: -- Materials: Stone, wood, gold, crystal, parchment. -- Lighting: Warm candlelight, magical glow, sunlight through leaves. -- Atmosphere: Mystical, ancient, wondrous. -MANDATORY ELEMENTS: If the image is abstract, interpret it as a magical artifact or location. +VISUAL STYLE: Stone, wood, gold, crystal, parchment. Warm candlelight, magical glow. `, scifi: ` **CRITICAL ROLE: SCI-FI CONCEPT ARTIST** OBJECTIVE: Create a futuristic, high-tech sci-fi scene. -VISUAL STYLE: -- Materials: Metal, glass, neon, synthetics, holograms. -- Lighting: Cool blue/cyan, artificial strips, stark contrast. -- Atmosphere: Sterile, advanced, industrial or cyberpunk. -MANDATORY ELEMENTS: Interpret objects as machinery, terminals, or space-age tech. +VISUAL STYLE: Metal, glass, neon, synthetics. Cool blue/cyan, artificial strips. `, horror: ` **CRITICAL ROLE: HORROR LEVEL DESIGNER** OBJECTIVE: Create a terrifying, abandoned horror scene. -VISUAL STYLE: -- Materials: Rusted metal, rotting wood, stained fabric, grime. -- Lighting: Dim, flickering, heavy shadows, cold flashlight beam. -- Atmosphere: Oppressive, dangerous, abandoned. -MANDATORY ELEMENTS: Highlight decay, danger, and clues. +VISUAL STYLE: Rusted metal, rotting wood, stained fabric, grime. Dim, flickering lighting. `, mystery: ` **CRITICAL ROLE: ESCAPE ROOM DESIGNER** OBJECTIVE: Create a mysterious puzzle room full of secrets. -VISUAL STYLE: -- Materials: Polished wood, brass, velvet, old paper. -- Lighting: Dim but focused, noir style, dusty rays. -- Atmosphere: Intriguing, secretive, silent. -MANDATORY ELEMENTS: Focus on interactable objects, keys, and codes. +VISUAL STYLE: Polished wood, brass, velvet, old paper. Dim but focused lighting. `, modern: ` **CRITICAL ROLE: INTERIOR DESIGNER** OBJECTIVE: Create a realistic modern space. -VISUAL STYLE: -- Materials: Concrete, fabric, clean wood, glass. -- Lighting: Natural daylight, soft ambient. -- Atmosphere: Clean, functional, comfortable. +VISUAL STYLE: Concrete, fabric, clean wood, glass. Natural daylight. ` }; - // [Feature] Game Type Logic const GAME_TYPE_INSTRUCTIONS: Record = { - escape: "**GAME MODE: ESCAPE ROOM**\n- Focus on hidden keys, locked containers, and puzzles.\n- Objects should be 'interactable' and contain clues.", - roleplay: "**GAME MODE: STORY RPG**\n- Focus on environmental storytelling, lore, and atmosphere.\n- Objects should reveal history or character backing.", - casual: "**GAME MODE: CASUAL VIEWING**\n- Focus on aesthetics and comfort.\n- Objects should be decorative and fun to look at." + escape: "**GAME MODE: ESCAPE ROOM**\n- Focus on hidden keys, locked containers, and puzzles.", + roleplay: "**GAME MODE: STORY RPG**\n- Focus on environmental storytelling, lore, and atmosphere.", + casual: "**GAME MODE: CASUAL VIEWING**\n- Focus on aesthetics and comfort." }; const selectedGenrePrompt = GENRE_PROMPTS[genre?.toLowerCase() || 'modern'] || GENRE_PROMPTS['modern']; @@ -102,11 +60,10 @@ VISUAL STYLE: **TASK:** Analyze the provided image and generate a 3D scenario JSON. - **CONSTRAINTS:** **CONSTRAINTS:** 1. **User Prompt:** "${prompt || 'None'}" - Prioritize this. - 2. **Objects:** Identify **10-15** physical objects. Mix **Large Furniture** (tables, shelves) with **Small Clutter** (books, tools). - 3. **Relationships (CRITICAL):** You MUST specify \`relationships\` for all small items. E.g., 'book' MUST be \`on_top_of\` 'table'. Do NOT leave small items floating. + 2. **Objects:** Identify **10-15** physical objects. + 3. **Relationships (CRITICAL):** You MUST specify \`relationships\` for all small items. E.g., 'book' MUST be \`on_top_of\` 'table'. 4. **Root Property:** The JSON root must contain \`nodes\` array. **OUTPUT FORMAT (JSON ONLY):** @@ -123,39 +80,33 @@ VISUAL STYLE: "relationships": [ { "targetId": "obj_2", "type": "on_top_of" } ], - "tags": { - "style": "realistic", - "material": "wood", - "era": "modern", - "mood": "neutral" - } + "tags": { "style": "realistic", "material": "wood", "era": "modern", "mood": "neutral" } } ] } `; - // Handle Base64 image - const mimeType = image.match(/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/)?.[1] || 'image/jpeg'; + // 이미지 처리 (Base64) + const cleanBase64 = image.includes('base64,') ? image.split('base64,')[1] : image; const imagePart = { inlineData: { - data: image.split(',')[1] || image, - mimeType: mimeType, - }, + data: cleanBase64, + mimeType: 'image/jpeg' + } }; - const result = await model.generateContent([systemPrompt, imagePart]); - const responseText = result.response.text(); - - // [FIX] Robust JSON extraction - const cleanedText = responseText.replace(/```json/g, '').replace(/```/g, '').trim(); - - console.log('[Analyze] Raw Response:', cleanedText.substring(0, 100) + '...'); + // 통합 유틸리티 호출 (FLASH 티어 적용) + console.log('[Analyze] Gemini 호출 중 (FLASH)...'); + const resultText = await callGemini(systemPrompt, AIModelTier.FLASH, { + responseMimeType: "application/json", + imageParts: [imagePart] + }); let scenarioData; try { - scenarioData = JSON.parse(cleanedText); + scenarioData = JSON.parse(resultText); } catch (parseError) { - console.error("JSON Parse Error:", parseError, "Response:", responseText); + console.error("JSON Parse Error:", parseError, "Response:", resultText); throw new Error("Gemini response was not valid JSON"); } @@ -167,7 +118,6 @@ VISUAL STYLE: update: { count: { increment: 1 } }, create: { date: today, provider: 'gemini', count: 1 } }); - console.log('[API] Gemini Usage Logged: +1'); } catch (dbErr) { console.warn("Usage logging failed:", dbErr); } @@ -175,7 +125,7 @@ VISUAL STYLE: return NextResponse.json(scenarioData); } catch (error: any) { - console.error('Gemini API Error:', error); + console.error('Analyze API Error:', error); const userError = formatErrorResponse(error, 'gemini'); return NextResponse.json(userError, { status: 500 }); } diff --git a/src/app/api/assets/search/route.ts b/src/app/api/assets/search/route.ts index dd73cdb..2354dfc 100644 --- a/src/app/api/assets/search/route.ts +++ b/src/app/api/assets/search/route.ts @@ -28,7 +28,7 @@ export async function GET(request: Request) { try { console.log(`[PolyPizza] Searching for: ${query}`); - const response = await fetch(`${POLY_PIZZA_API_URL}?q=${encodeURIComponent(query)}&format=gltf&limit=${limit}`, { + const response = await fetch(`${POLY_PIZZA_API_URL}?q=${encodeURIComponent(query)}&format=gltf&limit=${limit}&license=cc0`, { headers: { 'X-Auth-Token': apiKey } @@ -58,6 +58,10 @@ export async function GET(request: Request) { } catch (error) { console.error('[API] Poly Pizza Search Failed:', error); - return NextResponse.json({ success: false, error: 'External API Error' }, { status: 500 }); + console.error('[API] Poly Pizza Search Failed:', error instanceof Error ? error.message : String(error)); + return NextResponse.json({ + success: false, + error: error instanceof Error ? error.message : 'External API Error' + }, { status: 500 }); } } diff --git a/src/app/api/chat/npc/route.ts b/src/app/api/chat/npc/route.ts index 2ad3364..4e8aa2b 100644 --- a/src/app/api/chat/npc/route.ts +++ b/src/app/api/chat/npc/route.ts @@ -64,8 +64,11 @@ PROCESS: const typePrompt = GAMETYPE_INSTRUCTIONS[gameType?.toLowerCase()] || GAMETYPE_INSTRUCTIONS['escape']; // 2. Select Model (Gemini 2.0 Flash) + const { getModelForTier, AIModelTier } = require('../utils/gemini'); + const modelId = getModelForTier(AIModelTier.FLASH); + const model = genAI.getGenerativeModel({ - model: 'gemini-2.0-flash', + model: modelId, generationConfig: { responseMimeType: "application/json" // Force JSON output }, diff --git a/src/app/api/resources/match/route.ts b/src/app/api/resources/match/route.ts index 9676faa..03a8b7e 100644 --- a/src/app/api/resources/match/route.ts +++ b/src/app/api/resources/match/route.ts @@ -83,11 +83,13 @@ export async function POST(request: Request) { } } - // 모든 레이어 매칭 실패 - return NextResponse.json( - { error: '매칭 결과 없음', description }, - { status: 404 } - ); + // 모든 레이어 매칭 실패 - 404 대신 200(none) 반환하여 로그 노이즈 제거 + return NextResponse.json({ + type: 'none', + source: 'none', + message: '적절한 매칭 결과를 찾을 수 없습니다.', + description + }, { status: 200 }); } catch (error) { console.error('[API] Resource Match Error:', error); return NextResponse.json( diff --git a/src/cells/core/ReflexArc.ts b/src/cells/core/ReflexArc.ts index df4f935..b3885c1 100644 --- a/src/cells/core/ReflexArc.ts +++ b/src/cells/core/ReflexArc.ts @@ -29,11 +29,11 @@ import { import type { ReflexResult, PlacedObject } from '../types'; // ── 반사 신경 상수 ── -const MAX_NUDGE_ATTEMPTS = 3; // MTV Nudge 최대 시도 횟수 +const MAX_NUDGE_ATTEMPTS = 5; // MTV Nudge 최대 시도 횟수 상향 (3->5) const MAX_SHRINK_ITERATIONS = 5; // 스케일 축소 최대 반복 const SHRINK_FACTOR = 0.9; // 축소 비율 (10% 감소) -const MIN_NUDGE_MARGIN = 0.05; // 최소 Nudge 마진 (5cm) -const NUDGE_MARGIN_RATIO = 0.1; // 오브젝트 크기 대비 마진 비율 (10%) +const MIN_NUDGE_MARGIN = 0.08; // 최소 Nudge 마진 상향 (5cm -> 8cm) +const NUDGE_MARGIN_RATIO = 0.12; // 오브젝트 크기 대비 마진 비율 상향 (10% -> 12%) /** * ReflexArc — 척수 반사 신경 시스템 diff --git a/src/components/3d/AssetLoader.tsx b/src/components/3d/AssetLoader.tsx index b7b73ec..d1128c6 100644 --- a/src/components/3d/AssetLoader.tsx +++ b/src/components/3d/AssetLoader.tsx @@ -330,7 +330,7 @@ const Content = React.memo(({ modelUrl, fallback, isGenerating, scale, onSelect, rotation={rotation} scale={scale} type={(description.toLowerCase().match(/(room|hall|castle|dungeon|environment)/) || type === 'static_mesh' || description.includes('hat')) ? "fixed" : "dynamic"} - colliders={description.toLowerCase().match(/(room|hall|castle|dungeon)/) ? "trimesh" : "cuboid"} + colliders={description.toLowerCase().match(/(room|hall|castle|dungeon)/) ? "trimesh" : "hull"} userData={{ isAssetRoot: true }} > ; } diff --git a/src/components/audio/AudioManager.tsx b/src/components/audio/AudioManager.tsx index 08b932a..ef27601 100644 --- a/src/components/audio/AudioManager.tsx +++ b/src/components/audio/AudioManager.tsx @@ -34,14 +34,30 @@ export default function AudioManagerComponent() { } }, [bgmUrl, currentGenre]); - // [Narration Logic - Keeping as HTMLAudio for now] + // [Narration Logic - Memory Leak Prevention] useEffect(() => { - if (!narrationRef.current) narrationRef.current = new Audio(); + if (!narrationRef.current) { + narrationRef.current = new Audio(); + } + + const audio = narrationRef.current; if (narrationUrl) { - narrationRef.current.src = narrationUrl; - narrationRef.current.play().catch(e => console.warn("Narration Play error:", e)); + audio.pause(); + audio.src = narrationUrl; + audio.load(); // 명시적 로드 + audio.play().catch(e => console.warn("[Audio] Narration Play error:", e)); } + + // 컴포넌트 언마운트 시 또는 URL 변경 전 정리 + return () => { + if (audio) { + audio.pause(); + audio.src = ''; + audio.removeAttribute('src'); // DOM 단계에서 리소스 확실히 제거 + audio.load(); // 빈 상태로 로드하여 스트림 해제 + } + }; }, [narrationUrl]); // [Sync Volume & Mute] @@ -49,19 +65,17 @@ export default function AudioManagerComponent() { // Sync GameStore volume to Howler audioManager.setVolume(gameAudio.volume); - if (gameAudio.isMuted !== audioManager.toggleMute()) { - // Sync mute state if needed, but toggleMute toggles. - // Better to set explicit mute if API supported, but for now we trust the store is source of truth. - // Actually toggleMute returns new state. - // Let's rely on setVolume(0) for mute or fix AudioManger to have setMute. - // For now, let's just use volume. - if (gameAudio.isMuted) audioManager.setVolume(0); - else audioManager.setVolume(gameAudio.volume); + // Mute 처리: Howler.mute() 대신 볼륨 0 처리로 더 확실하게 제어 (Howler pool 이슈 대응) + if (gameAudio.isMuted) { + audioManager.setVolume(0); + } else { + audioManager.setVolume(gameAudio.volume); } // Also control Narration volume if (narrationRef.current) { narrationRef.current.volume = gameAudio.isMuted ? 0 : audioStoreVolume.narration; + narrationRef.current.muted = gameAudio.isMuted; } }, [gameAudio.volume, gameAudio.isMuted, audioStoreVolume.narration]); diff --git a/src/components/canvas/DynamicModel.tsx b/src/components/canvas/DynamicModel.tsx index 56c010b..34b3949 100644 --- a/src/components/canvas/DynamicModel.tsx +++ b/src/components/canvas/DynamicModel.tsx @@ -274,8 +274,19 @@ function LoadedModel({ ); } + // [v3.4 FIX] 구조물 에셋에 대해 더 정밀한 콜라이더(trimesh) 자동 결정 + const effectiveCollider = useMemo(() => { + if (colliderType) return colliderType; + const lowerPath = filePath.toLowerCase(); + if (lowerPath.includes('room') || lowerPath.includes('hall') || + lowerPath.includes('dungeon') || lowerPath.includes('interior')) { + return 'trimesh'; + } + return 'hull'; // 기본값 (기존 cuboid보다 정밀함) + }, [colliderType, filePath]); + return ( - + void; disableCollider?: boolean; + colliderType?: 'hull' | 'cuboid' | 'trimesh' | false; }) => { // [FIX] 정적 장식 오브젝트는 RigidBody 없이 렌더링 (플레이어 가두기 방지) if (disableCollider) { @@ -85,7 +87,7 @@ const DirectModelLoader = ({ ); } return ( - + { e.stopPropagation(); onClick?.(); }} /> @@ -263,7 +265,9 @@ const SceneNodeRenderer = ({ node, theme }: { node: SceneNode, theme: string }) position={position} rotation={rotation} scale={scale} - disableCollider={node.type === 'static_mesh'} + // [v3.4 PERFECTION] 성능 최적화: 기본을 hull로 하고, 대형 건축물만 선별적으로 trimesh 적용 + colliderType={(node as any).colliderType || (node.type === 'static_mesh' ? 'hull' : 'cuboid')} + disableCollider={false} onClick={() => { if (node.type === 'interactive_prop' || node.type === 'npc') { console.log(`[Interaction] Object Clicked: ${node.id}`); @@ -287,7 +291,7 @@ const SceneNodeRenderer = ({ node, theme }: { node: SceneNode, theme: string }) type={node.type} theme={theme} tags={node.tags} - colliderType={node.type === 'static_mesh' ? false : (node as unknown as { colliderType?: 'hull' | 'cuboid' | 'trimesh' | false }).colliderType} + colliderType={(node as any).colliderType !== undefined ? (node as any).colliderType : 'hull'} onClick={() => { if (node.type === 'interactive_prop' || node.type === 'npc') { console.log(`[Interaction] Object Clicked: ${node.id}`); diff --git a/src/components/canvas/SceneCanvas.tsx b/src/components/canvas/SceneCanvas.tsx index f031935..78a529f 100644 --- a/src/components/canvas/SceneCanvas.tsx +++ b/src/components/canvas/SceneCanvas.tsx @@ -88,7 +88,7 @@ export default function SceneCanvas({ children, cameraMode = 'follow' }: SceneCa {/* Physics World */} - + {/* The Main Scene Content goes here. Usually or specific scene nodes. diff --git a/src/components/scene/GeneratedModel.tsx b/src/components/scene/GeneratedModel.tsx index 7d74869..9763c21 100644 --- a/src/components/scene/GeneratedModel.tsx +++ b/src/components/scene/GeneratedModel.tsx @@ -4,7 +4,7 @@ import { useEffect, useState, useRef } from 'react'; import * as THREE from 'three'; import { useMachine } from '@xstate/react'; import { RigidBody, CuboidCollider, BallCollider } from '@react-three/rapier'; -import { useGameStore } from '@/store/useGameStore'; +import { useGameStore } from '@/store/game'; import { useInteraction } from '@/components/interaction/InteractionManager'; import { objectMachine } from '@/machines/objectMachine'; import { useObjectStore } from '@/store/useObjectStore'; @@ -24,6 +24,7 @@ interface GeneratedModelProps { semanticName: string; // Debug Friendly Name prompt: string; initialPosition: [number, number, number]; + initialScale?: [number, number, number]; // [v3.5] 물리 추론용 스케일 initialRotation?: [number, number, number]; // Y축 회전 (그리드 배치 시 중앙 방향) spatialDesc: string; modelUrl?: string; // [FIX] Add modelUrl prop @@ -37,7 +38,16 @@ interface GeneratedModelProps { * - [New] Auto-Rigging: 절차적 애니메이션 적용 * - [New] Grid Layout: 그리드 기반 자동 배치 및 회전 */ -export default function GeneratedModel({ id, semanticName, prompt, initialPosition, initialScale = [1, 1, 1], initialRotation = [0, 0, 0], spatialDesc, modelUrl }: GeneratedModelProps & { initialScale?: [number, number, number] }) { +export default function GeneratedModel({ + id, + semanticName, + prompt, + initialPosition, + initialScale = [1, 1, 1], + initialRotation = [0, 0, 0], + spatialDesc, + modelUrl +}: GeneratedModelProps) { const groupRef = useRef(null); const [isLoaded, setIsLoaded] = useState(false); @@ -100,16 +110,31 @@ export default function GeneratedModel({ id, semanticName, prompt, initialPositi if (!isClient) return null; + // [v3.4 PERFECTION] 물리 유형 및 고정 여부 동적 결정 + // 1. 방, 지형, 바닥은 항상 fixed(고정) + const isStaticBase = isRoom || initialScale[0] > 10 || initialScale[2] > 10; + + // 2. 콜라이더 타입 결정 + let colliderType: 'trimesh' | 'hull' | 'cuboid' = (physicsProps.collider as any) || 'cuboid'; + if (isRoom) colliderType = 'trimesh'; + else if (initialScale[0] > 5) colliderType = 'hull'; // 거대 구조물은 hull + else colliderType = 'cuboid'; // 일반 소품은 성능을 위해 cuboid + return ( - {/* Explicit Colliders for Props Only */} - {!isRoom && ( - physicsProps.collider === 'ball' ? ( - - ) : ( - - ) - )} - { diff --git a/src/components/studio/PreviewCanvas.tsx b/src/components/studio/PreviewCanvas.tsx index 52a4cf4..25f37aa 100644 --- a/src/components/studio/PreviewCanvas.tsx +++ b/src/components/studio/PreviewCanvas.tsx @@ -18,10 +18,15 @@ import { useSafeGLTF } from '@/hooks/useSafeGLTF'; import * as THREE from 'three'; import { SceneNode, SemanticRole } from '@/lib/schema/scene'; import { autoScaleAssetSync, autoScaleAssetSemantic, registerContainerForScaling } from '@/utils/autoScaleAsset'; +import { PhysicsInferenceQueue } from '@/services/PhysicsInferenceQueue'; +import { PBRMaterialConverter } from '@/services/ai-pipeline/PBRMaterialConverter'; +import { UnifiedSceneNode } from '@/services/ai-pipeline/UnifiedSceneGenerationService'; import { SemanticScaleResolver, createSemanticScaleResolver } from '@/services/ai-pipeline/SemanticScaleResolver'; import ObjectInfoPopup from './ObjectInfoPopup'; import ParticleSystem from '@/components/effects/ParticleSystem'; import BGMControlButton from '@/components/ui/BGMControlButton'; +import { EffectComposer, Bloom, Vignette, SSAO, BrightnessContrast, HueSaturation } from '@react-three/postprocessing'; +import { BlendFunction } from 'postprocessing'; @@ -93,6 +98,78 @@ function ExposureController() { return null; } +/** + * WebGLMonitor: 컨텍스트 유실 감시 및 자동 복구 유도 + */ +function WebGLMonitor() { + const { gl } = useThree(); + + useEffect(() => { + const canvas = gl.domElement; + + const handleContextLost = (e: Event) => { + e.preventDefault(); + console.error('[PreviewCanvas] 🚨 WebGL Context Lost! GPU 메모리 초과 또는 드라이버 크래시 의심.'); + window.dispatchEvent(new CustomEvent('webglStatus', { detail: { status: 'lost' } })); + }; + + const handleContextRestored = () => { + console.log('[PreviewCanvas] ✨ WebGL Context Restored. 씬 재구성 중...'); + window.location.reload(); // 단순 복구보다는 페이지 새로고침이 안전 + }; + + canvas.addEventListener('webglcontextlost', handleContextLost, false); + canvas.addEventListener('webglcontextrestored', handleContextRestored, false); + + return () => { + canvas.removeEventListener('webglcontextlost', handleContextLost); + canvas.removeEventListener('webglcontextrestored', handleContextRestored); + }; + }, [gl]); + + return null; +} + +/** + * CaptureScene: 외부 요청 시 현재 캔버스를 캡처하여 전달 (v4.0 MACR 기반) + */ +function CaptureScene() { + const { gl, scene, camera } = useThree(); + + useEffect(() => { + const handleCapture = (e: Event) => { + const customEvent = e as CustomEvent; + const { requestId, callback } = customEvent.detail; + + try { + // 1. 강제 렌더링 (현재 프레임 보장) + gl.render(scene, camera); + + // 2. Base64 추출 (WebP 권장) + const dataUrl = gl.domElement.toDataURL('image/webp', 0.8); + + console.log(`[CaptureScene] 📸 캡처 완료 (requestId: ${requestId})`); + + // 3. 콜백 실행 또는 이벤트 응답 + if (callback) callback(dataUrl); + window.dispatchEvent(new CustomEvent(`captureResponse_${requestId}`, { + detail: { dataUrl, success: true } + })); + } catch (err) { + console.error('[CaptureScene] ❌ 캡처 실패:', err); + window.dispatchEvent(new CustomEvent(`captureResponse_${requestId}`, { + detail: { success: false, error: (err as Error).message } + })); + } + }; + + window.addEventListener('requestSceneCapture', handleCapture); + return () => window.removeEventListener('requestSceneCapture', handleCapture); + }, [gl, scene, camera]); + + return null; +} + interface PreviewCanvasProps { nodes: SceneNode[]; @@ -218,9 +295,11 @@ function PreviewNode({ node }: { node: SceneNode }) { return; } - // 1단계: 로컬 에셋 검색 (AssetRegistry - 키워드 매칭) + // 1단계: 로컬 에셋 검색 (스킵 - v3.4 Fix 메모리 최적화) + // [v3.4 Fix] 클라이언트 사이드 AssetRegistry 로드 방지를 위해 로컬 검색을 최소화하거나 스킵함. + /* const { searchAssets } = await import('@/data/AssetRegistry'); - const matches = searchAssets(searchKey); + const matches = await searchAssets(searchKey); if (matches.length > 0) { const bestMatch = matches[0]; @@ -229,6 +308,7 @@ function PreviewNode({ node }: { node: SceneNode }) { setSearchAttempted(true); return; } + */ // 2단계: API 폴백 (DB 기반 검색 - 2400+ 에셋) // type: 'asset' 필수 — API 라우트가 타입별 분기 처리 @@ -472,6 +552,34 @@ function GLBModelInner({ path, position, rotation, scale, matcapUrl, onError }: return finalScale; }, [scene, scale, path]); + // [Phase 3.3] 리소스 해제 강화 (Memory Leak & WebGL Context Loss 방지) + useEffect(() => { + return () => { + if (clonedScene) { + console.log(`[PreviewCanvas] 🧹 리소스 정밀 해제: ${path.split('/').pop()}`); + clonedScene.traverse((obj: any) => { + if (obj.isMesh) { + // Geometry 해제 + if (obj.geometry) obj.geometry.dispose(); + + // Material 및 Texture 해제 + const materials = Array.isArray(obj.material) ? obj.material : [obj.material]; + materials.forEach((m: any) => { + if (!m) return; + // 텍스처 맵 전수 조사 및 해제 + Object.keys(m).forEach(key => { + if (m[key] && m[key].isTexture) { + m[key].dispose(); + } + }); + m.dispose(); + }); + } + }); + } + }; + }, [clonedScene, path]); + // GLB 메타데이터에서 라이팅 설정 확인 및 자동 적용 useEffect(() => { if (!scene) { @@ -548,6 +656,19 @@ function GLBModelInner({ path, position, rotation, scale, matcapUrl, onError }: } }, [scene, userData, gltf, path, onError, setExposure, setMetadata]); + // [v4.0] PBR 재질 자동 변환 (Premium Visuals) + useEffect(() => { + if (!clonedScene) return; + + // 1. 시맨틱 역할(SemanticRole) 추출 + const semanticRole = (userData as any)?.semanticRole || (userData as any)?.category || 'prop'; + + // 2. PBR 변환 및 물성 최적화 적용 + PBRMaterialConverter.applyByRole(clonedScene, semanticRole); + + console.log(`[GLBModelInner] 💎 PBR 변환 적용됨 (${semanticRole}): ${path.split('/').pop()}`); + }, [clonedScene, userData, path]); + // [Matcap Integration] matcap 텍스처 적용 useEffect(() => { @@ -624,15 +745,18 @@ function PreviewNodes({ nodes, prompt }: { nodes: SceneNode[], prompt?: string } async function matchEnvironmentFromPrompt() { if (!prompt) return; + // [v3.4 Fix] 환경 에셋 매칭도 서버 API 또는 사전에 필터링된 데이터만 사용하도록 유도 + // 여기서는 일단 직접적인 registry 검색을 주석 처리하여 메모리 세이브 + /* const { searchAssets } = await import('@/data/AssetRegistry'); - const matches = searchAssets(prompt); + const matches = await searchAssets(prompt); const envMatch = matches.find(m => m.category === 'environment'); if (envMatch) { - // 환경 매칭은 한 번만 로그 console.log(`[PreviewNodes] 🌍 환경 에셋 로드: "${prompt}" → ${envMatch.path}`); setDirectEnvironmentMatch(envMatch.path); } + */ } matchEnvironmentFromPrompt(); }, [prompt]); @@ -806,22 +930,16 @@ export default function PreviewCanvas({ nodes, isGenerating, isEmpty, prompt }: shadows gl={{ toneMappingExposure: exposureValue, - antialias: false, // [Phase 5] WebGL 메모리 절약 - powerPreference: 'default', // GPU 전력/메모리 균형 + antialias: true, + powerPreference: 'high-performance', failIfMajorPerformanceCaveat: false, - }} - onCreated={({ gl }) => { - // [Phase 5] WebGL Context Lost/Restore 핸들러 - const canvas = gl.domElement; - canvas.addEventListener('webglcontextlost', (e) => { - e.preventDefault(); - console.warn('[WebGL] ⚠️ Context Lost - 자동 복구 시도...'); - }); - canvas.addEventListener('webglcontextrestored', () => { - console.log('[WebGL] ✅ Context Restored'); - }); + stencil: false, + depth: true, + preserveDrawingBuffer: true, // v4.0 캡처 기능을 위해 true로 설정 }} > + + {/* 동적 Exposure 업데이트 */} @@ -879,6 +997,46 @@ export default function PreviewCanvas({ nodes, isGenerating, isEmpty, prompt }: enableRotate={true} maxPolarAngle={Math.PI / 2} /> + + {/* [Phase 4] Premium Post-processing (Stage 12) */} + + {[ + /* 1. Bloom (빛 번짐) */ + aiPostProcessing?.bloom ? ( + + ) : null, + + /* 2. Vignette (외곽 어두움) */ + aiPostProcessing?.vignette ? ( + + ) : null, + + /* 3. SSAO (기본 앰비언트 오클루전) */ + , + + /* 4. Color Grading */ + aiPostProcessing?.colorGrading === 'warm' ? ( + + ) : null, + aiPostProcessing?.colorGrading === 'cyberpunk' ? ( + + ) : null + ].filter((c): c is React.ReactElement => c !== null)} + diff --git a/src/config/ScaleNormalizationConfig.ts b/src/config/ScaleNormalizationConfig.ts index 8b2e8d7..6aa4162 100644 --- a/src/config/ScaleNormalizationConfig.ts +++ b/src/config/ScaleNormalizationConfig.ts @@ -57,8 +57,8 @@ export const CATEGORY_SCALE_TABLE: Record = { */ export const KEYWORD_CATEGORY_MAP: Record = { 'buildings': ['castle', 'tower', 'house', 'building', 'palace', 'temple'], - 'environment_container': ['grand_hall', 'great_hall', 'hogwarts', 'throne_room', 'cathedral', 'ballroom', 'arena', 'colosseum', 'gryffindor', 'slytherin', 'hufflepuff', 'ravenclaw', 'common_room', 'dorm_room', 'dormitory'], - 'environment': ['dungeon', 'cave', 'terrain', 'ground', 'floor', 'sky'], + 'environment_container': ['grand_hall', 'great_hall', 'hogwarts', 'throne_room', 'cathedral', 'ballroom', 'arena', 'colosseum', 'gryffindor', 'slytherin', 'hufflepuff', 'ravenclaw', 'common_room', 'dorm_room', 'dormitory', 'field', 'plain', 'ocean', 'forest', 'desert', 'valley'], + 'environment': ['dungeon', 'cave', 'terrain', 'ground', 'floor', 'sky', 'wall', 'ceiling'], 'characters': ['man', 'woman', 'hero', 'villain', 'npc'], 'creatures': ['monster', 'beast', 'dragon', 'animal', 'wolf'], 'furniture': ['table', 'chair', 'desk', 'bed', 'sofa', 'shelf', 'bookcase'], diff --git a/src/data/AssetRegistry.ts b/src/data/AssetRegistry.ts index 6702e27..daee4eb 100644 --- a/src/data/AssetRegistry.ts +++ b/src/data/AssetRegistry.ts @@ -1,6 +1,6 @@ /** - * AssetRegistry.ts (Auto-Generated via File Scan) - * 로컬 파일 시스템의 에셋을 기반으로 생성됨. + * AssetRegistry.ts (Async Singleton Wrapper) + * 대형 JSON 데이터를 런타임에 비동기로 로드하여 빌드 성능을 최적화함. */ export interface AssetMetadata { @@ -21,14961 +21,39 @@ export interface AssetMetadata { }; } -const ASSETS: AssetMetadata[] = [ - { - id: 'local_0', - path: '/models/buildings/both_houses_scene.glb', // both_houses_scene - category: 'structure', - keywords: ['both', 'houses', 'scene', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1', - path: '/models/buildings/car-kit_debris-door-window.glb', // car-kit_debris-door-window - category: 'structure', - keywords: ['car', 'kit', 'debris', 'door', 'window', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_2', - path: '/models/buildings/car-kit_debris-door.glb', // car-kit_debris-door - category: 'structure', - keywords: ['car', 'kit', 'debris', 'door', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_3', - path: '/models/buildings/cellarDoor.glb', // cellarDoor - category: 'structure', - keywords: ['cellarDoor', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_4', - path: '/models/buildings/detailed_realistic_model_houseelf_01.glb', // detailed_realistic_model_houseelf_01 - category: 'structure', - keywords: ['detailed', 'realistic', 'model', 'houseelf', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_5', - path: '/models/buildings/detailed_realistic_model_houseelf_02.glb', // detailed_realistic_model_houseelf_02 - category: 'structure', - keywords: ['detailed', 'realistic', 'model', 'houseelf', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_6', - path: '/models/buildings/detailed_realistic_model_house_01.glb', // detailed_realistic_model_house_01 - category: 'structure', - keywords: ['detailed', 'realistic', 'model', 'house', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_7', - path: '/models/buildings/dumbledores_office.glb', // dumbledores_office - category: 'structure', - keywords: ['dumbledores', 'office', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_8', - path: '/models/buildings/fantasy-town-kit_balcony-wall-fence.glb', // fantasy-town-kit_balcony-wall-fence - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'balcony', 'wall', 'fence', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_9', - path: '/models/buildings/fantasy-town-kit_balcony-wall.glb', // fantasy-town-kit_balcony-wall - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'balcony', 'wall', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_10', - path: '/models/buildings/fantasy-town-kit_fence-broken.glb', // fantasy-town-kit_fence-broken - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'fence', 'broken', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_11', - path: '/models/buildings/fantasy-town-kit_fence-curved.glb', // fantasy-town-kit_fence-curved - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'fence', 'curved', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_12', - path: '/models/buildings/fantasy-town-kit_fence-gate.glb', // fantasy-town-kit_fence-gate - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'fence', 'gate', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_13', - path: '/models/buildings/fantasy-town-kit_fence.glb', // fantasy-town-kit_fence - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'fence', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_14', - path: '/models/buildings/fantasy-town-kit_hedge-gate.glb', // fantasy-town-kit_hedge-gate - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'hedge', 'gate', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_15', - path: '/models/buildings/fantasy-town-kit_hedge-large-gate.glb', // fantasy-town-kit_hedge-large-gate - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'hedge', 'large', 'gate', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_16', - path: '/models/buildings/fantasy-town-kit_roof-corner-inner.glb', // fantasy-town-kit_roof-corner-inner - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'corner', 'inner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_17', - path: '/models/buildings/fantasy-town-kit_roof-corner-round.glb', // fantasy-town-kit_roof-corner-round - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'corner', 'round', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_18', - path: '/models/buildings/fantasy-town-kit_roof-corner.glb', // fantasy-town-kit_roof-corner - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_19', - path: '/models/buildings/fantasy-town-kit_roof-flat.glb', // fantasy-town-kit_roof-flat - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'flat', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_20', - path: '/models/buildings/fantasy-town-kit_roof-gable-detail.glb', // fantasy-town-kit_roof-gable-detail - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'gable', 'detail', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_21', - path: '/models/buildings/fantasy-town-kit_roof-gable-end.glb', // fantasy-town-kit_roof-gable-end - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'gable', 'end', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_22', - path: '/models/buildings/fantasy-town-kit_roof-gable-top.glb', // fantasy-town-kit_roof-gable-top - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'gable', 'top', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_23', - path: '/models/buildings/fantasy-town-kit_roof-gable.glb', // fantasy-town-kit_roof-gable - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'gable', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_24', - path: '/models/buildings/fantasy-town-kit_roof-high-corner-round.glb', // fantasy-town-kit_roof-high-corner-round - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'corner', 'round', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_25', - path: '/models/buildings/fantasy-town-kit_roof-high-corner.glb', // fantasy-town-kit_roof-high-corner - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_26', - path: '/models/buildings/fantasy-town-kit_roof-high-cornerinner.glb', // fantasy-town-kit_roof-high-cornerinner - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'cornerinner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_27', - path: '/models/buildings/fantasy-town-kit_roof-high-flat.glb', // fantasy-town-kit_roof-high-flat - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'flat', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_28', - path: '/models/buildings/fantasy-town-kit_roof-high-gable-detail.glb', // fantasy-town-kit_roof-high-gable-detail - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'gable', 'detail', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_29', - path: '/models/buildings/fantasy-town-kit_roof-high-gable-end.glb', // fantasy-town-kit_roof-high-gable-end - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'gable', 'end', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_30', - path: '/models/buildings/fantasy-town-kit_roof-high-gable-top.glb', // fantasy-town-kit_roof-high-gable-top - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'gable', 'top', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_31', - path: '/models/buildings/fantasy-town-kit_roof-high-gable.glb', // fantasy-town-kit_roof-high-gable - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'gable', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_32', - path: '/models/buildings/fantasy-town-kit_roof-high-left.glb', // fantasy-town-kit_roof-high-left - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'left', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_33', - path: '/models/buildings/fantasy-town-kit_roof-high-point.glb', // fantasy-town-kit_roof-high-point - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'point', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_34', - path: '/models/buildings/fantasy-town-kit_roof-high-right.glb', // fantasy-town-kit_roof-high-right - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'right', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_35', - path: '/models/buildings/fantasy-town-kit_roof-high-window.glb', // fantasy-town-kit_roof-high-window - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'window', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_36', - path: '/models/buildings/fantasy-town-kit_roof-high.glb', // fantasy-town-kit_roof-high - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'high', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_37', - path: '/models/buildings/fantasy-town-kit_roof-left.glb', // fantasy-town-kit_roof-left - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'left', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_38', - path: '/models/buildings/fantasy-town-kit_roof-point.glb', // fantasy-town-kit_roof-point - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'point', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_39', - path: '/models/buildings/fantasy-town-kit_roof-right.glb', // fantasy-town-kit_roof-right - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'right', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_40', - path: '/models/buildings/fantasy-town-kit_roof-window.glb', // fantasy-town-kit_roof-window - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'window', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_41', - path: '/models/buildings/fantasy-town-kit_roof.glb', // fantasy-town-kit_roof - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'roof', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_42', - path: '/models/buildings/fantasy-town-kit_wall-arch-top-detail.glb', // fantasy-town-kit_wall-arch-top-detail - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'arch', 'top', 'detail', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_43', - path: '/models/buildings/fantasy-town-kit_wall-arch-top.glb', // fantasy-town-kit_wall-arch-top - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'arch', 'top', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_44', - path: '/models/buildings/fantasy-town-kit_wall-arch.glb', // fantasy-town-kit_wall-arch - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'arch', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_45', - path: '/models/buildings/fantasy-town-kit_wall-block-half.glb', // fantasy-town-kit_wall-block-half - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'block', 'half', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_46', - path: '/models/buildings/fantasy-town-kit_wall-block.glb', // fantasy-town-kit_wall-block - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'block', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_47', - path: '/models/buildings/fantasy-town-kit_wall-broken.glb', // fantasy-town-kit_wall-broken - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'broken', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_48', - path: '/models/buildings/fantasy-town-kit_wall-corner-detail.glb', // fantasy-town-kit_wall-corner-detail - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'corner', 'detail', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_49', - path: '/models/buildings/fantasy-town-kit_wall-corner-diagonal-half.glb', // fantasy-town-kit_wall-corner-diagonal-half - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'corner', 'diagonal', 'half', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_50', - path: '/models/buildings/fantasy-town-kit_wall-corner-diagonal.glb', // fantasy-town-kit_wall-corner-diagonal - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'corner', 'diagonal', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_51', - path: '/models/buildings/fantasy-town-kit_wall-corner-edge.glb', // fantasy-town-kit_wall-corner-edge - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'corner', 'edge', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_52', - path: '/models/buildings/fantasy-town-kit_wall-corner.glb', // fantasy-town-kit_wall-corner - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_53', - path: '/models/buildings/fantasy-town-kit_wall-curved.glb', // fantasy-town-kit_wall-curved - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'curved', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_54', - path: '/models/buildings/fantasy-town-kit_wall-detail-cross.glb', // fantasy-town-kit_wall-detail-cross - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'detail', 'cross', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_55', - path: '/models/buildings/fantasy-town-kit_wall-detail-diagonal.glb', // fantasy-town-kit_wall-detail-diagonal - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'detail', 'diagonal', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_56', - path: '/models/buildings/fantasy-town-kit_wall-detail-horizontal.glb', // fantasy-town-kit_wall-detail-horizontal - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'detail', 'horizontal', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_57', - path: '/models/buildings/fantasy-town-kit_wall-diagonal.glb', // fantasy-town-kit_wall-diagonal - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'diagonal', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_58', - path: '/models/buildings/fantasy-town-kit_wall-door.glb', // fantasy-town-kit_wall-door - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'door', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_59', - path: '/models/buildings/fantasy-town-kit_wall-doorway-base.glb', // fantasy-town-kit_wall-doorway-base - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'doorway', 'base', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_60', - path: '/models/buildings/fantasy-town-kit_wall-doorway-round.glb', // fantasy-town-kit_wall-doorway-round - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'doorway', 'round', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_61', - path: '/models/buildings/fantasy-town-kit_wall-doorway-square-wide-curved.glb', // fantasy-town-kit_wall-doorway-square-wide-curved - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'doorway', 'square', 'wide', 'curved', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_62', - path: '/models/buildings/fantasy-town-kit_wall-doorway-square-wide.glb', // fantasy-town-kit_wall-doorway-square-wide - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'doorway', 'square', 'wide', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_63', - path: '/models/buildings/fantasy-town-kit_wall-doorway-square.glb', // fantasy-town-kit_wall-doorway-square - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'doorway', 'square', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_64', - path: '/models/buildings/fantasy-town-kit_wall-half.glb', // fantasy-town-kit_wall-half - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'half', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_65', - path: '/models/buildings/fantasy-town-kit_wall-rounded.glb', // fantasy-town-kit_wall-rounded - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'rounded', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_66', - path: '/models/buildings/fantasy-town-kit_wall-side.glb', // fantasy-town-kit_wall-side - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'side', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_67', - path: '/models/buildings/fantasy-town-kit_wall-slope.glb', // fantasy-town-kit_wall-slope - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'slope', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_68', - path: '/models/buildings/fantasy-town-kit_wall-window-glass.glb', // fantasy-town-kit_wall-window-glass - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'window', 'glass', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_69', - path: '/models/buildings/fantasy-town-kit_wall-window-round.glb', // fantasy-town-kit_wall-window-round - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'window', 'round', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_70', - path: '/models/buildings/fantasy-town-kit_wall-window-shutters.glb', // fantasy-town-kit_wall-window-shutters - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'window', 'shutters', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_71', - path: '/models/buildings/fantasy-town-kit_wall-window-small.glb', // fantasy-town-kit_wall-window-small - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'window', 'small', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_72', - path: '/models/buildings/fantasy-town-kit_wall-wood-arch-top-detail.glb', // fantasy-town-kit_wall-wood-arch-top-detail - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'arch', 'top', 'detail', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_73', - path: '/models/buildings/fantasy-town-kit_wall-wood-arch-top.glb', // fantasy-town-kit_wall-wood-arch-top - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'arch', 'top', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_74', - path: '/models/buildings/fantasy-town-kit_wall-wood-arch.glb', // fantasy-town-kit_wall-wood-arch - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'arch', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_75', - path: '/models/buildings/fantasy-town-kit_wall-wood-block-half.glb', // fantasy-town-kit_wall-wood-block-half - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'block', 'half', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_76', - path: '/models/buildings/fantasy-town-kit_wall-wood-block.glb', // fantasy-town-kit_wall-wood-block - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'block', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_77', - path: '/models/buildings/fantasy-town-kit_wall-wood-broken.glb', // fantasy-town-kit_wall-wood-broken - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'broken', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_78', - path: '/models/buildings/fantasy-town-kit_wall-wood-corner-diagonal-half.glb', // fantasy-town-kit_wall-wood-corner-diagonal-half - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'corner', 'diagonal', 'half', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_79', - path: '/models/buildings/fantasy-town-kit_wall-wood-corner-diagonal.glb', // fantasy-town-kit_wall-wood-corner-diagonal - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'corner', 'diagonal', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_80', - path: '/models/buildings/fantasy-town-kit_wall-wood-corner-edge.glb', // fantasy-town-kit_wall-wood-corner-edge - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'corner', 'edge', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_81', - path: '/models/buildings/fantasy-town-kit_wall-wood-corner.glb', // fantasy-town-kit_wall-wood-corner - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_82', - path: '/models/buildings/fantasy-town-kit_wall-wood-curved.glb', // fantasy-town-kit_wall-wood-curved - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'curved', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_83', - path: '/models/buildings/fantasy-town-kit_wall-wood-detail-cross.glb', // fantasy-town-kit_wall-wood-detail-cross - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'detail', 'cross', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_84', - path: '/models/buildings/fantasy-town-kit_wall-wood-detail-diagonal.glb', // fantasy-town-kit_wall-wood-detail-diagonal - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'detail', 'diagonal', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_85', - path: '/models/buildings/fantasy-town-kit_wall-wood-detail-horizontal.glb', // fantasy-town-kit_wall-wood-detail-horizontal - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'detail', 'horizontal', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_86', - path: '/models/buildings/fantasy-town-kit_wall-wood-diagonal.glb', // fantasy-town-kit_wall-wood-diagonal - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'diagonal', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_87', - path: '/models/buildings/fantasy-town-kit_wall-wood-door.glb', // fantasy-town-kit_wall-wood-door - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'door', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_88', - path: '/models/buildings/fantasy-town-kit_wall-wood-doorway-base.glb', // fantasy-town-kit_wall-wood-doorway-base - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'doorway', 'base', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_89', - path: '/models/buildings/fantasy-town-kit_wall-wood-doorway-round.glb', // fantasy-town-kit_wall-wood-doorway-round - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'doorway', 'round', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_90', - path: '/models/buildings/fantasy-town-kit_wall-wood-doorway-square-wide-curved.glb', // fantasy-town-kit_wall-wood-doorway-square-wide-curved - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'doorway', 'square', 'wide', 'curved', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_91', - path: '/models/buildings/fantasy-town-kit_wall-wood-doorway-square-wide.glb', // fantasy-town-kit_wall-wood-doorway-square-wide - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'doorway', 'square', 'wide', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_92', - path: '/models/buildings/fantasy-town-kit_wall-wood-doorway-square.glb', // fantasy-town-kit_wall-wood-doorway-square - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'doorway', 'square', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_93', - path: '/models/buildings/fantasy-town-kit_wall-wood-half.glb', // fantasy-town-kit_wall-wood-half - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'half', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_94', - path: '/models/buildings/fantasy-town-kit_wall-wood-rounded.glb', // fantasy-town-kit_wall-wood-rounded - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'rounded', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_95', - path: '/models/buildings/fantasy-town-kit_wall-wood-side.glb', // fantasy-town-kit_wall-wood-side - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'side', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_96', - path: '/models/buildings/fantasy-town-kit_wall-wood-slope.glb', // fantasy-town-kit_wall-wood-slope - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'slope', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_97', - path: '/models/buildings/fantasy-town-kit_wall-wood-window-glass.glb', // fantasy-town-kit_wall-wood-window-glass - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'window', 'glass', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_98', - path: '/models/buildings/fantasy-town-kit_wall-wood-window-round.glb', // fantasy-town-kit_wall-wood-window-round - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'window', 'round', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_99', - path: '/models/buildings/fantasy-town-kit_wall-wood-window-shutters.glb', // fantasy-town-kit_wall-wood-window-shutters - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'window', 'shutters', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_100', - path: '/models/buildings/fantasy-town-kit_wall-wood-window-small.glb', // fantasy-town-kit_wall-wood-window-small - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'window', 'small', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_101', - path: '/models/buildings/fantasy-town-kit_wall-wood.glb', // fantasy-town-kit_wall-wood - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_102', - path: '/models/buildings/fantasy-town-kit_wall.glb', // fantasy-town-kit_wall - category: 'structure', - keywords: ['fantasy', 'town', 'kit', 'wall', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_103', - path: '/models/buildings/fence.glb', // fence - category: 'structure', - keywords: ['fence', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_104', - path: '/models/buildings/fenceACorner1.glb', // fenceACorner1 - category: 'structure', - keywords: ['fenceACorner1', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_105', - path: '/models/buildings/fenceACorner2.glb', // fenceACorner2 - category: 'structure', - keywords: ['fenceACorner2', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_106', - path: '/models/buildings/fenceACorner3.glb', // fenceACorner3 - category: 'structure', - keywords: ['fenceACorner3', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_107', - path: '/models/buildings/fenceACorner4.glb', // fenceACorner4 - category: 'structure', - keywords: ['fenceACorner4', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_108', - path: '/models/buildings/fenceAGate.glb', // fenceAGate - category: 'structure', - keywords: ['fenceAGate', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_109', - path: '/models/buildings/fenceAPillar1.glb', // fenceAPillar1 - category: 'structure', - keywords: ['fenceAPillar1', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_110', - path: '/models/buildings/fenceAPillar2.glb', // fenceAPillar2 - category: 'structure', - keywords: ['fenceAPillar2', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_111', - path: '/models/buildings/fenceAPillar3.glb', // fenceAPillar3 - category: 'structure', - keywords: ['fenceAPillar3', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_112', - path: '/models/buildings/fenceAPillar4.glb', // fenceAPillar4 - category: 'structure', - keywords: ['fenceAPillar4', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_113', - path: '/models/buildings/fenceAPillar5.glb', // fenceAPillar5 - category: 'structure', - keywords: ['fenceAPillar5', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_114', - path: '/models/buildings/fenceAPillar6.glb', // fenceAPillar6 - category: 'structure', - keywords: ['fenceAPillar6', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_115', - path: '/models/buildings/fenceAPillar7.glb', // fenceAPillar7 - category: 'structure', - keywords: ['fenceAPillar7', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_116', - path: '/models/buildings/fenceAPillar8.glb', // fenceAPillar8 - category: 'structure', - keywords: ['fenceAPillar8', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_117', - path: '/models/buildings/fenceASection1.glb', // fenceASection1 - category: 'structure', - keywords: ['fenceASection1', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_118', - path: '/models/buildings/fenceASection2.glb', // fenceASection2 - category: 'structure', - keywords: ['fenceASection2', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_119', - path: '/models/buildings/fenceASection3.glb', // fenceASection3 - category: 'structure', - keywords: ['fenceASection3', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_120', - path: '/models/buildings/fenceASection4.glb', // fenceASection4 - category: 'structure', - keywords: ['fenceASection4', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_121', - path: '/models/buildings/fenceASection5.glb', // fenceASection5 - category: 'structure', - keywords: ['fenceASection5', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_122', - path: '/models/buildings/fenceBCorner1.glb', // fenceBCorner1 - category: 'structure', - keywords: ['fenceBCorner1', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_123', - path: '/models/buildings/fenceBCorner2.glb', // fenceBCorner2 - category: 'structure', - keywords: ['fenceBCorner2', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_124', - path: '/models/buildings/fenceBCorner3.glb', // fenceBCorner3 - category: 'structure', - keywords: ['fenceBCorner3', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_125', - path: '/models/buildings/fenceBPillar1.glb', // fenceBPillar1 - category: 'structure', - keywords: ['fenceBPillar1', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_126', - path: '/models/buildings/fenceBPillar2.glb', // fenceBPillar2 - category: 'structure', - keywords: ['fenceBPillar2', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_127', - path: '/models/buildings/fenceBPillar3.glb', // fenceBPillar3 - category: 'structure', - keywords: ['fenceBPillar3', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_128', - path: '/models/buildings/fenceBPillar4.glb', // fenceBPillar4 - category: 'structure', - keywords: ['fenceBPillar4', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_129', - path: '/models/buildings/fenceBSection1.glb', // fenceBSection1 - category: 'structure', - keywords: ['fenceBSection1', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_130', - path: '/models/buildings/fenceBSection2.glb', // fenceBSection2 - category: 'structure', - keywords: ['fenceBSection2', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_131', - path: '/models/buildings/fenceBSection3.glb', // fenceBSection3 - category: 'structure', - keywords: ['fenceBSection3', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_132', - path: '/models/buildings/fenceBSection4.glb', // fenceBSection4 - category: 'structure', - keywords: ['fenceBSection4', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_133', - path: '/models/buildings/fenceC1.glb', // fenceC1 - category: 'structure', - keywords: ['fenceC1', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_134', - path: '/models/buildings/fenceC1Skewed.glb', // fenceC1Skewed - category: 'structure', - keywords: ['fenceC1Skewed', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_135', - path: '/models/buildings/fenceC2.glb', // fenceC2 - category: 'structure', - keywords: ['fenceC2', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_136', - path: '/models/buildings/fenceC3.glb', // fenceC3 - category: 'structure', - keywords: ['fenceC3', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_137', - path: '/models/buildings/GlassBrokenWindow.glb', // GlassBrokenWindow - category: 'structure', - keywords: ['GlassBrokenWindow', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_138', - path: '/models/buildings/graveyard-kit_brick-wall-curve-small.glb', // graveyard-kit_brick-wall-curve-small - category: 'structure', - keywords: ['graveyard', 'kit', 'brick', 'wall', 'curve', 'small', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_139', - path: '/models/buildings/graveyard-kit_brick-wall-curve.glb', // graveyard-kit_brick-wall-curve - category: 'structure', - keywords: ['graveyard', 'kit', 'brick', 'wall', 'curve', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_140', - path: '/models/buildings/graveyard-kit_brick-wall-end.glb', // graveyard-kit_brick-wall-end - category: 'structure', - keywords: ['graveyard', 'kit', 'brick', 'wall', 'end', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_141', - path: '/models/buildings/graveyard-kit_brick-wall.glb', // graveyard-kit_brick-wall - category: 'structure', - keywords: ['graveyard', 'kit', 'brick', 'wall', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_142', - path: '/models/buildings/graveyard-kit_column-large.glb', // graveyard-kit_column-large - category: 'structure', - keywords: ['graveyard', 'kit', 'column', 'large', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_143', - path: '/models/buildings/graveyard-kit_cross-column.glb', // graveyard-kit_cross-column - category: 'structure', - keywords: ['graveyard', 'kit', 'cross', 'column', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_144', - path: '/models/buildings/graveyard-kit_crypt-door.glb', // graveyard-kit_crypt-door - category: 'structure', - keywords: ['graveyard', 'kit', 'crypt', 'door', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_145', - path: '/models/buildings/graveyard-kit_crypt-large-door.glb', // graveyard-kit_crypt-large-door - category: 'structure', - keywords: ['graveyard', 'kit', 'crypt', 'large', 'door', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_146', - path: '/models/buildings/graveyard-kit_crypt-large-roof.glb', // graveyard-kit_crypt-large-roof - category: 'structure', - keywords: ['graveyard', 'kit', 'crypt', 'large', 'roof', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_147', - path: '/models/buildings/graveyard-kit_crypt-small-roof.glb', // graveyard-kit_crypt-small-roof - category: 'structure', - keywords: ['graveyard', 'kit', 'crypt', 'small', 'roof', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_148', - path: '/models/buildings/graveyard-kit_fence-damaged.glb', // graveyard-kit_fence-damaged - category: 'structure', - keywords: ['graveyard', 'kit', 'fence', 'damaged', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_149', - path: '/models/buildings/graveyard-kit_fence-gate.glb', // graveyard-kit_fence-gate - category: 'structure', - keywords: ['graveyard', 'kit', 'fence', 'gate', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_150', - path: '/models/buildings/graveyard-kit_fence.glb', // graveyard-kit_fence - category: 'structure', - keywords: ['graveyard', 'kit', 'fence', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_151', - path: '/models/buildings/graveyard-kit_iron-fence-bar.glb', // graveyard-kit_iron-fence-bar - category: 'structure', - keywords: ['graveyard', 'kit', 'iron', 'fence', 'bar', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_152', - path: '/models/buildings/graveyard-kit_iron-fence-border-column.glb', // graveyard-kit_iron-fence-border-column - category: 'structure', - keywords: ['graveyard', 'kit', 'iron', 'fence', 'border', 'column', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_153', - path: '/models/buildings/graveyard-kit_iron-fence-border-curve.glb', // graveyard-kit_iron-fence-border-curve - category: 'structure', - keywords: ['graveyard', 'kit', 'iron', 'fence', 'border', 'curve', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_154', - path: '/models/buildings/graveyard-kit_iron-fence-border-gate.glb', // graveyard-kit_iron-fence-border-gate - category: 'structure', - keywords: ['graveyard', 'kit', 'iron', 'fence', 'border', 'gate', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_155', - path: '/models/buildings/graveyard-kit_iron-fence-border.glb', // graveyard-kit_iron-fence-border - category: 'structure', - keywords: ['graveyard', 'kit', 'iron', 'fence', 'border', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_156', - path: '/models/buildings/graveyard-kit_iron-fence-curve.glb', // graveyard-kit_iron-fence-curve - category: 'structure', - keywords: ['graveyard', 'kit', 'iron', 'fence', 'curve', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_157', - path: '/models/buildings/graveyard-kit_iron-fence-damaged.glb', // graveyard-kit_iron-fence-damaged - category: 'structure', - keywords: ['graveyard', 'kit', 'iron', 'fence', 'damaged', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_158', - path: '/models/buildings/graveyard-kit_iron-fence.glb', // graveyard-kit_iron-fence - category: 'structure', - keywords: ['graveyard', 'kit', 'iron', 'fence', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_159', - path: '/models/buildings/gryffindor_common_room.glb', // gryffindor_common_room - category: 'structure', - keywords: ['gryffindor', 'common', 'room', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_160', - path: '/models/buildings/haunted_house.glb', // haunted_house - category: 'structure', - keywords: ['haunted', 'house', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_161', - // ⚠️ hogwarts_grand_hall.glb는 외부 텍스처 참조로 사용 불가 - // hogwarts_corridor.glb (35개 텍스처 임베딩됨) 사용 - path: '/models/samples/hogwarts_corridor.glb', - category: 'structure', - keywords: ['hogwarts', 'grand', 'hall', 'buildings', '대강당', '마법학교'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_162', - path: '/models/buildings/honey_dukes_shop.glb', // honey_dukes_shop - category: 'structure', - keywords: ['honey', 'dukes', 'shop', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_163', - path: '/models/buildings/house_scene.glb', // house_scene - category: 'structure', - keywords: ['house', 'scene', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_164', - path: '/models/buildings/modular-dungeon-kit_corridor-corner.glb', // modular-dungeon-kit_corridor-corner - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_165', - path: '/models/buildings/modular-dungeon-kit_corridor-end.glb', // modular-dungeon-kit_corridor-end - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'end', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_166', - path: '/models/buildings/modular-dungeon-kit_corridor-intersection.glb', // modular-dungeon-kit_corridor-intersection - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'intersection', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_167', - path: '/models/buildings/modular-dungeon-kit_corridor-junction.glb', // modular-dungeon-kit_corridor-junction - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'junction', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_168', - path: '/models/buildings/modular-dungeon-kit_corridor-transition.glb', // modular-dungeon-kit_corridor-transition - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'transition', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_169', - path: '/models/buildings/modular-dungeon-kit_corridor-wide-corner.glb', // modular-dungeon-kit_corridor-wide-corner - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'wide', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_170', - path: '/models/buildings/modular-dungeon-kit_corridor-wide-end.glb', // modular-dungeon-kit_corridor-wide-end - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'wide', 'end', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_171', - path: '/models/buildings/modular-dungeon-kit_corridor-wide-intersection.glb', // modular-dungeon-kit_corridor-wide-intersection - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'wide', 'intersection', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_172', - path: '/models/buildings/modular-dungeon-kit_corridor-wide-junction.glb', // modular-dungeon-kit_corridor-wide-junction - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'wide', 'junction', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_173', - path: '/models/buildings/modular-dungeon-kit_corridor-wide.glb', // modular-dungeon-kit_corridor-wide - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'wide', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_174', - path: '/models/buildings/modular-dungeon-kit_corridor.glb', // modular-dungeon-kit_corridor - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'corridor', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_175', - path: '/models/buildings/modular-dungeon-kit_gate-door-window.glb', // modular-dungeon-kit_gate-door-window - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'gate', 'door', 'window', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_176', - path: '/models/buildings/modular-dungeon-kit_gate-door.glb', // modular-dungeon-kit_gate-door - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'gate', 'door', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_177', - path: '/models/buildings/modular-dungeon-kit_gate.glb', // modular-dungeon-kit_gate - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'gate', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_178', - path: '/models/buildings/modular-dungeon-kit_room-corner.glb', // modular-dungeon-kit_room-corner - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'room', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_179', - path: '/models/buildings/modular-dungeon-kit_room-large-variation.glb', // modular-dungeon-kit_room-large-variation - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'room', 'large', 'variation', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_180', - path: '/models/buildings/modular-dungeon-kit_room-large.glb', // modular-dungeon-kit_room-large - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'room', 'large', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_181', - path: '/models/buildings/modular-dungeon-kit_room-small-variation.glb', // modular-dungeon-kit_room-small-variation - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'room', 'small', 'variation', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_182', - path: '/models/buildings/modular-dungeon-kit_room-small.glb', // modular-dungeon-kit_room-small - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'room', 'small', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_183', - path: '/models/buildings/modular-dungeon-kit_room-wide-variation.glb', // modular-dungeon-kit_room-wide-variation - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'room', 'wide', 'variation', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_184', - path: '/models/buildings/modular-dungeon-kit_room-wide.glb', // modular-dungeon-kit_room-wide - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'room', 'wide', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_185', - path: '/models/buildings/modular-dungeon-kit_stairs-wide.glb', // modular-dungeon-kit_stairs-wide - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'stairs', 'wide', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_186', - path: '/models/buildings/modular-dungeon-kit_stairs.glb', // modular-dungeon-kit_stairs - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'stairs', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_187', - path: '/models/buildings/modular-dungeon-kit_template-wall-corner.glb', // modular-dungeon-kit_template-wall-corner - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'template', 'wall', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_188', - path: '/models/buildings/modular-dungeon-kit_template-wall-detail-a.glb', // modular-dungeon-kit_template-wall-detail-a - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'template', 'wall', 'detail', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_189', - path: '/models/buildings/modular-dungeon-kit_template-wall-half.glb', // modular-dungeon-kit_template-wall-half - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'template', 'wall', 'half', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_190', - path: '/models/buildings/modular-dungeon-kit_template-wall-stairs.glb', // modular-dungeon-kit_template-wall-stairs - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'template', 'wall', 'stairs', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_191', - path: '/models/buildings/modular-dungeon-kit_template-wall-top.glb', // modular-dungeon-kit_template-wall-top - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'template', 'wall', 'top', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_192', - path: '/models/buildings/modular-dungeon-kit_template-wall.glb', // modular-dungeon-kit_template-wall - category: 'structure', - keywords: ['modular', 'dungeon', 'kit', 'template', 'wall', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_193', - path: '/models/buildings/ollivanders_wand_shop.glb', // ollivanders_wand_shop - category: 'structure', - keywords: ['ollivanders', 'wand', 'shop', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_194', - path: '/models/buildings/platformer-kit_door-large-open.glb', // platformer-kit_door-large-open - category: 'structure', - keywords: ['platformer', 'kit', 'door', 'large', 'open', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_195', - path: '/models/buildings/platformer-kit_door-open.glb', // platformer-kit_door-open - category: 'structure', - keywords: ['platformer', 'kit', 'door', 'open', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_196', - path: '/models/buildings/platformer-kit_door-rotate-large.glb', // platformer-kit_door-rotate-large - category: 'structure', - keywords: ['platformer', 'kit', 'door', 'rotate', 'large', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_197', - path: '/models/buildings/platformer-kit_door-rotate.glb', // platformer-kit_door-rotate - category: 'structure', - keywords: ['platformer', 'kit', 'door', 'rotate', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_198', - path: '/models/buildings/platformer-kit_fence-broken.glb', // platformer-kit_fence-broken - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'broken', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_199', - path: '/models/buildings/platformer-kit_fence-corner-curved.glb', // platformer-kit_fence-corner-curved - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'corner', 'curved', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_200', - path: '/models/buildings/platformer-kit_fence-corner.glb', // platformer-kit_fence-corner - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_201', - path: '/models/buildings/platformer-kit_fence-low-broken.glb', // platformer-kit_fence-low-broken - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'low', 'broken', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_202', - path: '/models/buildings/platformer-kit_fence-low-corner-curved.glb', // platformer-kit_fence-low-corner-curved - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'low', 'corner', 'curved', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_203', - path: '/models/buildings/platformer-kit_fence-low-corner.glb', // platformer-kit_fence-low-corner - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'low', 'corner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_204', - path: '/models/buildings/platformer-kit_fence-low-straight.glb', // platformer-kit_fence-low-straight - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'low', 'straight', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_205', - path: '/models/buildings/platformer-kit_fence-rope.glb', // platformer-kit_fence-rope - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'rope', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_206', - path: '/models/buildings/platformer-kit_fence-straight.glb', // platformer-kit_fence-straight - category: 'structure', - keywords: ['platformer', 'kit', 'fence', 'straight', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_207', - path: '/models/buildings/potions_classroom.glb', // potions_classroom - category: 'structure', - keywords: ['potions', 'classroom', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_208', - path: '/models/buildings/slytherin_dorm_room.glb', // slytherin_dorm_room - category: 'structure', - keywords: ['slytherin', 'dorm', 'room', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_209', - path: '/models/buildings/slytherin_dorm_room_1769413346242.glb', // slytherin_dorm_room_1769413346242 - category: 'structure', - keywords: ['slytherin', 'dorm', 'room', '1769413346242', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_210', - path: '/models/buildings/Slytherin_Dorm_Room_v20260121_135123_MetadataPatched.glb', // Slytherin_Dorm_Room_v20260121_135123_MetadataPatched - category: 'structure', - keywords: ['Slytherin', 'Dorm', 'Room', 'v20260121', '135123', 'MetadataPatched', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_211', - path: '/models/buildings/three.js-examples_dungeon_warkarma.glb', // three.js-examples_dungeon_warkarma - category: 'structure', - keywords: ['three.js', 'examples', 'dungeon', 'warkarma', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_212', - path: '/models/buildings/TransmissionThinwallTestGrid.glb', // TransmissionThinwallTestGrid - category: 'structure', - keywords: ['TransmissionThinwallTestGrid', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_213', - path: '/models/buildings/umbridges_office.glb', // umbridges_office - category: 'structure', - keywords: ['umbridges', 'office', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_214', - path: '/models/buildings/wall.glb', // wall - category: 'structure', - keywords: ['wall', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_215', - path: '/models/buildings/wallArch.glb', // wallArch - category: 'structure', - keywords: ['wallArch', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_216', - path: '/models/buildings/wallCorner.glb', // wallCorner - category: 'structure', - keywords: ['wallCorner', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_217', - path: '/models/buildings/window.glb', // window - category: 'structure', - keywords: ['window', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_218', - path: '/models/buildings/window2.glb', // window2 - category: 'structure', - keywords: ['window2', 'buildings'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_219', - path: '/models/characters/babylon-assets_BoxSemantics.glb', // babylon-assets_BoxSemantics - category: 'prop', - keywords: ['babylon', 'assets', 'BoxSemantics', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_220', - path: '/models/characters/babylon-assets_CesiumMan.glb', // babylon-assets_CesiumMan - category: 'prop', - keywords: ['babylon', 'assets', 'CesiumMan', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_221', - path: '/models/characters/CesiumMan.glb', // CesiumMan - category: 'prop', - keywords: ['CesiumMan', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_222', - path: '/models/characters/graveyard-kit_character-ghost.glb', // graveyard-kit_character-ghost - category: 'prop', - keywords: ['graveyard', 'kit', 'character', 'ghost', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_223', - path: '/models/characters/graveyard-kit_character-keeper.glb', // graveyard-kit_character-keeper - category: 'prop', - keywords: ['graveyard', 'kit', 'character', 'keeper', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_224', - path: '/models/characters/graveyard-kit_character-skeleton.glb', // graveyard-kit_character-skeleton - category: 'prop', - keywords: ['graveyard', 'kit', 'character', 'skeleton', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_225', - path: '/models/characters/graveyard-kit_character-vampire.glb', // graveyard-kit_character-vampire - category: 'prop', - keywords: ['graveyard', 'kit', 'character', 'vampire', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_226', - path: '/models/characters/graveyard-kit_character-zombie.glb', // graveyard-kit_character-zombie - category: 'prop', - keywords: ['graveyard', 'kit', 'character', 'zombie', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_227', - path: '/models/characters/HVGirl.glb', // HVGirl - category: 'prop', - keywords: ['HVGirl', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_228', - path: '/models/characters/NodePerformanceTest.glb', // NodePerformanceTest - category: 'prop', - keywords: ['NodePerformanceTest', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_229', - path: '/models/characters/platformer-kit_character-oobi.glb', // platformer-kit_character-oobi - category: 'prop', - keywords: ['platformer', 'kit', 'character', 'oobi', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_230', - path: '/models/characters/platformer-kit_character-oodi.glb', // platformer-kit_character-oodi - category: 'prop', - keywords: ['platformer', 'kit', 'character', 'oodi', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_231', - path: '/models/characters/platformer-kit_character-ooli.glb', // platformer-kit_character-ooli - category: 'prop', - keywords: ['platformer', 'kit', 'character', 'ooli', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_232', - path: '/models/characters/platformer-kit_character-oopi.glb', // platformer-kit_character-oopi - category: 'prop', - keywords: ['platformer', 'kit', 'character', 'oopi', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_233', - path: '/models/characters/platformer-kit_character-oozi.glb', // platformer-kit_character-oozi - category: 'prop', - keywords: ['platformer', 'kit', 'character', 'oozi', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_234', - path: '/models/characters/snowMan.glb', // snowMan - category: 'prop', - keywords: ['snowMan', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_235', - path: '/models/characters/three.js-examples_Soldier.glb', // three.js-examples_Soldier - category: 'prop', - keywords: ['three.js', 'examples', 'Soldier', 'characters'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_236', - path: '/models/creatures/babylon-assets_BarramundiFish.glb', // babylon-assets_BarramundiFish - category: 'prop', - keywords: ['babylon', 'assets', 'BarramundiFish', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_237', - path: '/models/creatures/babylon-assets_Monster.glb', // babylon-assets_Monster - category: 'prop', - keywords: ['babylon', 'assets', 'Monster', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_238', - path: '/models/creatures/babylon-assets_ReciprocatingSaw.glb', // babylon-assets_ReciprocatingSaw - category: 'prop', - keywords: ['babylon', 'assets', 'ReciprocatingSaw', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_239', - path: '/models/creatures/BarramundiFish.glb', // BarramundiFish - category: 'prop', - keywords: ['BarramundiFish', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_240', - path: '/models/creatures/dragon.glb', // dragon - category: 'prop', - keywords: ['dragon', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_241', - path: '/models/creatures/DragonAttenuation.glb', // DragonAttenuation - category: 'prop', - keywords: ['DragonAttenuation', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_242', - path: '/models/creatures/DragonDispersion.glb', // DragonDispersion - category: 'prop', - keywords: ['DragonDispersion', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_243', - path: '/models/creatures/dragonUV.glb', // dragonUV - category: 'prop', - keywords: ['dragonUV', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_244', - path: '/models/creatures/fish.glb', // fish - category: 'prop', - keywords: ['fish', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_245', - path: '/models/creatures/Fox.glb', // Fox - category: 'prop', - keywords: ['Fox', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_246', - path: '/models/creatures/ScatteringSkull.glb', // ScatteringSkull - category: 'prop', - keywords: ['ScatteringSkull', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_247', - path: '/models/creatures/tarisland_dragon_high_poly.glb', // tarisland_dragon_high_poly - category: 'prop', - keywords: ['tarisland', 'dragon', 'high', 'poly', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_248', - path: '/models/creatures/three.js-examples_DragonAttenuation.glb', // three.js-examples_DragonAttenuation - category: 'prop', - keywords: ['three.js', 'examples', 'DragonAttenuation', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_249', - path: '/models/creatures/three.js-examples_Horse.glb', // three.js-examples_Horse - category: 'prop', - keywords: ['three.js', 'examples', 'Horse', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_250', - path: '/models/creatures/underwaterSceneShadowCatcher.glb', // underwaterSceneShadowCatcher - category: 'prop', - keywords: ['underwaterSceneShadowCatcher', 'creatures'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_251', - path: '/models/food/babylon-assets_WaterBottle.glb', // babylon-assets_WaterBottle - category: 'prop', - keywords: ['babylon', 'assets', 'WaterBottle', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_252', - path: '/models/food/DiffuseTransmissionTeacup.glb', // DiffuseTransmissionTeacup - category: 'prop', - keywords: ['DiffuseTransmissionTeacup', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_253', - path: '/models/food/graveyard-kit_detail-plate.glb', // graveyard-kit_detail-plate - category: 'prop', - keywords: ['graveyard', 'kit', 'detail', 'plate', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_254', - path: '/models/food/modular-dungeon-kit_template-corner.glb', // modular-dungeon-kit_template-corner - category: 'prop', - keywords: ['modular', 'dungeon', 'kit', 'template', 'corner', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_255', - path: '/models/food/modular-dungeon-kit_template-detail.glb', // modular-dungeon-kit_template-detail - category: 'prop', - keywords: ['modular', 'dungeon', 'kit', 'template', 'detail', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_256', - path: '/models/food/modular-dungeon-kit_template-floor-big.glb', // modular-dungeon-kit_template-floor-big - category: 'prop', - keywords: ['modular', 'dungeon', 'kit', 'template', 'floor', 'big', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_257', - path: '/models/food/modular-dungeon-kit_template-floor-detail-a.glb', // modular-dungeon-kit_template-floor-detail-a - category: 'prop', - keywords: ['modular', 'dungeon', 'kit', 'template', 'floor', 'detail', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_258', - path: '/models/food/modular-dungeon-kit_template-floor-detail.glb', // modular-dungeon-kit_template-floor-detail - category: 'prop', - keywords: ['modular', 'dungeon', 'kit', 'template', 'floor', 'detail', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_259', - path: '/models/food/modular-dungeon-kit_template-floor-layer-raised.glb', // modular-dungeon-kit_template-floor-layer-raised - category: 'prop', - keywords: ['modular', 'dungeon', 'kit', 'template', 'floor', 'layer', 'raised', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_260', - path: '/models/food/modular-dungeon-kit_template-floor-layer.glb', // modular-dungeon-kit_template-floor-layer - category: 'prop', - keywords: ['modular', 'dungeon', 'kit', 'template', 'floor', 'layer', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_261', - path: '/models/food/modular-dungeon-kit_template-floor.glb', // modular-dungeon-kit_template-floor - category: 'prop', - keywords: ['modular', 'dungeon', 'kit', 'template', 'floor', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_262', - path: '/models/food/mrtk-fluent-backplate.glb', // mrtk-fluent-backplate - category: 'prop', - keywords: ['mrtk', 'fluent', 'backplate', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_263', - path: '/models/food/mrtk-fluent-frontplate.glb', // mrtk-fluent-frontplate - category: 'prop', - keywords: ['mrtk', 'fluent', 'frontplate', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_264', - path: '/models/food/WaterBottle.glb', // WaterBottle - category: 'prop', - keywords: ['WaterBottle', 'food'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_265', - path: '/models/furniture/AnisotropyBarnLamp.glb', // AnisotropyBarnLamp - category: 'large_furniture', - keywords: ['AnisotropyBarnLamp', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_266', - path: '/models/furniture/ChairDamaskPurplegold.glb', // ChairDamaskPurplegold - category: 'large_furniture', - keywords: ['ChairDamaskPurplegold', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_267', - path: '/models/furniture/detailed_realistic_model_ancientbookshelf_01.glb', // detailed_realistic_model_ancientbookshelf_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'ancientbookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_268', - path: '/models/furniture/detailed_realistic_model_ancientbookshelf_02.glb', // detailed_realistic_model_ancientbookshelf_02 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'ancientbookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_269', - path: '/models/furniture/detailed_realistic_model_ancientbookshelf_03.glb', // detailed_realistic_model_ancientbookshelf_03 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'ancientbookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_270', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_02.glb', // detailed_realistic_model_antiquebookshelf_02 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_271', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_03.glb', // detailed_realistic_model_antiquebookshelf_03 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_272', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_04.glb', // detailed_realistic_model_antiquebookshelf_04 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_273', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_05.glb', // detailed_realistic_model_antiquebookshelf_05 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_274', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_06.glb', // detailed_realistic_model_antiquebookshelf_06 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_275', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_07.glb', // detailed_realistic_model_antiquebookshelf_07 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_276', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_08.glb', // detailed_realistic_model_antiquebookshelf_08 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_277', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_09.glb', // detailed_realistic_model_antiquebookshelf_09 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_278', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_10.glb', // detailed_realistic_model_antiquebookshelf_10 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_279', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_11.glb', // detailed_realistic_model_antiquebookshelf_11 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_280', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_12.glb', // detailed_realistic_model_antiquebookshelf_12 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_281', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_13.glb', // detailed_realistic_model_antiquebookshelf_13 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_282', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_14.glb', // detailed_realistic_model_antiquebookshelf_14 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_283', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_15.glb', // detailed_realistic_model_antiquebookshelf_15 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_284', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_16.glb', // detailed_realistic_model_antiquebookshelf_16 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_285', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_17.glb', // detailed_realistic_model_antiquebookshelf_17 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_286', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_18.glb', // detailed_realistic_model_antiquebookshelf_18 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_287', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_19.glb', // detailed_realistic_model_antiquebookshelf_19 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_288', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_20.glb', // detailed_realistic_model_antiquebookshelf_20 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_289', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_21.glb', // detailed_realistic_model_antiquebookshelf_21 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_290', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_22.glb', // detailed_realistic_model_antiquebookshelf_22 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_291', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_23.glb', // detailed_realistic_model_antiquebookshelf_23 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_292', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_24.glb', // detailed_realistic_model_antiquebookshelf_24 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_293', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_25.glb', // detailed_realistic_model_antiquebookshelf_25 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_294', - path: '/models/furniture/detailed_realistic_model_antiquebookshelf_26.glb', // detailed_realistic_model_antiquebookshelf_26 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antiquebookshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_295', - path: '/models/furniture/detailed_realistic_model_antique_01.glb', // detailed_realistic_model_antique_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'antique', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_296', - path: '/models/furniture/detailed_realistic_model_bookcase_01.glb', // detailed_realistic_model_bookcase_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'bookcase', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_297', - path: '/models/furniture/detailed_realistic_model_broomstick_01.glb', // detailed_realistic_model_broomstick_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'broomstick', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_298', - path: '/models/furniture/detailed_realistic_model_broomstick_02.glb', // detailed_realistic_model_broomstick_02 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'broomstick', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_299', - path: '/models/furniture/detailed_realistic_model_castiron_01.glb', // detailed_realistic_model_castiron_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'castiron', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_300', - path: '/models/furniture/detailed_realistic_model_grandoaktable_01.glb', // detailed_realistic_model_grandoaktable_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_301', - path: '/models/furniture/detailed_realistic_model_grandoaktable_02.glb', // detailed_realistic_model_grandoaktable_02 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_302', - path: '/models/furniture/detailed_realistic_model_grandoaktable_03.glb', // detailed_realistic_model_grandoaktable_03 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_303', - path: '/models/furniture/detailed_realistic_model_grandoaktable_04.glb', // detailed_realistic_model_grandoaktable_04 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_304', - path: '/models/furniture/detailed_realistic_model_grandoaktable_05.glb', // detailed_realistic_model_grandoaktable_05 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_305', - path: '/models/furniture/detailed_realistic_model_grandoaktable_06.glb', // detailed_realistic_model_grandoaktable_06 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_306', - path: '/models/furniture/detailed_realistic_model_grandoaktable_07.glb', // detailed_realistic_model_grandoaktable_07 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_307', - path: '/models/furniture/detailed_realistic_model_grandoaktable_08.glb', // detailed_realistic_model_grandoaktable_08 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_308', - path: '/models/furniture/detailed_realistic_model_grandoaktable_09.glb', // detailed_realistic_model_grandoaktable_09 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_309', - path: '/models/furniture/detailed_realistic_model_grandoaktable_10.glb', // detailed_realistic_model_grandoaktable_10 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_310', - path: '/models/furniture/detailed_realistic_model_grandoaktable_11.glb', // detailed_realistic_model_grandoaktable_11 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_311', - path: '/models/furniture/detailed_realistic_model_grandoaktable_12.glb', // detailed_realistic_model_grandoaktable_12 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_312', - path: '/models/furniture/detailed_realistic_model_grandoaktable_13.glb', // detailed_realistic_model_grandoaktable_13 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_313', - path: '/models/furniture/detailed_realistic_model_grandoaktable_14.glb', // detailed_realistic_model_grandoaktable_14 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_314', - path: '/models/furniture/detailed_realistic_model_grandoaktable_15.glb', // detailed_realistic_model_grandoaktable_15 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_315', - path: '/models/furniture/detailed_realistic_model_grandoaktable_16.glb', // detailed_realistic_model_grandoaktable_16 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_316', - path: '/models/furniture/detailed_realistic_model_grandoaktable_17.glb', // detailed_realistic_model_grandoaktable_17 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grandoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_317', - path: '/models/furniture/detailed_realistic_model_grand_01.glb', // detailed_realistic_model_grand_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'grand', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_318', - path: '/models/furniture/detailed_realistic_model_largeoaktable_01.glb', // detailed_realistic_model_largeoaktable_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_319', - path: '/models/furniture/detailed_realistic_model_largeoaktable_02.glb', // detailed_realistic_model_largeoaktable_02 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_320', - path: '/models/furniture/detailed_realistic_model_largeoaktable_03.glb', // detailed_realistic_model_largeoaktable_03 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_321', - path: '/models/furniture/detailed_realistic_model_largeoaktable_04.glb', // detailed_realistic_model_largeoaktable_04 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_322', - path: '/models/furniture/detailed_realistic_model_largeoaktable_05.glb', // detailed_realistic_model_largeoaktable_05 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_323', - path: '/models/furniture/detailed_realistic_model_largeoaktable_06.glb', // detailed_realistic_model_largeoaktable_06 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_324', - path: '/models/furniture/detailed_realistic_model_largeoaktable_07.glb', // detailed_realistic_model_largeoaktable_07 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_325', - path: '/models/furniture/detailed_realistic_model_largeoaktable_08.glb', // detailed_realistic_model_largeoaktable_08 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_326', - path: '/models/furniture/detailed_realistic_model_largeoaktable_09.glb', // detailed_realistic_model_largeoaktable_09 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_327', - path: '/models/furniture/detailed_realistic_model_largeoaktable_10.glb', // detailed_realistic_model_largeoaktable_10 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_328', - path: '/models/furniture/detailed_realistic_model_largeoaktable_11.glb', // detailed_realistic_model_largeoaktable_11 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_329', - path: '/models/furniture/detailed_realistic_model_largeoaktable_12.glb', // detailed_realistic_model_largeoaktable_12 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_330', - path: '/models/furniture/detailed_realistic_model_largeoaktable_13.glb', // detailed_realistic_model_largeoaktable_13 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_331', - path: '/models/furniture/detailed_realistic_model_largeoaktable_14.glb', // detailed_realistic_model_largeoaktable_14 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'largeoaktable', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_332', - path: '/models/furniture/detailed_realistic_model_potionshelf_01.glb', // detailed_realistic_model_potionshelf_01 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'potionshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_333', - path: '/models/furniture/detailed_realistic_model_potionshelf_02.glb', // detailed_realistic_model_potionshelf_02 - category: 'large_furniture', - keywords: ['detailed', 'realistic', 'model', 'potionshelf', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_334', - path: '/models/furniture/fantasy-town-kit_stall-bench.glb', // fantasy-town-kit_stall-bench - category: 'large_furniture', - keywords: ['fantasy', 'town', 'kit', 'stall', 'bench', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_335', - path: '/models/furniture/fantasy-town-kit_stall-stool.glb', // fantasy-town-kit_stall-stool - category: 'large_furniture', - keywords: ['fantasy', 'town', 'kit', 'stall', 'stool', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_336', - path: '/models/furniture/GlamVelvetSofa.glb', // GlamVelvetSofa - category: 'large_furniture', - keywords: ['GlamVelvetSofa', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_337', - path: '/models/furniture/graveyard-kit_bench-damaged.glb', // graveyard-kit_bench-damaged - category: 'large_furniture', - keywords: ['graveyard', 'kit', 'bench', 'damaged', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_338', - path: '/models/furniture/graveyard-kit_bench.glb', // graveyard-kit_bench - category: 'large_furniture', - keywords: ['graveyard', 'kit', 'bench', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_339', - path: '/models/furniture/IridescenceLamp.glb', // IridescenceLamp - category: 'large_furniture', - keywords: ['IridescenceLamp', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_340', - path: '/models/furniture/LightsPunctualLamp.glb', // LightsPunctualLamp - category: 'large_furniture', - keywords: ['LightsPunctualLamp', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_341', - path: '/models/furniture/modern_office_chair_padded_01.glb', // modern_office_chair_padded_01 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_342', - path: '/models/furniture/modern_office_chair_padded_02.glb', // modern_office_chair_padded_02 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_343', - path: '/models/furniture/modern_office_chair_padded_03.glb', // modern_office_chair_padded_03 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_344', - path: '/models/furniture/modern_office_chair_padded_04.glb', // modern_office_chair_padded_04 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_345', - path: '/models/furniture/modern_office_chair_padded_05.glb', // modern_office_chair_padded_05 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_346', - path: '/models/furniture/modern_office_chair_padded_06.glb', // modern_office_chair_padded_06 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_347', - path: '/models/furniture/modern_office_chair_padded_07.glb', // modern_office_chair_padded_07 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_348', - path: '/models/furniture/modern_office_chair_padded_08.glb', // modern_office_chair_padded_08 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_349', - path: '/models/furniture/modern_office_chair_padded_09.glb', // modern_office_chair_padded_09 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_350', - path: '/models/furniture/modern_office_chair_padded_10.glb', // modern_office_chair_padded_10 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_351', - path: '/models/furniture/modern_office_chair_padded_11.glb', // modern_office_chair_padded_11 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_352', - path: '/models/furniture/modern_office_chair_padded_12.glb', // modern_office_chair_padded_12 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_353', - path: '/models/furniture/modern_office_chair_padded_13.glb', // modern_office_chair_padded_13 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_354', - path: '/models/furniture/modern_office_chair_padded_14.glb', // modern_office_chair_padded_14 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_355', - path: '/models/furniture/modern_office_chair_padded_15.glb', // modern_office_chair_padded_15 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_356', - path: '/models/furniture/modern_office_chair_padded_16.glb', // modern_office_chair_padded_16 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_357', - path: '/models/furniture/modern_office_chair_padded_17.glb', // modern_office_chair_padded_17 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_358', - path: '/models/furniture/modern_office_chair_padded_18.glb', // modern_office_chair_padded_18 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_359', - path: '/models/furniture/modern_office_chair_padded_19.glb', // modern_office_chair_padded_19 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_360', - path: '/models/furniture/modern_office_chair_padded_20.glb', // modern_office_chair_padded_20 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_361', - path: '/models/furniture/modern_office_chair_padded_21.glb', // modern_office_chair_padded_21 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_362', - path: '/models/furniture/modern_office_chair_padded_22.glb', // modern_office_chair_padded_22 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_363', - path: '/models/furniture/modern_office_chair_padded_23.glb', // modern_office_chair_padded_23 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_364', - path: '/models/furniture/modern_office_chair_padded_24.glb', // modern_office_chair_padded_24 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_365', - path: '/models/furniture/modern_office_chair_padded_25.glb', // modern_office_chair_padded_25 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_366', - path: '/models/furniture/modern_office_chair_padded_26.glb', // modern_office_chair_padded_26 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_367', - path: '/models/furniture/modern_office_chair_padded_27.glb', // modern_office_chair_padded_27 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_368', - path: '/models/furniture/modern_office_chair_padded_28.glb', // modern_office_chair_padded_28 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_369', - path: '/models/furniture/modern_office_chair_padded_29.glb', // modern_office_chair_padded_29 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_370', - path: '/models/furniture/modern_office_chair_padded_30.glb', // modern_office_chair_padded_30 - category: 'large_furniture', - keywords: ['modern', 'office', 'chair', 'padded', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_371', - path: '/models/furniture/realistic_wooden_office_desk_01.glb', // realistic_wooden_office_desk_01 - category: 'large_furniture', - keywords: ['realistic', 'wooden', 'office', 'desk', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_372', - path: '/models/furniture/realistic_wooden_office_desk_02.glb', // realistic_wooden_office_desk_02 - category: 'large_furniture', - keywords: ['realistic', 'wooden', 'office', 'desk', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_373', - path: '/models/furniture/realistic_wooden_office_desk_03.glb', // realistic_wooden_office_desk_03 - category: 'large_furniture', - keywords: ['realistic', 'wooden', 'office', 'desk', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_374', - path: '/models/furniture/realistic_wooden_office_desk_04.glb', // realistic_wooden_office_desk_04 - category: 'large_furniture', - keywords: ['realistic', 'wooden', 'office', 'desk', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_375', - path: '/models/furniture/SheenChair.glb', // SheenChair - category: 'large_furniture', - keywords: ['SheenChair', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_376', - path: '/models/furniture/SheenChair_1769416633174.glb', // SheenChair_1769416633174 - category: 'large_furniture', - keywords: ['SheenChair', '1769416633174', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_377', - path: '/models/furniture/SheenWoodLeatherSofa.glb', // SheenWoodLeatherSofa - category: 'large_furniture', - keywords: ['SheenWoodLeatherSofa', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_378', - path: '/models/furniture/three.js-examples_AnisotropyBarnLamp.glb', // three.js-examples_AnisotropyBarnLamp - category: 'large_furniture', - keywords: ['three.js', 'examples', 'AnisotropyBarnLamp', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_379', - path: '/models/furniture/three.js-examples_IridescenceLamp.glb', // three.js-examples_IridescenceLamp - category: 'large_furniture', - keywords: ['three.js', 'examples', 'IridescenceLamp', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_380', - path: '/models/furniture/three.js-examples_minimalistic_modern_bedroom.glb', // three.js-examples_minimalistic_modern_bedroom - category: 'large_furniture', - keywords: ['three.js', 'examples', 'minimalistic', 'modern', 'bedroom', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_381', - path: '/models/furniture/three.js-examples_SheenChair.glb', // three.js-examples_SheenChair - category: 'large_furniture', - keywords: ['three.js', 'examples', 'SheenChair', 'furniture'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_382', - path: '/models/nature/bush1.glb', // bush1 - category: 'environment', - keywords: ['bush1', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_383', - path: '/models/nature/bush2.glb', // bush2 - category: 'environment', - keywords: ['bush2', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_384', - path: '/models/nature/bush3.glb', // bush3 - category: 'environment', - keywords: ['bush3', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_385', - path: '/models/nature/bush4.glb', // bush4 - category: 'environment', - keywords: ['bush4', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_386', - path: '/models/nature/bush5.glb', // bush5 - category: 'environment', - keywords: ['bush5', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_387', - path: '/models/nature/detailed_realistic_model_crystalball_02.glb', // detailed_realistic_model_crystalball_02 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_388', - path: '/models/nature/detailed_realistic_model_crystalball_03.glb', // detailed_realistic_model_crystalball_03 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_389', - path: '/models/nature/detailed_realistic_model_crystalball_04.glb', // detailed_realistic_model_crystalball_04 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_390', - path: '/models/nature/detailed_realistic_model_crystalball_05.glb', // detailed_realistic_model_crystalball_05 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_391', - path: '/models/nature/detailed_realistic_model_crystalball_06.glb', // detailed_realistic_model_crystalball_06 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_392', - path: '/models/nature/detailed_realistic_model_crystalball_07.glb', // detailed_realistic_model_crystalball_07 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_393', - path: '/models/nature/detailed_realistic_model_crystalball_08.glb', // detailed_realistic_model_crystalball_08 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_394', - path: '/models/nature/detailed_realistic_model_crystalball_09.glb', // detailed_realistic_model_crystalball_09 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_395', - path: '/models/nature/detailed_realistic_model_crystalball_10.glb', // detailed_realistic_model_crystalball_10 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_396', - path: '/models/nature/detailed_realistic_model_crystalball_11.glb', // detailed_realistic_model_crystalball_11 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_397', - path: '/models/nature/detailed_realistic_model_crystalball_12.glb', // detailed_realistic_model_crystalball_12 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_398', - path: '/models/nature/detailed_realistic_model_crystalball_13.glb', // detailed_realistic_model_crystalball_13 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_399', - path: '/models/nature/detailed_realistic_model_crystalball_14.glb', // detailed_realistic_model_crystalball_14 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_400', - path: '/models/nature/detailed_realistic_model_crystalball_15.glb', // detailed_realistic_model_crystalball_15 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_401', - path: '/models/nature/detailed_realistic_model_crystalball_16.glb', // detailed_realistic_model_crystalball_16 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_402', - path: '/models/nature/detailed_realistic_model_crystalball_17.glb', // detailed_realistic_model_crystalball_17 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_403', - path: '/models/nature/detailed_realistic_model_crystalball_18.glb', // detailed_realistic_model_crystalball_18 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_404', - path: '/models/nature/detailed_realistic_model_crystalball_19.glb', // detailed_realistic_model_crystalball_19 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_405', - path: '/models/nature/detailed_realistic_model_crystalball_20.glb', // detailed_realistic_model_crystalball_20 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_406', - path: '/models/nature/detailed_realistic_model_crystalball_21.glb', // detailed_realistic_model_crystalball_21 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_407', - path: '/models/nature/detailed_realistic_model_crystalball_22.glb', // detailed_realistic_model_crystalball_22 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_408', - path: '/models/nature/detailed_realistic_model_crystalball_23.glb', // detailed_realistic_model_crystalball_23 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_409', - path: '/models/nature/detailed_realistic_model_crystalball_24.glb', // detailed_realistic_model_crystalball_24 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'crystalball', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_410', - path: '/models/nature/detailed_realistic_model_stone_01.glb', // detailed_realistic_model_stone_01 - category: 'environment', - keywords: ['detailed', 'realistic', 'model', 'stone', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_411', - path: '/models/nature/DiffuseTransmissionPlant.glb', // DiffuseTransmissionPlant - category: 'environment', - keywords: ['DiffuseTransmissionPlant', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_412', - path: '/models/nature/fantasy-town-kit_pillar-stone.glb', // fantasy-town-kit_pillar-stone - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'pillar', 'stone', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_413', - path: '/models/nature/fantasy-town-kit_rock-large.glb', // fantasy-town-kit_rock-large - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'rock', 'large', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_414', - path: '/models/nature/fantasy-town-kit_rock-small.glb', // fantasy-town-kit_rock-small - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'rock', 'small', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_415', - path: '/models/nature/fantasy-town-kit_rock-wide.glb', // fantasy-town-kit_rock-wide - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'rock', 'wide', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_416', - path: '/models/nature/fantasy-town-kit_stairs-stone-corner.glb', // fantasy-town-kit_stairs-stone-corner - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'stone', 'corner', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_417', - path: '/models/nature/fantasy-town-kit_stairs-stone-handrail.glb', // fantasy-town-kit_stairs-stone-handrail - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'stone', 'handrail', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_418', - path: '/models/nature/fantasy-town-kit_stairs-stone-round.glb', // fantasy-town-kit_stairs-stone-round - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'stone', 'round', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_419', - path: '/models/nature/fantasy-town-kit_stairs-stone.glb', // fantasy-town-kit_stairs-stone - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'stone', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_420', - path: '/models/nature/fantasy-town-kit_stairs-wide-stone-handrail.glb', // fantasy-town-kit_stairs-wide-stone-handrail - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'wide', 'stone', 'handrail', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_421', - path: '/models/nature/fantasy-town-kit_stairs-wide-stone.glb', // fantasy-town-kit_stairs-wide-stone - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'wide', 'stone', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_422', - path: '/models/nature/fantasy-town-kit_tree-crooked.glb', // fantasy-town-kit_tree-crooked - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'tree', 'crooked', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_423', - path: '/models/nature/fantasy-town-kit_tree-high-crooked.glb', // fantasy-town-kit_tree-high-crooked - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'tree', 'high', 'crooked', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_424', - path: '/models/nature/fantasy-town-kit_tree-high-round.glb', // fantasy-town-kit_tree-high-round - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'tree', 'high', 'round', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_425', - path: '/models/nature/fantasy-town-kit_tree-high.glb', // fantasy-town-kit_tree-high - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'tree', 'high', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_426', - path: '/models/nature/fantasy-town-kit_tree.glb', // fantasy-town-kit_tree - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'tree', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_427', - path: '/models/nature/fantasy-town-kit_wall-window-stone.glb', // fantasy-town-kit_wall-window-stone - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'wall', 'window', 'stone', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_428', - path: '/models/nature/fantasy-town-kit_wall-wood-window-stone.glb', // fantasy-town-kit_wall-wood-window-stone - category: 'environment', - keywords: ['fantasy', 'town', 'kit', 'wall', 'wood', 'window', 'stone', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_429', - path: '/models/nature/GlassVaseFlowers.glb', // GlassVaseFlowers - category: 'environment', - keywords: ['GlassVaseFlowers', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_430', - path: '/models/nature/graveyard-kit_altar-stone.glb', // graveyard-kit_altar-stone - category: 'environment', - keywords: ['graveyard', 'kit', 'altar', 'stone', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_431', - path: '/models/nature/graveyard-kit_gravestone-bevel.glb', // graveyard-kit_gravestone-bevel - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'bevel', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_432', - path: '/models/nature/graveyard-kit_gravestone-broken.glb', // graveyard-kit_gravestone-broken - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'broken', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_433', - path: '/models/nature/graveyard-kit_gravestone-cross-large.glb', // graveyard-kit_gravestone-cross-large - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'cross', 'large', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_434', - path: '/models/nature/graveyard-kit_gravestone-cross.glb', // graveyard-kit_gravestone-cross - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'cross', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_435', - path: '/models/nature/graveyard-kit_gravestone-debris.glb', // graveyard-kit_gravestone-debris - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'debris', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_436', - path: '/models/nature/graveyard-kit_gravestone-decorative.glb', // graveyard-kit_gravestone-decorative - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'decorative', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_437', - path: '/models/nature/graveyard-kit_gravestone-roof.glb', // graveyard-kit_gravestone-roof - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'roof', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_438', - path: '/models/nature/graveyard-kit_gravestone-round.glb', // graveyard-kit_gravestone-round - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'round', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_439', - path: '/models/nature/graveyard-kit_gravestone-wide.glb', // graveyard-kit_gravestone-wide - category: 'environment', - keywords: ['graveyard', 'kit', 'gravestone', 'wide', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_440', - path: '/models/nature/graveyard-kit_rocks-tall.glb', // graveyard-kit_rocks-tall - category: 'environment', - keywords: ['graveyard', 'kit', 'rocks', 'tall', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_441', - path: '/models/nature/graveyard-kit_rocks.glb', // graveyard-kit_rocks - category: 'environment', - keywords: ['graveyard', 'kit', 'rocks', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_442', - path: '/models/nature/graveyard-kit_stone-wall-column.glb', // graveyard-kit_stone-wall-column - category: 'environment', - keywords: ['graveyard', 'kit', 'stone', 'wall', 'column', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_443', - path: '/models/nature/graveyard-kit_stone-wall-curve.glb', // graveyard-kit_stone-wall-curve - category: 'environment', - keywords: ['graveyard', 'kit', 'stone', 'wall', 'curve', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_444', - path: '/models/nature/graveyard-kit_stone-wall-damaged.glb', // graveyard-kit_stone-wall-damaged - category: 'environment', - keywords: ['graveyard', 'kit', 'stone', 'wall', 'damaged', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_445', - path: '/models/nature/graveyard-kit_stone-wall.glb', // graveyard-kit_stone-wall - category: 'environment', - keywords: ['graveyard', 'kit', 'stone', 'wall', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_446', - path: '/models/nature/platformer-kit_block-grass-corner-low.glb', // platformer-kit_block-grass-corner-low - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'corner', 'low', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_447', - path: '/models/nature/platformer-kit_block-grass-corner-overhang-low.glb', // platformer-kit_block-grass-corner-overhang-low - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'corner', 'overhang', 'low', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_448', - path: '/models/nature/platformer-kit_block-grass-corner-overhang.glb', // platformer-kit_block-grass-corner-overhang - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'corner', 'overhang', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_449', - path: '/models/nature/platformer-kit_block-grass-corner.glb', // platformer-kit_block-grass-corner - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'corner', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_450', - path: '/models/nature/platformer-kit_block-grass-curve-half.glb', // platformer-kit_block-grass-curve-half - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'curve', 'half', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_451', - path: '/models/nature/platformer-kit_block-grass-curve-low.glb', // platformer-kit_block-grass-curve-low - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'curve', 'low', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_452', - path: '/models/nature/platformer-kit_block-grass-curve.glb', // platformer-kit_block-grass-curve - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'curve', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_453', - path: '/models/nature/platformer-kit_block-grass-edge.glb', // platformer-kit_block-grass-edge - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'edge', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_454', - path: '/models/nature/platformer-kit_block-grass-hexagon.glb', // platformer-kit_block-grass-hexagon - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'hexagon', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_455', - path: '/models/nature/platformer-kit_block-grass-large-slope-narrow.glb', // platformer-kit_block-grass-large-slope-narrow - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'large', 'slope', 'narrow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_456', - path: '/models/nature/platformer-kit_block-grass-large-slope-steep-narrow.glb', // platformer-kit_block-grass-large-slope-steep-narrow - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'large', 'slope', 'steep', 'narrow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_457', - path: '/models/nature/platformer-kit_block-grass-large-slope-steep.glb', // platformer-kit_block-grass-large-slope-steep - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'large', 'slope', 'steep', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_458', - path: '/models/nature/platformer-kit_block-grass-large-slope.glb', // platformer-kit_block-grass-large-slope - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'large', 'slope', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_459', - path: '/models/nature/platformer-kit_block-grass-large-tall.glb', // platformer-kit_block-grass-large-tall - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'large', 'tall', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_460', - path: '/models/nature/platformer-kit_block-grass-large.glb', // platformer-kit_block-grass-large - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'large', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_461', - path: '/models/nature/platformer-kit_block-grass-long.glb', // platformer-kit_block-grass-long - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'long', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_462', - path: '/models/nature/platformer-kit_block-grass-low-hexagon.glb', // platformer-kit_block-grass-low-hexagon - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'low', 'hexagon', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_463', - path: '/models/nature/platformer-kit_block-grass-low-large.glb', // platformer-kit_block-grass-low-large - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'low', 'large', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_464', - path: '/models/nature/platformer-kit_block-grass-low-long.glb', // platformer-kit_block-grass-low-long - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'low', 'long', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_465', - path: '/models/nature/platformer-kit_block-grass-low-narrow.glb', // platformer-kit_block-grass-low-narrow - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'low', 'narrow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_466', - path: '/models/nature/platformer-kit_block-grass-low.glb', // platformer-kit_block-grass-low - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'low', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_467', - path: '/models/nature/platformer-kit_block-grass-narrow.glb', // platformer-kit_block-grass-narrow - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'narrow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_468', - path: '/models/nature/platformer-kit_block-grass-overhang-corner.glb', // platformer-kit_block-grass-overhang-corner - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'corner', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_469', - path: '/models/nature/platformer-kit_block-grass-overhang-edge.glb', // platformer-kit_block-grass-overhang-edge - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'edge', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_470', - path: '/models/nature/platformer-kit_block-grass-overhang-hexagon.glb', // platformer-kit_block-grass-overhang-hexagon - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'hexagon', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_471', - path: '/models/nature/platformer-kit_block-grass-overhang-large-slope-narrow.glb', // platformer-kit_block-grass-overhang-large-slope-narrow - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'large', 'slope', 'narrow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_472', - path: '/models/nature/platformer-kit_block-grass-overhang-large-slope-steep-narrow.glb', // platformer-kit_block-grass-overhang-large-slope-steep-narrow - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'large', 'slope', 'steep', 'narrow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_473', - path: '/models/nature/platformer-kit_block-grass-overhang-large-slope-steep.glb', // platformer-kit_block-grass-overhang-large-slope-steep - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'large', 'slope', 'steep', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_474', - path: '/models/nature/platformer-kit_block-grass-overhang-large-slope.glb', // platformer-kit_block-grass-overhang-large-slope - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'large', 'slope', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_475', - path: '/models/nature/platformer-kit_block-grass-overhang-large-tall.glb', // platformer-kit_block-grass-overhang-large-tall - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'large', 'tall', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_476', - path: '/models/nature/platformer-kit_block-grass-overhang-large.glb', // platformer-kit_block-grass-overhang-large - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'large', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_477', - path: '/models/nature/platformer-kit_block-grass-overhang-long.glb', // platformer-kit_block-grass-overhang-long - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'long', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_478', - path: '/models/nature/platformer-kit_block-grass-overhang-low-hexagon.glb', // platformer-kit_block-grass-overhang-low-hexagon - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'low', 'hexagon', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_479', - path: '/models/nature/platformer-kit_block-grass-overhang-low-large.glb', // platformer-kit_block-grass-overhang-low-large - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'low', 'large', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_480', - path: '/models/nature/platformer-kit_block-grass-overhang-low-long.glb', // platformer-kit_block-grass-overhang-low-long - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'low', 'long', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_481', - path: '/models/nature/platformer-kit_block-grass-overhang-low-narrow.glb', // platformer-kit_block-grass-overhang-low-narrow - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'low', 'narrow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_482', - path: '/models/nature/platformer-kit_block-grass-overhang-low.glb', // platformer-kit_block-grass-overhang-low - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'low', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_483', - path: '/models/nature/platformer-kit_block-grass-overhang-narrow.glb', // platformer-kit_block-grass-overhang-narrow - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'overhang', 'narrow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_484', - path: '/models/nature/platformer-kit_block-grass.glb', // platformer-kit_block-grass - category: 'environment', - keywords: ['platformer', 'kit', 'block', 'grass', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_485', - path: '/models/nature/platformer-kit_flowers-tall.glb', // platformer-kit_flowers-tall - category: 'environment', - keywords: ['platformer', 'kit', 'flowers', 'tall', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_486', - path: '/models/nature/platformer-kit_flowers.glb', // platformer-kit_flowers - category: 'environment', - keywords: ['platformer', 'kit', 'flowers', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_487', - path: '/models/nature/platformer-kit_grass.glb', // platformer-kit_grass - category: 'environment', - keywords: ['platformer', 'kit', 'grass', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_488', - path: '/models/nature/platformer-kit_mushrooms.glb', // platformer-kit_mushrooms - category: 'environment', - keywords: ['platformer', 'kit', 'mushrooms', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_489', - path: '/models/nature/platformer-kit_plant.glb', // platformer-kit_plant - category: 'environment', - keywords: ['platformer', 'kit', 'plant', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_490', - path: '/models/nature/platformer-kit_rocks.glb', // platformer-kit_rocks - category: 'environment', - keywords: ['platformer', 'kit', 'rocks', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_491', - path: '/models/nature/platformer-kit_stones.glb', // platformer-kit_stones - category: 'environment', - keywords: ['platformer', 'kit', 'stones', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_492', - path: '/models/nature/platformer-kit_tree-pine-small.glb', // platformer-kit_tree-pine-small - category: 'environment', - keywords: ['platformer', 'kit', 'tree', 'pine', 'small', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_493', - path: '/models/nature/platformer-kit_tree-pine-snow-small.glb', // platformer-kit_tree-pine-snow-small - category: 'environment', - keywords: ['platformer', 'kit', 'tree', 'pine', 'snow', 'small', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_494', - path: '/models/nature/platformer-kit_tree-pine-snow.glb', // platformer-kit_tree-pine-snow - category: 'environment', - keywords: ['platformer', 'kit', 'tree', 'pine', 'snow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_495', - path: '/models/nature/platformer-kit_tree-pine.glb', // platformer-kit_tree-pine - category: 'environment', - keywords: ['platformer', 'kit', 'tree', 'pine', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_496', - path: '/models/nature/platformer-kit_tree-snow.glb', // platformer-kit_tree-snow - category: 'environment', - keywords: ['platformer', 'kit', 'tree', 'snow', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_497', - path: '/models/nature/platformer-kit_tree.glb', // platformer-kit_tree - category: 'environment', - keywords: ['platformer', 'kit', 'tree', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_498', - path: '/models/nature/rocks1.glb', // rocks1 - category: 'environment', - keywords: ['rocks1', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_499', - path: '/models/nature/rocks2.glb', // rocks2 - category: 'environment', - keywords: ['rocks2', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_500', - path: '/models/nature/rocks3.glb', // rocks3 - category: 'environment', - keywords: ['rocks3', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_501', - path: '/models/nature/rocks4.glb', // rocks4 - category: 'environment', - keywords: ['rocks4', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_502', - path: '/models/nature/three.js-examples_Flower.glb', // three.js-examples_Flower - category: 'environment', - keywords: ['three.js', 'examples', 'Flower', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_503', - path: '/models/nature/three.js-examples_forest_house.glb', // three.js-examples_forest_house - category: 'environment', - keywords: ['three.js', 'examples', 'forest', 'house', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_504', - path: '/models/nature/tombstone1.glb', // tombstone1 - category: 'environment', - keywords: ['tombstone1', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_505', - path: '/models/nature/tombstone10.glb', // tombstone10 - category: 'environment', - keywords: ['tombstone10', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_506', - path: '/models/nature/tombstone11.glb', // tombstone11 - category: 'environment', - keywords: ['tombstone11', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_507', - path: '/models/nature/tombstone1Weathered.glb', // tombstone1Weathered - category: 'environment', - keywords: ['tombstone1Weathered', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_508', - path: '/models/nature/tombstone2.glb', // tombstone2 - category: 'environment', - keywords: ['tombstone2', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_509', - path: '/models/nature/tombstone2Weathered.glb', // tombstone2Weathered - category: 'environment', - keywords: ['tombstone2Weathered', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_510', - path: '/models/nature/tombstone3.glb', // tombstone3 - category: 'environment', - keywords: ['tombstone3', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_511', - path: '/models/nature/tombstone4.glb', // tombstone4 - category: 'environment', - keywords: ['tombstone4', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_512', - path: '/models/nature/tombstone5.glb', // tombstone5 - category: 'environment', - keywords: ['tombstone5', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_513', - path: '/models/nature/tombstone5Weathered.glb', // tombstone5Weathered - category: 'environment', - keywords: ['tombstone5Weathered', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_514', - path: '/models/nature/tombstone6.glb', // tombstone6 - category: 'environment', - keywords: ['tombstone6', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_515', - path: '/models/nature/tombstone7.glb', // tombstone7 - category: 'environment', - keywords: ['tombstone7', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_516', - path: '/models/nature/tombstone8.glb', // tombstone8 - category: 'environment', - keywords: ['tombstone8', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_517', - path: '/models/nature/tombstone9.glb', // tombstone9 - category: 'environment', - keywords: ['tombstone9', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_518', - path: '/models/nature/tree1.glb', // tree1 - category: 'environment', - keywords: ['tree1', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_519', - path: '/models/nature/tree2.glb', // tree2 - category: 'environment', - keywords: ['tree2', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_520', - path: '/models/nature/tree3.glb', // tree3 - category: 'environment', - keywords: ['tree3', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_521', - path: '/models/nature/tree4.glb', // tree4 - category: 'environment', - keywords: ['tree4', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_522', - path: '/models/nature/tree5.glb', // tree5 - category: 'environment', - keywords: ['tree5', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_523', - path: '/models/nature/tree6.glb', // tree6 - category: 'environment', - keywords: ['tree6', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_524', - path: '/models/nature/tree7.glb', // tree7 - category: 'environment', - keywords: ['tree7', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_525', - path: '/models/nature/tree8.glb', // tree8 - category: 'environment', - keywords: ['tree8', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_526', - path: '/models/nature/underwaterSceneRocksBarnaclesMussels.glb', // underwaterSceneRocksBarnaclesMussels - category: 'environment', - keywords: ['underwaterSceneRocksBarnaclesMussels', 'nature'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_527', - path: '/models/props/babylon-assets_BoomBox.glb', // babylon-assets_BoomBox - category: 'prop', - keywords: ['babylon', 'assets', 'BoomBox', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_528', - path: '/models/props/babylon-assets_Box.glb', // babylon-assets_Box - category: 'prop', - keywords: ['babylon', 'assets', 'Box', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_529', - path: '/models/props/babylon-assets_BoxAnimated.glb', // babylon-assets_BoxAnimated - category: 'prop', - keywords: ['babylon', 'assets', 'BoxAnimated', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_530', - path: '/models/props/babylon-assets_BoxInterleaved.glb', // babylon-assets_BoxInterleaved - category: 'prop', - keywords: ['babylon', 'assets', 'BoxInterleaved', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_531', - path: '/models/props/babylon-assets_BoxTextured.glb', // babylon-assets_BoxTextured - category: 'prop', - keywords: ['babylon', 'assets', 'BoxTextured', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_532', - path: '/models/props/babylon-assets_BoxVertexColors.glb', // babylon-assets_BoxVertexColors - category: 'prop', - keywords: ['babylon', 'assets', 'BoxVertexColors', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_533', - path: '/models/props/babylon-assets_BoxWithoutIndices.glb', // babylon-assets_BoxWithoutIndices - category: 'prop', - keywords: ['babylon', 'assets', 'BoxWithoutIndices', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_534', - path: '/models/props/babylon-assets_GearboxAssy.glb', // babylon-assets_GearboxAssy - category: 'prop', - keywords: ['babylon', 'assets', 'GearboxAssy', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_535', - path: '/models/props/barrel.glb', // barrel - category: 'prop', - keywords: ['barrel', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_536', - path: '/models/props/BoomBox.glb', // BoomBox - category: 'prop', - keywords: ['BoomBox', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_537', - path: '/models/props/BoomBox_1769416633018.glb', // BoomBox_1769416633018 - category: 'prop', - keywords: ['BoomBox', '1769416633018', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_538', - path: '/models/props/Box-draco.glb', // Box-draco - category: 'prop', - keywords: ['Box', 'draco', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_539', - path: '/models/props/Box.glb', // Box - category: 'prop', - keywords: ['Box', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_540', - path: '/models/props/BoxAnimated.glb', // BoxAnimated - category: 'prop', - keywords: ['BoxAnimated', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_541', - path: '/models/props/BoxInterleaved.glb', // BoxInterleaved - category: 'prop', - keywords: ['BoxInterleaved', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_542', - path: '/models/props/BoxTextured.glb', // BoxTextured - category: 'prop', - keywords: ['BoxTextured', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_543', - path: '/models/props/BoxTexturedNonPowerOfTwo.glb', // BoxTexturedNonPowerOfTwo - category: 'prop', - keywords: ['BoxTexturedNonPowerOfTwo', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_544', - path: '/models/props/BoxVertexColors.glb', // BoxVertexColors - category: 'prop', - keywords: ['BoxVertexColors', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_545', - path: '/models/props/box_1769416633021.glb', // box_1769416633021 - category: 'prop', - keywords: ['box', '1769416633021', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_546', - path: '/models/props/cornellBox.glb', // cornellBox - category: 'prop', - keywords: ['cornellBox', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_547', - path: '/models/props/crate1.glb', // crate1 - category: 'prop', - keywords: ['crate1', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_548', - path: '/models/props/crate2.glb', // crate2 - category: 'prop', - keywords: ['crate2', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_549', - path: '/models/props/crateStack.glb', // crateStack - category: 'prop', - keywords: ['crateStack', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_550', - path: '/models/props/detailed_realistic_model_albusdumbledore_02.glb', // detailed_realistic_model_albusdumbledore_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_551', - path: '/models/props/detailed_realistic_model_albusdumbledore_03.glb', // detailed_realistic_model_albusdumbledore_03 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_552', - path: '/models/props/detailed_realistic_model_albusdumbledore_04.glb', // detailed_realistic_model_albusdumbledore_04 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_553', - path: '/models/props/detailed_realistic_model_albusdumbledore_05.glb', // detailed_realistic_model_albusdumbledore_05 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_554', - path: '/models/props/detailed_realistic_model_albusdumbledore_06.glb', // detailed_realistic_model_albusdumbledore_06 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_555', - path: '/models/props/detailed_realistic_model_albusdumbledore_07.glb', // detailed_realistic_model_albusdumbledore_07 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_556', - path: '/models/props/detailed_realistic_model_albusdumbledore_08.glb', // detailed_realistic_model_albusdumbledore_08 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_557', - path: '/models/props/detailed_realistic_model_albusdumbledore_09.glb', // detailed_realistic_model_albusdumbledore_09 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_558', - path: '/models/props/detailed_realistic_model_albusdumbledore_10.glb', // detailed_realistic_model_albusdumbledore_10 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_559', - path: '/models/props/detailed_realistic_model_albusdumbledore_11.glb', // detailed_realistic_model_albusdumbledore_11 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_560', - path: '/models/props/detailed_realistic_model_albusdumbledore_12.glb', // detailed_realistic_model_albusdumbledore_12 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_561', - path: '/models/props/detailed_realistic_model_albusdumbledore_13.glb', // detailed_realistic_model_albusdumbledore_13 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_562', - path: '/models/props/detailed_realistic_model_albusdumbledore_14.glb', // detailed_realistic_model_albusdumbledore_14 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_563', - path: '/models/props/detailed_realistic_model_albusdumbledore_15.glb', // detailed_realistic_model_albusdumbledore_15 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_564', - path: '/models/props/detailed_realistic_model_albusdumbledore_16.glb', // detailed_realistic_model_albusdumbledore_16 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_565', - path: '/models/props/detailed_realistic_model_albusdumbledore_17.glb', // detailed_realistic_model_albusdumbledore_17 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_566', - path: '/models/props/detailed_realistic_model_albusdumbledore_18.glb', // detailed_realistic_model_albusdumbledore_18 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_567', - path: '/models/props/detailed_realistic_model_albusdumbledore_19.glb', // detailed_realistic_model_albusdumbledore_19 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_568', - path: '/models/props/detailed_realistic_model_albusdumbledore_20.glb', // detailed_realistic_model_albusdumbledore_20 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_569', - path: '/models/props/detailed_realistic_model_albusdumbledore_21.glb', // detailed_realistic_model_albusdumbledore_21 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_570', - path: '/models/props/detailed_realistic_model_albusdumbledore_22.glb', // detailed_realistic_model_albusdumbledore_22 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_571', - path: '/models/props/detailed_realistic_model_albusdumbledore_23.glb', // detailed_realistic_model_albusdumbledore_23 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_572', - path: '/models/props/detailed_realistic_model_albusdumbledore_24.glb', // detailed_realistic_model_albusdumbledore_24 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_573', - path: '/models/props/detailed_realistic_model_albusdumbledore_25.glb', // detailed_realistic_model_albusdumbledore_25 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_574', - path: '/models/props/detailed_realistic_model_albusdumbledore_26.glb', // detailed_realistic_model_albusdumbledore_26 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_575', - path: '/models/props/detailed_realistic_model_albusdumbledore_27.glb', // detailed_realistic_model_albusdumbledore_27 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_576', - path: '/models/props/detailed_realistic_model_albusdumbledore_28.glb', // detailed_realistic_model_albusdumbledore_28 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'albusdumbledore', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_577', - path: '/models/props/detailed_realistic_model_dark_01.glb', // detailed_realistic_model_dark_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'dark', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_578', - path: '/models/props/detailed_realistic_model_default_01.glb', // detailed_realistic_model_default_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'default', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_579', - path: '/models/props/detailed_realistic_model_default_02.glb', // detailed_realistic_model_default_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'default', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_580', - path: '/models/props/detailed_realistic_model_default_03.glb', // detailed_realistic_model_default_03 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'default', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_581', - path: '/models/props/detailed_realistic_model_default_04.glb', // detailed_realistic_model_default_04 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'default', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_582', - path: '/models/props/detailed_realistic_model_default_05.glb', // detailed_realistic_model_default_05 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'default', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_583', - path: '/models/props/detailed_realistic_model_floatingcandles_02.glb', // detailed_realistic_model_floatingcandles_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_584', - path: '/models/props/detailed_realistic_model_floatingcandles_03.glb', // detailed_realistic_model_floatingcandles_03 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_585', - path: '/models/props/detailed_realistic_model_floatingcandles_04.glb', // detailed_realistic_model_floatingcandles_04 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_586', - path: '/models/props/detailed_realistic_model_floatingcandles_05.glb', // detailed_realistic_model_floatingcandles_05 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_587', - path: '/models/props/detailed_realistic_model_floatingcandles_06.glb', // detailed_realistic_model_floatingcandles_06 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_588', - path: '/models/props/detailed_realistic_model_floatingcandles_07.glb', // detailed_realistic_model_floatingcandles_07 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_589', - path: '/models/props/detailed_realistic_model_floatingcandles_08.glb', // detailed_realistic_model_floatingcandles_08 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_590', - path: '/models/props/detailed_realistic_model_floatingcandles_09.glb', // detailed_realistic_model_floatingcandles_09 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_591', - path: '/models/props/detailed_realistic_model_floatingcandles_10.glb', // detailed_realistic_model_floatingcandles_10 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_592', - path: '/models/props/detailed_realistic_model_floatingcandles_11.glb', // detailed_realistic_model_floatingcandles_11 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_593', - path: '/models/props/detailed_realistic_model_floatingcandles_12.glb', // detailed_realistic_model_floatingcandles_12 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_594', - path: '/models/props/detailed_realistic_model_floatingcandles_13.glb', // detailed_realistic_model_floatingcandles_13 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_595', - path: '/models/props/detailed_realistic_model_floatingcandles_14.glb', // detailed_realistic_model_floatingcandles_14 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_596', - path: '/models/props/detailed_realistic_model_floatingcandles_15.glb', // detailed_realistic_model_floatingcandles_15 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_597', - path: '/models/props/detailed_realistic_model_floatingcandles_16.glb', // detailed_realistic_model_floatingcandles_16 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_598', - path: '/models/props/detailed_realistic_model_floatingcandles_17.glb', // detailed_realistic_model_floatingcandles_17 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_599', - path: '/models/props/detailed_realistic_model_floatingcandles_18.glb', // detailed_realistic_model_floatingcandles_18 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_600', - path: '/models/props/detailed_realistic_model_floatingcandles_19.glb', // detailed_realistic_model_floatingcandles_19 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_601', - path: '/models/props/detailed_realistic_model_floatingcandles_20.glb', // detailed_realistic_model_floatingcandles_20 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_602', - path: '/models/props/detailed_realistic_model_floatingcandles_21.glb', // detailed_realistic_model_floatingcandles_21 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_603', - path: '/models/props/detailed_realistic_model_floatingcandles_22.glb', // detailed_realistic_model_floatingcandles_22 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_604', - path: '/models/props/detailed_realistic_model_floatingcandles_23.glb', // detailed_realistic_model_floatingcandles_23 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_605', - path: '/models/props/detailed_realistic_model_floatingcandles_24.glb', // detailed_realistic_model_floatingcandles_24 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_606', - path: '/models/props/detailed_realistic_model_floatingcandles_25.glb', // detailed_realistic_model_floatingcandles_25 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_607', - path: '/models/props/detailed_realistic_model_floatingcandles_26.glb', // detailed_realistic_model_floatingcandles_26 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_608', - path: '/models/props/detailed_realistic_model_floatingcandles_27.glb', // detailed_realistic_model_floatingcandles_27 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_609', - path: '/models/props/detailed_realistic_model_floatingcandles_28.glb', // detailed_realistic_model_floatingcandles_28 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_610', - path: '/models/props/detailed_realistic_model_floatingcandles_29.glb', // detailed_realistic_model_floatingcandles_29 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_611', - path: '/models/props/detailed_realistic_model_floatingcandles_30.glb', // detailed_realistic_model_floatingcandles_30 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floatingcandles', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_612', - path: '/models/props/detailed_realistic_model_floating_01.glb', // detailed_realistic_model_floating_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floating', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_613', - path: '/models/props/detailed_realistic_model_floating_02.glb', // detailed_realistic_model_floating_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'floating', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_614', - path: '/models/props/detailed_realistic_model_ghostly_01.glb', // detailed_realistic_model_ghostly_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'ghostly', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_615', - path: '/models/props/detailed_realistic_model_glass_01.glb', // detailed_realistic_model_glass_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'glass', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_616', - path: '/models/props/detailed_realistic_model_glass_02.glb', // detailed_realistic_model_glass_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'glass', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_617', - path: '/models/props/detailed_realistic_model_goldensnitch_01.glb', // detailed_realistic_model_goldensnitch_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'goldensnitch', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_618', - path: '/models/props/detailed_realistic_model_goldensnitch_02.glb', // detailed_realistic_model_goldensnitch_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'goldensnitch', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_619', - path: '/models/props/detailed_realistic_model_hogwarts_01.glb', // detailed_realistic_model_hogwarts_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'hogwarts', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_620', - path: '/models/props/detailed_realistic_model_leatherbound_01.glb', // detailed_realistic_model_leatherbound_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'leatherbound', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_621', - path: '/models/props/detailed_realistic_model_leatherbound_02.glb', // detailed_realistic_model_leatherbound_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'leatherbound', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_622', - path: '/models/props/detailed_realistic_model_magic_01.glb', // detailed_realistic_model_magic_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'magic', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_623', - path: '/models/props/detailed_realistic_model_portrait_01.glb', // detailed_realistic_model_portrait_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'portrait', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_624', - path: '/models/props/detailed_realistic_model_portrait_02.glb', // detailed_realistic_model_portrait_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'portrait', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_625', - path: '/models/props/detailed_realistic_model_potions_01.glb', // detailed_realistic_model_potions_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'potions', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_626', - path: '/models/props/detailed_realistic_model_potions_02.glb', // detailed_realistic_model_potions_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'potions', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_627', - path: '/models/props/detailed_realistic_model_sleeping_01.glb', // detailed_realistic_model_sleeping_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sleeping', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_628', - path: '/models/props/detailed_realistic_model_solid_01.glb', // detailed_realistic_model_solid_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_629', - path: '/models/props/detailed_realistic_model_solid_02.glb', // detailed_realistic_model_solid_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_630', - path: '/models/props/detailed_realistic_model_solid_03.glb', // detailed_realistic_model_solid_03 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_631', - path: '/models/props/detailed_realistic_model_solid_04.glb', // detailed_realistic_model_solid_04 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_632', - path: '/models/props/detailed_realistic_model_solid_05.glb', // detailed_realistic_model_solid_05 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_633', - path: '/models/props/detailed_realistic_model_solid_06.glb', // detailed_realistic_model_solid_06 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_634', - path: '/models/props/detailed_realistic_model_solid_07.glb', // detailed_realistic_model_solid_07 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_635', - path: '/models/props/detailed_realistic_model_solid_08.glb', // detailed_realistic_model_solid_08 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_636', - path: '/models/props/detailed_realistic_model_solid_09.glb', // detailed_realistic_model_solid_09 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_637', - path: '/models/props/detailed_realistic_model_solid_10.glb', // detailed_realistic_model_solid_10 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_638', - path: '/models/props/detailed_realistic_model_solid_11.glb', // detailed_realistic_model_solid_11 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_639', - path: '/models/props/detailed_realistic_model_solid_12.glb', // detailed_realistic_model_solid_12 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_640', - path: '/models/props/detailed_realistic_model_solid_13.glb', // detailed_realistic_model_solid_13 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_641', - path: '/models/props/detailed_realistic_model_solid_14.glb', // detailed_realistic_model_solid_14 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_642', - path: '/models/props/detailed_realistic_model_solid_15.glb', // detailed_realistic_model_solid_15 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_643', - path: '/models/props/detailed_realistic_model_solid_16.glb', // detailed_realistic_model_solid_16 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_644', - path: '/models/props/detailed_realistic_model_solid_17.glb', // detailed_realistic_model_solid_17 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_645', - path: '/models/props/detailed_realistic_model_solid_18.glb', // detailed_realistic_model_solid_18 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'solid', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_646', - path: '/models/props/detailed_realistic_model_sortinghat_01.glb', // detailed_realistic_model_sortinghat_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_647', - path: '/models/props/detailed_realistic_model_sortinghat_02.glb', // detailed_realistic_model_sortinghat_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_648', - path: '/models/props/detailed_realistic_model_sortinghat_03.glb', // detailed_realistic_model_sortinghat_03 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_649', - path: '/models/props/detailed_realistic_model_sortinghat_04.glb', // detailed_realistic_model_sortinghat_04 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_650', - path: '/models/props/detailed_realistic_model_sortinghat_05.glb', // detailed_realistic_model_sortinghat_05 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_651', - path: '/models/props/detailed_realistic_model_sortinghat_06.glb', // detailed_realistic_model_sortinghat_06 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_652', - path: '/models/props/detailed_realistic_model_sortinghat_07.glb', // detailed_realistic_model_sortinghat_07 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_653', - path: '/models/props/detailed_realistic_model_sortinghat_08.glb', // detailed_realistic_model_sortinghat_08 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_654', - path: '/models/props/detailed_realistic_model_sortinghat_09.glb', // detailed_realistic_model_sortinghat_09 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_655', - path: '/models/props/detailed_realistic_model_sortinghat_10.glb', // detailed_realistic_model_sortinghat_10 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_656', - path: '/models/props/detailed_realistic_model_sortinghat_11.glb', // detailed_realistic_model_sortinghat_11 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_657', - path: '/models/props/detailed_realistic_model_sortinghat_12.glb', // detailed_realistic_model_sortinghat_12 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_658', - path: '/models/props/detailed_realistic_model_sortinghat_13.glb', // detailed_realistic_model_sortinghat_13 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_659', - path: '/models/props/detailed_realistic_model_sortinghat_14.glb', // detailed_realistic_model_sortinghat_14 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_660', - path: '/models/props/detailed_realistic_model_sortinghat_15.glb', // detailed_realistic_model_sortinghat_15 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_661', - path: '/models/props/detailed_realistic_model_sortinghat_16.glb', // detailed_realistic_model_sortinghat_16 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sortinghat', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_662', - path: '/models/props/detailed_realistic_model_sorting_01.glb', // detailed_realistic_model_sorting_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sorting', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_663', - path: '/models/props/detailed_realistic_model_sorting_01_1769413346495.glb', // detailed_realistic_model_sorting_01_1769413346495 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sorting', '1769413346495', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_664', - path: '/models/props/detailed_realistic_model_sorting_02.glb', // detailed_realistic_model_sorting_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'sorting', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_665', - path: '/models/props/detailed_realistic_model_stack_01.glb', // detailed_realistic_model_stack_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'stack', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_666', - path: '/models/props/detailed_realistic_model_stack_02.glb', // detailed_realistic_model_stack_02 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'stack', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_667', - path: '/models/props/detailed_realistic_model_test_01.glb', // detailed_realistic_model_test_01 - category: 'prop', - keywords: ['detailed', 'realistic', 'model', 'test', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_668', - path: '/models/props/ExplodingBarrel.glb', // ExplodingBarrel - category: 'prop', - keywords: ['ExplodingBarrel', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_669', - path: '/models/props/gemOnly.glb', // gemOnly - category: 'prop', - keywords: ['gemOnly', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_670', - path: '/models/props/GlassHurricaneCandleHolder.glb', // GlassHurricaneCandleHolder - category: 'prop', - keywords: ['GlassHurricaneCandleHolder', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_671', - path: '/models/props/graveyard-kit_candle-multiple.glb', // graveyard-kit_candle-multiple - category: 'prop', - keywords: ['graveyard', 'kit', 'candle', 'multiple', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_672', - path: '/models/props/graveyard-kit_candle.glb', // graveyard-kit_candle - category: 'prop', - keywords: ['graveyard', 'kit', 'candle', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_673', - path: '/models/props/graveyard-kit_lantern-candle.glb', // graveyard-kit_lantern-candle - category: 'prop', - keywords: ['graveyard', 'kit', 'lantern', 'candle', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_674', - path: '/models/props/platformer-kit_barrel.glb', // platformer-kit_barrel - category: 'prop', - keywords: ['platformer', 'kit', 'barrel', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_675', - path: '/models/props/platformer-kit_chest.glb', // platformer-kit_chest - category: 'prop', - keywords: ['platformer', 'kit', 'chest', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_676', - path: '/models/props/platformer-kit_coin-bronze.glb', // platformer-kit_coin-bronze - category: 'prop', - keywords: ['platformer', 'kit', 'coin', 'bronze', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_677', - path: '/models/props/platformer-kit_coin-gold.glb', // platformer-kit_coin-gold - category: 'prop', - keywords: ['platformer', 'kit', 'coin', 'gold', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_678', - path: '/models/props/platformer-kit_coin-silver.glb', // platformer-kit_coin-silver - category: 'prop', - keywords: ['platformer', 'kit', 'coin', 'silver', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_679', - path: '/models/props/platformer-kit_crate-item-strong.glb', // platformer-kit_crate-item-strong - category: 'prop', - keywords: ['platformer', 'kit', 'crate', 'item', 'strong', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_680', - path: '/models/props/platformer-kit_crate-item.glb', // platformer-kit_crate-item - category: 'prop', - keywords: ['platformer', 'kit', 'crate', 'item', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_681', - path: '/models/props/platformer-kit_crate-strong.glb', // platformer-kit_crate-strong - category: 'prop', - keywords: ['platformer', 'kit', 'crate', 'strong', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_682', - path: '/models/props/platformer-kit_crate.glb', // platformer-kit_crate - category: 'prop', - keywords: ['platformer', 'kit', 'crate', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_683', - path: '/models/props/platformer-kit_flag.glb', // platformer-kit_flag - category: 'prop', - keywords: ['platformer', 'kit', 'flag', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_684', - path: '/models/props/platformer-kit_key.glb', // platformer-kit_key - category: 'prop', - keywords: ['platformer', 'kit', 'key', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_685', - path: '/models/props/three.js-examples_BoomBox.glb', // three.js-examples_BoomBox - category: 'prop', - keywords: ['three.js', 'examples', 'BoomBox', 'props'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_686', - path: '/models/samples/ABeautifulGame.glb', // ABeautifulGame - category: 'prop', - keywords: ['ABeautifulGame', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_687', - path: '/models/samples/alien.glb', // alien - category: 'prop', - keywords: ['alien', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_688', - path: '/models/samples/AnimatedColorsCube.glb', // AnimatedColorsCube - category: 'prop', - keywords: ['AnimatedColorsCube', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_689', - path: '/models/samples/AnimationPointerUVs.glb', // AnimationPointerUVs - category: 'prop', - keywords: ['AnimationPointerUVs', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_690', - path: '/models/samples/AntiqueCamera.glb', // AntiqueCamera - category: 'prop', - keywords: ['AntiqueCamera', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_691', - path: '/models/samples/Avocado.glb', // Avocado - category: 'prop', - keywords: ['Avocado', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_692', - path: '/models/samples/babylon-assets_2CylinderEngine.glb', // babylon-assets_2CylinderEngine - category: 'prop', - keywords: ['babylon', 'assets', '2CylinderEngine', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_693', - path: '/models/samples/babylon-assets_Avocado.glb', // babylon-assets_Avocado - category: 'prop', - keywords: ['babylon', 'assets', 'Avocado', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_694', - path: '/models/samples/babylon-assets_BrainStem.glb', // babylon-assets_BrainStem - category: 'prop', - keywords: ['babylon', 'assets', 'BrainStem', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_695', - path: '/models/samples/babylon-assets_Corset.glb', // babylon-assets_Corset - category: 'prop', - keywords: ['babylon', 'assets', 'Corset', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_696', - path: '/models/samples/babylon-assets_Duck.glb', // babylon-assets_Duck - category: 'prop', - keywords: ['babylon', 'assets', 'Duck', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_697', - path: '/models/samples/babylon-assets_Lantern.glb', // babylon-assets_Lantern - category: 'prop', - keywords: ['babylon', 'assets', 'Lantern', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_698', - path: '/models/samples/babylon-assets_MetalRoughSpheres.glb', // babylon-assets_MetalRoughSpheres - category: 'prop', - keywords: ['babylon', 'assets', 'MetalRoughSpheres', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_699', - path: '/models/samples/babylon-assets_RiggedFigure.glb', // babylon-assets_RiggedFigure - category: 'prop', - keywords: ['babylon', 'assets', 'RiggedFigure', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_700', - path: '/models/samples/babylon-assets_RiggedSimple.glb', // babylon-assets_RiggedSimple - category: 'prop', - keywords: ['babylon', 'assets', 'RiggedSimple', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_701', - path: '/models/samples/babylon-assets_SmilingFace.glb', // babylon-assets_SmilingFace - category: 'prop', - keywords: ['babylon', 'assets', 'SmilingFace', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_702', - path: '/models/samples/babylon-assets_TextureSettingsTest.glb', // babylon-assets_TextureSettingsTest - category: 'prop', - keywords: ['babylon', 'assets', 'TextureSettingsTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_703', - path: '/models/samples/babylon-assets_VC.glb', // babylon-assets_VC - category: 'prop', - keywords: ['babylon', 'assets', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_704', - path: '/models/samples/babylon-assets_WalkingLady.glb', // babylon-assets_WalkingLady - category: 'prop', - keywords: ['babylon', 'assets', 'WalkingLady', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_705', - path: '/models/samples/babylonBuoy.glb', // babylonBuoy - category: 'prop', - keywords: ['babylonBuoy', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_706', - path: '/models/samples/BabylonShaderBall_Simple.glb', // BabylonShaderBall_Simple - category: 'prop', - keywords: ['BabylonShaderBall', 'Simple', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_707', - path: '/models/samples/ballMesh.glb', // ballMesh - category: 'prop', - keywords: ['ballMesh', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_708', - path: '/models/samples/bars.glb', // bars - category: 'prop', - keywords: ['bars', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_709', - path: '/models/samples/Bee.glb', // Bee - category: 'prop', - keywords: ['Bee', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_710', - path: '/models/samples/blackPearl.glb', // blackPearl - category: 'prop', - keywords: ['blackPearl', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_711', - path: '/models/samples/BrainStem.glb', // BrainStem - category: 'prop', - keywords: ['BrainStem', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_712', - path: '/models/samples/cannon.glb', // cannon - category: 'prop', - keywords: ['cannon', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_713', - path: '/models/samples/ceiling corner.glb', // ceiling corner - category: 'prop', - keywords: ['ceiling', 'corner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_714', - path: '/models/samples/ceiling straight.glb', // ceiling straight - category: 'prop', - keywords: ['ceiling', 'straight', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_715', - path: '/models/samples/ceiling.glb', // ceiling - category: 'prop', - keywords: ['ceiling', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_716', - path: '/models/samples/ChronographWatch.glb', // ChronographWatch - category: 'prop', - keywords: ['ChronographWatch', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_717', - path: '/models/samples/clothFolds.glb', // clothFolds - category: 'prop', - keywords: ['clothFolds', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_718', - path: '/models/samples/cloth_meshV1.glb', // cloth_meshV1 - category: 'prop', - keywords: ['cloth', 'meshV1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_719', - path: '/models/samples/cloth_meshV2.glb', // cloth_meshV2 - category: 'prop', - keywords: ['cloth', 'meshV2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_720', - path: '/models/samples/cloth_meshV3.glb', // cloth_meshV3 - category: 'prop', - keywords: ['cloth', 'meshV3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_721', - path: '/models/samples/cloth_meshV4.glb', // cloth_meshV4 - category: 'prop', - keywords: ['cloth', 'meshV4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_722', - path: '/models/samples/cloth_meshV5.glb', // cloth_meshV5 - category: 'prop', - keywords: ['cloth', 'meshV5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_723', - path: '/models/samples/cloth_meshV6.glb', // cloth_meshV6 - category: 'prop', - keywords: ['cloth', 'meshV6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_724', - path: '/models/samples/cloth_meshV7.glb', // cloth_meshV7 - category: 'prop', - keywords: ['cloth', 'meshV7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_725', - path: '/models/samples/cloth_meshV8.glb', // cloth_meshV8 - category: 'prop', - keywords: ['cloth', 'meshV8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_726', - path: '/models/samples/cloth_meshV9.glb', // cloth_meshV9 - category: 'prop', - keywords: ['cloth', 'meshV9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_727', - path: '/models/samples/coffin.glb', // coffin - category: 'prop', - keywords: ['coffin', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_728', - path: '/models/samples/coffinOpen.glb', // coffinOpen - category: 'prop', - keywords: ['coffinOpen', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_729', - path: '/models/samples/CommercialRefrigerator.glb', // CommercialRefrigerator - category: 'prop', - keywords: ['CommercialRefrigerator', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_730', - path: '/models/samples/corner.glb', // corner - category: 'prop', - keywords: ['corner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_731', - path: '/models/samples/corner2.glb', // corner2 - category: 'prop', - keywords: ['corner2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_732', - path: '/models/samples/Corset.glb', // Corset - category: 'prop', - keywords: ['Corset', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_733', - path: '/models/samples/cottage.glb', // cottage - category: 'prop', - keywords: ['cottage', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_734', - path: '/models/samples/D20_Animation.glb', // D20_Animation - category: 'prop', - keywords: ['D20', 'Animation', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_735', - path: '/models/samples/DirectionalLight.glb', // DirectionalLight - category: 'prop', - keywords: ['DirectionalLight', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_736', - path: '/models/samples/Duck.glb', // Duck - category: 'prop', - keywords: ['Duck', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_737', - path: '/models/samples/emoji_heart.glb', // emoji_heart - category: 'prop', - keywords: ['emoji', 'heart', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_738', - path: '/models/samples/fantasy-town-kit_blade.glb', // fantasy-town-kit_blade - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'blade', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_739', - path: '/models/samples/fantasy-town-kit_fountain-corner-inner.glb', // fantasy-town-kit_fountain-corner-inner - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'corner', 'inner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_740', - path: '/models/samples/fantasy-town-kit_fountain-curved.glb', // fantasy-town-kit_fountain-curved - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'curved', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_741', - path: '/models/samples/fantasy-town-kit_fountain-round-detail.glb', // fantasy-town-kit_fountain-round-detail - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'round', 'detail', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_742', - path: '/models/samples/fantasy-town-kit_fountain-round.glb', // fantasy-town-kit_fountain-round - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'round', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_743', - path: '/models/samples/fantasy-town-kit_fountain-square-detail.glb', // fantasy-town-kit_fountain-square-detail - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'square', 'detail', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_744', - path: '/models/samples/fantasy-town-kit_fountain-square.glb', // fantasy-town-kit_fountain-square - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'square', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_745', - path: '/models/samples/fantasy-town-kit_hedge-curved.glb', // fantasy-town-kit_hedge-curved - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'hedge', 'curved', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_746', - path: '/models/samples/fantasy-town-kit_hedge-large-curved.glb', // fantasy-town-kit_hedge-large-curved - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'hedge', 'large', 'curved', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_747', - path: '/models/samples/fantasy-town-kit_lantern.glb', // fantasy-town-kit_lantern - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'lantern', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_748', - path: '/models/samples/fantasy-town-kit_planks-opening.glb', // fantasy-town-kit_planks-opening - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'planks', 'opening', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_749', - path: '/models/samples/fantasy-town-kit_planks.glb', // fantasy-town-kit_planks - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'planks', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_750', - path: '/models/samples/fantasy-town-kit_road-bend.glb', // fantasy-town-kit_road-bend - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', 'bend', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_751', - path: '/models/samples/fantasy-town-kit_road-corner-inner.glb', // fantasy-town-kit_road-corner-inner - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', 'corner', 'inner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_752', - path: '/models/samples/fantasy-town-kit_road-corner.glb', // fantasy-town-kit_road-corner - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', 'corner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_753', - path: '/models/samples/fantasy-town-kit_stairs-wide-wood-handrail.glb', // fantasy-town-kit_stairs-wide-wood-handrail - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'wide', 'wood', 'handrail', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_754', - path: '/models/samples/fantasy-town-kit_stairs-wide-wood.glb', // fantasy-town-kit_stairs-wide-wood - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'wide', 'wood', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_755', - path: '/models/samples/fantasy-town-kit_stairs-wood-handrail.glb', // fantasy-town-kit_stairs-wood-handrail - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'wood', 'handrail', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_756', - path: '/models/samples/fantasy-town-kit_stairs-wood.glb', // fantasy-town-kit_stairs-wood - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'wood', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_757', - path: '/models/samples/fantasy-town-kit_stall-green.glb', // fantasy-town-kit_stall-green - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stall', 'green', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_758', - path: '/models/samples/fantasy-town-kit_stall-red.glb', // fantasy-town-kit_stall-red - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stall', 'red', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_759', - path: '/models/samples/fantasy-town-kit_stall.glb', // fantasy-town-kit_stall - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_760', - path: '/models/samples/fantasy-town-kit_watermill-wide.glb', // fantasy-town-kit_watermill-wide - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'watermill', 'wide', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_761', - path: '/models/samples/fantasy-town-kit_watermill.glb', // fantasy-town-kit_watermill - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'watermill', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_762', - path: '/models/samples/fantasy-town-kit_wheel.glb', // fantasy-town-kit_wheel - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'wheel', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_763', - path: '/models/samples/fantasy-town-kit_windmill.glb', // fantasy-town-kit_windmill - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'windmill', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_764', - path: '/models/samples/Gap.glb', // Gap - category: 'prop', - keywords: ['Gap', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_765', - path: '/models/samples/gothic_cloister_corner.glb', // gothic_cloister_corner - category: 'prop', - keywords: ['gothic', 'cloister', 'corner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_766', - path: '/models/samples/graveyard-kit_altar-wood.glb', // graveyard-kit_altar-wood - category: 'prop', - keywords: ['graveyard', 'kit', 'altar', 'wood', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_767', - path: '/models/samples/graveyard-kit_border-pillar.glb', // graveyard-kit_border-pillar - category: 'prop', - keywords: ['graveyard', 'kit', 'border', 'pillar', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_768', - path: '/models/samples/graveyard-kit_coffin-old.glb', // graveyard-kit_coffin-old - category: 'prop', - keywords: ['graveyard', 'kit', 'coffin', 'old', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_769', - path: '/models/samples/graveyard-kit_coffin.glb', // graveyard-kit_coffin - category: 'prop', - keywords: ['graveyard', 'kit', 'coffin', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_770', - path: '/models/samples/graveyard-kit_cross-wood.glb', // graveyard-kit_cross-wood - category: 'prop', - keywords: ['graveyard', 'kit', 'cross', 'wood', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_771', - path: '/models/samples/graveyard-kit_cross.glb', // graveyard-kit_cross - category: 'prop', - keywords: ['graveyard', 'kit', 'cross', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_772', - path: '/models/samples/graveyard-kit_crypt-a.glb', // graveyard-kit_crypt-a - category: 'prop', - keywords: ['graveyard', 'kit', 'crypt', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_773', - path: '/models/samples/graveyard-kit_crypt-b.glb', // graveyard-kit_crypt-b - category: 'prop', - keywords: ['graveyard', 'kit', 'crypt', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_774', - path: '/models/samples/graveyard-kit_crypt-large.glb', // graveyard-kit_crypt-large - category: 'prop', - keywords: ['graveyard', 'kit', 'crypt', 'large', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_775', - path: '/models/samples/graveyard-kit_crypt-small.glb', // graveyard-kit_crypt-small - category: 'prop', - keywords: ['graveyard', 'kit', 'crypt', 'small', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_776', - path: '/models/samples/graveyard-kit_crypt.glb', // graveyard-kit_crypt - category: 'prop', - keywords: ['graveyard', 'kit', 'crypt', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_777', - path: '/models/samples/graveyard-kit_debris-wood.glb', // graveyard-kit_debris-wood - category: 'prop', - keywords: ['graveyard', 'kit', 'debris', 'wood', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_778', - path: '/models/samples/graveyard-kit_debris.glb', // graveyard-kit_debris - category: 'prop', - keywords: ['graveyard', 'kit', 'debris', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_779', - path: '/models/samples/graveyard-kit_detail-chalice.glb', // graveyard-kit_detail-chalice - category: 'prop', - keywords: ['graveyard', 'kit', 'detail', 'chalice', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_780', - path: '/models/samples/graveyard-kit_fire-basket.glb', // graveyard-kit_fire-basket - category: 'prop', - keywords: ['graveyard', 'kit', 'fire', 'basket', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_781', - path: '/models/samples/graveyard-kit_grave-border.glb', // graveyard-kit_grave-border - category: 'prop', - keywords: ['graveyard', 'kit', 'grave', 'border', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_782', - path: '/models/samples/graveyard-kit_grave.glb', // graveyard-kit_grave - category: 'prop', - keywords: ['graveyard', 'kit', 'grave', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_783', - path: '/models/samples/graveyard-kit_hay-bale-bundled.glb', // graveyard-kit_hay-bale-bundled - category: 'prop', - keywords: ['graveyard', 'kit', 'hay', 'bale', 'bundled', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_784', - path: '/models/samples/graveyard-kit_hay-bale.glb', // graveyard-kit_hay-bale - category: 'prop', - keywords: ['graveyard', 'kit', 'hay', 'bale', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_785', - path: '/models/samples/graveyard-kit_lantern-glass.glb', // graveyard-kit_lantern-glass - category: 'prop', - keywords: ['graveyard', 'kit', 'lantern', 'glass', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_786', - path: '/models/samples/graveyard-kit_lightpost-all.glb', // graveyard-kit_lightpost-all - category: 'prop', - keywords: ['graveyard', 'kit', 'lightpost', 'all', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_787', - path: '/models/samples/graveyard-kit_lightpost-double.glb', // graveyard-kit_lightpost-double - category: 'prop', - keywords: ['graveyard', 'kit', 'lightpost', 'double', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_788', - path: '/models/samples/graveyard-kit_lightpost-single.glb', // graveyard-kit_lightpost-single - category: 'prop', - keywords: ['graveyard', 'kit', 'lightpost', 'single', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_789', - path: '/models/samples/graveyard-kit_pillar-large.glb', // graveyard-kit_pillar-large - category: 'prop', - keywords: ['graveyard', 'kit', 'pillar', 'large', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_790', - path: '/models/samples/graveyard-kit_pillar-small.glb', // graveyard-kit_pillar-small - category: 'prop', - keywords: ['graveyard', 'kit', 'pillar', 'small', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_791', - path: '/models/samples/graveyard-kit_pillar-square.glb', // graveyard-kit_pillar-square - category: 'prop', - keywords: ['graveyard', 'kit', 'pillar', 'square', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_792', - path: '/models/samples/graveyard-kit_pine-crooked.glb', // graveyard-kit_pine-crooked - category: 'prop', - keywords: ['graveyard', 'kit', 'pine', 'crooked', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_793', - path: '/models/samples/graveyard-kit_pine-fall-crooked.glb', // graveyard-kit_pine-fall-crooked - category: 'prop', - keywords: ['graveyard', 'kit', 'pine', 'fall', 'crooked', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_794', - path: '/models/samples/graveyard-kit_pine-fall.glb', // graveyard-kit_pine-fall - category: 'prop', - keywords: ['graveyard', 'kit', 'pine', 'fall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_795', - path: '/models/samples/graveyard-kit_pine.glb', // graveyard-kit_pine - category: 'prop', - keywords: ['graveyard', 'kit', 'pine', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_796', - path: '/models/samples/graveyard-kit_pumpkin-tall.glb', // graveyard-kit_pumpkin-tall - category: 'prop', - keywords: ['graveyard', 'kit', 'pumpkin', 'tall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_797', - path: '/models/samples/graveyard-kit_pumpkin.glb', // graveyard-kit_pumpkin - category: 'prop', - keywords: ['graveyard', 'kit', 'pumpkin', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_798', - path: '/models/samples/graveyard-kit_road.glb', // graveyard-kit_road - category: 'prop', - keywords: ['graveyard', 'kit', 'road', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_799', - path: '/models/samples/graveyard-kit_shovel-dirt.glb', // graveyard-kit_shovel-dirt - category: 'prop', - keywords: ['graveyard', 'kit', 'shovel', 'dirt', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_800', - path: '/models/samples/graveyard-kit_shovel.glb', // graveyard-kit_shovel - category: 'prop', - keywords: ['graveyard', 'kit', 'shovel', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_801', - path: '/models/samples/graveyard-kit_trunk-long.glb', // graveyard-kit_trunk-long - category: 'prop', - keywords: ['graveyard', 'kit', 'trunk', 'long', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_802', - path: '/models/samples/graveyard-kit_trunk.glb', // graveyard-kit_trunk - category: 'prop', - keywords: ['graveyard', 'kit', 'trunk', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_803', - path: '/models/samples/graveyard-kit_urn-round.glb', // graveyard-kit_urn-round - category: 'prop', - keywords: ['graveyard', 'kit', 'urn', 'round', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_804', - path: '/models/samples/graveyard-kit_urn-square.glb', // graveyard-kit_urn-square - category: 'prop', - keywords: ['graveyard', 'kit', 'urn', 'square', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_805', - path: '/models/samples/graveyardScene.glb', // graveyardScene - category: 'prop', - keywords: ['graveyardScene', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_806', - path: '/models/samples/greenEnergyBall.glb', // greenEnergyBall - category: 'prop', - keywords: ['greenEnergyBall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_807', - path: '/models/samples/greySnapper_vertColor.glb', // greySnapper_vertColor - category: 'prop', - keywords: ['greySnapper', 'vertColor', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_808', - path: '/models/samples/HarryPotter_Hat_Test.glb', // HarryPotter_Hat_Test - category: 'prop', - keywords: ['HarryPotter', 'Hat', 'Test', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_809', - path: '/models/samples/head.glb', // head - category: 'prop', - keywords: ['head', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_810', - path: '/models/samples/hexTile.glb', // hexTile - category: 'prop', - keywords: ['hexTile', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_811', - path: '/models/samples/hogwarts_corridor.glb', // hogwarts_corridor - category: 'prop', - keywords: ['hogwarts', 'corridor', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_812', - path: '/models/samples/holiday2021.glb', // holiday2021 - category: 'prop', - keywords: ['holiday2021', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_813', - path: '/models/samples/hollowLog.glb', // hollowLog - category: 'prop', - keywords: ['hollowLog', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_814', - path: '/models/samples/inn.glb', // inn - category: 'prop', - keywords: ['inn', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_815', - path: '/models/samples/IridescentDishWithOlives.glb', // IridescentDishWithOlives - category: 'prop', - keywords: ['IridescentDishWithOlives', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_816', - path: '/models/samples/iridescentSphere.glb', // iridescentSphere - category: 'prop', - keywords: ['iridescentSphere', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_817', - path: '/models/samples/KHR_materials_volume_testing.glb', // KHR_materials_volume_testing - category: 'prop', - keywords: ['KHR', 'materials', 'volume', 'testing', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_818', - path: '/models/samples/Lantern.glb', // Lantern - category: 'prop', - keywords: ['Lantern', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_819', - path: '/models/samples/left.glb', // left - category: 'prop', - keywords: ['left', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_820', - path: '/models/samples/lightFixture.glb', // lightFixture - category: 'prop', - keywords: ['lightFixture', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_821', - path: '/models/samples/lightPaddle.glb', // lightPaddle - category: 'prop', - keywords: ['lightPaddle', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_822', - path: '/models/samples/lightPost1.glb', // lightPost1 - category: 'prop', - keywords: ['lightPost1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_823', - path: '/models/samples/lightPost2.glb', // lightPost2 - category: 'prop', - keywords: ['lightPost2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_824', - path: '/models/samples/lightPost3.glb', // lightPost3 - category: 'prop', - keywords: ['lightPost3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_825', - path: '/models/samples/logSaw.glb', // logSaw - category: 'prop', - keywords: ['logSaw', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_826', - path: '/models/samples/l_hand_lhs.glb', // l_hand_lhs - category: 'prop', - keywords: ['hand', 'lhs', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_827', - path: '/models/samples/l_hand_rhs.glb', // l_hand_rhs - category: 'prop', - keywords: ['hand', 'rhs', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_828', - path: '/models/samples/marineGround.glb', // marineGround - category: 'prop', - keywords: ['marineGround', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_829', - path: '/models/samples/mausoleumLarge.glb', // mausoleumLarge - category: 'prop', - keywords: ['mausoleumLarge', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_830', - path: '/models/samples/mausoleumLargeSkewed.glb', // mausoleumLargeSkewed - category: 'prop', - keywords: ['mausoleumLargeSkewed', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_831', - path: '/models/samples/mausoleumSmall.glb', // mausoleumSmall - category: 'prop', - keywords: ['mausoleumSmall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_832', - path: '/models/samples/mausoleumSmallSkewed.glb', // mausoleumSmallSkewed - category: 'prop', - keywords: ['mausoleumSmallSkewed', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_833', - path: '/models/samples/MetalRoughSpheres.glb', // MetalRoughSpheres - category: 'prop', - keywords: ['MetalRoughSpheres', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_834', - path: '/models/samples/MetalRoughSpheresNoTextures.glb', // MetalRoughSpheresNoTextures - category: 'prop', - keywords: ['MetalRoughSpheresNoTextures', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_835', - path: '/models/samples/miniBar2.glb', // miniBar2 - category: 'prop', - keywords: ['miniBar2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_836', - path: '/models/samples/model_0093b022-794.glb', // model_0093b022-794 - category: 'prop', - keywords: ['model', '0093b022', '794', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_837', - path: '/models/samples/model_00f59c8c-52a.glb', // model_00f59c8c-52a - category: 'prop', - keywords: ['model', '00f59c8c', '52a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_838', - path: '/models/samples/model_01510687-984.glb', // model_01510687-984 - category: 'prop', - keywords: ['model', '01510687', '984', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_839', - path: '/models/samples/model_016a52a6-dce.glb', // model_016a52a6-dce - category: 'prop', - keywords: ['model', '016a52a6', 'dce', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_840', - path: '/models/samples/model_01843fe1-0d8.glb', // model_01843fe1-0d8 - category: 'prop', - keywords: ['model', '01843fe1', '0d8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_841', - path: '/models/samples/model_018e3909-86a.glb', // model_018e3909-86a - category: 'prop', - keywords: ['model', '018e3909', '86a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_842', - path: '/models/samples/model_01d40f41-443.glb', // model_01d40f41-443 - category: 'prop', - keywords: ['model', '01d40f41', '443', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_843', - path: '/models/samples/model_03ce66cf-2cb.glb', // model_03ce66cf-2cb - category: 'prop', - keywords: ['model', '03ce66cf', '2cb', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_844', - path: '/models/samples/model_04055cca-aa4.glb', // model_04055cca-aa4 - category: 'prop', - keywords: ['model', '04055cca', 'aa4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_845', - path: '/models/samples/model_0453ed65-f52.glb', // model_0453ed65-f52 - category: 'prop', - keywords: ['model', '0453ed65', 'f52', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_846', - path: '/models/samples/model_04c0a68c-4d3.glb', // model_04c0a68c-4d3 - category: 'prop', - keywords: ['model', '04c0a68c', '4d3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_847', - path: '/models/samples/model_0528de32-356.glb', // model_0528de32-356 - category: 'prop', - keywords: ['model', '0528de32', '356', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_848', - path: '/models/samples/model_0551ca36-061.glb', // model_0551ca36-061 - category: 'prop', - keywords: ['model', '0551ca36', '061', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_849', - path: '/models/samples/model_05a53f67-4b9.glb', // model_05a53f67-4b9 - category: 'prop', - keywords: ['model', '05a53f67', '4b9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_850', - path: '/models/samples/model_07860247-cc1.glb', // model_07860247-cc1 - category: 'prop', - keywords: ['model', '07860247', 'cc1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_851', - path: '/models/samples/model_07e883b3-2e4.glb', // model_07e883b3-2e4 - category: 'prop', - keywords: ['model', '07e883b3', '2e4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_852', - path: '/models/samples/model_087513b0-788.glb', // model_087513b0-788 - category: 'prop', - keywords: ['model', '087513b0', '788', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_853', - path: '/models/samples/model_08d8ba2b-37f.glb', // model_08d8ba2b-37f - category: 'prop', - keywords: ['model', '08d8ba2b', '37f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_854', - path: '/models/samples/model_09507cba-d6a.glb', // model_09507cba-d6a - category: 'prop', - keywords: ['model', '09507cba', 'd6a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_855', - path: '/models/samples/model_0970fa42-4ab.glb', // model_0970fa42-4ab - category: 'prop', - keywords: ['model', '0970fa42', '4ab', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_856', - path: '/models/samples/model_098364b0-485.glb', // model_098364b0-485 - category: 'prop', - keywords: ['model', '098364b0', '485', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_857', - path: '/models/samples/model_0a81f502-144.glb', // model_0a81f502-144 - category: 'prop', - keywords: ['model', '0a81f502', '144', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_858', - path: '/models/samples/model_0af6ef40-5d9.glb', // model_0af6ef40-5d9 - category: 'prop', - keywords: ['model', '0af6ef40', '5d9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_859', - path: '/models/samples/model_0b5e780a-7fd.glb', // model_0b5e780a-7fd - category: 'prop', - keywords: ['model', '0b5e780a', '7fd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_860', - path: '/models/samples/model_0c8f0256-480.glb', // model_0c8f0256-480 - category: 'prop', - keywords: ['model', '0c8f0256', '480', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_861', - path: '/models/samples/model_0d126e35-a18.glb', // model_0d126e35-a18 - category: 'prop', - keywords: ['model', '0d126e35', 'a18', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_862', - path: '/models/samples/model_0d5aa4c9-f28.glb', // model_0d5aa4c9-f28 - category: 'prop', - keywords: ['model', '0d5aa4c9', 'f28', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_863', - path: '/models/samples/model_0da49c1d-aad.glb', // model_0da49c1d-aad - category: 'prop', - keywords: ['model', '0da49c1d', 'aad', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_864', - path: '/models/samples/model_0e689817-18d.glb', // model_0e689817-18d - category: 'prop', - keywords: ['model', '0e689817', '18d', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_865', - path: '/models/samples/model_1058e0f3-ca5.glb', // model_1058e0f3-ca5 - category: 'prop', - keywords: ['model', '1058e0f3', 'ca5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_866', - path: '/models/samples/model_11aba94f-2a2.glb', // model_11aba94f-2a2 - category: 'prop', - keywords: ['model', '11aba94f', '2a2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_867', - path: '/models/samples/model_12363a91-7c2.glb', // model_12363a91-7c2 - category: 'prop', - keywords: ['model', '12363a91', '7c2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_868', - path: '/models/samples/model_12487f1b-e31.glb', // model_12487f1b-e31 - category: 'prop', - keywords: ['model', '12487f1b', 'e31', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_869', - path: '/models/samples/model_135ccf25-173.glb', // model_135ccf25-173 - category: 'prop', - keywords: ['model', '135ccf25', '173', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_870', - path: '/models/samples/model_142eb426-331.glb', // model_142eb426-331 - category: 'prop', - keywords: ['model', '142eb426', '331', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_871', - path: '/models/samples/model_154c5dbd-c67.glb', // model_154c5dbd-c67 - category: 'prop', - keywords: ['model', '154c5dbd', 'c67', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_872', - path: '/models/samples/model_155077a0-2bf.glb', // model_155077a0-2bf - category: 'prop', - keywords: ['model', '155077a0', '2bf', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_873', - path: '/models/samples/model_16938d74-b1b.glb', // model_16938d74-b1b - category: 'prop', - keywords: ['model', '16938d74', 'b1b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_874', - path: '/models/samples/model_16d8adee-41d.glb', // model_16d8adee-41d - category: 'prop', - keywords: ['model', '16d8adee', '41d', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_875', - path: '/models/samples/model_174e6c87-f89.glb', // model_174e6c87-f89 - category: 'prop', - keywords: ['model', '174e6c87', 'f89', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_876', - path: '/models/samples/model_1755311d-a94.glb', // model_1755311d-a94 - category: 'prop', - keywords: ['model', '1755311d', 'a94', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_877', - path: '/models/samples/model_178bcd33-dde.glb', // model_178bcd33-dde - category: 'prop', - keywords: ['model', '178bcd33', 'dde', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_878', - path: '/models/samples/model_1821afe6-4c6.glb', // model_1821afe6-4c6 - category: 'prop', - keywords: ['model', '1821afe6', '4c6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_879', - path: '/models/samples/model_18d93646-1b6.glb', // model_18d93646-1b6 - category: 'prop', - keywords: ['model', '18d93646', '1b6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_880', - path: '/models/samples/model_1946522f-f26.glb', // model_1946522f-f26 - category: 'prop', - keywords: ['model', '1946522f', 'f26', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_881', - path: '/models/samples/model_1a2b827d-ca0.glb', // model_1a2b827d-ca0 - category: 'prop', - keywords: ['model', '1a2b827d', 'ca0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_882', - path: '/models/samples/model_1be984cb-ce8.glb', // model_1be984cb-ce8 - category: 'prop', - keywords: ['model', '1be984cb', 'ce8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_883', - path: '/models/samples/model_1c8af2e7-e0e.glb', // model_1c8af2e7-e0e - category: 'prop', - keywords: ['model', '1c8af2e7', 'e0e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_884', - path: '/models/samples/model_1cd08e71-e60.glb', // model_1cd08e71-e60 - category: 'prop', - keywords: ['model', '1cd08e71', 'e60', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_885', - path: '/models/samples/model_1d34d1bb-fa4.glb', // model_1d34d1bb-fa4 - category: 'prop', - keywords: ['model', '1d34d1bb', 'fa4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_886', - path: '/models/samples/model_1ebaca74-ea4.glb', // model_1ebaca74-ea4 - category: 'prop', - keywords: ['model', '1ebaca74', 'ea4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_887', - path: '/models/samples/model_1ebf3984-395.glb', // model_1ebf3984-395 - category: 'prop', - keywords: ['model', '1ebf3984', '395', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_888', - path: '/models/samples/model_1f6de2b1-6a8.glb', // model_1f6de2b1-6a8 - category: 'prop', - keywords: ['model', '1f6de2b1', '6a8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_889', - path: '/models/samples/model_1fec001e-606.glb', // model_1fec001e-606 - category: 'prop', - keywords: ['model', '1fec001e', '606', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_890', - path: '/models/samples/model_200b163b-fb2.glb', // model_200b163b-fb2 - category: 'prop', - keywords: ['model', '200b163b', 'fb2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_891', - path: '/models/samples/model_202ac3e3-c96.glb', // model_202ac3e3-c96 - category: 'prop', - keywords: ['model', '202ac3e3', 'c96', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_892', - path: '/models/samples/model_20d6b88d-840.glb', // model_20d6b88d-840 - category: 'prop', - keywords: ['model', '20d6b88d', '840', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_893', - path: '/models/samples/model_21a2c8fa-3bd.glb', // model_21a2c8fa-3bd - category: 'prop', - keywords: ['model', '21a2c8fa', '3bd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_894', - path: '/models/samples/model_21aa0d34-46b.glb', // model_21aa0d34-46b - category: 'prop', - keywords: ['model', '21aa0d34', '46b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_895', - path: '/models/samples/model_21c2cbf9-0c1.glb', // model_21c2cbf9-0c1 - category: 'prop', - keywords: ['model', '21c2cbf9', '0c1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_896', - path: '/models/samples/model_21cc9c37-d86.glb', // model_21cc9c37-d86 - category: 'prop', - keywords: ['model', '21cc9c37', 'd86', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_897', - path: '/models/samples/model_21fdb9e5-1ad.glb', // model_21fdb9e5-1ad - category: 'prop', - keywords: ['model', '21fdb9e5', '1ad', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_898', - path: '/models/samples/model_2445097b-bdf.glb', // model_2445097b-bdf - category: 'prop', - keywords: ['model', '2445097b', 'bdf', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_899', - path: '/models/samples/model_24769937-ced.glb', // model_24769937-ced - category: 'prop', - keywords: ['model', '24769937', 'ced', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_900', - path: '/models/samples/model_24cb8a6e-a2f.glb', // model_24cb8a6e-a2f - category: 'prop', - keywords: ['model', '24cb8a6e', 'a2f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_901', - path: '/models/samples/model_24ee6619-f7f.glb', // model_24ee6619-f7f - category: 'prop', - keywords: ['model', '24ee6619', 'f7f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_902', - path: '/models/samples/model_251a10e8-bf6.glb', // model_251a10e8-bf6 - category: 'prop', - keywords: ['model', '251a10e8', 'bf6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_903', - path: '/models/samples/model_252c5cbe-f20.glb', // model_252c5cbe-f20 - category: 'prop', - keywords: ['model', '252c5cbe', 'f20', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_904', - path: '/models/samples/model_2544e0ef-078.glb', // model_2544e0ef-078 - category: 'prop', - keywords: ['model', '2544e0ef', '078', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_905', - path: '/models/samples/model_2568a43c-da7.glb', // model_2568a43c-da7 - category: 'prop', - keywords: ['model', '2568a43c', 'da7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_906', - path: '/models/samples/model_2572bd61-6c2.glb', // model_2572bd61-6c2 - category: 'prop', - keywords: ['model', '2572bd61', '6c2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_907', - path: '/models/samples/model_259a3789-b8f.glb', // model_259a3789-b8f - category: 'prop', - keywords: ['model', '259a3789', 'b8f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_908', - path: '/models/samples/model_2612a456-9d8.glb', // model_2612a456-9d8 - category: 'prop', - keywords: ['model', '2612a456', '9d8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_909', - path: '/models/samples/model_263f2bfa-789.glb', // model_263f2bfa-789 - category: 'prop', - keywords: ['model', '263f2bfa', '789', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_910', - path: '/models/samples/model_26f30e42-e08.glb', // model_26f30e42-e08 - category: 'prop', - keywords: ['model', '26f30e42', 'e08', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_911', - path: '/models/samples/model_27d6327d-780.glb', // model_27d6327d-780 - category: 'prop', - keywords: ['model', '27d6327d', '780', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_912', - path: '/models/samples/model_285c3534-738.glb', // model_285c3534-738 - category: 'prop', - keywords: ['model', '285c3534', '738', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_913', - path: '/models/samples/model_29b2b8b8-376.glb', // model_29b2b8b8-376 - category: 'prop', - keywords: ['model', '29b2b8b8', '376', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_914', - path: '/models/samples/model_29f8c09b-7b5.glb', // model_29f8c09b-7b5 - category: 'prop', - keywords: ['model', '29f8c09b', '7b5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_915', - path: '/models/samples/model_29fa4c1d-039.glb', // model_29fa4c1d-039 - category: 'prop', - keywords: ['model', '29fa4c1d', '039', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_916', - path: '/models/samples/model_2ae6b5f8-6b7.glb', // model_2ae6b5f8-6b7 - category: 'prop', - keywords: ['model', '2ae6b5f8', '6b7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_917', - path: '/models/samples/model_2aeae9e8-f67.glb', // model_2aeae9e8-f67 - category: 'prop', - keywords: ['model', '2aeae9e8', 'f67', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_918', - path: '/models/samples/model_2b5e3201-eab.glb', // model_2b5e3201-eab - category: 'prop', - keywords: ['model', '2b5e3201', 'eab', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_919', - path: '/models/samples/model_2c0c2b1e-d04.glb', // model_2c0c2b1e-d04 - category: 'prop', - keywords: ['model', '2c0c2b1e', 'd04', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_920', - path: '/models/samples/model_2c397d2d-152.glb', // model_2c397d2d-152 - category: 'prop', - keywords: ['model', '2c397d2d', '152', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_921', - path: '/models/samples/model_2ecdf33c-7b9.glb', // model_2ecdf33c-7b9 - category: 'prop', - keywords: ['model', '2ecdf33c', '7b9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_922', - path: '/models/samples/model_2ef9fc2d-996.glb', // model_2ef9fc2d-996 - category: 'prop', - keywords: ['model', '2ef9fc2d', '996', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_923', - path: '/models/samples/model_2f2c50e9-b59.glb', // model_2f2c50e9-b59 - category: 'prop', - keywords: ['model', '2f2c50e9', 'b59', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_924', - path: '/models/samples/model_302cec82-856.glb', // model_302cec82-856 - category: 'prop', - keywords: ['model', '302cec82', '856', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_925', - path: '/models/samples/model_30b31ef3-3a0.glb', // model_30b31ef3-3a0 - category: 'prop', - keywords: ['model', '30b31ef3', '3a0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_926', - path: '/models/samples/model_320a18cb-ccd.glb', // model_320a18cb-ccd - category: 'prop', - keywords: ['model', '320a18cb', 'ccd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_927', - path: '/models/samples/model_325e7a86-3c4.glb', // model_325e7a86-3c4 - category: 'prop', - keywords: ['model', '325e7a86', '3c4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_928', - path: '/models/samples/model_32f1b9ae-541.glb', // model_32f1b9ae-541 - category: 'prop', - keywords: ['model', '32f1b9ae', '541', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_929', - path: '/models/samples/model_33f2ac81-de9.glb', // model_33f2ac81-de9 - category: 'prop', - keywords: ['model', '33f2ac81', 'de9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_930', - path: '/models/samples/model_348d1f0e-886.glb', // model_348d1f0e-886 - category: 'prop', - keywords: ['model', '348d1f0e', '886', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_931', - path: '/models/samples/model_3545490d-1fe.glb', // model_3545490d-1fe - category: 'prop', - keywords: ['model', '3545490d', '1fe', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_932', - path: '/models/samples/model_3570068e-f79.glb', // model_3570068e-f79 - category: 'prop', - keywords: ['model', '3570068e', 'f79', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_933', - path: '/models/samples/model_35c76694-fce.glb', // model_35c76694-fce - category: 'prop', - keywords: ['model', '35c76694', 'fce', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_934', - path: '/models/samples/model_36d09061-0ee.glb', // model_36d09061-0ee - category: 'prop', - keywords: ['model', '36d09061', '0ee', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_935', - path: '/models/samples/model_370372ec-666.glb', // model_370372ec-666 - category: 'prop', - keywords: ['model', '370372ec', '666', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_936', - path: '/models/samples/model_37ad51fd-fb2.glb', // model_37ad51fd-fb2 - category: 'prop', - keywords: ['model', '37ad51fd', 'fb2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_937', - path: '/models/samples/model_3841d2a9-390.glb', // model_3841d2a9-390 - category: 'prop', - keywords: ['model', '3841d2a9', '390', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_938', - path: '/models/samples/model_38b81926-4a1.glb', // model_38b81926-4a1 - category: 'prop', - keywords: ['model', '38b81926', '4a1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_939', - path: '/models/samples/model_38ee5af8-ae1.glb', // model_38ee5af8-ae1 - category: 'prop', - keywords: ['model', '38ee5af8', 'ae1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_940', - path: '/models/samples/model_398b2073-135.glb', // model_398b2073-135 - category: 'prop', - keywords: ['model', '398b2073', '135', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_941', - path: '/models/samples/model_3a9e1495-750.glb', // model_3a9e1495-750 - category: 'prop', - keywords: ['model', '3a9e1495', '750', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_942', - path: '/models/samples/model_3e16d14d-c88.glb', // model_3e16d14d-c88 - category: 'prop', - keywords: ['model', '3e16d14d', 'c88', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_943', - path: '/models/samples/model_3ecf8f2f-db6.glb', // model_3ecf8f2f-db6 - category: 'prop', - keywords: ['model', '3ecf8f2f', 'db6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_944', - path: '/models/samples/model_404c439e-090.glb', // model_404c439e-090 - category: 'prop', - keywords: ['model', '404c439e', '090', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_945', - path: '/models/samples/model_419f7c52-ba1.glb', // model_419f7c52-ba1 - category: 'prop', - keywords: ['model', '419f7c52', 'ba1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_946', - path: '/models/samples/model_41a64de3-78b.glb', // model_41a64de3-78b - category: 'prop', - keywords: ['model', '41a64de3', '78b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_947', - path: '/models/samples/model_41d4e503-3fe.glb', // model_41d4e503-3fe - category: 'prop', - keywords: ['model', '41d4e503', '3fe', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_948', - path: '/models/samples/model_41fd6727-c30.glb', // model_41fd6727-c30 - category: 'prop', - keywords: ['model', '41fd6727', 'c30', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_949', - path: '/models/samples/model_420be263-a32.glb', // model_420be263-a32 - category: 'prop', - keywords: ['model', '420be263', 'a32', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_950', - path: '/models/samples/model_427fe638-14f.glb', // model_427fe638-14f - category: 'prop', - keywords: ['model', '427fe638', '14f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_951', - path: '/models/samples/model_441d42f0-070.glb', // model_441d42f0-070 - category: 'prop', - keywords: ['model', '441d42f0', '070', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_952', - path: '/models/samples/model_45ae3e7a-bf6.glb', // model_45ae3e7a-bf6 - category: 'prop', - keywords: ['model', '45ae3e7a', 'bf6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_953', - path: '/models/samples/model_45b034f5-5ab.glb', // model_45b034f5-5ab - category: 'prop', - keywords: ['model', '45b034f5', '5ab', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_954', - path: '/models/samples/model_45ca27ef-75c.glb', // model_45ca27ef-75c - category: 'prop', - keywords: ['model', '45ca27ef', '75c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_955', - path: '/models/samples/model_45db5c7e-bd0.glb', // model_45db5c7e-bd0 - category: 'prop', - keywords: ['model', '45db5c7e', 'bd0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_956', - path: '/models/samples/model_4647952e-a6b.glb', // model_4647952e-a6b - category: 'prop', - keywords: ['model', '4647952e', 'a6b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_957', - path: '/models/samples/model_46ae6877-d71.glb', // model_46ae6877-d71 - category: 'prop', - keywords: ['model', '46ae6877', 'd71', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_958', - path: '/models/samples/model_480f46bd-06c.glb', // model_480f46bd-06c - category: 'prop', - keywords: ['model', '480f46bd', '06c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_959', - path: '/models/samples/model_481f5d0e-822.glb', // model_481f5d0e-822 - category: 'prop', - keywords: ['model', '481f5d0e', '822', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_960', - path: '/models/samples/model_48697b19-ebd.glb', // model_48697b19-ebd - category: 'prop', - keywords: ['model', '48697b19', 'ebd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_961', - path: '/models/samples/model_48ab7121-570.glb', // model_48ab7121-570 - category: 'prop', - keywords: ['model', '48ab7121', '570', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_962', - path: '/models/samples/model_48ca45ab-5bb.glb', // model_48ca45ab-5bb - category: 'prop', - keywords: ['model', '48ca45ab', '5bb', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_963', - path: '/models/samples/model_493cf84c-05a.glb', // model_493cf84c-05a - category: 'prop', - keywords: ['model', '493cf84c', '05a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_964', - path: '/models/samples/model_4b7a5f2d-508.glb', // model_4b7a5f2d-508 - category: 'prop', - keywords: ['model', '4b7a5f2d', '508', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_965', - path: '/models/samples/model_4b9310cf-647.glb', // model_4b9310cf-647 - category: 'prop', - keywords: ['model', '4b9310cf', '647', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_966', - path: '/models/samples/model_4c0a3ec9-bd7.glb', // model_4c0a3ec9-bd7 - category: 'prop', - keywords: ['model', '4c0a3ec9', 'bd7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_967', - path: '/models/samples/model_4d36d320-19f.glb', // model_4d36d320-19f - category: 'prop', - keywords: ['model', '4d36d320', '19f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_968', - path: '/models/samples/model_4dda6fc2-86e.glb', // model_4dda6fc2-86e - category: 'prop', - keywords: ['model', '4dda6fc2', '86e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_969', - path: '/models/samples/model_4f2640bd-7ca.glb', // model_4f2640bd-7ca - category: 'prop', - keywords: ['model', '4f2640bd', '7ca', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_970', - path: '/models/samples/model_500544e5-54b.glb', // model_500544e5-54b - category: 'prop', - keywords: ['model', '500544e5', '54b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_971', - path: '/models/samples/model_50087d98-87e.glb', // model_50087d98-87e - category: 'prop', - keywords: ['model', '50087d98', '87e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_972', - path: '/models/samples/model_51d0846a-cf4.glb', // model_51d0846a-cf4 - category: 'prop', - keywords: ['model', '51d0846a', 'cf4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_973', - path: '/models/samples/model_51eca8bd-2b8.glb', // model_51eca8bd-2b8 - category: 'prop', - keywords: ['model', '51eca8bd', '2b8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_974', - path: '/models/samples/model_51ef0b07-49c.glb', // model_51ef0b07-49c - category: 'prop', - keywords: ['model', '51ef0b07', '49c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_975', - path: '/models/samples/model_521a8d84-6bb.glb', // model_521a8d84-6bb - category: 'prop', - keywords: ['model', '521a8d84', '6bb', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_976', - path: '/models/samples/model_529019ee-4bd.glb', // model_529019ee-4bd - category: 'prop', - keywords: ['model', '529019ee', '4bd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_977', - path: '/models/samples/model_52e6920e-889.glb', // model_52e6920e-889 - category: 'prop', - keywords: ['model', '52e6920e', '889', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_978', - path: '/models/samples/model_532b4eca-396.glb', // model_532b4eca-396 - category: 'prop', - keywords: ['model', '532b4eca', '396', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_979', - path: '/models/samples/model_53fa9973-756.glb', // model_53fa9973-756 - category: 'prop', - keywords: ['model', '53fa9973', '756', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_980', - path: '/models/samples/model_544c368c-c07.glb', // model_544c368c-c07 - category: 'prop', - keywords: ['model', '544c368c', 'c07', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_981', - path: '/models/samples/model_54db6bb7-87e.glb', // model_54db6bb7-87e - category: 'prop', - keywords: ['model', '54db6bb7', '87e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_982', - path: '/models/samples/model_55c86f23-52a.glb', // model_55c86f23-52a - category: 'prop', - keywords: ['model', '55c86f23', '52a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_983', - path: '/models/samples/model_55ef63a7-ffd.glb', // model_55ef63a7-ffd - category: 'prop', - keywords: ['model', '55ef63a7', 'ffd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_984', - path: '/models/samples/model_562d9272-9e4.glb', // model_562d9272-9e4 - category: 'prop', - keywords: ['model', '562d9272', '9e4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_985', - path: '/models/samples/model_562f668f-4e6.glb', // model_562f668f-4e6 - category: 'prop', - keywords: ['model', '562f668f', '4e6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_986', - path: '/models/samples/model_567d607b-d3e.glb', // model_567d607b-d3e - category: 'prop', - keywords: ['model', '567d607b', 'd3e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_987', - path: '/models/samples/model_5693c3cb-ead.glb', // model_5693c3cb-ead - category: 'prop', - keywords: ['model', '5693c3cb', 'ead', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_988', - path: '/models/samples/model_575e6920-829.glb', // model_575e6920-829 - category: 'prop', - keywords: ['model', '575e6920', '829', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_989', - path: '/models/samples/model_5760d90d-3aa.glb', // model_5760d90d-3aa - category: 'prop', - keywords: ['model', '5760d90d', '3aa', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_990', - path: '/models/samples/model_58cead34-52d.glb', // model_58cead34-52d - category: 'prop', - keywords: ['model', '58cead34', '52d', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_991', - path: '/models/samples/model_58d94a98-dfa.glb', // model_58d94a98-dfa - category: 'prop', - keywords: ['model', '58d94a98', 'dfa', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_992', - path: '/models/samples/model_58e02f30-f04.glb', // model_58e02f30-f04 - category: 'prop', - keywords: ['model', '58e02f30', 'f04', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_993', - path: '/models/samples/model_5943824c-1ee.glb', // model_5943824c-1ee - category: 'prop', - keywords: ['model', '5943824c', '1ee', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_994', - path: '/models/samples/model_59ac0621-3d2.glb', // model_59ac0621-3d2 - category: 'prop', - keywords: ['model', '59ac0621', '3d2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_995', - path: '/models/samples/model_59fbfef8-3f6.glb', // model_59fbfef8-3f6 - category: 'prop', - keywords: ['model', '59fbfef8', '3f6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_996', - path: '/models/samples/model_5aeb6ff7-56c.glb', // model_5aeb6ff7-56c - category: 'prop', - keywords: ['model', '5aeb6ff7', '56c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_997', - path: '/models/samples/model_5af663c3-c23.glb', // model_5af663c3-c23 - category: 'prop', - keywords: ['model', '5af663c3', 'c23', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_998', - path: '/models/samples/model_5b05b336-1f5.glb', // model_5b05b336-1f5 - category: 'prop', - keywords: ['model', '5b05b336', '1f5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_999', - path: '/models/samples/model_5ba62572-f9e.glb', // model_5ba62572-f9e - category: 'prop', - keywords: ['model', '5ba62572', 'f9e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1000', - path: '/models/samples/model_5c3443c6-f86.glb', // model_5c3443c6-f86 - category: 'prop', - keywords: ['model', '5c3443c6', 'f86', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1001', - path: '/models/samples/model_5d1b5201-0ed.glb', // model_5d1b5201-0ed - category: 'prop', - keywords: ['model', '5d1b5201', '0ed', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1002', - path: '/models/samples/model_5d9f92bb-a69.glb', // model_5d9f92bb-a69 - category: 'prop', - keywords: ['model', '5d9f92bb', 'a69', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1003', - path: '/models/samples/model_5f3495ea-981.glb', // model_5f3495ea-981 - category: 'prop', - keywords: ['model', '5f3495ea', '981', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1004', - path: '/models/samples/model_6108e984-64b.glb', // model_6108e984-64b - category: 'prop', - keywords: ['model', '6108e984', '64b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1005', - path: '/models/samples/model_61d1f35c-9f4.glb', // model_61d1f35c-9f4 - category: 'prop', - keywords: ['model', '61d1f35c', '9f4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1006', - path: '/models/samples/model_62eee14a-030.glb', // model_62eee14a-030 - category: 'prop', - keywords: ['model', '62eee14a', '030', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1007', - path: '/models/samples/model_630dda53-95a.glb', // model_630dda53-95a - category: 'prop', - keywords: ['model', '630dda53', '95a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1008', - path: '/models/samples/model_63789130-f81.glb', // model_63789130-f81 - category: 'prop', - keywords: ['model', '63789130', 'f81', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1009', - path: '/models/samples/model_63e35ef7-f63.glb', // model_63e35ef7-f63 - category: 'prop', - keywords: ['model', '63e35ef7', 'f63', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1010', - path: '/models/samples/model_64466ea0-e65.glb', // model_64466ea0-e65 - category: 'prop', - keywords: ['model', '64466ea0', 'e65', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1011', - path: '/models/samples/model_64604dc8-e3f.glb', // model_64604dc8-e3f - category: 'prop', - keywords: ['model', '64604dc8', 'e3f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1012', - path: '/models/samples/model_64809de3-3c5.glb', // model_64809de3-3c5 - category: 'prop', - keywords: ['model', '64809de3', '3c5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1013', - path: '/models/samples/model_64f8b4c5-3ec.glb', // model_64f8b4c5-3ec - category: 'prop', - keywords: ['model', '64f8b4c5', '3ec', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1014', - path: '/models/samples/model_677a7ddb-579.glb', // model_677a7ddb-579 - category: 'prop', - keywords: ['model', '677a7ddb', '579', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1015', - path: '/models/samples/model_67a706e9-022.glb', // model_67a706e9-022 - category: 'prop', - keywords: ['model', '67a706e9', '022', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1016', - path: '/models/samples/model_67d2ec8e-f3c.glb', // model_67d2ec8e-f3c - category: 'prop', - keywords: ['model', '67d2ec8e', 'f3c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1017', - path: '/models/samples/model_67f85603-aec.glb', // model_67f85603-aec - category: 'prop', - keywords: ['model', '67f85603', 'aec', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1018', - path: '/models/samples/model_6821c653-ab1.glb', // model_6821c653-ab1 - category: 'prop', - keywords: ['model', '6821c653', 'ab1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1019', - path: '/models/samples/model_68ad57d3-a67.glb', // model_68ad57d3-a67 - category: 'prop', - keywords: ['model', '68ad57d3', 'a67', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1020', - path: '/models/samples/model_68d94dec-206.glb', // model_68d94dec-206 - category: 'prop', - keywords: ['model', '68d94dec', '206', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1021', - path: '/models/samples/model_68fe46d0-625.glb', // model_68fe46d0-625 - category: 'prop', - keywords: ['model', '68fe46d0', '625', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1022', - path: '/models/samples/model_6a1191df-f09.glb', // model_6a1191df-f09 - category: 'prop', - keywords: ['model', '6a1191df', 'f09', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1023', - path: '/models/samples/model_6abeb22e-6d0.glb', // model_6abeb22e-6d0 - category: 'prop', - keywords: ['model', '6abeb22e', '6d0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1024', - path: '/models/samples/model_6b2bc098-b3e.glb', // model_6b2bc098-b3e - category: 'prop', - keywords: ['model', '6b2bc098', 'b3e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1025', - path: '/models/samples/model_6b40811b-09b.glb', // model_6b40811b-09b - category: 'prop', - keywords: ['model', '6b40811b', '09b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1026', - path: '/models/samples/model_6b50b5e9-75b.glb', // model_6b50b5e9-75b - category: 'prop', - keywords: ['model', '6b50b5e9', '75b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1027', - path: '/models/samples/model_6b8cf82f-0a5.glb', // model_6b8cf82f-0a5 - category: 'prop', - keywords: ['model', '6b8cf82f', '0a5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1028', - path: '/models/samples/model_6b91b218-950.glb', // model_6b91b218-950 - category: 'prop', - keywords: ['model', '6b91b218', '950', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1029', - path: '/models/samples/model_6bb02cd7-319.glb', // model_6bb02cd7-319 - category: 'prop', - keywords: ['model', '6bb02cd7', '319', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1030', - path: '/models/samples/model_6dc05ca3-8da.glb', // model_6dc05ca3-8da - category: 'prop', - keywords: ['model', '6dc05ca3', '8da', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1031', - path: '/models/samples/model_6df40d45-207.glb', // model_6df40d45-207 - category: 'prop', - keywords: ['model', '6df40d45', '207', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1032', - path: '/models/samples/model_6e5aa4cf-0ac.glb', // model_6e5aa4cf-0ac - category: 'prop', - keywords: ['model', '6e5aa4cf', '0ac', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1033', - path: '/models/samples/model_6f2d8423-3d1.glb', // model_6f2d8423-3d1 - category: 'prop', - keywords: ['model', '6f2d8423', '3d1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1034', - path: '/models/samples/model_7089e8e3-3f8.glb', // model_7089e8e3-3f8 - category: 'prop', - keywords: ['model', '7089e8e3', '3f8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1035', - path: '/models/samples/model_71a81dcc-ca5.glb', // model_71a81dcc-ca5 - category: 'prop', - keywords: ['model', '71a81dcc', 'ca5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1036', - path: '/models/samples/model_71ea87eb-93e.glb', // model_71ea87eb-93e - category: 'prop', - keywords: ['model', '71ea87eb', '93e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1037', - path: '/models/samples/model_7239c899-1a2.glb', // model_7239c899-1a2 - category: 'prop', - keywords: ['model', '7239c899', '1a2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1038', - path: '/models/samples/model_72503a6f-b90.glb', // model_72503a6f-b90 - category: 'prop', - keywords: ['model', '72503a6f', 'b90', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1039', - path: '/models/samples/model_7259b4e9-5c7.glb', // model_7259b4e9-5c7 - category: 'prop', - keywords: ['model', '7259b4e9', '5c7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1040', - path: '/models/samples/model_738688be-9d4.glb', // model_738688be-9d4 - category: 'prop', - keywords: ['model', '738688be', '9d4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1041', - path: '/models/samples/model_739d2b34-f1b.glb', // model_739d2b34-f1b - category: 'prop', - keywords: ['model', '739d2b34', 'f1b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1042', - path: '/models/samples/model_73aac0fd-d6c.glb', // model_73aac0fd-d6c - category: 'prop', - keywords: ['model', '73aac0fd', 'd6c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1043', - path: '/models/samples/model_74a1ed00-855.glb', // model_74a1ed00-855 - category: 'prop', - keywords: ['model', '74a1ed00', '855', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1044', - path: '/models/samples/model_751f546a-c93.glb', // model_751f546a-c93 - category: 'prop', - keywords: ['model', '751f546a', 'c93', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1045', - path: '/models/samples/model_752de33a-ec8.glb', // model_752de33a-ec8 - category: 'prop', - keywords: ['model', '752de33a', 'ec8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1046', - path: '/models/samples/model_756a01ff-5ff.glb', // model_756a01ff-5ff - category: 'prop', - keywords: ['model', '756a01ff', '5ff', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1047', - path: '/models/samples/model_75986358-ed1.glb', // model_75986358-ed1 - category: 'prop', - keywords: ['model', '75986358', 'ed1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1048', - path: '/models/samples/model_75cb3c5e-85a.glb', // model_75cb3c5e-85a - category: 'prop', - keywords: ['model', '75cb3c5e', '85a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1049', - path: '/models/samples/model_76d45824-c8e.glb', // model_76d45824-c8e - category: 'prop', - keywords: ['model', '76d45824', 'c8e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1050', - path: '/models/samples/model_76daba86-cb1.glb', // model_76daba86-cb1 - category: 'prop', - keywords: ['model', '76daba86', 'cb1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1051', - path: '/models/samples/model_770b16ec-204.glb', // model_770b16ec-204 - category: 'prop', - keywords: ['model', '770b16ec', '204', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1052', - path: '/models/samples/model_7718b337-b9a.glb', // model_7718b337-b9a - category: 'prop', - keywords: ['model', '7718b337', 'b9a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1053', - path: '/models/samples/model_77861599-217.glb', // model_77861599-217 - category: 'prop', - keywords: ['model', '77861599', '217', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1054', - path: '/models/samples/model_7838f3a5-a74.glb', // model_7838f3a5-a74 - category: 'prop', - keywords: ['model', '7838f3a5', 'a74', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1055', - path: '/models/samples/model_798dca47-818.glb', // model_798dca47-818 - category: 'prop', - keywords: ['model', '798dca47', '818', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1056', - path: '/models/samples/model_7a73c075-097.glb', // model_7a73c075-097 - category: 'prop', - keywords: ['model', '7a73c075', '097', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1057', - path: '/models/samples/model_7ab90fb6-577.glb', // model_7ab90fb6-577 - category: 'prop', - keywords: ['model', '7ab90fb6', '577', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1058', - path: '/models/samples/model_7c224626-641.glb', // model_7c224626-641 - category: 'prop', - keywords: ['model', '7c224626', '641', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1059', - path: '/models/samples/model_7c844771-055.glb', // model_7c844771-055 - category: 'prop', - keywords: ['model', '7c844771', '055', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1060', - path: '/models/samples/model_7cb88781-50b.glb', // model_7cb88781-50b - category: 'prop', - keywords: ['model', '7cb88781', '50b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1061', - path: '/models/samples/model_7cd3e5d3-73b.glb', // model_7cd3e5d3-73b - category: 'prop', - keywords: ['model', '7cd3e5d3', '73b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1062', - path: '/models/samples/model_7dd071e2-42f.glb', // model_7dd071e2-42f - category: 'prop', - keywords: ['model', '7dd071e2', '42f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1063', - path: '/models/samples/model_7e270461-09f.glb', // model_7e270461-09f - category: 'prop', - keywords: ['model', '7e270461', '09f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1064', - path: '/models/samples/model_7e2f9384-a39.glb', // model_7e2f9384-a39 - category: 'prop', - keywords: ['model', '7e2f9384', 'a39', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1065', - path: '/models/samples/model_7f99d291-4b4.glb', // model_7f99d291-4b4 - category: 'prop', - keywords: ['model', '7f99d291', '4b4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1066', - path: '/models/samples/model_7fcf1b2e-9cc.glb', // model_7fcf1b2e-9cc - category: 'prop', - keywords: ['model', '7fcf1b2e', '9cc', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1067', - path: '/models/samples/model_81502a49-a76.glb', // model_81502a49-a76 - category: 'prop', - keywords: ['model', '81502a49', 'a76', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1068', - path: '/models/samples/model_818c6699-100.glb', // model_818c6699-100 - category: 'prop', - keywords: ['model', '818c6699', '100', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1069', - path: '/models/samples/model_820c5597-d6c.glb', // model_820c5597-d6c - category: 'prop', - keywords: ['model', '820c5597', 'd6c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1070', - path: '/models/samples/model_821d7ef7-46d.glb', // model_821d7ef7-46d - category: 'prop', - keywords: ['model', '821d7ef7', '46d', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1071', - path: '/models/samples/model_826ab42e-146.glb', // model_826ab42e-146 - category: 'prop', - keywords: ['model', '826ab42e', '146', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1072', - path: '/models/samples/model_83590595-f7b.glb', // model_83590595-f7b - category: 'prop', - keywords: ['model', '83590595', 'f7b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1073', - path: '/models/samples/model_848e2c98-2a9.glb', // model_848e2c98-2a9 - category: 'prop', - keywords: ['model', '848e2c98', '2a9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1074', - path: '/models/samples/model_8506b1a5-5b5.glb', // model_8506b1a5-5b5 - category: 'prop', - keywords: ['model', '8506b1a5', '5b5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1075', - path: '/models/samples/model_85903796-a0b.glb', // model_85903796-a0b - category: 'prop', - keywords: ['model', '85903796', 'a0b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1076', - path: '/models/samples/model_861b6368-f12.glb', // model_861b6368-f12 - category: 'prop', - keywords: ['model', '861b6368', 'f12', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1077', - path: '/models/samples/model_865cf0ba-2c1.glb', // model_865cf0ba-2c1 - category: 'prop', - keywords: ['model', '865cf0ba', '2c1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1078', - path: '/models/samples/model_872cead7-b2a.glb', // model_872cead7-b2a - category: 'prop', - keywords: ['model', '872cead7', 'b2a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1079', - path: '/models/samples/model_8758563e-6d0.glb', // model_8758563e-6d0 - category: 'prop', - keywords: ['model', '8758563e', '6d0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1080', - path: '/models/samples/model_8953543a-9fc.glb', // model_8953543a-9fc - category: 'prop', - keywords: ['model', '8953543a', '9fc', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1081', - path: '/models/samples/model_8a5bb11a-f24.glb', // model_8a5bb11a-f24 - category: 'prop', - keywords: ['model', '8a5bb11a', 'f24', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1082', - path: '/models/samples/model_8a6839a3-0d9.glb', // model_8a6839a3-0d9 - category: 'prop', - keywords: ['model', '8a6839a3', '0d9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1083', - path: '/models/samples/model_8a79e0ff-4b9.glb', // model_8a79e0ff-4b9 - category: 'prop', - keywords: ['model', '8a79e0ff', '4b9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1084', - path: '/models/samples/model_8a7bdbf3-34a.glb', // model_8a7bdbf3-34a - category: 'prop', - keywords: ['model', '8a7bdbf3', '34a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1085', - path: '/models/samples/model_8a94fad3-036.glb', // model_8a94fad3-036 - category: 'prop', - keywords: ['model', '8a94fad3', '036', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1086', - path: '/models/samples/model_8ad79961-226.glb', // model_8ad79961-226 - category: 'prop', - keywords: ['model', '8ad79961', '226', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1087', - path: '/models/samples/model_8b212824-f1f.glb', // model_8b212824-f1f - category: 'prop', - keywords: ['model', '8b212824', 'f1f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1088', - path: '/models/samples/model_8c134eec-a13.glb', // model_8c134eec-a13 - category: 'prop', - keywords: ['model', '8c134eec', 'a13', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1089', - path: '/models/samples/model_8c4fe65f-7aa.glb', // model_8c4fe65f-7aa - category: 'prop', - keywords: ['model', '8c4fe65f', '7aa', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1090', - path: '/models/samples/model_8ce8a9cf-1fd.glb', // model_8ce8a9cf-1fd - category: 'prop', - keywords: ['model', '8ce8a9cf', '1fd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1091', - path: '/models/samples/model_8d0593a2-c73.glb', // model_8d0593a2-c73 - category: 'prop', - keywords: ['model', '8d0593a2', 'c73', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1092', - path: '/models/samples/model_8d7b8b87-2c7.glb', // model_8d7b8b87-2c7 - category: 'prop', - keywords: ['model', '8d7b8b87', '2c7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1093', - path: '/models/samples/model_8db63546-ac4.glb', // model_8db63546-ac4 - category: 'prop', - keywords: ['model', '8db63546', 'ac4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1094', - path: '/models/samples/model_8e1d8db1-b39.glb', // model_8e1d8db1-b39 - category: 'prop', - keywords: ['model', '8e1d8db1', 'b39', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1095', - path: '/models/samples/model_8e455f37-a76.glb', // model_8e455f37-a76 - category: 'prop', - keywords: ['model', '8e455f37', 'a76', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1096', - path: '/models/samples/model_8e6f6c4e-dba.glb', // model_8e6f6c4e-dba - category: 'prop', - keywords: ['model', '8e6f6c4e', 'dba', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1097', - path: '/models/samples/model_8ecff261-650.glb', // model_8ecff261-650 - category: 'prop', - keywords: ['model', '8ecff261', '650', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1098', - path: '/models/samples/model_8f0c1d57-f7f.glb', // model_8f0c1d57-f7f - category: 'prop', - keywords: ['model', '8f0c1d57', 'f7f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1099', - path: '/models/samples/model_903416f8-79e.glb', // model_903416f8-79e - category: 'prop', - keywords: ['model', '903416f8', '79e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1100', - path: '/models/samples/model_90c7020d-1f1.glb', // model_90c7020d-1f1 - category: 'prop', - keywords: ['model', '90c7020d', '1f1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1101', - path: '/models/samples/model_914760d4-256.glb', // model_914760d4-256 - category: 'prop', - keywords: ['model', '914760d4', '256', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1102', - path: '/models/samples/model_91b0924d-be0.glb', // model_91b0924d-be0 - category: 'prop', - keywords: ['model', '91b0924d', 'be0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1103', - path: '/models/samples/model_931f2e35-0ab.glb', // model_931f2e35-0ab - category: 'prop', - keywords: ['model', '931f2e35', '0ab', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1104', - path: '/models/samples/model_93217842-b43.glb', // model_93217842-b43 - category: 'prop', - keywords: ['model', '93217842', 'b43', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1105', - path: '/models/samples/model_939669db-d08.glb', // model_939669db-d08 - category: 'prop', - keywords: ['model', '939669db', 'd08', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1106', - path: '/models/samples/model_94641a3c-4a7.glb', // model_94641a3c-4a7 - category: 'prop', - keywords: ['model', '94641a3c', '4a7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1107', - path: '/models/samples/model_951a4c89-b28.glb', // model_951a4c89-b28 - category: 'prop', - keywords: ['model', '951a4c89', 'b28', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1108', - path: '/models/samples/model_9591d704-da7.glb', // model_9591d704-da7 - category: 'prop', - keywords: ['model', '9591d704', 'da7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1109', - path: '/models/samples/model_9708f413-455.glb', // model_9708f413-455 - category: 'prop', - keywords: ['model', '9708f413', '455', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1110', - path: '/models/samples/model_973795c2-755.glb', // model_973795c2-755 - category: 'prop', - keywords: ['model', '973795c2', '755', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1111', - path: '/models/samples/model_977734fe-afc.glb', // model_977734fe-afc - category: 'prop', - keywords: ['model', '977734fe', 'afc', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1112', - path: '/models/samples/model_97902287-589.glb', // model_97902287-589 - category: 'prop', - keywords: ['model', '97902287', '589', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1113', - path: '/models/samples/model_97a9c001-9a3.glb', // model_97a9c001-9a3 - category: 'prop', - keywords: ['model', '97a9c001', '9a3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1114', - path: '/models/samples/model_9943a455-106.glb', // model_9943a455-106 - category: 'prop', - keywords: ['model', '9943a455', '106', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1115', - path: '/models/samples/model_9b4ff57d-c87.glb', // model_9b4ff57d-c87 - category: 'prop', - keywords: ['model', '9b4ff57d', 'c87', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1116', - path: '/models/samples/model_9b5085b5-5e1.glb', // model_9b5085b5-5e1 - category: 'prop', - keywords: ['model', '9b5085b5', '5e1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1117', - path: '/models/samples/model_9ba49c74-2ed.glb', // model_9ba49c74-2ed - category: 'prop', - keywords: ['model', '9ba49c74', '2ed', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1118', - path: '/models/samples/model_9d4bd2ba-06e.glb', // model_9d4bd2ba-06e - category: 'prop', - keywords: ['model', '9d4bd2ba', '06e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1119', - path: '/models/samples/model_9db0be83-2cc.glb', // model_9db0be83-2cc - category: 'prop', - keywords: ['model', '9db0be83', '2cc', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1120', - path: '/models/samples/model_9dc11d33-f01.glb', // model_9dc11d33-f01 - category: 'prop', - keywords: ['model', '9dc11d33', 'f01', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1121', - path: '/models/samples/model_9dd20045-aee.glb', // model_9dd20045-aee - category: 'prop', - keywords: ['model', '9dd20045', 'aee', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1122', - path: '/models/samples/model_9dd918cd-f18.glb', // model_9dd918cd-f18 - category: 'prop', - keywords: ['model', '9dd918cd', 'f18', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1123', - path: '/models/samples/model_9df4ab5f-2ec.glb', // model_9df4ab5f-2ec - category: 'prop', - keywords: ['model', '9df4ab5f', '2ec', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1124', - path: '/models/samples/model_9dfa6387-4f1.glb', // model_9dfa6387-4f1 - category: 'prop', - keywords: ['model', '9dfa6387', '4f1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1125', - path: '/models/samples/model_9f14603b-9ef.glb', // model_9f14603b-9ef - category: 'prop', - keywords: ['model', '9f14603b', '9ef', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1126', - path: '/models/samples/model_a0745221-f6c.glb', // model_a0745221-f6c - category: 'prop', - keywords: ['model', 'a0745221', 'f6c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1127', - path: '/models/samples/model_a077bff9-d75.glb', // model_a077bff9-d75 - category: 'prop', - keywords: ['model', 'a077bff9', 'd75', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1128', - path: '/models/samples/model_a07969d3-6d3.glb', // model_a07969d3-6d3 - category: 'prop', - keywords: ['model', 'a07969d3', '6d3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1129', - path: '/models/samples/model_a15ed272-471.glb', // model_a15ed272-471 - category: 'prop', - keywords: ['model', 'a15ed272', '471', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1130', - path: '/models/samples/model_a1898185-ed1.glb', // model_a1898185-ed1 - category: 'prop', - keywords: ['model', 'a1898185', 'ed1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1131', - path: '/models/samples/model_a1e26ab5-fb7.glb', // model_a1e26ab5-fb7 - category: 'prop', - keywords: ['model', 'a1e26ab5', 'fb7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1132', - path: '/models/samples/model_a3276f54-2ef.glb', // model_a3276f54-2ef - category: 'prop', - keywords: ['model', 'a3276f54', '2ef', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1133', - path: '/models/samples/model_a3db3629-211.glb', // model_a3db3629-211 - category: 'prop', - keywords: ['model', 'a3db3629', '211', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1134', - path: '/models/samples/model_a5b149eb-fce.glb', // model_a5b149eb-fce - category: 'prop', - keywords: ['model', 'a5b149eb', 'fce', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1135', - path: '/models/samples/model_a60c6ac0-396.glb', // model_a60c6ac0-396 - category: 'prop', - keywords: ['model', 'a60c6ac0', '396', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1136', - path: '/models/samples/model_a6205e59-c16.glb', // model_a6205e59-c16 - category: 'prop', - keywords: ['model', 'a6205e59', 'c16', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1137', - path: '/models/samples/model_a62a0689-a8f.glb', // model_a62a0689-a8f - category: 'prop', - keywords: ['model', 'a62a0689', 'a8f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1138', - path: '/models/samples/model_a6702109-209.glb', // model_a6702109-209 - category: 'prop', - keywords: ['model', 'a6702109', '209', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1139', - path: '/models/samples/model_a6ca5e4b-5b3.glb', // model_a6ca5e4b-5b3 - category: 'prop', - keywords: ['model', 'a6ca5e4b', '5b3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1140', - path: '/models/samples/model_a7900c23-d17.glb', // model_a7900c23-d17 - category: 'prop', - keywords: ['model', 'a7900c23', 'd17', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1141', - path: '/models/samples/model_a8fee894-aa2.glb', // model_a8fee894-aa2 - category: 'prop', - keywords: ['model', 'a8fee894', 'aa2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1142', - path: '/models/samples/model_a9100a65-b11.glb', // model_a9100a65-b11 - category: 'prop', - keywords: ['model', 'a9100a65', 'b11', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1143', - path: '/models/samples/model_a9203561-e20.glb', // model_a9203561-e20 - category: 'prop', - keywords: ['model', 'a9203561', 'e20', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1144', - path: '/models/samples/model_a93a2cec-b8e.glb', // model_a93a2cec-b8e - category: 'prop', - keywords: ['model', 'a93a2cec', 'b8e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1145', - path: '/models/samples/model_a956e9db-07a.glb', // model_a956e9db-07a - category: 'prop', - keywords: ['model', 'a956e9db', '07a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1146', - path: '/models/samples/model_aa014453-648.glb', // model_aa014453-648 - category: 'prop', - keywords: ['model', 'aa014453', '648', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1147', - path: '/models/samples/model_aa498820-63c.glb', // model_aa498820-63c - category: 'prop', - keywords: ['model', 'aa498820', '63c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1148', - path: '/models/samples/model_aa82fb6a-126.glb', // model_aa82fb6a-126 - category: 'prop', - keywords: ['model', 'aa82fb6a', '126', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1149', - path: '/models/samples/model_ac1d0a8c-109.glb', // model_ac1d0a8c-109 - category: 'prop', - keywords: ['model', 'ac1d0a8c', '109', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1150', - path: '/models/samples/model_ad0c1afa-f8f.glb', // model_ad0c1afa-f8f - category: 'prop', - keywords: ['model', 'ad0c1afa', 'f8f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1151', - path: '/models/samples/model_ad92253f-0a8.glb', // model_ad92253f-0a8 - category: 'prop', - keywords: ['model', 'ad92253f', '0a8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1152', - path: '/models/samples/model_aed9682f-9f8.glb', // model_aed9682f-9f8 - category: 'prop', - keywords: ['model', 'aed9682f', '9f8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1153', - path: '/models/samples/model_aef47f78-1ea.glb', // model_aef47f78-1ea - category: 'prop', - keywords: ['model', 'aef47f78', '1ea', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1154', - path: '/models/samples/model_afc28cad-022.glb', // model_afc28cad-022 - category: 'prop', - keywords: ['model', 'afc28cad', '022', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1155', - path: '/models/samples/model_afd3a410-a7e.glb', // model_afd3a410-a7e - category: 'prop', - keywords: ['model', 'afd3a410', 'a7e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1156', - path: '/models/samples/model_afd71af1-468.glb', // model_afd71af1-468 - category: 'prop', - keywords: ['model', 'afd71af1', '468', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1157', - path: '/models/samples/model_afebe841-ac8.glb', // model_afebe841-ac8 - category: 'prop', - keywords: ['model', 'afebe841', 'ac8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1158', - path: '/models/samples/model_b0208a3a-9cf.glb', // model_b0208a3a-9cf - category: 'prop', - keywords: ['model', 'b0208a3a', '9cf', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1159', - path: '/models/samples/model_b0d1266f-9f9.glb', // model_b0d1266f-9f9 - category: 'prop', - keywords: ['model', 'b0d1266f', '9f9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1160', - path: '/models/samples/model_b0f9eebc-639.glb', // model_b0f9eebc-639 - category: 'prop', - keywords: ['model', 'b0f9eebc', '639', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1161', - path: '/models/samples/model_b1bc954e-134.glb', // model_b1bc954e-134 - category: 'prop', - keywords: ['model', 'b1bc954e', '134', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1162', - path: '/models/samples/model_b2246c95-22f.glb', // model_b2246c95-22f - category: 'prop', - keywords: ['model', 'b2246c95', '22f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1163', - path: '/models/samples/model_b33125ef-435.glb', // model_b33125ef-435 - category: 'prop', - keywords: ['model', 'b33125ef', '435', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1164', - path: '/models/samples/model_b38493ef-56f.glb', // model_b38493ef-56f - category: 'prop', - keywords: ['model', 'b38493ef', '56f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1165', - path: '/models/samples/model_b3f56e38-960.glb', // model_b3f56e38-960 - category: 'prop', - keywords: ['model', 'b3f56e38', '960', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1166', - path: '/models/samples/model_b4546734-fe6.glb', // model_b4546734-fe6 - category: 'prop', - keywords: ['model', 'b4546734', 'fe6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1167', - path: '/models/samples/model_b4669237-a52.glb', // model_b4669237-a52 - category: 'prop', - keywords: ['model', 'b4669237', 'a52', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1168', - path: '/models/samples/model_b4c079c9-676.glb', // model_b4c079c9-676 - category: 'prop', - keywords: ['model', 'b4c079c9', '676', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1169', - path: '/models/samples/model_b530c034-560.glb', // model_b530c034-560 - category: 'prop', - keywords: ['model', 'b530c034', '560', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1170', - path: '/models/samples/model_b5f2d03a-8cd.glb', // model_b5f2d03a-8cd - category: 'prop', - keywords: ['model', 'b5f2d03a', '8cd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1171', - path: '/models/samples/model_b69687b6-927.glb', // model_b69687b6-927 - category: 'prop', - keywords: ['model', 'b69687b6', '927', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1172', - path: '/models/samples/model_b712b2b3-1ac.glb', // model_b712b2b3-1ac - category: 'prop', - keywords: ['model', 'b712b2b3', '1ac', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1173', - path: '/models/samples/model_b73e0b81-e5b.glb', // model_b73e0b81-e5b - category: 'prop', - keywords: ['model', 'b73e0b81', 'e5b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1174', - path: '/models/samples/model_b7b52f23-c6f.glb', // model_b7b52f23-c6f - category: 'prop', - keywords: ['model', 'b7b52f23', 'c6f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1175', - path: '/models/samples/model_b7bf1970-2b8.glb', // model_b7bf1970-2b8 - category: 'prop', - keywords: ['model', 'b7bf1970', '2b8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1176', - path: '/models/samples/model_b839d245-7a3.glb', // model_b839d245-7a3 - category: 'prop', - keywords: ['model', 'b839d245', '7a3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1177', - path: '/models/samples/model_b841b2db-d53.glb', // model_b841b2db-d53 - category: 'prop', - keywords: ['model', 'b841b2db', 'd53', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1178', - path: '/models/samples/model_b85eecc5-b0c.glb', // model_b85eecc5-b0c - category: 'prop', - keywords: ['model', 'b85eecc5', 'b0c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1179', - path: '/models/samples/model_b9908061-8b4.glb', // model_b9908061-8b4 - category: 'prop', - keywords: ['model', 'b9908061', '8b4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1180', - path: '/models/samples/model_ba094f95-fd6.glb', // model_ba094f95-fd6 - category: 'prop', - keywords: ['model', 'ba094f95', 'fd6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1181', - path: '/models/samples/model_bb1e31be-8e3.glb', // model_bb1e31be-8e3 - category: 'prop', - keywords: ['model', 'bb1e31be', '8e3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1182', - path: '/models/samples/model_bb650703-a20.glb', // model_bb650703-a20 - category: 'prop', - keywords: ['model', 'bb650703', 'a20', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1183', - path: '/models/samples/model_bb8eccc2-1a0.glb', // model_bb8eccc2-1a0 - category: 'prop', - keywords: ['model', 'bb8eccc2', '1a0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1184', - path: '/models/samples/model_bbba8700-cc8.glb', // model_bbba8700-cc8 - category: 'prop', - keywords: ['model', 'bbba8700', 'cc8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1185', - path: '/models/samples/model_bbfd9a36-4ae.glb', // model_bbfd9a36-4ae - category: 'prop', - keywords: ['model', 'bbfd9a36', '4ae', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1186', - path: '/models/samples/model_bc5c053b-6b8.glb', // model_bc5c053b-6b8 - category: 'prop', - keywords: ['model', 'bc5c053b', '6b8', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1187', - path: '/models/samples/model_bc8407a3-861.glb', // model_bc8407a3-861 - category: 'prop', - keywords: ['model', 'bc8407a3', '861', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1188', - path: '/models/samples/model_bc8aee66-020.glb', // model_bc8aee66-020 - category: 'prop', - keywords: ['model', 'bc8aee66', '020', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1189', - path: '/models/samples/model_bcaf6746-de1.glb', // model_bcaf6746-de1 - category: 'prop', - keywords: ['model', 'bcaf6746', 'de1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1190', - path: '/models/samples/model_be4bda23-1c7.glb', // model_be4bda23-1c7 - category: 'prop', - keywords: ['model', 'be4bda23', '1c7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1191', - path: '/models/samples/model_be8924d5-c65.glb', // model_be8924d5-c65 - category: 'prop', - keywords: ['model', 'be8924d5', 'c65', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1192', - path: '/models/samples/model_c1d60b5f-82a.glb', // model_c1d60b5f-82a - category: 'prop', - keywords: ['model', 'c1d60b5f', '82a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1193', - path: '/models/samples/model_c29e1da8-b8b.glb', // model_c29e1da8-b8b - category: 'prop', - keywords: ['model', 'c29e1da8', 'b8b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1194', - path: '/models/samples/model_c3987744-ec5.glb', // model_c3987744-ec5 - category: 'prop', - keywords: ['model', 'c3987744', 'ec5', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1195', - path: '/models/samples/model_c423ab76-e31.glb', // model_c423ab76-e31 - category: 'prop', - keywords: ['model', 'c423ab76', 'e31', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1196', - path: '/models/samples/model_c444ba25-97e.glb', // model_c444ba25-97e - category: 'prop', - keywords: ['model', 'c444ba25', '97e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1197', - path: '/models/samples/model_c4c118aa-bfa.glb', // model_c4c118aa-bfa - category: 'prop', - keywords: ['model', 'c4c118aa', 'bfa', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1198', - path: '/models/samples/model_c4e4b8aa-a8d.glb', // model_c4e4b8aa-a8d - category: 'prop', - keywords: ['model', 'c4e4b8aa', 'a8d', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1199', - path: '/models/samples/model_c5ebde8e-590.glb', // model_c5ebde8e-590 - category: 'prop', - keywords: ['model', 'c5ebde8e', '590', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1200', - path: '/models/samples/model_c6475352-ab0.glb', // model_c6475352-ab0 - category: 'prop', - keywords: ['model', 'c6475352', 'ab0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1201', - path: '/models/samples/model_c7399ba0-576.glb', // model_c7399ba0-576 - category: 'prop', - keywords: ['model', 'c7399ba0', '576', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1202', - path: '/models/samples/model_c7aaa41e-d88.glb', // model_c7aaa41e-d88 - category: 'prop', - keywords: ['model', 'c7aaa41e', 'd88', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1203', - path: '/models/samples/model_c8f214ff-5da.glb', // model_c8f214ff-5da - category: 'prop', - keywords: ['model', 'c8f214ff', '5da', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1204', - path: '/models/samples/model_c97d0688-9d7.glb', // model_c97d0688-9d7 - category: 'prop', - keywords: ['model', 'c97d0688', '9d7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1205', - path: '/models/samples/model_cbaf22e0-241.glb', // model_cbaf22e0-241 - category: 'prop', - keywords: ['model', 'cbaf22e0', '241', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1206', - path: '/models/samples/model_cbb1f63e-909.glb', // model_cbb1f63e-909 - category: 'prop', - keywords: ['model', 'cbb1f63e', '909', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1207', - path: '/models/samples/model_cbd86306-ab3.glb', // model_cbd86306-ab3 - category: 'prop', - keywords: ['model', 'cbd86306', 'ab3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1208', - path: '/models/samples/model_cc83da49-17e.glb', // model_cc83da49-17e - category: 'prop', - keywords: ['model', 'cc83da49', '17e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1209', - path: '/models/samples/model_ccae3ba8-412.glb', // model_ccae3ba8-412 - category: 'prop', - keywords: ['model', 'ccae3ba8', '412', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1210', - path: '/models/samples/model_ccd0e302-53c.glb', // model_ccd0e302-53c - category: 'prop', - keywords: ['model', 'ccd0e302', '53c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1211', - path: '/models/samples/model_cdaf8464-0df.glb', // model_cdaf8464-0df - category: 'prop', - keywords: ['model', 'cdaf8464', '0df', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1212', - path: '/models/samples/model_cdc0585e-37d.glb', // model_cdc0585e-37d - category: 'prop', - keywords: ['model', 'cdc0585e', '37d', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1213', - path: '/models/samples/model_cdf6df67-fe9.glb', // model_cdf6df67-fe9 - category: 'prop', - keywords: ['model', 'cdf6df67', 'fe9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1214', - path: '/models/samples/model_cdfeb29b-b5e.glb', // model_cdfeb29b-b5e - category: 'prop', - keywords: ['model', 'cdfeb29b', 'b5e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1215', - path: '/models/samples/model_ce74927a-c3f.glb', // model_ce74927a-c3f - category: 'prop', - keywords: ['model', 'ce74927a', 'c3f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1216', - path: '/models/samples/model_cec6713a-e4c.glb', // model_cec6713a-e4c - category: 'prop', - keywords: ['model', 'cec6713a', 'e4c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1217', - path: '/models/samples/model_cff80aa0-ab6.glb', // model_cff80aa0-ab6 - category: 'prop', - keywords: ['model', 'cff80aa0', 'ab6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1218', - path: '/models/samples/model_d027a82e-1cd.glb', // model_d027a82e-1cd - category: 'prop', - keywords: ['model', 'd027a82e', '1cd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1219', - path: '/models/samples/model_d0a14d35-a9a.glb', // model_d0a14d35-a9a - category: 'prop', - keywords: ['model', 'd0a14d35', 'a9a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1220', - path: '/models/samples/model_d0c029e9-5ff.glb', // model_d0c029e9-5ff - category: 'prop', - keywords: ['model', 'd0c029e9', '5ff', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1221', - path: '/models/samples/model_d0d4c8ef-251.glb', // model_d0d4c8ef-251 - category: 'prop', - keywords: ['model', 'd0d4c8ef', '251', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1222', - path: '/models/samples/model_d1140ab6-6f7.glb', // model_d1140ab6-6f7 - category: 'prop', - keywords: ['model', 'd1140ab6', '6f7', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1223', - path: '/models/samples/model_d1b6ae44-8ac.glb', // model_d1b6ae44-8ac - category: 'prop', - keywords: ['model', 'd1b6ae44', '8ac', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1224', - path: '/models/samples/model_d2279ea8-74c.glb', // model_d2279ea8-74c - category: 'prop', - keywords: ['model', 'd2279ea8', '74c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1225', - path: '/models/samples/model_d2620506-13d.glb', // model_d2620506-13d - category: 'prop', - keywords: ['model', 'd2620506', '13d', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1226', - path: '/models/samples/model_d2c30b63-4f4.glb', // model_d2c30b63-4f4 - category: 'prop', - keywords: ['model', 'd2c30b63', '4f4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1227', - path: '/models/samples/model_d2faa1df-81a.glb', // model_d2faa1df-81a - category: 'prop', - keywords: ['model', 'd2faa1df', '81a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1228', - path: '/models/samples/model_d32d552a-117.glb', // model_d32d552a-117 - category: 'prop', - keywords: ['model', 'd32d552a', '117', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1229', - path: '/models/samples/model_d4b3b231-38a.glb', // model_d4b3b231-38a - category: 'prop', - keywords: ['model', 'd4b3b231', '38a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1230', - path: '/models/samples/model_d4d9d53a-f4c.glb', // model_d4d9d53a-f4c - category: 'prop', - keywords: ['model', 'd4d9d53a', 'f4c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1231', - path: '/models/samples/model_d4e325c0-ca2.glb', // model_d4e325c0-ca2 - category: 'prop', - keywords: ['model', 'd4e325c0', 'ca2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1232', - path: '/models/samples/model_d4eca46e-5c1.glb', // model_d4eca46e-5c1 - category: 'prop', - keywords: ['model', 'd4eca46e', '5c1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1233', - path: '/models/samples/model_d4fe17dd-4fd.glb', // model_d4fe17dd-4fd - category: 'prop', - keywords: ['model', 'd4fe17dd', '4fd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1234', - path: '/models/samples/model_d693b39d-538.glb', // model_d693b39d-538 - category: 'prop', - keywords: ['model', 'd693b39d', '538', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1235', - path: '/models/samples/model_d7386ebe-3c0.glb', // model_d7386ebe-3c0 - category: 'prop', - keywords: ['model', 'd7386ebe', '3c0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1236', - path: '/models/samples/model_d8e2ebd4-49c.glb', // model_d8e2ebd4-49c - category: 'prop', - keywords: ['model', 'd8e2ebd4', '49c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1237', - path: '/models/samples/model_d93158e9-522.glb', // model_d93158e9-522 - category: 'prop', - keywords: ['model', 'd93158e9', '522', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1238', - path: '/models/samples/model_d97bc02e-d9c.glb', // model_d97bc02e-d9c - category: 'prop', - keywords: ['model', 'd97bc02e', 'd9c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1239', - path: '/models/samples/model_d9c612bd-31f.glb', // model_d9c612bd-31f - category: 'prop', - keywords: ['model', 'd9c612bd', '31f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1240', - path: '/models/samples/model_da163e91-586.glb', // model_da163e91-586 - category: 'prop', - keywords: ['model', 'da163e91', '586', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1241', - path: '/models/samples/model_db13e457-827.glb', // model_db13e457-827 - category: 'prop', - keywords: ['model', 'db13e457', '827', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1242', - path: '/models/samples/model_db2321c0-133.glb', // model_db2321c0-133 - category: 'prop', - keywords: ['model', 'db2321c0', '133', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1243', - path: '/models/samples/model_dbd88b8a-f2a.glb', // model_dbd88b8a-f2a - category: 'prop', - keywords: ['model', 'dbd88b8a', 'f2a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1244', - path: '/models/samples/model_dd0823c9-59c.glb', // model_dd0823c9-59c - category: 'prop', - keywords: ['model', 'dd0823c9', '59c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1245', - path: '/models/samples/model_dd087f76-5df.glb', // model_dd087f76-5df - category: 'prop', - keywords: ['model', 'dd087f76', '5df', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1246', - path: '/models/samples/model_dd55e3c2-fe1.glb', // model_dd55e3c2-fe1 - category: 'prop', - keywords: ['model', 'dd55e3c2', 'fe1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1247', - path: '/models/samples/model_dda9071f-016.glb', // model_dda9071f-016 - category: 'prop', - keywords: ['model', 'dda9071f', '016', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1248', - path: '/models/samples/model_ddc5d7d2-e7b.glb', // model_ddc5d7d2-e7b - category: 'prop', - keywords: ['model', 'ddc5d7d2', 'e7b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1249', - path: '/models/samples/model_ddebaec6-dbf.glb', // model_ddebaec6-dbf - category: 'prop', - keywords: ['model', 'ddebaec6', 'dbf', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1250', - path: '/models/samples/model_df977e78-571.glb', // model_df977e78-571 - category: 'prop', - keywords: ['model', 'df977e78', '571', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1251', - path: '/models/samples/model_dfd35b24-20d.glb', // model_dfd35b24-20d - category: 'prop', - keywords: ['model', 'dfd35b24', '20d', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1252', - path: '/models/samples/model_e0f28728-2e2.glb', // model_e0f28728-2e2 - category: 'prop', - keywords: ['model', 'e0f28728', '2e2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1253', - path: '/models/samples/model_e1cc5d2b-8ce.glb', // model_e1cc5d2b-8ce - category: 'prop', - keywords: ['model', 'e1cc5d2b', '8ce', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1254', - path: '/models/samples/model_e1e29c43-5eb.glb', // model_e1e29c43-5eb - category: 'prop', - keywords: ['model', 'e1e29c43', '5eb', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1255', - path: '/models/samples/model_e2920a39-48a.glb', // model_e2920a39-48a - category: 'prop', - keywords: ['model', 'e2920a39', '48a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1256', - path: '/models/samples/model_e32c88b3-0be.glb', // model_e32c88b3-0be - category: 'prop', - keywords: ['model', 'e32c88b3', '0be', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1257', - path: '/models/samples/model_e34a018d-ca9.glb', // model_e34a018d-ca9 - category: 'prop', - keywords: ['model', 'e34a018d', 'ca9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1258', - path: '/models/samples/model_e3f82d01-354.glb', // model_e3f82d01-354 - category: 'prop', - keywords: ['model', 'e3f82d01', '354', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1259', - path: '/models/samples/model_e4bcb83c-18c.glb', // model_e4bcb83c-18c - category: 'prop', - keywords: ['model', 'e4bcb83c', '18c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1260', - path: '/models/samples/model_e62c71bd-144.glb', // model_e62c71bd-144 - category: 'prop', - keywords: ['model', 'e62c71bd', '144', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1261', - path: '/models/samples/model_e6575280-200.glb', // model_e6575280-200 - category: 'prop', - keywords: ['model', 'e6575280', '200', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1262', - path: '/models/samples/model_e69bcc63-c34.glb', // model_e69bcc63-c34 - category: 'prop', - keywords: ['model', 'e69bcc63', 'c34', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1263', - path: '/models/samples/model_e80d9f2b-7ff.glb', // model_e80d9f2b-7ff - category: 'prop', - keywords: ['model', 'e80d9f2b', '7ff', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1264', - path: '/models/samples/model_eb131f00-2c3.glb', // model_eb131f00-2c3 - category: 'prop', - keywords: ['model', 'eb131f00', '2c3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1265', - path: '/models/samples/model_eb2d7523-082.glb', // model_eb2d7523-082 - category: 'prop', - keywords: ['model', 'eb2d7523', '082', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1266', - path: '/models/samples/model_eb4d6a13-ca4.glb', // model_eb4d6a13-ca4 - category: 'prop', - keywords: ['model', 'eb4d6a13', 'ca4', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1267', - path: '/models/samples/model_ec6b9814-05c.glb', // model_ec6b9814-05c - category: 'prop', - keywords: ['model', 'ec6b9814', '05c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1268', - path: '/models/samples/model_ed1058c9-b9e.glb', // model_ed1058c9-b9e - category: 'prop', - keywords: ['model', 'ed1058c9', 'b9e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1269', - path: '/models/samples/model_ed25e36b-caf.glb', // model_ed25e36b-caf - category: 'prop', - keywords: ['model', 'ed25e36b', 'caf', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1270', - path: '/models/samples/model_ed9ee2e6-4fe.glb', // model_ed9ee2e6-4fe - category: 'prop', - keywords: ['model', 'ed9ee2e6', '4fe', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1271', - path: '/models/samples/model_eef315f3-a71.glb', // model_eef315f3-a71 - category: 'prop', - keywords: ['model', 'eef315f3', 'a71', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1272', - path: '/models/samples/model_ef0825e6-7ab.glb', // model_ef0825e6-7ab - category: 'prop', - keywords: ['model', 'ef0825e6', '7ab', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1273', - path: '/models/samples/model_ef611be9-f95.glb', // model_ef611be9-f95 - category: 'prop', - keywords: ['model', 'ef611be9', 'f95', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1274', - path: '/models/samples/model_efa74db6-33a.glb', // model_efa74db6-33a - category: 'prop', - keywords: ['model', 'efa74db6', '33a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1275', - path: '/models/samples/model_f0a300e0-68b.glb', // model_f0a300e0-68b - category: 'prop', - keywords: ['model', 'f0a300e0', '68b', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1276', - path: '/models/samples/model_f0d5d20c-288.glb', // model_f0d5d20c-288 - category: 'prop', - keywords: ['model', 'f0d5d20c', '288', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1277', - path: '/models/samples/model_f0e31075-8a3.glb', // model_f0e31075-8a3 - category: 'prop', - keywords: ['model', 'f0e31075', '8a3', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1278', - path: '/models/samples/model_f1431dfd-6e9.glb', // model_f1431dfd-6e9 - category: 'prop', - keywords: ['model', 'f1431dfd', '6e9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1279', - path: '/models/samples/model_f1994e0f-2c0.glb', // model_f1994e0f-2c0 - category: 'prop', - keywords: ['model', 'f1994e0f', '2c0', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1280', - path: '/models/samples/model_f1e7458b-159.glb', // model_f1e7458b-159 - category: 'prop', - keywords: ['model', 'f1e7458b', '159', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1281', - path: '/models/samples/model_f1ed6ad1-d54.glb', // model_f1ed6ad1-d54 - category: 'prop', - keywords: ['model', 'f1ed6ad1', 'd54', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1282', - path: '/models/samples/model_f33bbd68-b9a.glb', // model_f33bbd68-b9a - category: 'prop', - keywords: ['model', 'f33bbd68', 'b9a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1283', - path: '/models/samples/model_f397d7ef-2a6.glb', // model_f397d7ef-2a6 - category: 'prop', - keywords: ['model', 'f397d7ef', '2a6', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1284', - path: '/models/samples/model_f4b87b96-c56.glb', // model_f4b87b96-c56 - category: 'prop', - keywords: ['model', 'f4b87b96', 'c56', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1285', - path: '/models/samples/model_f4eaac36-c6f.glb', // model_f4eaac36-c6f - category: 'prop', - keywords: ['model', 'f4eaac36', 'c6f', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1286', - path: '/models/samples/model_f6e3b0dc-e5a.glb', // model_f6e3b0dc-e5a - category: 'prop', - keywords: ['model', 'f6e3b0dc', 'e5a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1287', - path: '/models/samples/model_f73f5d73-788.glb', // model_f73f5d73-788 - category: 'prop', - keywords: ['model', 'f73f5d73', '788', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1288', - path: '/models/samples/model_fa9c4d3f-544.glb', // model_fa9c4d3f-544 - category: 'prop', - keywords: ['model', 'fa9c4d3f', '544', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1289', - path: '/models/samples/model_fb3f9cc1-f65.glb', // model_fb3f9cc1-f65 - category: 'prop', - keywords: ['model', 'fb3f9cc1', 'f65', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1290', - path: '/models/samples/model_fb611993-efd.glb', // model_fb611993-efd - category: 'prop', - keywords: ['model', 'fb611993', 'efd', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1291', - path: '/models/samples/model_fbac7d31-dde.glb', // model_fbac7d31-dde - category: 'prop', - keywords: ['model', 'fbac7d31', 'dde', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1292', - path: '/models/samples/model_fc2e6a27-c5c.glb', // model_fc2e6a27-c5c - category: 'prop', - keywords: ['model', 'fc2e6a27', 'c5c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1293', - path: '/models/samples/model_fca00348-326.glb', // model_fca00348-326 - category: 'prop', - keywords: ['model', 'fca00348', '326', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1294', - path: '/models/samples/model_fdb3fabc-376.glb', // model_fdb3fabc-376 - category: 'prop', - keywords: ['model', 'fdb3fabc', '376', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1295', - path: '/models/samples/model_fdcfac2d-15c.glb', // model_fdcfac2d-15c - category: 'prop', - keywords: ['model', 'fdcfac2d', '15c', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1296', - path: '/models/samples/model_fddc5f43-8b9.glb', // model_fddc5f43-8b9 - category: 'prop', - keywords: ['model', 'fddc5f43', '8b9', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1297', - path: '/models/samples/model_fdfb7519-95e.glb', // model_fdfb7519-95e - category: 'prop', - keywords: ['model', 'fdfb7519', '95e', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1298', - path: '/models/samples/model_fe8040e1-71a.glb', // model_fe8040e1-71a - category: 'prop', - keywords: ['model', 'fe8040e1', '71a', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1299', - path: '/models/samples/module_600.glb', // module_600 - category: 'prop', - keywords: ['module', '600', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1300', - path: '/models/samples/moltenDagger.glb', // moltenDagger - category: 'prop', - keywords: ['moltenDagger', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1301', - path: '/models/samples/MosquitoInAmber.glb', // MosquitoInAmber - category: 'prop', - keywords: ['MosquitoInAmber', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1302', - path: '/models/samples/MultiUVTest.glb', // MultiUVTest - category: 'prop', - keywords: ['MultiUVTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1303', - path: '/models/samples/obelisk1.glb', // obelisk1 - category: 'prop', - keywords: ['obelisk1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1304', - path: '/models/samples/obelisk2.glb', // obelisk2 - category: 'prop', - keywords: ['obelisk2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1305', - path: '/models/samples/octopus_customRig.glb', // octopus_customRig - category: 'prop', - keywords: ['octopus', 'customRig', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1306', - path: '/models/samples/OrientationTest.glb', // OrientationTest - category: 'prop', - keywords: ['OrientationTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1307', - path: '/models/samples/PBR_Spheres.glb', // PBR_Spheres - category: 'prop', - keywords: ['PBR', 'Spheres', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1308', - path: '/models/samples/pill.glb', // pill - category: 'prop', - keywords: ['pill', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1309', - path: '/models/samples/pinkEnergyBall.glb', // pinkEnergyBall - category: 'prop', - keywords: ['pinkEnergyBall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1310', - path: '/models/samples/pirateFort.glb', // pirateFort - category: 'prop', - keywords: ['pirateFort', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1311', - path: '/models/samples/platformer-kit_block-moving-blue.glb', // platformer-kit_block-moving-blue - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'moving', 'blue', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1312', - path: '/models/samples/platformer-kit_block-moving-large.glb', // platformer-kit_block-moving-large - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'moving', 'large', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1313', - path: '/models/samples/platformer-kit_block-moving.glb', // platformer-kit_block-moving - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'moving', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1314', - path: '/models/samples/platformer-kit_block-snow-corner-overhang-low.glb', // platformer-kit_block-snow-corner-overhang-low - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'corner', 'overhang', 'low', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1315', - path: '/models/samples/platformer-kit_block-snow-corner-overhang.glb', // platformer-kit_block-snow-corner-overhang - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'corner', 'overhang', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1316', - path: '/models/samples/platformer-kit_block-snow-curve-half.glb', // platformer-kit_block-snow-curve-half - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'curve', 'half', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1317', - path: '/models/samples/platformer-kit_block-snow-curve-low.glb', // platformer-kit_block-snow-curve-low - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'curve', 'low', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1318', - path: '/models/samples/platformer-kit_block-snow-curve.glb', // platformer-kit_block-snow-curve - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'curve', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1319', - path: '/models/samples/platformer-kit_block-snow-edge.glb', // platformer-kit_block-snow-edge - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'edge', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1320', - path: '/models/samples/platformer-kit_block-snow-large-slope-steep.glb', // platformer-kit_block-snow-large-slope-steep - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'large', 'slope', 'steep', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1321', - path: '/models/samples/platformer-kit_block-snow-large-slope.glb', // platformer-kit_block-snow-large-slope - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'large', 'slope', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1322', - path: '/models/samples/platformer-kit_block-snow-overhang-corner.glb', // platformer-kit_block-snow-overhang-corner - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'corner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1323', - path: '/models/samples/platformer-kit_block-snow-overhang-edge.glb', // platformer-kit_block-snow-overhang-edge - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'edge', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1324', - path: '/models/samples/platformer-kit_block-snow-overhang-large-slope-steep.glb', // platformer-kit_block-snow-overhang-large-slope-steep - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'large', 'slope', 'steep', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1325', - path: '/models/samples/platformer-kit_block-snow-overhang-large-slope.glb', // platformer-kit_block-snow-overhang-large-slope - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'large', 'slope', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1326', - path: '/models/samples/platformer-kit_block-snow-overhang-large-tall.glb', // platformer-kit_block-snow-overhang-large-tall - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'large', 'tall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1327', - path: '/models/samples/platformer-kit_block-snow-overhang-large.glb', // platformer-kit_block-snow-overhang-large - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'large', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1328', - path: '/models/samples/platformer-kit_block-snow-overhang-long.glb', // platformer-kit_block-snow-overhang-long - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'long', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1329', - path: '/models/samples/platformer-kit_block-snow-overhang-low-large.glb', // platformer-kit_block-snow-overhang-low-large - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'low', 'large', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1330', - path: '/models/samples/platformer-kit_block-snow-overhang-low-long.glb', // platformer-kit_block-snow-overhang-low-long - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'low', 'long', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1331', - path: '/models/samples/platformer-kit_block-snow-overhang-low.glb', // platformer-kit_block-snow-overhang-low - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'low', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1332', - path: '/models/samples/platformer-kit_bomb.glb', // platformer-kit_bomb - category: 'prop', - keywords: ['platformer', 'kit', 'bomb', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1333', - path: '/models/samples/platformer-kit_brick.glb', // platformer-kit_brick - category: 'prop', - keywords: ['platformer', 'kit', 'brick', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1334', - path: '/models/samples/platformer-kit_button-round.glb', // platformer-kit_button-round - category: 'prop', - keywords: ['platformer', 'kit', 'button', 'round', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1335', - path: '/models/samples/platformer-kit_button-square.glb', // platformer-kit_button-square - category: 'prop', - keywords: ['platformer', 'kit', 'button', 'square', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1336', - path: '/models/samples/platformer-kit_conveyor-belt.glb', // platformer-kit_conveyor-belt - category: 'prop', - keywords: ['platformer', 'kit', 'conveyor', 'belt', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1337', - path: '/models/samples/platformer-kit_hedge-corner.glb', // platformer-kit_hedge-corner - category: 'prop', - keywords: ['platformer', 'kit', 'hedge', 'corner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1338', - path: '/models/samples/platformer-kit_ladder-broken.glb', // platformer-kit_ladder-broken - category: 'prop', - keywords: ['platformer', 'kit', 'ladder', 'broken', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1339', - path: '/models/samples/platformer-kit_ladder-long.glb', // platformer-kit_ladder-long - category: 'prop', - keywords: ['platformer', 'kit', 'ladder', 'long', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1340', - path: '/models/samples/platformer-kit_lever.glb', // platformer-kit_lever - category: 'prop', - keywords: ['platformer', 'kit', 'lever', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1341', - path: '/models/samples/platformer-kit_pipe.glb', // platformer-kit_pipe - category: 'prop', - keywords: ['platformer', 'kit', 'pipe', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1342', - path: '/models/samples/platformer-kit_platform-fortified.glb', // platformer-kit_platform-fortified - category: 'prop', - keywords: ['platformer', 'kit', 'platform', 'fortified', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1343', - path: '/models/samples/platformer-kit_poles.glb', // platformer-kit_poles - category: 'prop', - keywords: ['platformer', 'kit', 'poles', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1344', - path: '/models/samples/platformer-kit_saw.glb', // platformer-kit_saw - category: 'prop', - keywords: ['platformer', 'kit', 'saw', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1345', - path: '/models/samples/platformer-kit_spike-block-wide.glb', // platformer-kit_spike-block-wide - category: 'prop', - keywords: ['platformer', 'kit', 'spike', 'block', 'wide', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1346', - path: '/models/samples/platformer-kit_spike-block.glb', // platformer-kit_spike-block - category: 'prop', - keywords: ['platformer', 'kit', 'spike', 'block', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1347', - path: '/models/samples/platformer-kit_spring.glb', // platformer-kit_spring - category: 'prop', - keywords: ['platformer', 'kit', 'spring', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1348', - path: '/models/samples/platformer-kit_trap-spikes-large.glb', // platformer-kit_trap-spikes-large - category: 'prop', - keywords: ['platformer', 'kit', 'trap', 'spikes', 'large', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1349', - path: '/models/samples/platformer-kit_trap-spikes.glb', // platformer-kit_trap-spikes - category: 'prop', - keywords: ['platformer', 'kit', 'trap', 'spikes', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1350', - path: '/models/samples/PlaysetLightTest.glb', // PlaysetLightTest - category: 'prop', - keywords: ['PlaysetLightTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1351', - path: '/models/samples/PointLightIntensityTest.glb', // PointLightIntensityTest - category: 'prop', - keywords: ['PointLightIntensityTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1352', - path: '/models/samples/PotOfCoals.glb', // PotOfCoals - category: 'prop', - keywords: ['PotOfCoals', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1353', - path: '/models/samples/PotOfCoalsAnimationPointer.glb', // PotOfCoalsAnimationPointer - category: 'prop', - keywords: ['PotOfCoalsAnimationPointer', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1354', - path: '/models/samples/previewSphere.glb', // previewSphere - category: 'prop', - keywords: ['previewSphere', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1355', - path: '/models/samples/RecursiveSkeletons.glb', // RecursiveSkeletons - category: 'prop', - keywords: ['RecursiveSkeletons', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1356', - path: '/models/samples/RiggedFigure.glb', // RiggedFigure - category: 'prop', - keywords: ['RiggedFigure', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1357', - path: '/models/samples/riggedMesh.glb', // riggedMesh - category: 'prop', - keywords: ['riggedMesh', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1358', - path: '/models/samples/RiggedSimple.glb', // RiggedSimple - category: 'prop', - keywords: ['RiggedSimple', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1359', - path: '/models/samples/right.glb', // right - category: 'prop', - keywords: ['right', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1360', - path: '/models/samples/Road corner.glb', // Road corner - category: 'prop', - keywords: ['Road', 'corner', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1361', - path: '/models/samples/road gap.glb', // road gap - category: 'prop', - keywords: ['road', 'gap', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1362', - path: '/models/samples/roundedCube.glb', // roundedCube - category: 'prop', - keywords: ['roundedCube', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1363', - path: '/models/samples/roundedCylinder.glb', // roundedCylinder - category: 'prop', - keywords: ['roundedCylinder', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1364', - path: '/models/samples/r_hand_lhs.glb', // r_hand_lhs - category: 'prop', - keywords: ['hand', 'lhs', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1365', - path: '/models/samples/r_hand_rhs.glb', // r_hand_rhs - category: 'prop', - keywords: ['hand', 'rhs', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1366', - path: '/models/samples/sarcophagus.glb', // sarcophagus - category: 'prop', - keywords: ['sarcophagus', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1367', - path: '/models/samples/sarcophagusOpen.glb', // sarcophagusOpen - category: 'prop', - keywords: ['sarcophagusOpen', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1368', - path: '/models/samples/sawMill.glb', // sawMill - category: 'prop', - keywords: ['sawMill', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1369', - path: '/models/samples/seagulf.glb', // seagulf - category: 'prop', - keywords: ['seagulf', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1370', - path: '/models/samples/shaderBall.glb', // shaderBall - category: 'prop', - keywords: ['shaderBall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1371', - path: '/models/samples/shaderBall_rotation.glb', // shaderBall_rotation - category: 'prop', - keywords: ['shaderBall', 'rotation', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1372', - path: '/models/samples/shark.glb', // shark - category: 'prop', - keywords: ['shark', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1373', - path: '/models/samples/sign.glb', // sign - category: 'prop', - keywords: ['sign', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1374', - path: '/models/samples/signboard1.glb', // signboard1 - category: 'prop', - keywords: ['signboard1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1375', - path: '/models/samples/signboard2.glb', // signboard2 - category: 'prop', - keywords: ['signboard2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1376', - path: '/models/samples/snowBall.glb', // snowBall - category: 'prop', - keywords: ['snowBall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1377', - path: '/models/samples/snowField.glb', // snowField - category: 'prop', - keywords: ['snowField', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1378', - path: '/models/samples/solar_system.glb', // solar_system - category: 'prop', - keywords: ['solar', 'system', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1379', - path: '/models/samples/solid.glb', // solid - category: 'prop', - keywords: ['solid', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1380', - path: '/models/samples/SpecGlossVsMetalRough.glb', // SpecGlossVsMetalRough - category: 'prop', - keywords: ['SpecGlossVsMetalRough', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1381', - path: '/models/samples/spellDisk.glb', // spellDisk - category: 'prop', - keywords: ['spellDisk', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1382', - path: '/models/samples/straight.glb', // straight - category: 'prop', - keywords: ['straight', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1383', - path: '/models/samples/stud.glb', // stud - category: 'prop', - keywords: ['stud', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1384', - path: '/models/samples/stump.glb', // stump - category: 'prop', - keywords: ['stump', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1385', - path: '/models/samples/stump1.glb', // stump1 - category: 'prop', - keywords: ['stump1', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1386', - path: '/models/samples/stump2.glb', // stump2 - category: 'prop', - keywords: ['stump2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1387', - path: '/models/samples/SunglassesKhronos.glb', // SunglassesKhronos - category: 'prop', - keywords: ['SunglassesKhronos', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1388', - path: '/models/samples/target.glb', // target - category: 'prop', - keywords: ['target', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1389', - path: '/models/samples/TextureCoordinateTest.glb', // TextureCoordinateTest - category: 'prop', - keywords: ['TextureCoordinateTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1390', - path: '/models/samples/TextureEncodingTest.glb', // TextureEncodingTest - category: 'prop', - keywords: ['TextureEncodingTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1391', - path: '/models/samples/TextureSettingsTest.glb', // TextureSettingsTest - category: 'prop', - keywords: ['TextureSettingsTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1392', - path: '/models/samples/TextureTransformMultiTest.glb', // TextureTransformMultiTest - category: 'prop', - keywords: ['TextureTransformMultiTest', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1393', - path: '/models/samples/three.js-examples_bath_day.glb', // three.js-examples_bath_day - category: 'prop', - keywords: ['three.js', 'examples', 'bath', 'day', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1394', - path: '/models/samples/three.js-examples_coffeemat.glb', // three.js-examples_coffeemat - category: 'prop', - keywords: ['three.js', 'examples', 'coffeemat', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1395', - path: '/models/samples/three.js-examples_coffeeMug.glb', // three.js-examples_coffeeMug - category: 'prop', - keywords: ['three.js', 'examples', 'coffeeMug', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1396', - path: '/models/samples/three.js-examples_collision-world.glb', // three.js-examples_collision-world - category: 'prop', - keywords: ['three.js', 'examples', 'collision', 'world', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1397', - path: '/models/samples/three.js-examples_duck.glb', // three.js-examples_duck - category: 'prop', - keywords: ['three.js', 'examples', 'duck', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1398', - path: '/models/samples/three.js-examples_facecap.glb', // three.js-examples_facecap - category: 'prop', - keywords: ['three.js', 'examples', 'facecap', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1399', - path: '/models/samples/three.js-examples_ferrari.glb', // three.js-examples_ferrari - category: 'prop', - keywords: ['three.js', 'examples', 'ferrari', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1400', - path: '/models/samples/three.js-examples_Flamingo.glb', // three.js-examples_Flamingo - category: 'prop', - keywords: ['three.js', 'examples', 'Flamingo', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1401', - path: '/models/samples/three.js-examples_gears.glb', // three.js-examples_gears - category: 'prop', - keywords: ['three.js', 'examples', 'gears', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1402', - path: '/models/samples/three.js-examples_godrays_demo.glb', // three.js-examples_godrays_demo - category: 'prop', - keywords: ['three.js', 'examples', 'godrays', 'demo', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1403', - path: '/models/samples/three.js-examples_IridescentDishWithOlives.glb', // three.js-examples_IridescentDishWithOlives - category: 'prop', - keywords: ['three.js', 'examples', 'IridescentDishWithOlives', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1404', - path: '/models/samples/three.js-examples_kira.glb', // three.js-examples_kira - category: 'prop', - keywords: ['three.js', 'examples', 'kira', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1405', - path: '/models/samples/three.js-examples_LeePerrySmith.glb', // three.js-examples_LeePerrySmith - category: 'prop', - keywords: ['three.js', 'examples', 'LeePerrySmith', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1406', - path: '/models/samples/three.js-examples_LittlestTokyo.glb', // three.js-examples_LittlestTokyo - category: 'prop', - keywords: ['three.js', 'examples', 'LittlestTokyo', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1407', - path: '/models/samples/three.js-examples_Michelle.glb', // three.js-examples_Michelle - category: 'prop', - keywords: ['three.js', 'examples', 'Michelle', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1408', - path: '/models/samples/three.js-examples_Nefertiti.glb', // three.js-examples_Nefertiti - category: 'prop', - keywords: ['three.js', 'examples', 'Nefertiti', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1409', - path: '/models/samples/three.js-examples_nemetona.glb', // three.js-examples_nemetona - category: 'prop', - keywords: ['three.js', 'examples', 'nemetona', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1410', - path: '/models/samples/three.js-examples_Parrot.glb', // three.js-examples_Parrot - category: 'prop', - keywords: ['three.js', 'examples', 'Parrot', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1411', - path: '/models/samples/three.js-examples_pool.glb', // three.js-examples_pool - category: 'prop', - keywords: ['three.js', 'examples', 'pool', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1412', - path: '/models/samples/three.js-examples_PrimaryIonDrive.glb', // three.js-examples_PrimaryIonDrive - category: 'prop', - keywords: ['three.js', 'examples', 'PrimaryIonDrive', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1413', - path: '/models/samples/three.js-examples_readyplayer.me.glb', // three.js-examples_readyplayer.me - category: 'prop', - keywords: ['three.js', 'examples', 'readyplayer.me', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1414', - path: '/models/samples/three.js-examples_RobotExpressive.glb', // three.js-examples_RobotExpressive - category: 'prop', - keywords: ['three.js', 'examples', 'RobotExpressive', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1415', - path: '/models/samples/three.js-examples_rolex.glb', // three.js-examples_rolex - category: 'prop', - keywords: ['three.js', 'examples', 'rolex', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1416', - path: '/models/samples/three.js-examples_ShaderBall.glb', // three.js-examples_ShaderBall - category: 'prop', - keywords: ['three.js', 'examples', 'ShaderBall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1417', - path: '/models/samples/three.js-examples_ShaderBall2.glb', // three.js-examples_ShaderBall2 - category: 'prop', - keywords: ['three.js', 'examples', 'ShaderBall2', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1418', - path: '/models/samples/three.js-examples_ShadowmappableMesh.glb', // three.js-examples_ShadowmappableMesh - category: 'prop', - keywords: ['three.js', 'examples', 'ShadowmappableMesh', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1419', - path: '/models/samples/three.js-examples_steampunk_camera.glb', // three.js-examples_steampunk_camera - category: 'prop', - keywords: ['three.js', 'examples', 'steampunk', 'camera', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1420', - path: '/models/samples/three.js-examples_Stork.glb', // three.js-examples_Stork - category: 'prop', - keywords: ['three.js', 'examples', 'Stork', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1421', - path: '/models/samples/three.js-examples_venice_mask.glb', // three.js-examples_venice_mask - category: 'prop', - keywords: ['three.js', 'examples', 'venice', 'mask', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1422', - path: '/models/samples/three.js-examples_Xbot.glb', // three.js-examples_Xbot - category: 'prop', - keywords: ['three.js', 'examples', 'Xbot', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1423', - path: '/models/samples/toast_acrobatics.glb', // toast_acrobatics - category: 'prop', - keywords: ['toast', 'acrobatics', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1424', - path: '/models/samples/transfiguration_class.glb', // transfiguration_class - category: 'prop', - keywords: ['transfiguration', 'class', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1425', - path: '/models/samples/ufo.glb', // ufo - category: 'prop', - keywords: ['ufo', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1426', - path: '/models/samples/underwaterGround.glb', // underwaterGround - category: 'prop', - keywords: ['underwaterGround', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1427', - path: '/models/samples/underwaterScene.glb', // underwaterScene - category: 'prop', - keywords: ['underwaterScene', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1428', - path: '/models/samples/underwaterSceneNavMesh.glb', // underwaterSceneNavMesh - category: 'prop', - keywords: ['underwaterSceneNavMesh', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1429', - path: '/models/samples/valleyvillage.glb', // valleyvillage - category: 'prop', - keywords: ['valleyvillage', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1430', - path: '/models/samples/village.glb', // village - category: 'prop', - keywords: ['village', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1431', - path: '/models/samples/VirtualCity.glb', // VirtualCity - category: 'prop', - keywords: ['VirtualCity', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1432', - path: '/models/samples/wagon.glb', // wagon - category: 'prop', - keywords: ['wagon', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1433', - path: '/models/samples/waterwell.glb', // waterwell - category: 'prop', - keywords: ['waterwell', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1434', - path: '/models/samples/Xbot.glb', // Xbot - category: 'prop', - keywords: ['Xbot', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1435', - path: '/models/samples/yellowEnergyBall.glb', // yellowEnergyBall - category: 'prop', - keywords: ['yellowEnergyBall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1436', - path: '/models/samples/YetiSmall.glb', // YetiSmall - category: 'prop', - keywords: ['YetiSmall', 'samples'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1437', - path: '/models/vehicles/acrobaticPlane_variants.glb', // acrobaticPlane_variants - category: 'prop', - keywords: ['acrobaticPlane', 'variants', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1438', - path: '/models/vehicles/aerobatic_plane.glb', // aerobatic_plane - category: 'prop', - keywords: ['aerobatic', 'plane', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1439', - path: '/models/vehicles/babylon-assets_Buggy.glb', // babylon-assets_Buggy - category: 'prop', - keywords: ['babylon', 'assets', 'Buggy', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1440', - path: '/models/vehicles/babylon-assets_CesiumMilkTruck.glb', // babylon-assets_CesiumMilkTruck - category: 'prop', - keywords: ['babylon', 'assets', 'CesiumMilkTruck', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1441', - path: '/models/vehicles/car-kit_ambulance.glb', // car-kit_ambulance - category: 'prop', - keywords: ['car', 'kit', 'ambulance', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1442', - path: '/models/vehicles/car-kit_box.glb', // car-kit_box - category: 'prop', - keywords: ['car', 'kit', 'box', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1443', - path: '/models/vehicles/car-kit_cone-flat.glb', // car-kit_cone-flat - category: 'prop', - keywords: ['car', 'kit', 'cone', 'flat', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1444', - path: '/models/vehicles/car-kit_cone.glb', // car-kit_cone - category: 'prop', - keywords: ['car', 'kit', 'cone', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1445', - path: '/models/vehicles/car-kit_debris-bolt.glb', // car-kit_debris-bolt - category: 'prop', - keywords: ['car', 'kit', 'debris', 'bolt', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1446', - path: '/models/vehicles/car-kit_debris-bumper.glb', // car-kit_debris-bumper - category: 'prop', - keywords: ['car', 'kit', 'debris', 'bumper', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1447', - path: '/models/vehicles/car-kit_debris-drivetrain-axle.glb', // car-kit_debris-drivetrain-axle - category: 'prop', - keywords: ['car', 'kit', 'debris', 'drivetrain', 'axle', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1448', - path: '/models/vehicles/car-kit_debris-drivetrain.glb', // car-kit_debris-drivetrain - category: 'prop', - keywords: ['car', 'kit', 'debris', 'drivetrain', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1449', - path: '/models/vehicles/car-kit_debris-nut.glb', // car-kit_debris-nut - category: 'prop', - keywords: ['car', 'kit', 'debris', 'nut', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1450', - path: '/models/vehicles/car-kit_debris-plate-a.glb', // car-kit_debris-plate-a - category: 'prop', - keywords: ['car', 'kit', 'debris', 'plate', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1451', - path: '/models/vehicles/car-kit_debris-plate-b.glb', // car-kit_debris-plate-b - category: 'prop', - keywords: ['car', 'kit', 'debris', 'plate', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1452', - path: '/models/vehicles/car-kit_debris-plate-small-a.glb', // car-kit_debris-plate-small-a - category: 'prop', - keywords: ['car', 'kit', 'debris', 'plate', 'small', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1453', - path: '/models/vehicles/car-kit_debris-plate-small-b.glb', // car-kit_debris-plate-small-b - category: 'prop', - keywords: ['car', 'kit', 'debris', 'plate', 'small', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1454', - path: '/models/vehicles/car-kit_debris-spoiler-a.glb', // car-kit_debris-spoiler-a - category: 'prop', - keywords: ['car', 'kit', 'debris', 'spoiler', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1455', - path: '/models/vehicles/car-kit_debris-spoiler-b.glb', // car-kit_debris-spoiler-b - category: 'prop', - keywords: ['car', 'kit', 'debris', 'spoiler', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1456', - path: '/models/vehicles/car-kit_debris-tire.glb', // car-kit_debris-tire - category: 'prop', - keywords: ['car', 'kit', 'debris', 'tire', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1457', - path: '/models/vehicles/car-kit_delivery-flat.glb', // car-kit_delivery-flat - category: 'prop', - keywords: ['car', 'kit', 'delivery', 'flat', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1458', - path: '/models/vehicles/car-kit_delivery.glb', // car-kit_delivery - category: 'prop', - keywords: ['car', 'kit', 'delivery', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1459', - path: '/models/vehicles/car-kit_firetruck.glb', // car-kit_firetruck - category: 'prop', - keywords: ['car', 'kit', 'firetruck', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1460', - path: '/models/vehicles/car-kit_garbage-truck.glb', // car-kit_garbage-truck - category: 'prop', - keywords: ['car', 'kit', 'garbage', 'truck', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1461', - path: '/models/vehicles/car-kit_hatchback-sports.glb', // car-kit_hatchback-sports - category: 'prop', - keywords: ['car', 'kit', 'hatchback', 'sports', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1462', - path: '/models/vehicles/car-kit_kart-oobi.glb', // car-kit_kart-oobi - category: 'prop', - keywords: ['car', 'kit', 'kart', 'oobi', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1463', - path: '/models/vehicles/car-kit_kart-oodi.glb', // car-kit_kart-oodi - category: 'prop', - keywords: ['car', 'kit', 'kart', 'oodi', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1464', - path: '/models/vehicles/car-kit_kart-ooli.glb', // car-kit_kart-ooli - category: 'prop', - keywords: ['car', 'kit', 'kart', 'ooli', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1465', - path: '/models/vehicles/car-kit_kart-oopi.glb', // car-kit_kart-oopi - category: 'prop', - keywords: ['car', 'kit', 'kart', 'oopi', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1466', - path: '/models/vehicles/car-kit_kart-oozi.glb', // car-kit_kart-oozi - category: 'prop', - keywords: ['car', 'kit', 'kart', 'oozi', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1467', - path: '/models/vehicles/car-kit_police.glb', // car-kit_police - category: 'prop', - keywords: ['car', 'kit', 'police', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1468', - path: '/models/vehicles/car-kit_race-future.glb', // car-kit_race-future - category: 'prop', - keywords: ['car', 'kit', 'race', 'future', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1469', - path: '/models/vehicles/car-kit_race.glb', // car-kit_race - category: 'prop', - keywords: ['car', 'kit', 'race', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1470', - path: '/models/vehicles/car-kit_sedan-sports.glb', // car-kit_sedan-sports - category: 'prop', - keywords: ['car', 'kit', 'sedan', 'sports', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1471', - path: '/models/vehicles/car-kit_sedan.glb', // car-kit_sedan - category: 'prop', - keywords: ['car', 'kit', 'sedan', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1472', - path: '/models/vehicles/car-kit_suv-luxury.glb', // car-kit_suv-luxury - category: 'prop', - keywords: ['car', 'kit', 'suv', 'luxury', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1473', - path: '/models/vehicles/car-kit_suv.glb', // car-kit_suv - category: 'prop', - keywords: ['car', 'kit', 'suv', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1474', - path: '/models/vehicles/car-kit_taxi.glb', // car-kit_taxi - category: 'prop', - keywords: ['car', 'kit', 'taxi', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1475', - path: '/models/vehicles/car-kit_tractor-police.glb', // car-kit_tractor-police - category: 'prop', - keywords: ['car', 'kit', 'tractor', 'police', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1476', - path: '/models/vehicles/car-kit_tractor-shovel.glb', // car-kit_tractor-shovel - category: 'prop', - keywords: ['car', 'kit', 'tractor', 'shovel', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1477', - path: '/models/vehicles/car-kit_tractor.glb', // car-kit_tractor - category: 'prop', - keywords: ['car', 'kit', 'tractor', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1478', - path: '/models/vehicles/car-kit_truck-flat.glb', // car-kit_truck-flat - category: 'prop', - keywords: ['car', 'kit', 'truck', 'flat', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1479', - path: '/models/vehicles/car-kit_truck.glb', // car-kit_truck - category: 'prop', - keywords: ['car', 'kit', 'truck', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1480', - path: '/models/vehicles/car-kit_van.glb', // car-kit_van - category: 'prop', - keywords: ['car', 'kit', 'van', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1481', - path: '/models/vehicles/car-kit_wheel-dark.glb', // car-kit_wheel-dark - category: 'prop', - keywords: ['car', 'kit', 'wheel', 'dark', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1482', - path: '/models/vehicles/car-kit_wheel-default.glb', // car-kit_wheel-default - category: 'prop', - keywords: ['car', 'kit', 'wheel', 'default', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1483', - path: '/models/vehicles/car-kit_wheel-racing.glb', // car-kit_wheel-racing - category: 'prop', - keywords: ['car', 'kit', 'wheel', 'racing', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1484', - path: '/models/vehicles/car-kit_wheel-tractor-back.glb', // car-kit_wheel-tractor-back - category: 'prop', - keywords: ['car', 'kit', 'wheel', 'tractor', 'back', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1485', - path: '/models/vehicles/car-kit_wheel-tractor-dark-back.glb', // car-kit_wheel-tractor-dark-back - category: 'prop', - keywords: ['car', 'kit', 'wheel', 'tractor', 'dark', 'back', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1486', - path: '/models/vehicles/car-kit_wheel-tractor-dark-front.glb', // car-kit_wheel-tractor-dark-front - category: 'prop', - keywords: ['car', 'kit', 'wheel', 'tractor', 'dark', 'front', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1487', - path: '/models/vehicles/car-kit_wheel-tractor-front.glb', // car-kit_wheel-tractor-front - category: 'prop', - keywords: ['car', 'kit', 'wheel', 'tractor', 'front', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1488', - path: '/models/vehicles/car-kit_wheel-truck.glb', // car-kit_wheel-truck - category: 'prop', - keywords: ['car', 'kit', 'wheel', 'truck', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1489', - path: '/models/vehicles/car.glb', // car - category: 'prop', - keywords: ['car', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1490', - path: '/models/vehicles/CarbonFiberWheel.glb', // CarbonFiberWheel - category: 'prop', - keywords: ['CarbonFiberWheel', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1491', - path: '/models/vehicles/CarbonFibre.glb', // CarbonFibre - category: 'prop', - keywords: ['CarbonFibre', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1492', - path: '/models/vehicles/CarConcept.glb', // CarConcept - category: 'prop', - keywords: ['CarConcept', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1493', - path: '/models/vehicles/CesiumMilkTruck.glb', // CesiumMilkTruck - category: 'prop', - keywords: ['CesiumMilkTruck', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1494', - path: '/models/vehicles/ClearCoatCarPaint.glb', // ClearCoatCarPaint - category: 'prop', - keywords: ['ClearCoatCarPaint', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1495', - path: '/models/vehicles/fantasy-town-kit_cart-high.glb', // fantasy-town-kit_cart-high - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'cart', 'high', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1496', - path: '/models/vehicles/fantasy-town-kit_cart.glb', // fantasy-town-kit_cart - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'cart', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1497', - path: '/models/vehicles/graveyard-kit_pumpkin-carved.glb', // graveyard-kit_pumpkin-carved - category: 'prop', - keywords: ['graveyard', 'kit', 'pumpkin', 'carved', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1498', - path: '/models/vehicles/graveyard-kit_pumpkin-tall-carved.glb', // graveyard-kit_pumpkin-tall-carved - category: 'prop', - keywords: ['graveyard', 'kit', 'pumpkin', 'tall', 'carved', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1499', - path: '/models/vehicles/highPolyPlane.glb', // highPolyPlane - category: 'prop', - keywords: ['highPolyPlane', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1500', - path: '/models/vehicles/pumpkinBucketCarved.glb', // pumpkinBucketCarved - category: 'prop', - keywords: ['pumpkinBucketCarved', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1501', - path: '/models/vehicles/three.js-examples_space_ship_hallway.glb', // three.js-examples_space_ship_hallway - category: 'prop', - keywords: ['three.js', 'examples', 'space', 'ship', 'hallway', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1502', - path: '/models/vehicles/ToyCar.glb', // ToyCar - category: 'prop', - keywords: ['ToyCar', 'vehicles'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1503', - path: '/models/weapons/babylon-assets_DamagedHelmet.glb', // babylon-assets_DamagedHelmet - category: 'prop', - keywords: ['babylon', 'assets', 'DamagedHelmet', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1504', - path: '/models/weapons/bowlingBall.glb', // bowlingBall - category: 'prop', - keywords: ['bowlingBall', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1505', - path: '/models/weapons/bowlingPinpin.glb', // bowlingPinpin - category: 'prop', - keywords: ['bowlingPinpin', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1506', - path: '/models/weapons/DamagedHelmet.glb', // DamagedHelmet - category: 'prop', - keywords: ['DamagedHelmet', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1507', - path: '/models/weapons/flightHelmet.glb', // flightHelmet - category: 'prop', - keywords: ['flightHelmet', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1508', - path: '/models/weapons/frostAxe.glb', // frostAxe - category: 'prop', - keywords: ['frostAxe', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1509', - path: '/models/weapons/frostAxe_noMorph.glb', // frostAxe_noMorph - category: 'prop', - keywords: ['frostAxe', 'noMorph', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1510', - path: '/models/weapons/graveyard-kit_detail-bowl.glb', // graveyard-kit_detail-bowl - category: 'prop', - keywords: ['graveyard', 'kit', 'detail', 'bowl', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1511', - path: '/models/weapons/platformer-kit_arrow.glb', // platformer-kit_arrow - category: 'prop', - keywords: ['platformer', 'kit', 'arrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1512', - path: '/models/weapons/platformer-kit_arrows.glb', // platformer-kit_arrows - category: 'prop', - keywords: ['platformer', 'kit', 'arrows', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1513', - path: '/models/weapons/platformer-kit_block-snow-large-slope-narrow.glb', // platformer-kit_block-snow-large-slope-narrow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'large', 'slope', 'narrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1514', - path: '/models/weapons/platformer-kit_block-snow-large-slope-steep-narrow.glb', // platformer-kit_block-snow-large-slope-steep-narrow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'large', 'slope', 'steep', 'narrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1515', - path: '/models/weapons/platformer-kit_block-snow-low-narrow.glb', // platformer-kit_block-snow-low-narrow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'low', 'narrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1516', - path: '/models/weapons/platformer-kit_block-snow-narrow.glb', // platformer-kit_block-snow-narrow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'narrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1517', - path: '/models/weapons/platformer-kit_block-snow-overhang-large-slope-narrow.glb', // platformer-kit_block-snow-overhang-large-slope-narrow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'large', 'slope', 'narrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1518', - path: '/models/weapons/platformer-kit_block-snow-overhang-large-slope-steep-narrow.glb', // platformer-kit_block-snow-overhang-large-slope-steep-narrow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'large', 'slope', 'steep', 'narrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1519', - path: '/models/weapons/platformer-kit_block-snow-overhang-low-narrow.glb', // platformer-kit_block-snow-overhang-low-narrow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'low', 'narrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1520', - path: '/models/weapons/platformer-kit_block-snow-overhang-narrow.glb', // platformer-kit_block-snow-overhang-narrow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'narrow', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1521', - path: '/models/weapons/runeSword.glb', // runeSword - category: 'prop', - keywords: ['runeSword', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1522', - path: '/models/weapons/stumpAxe.glb', // stumpAxe - category: 'prop', - keywords: ['stumpAxe', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1523', - path: '/models/weapons/sword_noMat.glb', // sword_noMat - category: 'prop', - keywords: ['sword', 'noMat', 'weapons'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1524', - path: '/models/_test_data/AlphaBlendModeTest.glb', // AlphaBlendModeTest - category: 'prop', - keywords: ['AlphaBlendModeTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1525', - path: '/models/_test_data/AlphaBlendModeTest_1769416633725.glb', // AlphaBlendModeTest_1769416633725 - category: 'prop', - keywords: ['AlphaBlendModeTest', '1769416633725', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1526', - path: '/models/_test_data/AnimatedMorphCube.glb', // AnimatedMorphCube - category: 'prop', - keywords: ['AnimatedMorphCube', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1527', - path: '/models/_test_data/AnisotropyDiscTest.glb', // AnisotropyDiscTest - category: 'prop', - keywords: ['AnisotropyDiscTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1528', - path: '/models/_test_data/anisotropyMesh.glb', // anisotropyMesh - category: 'prop', - keywords: ['anisotropyMesh', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1529', - path: '/models/_test_data/AnisotropyRotationTest.glb', // AnisotropyRotationTest - category: 'prop', - keywords: ['AnisotropyRotationTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1530', - path: '/models/_test_data/AnisotropyStrengthTest.glb', // AnisotropyStrengthTest - category: 'prop', - keywords: ['AnisotropyStrengthTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1531', - path: '/models/_test_data/AttenuationTest.glb', // AttenuationTest - category: 'prop', - keywords: ['AttenuationTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1532', - path: '/models/_test_data/babylon-assets_AnimatedMorphCube.glb', // babylon-assets_AnimatedMorphCube - category: 'prop', - keywords: ['babylon', 'assets', 'AnimatedMorphCube', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1533', - path: '/models/_test_data/babylon-assets_AnimatedMorphSphere.glb', // babylon-assets_AnimatedMorphSphere - category: 'prop', - keywords: ['babylon', 'assets', 'AnimatedMorphSphere', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1534', - path: '/models/_test_data/babylon-assets_NormalTangentTest.glb', // babylon-assets_NormalTangentTest - category: 'prop', - keywords: ['babylon', 'assets', 'NormalTangentTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1535', - path: '/models/_test_data/babylon-assets_VertexColorTest.glb', // babylon-assets_VertexColorTest - category: 'prop', - keywords: ['babylon', 'assets', 'VertexColorTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1536', - path: '/models/_test_data/ClearCoatTest.glb', // ClearCoatTest - category: 'prop', - keywords: ['ClearCoatTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1537', - path: '/models/_test_data/ClearCoatTest_1769416633736.glb', // ClearCoatTest_1769416633736 - category: 'prop', - keywords: ['ClearCoatTest', '1769416633736', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1538', - path: '/models/_test_data/ClearcoatWicker.glb', // ClearcoatWicker - category: 'prop', - keywords: ['ClearcoatWicker', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1539', - path: '/models/_test_data/CompareAlphaCoverage.glb', // CompareAlphaCoverage - category: 'prop', - keywords: ['CompareAlphaCoverage', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1540', - path: '/models/_test_data/CompareAmbientOcclusion.glb', // CompareAmbientOcclusion - category: 'prop', - keywords: ['CompareAmbientOcclusion', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1541', - path: '/models/_test_data/CompareAnisotropy.glb', // CompareAnisotropy - category: 'prop', - keywords: ['CompareAnisotropy', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1542', - path: '/models/_test_data/CompareBaseColor.glb', // CompareBaseColor - category: 'prop', - keywords: ['CompareBaseColor', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1543', - path: '/models/_test_data/CompareClearcoat.glb', // CompareClearcoat - category: 'prop', - keywords: ['CompareClearcoat', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1544', - path: '/models/_test_data/CompareDispersion.glb', // CompareDispersion - category: 'prop', - keywords: ['CompareDispersion', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1545', - path: '/models/_test_data/CompareEmissiveStrength.glb', // CompareEmissiveStrength - category: 'prop', - keywords: ['CompareEmissiveStrength', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1546', - path: '/models/_test_data/CompareIor.glb', // CompareIor - category: 'prop', - keywords: ['CompareIor', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1547', - path: '/models/_test_data/CompareIridescence.glb', // CompareIridescence - category: 'prop', - keywords: ['CompareIridescence', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1548', - path: '/models/_test_data/CompareMetallic.glb', // CompareMetallic - category: 'prop', - keywords: ['CompareMetallic', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1549', - path: '/models/_test_data/CompareNormal.glb', // CompareNormal - category: 'prop', - keywords: ['CompareNormal', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1550', - path: '/models/_test_data/CompareRoughness.glb', // CompareRoughness - category: 'prop', - keywords: ['CompareRoughness', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1551', - path: '/models/_test_data/CompareSheen.glb', // CompareSheen - category: 'prop', - keywords: ['CompareSheen', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1552', - path: '/models/_test_data/CompareSpecular.glb', // CompareSpecular - category: 'prop', - keywords: ['CompareSpecular', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1553', - path: '/models/_test_data/CompareTransmission.glb', // CompareTransmission - category: 'prop', - keywords: ['CompareTransmission', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1554', - path: '/models/_test_data/CompareVolume.glb', // CompareVolume - category: 'prop', - keywords: ['CompareVolume', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1555', - path: '/models/_test_data/CubeVisibility.glb', // CubeVisibility - category: 'prop', - keywords: ['CubeVisibility', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1556', - path: '/models/_test_data/DiffuseTransmissionTest.glb', // DiffuseTransmissionTest - category: 'prop', - keywords: ['DiffuseTransmissionTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1557', - path: '/models/_test_data/DispersionTest.glb', // DispersionTest - category: 'prop', - keywords: ['DispersionTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1558', - path: '/models/_test_data/EmissiveStrengthTest.glb', // EmissiveStrengthTest - category: 'prop', - keywords: ['EmissiveStrengthTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1559', - path: '/models/_test_data/fantasy-town-kit_banner-green.glb', // fantasy-town-kit_banner-green - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'banner', 'green', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1560', - path: '/models/_test_data/fantasy-town-kit_banner-red.glb', // fantasy-town-kit_banner-red - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'banner', 'red', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1561', - path: '/models/_test_data/fantasy-town-kit_chimney-base.glb', // fantasy-town-kit_chimney-base - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'chimney', 'base', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1562', - path: '/models/_test_data/fantasy-town-kit_chimney-top.glb', // fantasy-town-kit_chimney-top - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'chimney', 'top', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1563', - path: '/models/_test_data/fantasy-town-kit_chimney.glb', // fantasy-town-kit_chimney - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'chimney', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1564', - path: '/models/_test_data/fantasy-town-kit_fountain-center.glb', // fantasy-town-kit_fountain-center - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'center', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1565', - path: '/models/_test_data/fantasy-town-kit_fountain-corner-inner-square.glb', // fantasy-town-kit_fountain-corner-inner-square - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'corner', 'inner', 'square', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1566', - path: '/models/_test_data/fantasy-town-kit_fountain-corner.glb', // fantasy-town-kit_fountain-corner - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'corner', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1567', - path: '/models/_test_data/fantasy-town-kit_fountain-edge.glb', // fantasy-town-kit_fountain-edge - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'fountain', 'edge', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1568', - path: '/models/_test_data/fantasy-town-kit_hedge-large.glb', // fantasy-town-kit_hedge-large - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'hedge', 'large', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1569', - path: '/models/_test_data/fantasy-town-kit_hedge.glb', // fantasy-town-kit_hedge - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'hedge', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1570', - path: '/models/_test_data/fantasy-town-kit_overhang.glb', // fantasy-town-kit_overhang - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'overhang', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1571', - path: '/models/_test_data/fantasy-town-kit_pillar-wood.glb', // fantasy-town-kit_pillar-wood - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'pillar', 'wood', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1572', - path: '/models/_test_data/fantasy-town-kit_planks-half.glb', // fantasy-town-kit_planks-half - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'planks', 'half', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1573', - path: '/models/_test_data/fantasy-town-kit_poles-horizontal.glb', // fantasy-town-kit_poles-horizontal - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'poles', 'horizontal', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1574', - path: '/models/_test_data/fantasy-town-kit_poles.glb', // fantasy-town-kit_poles - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'poles', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1575', - path: '/models/_test_data/fantasy-town-kit_road-curb-end.glb', // fantasy-town-kit_road-curb-end - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', 'curb', 'end', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1576', - path: '/models/_test_data/fantasy-town-kit_road-curb.glb', // fantasy-town-kit_road-curb - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', 'curb', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1577', - path: '/models/_test_data/fantasy-town-kit_road-edge-slope.glb', // fantasy-town-kit_road-edge-slope - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', 'edge', 'slope', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1578', - path: '/models/_test_data/fantasy-town-kit_road-edge.glb', // fantasy-town-kit_road-edge - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', 'edge', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1579', - path: '/models/_test_data/fantasy-town-kit_road-slope.glb', // fantasy-town-kit_road-slope - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', 'slope', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1580', - path: '/models/_test_data/fantasy-town-kit_road.glb', // fantasy-town-kit_road - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'road', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1581', - path: '/models/_test_data/fantasy-town-kit_stairs-full-corner-inner.glb', // fantasy-town-kit_stairs-full-corner-inner - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'full', 'corner', 'inner', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1582', - path: '/models/_test_data/fantasy-town-kit_stairs-full-corner-outer.glb', // fantasy-town-kit_stairs-full-corner-outer - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'full', 'corner', 'outer', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1583', - path: '/models/_test_data/fantasy-town-kit_stairs-full.glb', // fantasy-town-kit_stairs-full - category: 'prop', - keywords: ['fantasy', 'town', 'kit', 'stairs', 'full', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1584', - path: '/models/_test_data/graveyard-kit_pillar-obelisk.glb', // graveyard-kit_pillar-obelisk - category: 'prop', - keywords: ['graveyard', 'kit', 'pillar', 'obelisk', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1585', - path: '/models/_test_data/InterpolationTest.glb', // InterpolationTest - category: 'prop', - keywords: ['InterpolationTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1586', - path: '/models/_test_data/IORTestGrid.glb', // IORTestGrid - category: 'prop', - keywords: ['IORTestGrid', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1587', - path: '/models/_test_data/IridescenceAbalone.glb', // IridescenceAbalone - category: 'prop', - keywords: ['IridescenceAbalone', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1588', - path: '/models/_test_data/IridescenceSuzanne.glb', // IridescenceSuzanne - category: 'prop', - keywords: ['IridescenceSuzanne', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1589', - path: '/models/_test_data/LevelOfDetail.glb', // LevelOfDetail - category: 'prop', - keywords: ['LevelOfDetail', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1590', - path: '/models/_test_data/LightVisibility.glb', // LightVisibility - category: 'prop', - keywords: ['LightVisibility', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1591', - path: '/models/_test_data/MaterialsVariantsShoe.glb', // MaterialsVariantsShoe - category: 'prop', - keywords: ['MaterialsVariantsShoe', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1592', - path: '/models/_test_data/model_0edd72b2-508.glb', // model_0edd72b2-508 - category: 'prop', - keywords: ['model', '0edd72b2', '508', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1593', - path: '/models/_test_data/model_1a363c0a-9d6.glb', // model_1a363c0a-9d6 - category: 'prop', - keywords: ['model', '1a363c0a', '9d6', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1594', - path: '/models/_test_data/model_1c2c2336-452.glb', // model_1c2c2336-452 - category: 'prop', - keywords: ['model', '1c2c2336', '452', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1595', - path: '/models/_test_data/model_378cbff9-748.glb', // model_378cbff9-748 - category: 'prop', - keywords: ['model', '378cbff9', '748', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1596', - path: '/models/_test_data/model_3f54926f-2ae.glb', // model_3f54926f-2ae - category: 'prop', - keywords: ['model', '3f54926f', '2ae', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1597', - path: '/models/_test_data/model_47401bf3-3f5.glb', // model_47401bf3-3f5 - category: 'prop', - keywords: ['model', '47401bf3', '3f5', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1598', - path: '/models/_test_data/model_47f79259-a8c.glb', // model_47f79259-a8c - category: 'prop', - keywords: ['model', '47f79259', 'a8c', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1599', - path: '/models/_test_data/model_5fea0565-f63.glb', // model_5fea0565-f63 - category: 'prop', - keywords: ['model', '5fea0565', 'f63', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1600', - path: '/models/_test_data/model_6a19c719-a9a.glb', // model_6a19c719-a9a - category: 'prop', - keywords: ['model', '6a19c719', 'a9a', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1601', - path: '/models/_test_data/model_7a7e0ee3-619.glb', // model_7a7e0ee3-619 - category: 'prop', - keywords: ['model', '7a7e0ee3', '619', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1602', - path: '/models/_test_data/model_80462a56-d7c.glb', // model_80462a56-d7c - category: 'prop', - keywords: ['model', '80462a56', 'd7c', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1603', - path: '/models/_test_data/model_854a8a67-3e8.glb', // model_854a8a67-3e8 - category: 'prop', - keywords: ['model', '854a8a67', '3e8', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1604', - path: '/models/_test_data/model_8b38e2ff-f63.glb', // model_8b38e2ff-f63 - category: 'prop', - keywords: ['model', '8b38e2ff', 'f63', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1605', - path: '/models/_test_data/model_8f6bffad-7c5.glb', // model_8f6bffad-7c5 - category: 'prop', - keywords: ['model', '8f6bffad', '7c5', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1606', - path: '/models/_test_data/model_a38eff0d-59c.glb', // model_a38eff0d-59c - category: 'prop', - keywords: ['model', 'a38eff0d', '59c', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1607', - path: '/models/_test_data/model_b2f30fa2-517.glb', // model_b2f30fa2-517 - category: 'prop', - keywords: ['model', 'b2f30fa2', '517', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1608', - path: '/models/_test_data/model_b96212aa-0d9.glb', // model_b96212aa-0d9 - category: 'prop', - keywords: ['model', 'b96212aa', '0d9', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1609', - path: '/models/_test_data/model_be8d450b-5d4.glb', // model_be8d450b-5d4 - category: 'prop', - keywords: ['model', 'be8d450b', '5d4', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1610', - path: '/models/_test_data/model_e3912051-2d6.glb', // model_e3912051-2d6 - category: 'prop', - keywords: ['model', 'e3912051', '2d6', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1611', - path: '/models/_test_data/model_fa5c7f32-60f.glb', // model_fa5c7f32-60f - category: 'prop', - keywords: ['model', 'fa5c7f32', '60f', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1612', - path: '/models/_test_data/morphLoader.glb', // morphLoader - category: 'prop', - keywords: ['morphLoader', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1613', - path: '/models/_test_data/MorphPrimitivesTest.glb', // MorphPrimitivesTest - category: 'prop', - keywords: ['MorphPrimitivesTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1614', - path: '/models/_test_data/MorphStressTest.glb', // MorphStressTest - category: 'prop', - keywords: ['MorphStressTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1615', - path: '/models/_test_data/morphTargetBars.glb', // morphTargetBars - category: 'prop', - keywords: ['morphTargetBars', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1616', - path: '/models/_test_data/MosquitoInAmber_no_extension.glb', // MosquitoInAmber_no_extension - category: 'prop', - keywords: ['MosquitoInAmber', 'extension', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1617', - path: '/models/_test_data/mrtk-fluent-button.glb', // mrtk-fluent-button - category: 'prop', - keywords: ['mrtk', 'fluent', 'button', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1618', - path: '/models/_test_data/NegativeScaleTest.glb', // NegativeScaleTest - category: 'prop', - keywords: ['NegativeScaleTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1619', - path: '/models/_test_data/NormalTangentMirrorTest.glb', // NormalTangentMirrorTest - category: 'prop', - keywords: ['NormalTangentMirrorTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1620', - path: '/models/_test_data/NormalTangentTest.glb', // NormalTangentTest - category: 'prop', - keywords: ['NormalTangentTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1621', - path: '/models/_test_data/platformer-kit_block-snow-corner-low.glb', // platformer-kit_block-snow-corner-low - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'corner', 'low', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1622', - path: '/models/_test_data/platformer-kit_block-snow-corner.glb', // platformer-kit_block-snow-corner - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'corner', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1623', - path: '/models/_test_data/platformer-kit_block-snow-hexagon.glb', // platformer-kit_block-snow-hexagon - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'hexagon', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1624', - path: '/models/_test_data/platformer-kit_block-snow-large-tall.glb', // platformer-kit_block-snow-large-tall - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'large', 'tall', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1625', - path: '/models/_test_data/platformer-kit_block-snow-large.glb', // platformer-kit_block-snow-large - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'large', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1626', - path: '/models/_test_data/platformer-kit_block-snow-long.glb', // platformer-kit_block-snow-long - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'long', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1627', - path: '/models/_test_data/platformer-kit_block-snow-low-hexagon.glb', // platformer-kit_block-snow-low-hexagon - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'low', 'hexagon', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1628', - path: '/models/_test_data/platformer-kit_block-snow-low-large.glb', // platformer-kit_block-snow-low-large - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'low', 'large', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1629', - path: '/models/_test_data/platformer-kit_block-snow-low-long.glb', // platformer-kit_block-snow-low-long - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'low', 'long', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1630', - path: '/models/_test_data/platformer-kit_block-snow-low.glb', // platformer-kit_block-snow-low - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'low', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1631', - path: '/models/_test_data/platformer-kit_block-snow-overhang-hexagon.glb', // platformer-kit_block-snow-overhang-hexagon - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'hexagon', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1632', - path: '/models/_test_data/platformer-kit_block-snow-overhang-low-hexagon.glb', // platformer-kit_block-snow-overhang-low-hexagon - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', 'overhang', 'low', 'hexagon', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1633', - path: '/models/_test_data/platformer-kit_block-snow.glb', // platformer-kit_block-snow - category: 'prop', - keywords: ['platformer', 'kit', 'block', 'snow', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1634', - path: '/models/_test_data/platformer-kit_heart.glb', // platformer-kit_heart - category: 'prop', - keywords: ['platformer', 'kit', 'heart', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1635', - path: '/models/_test_data/platformer-kit_hedge.glb', // platformer-kit_hedge - category: 'prop', - keywords: ['platformer', 'kit', 'hedge', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1636', - path: '/models/_test_data/platformer-kit_jewel.glb', // platformer-kit_jewel - category: 'prop', - keywords: ['platformer', 'kit', 'jewel', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1637', - path: '/models/_test_data/platformer-kit_ladder.glb', // platformer-kit_ladder - category: 'prop', - keywords: ['platformer', 'kit', 'ladder', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1638', - path: '/models/_test_data/platformer-kit_lock.glb', // platformer-kit_lock - category: 'prop', - keywords: ['platformer', 'kit', 'lock', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1639', - path: '/models/_test_data/platformer-kit_platform-overhang.glb', // platformer-kit_platform-overhang - category: 'prop', - keywords: ['platformer', 'kit', 'platform', 'overhang', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1640', - path: '/models/_test_data/platformer-kit_platform-ramp.glb', // platformer-kit_platform-ramp - category: 'prop', - keywords: ['platformer', 'kit', 'platform', 'ramp', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1641', - path: '/models/_test_data/platformer-kit_platform.glb', // platformer-kit_platform - category: 'prop', - keywords: ['platformer', 'kit', 'platform', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1642', - path: '/models/_test_data/platformer-kit_sign.glb', // platformer-kit_sign - category: 'prop', - keywords: ['platformer', 'kit', 'sign', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1643', - path: '/models/_test_data/platformer-kit_star.glb', // platformer-kit_star - category: 'prop', - keywords: ['platformer', 'kit', 'star', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1644', - path: '/models/_test_data/SheenTestGrid.glb', // SheenTestGrid - category: 'prop', - keywords: ['SheenTestGrid', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1645', - path: '/models/_test_data/shoe_variants.glb', // shoe_variants - category: 'prop', - keywords: ['shoe', 'variants', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1646', - path: '/models/_test_data/SimpleInstancing.glb', // SimpleInstancing - category: 'prop', - keywords: ['SimpleInstancing', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1647', - path: '/models/_test_data/SlateProximity.glb', // SlateProximity - category: 'prop', - keywords: ['SlateProximity', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1648', - path: '/models/_test_data/SpecularSilkPouf.glb', // SpecularSilkPouf - category: 'prop', - keywords: ['SpecularSilkPouf', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1649', - path: '/models/_test_data/SpecularTest.glb', // SpecularTest - category: 'prop', - keywords: ['SpecularTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1650', - path: '/models/_test_data/SphereWithTangents.glb', // SphereWithTangents - category: 'prop', - keywords: ['SphereWithTangents', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1651', - path: '/models/_test_data/TextureLinearInterpolationTest.glb', // TextureLinearInterpolationTest - category: 'prop', - keywords: ['TextureLinearInterpolationTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1652', - path: '/models/_test_data/three.js-examples_ClearcoatTest.glb', // three.js-examples_ClearcoatTest - category: 'prop', - keywords: ['three.js', 'examples', 'ClearcoatTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1653', - path: '/models/_test_data/three.js-examples_DispersionTest.glb', // three.js-examples_DispersionTest - category: 'prop', - keywords: ['three.js', 'examples', 'DispersionTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1654', - path: '/models/_test_data/TransmissionOrderTest.glb', // TransmissionOrderTest - category: 'prop', - keywords: ['TransmissionOrderTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1655', - path: '/models/_test_data/TransmissionRoughnessTest.glb', // TransmissionRoughnessTest - category: 'prop', - keywords: ['TransmissionRoughnessTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1656', - path: '/models/_test_data/TransmissionTest.glb', // TransmissionTest - category: 'prop', - keywords: ['TransmissionTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1657', - path: '/models/_test_data/Unicode❤♻Test.glb', // Unicode❤♻Test - category: 'prop', - keywords: ['Unicode❤♻Test', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1658', - path: '/models/_test_data/UnlitTest.glb', // UnlitTest - category: 'prop', - keywords: ['UnlitTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1659', - path: '/models/_test_data/VertexColorTest.glb', // VertexColorTest - category: 'prop', - keywords: ['VertexColorTest', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, - { - id: 'local_1660', - path: '/models/_test_data/XmpMetadataRoundedCube.glb', // XmpMetadataRoundedCube - category: 'prop', - keywords: ['XmpMetadataRoundedCube', '_test_data'], - normalizedScale: 1.0, - placement: { zone: 'any', groundOffset: 0, minSpacing: 1.0 }, - boundingBox: { width: 1, height: 1, depth: 1 } - }, -]; +// 초기화 상태 관리 +let ASSETS: AssetMetadata[] = []; +let isLoaded = false; +let initPromise: Promise | null = null; + +// 초기화 함수: 앱 시작 시 또는 에셋 접근 전 호출 필요 +export async function initializeAssetRegistry(): Promise { + if (isLoaded) return; + if (initPromise) return initPromise; + + initPromise = (async () => { + try { + // [v3.4 Fix] 클라이언트 사이드 대량 로드 중단 (메모리 최적화) + // 25,000개 이상의 에셋 메타데이터를 클라이언트에 상주시키는 것은 WebGL 안정성에 치명적임. + // 모든 검색 및 매칭은 서버 API(/api/resources/match)로 위임함. + console.log('[AssetRegistry] 🛑 클라이언트 전체 로드 스킵 (서버 API 위임 모드)'); + /* + console.log('[AssetRegistry] Loading assets from /models/assets_registry_master.json...'); + const response = await fetch('/models/assets_registry_master.json'); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + ASSETS = await response.json(); + */ + ASSETS = []; // 빈 상태 유지 + isLoaded = true; + console.log(`[AssetRegistry] 클라이언트 모드 초기화 완료 (Lazy Loading 활성화)`); + } catch (error) { + console.error('[AssetRegistry] Failed to load assets:', error); + initPromise = null; // 실패 시 재시도 가능하도록 초기화 + } + })(); -export const ASSET_REGISTRY = ASSETS; + return initPromise; +} export function getAssetMetadata(id: string): AssetMetadata | undefined { return ASSETS.find(a => a.id === id); @@ -14985,73 +63,52 @@ export function getAssetsByCategory(category: AssetMetadata['category']): AssetM return ASSETS.filter(a => a.category === category); } -// ============================================================ -// 블랙리스트 경로 패턴 - 테스트 파일 및 내부용 에셋 제외 -// ============================================================ -const ASSET_PATH_BLACKLIST = [ - '_test_data', - 'test_', - 'debug_', - '/temp/', -]; +const ASSET_PATH_BLACKLIST = ['_test_data', 'test_', 'debug_', '/temp/', 'samples/', 'placeholder', '_index']; -function isBlacklistedPath(path: string): boolean { - const lowerPath = path.toLowerCase(); - return ASSET_PATH_BLACKLIST.some(pattern => lowerPath.includes(pattern.toLowerCase())); +export function isBlacklistedPath(path: string): boolean { + return ASSET_PATH_BLACKLIST.some(p => path.includes(p)); } -/** - * 키워드-에셋 간 동적 매칭 점수 계산 - * - 정확 일치 = 1.0 - * - 키워드가 에셋 키에 포함 = 키워드 길이/키 길이 × 0.5 (역방향 페널티) - * - 에셋 키가 키워드에 포함 = 키 길이/키워드 길이 (정규화 점수) - */ -function assetMatchScore(query: string, assetKeyword: string): number { - if (query === assetKeyword) return 1.0; - if (assetKeyword.includes(query)) { - return (query.length / assetKeyword.length) * 0.5; - } - if (query.includes(assetKeyword)) { - return assetKeyword.length / query.length; - } +export function assetMatchScore(query: string, assetKeyword: string): number { + const q = query.toLowerCase(); + const ak = assetKeyword.toLowerCase(); + if (q === ak) return 1.0; + if (ak.includes(q)) return (q.length / ak.length) * 0.5; + if (q.includes(ak)) return ak.length / q.length; return 0; } -export function searchAssets(keyword: string): AssetMetadata[] { - const lower = keyword.toLowerCase(); - const scored: { asset: AssetMetadata; score: number }[] = []; - - for (const a of ASSETS) { - if (isBlacklistedPath(a.path)) continue; - - // ID 정확 매칭 - if (a.id.toLowerCase() === lower) { - scored.push({ asset: a, score: 1.0 }); - continue; +export async function searchAssets(keyword: string): Promise { + if (!keyword) return []; + + // 로드되지 않았으면 대기 + if (!isLoaded) { + if (initPromise) { + console.log('[AssetRegistry] AssetRegistry is still loading. Waiting...'); + await initPromise; + } else { + console.warn('[AssetRegistry] Search called before initialization. Initializing now...'); + await initializeAssetRegistry(); } + } - // 키워드 중 최고 스코어 채택 - let bestScore = 0; - for (const k of a.keywords) { - const s = assetMatchScore(lower, k.toLowerCase()); - if (s > bestScore) bestScore = s; - } + const searchTerms = keyword.toLowerCase().split(/\s+/).filter(t => t.length > 0); - // 동적 임계값: 쿼리 길이에 비례하되 0.4~0.7 범위로 클램프 (v3) - const rawThreshold = lower.length / (lower.length + 2); - const threshold = Math.max(0.4, Math.min(0.7, rawThreshold)); - if (bestScore >= threshold) { - scored.push({ asset: a, score: bestScore }); + return ASSETS.map(asset => { + let maxScore = 0; + for (const term of searchTerms) { + for (const kw of asset.keywords) { + maxScore = Math.max(maxScore, assetMatchScore(term, kw)); + } + if (asset.id.toLowerCase().includes(term)) maxScore = Math.max(maxScore, 0.5); } - } - - // 스코어 내림차순 정렬 → 최적 매칭 우선 - return scored + return { asset, score: maxScore }; + }) + .filter(res => res.score > 0.1) .sort((a, b) => b.score - a.score) - .map(s => s.asset); + .map(res => res.asset); } - export function getAllAssets(): AssetMetadata[] { return ASSETS; } diff --git a/src/data/semanticAssets.generated.ts b/src/data/semanticAssets.generated.ts index 4bcebb5..f745a92 100644 --- a/src/data/semanticAssets.generated.ts +++ b/src/data/semanticAssets.generated.ts @@ -9,6 +9,7 @@ export type AssetCategory = | 'environment' + | 'environment_container' | 'furniture' | 'character' | 'prop' @@ -31,6 +32,7 @@ export interface SemanticAsset { style?: string; placementContexts?: string[]; companions?: string[]; + physical_scale?: number; // [v3.5] 에셋의 물리적 크기 (미터 단위) // 레거시 호환 variants?: number; lighting?: { exposure?: number }; @@ -39,7 +41,7 @@ export interface SemanticAsset { export const SEMANTIC_ASSETS: SemanticAsset[] = [ { "id": "_test_polypizza_Adventurer", - "path": "/models/_test_polypizza/Adventurer.glb.glb", + "path": "/models/_test_polypizza/Adventurer.glb", "category": "character", "subCategory": "adventurer", "keywords": { @@ -114,7 +116,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "_test_polypizza_Knight", - "path": "/models/_test_polypizza/Knight.glb.glb", + "path": "/models/_test_polypizza/Knight.glb", "category": "prop", "subCategory": "knight", "keywords": { @@ -188,7 +190,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_both_houses_scene", - "path": "/models/buildings/both_houses_scene.glb.glb", + "path": "/models/buildings/both_houses_scene.glb", "category": "structure", "subCategory": "houses", "keywords": { @@ -262,7 +264,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_car-kit_debris-door", - "path": "/models/buildings/car-kit_debris-door.glb.glb", + "path": "/models/buildings/car-kit_debris-door.glb", "category": "structure", "subCategory": "debris", "keywords": { @@ -328,7 +330,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_car-kit_debris-door-window", - "path": "/models/buildings/car-kit_debris-door-window.glb.glb", + "path": "/models/buildings/car-kit_debris-door-window.glb", "category": "structure", "subCategory": "debris", "keywords": { @@ -397,7 +399,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_cellarDoor", - "path": "/models/buildings/cellarDoor.glb.glb", + "path": "/models/buildings/cellarDoor.glb", "category": "structure", "subCategory": "door", "keywords": { @@ -471,7 +473,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_detailed_realistic_model_house_01", - "path": "/models/buildings/detailed_realistic_model_house_01.glb.glb", + "path": "/models/buildings/detailed_realistic_model_house_01.glb", "category": "structure", "subCategory": "house", "keywords": { @@ -544,7 +546,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_detailed_realistic_model_houseelf_01", - "path": "/models/buildings/detailed_realistic_model_houseelf_01.glb.glb", + "path": "/models/buildings/detailed_realistic_model_houseelf_01.glb", "category": "character", "subCategory": "houseelf", "keywords": { @@ -617,7 +619,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_detailed_realistic_model_houseelf_02", - "path": "/models/buildings/detailed_realistic_model_houseelf_02.glb.glb", + "path": "/models/buildings/detailed_realistic_model_houseelf_02.glb", "category": "structure", "subCategory": "house", "keywords": { @@ -691,7 +693,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_dumbledores_office", - "path": "/models/buildings/dumbledores_office.glb.glb", + "path": "/models/buildings/dumbledores_office.glb", "category": "structure", "subCategory": "office", "keywords": { @@ -763,7 +765,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_balcony-wall", - "path": "/models/buildings/fantasy-town-kit_balcony-wall.glb.glb", + "path": "/models/buildings/fantasy-town-kit_balcony-wall.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -836,7 +838,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_balcony-wall-fence", - "path": "/models/buildings/fantasy-town-kit_balcony-wall-fence.glb.glb", + "path": "/models/buildings/fantasy-town-kit_balcony-wall-fence.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -909,7 +911,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_fence", - "path": "/models/buildings/fantasy-town-kit_fence.glb.glb", + "path": "/models/buildings/fantasy-town-kit_fence.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -985,7 +987,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_fence-broken", - "path": "/models/buildings/fantasy-town-kit_fence-broken.glb.glb", + "path": "/models/buildings/fantasy-town-kit_fence-broken.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -1061,7 +1063,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_fence-curved", - "path": "/models/buildings/fantasy-town-kit_fence-curved.glb.glb", + "path": "/models/buildings/fantasy-town-kit_fence-curved.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -1137,7 +1139,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_fence-gate", - "path": "/models/buildings/fantasy-town-kit_fence-gate.glb.glb", + "path": "/models/buildings/fantasy-town-kit_fence-gate.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -1212,7 +1214,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_hedge-gate", - "path": "/models/buildings/fantasy-town-kit_hedge-gate.glb.glb", + "path": "/models/buildings/fantasy-town-kit_hedge-gate.glb", "category": "structure", "subCategory": "gate", "keywords": { @@ -1286,7 +1288,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_hedge-large-gate", - "path": "/models/buildings/fantasy-town-kit_hedge-large-gate.glb.glb", + "path": "/models/buildings/fantasy-town-kit_hedge-large-gate.glb", "category": "structure", "subCategory": "gate", "keywords": { @@ -1362,7 +1364,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof", - "path": "/models/buildings/fantasy-town-kit_roof.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -1436,7 +1438,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-corner", - "path": "/models/buildings/fantasy-town-kit_roof-corner.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-corner.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -1511,7 +1513,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-corner-inner", - "path": "/models/buildings/fantasy-town-kit_roof-corner-inner.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-corner-inner.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -1584,7 +1586,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-corner-round", - "path": "/models/buildings/fantasy-town-kit_roof-corner-round.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-corner-round.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -1658,7 +1660,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-flat", - "path": "/models/buildings/fantasy-town-kit_roof-flat.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-flat.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -1732,7 +1734,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-gable", - "path": "/models/buildings/fantasy-town-kit_roof-gable.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-gable.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -1806,7 +1808,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-gable-detail", - "path": "/models/buildings/fantasy-town-kit_roof-gable-detail.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-gable-detail.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -1882,7 +1884,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-gable-end", - "path": "/models/buildings/fantasy-town-kit_roof-gable-end.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-gable-end.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -1956,7 +1958,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-gable-top", - "path": "/models/buildings/fantasy-town-kit_roof-gable-top.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-gable-top.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2031,7 +2033,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high", - "path": "/models/buildings/fantasy-town-kit_roof-high.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2105,7 +2107,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-corner", - "path": "/models/buildings/fantasy-town-kit_roof-high-corner.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-corner.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2181,7 +2183,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-corner-round", - "path": "/models/buildings/fantasy-town-kit_roof-high-corner-round.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-corner-round.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2257,7 +2259,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-cornerinner", - "path": "/models/buildings/fantasy-town-kit_roof-high-cornerinner.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-cornerinner.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2332,7 +2334,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-flat", - "path": "/models/buildings/fantasy-town-kit_roof-high-flat.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-flat.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2404,7 +2406,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-gable", - "path": "/models/buildings/fantasy-town-kit_roof-high-gable.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-gable.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2480,7 +2482,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-gable-detail", - "path": "/models/buildings/fantasy-town-kit_roof-high-gable-detail.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-gable-detail.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2553,7 +2555,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-gable-end", - "path": "/models/buildings/fantasy-town-kit_roof-high-gable-end.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-gable-end.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2629,7 +2631,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-gable-top", - "path": "/models/buildings/fantasy-town-kit_roof-high-gable-top.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-gable-top.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2702,7 +2704,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-left", - "path": "/models/buildings/fantasy-town-kit_roof-high-left.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-left.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2776,7 +2778,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-point", - "path": "/models/buildings/fantasy-town-kit_roof-high-point.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-point.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2847,7 +2849,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-right", - "path": "/models/buildings/fantasy-town-kit_roof-high-right.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-right.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2919,7 +2921,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-high-window", - "path": "/models/buildings/fantasy-town-kit_roof-high-window.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-high-window.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -2994,7 +2996,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-left", - "path": "/models/buildings/fantasy-town-kit_roof-left.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-left.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -3070,7 +3072,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-point", - "path": "/models/buildings/fantasy-town-kit_roof-point.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-point.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -3146,7 +3148,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-right", - "path": "/models/buildings/fantasy-town-kit_roof-right.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-right.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -3222,7 +3224,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_roof-window", - "path": "/models/buildings/fantasy-town-kit_roof-window.glb.glb", + "path": "/models/buildings/fantasy-town-kit_roof-window.glb", "category": "structure", "subCategory": "roof", "keywords": { @@ -3297,7 +3299,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall", - "path": "/models/buildings/fantasy-town-kit_wall.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3373,7 +3375,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-arch", - "path": "/models/buildings/fantasy-town-kit_wall-arch.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-arch.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3448,7 +3450,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-arch-top", - "path": "/models/buildings/fantasy-town-kit_wall-arch-top.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-arch-top.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3522,7 +3524,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-arch-top-detail", - "path": "/models/buildings/fantasy-town-kit_wall-arch-top-detail.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-arch-top-detail.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3599,7 +3601,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-block", - "path": "/models/buildings/fantasy-town-kit_wall-block.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-block.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3676,7 +3678,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-block-half", - "path": "/models/buildings/fantasy-town-kit_wall-block-half.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-block-half.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3753,7 +3755,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-broken", - "path": "/models/buildings/fantasy-town-kit_wall-broken.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-broken.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3829,7 +3831,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-corner", - "path": "/models/buildings/fantasy-town-kit_wall-corner.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-corner.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3905,7 +3907,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-corner-detail", - "path": "/models/buildings/fantasy-town-kit_wall-corner-detail.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-corner-detail.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -3980,7 +3982,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-corner-diagonal", - "path": "/models/buildings/fantasy-town-kit_wall-corner-diagonal.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-corner-diagonal.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4056,7 +4058,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-corner-diagonal-half", - "path": "/models/buildings/fantasy-town-kit_wall-corner-diagonal-half.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-corner-diagonal-half.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4128,7 +4130,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-corner-edge", - "path": "/models/buildings/fantasy-town-kit_wall-corner-edge.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-corner-edge.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4205,7 +4207,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-curved", - "path": "/models/buildings/fantasy-town-kit_wall-curved.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-curved.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4281,7 +4283,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-detail-cross", - "path": "/models/buildings/fantasy-town-kit_wall-detail-cross.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-detail-cross.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4356,7 +4358,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-detail-diagonal", - "path": "/models/buildings/fantasy-town-kit_wall-detail-diagonal.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-detail-diagonal.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4432,7 +4434,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-detail-horizontal", - "path": "/models/buildings/fantasy-town-kit_wall-detail-horizontal.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-detail-horizontal.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4505,7 +4507,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-diagonal", - "path": "/models/buildings/fantasy-town-kit_wall-diagonal.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-diagonal.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4580,7 +4582,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-door", - "path": "/models/buildings/fantasy-town-kit_wall-door.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-door.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4656,7 +4658,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-doorway-base", - "path": "/models/buildings/fantasy-town-kit_wall-doorway-base.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-doorway-base.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4732,7 +4734,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-doorway-round", - "path": "/models/buildings/fantasy-town-kit_wall-doorway-round.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-doorway-round.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4807,7 +4809,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-doorway-square", - "path": "/models/buildings/fantasy-town-kit_wall-doorway-square.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-doorway-square.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4884,7 +4886,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-doorway-square-wide", - "path": "/models/buildings/fantasy-town-kit_wall-doorway-square-wide.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-doorway-square-wide.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -4961,7 +4963,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-doorway-square-wide-curved", - "path": "/models/buildings/fantasy-town-kit_wall-doorway-square-wide-curved.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-doorway-square-wide-curved.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5037,7 +5039,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-half", - "path": "/models/buildings/fantasy-town-kit_wall-half.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-half.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5113,7 +5115,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-rounded", - "path": "/models/buildings/fantasy-town-kit_wall-rounded.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-rounded.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5189,7 +5191,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-side", - "path": "/models/buildings/fantasy-town-kit_wall-side.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-side.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5263,7 +5265,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-slope", - "path": "/models/buildings/fantasy-town-kit_wall-slope.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-slope.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5339,7 +5341,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-window-glass", - "path": "/models/buildings/fantasy-town-kit_wall-window-glass.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-window-glass.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5415,7 +5417,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-window-round", - "path": "/models/buildings/fantasy-town-kit_wall-window-round.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-window-round.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5490,7 +5492,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-window-shutters", - "path": "/models/buildings/fantasy-town-kit_wall-window-shutters.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-window-shutters.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5565,7 +5567,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-window-small", - "path": "/models/buildings/fantasy-town-kit_wall-window-small.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-window-small.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5641,7 +5643,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood", - "path": "/models/buildings/fantasy-town-kit_wall-wood.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5717,7 +5719,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-arch", - "path": "/models/buildings/fantasy-town-kit_wall-wood-arch.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-arch.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5791,7 +5793,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-arch-top", - "path": "/models/buildings/fantasy-town-kit_wall-wood-arch-top.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-arch-top.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5867,7 +5869,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-arch-top-detail", - "path": "/models/buildings/fantasy-town-kit_wall-wood-arch-top-detail.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-arch-top-detail.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -5944,7 +5946,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-block", - "path": "/models/buildings/fantasy-town-kit_wall-wood-block.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-block.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6018,7 +6020,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-block-half", - "path": "/models/buildings/fantasy-town-kit_wall-wood-block-half.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-block-half.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6091,7 +6093,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-broken", - "path": "/models/buildings/fantasy-town-kit_wall-wood-broken.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-broken.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6168,7 +6170,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-corner", - "path": "/models/buildings/fantasy-town-kit_wall-wood-corner.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-corner.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6244,7 +6246,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-corner-diagonal", - "path": "/models/buildings/fantasy-town-kit_wall-wood-corner-diagonal.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-corner-diagonal.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6320,7 +6322,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-corner-diagonal-half", - "path": "/models/buildings/fantasy-town-kit_wall-wood-corner-diagonal-half.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-corner-diagonal-half.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6390,7 +6392,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-corner-edge", - "path": "/models/buildings/fantasy-town-kit_wall-wood-corner-edge.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-corner-edge.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6462,7 +6464,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-curved", - "path": "/models/buildings/fantasy-town-kit_wall-wood-curved.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-curved.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6538,7 +6540,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-detail-cross", - "path": "/models/buildings/fantasy-town-kit_wall-wood-detail-cross.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-detail-cross.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6610,7 +6612,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-detail-diagonal", - "path": "/models/buildings/fantasy-town-kit_wall-wood-detail-diagonal.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-detail-diagonal.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6685,7 +6687,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-detail-horizontal", - "path": "/models/buildings/fantasy-town-kit_wall-wood-detail-horizontal.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-detail-horizontal.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6760,7 +6762,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-diagonal", - "path": "/models/buildings/fantasy-town-kit_wall-wood-diagonal.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-diagonal.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6836,7 +6838,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-door", - "path": "/models/buildings/fantasy-town-kit_wall-wood-door.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-door.glb", "category": "structure", "subCategory": "door", "keywords": { @@ -6912,7 +6914,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-doorway-base", - "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-base.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-base.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -6987,7 +6989,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-doorway-round", - "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-round.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-round.glb", "category": "structure", "subCategory": "doorway", "keywords": { @@ -7063,7 +7065,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-doorway-square", - "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-square.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-square.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7136,7 +7138,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-doorway-square-wide", - "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-square-wide.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-square-wide.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7210,7 +7212,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-doorway-square-wide-curved", - "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-square-wide-curved.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-doorway-square-wide-curved.glb", "category": "structure", "subCategory": "door", "keywords": { @@ -7286,7 +7288,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-half", - "path": "/models/buildings/fantasy-town-kit_wall-wood-half.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-half.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7358,7 +7360,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-rounded", - "path": "/models/buildings/fantasy-town-kit_wall-wood-rounded.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-rounded.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7430,7 +7432,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-side", - "path": "/models/buildings/fantasy-town-kit_wall-wood-side.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-side.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7501,7 +7503,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-slope", - "path": "/models/buildings/fantasy-town-kit_wall-wood-slope.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-slope.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7574,7 +7576,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-window-glass", - "path": "/models/buildings/fantasy-town-kit_wall-wood-window-glass.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-window-glass.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7650,7 +7652,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-window-round", - "path": "/models/buildings/fantasy-town-kit_wall-wood-window-round.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-window-round.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7726,7 +7728,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-window-shutters", - "path": "/models/buildings/fantasy-town-kit_wall-wood-window-shutters.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-window-shutters.glb", "category": "structure", "subCategory": "shutters", "keywords": { @@ -7800,7 +7802,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fantasy-town-kit_wall-wood-window-small", - "path": "/models/buildings/fantasy-town-kit_wall-wood-window-small.glb.glb", + "path": "/models/buildings/fantasy-town-kit_wall-wood-window-small.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -7876,7 +7878,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fence", - "path": "/models/buildings/fence.glb.glb", + "path": "/models/buildings/fence.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -7949,7 +7951,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceACorner1", - "path": "/models/buildings/fenceACorner1.glb.glb", + "path": "/models/buildings/fenceACorner1.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8020,7 +8022,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceACorner2", - "path": "/models/buildings/fenceACorner2.glb.glb", + "path": "/models/buildings/fenceACorner2.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8092,7 +8094,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceACorner3", - "path": "/models/buildings/fenceACorner3.glb.glb", + "path": "/models/buildings/fenceACorner3.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8165,7 +8167,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceACorner4", - "path": "/models/buildings/fenceACorner4.glb.glb", + "path": "/models/buildings/fenceACorner4.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8239,7 +8241,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAGate", - "path": "/models/buildings/fenceAGate.glb.glb", + "path": "/models/buildings/fenceAGate.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8315,7 +8317,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAPillar1", - "path": "/models/buildings/fenceAPillar1.glb.glb", + "path": "/models/buildings/fenceAPillar1.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8392,7 +8394,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAPillar2", - "path": "/models/buildings/fenceAPillar2.glb.glb", + "path": "/models/buildings/fenceAPillar2.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8464,7 +8466,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAPillar3", - "path": "/models/buildings/fenceAPillar3.glb.glb", + "path": "/models/buildings/fenceAPillar3.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -8540,7 +8542,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAPillar4", - "path": "/models/buildings/fenceAPillar4.glb.glb", + "path": "/models/buildings/fenceAPillar4.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8615,7 +8617,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAPillar5", - "path": "/models/buildings/fenceAPillar5.glb.glb", + "path": "/models/buildings/fenceAPillar5.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8689,7 +8691,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAPillar6", - "path": "/models/buildings/fenceAPillar6.glb.glb", + "path": "/models/buildings/fenceAPillar6.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8762,7 +8764,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAPillar7", - "path": "/models/buildings/fenceAPillar7.glb.glb", + "path": "/models/buildings/fenceAPillar7.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8832,7 +8834,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceAPillar8", - "path": "/models/buildings/fenceAPillar8.glb.glb", + "path": "/models/buildings/fenceAPillar8.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8909,7 +8911,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceASection1", - "path": "/models/buildings/fenceASection1.glb.glb", + "path": "/models/buildings/fenceASection1.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -8982,7 +8984,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceASection2", - "path": "/models/buildings/fenceASection2.glb.glb", + "path": "/models/buildings/fenceASection2.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9054,7 +9056,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceASection3", - "path": "/models/buildings/fenceASection3.glb.glb", + "path": "/models/buildings/fenceASection3.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9125,7 +9127,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceASection4", - "path": "/models/buildings/fenceASection4.glb.glb", + "path": "/models/buildings/fenceASection4.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9193,7 +9195,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceASection5", - "path": "/models/buildings/fenceASection5.glb.glb", + "path": "/models/buildings/fenceASection5.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9264,7 +9266,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBCorner1", - "path": "/models/buildings/fenceBCorner1.glb.glb", + "path": "/models/buildings/fenceBCorner1.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9335,7 +9337,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBCorner2", - "path": "/models/buildings/fenceBCorner2.glb.glb", + "path": "/models/buildings/fenceBCorner2.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9412,7 +9414,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBCorner3", - "path": "/models/buildings/fenceBCorner3.glb.glb", + "path": "/models/buildings/fenceBCorner3.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9482,7 +9484,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBPillar1", - "path": "/models/buildings/fenceBPillar1.glb.glb", + "path": "/models/buildings/fenceBPillar1.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9558,7 +9560,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBPillar2", - "path": "/models/buildings/fenceBPillar2.glb.glb", + "path": "/models/buildings/fenceBPillar2.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9634,7 +9636,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBPillar3", - "path": "/models/buildings/fenceBPillar3.glb.glb", + "path": "/models/buildings/fenceBPillar3.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -9710,7 +9712,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBPillar4", - "path": "/models/buildings/fenceBPillar4.glb.glb", + "path": "/models/buildings/fenceBPillar4.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9786,7 +9788,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBSection1", - "path": "/models/buildings/fenceBSection1.glb.glb", + "path": "/models/buildings/fenceBSection1.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9855,7 +9857,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBSection2", - "path": "/models/buildings/fenceBSection2.glb.glb", + "path": "/models/buildings/fenceBSection2.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -9930,7 +9932,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBSection3", - "path": "/models/buildings/fenceBSection3.glb.glb", + "path": "/models/buildings/fenceBSection3.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -10004,7 +10006,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceBSection4", - "path": "/models/buildings/fenceBSection4.glb.glb", + "path": "/models/buildings/fenceBSection4.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -10075,7 +10077,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceC1", - "path": "/models/buildings/fenceC1.glb.glb", + "path": "/models/buildings/fenceC1.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -10148,7 +10150,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceC1Skewed", - "path": "/models/buildings/fenceC1Skewed.glb.glb", + "path": "/models/buildings/fenceC1Skewed.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -10219,7 +10221,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceC2", - "path": "/models/buildings/fenceC2.glb.glb", + "path": "/models/buildings/fenceC2.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -10293,7 +10295,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_fenceC3", - "path": "/models/buildings/fenceC3.glb.glb", + "path": "/models/buildings/fenceC3.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -10365,7 +10367,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_GlassBrokenWindow", - "path": "/models/buildings/GlassBrokenWindow.glb.glb", + "path": "/models/buildings/GlassBrokenWindow.glb", "category": "structure", "subCategory": "window", "keywords": { @@ -10433,7 +10435,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_brick-wall", - "path": "/models/buildings/graveyard-kit_brick-wall.glb.glb", + "path": "/models/buildings/graveyard-kit_brick-wall.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -10509,7 +10511,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_brick-wall-curve", - "path": "/models/buildings/graveyard-kit_brick-wall-curve.glb.glb", + "path": "/models/buildings/graveyard-kit_brick-wall-curve.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -10584,7 +10586,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_brick-wall-curve-small", - "path": "/models/buildings/graveyard-kit_brick-wall-curve-small.glb.glb", + "path": "/models/buildings/graveyard-kit_brick-wall-curve-small.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -10653,7 +10655,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_brick-wall-end", - "path": "/models/buildings/graveyard-kit_brick-wall-end.glb.glb", + "path": "/models/buildings/graveyard-kit_brick-wall-end.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -10728,7 +10730,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_column-large", - "path": "/models/buildings/graveyard-kit_column-large.glb.glb", + "path": "/models/buildings/graveyard-kit_column-large.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -10805,7 +10807,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_cross-column", - "path": "/models/buildings/graveyard-kit_cross-column.glb.glb", + "path": "/models/buildings/graveyard-kit_cross-column.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -10874,7 +10876,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_crypt-door", - "path": "/models/buildings/graveyard-kit_crypt-door.glb.glb", + "path": "/models/buildings/graveyard-kit_crypt-door.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -10948,7 +10950,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_crypt-large-door", - "path": "/models/buildings/graveyard-kit_crypt-large-door.glb.glb", + "path": "/models/buildings/graveyard-kit_crypt-large-door.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -11022,7 +11024,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_crypt-large-roof", - "path": "/models/buildings/graveyard-kit_crypt-large-roof.glb.glb", + "path": "/models/buildings/graveyard-kit_crypt-large-roof.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -11096,7 +11098,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_crypt-small-roof", - "path": "/models/buildings/graveyard-kit_crypt-small-roof.glb.glb", + "path": "/models/buildings/graveyard-kit_crypt-small-roof.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -11171,7 +11173,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_fence", - "path": "/models/buildings/graveyard-kit_fence.glb.glb", + "path": "/models/buildings/graveyard-kit_fence.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11243,7 +11245,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_fence-damaged", - "path": "/models/buildings/graveyard-kit_fence-damaged.glb.glb", + "path": "/models/buildings/graveyard-kit_fence-damaged.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11312,7 +11314,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_fence-gate", - "path": "/models/buildings/graveyard-kit_fence-gate.glb.glb", + "path": "/models/buildings/graveyard-kit_fence-gate.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11385,7 +11387,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_iron-fence", - "path": "/models/buildings/graveyard-kit_iron-fence.glb.glb", + "path": "/models/buildings/graveyard-kit_iron-fence.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11458,7 +11460,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_iron-fence-bar", - "path": "/models/buildings/graveyard-kit_iron-fence-bar.glb.glb", + "path": "/models/buildings/graveyard-kit_iron-fence-bar.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11531,7 +11533,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_iron-fence-border", - "path": "/models/buildings/graveyard-kit_iron-fence-border.glb.glb", + "path": "/models/buildings/graveyard-kit_iron-fence-border.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11602,7 +11604,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_iron-fence-border-column", - "path": "/models/buildings/graveyard-kit_iron-fence-border-column.glb.glb", + "path": "/models/buildings/graveyard-kit_iron-fence-border-column.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -11671,7 +11673,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_iron-fence-border-curve", - "path": "/models/buildings/graveyard-kit_iron-fence-border-curve.glb.glb", + "path": "/models/buildings/graveyard-kit_iron-fence-border-curve.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11746,7 +11748,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_iron-fence-border-gate", - "path": "/models/buildings/graveyard-kit_iron-fence-border-gate.glb.glb", + "path": "/models/buildings/graveyard-kit_iron-fence-border-gate.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11823,7 +11825,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_iron-fence-curve", - "path": "/models/buildings/graveyard-kit_iron-fence-curve.glb.glb", + "path": "/models/buildings/graveyard-kit_iron-fence-curve.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11899,7 +11901,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_graveyard-kit_iron-fence-damaged", - "path": "/models/buildings/graveyard-kit_iron-fence-damaged.glb.glb", + "path": "/models/buildings/graveyard-kit_iron-fence-damaged.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -11971,7 +11973,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_gryffindor_common_room", - "path": "/models/buildings/gryffindor_common_room.glb.glb", + "path": "/models/buildings/gryffindor_common_room.glb", "category": "structure", "subCategory": "room", "keywords": { @@ -12043,7 +12045,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_gryffindor_common_room_original", - "path": "/models/buildings/gryffindor_common_room_original.glb.glb", + "path": "/models/buildings/gryffindor_common_room_original.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -12118,7 +12120,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_haunted_house", - "path": "/models/buildings/haunted_house.glb.glb", + "path": "/models/buildings/haunted_house.glb", "category": "structure", "subCategory": "house", "keywords": { @@ -12192,7 +12194,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_hogwarts_grand_hall", - "path": "/models/buildings/hogwarts_grand_hall.glb.glb", + "path": "/models/buildings/hogwarts_grand_hall.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -12267,7 +12269,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_hogwarts_grand_hall_backup", - "path": "/models/buildings/hogwarts_grand_hall_backup.glb.glb", + "path": "/models/buildings/hogwarts_grand_hall_backup.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -12342,7 +12344,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_hogwarts_grand_hall_backup_v4_fixed", - "path": "/models/buildings/hogwarts_grand_hall_backup_v4_fixed.glb.glb", + "path": "/models/buildings/hogwarts_grand_hall_backup_v4_fixed.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -12414,7 +12416,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_hogwarts_grand_hall_backup_v5_fixed", - "path": "/models/buildings/hogwarts_grand_hall_backup_v5_fixed.glb.glb", + "path": "/models/buildings/hogwarts_grand_hall_backup_v5_fixed.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -12487,7 +12489,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_hogwarts_grand_hall_backup2", - "path": "/models/buildings/hogwarts_grand_hall_backup2.glb.glb", + "path": "/models/buildings/hogwarts_grand_hall_backup2.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -12563,7 +12565,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_hogwarts_grand_hall_fixed", - "path": "/models/buildings/hogwarts_grand_hall_fixed.glb.glb", + "path": "/models/buildings/hogwarts_grand_hall_fixed.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -12635,7 +12637,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_hogwarts_grand_hall_restored", - "path": "/models/buildings/hogwarts_grand_hall_restored.glb.glb", + "path": "/models/buildings/hogwarts_grand_hall_restored.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -12707,7 +12709,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_honey_dukes_shop", - "path": "/models/buildings/honey_dukes_shop.glb.glb", + "path": "/models/buildings/honey_dukes_shop.glb", "category": "structure", "subCategory": "shop", "keywords": { @@ -12777,7 +12779,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_house_scene", - "path": "/models/buildings/house_scene.glb.glb", + "path": "/models/buildings/house_scene.glb", "category": "structure", "subCategory": "house", "keywords": { @@ -12851,7 +12853,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor", - "path": "/models/buildings/modular-dungeon-kit_corridor.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -12928,7 +12930,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-corner", - "path": "/models/buildings/modular-dungeon-kit_corridor-corner.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-corner.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -13002,7 +13004,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-end", - "path": "/models/buildings/modular-dungeon-kit_corridor-end.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-end.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -13076,7 +13078,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-intersection", - "path": "/models/buildings/modular-dungeon-kit_corridor-intersection.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-intersection.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -13151,7 +13153,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-junction", - "path": "/models/buildings/modular-dungeon-kit_corridor-junction.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-junction.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -13226,7 +13228,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-transition", - "path": "/models/buildings/modular-dungeon-kit_corridor-transition.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-transition.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -13300,7 +13302,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-wide", - "path": "/models/buildings/modular-dungeon-kit_corridor-wide.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-wide.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -13370,7 +13372,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-wide-corner", - "path": "/models/buildings/modular-dungeon-kit_corridor-wide-corner.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-wide-corner.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -13441,7 +13443,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-wide-end", - "path": "/models/buildings/modular-dungeon-kit_corridor-wide-end.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-wide-end.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -13513,7 +13515,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-wide-intersection", - "path": "/models/buildings/modular-dungeon-kit_corridor-wide-intersection.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-wide-intersection.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -13587,7 +13589,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_corridor-wide-junction", - "path": "/models/buildings/modular-dungeon-kit_corridor-wide-junction.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_corridor-wide-junction.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -13662,7 +13664,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_gate", - "path": "/models/buildings/modular-dungeon-kit_gate.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_gate.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -13739,7 +13741,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_gate-door", - "path": "/models/buildings/modular-dungeon-kit_gate-door.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_gate-door.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -13812,7 +13814,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_gate-door-window", - "path": "/models/buildings/modular-dungeon-kit_gate-door-window.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_gate-door-window.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -13889,7 +13891,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_room-corner", - "path": "/models/buildings/modular-dungeon-kit_room-corner.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_room-corner.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -13964,7 +13966,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_room-large", - "path": "/models/buildings/modular-dungeon-kit_room-large.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_room-large.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14039,7 +14041,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_room-large-variation", - "path": "/models/buildings/modular-dungeon-kit_room-large-variation.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_room-large-variation.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14113,7 +14115,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_room-small", - "path": "/models/buildings/modular-dungeon-kit_room-small.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_room-small.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14188,7 +14190,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_room-small-variation", - "path": "/models/buildings/modular-dungeon-kit_room-small-variation.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_room-small-variation.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14263,7 +14265,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_room-wide", - "path": "/models/buildings/modular-dungeon-kit_room-wide.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_room-wide.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14338,7 +14340,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_room-wide-variation", - "path": "/models/buildings/modular-dungeon-kit_room-wide-variation.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_room-wide-variation.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14411,7 +14413,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_stairs", - "path": "/models/buildings/modular-dungeon-kit_stairs.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_stairs.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -14482,7 +14484,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_stairs-wide", - "path": "/models/buildings/modular-dungeon-kit_stairs-wide.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_stairs-wide.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -14557,7 +14559,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_template-wall", - "path": "/models/buildings/modular-dungeon-kit_template-wall.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_template-wall.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14631,7 +14633,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_template-wall-corner", - "path": "/models/buildings/modular-dungeon-kit_template-wall-corner.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_template-wall-corner.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14705,7 +14707,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_template-wall-detail-a", - "path": "/models/buildings/modular-dungeon-kit_template-wall-detail-a.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_template-wall-detail-a.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14782,7 +14784,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_template-wall-half", - "path": "/models/buildings/modular-dungeon-kit_template-wall-half.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_template-wall-half.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14855,7 +14857,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_template-wall-stairs", - "path": "/models/buildings/modular-dungeon-kit_template-wall-stairs.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_template-wall-stairs.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -14930,7 +14932,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_modular-dungeon-kit_template-wall-top", - "path": "/models/buildings/modular-dungeon-kit_template-wall-top.glb.glb", + "path": "/models/buildings/modular-dungeon-kit_template-wall-top.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -15007,7 +15009,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_ollivanders_wand_shop", - "path": "/models/buildings/ollivanders_wand_shop.glb.glb", + "path": "/models/buildings/ollivanders_wand_shop.glb", "category": "structure", "subCategory": "shop", "keywords": { @@ -15077,7 +15079,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_door-large-open", - "path": "/models/buildings/platformer-kit_door-large-open.glb.glb", + "path": "/models/buildings/platformer-kit_door-large-open.glb", "category": "structure", "subCategory": "door", "keywords": { @@ -15151,7 +15153,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_door-open", - "path": "/models/buildings/platformer-kit_door-open.glb.glb", + "path": "/models/buildings/platformer-kit_door-open.glb", "category": "structure", "subCategory": "door", "keywords": { @@ -15226,7 +15228,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_door-rotate", - "path": "/models/buildings/platformer-kit_door-rotate.glb.glb", + "path": "/models/buildings/platformer-kit_door-rotate.glb", "category": "structure", "subCategory": "door", "keywords": { @@ -15299,7 +15301,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_door-rotate-large", - "path": "/models/buildings/platformer-kit_door-rotate-large.glb.glb", + "path": "/models/buildings/platformer-kit_door-rotate-large.glb", "category": "structure", "subCategory": "door", "keywords": { @@ -15365,7 +15367,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-broken", - "path": "/models/buildings/platformer-kit_fence-broken.glb.glb", + "path": "/models/buildings/platformer-kit_fence-broken.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -15440,7 +15442,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-corner", - "path": "/models/buildings/platformer-kit_fence-corner.glb.glb", + "path": "/models/buildings/platformer-kit_fence-corner.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -15511,7 +15513,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-corner-curved", - "path": "/models/buildings/platformer-kit_fence-corner-curved.glb.glb", + "path": "/models/buildings/platformer-kit_fence-corner-curved.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -15581,7 +15583,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-low-broken", - "path": "/models/buildings/platformer-kit_fence-low-broken.glb.glb", + "path": "/models/buildings/platformer-kit_fence-low-broken.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -15651,7 +15653,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-low-corner", - "path": "/models/buildings/platformer-kit_fence-low-corner.glb.glb", + "path": "/models/buildings/platformer-kit_fence-low-corner.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -15722,7 +15724,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-low-corner-curved", - "path": "/models/buildings/platformer-kit_fence-low-corner-curved.glb.glb", + "path": "/models/buildings/platformer-kit_fence-low-corner-curved.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -15796,7 +15798,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-low-straight", - "path": "/models/buildings/platformer-kit_fence-low-straight.glb.glb", + "path": "/models/buildings/platformer-kit_fence-low-straight.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -15867,7 +15869,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-rope", - "path": "/models/buildings/platformer-kit_fence-rope.glb.glb", + "path": "/models/buildings/platformer-kit_fence-rope.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -15937,7 +15939,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_platformer-kit_fence-straight", - "path": "/models/buildings/platformer-kit_fence-straight.glb.glb", + "path": "/models/buildings/platformer-kit_fence-straight.glb", "category": "structure", "subCategory": "fence", "keywords": { @@ -16007,7 +16009,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_potions_classroom", - "path": "/models/buildings/potions_classroom.glb.glb", + "path": "/models/buildings/potions_classroom.glb", "category": "structure", "subCategory": "classroom", "keywords": { @@ -16080,7 +16082,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_slytherin_dorm_room", - "path": "/models/buildings/slytherin_dorm_room.glb.glb", + "path": "/models/buildings/slytherin_dorm_room.glb", "category": "structure", "subCategory": "dorm room", "keywords": { @@ -16151,7 +16153,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_slytherin_dorm_room_1769413346242", - "path": "/models/buildings/slytherin_dorm_room_1769413346242.glb.glb", + "path": "/models/buildings/slytherin_dorm_room_1769413346242.glb", "category": "structure", "subCategory": "dorm", "keywords": { @@ -16222,7 +16224,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_slytherin_dorm_room_backup", - "path": "/models/buildings/slytherin_dorm_room_backup.glb.glb", + "path": "/models/buildings/slytherin_dorm_room_backup.glb", "category": "structure", "subCategory": "dormitory", "keywords": { @@ -16293,7 +16295,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_slytherin_dorm_room_lite", - "path": "/models/buildings/slytherin_dorm_room_lite.glb.glb", + "path": "/models/buildings/slytherin_dorm_room_lite.glb", "category": "structure", "subCategory": "dorm room", "keywords": { @@ -16364,7 +16366,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_slytherin_dorm_room_v2", - "path": "/models/buildings/slytherin_dorm_room_v2.glb.glb", + "path": "/models/buildings/slytherin_dorm_room_v2.glb", "category": "structure", "subCategory": "dorm", "keywords": { @@ -16437,7 +16439,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_Slytherin_Dorm_Room_v20260121_135123_MetadataPatched", - "path": "/models/buildings/Slytherin_Dorm_Room_v20260121_135123_MetadataPatched.glb.glb", + "path": "/models/buildings/Slytherin_Dorm_Room_v20260121_135123_MetadataPatched.glb", "category": "structure", "subCategory": "dorm", "keywords": { @@ -16510,7 +16512,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_three_js-examples_dungeon_warkarma", - "path": "/models/buildings/three.js-examples_dungeon_warkarma.glb.glb", + "path": "/models/buildings/three.js-examples_dungeon_warkarma.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -16587,7 +16589,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_TransmissionThinwallTestGrid", - "path": "/models/buildings/TransmissionThinwallTestGrid.glb.glb", + "path": "/models/buildings/TransmissionThinwallTestGrid.glb", "category": "structure", "subCategory": "transmission tower", "keywords": { @@ -16653,7 +16655,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_umbridges_office", - "path": "/models/buildings/umbridges_office.glb.glb", + "path": "/models/buildings/umbridges_office.glb", "category": "structure", "subCategory": "office", "keywords": { @@ -16722,7 +16724,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_wall", - "path": "/models/buildings/wall.glb.glb", + "path": "/models/buildings/wall.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -16798,7 +16800,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_wallArch", - "path": "/models/buildings/wallArch.glb.glb", + "path": "/models/buildings/wallArch.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -16874,7 +16876,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_wallCorner", - "path": "/models/buildings/wallCorner.glb.glb", + "path": "/models/buildings/wallCorner.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -16948,7 +16950,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_window", - "path": "/models/buildings/window.glb.glb", + "path": "/models/buildings/window.glb", "category": "structure", "subCategory": "window", "keywords": { @@ -17022,7 +17024,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "buildings_window2", - "path": "/models/buildings/window2.glb.glb", + "path": "/models/buildings/window2.glb", "category": "structure", "subCategory": "window", "keywords": { @@ -17096,7 +17098,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_Astronaut", - "path": "/models/characters/Astronaut.glb.glb", + "path": "/models/characters/Astronaut.glb", "category": "character", "subCategory": "astronaut", "keywords": { @@ -17159,7 +17161,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_babylon-assets_CesiumMan", - "path": "/models/characters/babylon-assets_CesiumMan.glb.glb", + "path": "/models/characters/babylon-assets_CesiumMan.glb", "category": "character", "subCategory": "human", "keywords": { @@ -17225,7 +17227,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_CesiumMan", - "path": "/models/characters/CesiumMan.glb.glb", + "path": "/models/characters/CesiumMan.glb", "category": "character", "subCategory": "human", "keywords": { @@ -17288,7 +17290,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_graveyard-kit_character-ghost", - "path": "/models/characters/graveyard-kit_character-ghost.glb.glb", + "path": "/models/characters/graveyard-kit_character-ghost.glb", "category": "character", "subCategory": "ghost", "keywords": { @@ -17360,7 +17362,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_graveyard-kit_character-keeper", - "path": "/models/characters/graveyard-kit_character-keeper.glb.glb", + "path": "/models/characters/graveyard-kit_character-keeper.glb", "category": "character", "subCategory": "keeper", "keywords": { @@ -17429,7 +17431,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_graveyard-kit_character-skeleton", - "path": "/models/characters/graveyard-kit_character-skeleton.glb.glb", + "path": "/models/characters/graveyard-kit_character-skeleton.glb", "category": "character", "subCategory": "skeleton", "keywords": { @@ -17496,7 +17498,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_graveyard-kit_character-vampire", - "path": "/models/characters/graveyard-kit_character-vampire.glb.glb", + "path": "/models/characters/graveyard-kit_character-vampire.glb", "category": "character", "subCategory": "vampire", "keywords": { @@ -17569,7 +17571,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_graveyard-kit_character-zombie", - "path": "/models/characters/graveyard-kit_character-zombie.glb.glb", + "path": "/models/characters/graveyard-kit_character-zombie.glb", "category": "character", "subCategory": "zombie", "keywords": { @@ -17637,7 +17639,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_HVGirl", - "path": "/models/characters/HVGirl.glb.glb", + "path": "/models/characters/HVGirl.glb", "category": "character", "subCategory": "human", "keywords": { @@ -17701,7 +17703,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_NodePerformanceTest", - "path": "/models/characters/NodePerformanceTest.glb.glb", + "path": "/models/characters/NodePerformanceTest.glb", "category": "character", "subCategory": "performance", "keywords": { @@ -17752,7 +17754,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_platformer-kit_character-oobi", - "path": "/models/characters/platformer-kit_character-oobi.glb.glb", + "path": "/models/characters/platformer-kit_character-oobi.glb", "category": "character", "subCategory": "platformer", "keywords": { @@ -17819,7 +17821,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_platformer-kit_character-oodi", - "path": "/models/characters/platformer-kit_character-oodi.glb.glb", + "path": "/models/characters/platformer-kit_character-oodi.glb", "category": "character", "subCategory": "platformer character", "keywords": { @@ -17886,7 +17888,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_platformer-kit_character-ooli", - "path": "/models/characters/platformer-kit_character-ooli.glb.glb", + "path": "/models/characters/platformer-kit_character-ooli.glb", "category": "character", "subCategory": "platformer", "keywords": { @@ -17953,7 +17955,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_platformer-kit_character-oopi", - "path": "/models/characters/platformer-kit_character-oopi.glb.glb", + "path": "/models/characters/platformer-kit_character-oopi.glb", "category": "character", "subCategory": "platformer", "keywords": { @@ -18020,7 +18022,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_platformer-kit_character-oozi", - "path": "/models/characters/platformer-kit_character-oozi.glb.glb", + "path": "/models/characters/platformer-kit_character-oozi.glb", "category": "character", "subCategory": "platformer", "keywords": { @@ -18086,7 +18088,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_RobotExpressive", - "path": "/models/characters/RobotExpressive.glb.glb", + "path": "/models/characters/RobotExpressive.glb", "category": "character", "subCategory": "robot", "keywords": { @@ -18153,7 +18155,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_snowMan", - "path": "/models/characters/snowMan.glb.glb", + "path": "/models/characters/snowMan.glb", "category": "character", "subCategory": "snow man", "keywords": { @@ -18219,7 +18221,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "characters_three_js-examples_Soldier", - "path": "/models/characters/three.js-examples_Soldier.glb.glb", + "path": "/models/characters/three.js-examples_Soldier.glb", "category": "character", "subCategory": "soldier", "keywords": { @@ -18283,7 +18285,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_babylon-assets_BarramundiFish", - "path": "/models/creatures/babylon-assets_BarramundiFish.glb.glb", + "path": "/models/creatures/babylon-assets_BarramundiFish.glb", "category": "character", "subCategory": "fish", "keywords": { @@ -18350,7 +18352,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_babylon-assets_Monster", - "path": "/models/creatures/babylon-assets_Monster.glb.glb", + "path": "/models/creatures/babylon-assets_Monster.glb", "category": "character", "subCategory": "monster", "keywords": { @@ -18421,7 +18423,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_babylon-assets_ReciprocatingSaw", - "path": "/models/creatures/babylon-assets_ReciprocatingSaw.glb.glb", + "path": "/models/creatures/babylon-assets_ReciprocatingSaw.glb", "category": "prop", "subCategory": "saw", "keywords": { @@ -18483,7 +18485,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_BarramundiFish", - "path": "/models/creatures/BarramundiFish.glb.glb", + "path": "/models/creatures/BarramundiFish.glb", "category": "character", "subCategory": "fish", "keywords": { @@ -18549,7 +18551,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_dragon", - "path": "/models/creatures/dragon.glb.glb", + "path": "/models/creatures/dragon.glb", "category": "character", "subCategory": "dragon", "keywords": { @@ -18623,7 +18625,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_DragonAttenuation", - "path": "/models/creatures/DragonAttenuation.glb.glb", + "path": "/models/creatures/DragonAttenuation.glb", "category": "character", "subCategory": "dragon", "keywords": { @@ -18695,7 +18697,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_DragonDispersion", - "path": "/models/creatures/DragonDispersion.glb.glb", + "path": "/models/creatures/DragonDispersion.glb", "category": "character", "subCategory": "dragon", "keywords": { @@ -18769,7 +18771,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_dragonUV", - "path": "/models/creatures/dragonUV.glb.glb", + "path": "/models/creatures/dragonUV.glb", "category": "character", "subCategory": "dragon", "keywords": { @@ -18840,7 +18842,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_fish", - "path": "/models/creatures/fish.glb.glb", + "path": "/models/creatures/fish.glb", "category": "character", "subCategory": "fish", "keywords": { @@ -18906,7 +18908,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_Fox", - "path": "/models/creatures/Fox.glb.glb", + "path": "/models/creatures/Fox.glb", "category": "character", "subCategory": "fox", "keywords": { @@ -18977,7 +18979,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_Horse", - "path": "/models/creatures/Horse.glb.glb", + "path": "/models/creatures/Horse.glb", "category": "character", "subCategory": "horse", "keywords": { @@ -19045,7 +19047,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_ScatteringSkull", - "path": "/models/creatures/ScatteringSkull.glb.glb", + "path": "/models/creatures/ScatteringSkull.glb", "category": "prop", "subCategory": "skull", "keywords": { @@ -19113,7 +19115,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_tarisland_dragon_high_poly", - "path": "/models/creatures/tarisland_dragon_high_poly.glb.glb", + "path": "/models/creatures/tarisland_dragon_high_poly.glb", "category": "character", "subCategory": "dragon", "keywords": { @@ -19185,7 +19187,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_three_js-examples_DragonAttenuation", - "path": "/models/creatures/three.js-examples_DragonAttenuation.glb.glb", + "path": "/models/creatures/three.js-examples_DragonAttenuation.glb", "category": "character", "subCategory": "dragon", "keywords": { @@ -19257,7 +19259,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_three_js-examples_Horse", - "path": "/models/creatures/three.js-examples_Horse.glb.glb", + "path": "/models/creatures/three.js-examples_Horse.glb", "category": "character", "subCategory": "horse", "keywords": { @@ -19327,7 +19329,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "creatures_underwaterSceneShadowCatcher", - "path": "/models/creatures/underwaterSceneShadowCatcher.glb.glb", + "path": "/models/creatures/underwaterSceneShadowCatcher.glb", "category": "prop", "subCategory": "underwater", "keywords": { @@ -19389,7 +19391,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_babylon-assets_WaterBottle", - "path": "/models/food/babylon-assets_WaterBottle.glb.glb", + "path": "/models/food/babylon-assets_WaterBottle.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -19458,7 +19460,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_DiffuseTransmissionTeacup", - "path": "/models/food/DiffuseTransmissionTeacup.glb.glb", + "path": "/models/food/DiffuseTransmissionTeacup.glb", "category": "prop", "subCategory": "cup", "keywords": { @@ -19525,7 +19527,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_graveyard-kit_detail-plate", - "path": "/models/food/graveyard-kit_detail-plate.glb.glb", + "path": "/models/food/graveyard-kit_detail-plate.glb", "category": "prop", "subCategory": "plate", "keywords": { @@ -19590,7 +19592,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_modular-dungeon-kit_template-corner", - "path": "/models/food/modular-dungeon-kit_template-corner.glb.glb", + "path": "/models/food/modular-dungeon-kit_template-corner.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -19665,7 +19667,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_modular-dungeon-kit_template-detail", - "path": "/models/food/modular-dungeon-kit_template-detail.glb.glb", + "path": "/models/food/modular-dungeon-kit_template-detail.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -19736,7 +19738,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_modular-dungeon-kit_template-floor", - "path": "/models/food/modular-dungeon-kit_template-floor.glb.glb", + "path": "/models/food/modular-dungeon-kit_template-floor.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -19812,7 +19814,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_modular-dungeon-kit_template-floor-big", - "path": "/models/food/modular-dungeon-kit_template-floor-big.glb.glb", + "path": "/models/food/modular-dungeon-kit_template-floor-big.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -19888,7 +19890,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_modular-dungeon-kit_template-floor-detail", - "path": "/models/food/modular-dungeon-kit_template-floor-detail.glb.glb", + "path": "/models/food/modular-dungeon-kit_template-floor-detail.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -19964,7 +19966,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_modular-dungeon-kit_template-floor-detail-a", - "path": "/models/food/modular-dungeon-kit_template-floor-detail-a.glb.glb", + "path": "/models/food/modular-dungeon-kit_template-floor-detail-a.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -20040,7 +20042,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_modular-dungeon-kit_template-floor-layer", - "path": "/models/food/modular-dungeon-kit_template-floor-layer.glb.glb", + "path": "/models/food/modular-dungeon-kit_template-floor-layer.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -20116,7 +20118,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_modular-dungeon-kit_template-floor-layer-raised", - "path": "/models/food/modular-dungeon-kit_template-floor-layer-raised.glb.glb", + "path": "/models/food/modular-dungeon-kit_template-floor-layer-raised.glb", "category": "structure", "subCategory": "dungeon", "keywords": { @@ -20192,7 +20194,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_mrtk-fluent-backplate", - "path": "/models/food/mrtk-fluent-backplate.glb.glb", + "path": "/models/food/mrtk-fluent-backplate.glb", "category": "prop", "subCategory": "display", "keywords": { @@ -20254,7 +20256,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_mrtk-fluent-frontplate", - "path": "/models/food/mrtk-fluent-frontplate.glb.glb", + "path": "/models/food/mrtk-fluent-frontplate.glb", "category": "prop", "subCategory": "plate", "keywords": { @@ -20317,7 +20319,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "food_WaterBottle", - "path": "/models/food/WaterBottle.glb.glb", + "path": "/models/food/WaterBottle.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -20386,7 +20388,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_AnisotropyBarnLamp", - "path": "/models/furniture/AnisotropyBarnLamp.glb.glb", + "path": "/models/furniture/AnisotropyBarnLamp.glb", "category": "furniture", "subCategory": "lamp", "keywords": { @@ -20452,7 +20454,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_ChairDamaskPurplegold", - "path": "/models/furniture/ChairDamaskPurplegold.glb.glb", + "path": "/models/furniture/ChairDamaskPurplegold.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -20522,7 +20524,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_ancientbookshelf_01", - "path": "/models/furniture/detailed_realistic_model_ancientbookshelf_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_ancientbookshelf_01.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -20592,7 +20594,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_ancientbookshelf_02", - "path": "/models/furniture/detailed_realistic_model_ancientbookshelf_02.glb.glb", + "path": "/models/furniture/detailed_realistic_model_ancientbookshelf_02.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -20663,7 +20665,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_ancientbookshelf_03", - "path": "/models/furniture/detailed_realistic_model_ancientbookshelf_03.glb.glb", + "path": "/models/furniture/detailed_realistic_model_ancientbookshelf_03.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -20732,7 +20734,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antique_01", - "path": "/models/furniture/detailed_realistic_model_antique_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antique_01.glb", "category": "furniture", "subCategory": "antique", "keywords": { @@ -20799,7 +20801,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_02", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_02.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_02.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -20866,7 +20868,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_03", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_03.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_03.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -20935,7 +20937,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_04", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_04.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_04.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21003,7 +21005,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_05", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_05.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_05.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21074,7 +21076,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_06", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_06.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_06.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21143,7 +21145,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_07", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_07.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_07.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21211,7 +21213,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_08", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_08.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_08.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21279,7 +21281,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_09", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_09.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_09.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21348,7 +21350,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_10", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_10.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_10.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21415,7 +21417,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_11", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_11.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_11.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21483,7 +21485,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_12", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_12.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_12.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21552,7 +21554,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_13", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_13.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_13.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21622,7 +21624,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_14", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_14.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_14.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21691,7 +21693,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_15", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_15.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_15.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21759,7 +21761,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_16", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_16.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_16.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21828,7 +21830,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_17", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_17.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_17.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21896,7 +21898,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_18", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_18.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_18.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -21963,7 +21965,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_19", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_19.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_19.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -22032,7 +22034,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_20", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_20.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_20.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -22100,7 +22102,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_21", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_21.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_21.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -22167,7 +22169,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_22", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_22.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_22.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -22236,7 +22238,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_23", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_23.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_23.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -22305,7 +22307,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_24", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_24.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_24.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -22374,7 +22376,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_25", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_25.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_25.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -22443,7 +22445,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_antiquebookshelf_26", - "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_26.glb.glb", + "path": "/models/furniture/detailed_realistic_model_antiquebookshelf_26.glb", "category": "furniture", "subCategory": "bookshelf", "keywords": { @@ -22512,7 +22514,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_bookcase_01", - "path": "/models/furniture/detailed_realistic_model_bookcase_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_bookcase_01.glb", "category": "furniture", "subCategory": "bookcase", "keywords": { @@ -22578,7 +22580,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_broomstick_01", - "path": "/models/furniture/detailed_realistic_model_broomstick_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_broomstick_01.glb", "category": "furniture", "subCategory": "broom", "keywords": { @@ -22641,7 +22643,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_broomstick_02", - "path": "/models/furniture/detailed_realistic_model_broomstick_02.glb.glb", + "path": "/models/furniture/detailed_realistic_model_broomstick_02.glb", "category": "furniture", "subCategory": "broomstick", "keywords": { @@ -22704,7 +22706,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_castiron_01", - "path": "/models/furniture/detailed_realistic_model_castiron_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_castiron_01.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -22774,7 +22776,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grand_01", - "path": "/models/furniture/detailed_realistic_model_grand_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grand_01.glb", "category": "furniture", "subCategory": "furniture", "keywords": { @@ -22840,7 +22842,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_01", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_01.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -22908,7 +22910,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_02", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_02.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_02.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -22975,7 +22977,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_03", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_03.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_03.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23043,7 +23045,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_04", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_04.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_04.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23111,7 +23113,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_05", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_05.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_05.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23178,7 +23180,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_06", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_06.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_06.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23246,7 +23248,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_07", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_07.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_07.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23312,7 +23314,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_08", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_08.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_08.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23380,7 +23382,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_09", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_09.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_09.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23448,7 +23450,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_10", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_10.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_10.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23516,7 +23518,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_11", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_11.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_11.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23584,7 +23586,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_12", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_12.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_12.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23652,7 +23654,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_13", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_13.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_13.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23718,7 +23720,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_14", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_14.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_14.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23786,7 +23788,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_15", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_15.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_15.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23857,7 +23859,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_16", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_16.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_16.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23925,7 +23927,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_grandoaktable_17", - "path": "/models/furniture/detailed_realistic_model_grandoaktable_17.glb.glb", + "path": "/models/furniture/detailed_realistic_model_grandoaktable_17.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -23991,7 +23993,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_01", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_01.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24060,7 +24062,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_02", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_02.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_02.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24130,7 +24132,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_03", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_03.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_03.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24196,7 +24198,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_04", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_04.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_04.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24263,7 +24265,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_05", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_05.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_05.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24330,7 +24332,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_06", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_06.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_06.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24398,7 +24400,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_07", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_07.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_07.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24466,7 +24468,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_08", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_08.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_08.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24535,7 +24537,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_09", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_09.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_09.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24602,7 +24604,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_10", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_10.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_10.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24669,7 +24671,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_11", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_11.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_11.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24737,7 +24739,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_12", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_12.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_12.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24804,7 +24806,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_13", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_13.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_13.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24872,7 +24874,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_largeoaktable_14", - "path": "/models/furniture/detailed_realistic_model_largeoaktable_14.glb.glb", + "path": "/models/furniture/detailed_realistic_model_largeoaktable_14.glb", "category": "furniture", "subCategory": "table", "keywords": { @@ -24940,7 +24942,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_potionshelf_01", - "path": "/models/furniture/detailed_realistic_model_potionshelf_01.glb.glb", + "path": "/models/furniture/detailed_realistic_model_potionshelf_01.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -25012,7 +25014,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_detailed_realistic_model_potionshelf_02", - "path": "/models/furniture/detailed_realistic_model_potionshelf_02.glb.glb", + "path": "/models/furniture/detailed_realistic_model_potionshelf_02.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -25085,7 +25087,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_fantasy-town-kit_stall-bench", - "path": "/models/furniture/fantasy-town-kit_stall-bench.glb.glb", + "path": "/models/furniture/fantasy-town-kit_stall-bench.glb", "category": "furniture", "subCategory": "bench", "keywords": { @@ -25158,7 +25160,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_fantasy-town-kit_stall-stool", - "path": "/models/furniture/fantasy-town-kit_stall-stool.glb.glb", + "path": "/models/furniture/fantasy-town-kit_stall-stool.glb", "category": "furniture", "subCategory": "stool", "keywords": { @@ -25231,7 +25233,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_GlamVelvetSofa", - "path": "/models/furniture/GlamVelvetSofa.glb.glb", + "path": "/models/furniture/GlamVelvetSofa.glb", "category": "furniture", "subCategory": "sofa", "keywords": { @@ -25298,7 +25300,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_graveyard-kit_bench", - "path": "/models/furniture/graveyard-kit_bench.glb.glb", + "path": "/models/furniture/graveyard-kit_bench.glb", "category": "furniture", "subCategory": "bench", "keywords": { @@ -25368,7 +25370,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_graveyard-kit_bench-damaged", - "path": "/models/furniture/graveyard-kit_bench-damaged.glb.glb", + "path": "/models/furniture/graveyard-kit_bench-damaged.glb", "category": "furniture", "subCategory": "bench", "keywords": { @@ -25440,7 +25442,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_IridescenceLamp", - "path": "/models/furniture/IridescenceLamp.glb.glb", + "path": "/models/furniture/IridescenceLamp.glb", "category": "furniture", "subCategory": "lamp", "keywords": { @@ -25510,7 +25512,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_LightsPunctualLamp", - "path": "/models/furniture/LightsPunctualLamp.glb.glb", + "path": "/models/furniture/LightsPunctualLamp.glb", "category": "furniture", "subCategory": "lamp", "keywords": { @@ -25576,7 +25578,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_01", - "path": "/models/furniture/modern_office_chair_padded_01.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_01.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -25646,7 +25648,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_02", - "path": "/models/furniture/modern_office_chair_padded_02.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_02.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -25716,7 +25718,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_03", - "path": "/models/furniture/modern_office_chair_padded_03.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_03.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -25785,7 +25787,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_04", - "path": "/models/furniture/modern_office_chair_padded_04.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_04.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -25857,7 +25859,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_05", - "path": "/models/furniture/modern_office_chair_padded_05.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_05.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -25927,7 +25929,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_06", - "path": "/models/furniture/modern_office_chair_padded_06.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_06.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -25992,7 +25994,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_07", - "path": "/models/furniture/modern_office_chair_padded_07.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_07.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26058,7 +26060,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_08", - "path": "/models/furniture/modern_office_chair_padded_08.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_08.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26127,7 +26129,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_09", - "path": "/models/furniture/modern_office_chair_padded_09.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_09.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26194,7 +26196,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_10", - "path": "/models/furniture/modern_office_chair_padded_10.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_10.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26265,7 +26267,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_11", - "path": "/models/furniture/modern_office_chair_padded_11.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_11.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26334,7 +26336,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_12", - "path": "/models/furniture/modern_office_chair_padded_12.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_12.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26403,7 +26405,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_13", - "path": "/models/furniture/modern_office_chair_padded_13.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_13.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26469,7 +26471,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_14", - "path": "/models/furniture/modern_office_chair_padded_14.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_14.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26541,7 +26543,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_15", - "path": "/models/furniture/modern_office_chair_padded_15.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_15.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26606,7 +26608,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_16", - "path": "/models/furniture/modern_office_chair_padded_16.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_16.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26675,7 +26677,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_17", - "path": "/models/furniture/modern_office_chair_padded_17.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_17.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26740,7 +26742,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_18", - "path": "/models/furniture/modern_office_chair_padded_18.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_18.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26809,7 +26811,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_19", - "path": "/models/furniture/modern_office_chair_padded_19.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_19.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26878,7 +26880,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_20", - "path": "/models/furniture/modern_office_chair_padded_20.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_20.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -26947,7 +26949,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_21", - "path": "/models/furniture/modern_office_chair_padded_21.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_21.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27019,7 +27021,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_22", - "path": "/models/furniture/modern_office_chair_padded_22.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_22.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27084,7 +27086,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_23", - "path": "/models/furniture/modern_office_chair_padded_23.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_23.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27155,7 +27157,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_24", - "path": "/models/furniture/modern_office_chair_padded_24.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_24.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27220,7 +27222,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_25", - "path": "/models/furniture/modern_office_chair_padded_25.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_25.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27289,7 +27291,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_26", - "path": "/models/furniture/modern_office_chair_padded_26.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_26.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27358,7 +27360,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_27", - "path": "/models/furniture/modern_office_chair_padded_27.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_27.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27423,7 +27425,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_28", - "path": "/models/furniture/modern_office_chair_padded_28.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_28.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27494,7 +27496,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_29", - "path": "/models/furniture/modern_office_chair_padded_29.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_29.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27563,7 +27565,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_modern_office_chair_padded_30", - "path": "/models/furniture/modern_office_chair_padded_30.glb.glb", + "path": "/models/furniture/modern_office_chair_padded_30.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27628,7 +27630,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_realistic_wooden_office_desk_01", - "path": "/models/furniture/realistic_wooden_office_desk_01.glb.glb", + "path": "/models/furniture/realistic_wooden_office_desk_01.glb", "category": "furniture", "subCategory": "desk", "keywords": { @@ -27699,7 +27701,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_realistic_wooden_office_desk_02", - "path": "/models/furniture/realistic_wooden_office_desk_02.glb.glb", + "path": "/models/furniture/realistic_wooden_office_desk_02.glb", "category": "furniture", "subCategory": "desk", "keywords": { @@ -27771,7 +27773,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_realistic_wooden_office_desk_03", - "path": "/models/furniture/realistic_wooden_office_desk_03.glb.glb", + "path": "/models/furniture/realistic_wooden_office_desk_03.glb", "category": "furniture", "subCategory": "desk", "keywords": { @@ -27842,7 +27844,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_realistic_wooden_office_desk_04", - "path": "/models/furniture/realistic_wooden_office_desk_04.glb.glb", + "path": "/models/furniture/realistic_wooden_office_desk_04.glb", "category": "furniture", "subCategory": "desk", "keywords": { @@ -27913,7 +27915,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_SheenChair", - "path": "/models/furniture/SheenChair.glb.glb", + "path": "/models/furniture/SheenChair.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -27983,7 +27985,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_SheenChair_1769416633174", - "path": "/models/furniture/SheenChair_1769416633174.glb.glb", + "path": "/models/furniture/SheenChair_1769416633174.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -28053,7 +28055,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_SheenWoodLeatherSofa", - "path": "/models/furniture/SheenWoodLeatherSofa.glb.glb", + "path": "/models/furniture/SheenWoodLeatherSofa.glb", "category": "furniture", "subCategory": "sofa", "keywords": { @@ -28119,7 +28121,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_three_js-examples_AnisotropyBarnLamp", - "path": "/models/furniture/three.js-examples_AnisotropyBarnLamp.glb.glb", + "path": "/models/furniture/three.js-examples_AnisotropyBarnLamp.glb", "category": "furniture", "subCategory": "lamp", "keywords": { @@ -28187,7 +28189,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_three_js-examples_IridescenceLamp", - "path": "/models/furniture/three.js-examples_IridescenceLamp.glb.glb", + "path": "/models/furniture/three.js-examples_IridescenceLamp.glb", "category": "furniture", "subCategory": "lamp", "keywords": { @@ -28257,7 +28259,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_three_js-examples_minimalistic_modern_bedroom", - "path": "/models/furniture/three.js-examples_minimalistic_modern_bedroom.glb.glb", + "path": "/models/furniture/three.js-examples_minimalistic_modern_bedroom.glb", "category": "furniture", "subCategory": "bedroom", "keywords": { @@ -28327,7 +28329,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "furniture_three_js-examples_SheenChair", - "path": "/models/furniture/three.js-examples_SheenChair.glb.glb", + "path": "/models/furniture/three.js-examples_SheenChair.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -28395,7 +28397,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_bush1", - "path": "/models/nature/bush1.glb.glb", + "path": "/models/nature/bush1.glb", "category": "nature", "subCategory": "bush", "keywords": { @@ -28471,7 +28473,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_bush2", - "path": "/models/nature/bush2.glb.glb", + "path": "/models/nature/bush2.glb", "category": "nature", "subCategory": "bush", "keywords": { @@ -28545,7 +28547,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_bush3", - "path": "/models/nature/bush3.glb.glb", + "path": "/models/nature/bush3.glb", "category": "nature", "subCategory": "bush", "keywords": { @@ -28619,7 +28621,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_bush4", - "path": "/models/nature/bush4.glb.glb", + "path": "/models/nature/bush4.glb", "category": "nature", "subCategory": "bush", "keywords": { @@ -28693,7 +28695,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_bush5", - "path": "/models/nature/bush5.glb.glb", + "path": "/models/nature/bush5.glb", "category": "nature", "subCategory": "bush", "keywords": { @@ -28770,7 +28772,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_02", - "path": "/models/nature/detailed_realistic_model_crystalball_02.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_02.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -28833,7 +28835,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_03", - "path": "/models/nature/detailed_realistic_model_crystalball_03.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_03.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -28899,7 +28901,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_04", - "path": "/models/nature/detailed_realistic_model_crystalball_04.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_04.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -28962,7 +28964,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_05", - "path": "/models/nature/detailed_realistic_model_crystalball_05.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_05.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29028,7 +29030,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_06", - "path": "/models/nature/detailed_realistic_model_crystalball_06.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_06.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29093,7 +29095,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_07", - "path": "/models/nature/detailed_realistic_model_crystalball_07.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_07.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29158,7 +29160,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_08", - "path": "/models/nature/detailed_realistic_model_crystalball_08.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_08.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29224,7 +29226,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_09", - "path": "/models/nature/detailed_realistic_model_crystalball_09.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_09.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29287,7 +29289,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_10", - "path": "/models/nature/detailed_realistic_model_crystalball_10.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_10.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29354,7 +29356,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_11", - "path": "/models/nature/detailed_realistic_model_crystalball_11.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_11.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29417,7 +29419,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_12", - "path": "/models/nature/detailed_realistic_model_crystalball_12.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_12.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29481,7 +29483,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_13", - "path": "/models/nature/detailed_realistic_model_crystalball_13.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_13.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29544,7 +29546,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_14", - "path": "/models/nature/detailed_realistic_model_crystalball_14.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_14.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29607,7 +29609,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_15", - "path": "/models/nature/detailed_realistic_model_crystalball_15.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_15.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29671,7 +29673,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_16", - "path": "/models/nature/detailed_realistic_model_crystalball_16.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_16.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29734,7 +29736,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_17", - "path": "/models/nature/detailed_realistic_model_crystalball_17.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_17.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29799,7 +29801,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_18", - "path": "/models/nature/detailed_realistic_model_crystalball_18.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_18.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29864,7 +29866,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_19", - "path": "/models/nature/detailed_realistic_model_crystalball_19.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_19.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29927,7 +29929,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_20", - "path": "/models/nature/detailed_realistic_model_crystalball_20.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_20.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -29990,7 +29992,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_21", - "path": "/models/nature/detailed_realistic_model_crystalball_21.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_21.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -30053,7 +30055,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_22", - "path": "/models/nature/detailed_realistic_model_crystalball_22.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_22.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -30116,7 +30118,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_23", - "path": "/models/nature/detailed_realistic_model_crystalball_23.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_23.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -30181,7 +30183,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_crystalball_24", - "path": "/models/nature/detailed_realistic_model_crystalball_24.glb.glb", + "path": "/models/nature/detailed_realistic_model_crystalball_24.glb", "category": "prop", "subCategory": "crystalball", "keywords": { @@ -30246,7 +30248,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_detailed_realistic_model_stone_01", - "path": "/models/nature/detailed_realistic_model_stone_01.glb.glb", + "path": "/models/nature/detailed_realistic_model_stone_01.glb", "category": "nature", "subCategory": "stone", "keywords": { @@ -30323,7 +30325,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_DiffuseTransmissionPlant", - "path": "/models/nature/DiffuseTransmissionPlant.glb.glb", + "path": "/models/nature/DiffuseTransmissionPlant.glb", "category": "nature", "subCategory": "plant", "keywords": { @@ -30390,7 +30392,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_pillar-stone", - "path": "/models/nature/fantasy-town-kit_pillar-stone.glb.glb", + "path": "/models/nature/fantasy-town-kit_pillar-stone.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -30466,7 +30468,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_rock-large", - "path": "/models/nature/fantasy-town-kit_rock-large.glb.glb", + "path": "/models/nature/fantasy-town-kit_rock-large.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -30542,7 +30544,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_rock-small", - "path": "/models/nature/fantasy-town-kit_rock-small.glb.glb", + "path": "/models/nature/fantasy-town-kit_rock-small.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -30618,7 +30620,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_rock-wide", - "path": "/models/nature/fantasy-town-kit_rock-wide.glb.glb", + "path": "/models/nature/fantasy-town-kit_rock-wide.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -30694,7 +30696,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_stairs-stone", - "path": "/models/nature/fantasy-town-kit_stairs-stone.glb.glb", + "path": "/models/nature/fantasy-town-kit_stairs-stone.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -30766,7 +30768,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_stairs-stone-corner", - "path": "/models/nature/fantasy-town-kit_stairs-stone-corner.glb.glb", + "path": "/models/nature/fantasy-town-kit_stairs-stone-corner.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -30837,7 +30839,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_stairs-stone-handrail", - "path": "/models/nature/fantasy-town-kit_stairs-stone-handrail.glb.glb", + "path": "/models/nature/fantasy-town-kit_stairs-stone-handrail.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -30910,7 +30912,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_stairs-stone-round", - "path": "/models/nature/fantasy-town-kit_stairs-stone-round.glb.glb", + "path": "/models/nature/fantasy-town-kit_stairs-stone-round.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -30982,7 +30984,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_stairs-wide-stone", - "path": "/models/nature/fantasy-town-kit_stairs-wide-stone.glb.glb", + "path": "/models/nature/fantasy-town-kit_stairs-wide-stone.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -31055,7 +31057,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_stairs-wide-stone-handrail", - "path": "/models/nature/fantasy-town-kit_stairs-wide-stone-handrail.glb.glb", + "path": "/models/nature/fantasy-town-kit_stairs-wide-stone-handrail.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -31130,7 +31132,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_tree", - "path": "/models/nature/fantasy-town-kit_tree.glb.glb", + "path": "/models/nature/fantasy-town-kit_tree.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -31206,7 +31208,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_tree-crooked", - "path": "/models/nature/fantasy-town-kit_tree-crooked.glb.glb", + "path": "/models/nature/fantasy-town-kit_tree-crooked.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -31281,7 +31283,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_tree-high", - "path": "/models/nature/fantasy-town-kit_tree-high.glb.glb", + "path": "/models/nature/fantasy-town-kit_tree-high.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -31352,7 +31354,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_tree-high-crooked", - "path": "/models/nature/fantasy-town-kit_tree-high-crooked.glb.glb", + "path": "/models/nature/fantasy-town-kit_tree-high-crooked.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -31428,7 +31430,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_tree-high-round", - "path": "/models/nature/fantasy-town-kit_tree-high-round.glb.glb", + "path": "/models/nature/fantasy-town-kit_tree-high-round.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -31504,7 +31506,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_wall-window-stone", - "path": "/models/nature/fantasy-town-kit_wall-window-stone.glb.glb", + "path": "/models/nature/fantasy-town-kit_wall-window-stone.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -31580,7 +31582,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_fantasy-town-kit_wall-wood-window-stone", - "path": "/models/nature/fantasy-town-kit_wall-wood-window-stone.glb.glb", + "path": "/models/nature/fantasy-town-kit_wall-wood-window-stone.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -31656,7 +31658,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_GlassVaseFlowers", - "path": "/models/nature/GlassVaseFlowers.glb.glb", + "path": "/models/nature/GlassVaseFlowers.glb", "category": "nature", "subCategory": "flowers", "keywords": { @@ -31725,7 +31727,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_altar-stone", - "path": "/models/nature/graveyard-kit_altar-stone.glb.glb", + "path": "/models/nature/graveyard-kit_altar-stone.glb", "category": "structure", "subCategory": "altar", "keywords": { @@ -31795,7 +31797,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-bevel", - "path": "/models/nature/graveyard-kit_gravestone-bevel.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-bevel.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -31866,7 +31868,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-broken", - "path": "/models/nature/graveyard-kit_gravestone-broken.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-broken.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -31937,7 +31939,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-cross", - "path": "/models/nature/graveyard-kit_gravestone-cross.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-cross.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -32006,7 +32008,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-cross-large", - "path": "/models/nature/graveyard-kit_gravestone-cross-large.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-cross-large.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -32079,7 +32081,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-debris", - "path": "/models/nature/graveyard-kit_gravestone-debris.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-debris.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -32147,7 +32149,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-decorative", - "path": "/models/nature/graveyard-kit_gravestone-decorative.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-decorative.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -32214,7 +32216,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-roof", - "path": "/models/nature/graveyard-kit_gravestone-roof.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-roof.glb", "category": "structure", "subCategory": "gravestone", "keywords": { @@ -32288,7 +32290,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-round", - "path": "/models/nature/graveyard-kit_gravestone-round.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-round.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -32356,7 +32358,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_gravestone-wide", - "path": "/models/nature/graveyard-kit_gravestone-wide.glb.glb", + "path": "/models/nature/graveyard-kit_gravestone-wide.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -32427,7 +32429,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_rocks", - "path": "/models/nature/graveyard-kit_rocks.glb.glb", + "path": "/models/nature/graveyard-kit_rocks.glb", "category": "nature", "subCategory": "rocks", "keywords": { @@ -32499,7 +32501,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_rocks-tall", - "path": "/models/nature/graveyard-kit_rocks-tall.glb.glb", + "path": "/models/nature/graveyard-kit_rocks-tall.glb", "category": "nature", "subCategory": "rocks", "keywords": { @@ -32570,7 +32572,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_stone-wall", - "path": "/models/nature/graveyard-kit_stone-wall.glb.glb", + "path": "/models/nature/graveyard-kit_stone-wall.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -32645,7 +32647,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_stone-wall-column", - "path": "/models/nature/graveyard-kit_stone-wall-column.glb.glb", + "path": "/models/nature/graveyard-kit_stone-wall-column.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -32720,7 +32722,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_stone-wall-curve", - "path": "/models/nature/graveyard-kit_stone-wall-curve.glb.glb", + "path": "/models/nature/graveyard-kit_stone-wall-curve.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -32795,7 +32797,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_graveyard-kit_stone-wall-damaged", - "path": "/models/nature/graveyard-kit_stone-wall-damaged.glb.glb", + "path": "/models/nature/graveyard-kit_stone-wall-damaged.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -32870,7 +32872,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass", - "path": "/models/nature/platformer-kit_block-grass.glb.glb", + "path": "/models/nature/platformer-kit_block-grass.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -32939,7 +32941,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-corner", - "path": "/models/nature/platformer-kit_block-grass-corner.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-corner.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33010,7 +33012,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-corner-low", - "path": "/models/nature/platformer-kit_block-grass-corner-low.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-corner-low.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33082,7 +33084,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-corner-overhang", - "path": "/models/nature/platformer-kit_block-grass-corner-overhang.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-corner-overhang.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33151,7 +33153,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-corner-overhang-low", - "path": "/models/nature/platformer-kit_block-grass-corner-overhang-low.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-corner-overhang-low.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33219,7 +33221,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-curve", - "path": "/models/nature/platformer-kit_block-grass-curve.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-curve.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33291,7 +33293,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-curve-half", - "path": "/models/nature/platformer-kit_block-grass-curve-half.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-curve-half.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33362,7 +33364,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-curve-low", - "path": "/models/nature/platformer-kit_block-grass-curve-low.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-curve-low.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33432,7 +33434,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-edge", - "path": "/models/nature/platformer-kit_block-grass-edge.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-edge.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33503,7 +33505,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-hexagon", - "path": "/models/nature/platformer-kit_block-grass-hexagon.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-hexagon.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33573,7 +33575,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-large", - "path": "/models/nature/platformer-kit_block-grass-large.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-large.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33642,7 +33644,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-large-slope", - "path": "/models/nature/platformer-kit_block-grass-large-slope.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-large-slope.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33711,7 +33713,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-large-slope-narrow", - "path": "/models/nature/platformer-kit_block-grass-large-slope-narrow.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-large-slope-narrow.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33779,7 +33781,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-large-slope-steep", - "path": "/models/nature/platformer-kit_block-grass-large-slope-steep.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-large-slope-steep.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33852,7 +33854,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-large-slope-steep-narrow", - "path": "/models/nature/platformer-kit_block-grass-large-slope-steep-narrow.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-large-slope-steep-narrow.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33920,7 +33922,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-large-tall", - "path": "/models/nature/platformer-kit_block-grass-large-tall.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-large-tall.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -33993,7 +33995,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-long", - "path": "/models/nature/platformer-kit_block-grass-long.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-long.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34063,7 +34065,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-low", - "path": "/models/nature/platformer-kit_block-grass-low.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-low.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34132,7 +34134,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-low-hexagon", - "path": "/models/nature/platformer-kit_block-grass-low-hexagon.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-low-hexagon.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34204,7 +34206,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-low-large", - "path": "/models/nature/platformer-kit_block-grass-low-large.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-low-large.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34276,7 +34278,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-low-long", - "path": "/models/nature/platformer-kit_block-grass-low-long.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-low-long.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34344,7 +34346,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-low-narrow", - "path": "/models/nature/platformer-kit_block-grass-low-narrow.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-low-narrow.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34413,7 +34415,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-narrow", - "path": "/models/nature/platformer-kit_block-grass-narrow.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-narrow.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34485,7 +34487,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-corner", - "path": "/models/nature/platformer-kit_block-grass-overhang-corner.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-corner.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34556,7 +34558,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-edge", - "path": "/models/nature/platformer-kit_block-grass-overhang-edge.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-edge.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34625,7 +34627,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-hexagon", - "path": "/models/nature/platformer-kit_block-grass-overhang-hexagon.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-hexagon.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34696,7 +34698,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-large", - "path": "/models/nature/platformer-kit_block-grass-overhang-large.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-large.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34767,7 +34769,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-large-slope", - "path": "/models/nature/platformer-kit_block-grass-overhang-large-slope.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-large-slope.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34840,7 +34842,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-large-slope-narrow", - "path": "/models/nature/platformer-kit_block-grass-overhang-large-slope-narrow.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-large-slope-narrow.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34911,7 +34913,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-large-slope-steep", - "path": "/models/nature/platformer-kit_block-grass-overhang-large-slope-steep.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-large-slope-steep.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -34985,7 +34987,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-large-slope-steep-narrow", - "path": "/models/nature/platformer-kit_block-grass-overhang-large-slope-steep-narrow.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-large-slope-steep-narrow.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35057,7 +35059,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-large-tall", - "path": "/models/nature/platformer-kit_block-grass-overhang-large-tall.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-large-tall.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35125,7 +35127,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-long", - "path": "/models/nature/platformer-kit_block-grass-overhang-long.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-long.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35194,7 +35196,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-low", - "path": "/models/nature/platformer-kit_block-grass-overhang-low.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-low.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35262,7 +35264,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-low-hexagon", - "path": "/models/nature/platformer-kit_block-grass-overhang-low-hexagon.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-low-hexagon.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35329,7 +35331,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-low-large", - "path": "/models/nature/platformer-kit_block-grass-overhang-low-large.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-low-large.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35401,7 +35403,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-low-long", - "path": "/models/nature/platformer-kit_block-grass-overhang-low-long.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-low-long.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35473,7 +35475,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-low-narrow", - "path": "/models/nature/platformer-kit_block-grass-overhang-low-narrow.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-low-narrow.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35541,7 +35543,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_block-grass-overhang-narrow", - "path": "/models/nature/platformer-kit_block-grass-overhang-narrow.glb.glb", + "path": "/models/nature/platformer-kit_block-grass-overhang-narrow.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35611,7 +35613,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_flowers", - "path": "/models/nature/platformer-kit_flowers.glb.glb", + "path": "/models/nature/platformer-kit_flowers.glb", "category": "nature", "subCategory": "flowers", "keywords": { @@ -35680,7 +35682,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_flowers-tall", - "path": "/models/nature/platformer-kit_flowers-tall.glb.glb", + "path": "/models/nature/platformer-kit_flowers-tall.glb", "category": "nature", "subCategory": "flowers", "keywords": { @@ -35748,7 +35750,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_grass", - "path": "/models/nature/platformer-kit_grass.glb.glb", + "path": "/models/nature/platformer-kit_grass.glb", "category": "nature", "subCategory": "grass", "keywords": { @@ -35818,7 +35820,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_mushrooms", - "path": "/models/nature/platformer-kit_mushrooms.glb.glb", + "path": "/models/nature/platformer-kit_mushrooms.glb", "category": "nature", "subCategory": "mushroom", "keywords": { @@ -35892,7 +35894,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_plant", - "path": "/models/nature/platformer-kit_plant.glb.glb", + "path": "/models/nature/platformer-kit_plant.glb", "category": "nature", "subCategory": "plant", "keywords": { @@ -35962,7 +35964,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_rocks", - "path": "/models/nature/platformer-kit_rocks.glb.glb", + "path": "/models/nature/platformer-kit_rocks.glb", "category": "nature", "subCategory": "rocks", "keywords": { @@ -36028,7 +36030,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_stones", - "path": "/models/nature/platformer-kit_stones.glb.glb", + "path": "/models/nature/platformer-kit_stones.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -36100,7 +36102,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_tree", - "path": "/models/nature/platformer-kit_tree.glb.glb", + "path": "/models/nature/platformer-kit_tree.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -36173,7 +36175,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_tree-pine", - "path": "/models/nature/platformer-kit_tree-pine.glb.glb", + "path": "/models/nature/platformer-kit_tree-pine.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -36244,7 +36246,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_tree-pine-small", - "path": "/models/nature/platformer-kit_tree-pine-small.glb.glb", + "path": "/models/nature/platformer-kit_tree-pine-small.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -36317,7 +36319,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_tree-pine-snow", - "path": "/models/nature/platformer-kit_tree-pine-snow.glb.glb", + "path": "/models/nature/platformer-kit_tree-pine-snow.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -36386,7 +36388,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_tree-pine-snow-small", - "path": "/models/nature/platformer-kit_tree-pine-snow-small.glb.glb", + "path": "/models/nature/platformer-kit_tree-pine-snow-small.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -36458,7 +36460,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_platformer-kit_tree-snow", - "path": "/models/nature/platformer-kit_tree-snow.glb.glb", + "path": "/models/nature/platformer-kit_tree-snow.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -36529,7 +36531,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_rocks1", - "path": "/models/nature/rocks1.glb.glb", + "path": "/models/nature/rocks1.glb", "category": "nature", "subCategory": "rocks", "keywords": { @@ -36604,7 +36606,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_rocks2", - "path": "/models/nature/rocks2.glb.glb", + "path": "/models/nature/rocks2.glb", "category": "nature", "subCategory": "rocks", "keywords": { @@ -36680,7 +36682,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_rocks3", - "path": "/models/nature/rocks3.glb.glb", + "path": "/models/nature/rocks3.glb", "category": "nature", "subCategory": "rocks", "keywords": { @@ -36755,7 +36757,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_rocks4", - "path": "/models/nature/rocks4.glb.glb", + "path": "/models/nature/rocks4.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -36830,7 +36832,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_three_js-examples_Flower", - "path": "/models/nature/three.js-examples_Flower.glb.glb", + "path": "/models/nature/three.js-examples_Flower.glb", "category": "nature", "subCategory": "flower", "keywords": { @@ -36903,7 +36905,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_three_js-examples_forest_house", - "path": "/models/nature/three.js-examples_forest_house.glb.glb", + "path": "/models/nature/three.js-examples_forest_house.glb", "category": "structure", "subCategory": "house", "keywords": { @@ -36976,7 +36978,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone1", - "path": "/models/nature/tombstone1.glb.glb", + "path": "/models/nature/tombstone1.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37047,7 +37049,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone10", - "path": "/models/nature/tombstone10.glb.glb", + "path": "/models/nature/tombstone10.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37117,7 +37119,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone11", - "path": "/models/nature/tombstone11.glb.glb", + "path": "/models/nature/tombstone11.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37190,7 +37192,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone1Weathered", - "path": "/models/nature/tombstone1Weathered.glb.glb", + "path": "/models/nature/tombstone1Weathered.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37261,7 +37263,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone2", - "path": "/models/nature/tombstone2.glb.glb", + "path": "/models/nature/tombstone2.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37331,7 +37333,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone2Weathered", - "path": "/models/nature/tombstone2Weathered.glb.glb", + "path": "/models/nature/tombstone2Weathered.glb", "category": "nature", "subCategory": "tombstone", "keywords": { @@ -37403,7 +37405,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone3", - "path": "/models/nature/tombstone3.glb.glb", + "path": "/models/nature/tombstone3.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37475,7 +37477,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone4", - "path": "/models/nature/tombstone4.glb.glb", + "path": "/models/nature/tombstone4.glb", "category": "structure", "subCategory": "tombstone", "keywords": { @@ -37546,7 +37548,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone5", - "path": "/models/nature/tombstone5.glb.glb", + "path": "/models/nature/tombstone5.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37618,7 +37620,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone5Weathered", - "path": "/models/nature/tombstone5Weathered.glb.glb", + "path": "/models/nature/tombstone5Weathered.glb", "category": "nature", "subCategory": "tombstone", "keywords": { @@ -37690,7 +37692,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone6", - "path": "/models/nature/tombstone6.glb.glb", + "path": "/models/nature/tombstone6.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37762,7 +37764,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone7", - "path": "/models/nature/tombstone7.glb.glb", + "path": "/models/nature/tombstone7.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37836,7 +37838,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone8", - "path": "/models/nature/tombstone8.glb.glb", + "path": "/models/nature/tombstone8.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37911,7 +37913,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tombstone9", - "path": "/models/nature/tombstone9.glb.glb", + "path": "/models/nature/tombstone9.glb", "category": "prop", "subCategory": "tombstone", "keywords": { @@ -37985,7 +37987,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tree1", - "path": "/models/nature/tree1.glb.glb", + "path": "/models/nature/tree1.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -38061,7 +38063,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tree2", - "path": "/models/nature/tree2.glb.glb", + "path": "/models/nature/tree2.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -38137,7 +38139,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tree3", - "path": "/models/nature/tree3.glb.glb", + "path": "/models/nature/tree3.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -38213,7 +38215,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tree4", - "path": "/models/nature/tree4.glb.glb", + "path": "/models/nature/tree4.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -38290,7 +38292,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tree5", - "path": "/models/nature/tree5.glb.glb", + "path": "/models/nature/tree5.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -38365,7 +38367,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tree6", - "path": "/models/nature/tree6.glb.glb", + "path": "/models/nature/tree6.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -38441,7 +38443,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tree7", - "path": "/models/nature/tree7.glb.glb", + "path": "/models/nature/tree7.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -38517,7 +38519,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_tree8", - "path": "/models/nature/tree8.glb.glb", + "path": "/models/nature/tree8.glb", "category": "nature", "subCategory": "tree", "keywords": { @@ -38593,7 +38595,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "nature_underwaterSceneRocksBarnaclesMussels", - "path": "/models/nature/underwaterSceneRocksBarnaclesMussels.glb.glb", + "path": "/models/nature/underwaterSceneRocksBarnaclesMussels.glb", "category": "nature", "subCategory": "rocks", "keywords": { @@ -38656,7 +38658,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_AncientVase", - "path": "/models/props/AncientVase.glb.glb", + "path": "/models/props/AncientVase.glb", "category": "prop", "subCategory": "vase", "keywords": { @@ -38723,7 +38725,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_babylon-assets_BoomBox", - "path": "/models/props/babylon-assets_BoomBox.glb.glb", + "path": "/models/props/babylon-assets_BoomBox.glb", "category": "prop", "subCategory": "audio player", "keywords": { @@ -38786,7 +38788,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_babylon-assets_Box", - "path": "/models/props/babylon-assets_Box.glb.glb", + "path": "/models/props/babylon-assets_Box.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -38854,7 +38856,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_babylon-assets_BoxAnimated", - "path": "/models/props/babylon-assets_BoxAnimated.glb.glb", + "path": "/models/props/babylon-assets_BoxAnimated.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -38916,7 +38918,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_babylon-assets_BoxInterleaved", - "path": "/models/props/babylon-assets_BoxInterleaved.glb.glb", + "path": "/models/props/babylon-assets_BoxInterleaved.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -38977,7 +38979,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_babylon-assets_BoxTextured", - "path": "/models/props/babylon-assets_BoxTextured.glb.glb", + "path": "/models/props/babylon-assets_BoxTextured.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39045,7 +39047,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_babylon-assets_BoxVertexColors", - "path": "/models/props/babylon-assets_BoxVertexColors.glb.glb", + "path": "/models/props/babylon-assets_BoxVertexColors.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39106,7 +39108,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_babylon-assets_BoxWithoutIndices", - "path": "/models/props/babylon-assets_BoxWithoutIndices.glb.glb", + "path": "/models/props/babylon-assets_BoxWithoutIndices.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39171,7 +39173,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_babylon-assets_GearboxAssy", - "path": "/models/props/babylon-assets_GearboxAssy.glb.glb", + "path": "/models/props/babylon-assets_GearboxAssy.glb", "category": "prop", "subCategory": "machine", "keywords": { @@ -39232,7 +39234,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_barrel", - "path": "/models/props/barrel.glb.glb", + "path": "/models/props/barrel.glb", "category": "prop", "subCategory": "barrel", "keywords": { @@ -39301,7 +39303,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_BoomBox", - "path": "/models/props/BoomBox.glb.glb", + "path": "/models/props/BoomBox.glb", "category": "prop", "subCategory": "boombox", "keywords": { @@ -39364,7 +39366,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_BoomBox_1769416633018", - "path": "/models/props/BoomBox_1769416633018.glb.glb", + "path": "/models/props/BoomBox_1769416633018.glb", "category": "prop", "subCategory": "boombox", "keywords": { @@ -39427,7 +39429,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_Box", - "path": "/models/props/Box.glb.glb", + "path": "/models/props/Box.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39495,7 +39497,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_box_1769416633021", - "path": "/models/props/box_1769416633021.glb.glb", + "path": "/models/props/box_1769416633021.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39559,7 +39561,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_Box-draco", - "path": "/models/props/Box-draco.glb.glb", + "path": "/models/props/Box-draco.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39622,7 +39624,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_BoxAnimated", - "path": "/models/props/BoxAnimated.glb.glb", + "path": "/models/props/BoxAnimated.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39690,7 +39692,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_BoxInterleaved", - "path": "/models/props/BoxInterleaved.glb.glb", + "path": "/models/props/BoxInterleaved.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39754,7 +39756,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_BoxTextured", - "path": "/models/props/BoxTextured.glb.glb", + "path": "/models/props/BoxTextured.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39821,7 +39823,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_BoxTexturedNonPowerOfTwo", - "path": "/models/props/BoxTexturedNonPowerOfTwo.glb.glb", + "path": "/models/props/BoxTexturedNonPowerOfTwo.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39888,7 +39890,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_BoxVertexColors", - "path": "/models/props/BoxVertexColors.glb.glb", + "path": "/models/props/BoxVertexColors.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -39953,7 +39955,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_cornellBox", - "path": "/models/props/cornellBox.glb.glb", + "path": "/models/props/cornellBox.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -40014,7 +40016,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_crate1", - "path": "/models/props/crate1.glb.glb", + "path": "/models/props/crate1.glb", "category": "prop", "subCategory": "crate", "keywords": { @@ -40081,7 +40083,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_crate2", - "path": "/models/props/crate2.glb.glb", + "path": "/models/props/crate2.glb", "category": "prop", "subCategory": "crate", "keywords": { @@ -40146,7 +40148,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_crateStack", - "path": "/models/props/crateStack.glb.glb", + "path": "/models/props/crateStack.glb", "category": "prop", "subCategory": "crate", "keywords": { @@ -40212,7 +40214,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_02", - "path": "/models/props/detailed_realistic_model_albusdumbledore_02.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_02.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40278,7 +40280,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_03", - "path": "/models/props/detailed_realistic_model_albusdumbledore_03.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_03.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40347,7 +40349,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_04", - "path": "/models/props/detailed_realistic_model_albusdumbledore_04.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_04.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40415,7 +40417,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_05", - "path": "/models/props/detailed_realistic_model_albusdumbledore_05.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_05.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40480,7 +40482,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_06", - "path": "/models/props/detailed_realistic_model_albusdumbledore_06.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_06.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40547,7 +40549,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_07", - "path": "/models/props/detailed_realistic_model_albusdumbledore_07.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_07.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40613,7 +40615,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_08", - "path": "/models/props/detailed_realistic_model_albusdumbledore_08.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_08.glb", "category": "character", "subCategory": "human", "keywords": { @@ -40682,7 +40684,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_09", - "path": "/models/props/detailed_realistic_model_albusdumbledore_09.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_09.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40750,7 +40752,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_10", - "path": "/models/props/detailed_realistic_model_albusdumbledore_10.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_10.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40817,7 +40819,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_11", - "path": "/models/props/detailed_realistic_model_albusdumbledore_11.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_11.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40884,7 +40886,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_12", - "path": "/models/props/detailed_realistic_model_albusdumbledore_12.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_12.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -40951,7 +40953,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_13", - "path": "/models/props/detailed_realistic_model_albusdumbledore_13.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_13.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41018,7 +41020,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_14", - "path": "/models/props/detailed_realistic_model_albusdumbledore_14.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_14.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41087,7 +41089,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_15", - "path": "/models/props/detailed_realistic_model_albusdumbledore_15.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_15.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41155,7 +41157,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_16", - "path": "/models/props/detailed_realistic_model_albusdumbledore_16.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_16.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41222,7 +41224,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_17", - "path": "/models/props/detailed_realistic_model_albusdumbledore_17.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_17.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41287,7 +41289,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_18", - "path": "/models/props/detailed_realistic_model_albusdumbledore_18.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_18.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41353,7 +41355,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_19", - "path": "/models/props/detailed_realistic_model_albusdumbledore_19.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_19.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41421,7 +41423,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_20", - "path": "/models/props/detailed_realistic_model_albusdumbledore_20.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_20.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41487,7 +41489,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_21", - "path": "/models/props/detailed_realistic_model_albusdumbledore_21.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_21.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41556,7 +41558,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_22", - "path": "/models/props/detailed_realistic_model_albusdumbledore_22.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_22.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41623,7 +41625,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_23", - "path": "/models/props/detailed_realistic_model_albusdumbledore_23.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_23.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41690,7 +41692,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_24", - "path": "/models/props/detailed_realistic_model_albusdumbledore_24.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_24.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41757,7 +41759,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_25", - "path": "/models/props/detailed_realistic_model_albusdumbledore_25.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_25.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41823,7 +41825,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_26", - "path": "/models/props/detailed_realistic_model_albusdumbledore_26.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_26.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41890,7 +41892,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_27", - "path": "/models/props/detailed_realistic_model_albusdumbledore_27.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_27.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -41957,7 +41959,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_albusdumbledore_28", - "path": "/models/props/detailed_realistic_model_albusdumbledore_28.glb.glb", + "path": "/models/props/detailed_realistic_model_albusdumbledore_28.glb", "category": "character", "subCategory": "wizard", "keywords": { @@ -42025,7 +42027,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_dark_01", - "path": "/models/props/detailed_realistic_model_dark_01.glb.glb", + "path": "/models/props/detailed_realistic_model_dark_01.glb", "category": "prop", "subCategory": "realistic", "keywords": { @@ -42093,7 +42095,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_default_01", - "path": "/models/props/detailed_realistic_model_default_01.glb.glb", + "path": "/models/props/detailed_realistic_model_default_01.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -42159,7 +42161,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_default_02", - "path": "/models/props/detailed_realistic_model_default_02.glb.glb", + "path": "/models/props/detailed_realistic_model_default_02.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -42225,7 +42227,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_default_03", - "path": "/models/props/detailed_realistic_model_default_03.glb.glb", + "path": "/models/props/detailed_realistic_model_default_03.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -42287,7 +42289,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_default_04", - "path": "/models/props/detailed_realistic_model_default_04.glb.glb", + "path": "/models/props/detailed_realistic_model_default_04.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -42353,7 +42355,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_default_05", - "path": "/models/props/detailed_realistic_model_default_05.glb.glb", + "path": "/models/props/detailed_realistic_model_default_05.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -42416,7 +42418,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floating_01", - "path": "/models/props/detailed_realistic_model_floating_01.glb.glb", + "path": "/models/props/detailed_realistic_model_floating_01.glb", "category": "prop", "subCategory": "floating object", "keywords": { @@ -42477,7 +42479,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floating_02", - "path": "/models/props/detailed_realistic_model_floating_02.glb.glb", + "path": "/models/props/detailed_realistic_model_floating_02.glb", "category": "prop", "subCategory": "general", "keywords": { @@ -42542,7 +42544,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_02", - "path": "/models/props/detailed_realistic_model_floatingcandles_02.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_02.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -42609,7 +42611,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_03", - "path": "/models/props/detailed_realistic_model_floatingcandles_03.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_03.glb", "category": "prop", "subCategory": "floatingcandles", "keywords": { @@ -42675,7 +42677,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_04", - "path": "/models/props/detailed_realistic_model_floatingcandles_04.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_04.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -42747,7 +42749,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_05", - "path": "/models/props/detailed_realistic_model_floatingcandles_05.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_05.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -42816,7 +42818,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_06", - "path": "/models/props/detailed_realistic_model_floatingcandles_06.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_06.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -42883,7 +42885,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_07", - "path": "/models/props/detailed_realistic_model_floatingcandles_07.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_07.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -42952,7 +42954,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_08", - "path": "/models/props/detailed_realistic_model_floatingcandles_08.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_08.glb", "category": "prop", "subCategory": "floatingcandles", "keywords": { @@ -43023,7 +43025,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_09", - "path": "/models/props/detailed_realistic_model_floatingcandles_09.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_09.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43094,7 +43096,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_10", - "path": "/models/props/detailed_realistic_model_floatingcandles_10.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_10.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43161,7 +43163,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_11", - "path": "/models/props/detailed_realistic_model_floatingcandles_11.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_11.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43232,7 +43234,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_12", - "path": "/models/props/detailed_realistic_model_floatingcandles_12.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_12.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43297,7 +43299,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_13", - "path": "/models/props/detailed_realistic_model_floatingcandles_13.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_13.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43368,7 +43370,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_14", - "path": "/models/props/detailed_realistic_model_floatingcandles_14.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_14.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43438,7 +43440,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_15", - "path": "/models/props/detailed_realistic_model_floatingcandles_15.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_15.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43503,7 +43505,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_16", - "path": "/models/props/detailed_realistic_model_floatingcandles_16.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_16.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43573,7 +43575,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_17", - "path": "/models/props/detailed_realistic_model_floatingcandles_17.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_17.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43642,7 +43644,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_18", - "path": "/models/props/detailed_realistic_model_floatingcandles_18.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_18.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43713,7 +43715,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_19", - "path": "/models/props/detailed_realistic_model_floatingcandles_19.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_19.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43786,7 +43788,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_20", - "path": "/models/props/detailed_realistic_model_floatingcandles_20.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_20.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43854,7 +43856,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_21", - "path": "/models/props/detailed_realistic_model_floatingcandles_21.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_21.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43923,7 +43925,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_22", - "path": "/models/props/detailed_realistic_model_floatingcandles_22.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_22.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -43991,7 +43993,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_23", - "path": "/models/props/detailed_realistic_model_floatingcandles_23.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_23.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -44059,7 +44061,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_24", - "path": "/models/props/detailed_realistic_model_floatingcandles_24.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_24.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -44129,7 +44131,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_25", - "path": "/models/props/detailed_realistic_model_floatingcandles_25.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_25.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -44195,7 +44197,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_26", - "path": "/models/props/detailed_realistic_model_floatingcandles_26.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_26.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -44262,7 +44264,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_27", - "path": "/models/props/detailed_realistic_model_floatingcandles_27.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_27.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -44332,7 +44334,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_28", - "path": "/models/props/detailed_realistic_model_floatingcandles_28.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_28.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -44401,7 +44403,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_29", - "path": "/models/props/detailed_realistic_model_floatingcandles_29.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_29.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -44471,7 +44473,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_floatingcandles_30", - "path": "/models/props/detailed_realistic_model_floatingcandles_30.glb.glb", + "path": "/models/props/detailed_realistic_model_floatingcandles_30.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -44542,7 +44544,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_ghostly_01", - "path": "/models/props/detailed_realistic_model_ghostly_01.glb.glb", + "path": "/models/props/detailed_realistic_model_ghostly_01.glb", "category": "character", "subCategory": "ghost", "keywords": { @@ -44608,7 +44610,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_glass_01", - "path": "/models/props/detailed_realistic_model_glass_01.glb.glb", + "path": "/models/props/detailed_realistic_model_glass_01.glb", "category": "prop", "subCategory": "glassware", "keywords": { @@ -44677,7 +44679,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_glass_02", - "path": "/models/props/detailed_realistic_model_glass_02.glb.glb", + "path": "/models/props/detailed_realistic_model_glass_02.glb", "category": "prop", "subCategory": "glassware", "keywords": { @@ -44746,7 +44748,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_goldensnitch_01", - "path": "/models/props/detailed_realistic_model_goldensnitch_01.glb.glb", + "path": "/models/props/detailed_realistic_model_goldensnitch_01.glb", "category": "prop", "subCategory": "goldensnitch", "keywords": { @@ -44813,7 +44815,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_goldensnitch_02", - "path": "/models/props/detailed_realistic_model_goldensnitch_02.glb.glb", + "path": "/models/props/detailed_realistic_model_goldensnitch_02.glb", "category": "prop", "subCategory": "ball", "keywords": { @@ -44876,7 +44878,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_hogwarts_01", - "path": "/models/props/detailed_realistic_model_hogwarts_01.glb.glb", + "path": "/models/props/detailed_realistic_model_hogwarts_01.glb", "category": "structure", "subCategory": "castle", "keywords": { @@ -44951,7 +44953,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_leatherbound_01", - "path": "/models/props/detailed_realistic_model_leatherbound_01.glb.glb", + "path": "/models/props/detailed_realistic_model_leatherbound_01.glb", "category": "prop", "subCategory": "book", "keywords": { @@ -45015,7 +45017,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_leatherbound_02", - "path": "/models/props/detailed_realistic_model_leatherbound_02.glb.glb", + "path": "/models/props/detailed_realistic_model_leatherbound_02.glb", "category": "prop", "subCategory": "book", "keywords": { @@ -45082,7 +45084,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_magic_01", - "path": "/models/props/detailed_realistic_model_magic_01.glb.glb", + "path": "/models/props/detailed_realistic_model_magic_01.glb", "category": "prop", "subCategory": "magic", "keywords": { @@ -45148,7 +45150,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_portrait_01", - "path": "/models/props/detailed_realistic_model_portrait_01.glb.glb", + "path": "/models/props/detailed_realistic_model_portrait_01.glb", "category": "prop", "subCategory": "portrait", "keywords": { @@ -45213,7 +45215,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_portrait_02", - "path": "/models/props/detailed_realistic_model_portrait_02.glb.glb", + "path": "/models/props/detailed_realistic_model_portrait_02.glb", "category": "prop", "subCategory": "portrait", "keywords": { @@ -45276,7 +45278,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_potions_01", - "path": "/models/props/detailed_realistic_model_potions_01.glb.glb", + "path": "/models/props/detailed_realistic_model_potions_01.glb", "category": "prop", "subCategory": "potion", "keywords": { @@ -45347,7 +45349,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_potions_02", - "path": "/models/props/detailed_realistic_model_potions_02.glb.glb", + "path": "/models/props/detailed_realistic_model_potions_02.glb", "category": "prop", "subCategory": "potion", "keywords": { @@ -45418,7 +45420,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sleeping_01", - "path": "/models/props/detailed_realistic_model_sleeping_01.glb.glb", + "path": "/models/props/detailed_realistic_model_sleeping_01.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45485,7 +45487,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_01", - "path": "/models/props/detailed_realistic_model_solid_01.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_01.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45544,7 +45546,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_02", - "path": "/models/props/detailed_realistic_model_solid_02.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_02.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45608,7 +45610,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_03", - "path": "/models/props/detailed_realistic_model_solid_03.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_03.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45676,7 +45678,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_04", - "path": "/models/props/detailed_realistic_model_solid_04.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_04.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45741,7 +45743,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_05", - "path": "/models/props/detailed_realistic_model_solid_05.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_05.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45805,7 +45807,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_06", - "path": "/models/props/detailed_realistic_model_solid_06.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_06.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45871,7 +45873,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_07", - "path": "/models/props/detailed_realistic_model_solid_07.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_07.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45934,7 +45936,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_08", - "path": "/models/props/detailed_realistic_model_solid_08.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_08.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -45997,7 +45999,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_09", - "path": "/models/props/detailed_realistic_model_solid_09.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_09.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -46062,7 +46064,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_10", - "path": "/models/props/detailed_realistic_model_solid_10.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_10.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -46125,7 +46127,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_11", - "path": "/models/props/detailed_realistic_model_solid_11.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_11.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -46192,7 +46194,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_12", - "path": "/models/props/detailed_realistic_model_solid_12.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_12.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -46257,7 +46259,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_13", - "path": "/models/props/detailed_realistic_model_solid_13.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_13.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -46325,7 +46327,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_14", - "path": "/models/props/detailed_realistic_model_solid_14.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_14.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -46390,7 +46392,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_15", - "path": "/models/props/detailed_realistic_model_solid_15.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_15.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -46452,7 +46454,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_16", - "path": "/models/props/detailed_realistic_model_solid_16.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_16.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -46514,7 +46516,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_17", - "path": "/models/props/detailed_realistic_model_solid_17.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_17.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -46577,7 +46579,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_solid_18", - "path": "/models/props/detailed_realistic_model_solid_18.glb.glb", + "path": "/models/props/detailed_realistic_model_solid_18.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -46643,7 +46645,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sorting_01", - "path": "/models/props/detailed_realistic_model_sorting_01.glb.glb", + "path": "/models/props/detailed_realistic_model_sorting_01.glb", "category": "prop", "subCategory": "tool", "keywords": { @@ -46704,7 +46706,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sorting_01_1769413346495", - "path": "/models/props/detailed_realistic_model_sorting_01_1769413346495.glb.glb", + "path": "/models/props/detailed_realistic_model_sorting_01_1769413346495.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -46768,7 +46770,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sorting_02", - "path": "/models/props/detailed_realistic_model_sorting_02.glb.glb", + "path": "/models/props/detailed_realistic_model_sorting_02.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -46836,7 +46838,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_01", - "path": "/models/props/detailed_realistic_model_sortinghat_01.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_01.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -46902,7 +46904,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_02", - "path": "/models/props/detailed_realistic_model_sortinghat_02.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_02.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -46969,7 +46971,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_03", - "path": "/models/props/detailed_realistic_model_sortinghat_03.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_03.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47034,7 +47036,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_04", - "path": "/models/props/detailed_realistic_model_sortinghat_04.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_04.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47099,7 +47101,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_05", - "path": "/models/props/detailed_realistic_model_sortinghat_05.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_05.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47166,7 +47168,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_06", - "path": "/models/props/detailed_realistic_model_sortinghat_06.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_06.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47235,7 +47237,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_07", - "path": "/models/props/detailed_realistic_model_sortinghat_07.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_07.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47303,7 +47305,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_08", - "path": "/models/props/detailed_realistic_model_sortinghat_08.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_08.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47369,7 +47371,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_09", - "path": "/models/props/detailed_realistic_model_sortinghat_09.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_09.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47435,7 +47437,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_10", - "path": "/models/props/detailed_realistic_model_sortinghat_10.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_10.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47502,7 +47504,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_11", - "path": "/models/props/detailed_realistic_model_sortinghat_11.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_11.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47567,7 +47569,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_12", - "path": "/models/props/detailed_realistic_model_sortinghat_12.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_12.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47635,7 +47637,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_13", - "path": "/models/props/detailed_realistic_model_sortinghat_13.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_13.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47702,7 +47704,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_14", - "path": "/models/props/detailed_realistic_model_sortinghat_14.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_14.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47769,7 +47771,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_15", - "path": "/models/props/detailed_realistic_model_sortinghat_15.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_15.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47838,7 +47840,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_sortinghat_16", - "path": "/models/props/detailed_realistic_model_sortinghat_16.glb.glb", + "path": "/models/props/detailed_realistic_model_sortinghat_16.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -47907,7 +47909,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_stack_01", - "path": "/models/props/detailed_realistic_model_stack_01.glb.glb", + "path": "/models/props/detailed_realistic_model_stack_01.glb", "category": "prop", "subCategory": "stack", "keywords": { @@ -47972,7 +47974,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_stack_02", - "path": "/models/props/detailed_realistic_model_stack_02.glb.glb", + "path": "/models/props/detailed_realistic_model_stack_02.glb", "category": "prop", "subCategory": "stack", "keywords": { @@ -48035,7 +48037,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_detailed_realistic_model_test_01", - "path": "/models/props/detailed_realistic_model_test_01.glb.glb", + "path": "/models/props/detailed_realistic_model_test_01.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -48098,7 +48100,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_ExplodingBarrel", - "path": "/models/props/ExplodingBarrel.glb.glb", + "path": "/models/props/ExplodingBarrel.glb", "category": "prop", "subCategory": "barrel", "keywords": { @@ -48166,7 +48168,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_GearboxAssy", - "path": "/models/props/GearboxAssy.glb.glb", + "path": "/models/props/GearboxAssy.glb", "category": "prop", "subCategory": "gearbox", "keywords": { @@ -48227,7 +48229,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_gemOnly", - "path": "/models/props/gemOnly.glb.glb", + "path": "/models/props/gemOnly.glb", "category": "prop", "subCategory": "gem", "keywords": { @@ -48292,7 +48294,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_GlassHurricaneCandleHolder", - "path": "/models/props/GlassHurricaneCandleHolder.glb.glb", + "path": "/models/props/GlassHurricaneCandleHolder.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -48360,7 +48362,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_graveyard-kit_candle", - "path": "/models/props/graveyard-kit_candle.glb.glb", + "path": "/models/props/graveyard-kit_candle.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -48432,7 +48434,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_graveyard-kit_candle-multiple", - "path": "/models/props/graveyard-kit_candle-multiple.glb.glb", + "path": "/models/props/graveyard-kit_candle-multiple.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -48502,7 +48504,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_graveyard-kit_lantern-candle", - "path": "/models/props/graveyard-kit_lantern-candle.glb.glb", + "path": "/models/props/graveyard-kit_lantern-candle.glb", "category": "prop", "subCategory": "lantern", "keywords": { @@ -48569,7 +48571,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_barrel", - "path": "/models/props/platformer-kit_barrel.glb.glb", + "path": "/models/props/platformer-kit_barrel.glb", "category": "prop", "subCategory": "barrel", "keywords": { @@ -48636,7 +48638,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_chest", - "path": "/models/props/platformer-kit_chest.glb.glb", + "path": "/models/props/platformer-kit_chest.glb", "category": "prop", "subCategory": "chest", "keywords": { @@ -48708,7 +48710,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_coin-bronze", - "path": "/models/props/platformer-kit_coin-bronze.glb.glb", + "path": "/models/props/platformer-kit_coin-bronze.glb", "category": "prop", "subCategory": "coin", "keywords": { @@ -48773,7 +48775,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_coin-gold", - "path": "/models/props/platformer-kit_coin-gold.glb.glb", + "path": "/models/props/platformer-kit_coin-gold.glb", "category": "prop", "subCategory": "coin", "keywords": { @@ -48837,7 +48839,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_coin-silver", - "path": "/models/props/platformer-kit_coin-silver.glb.glb", + "path": "/models/props/platformer-kit_coin-silver.glb", "category": "prop", "subCategory": "coin", "keywords": { @@ -48901,7 +48903,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_crate", - "path": "/models/props/platformer-kit_crate.glb.glb", + "path": "/models/props/platformer-kit_crate.glb", "category": "prop", "subCategory": "crate", "keywords": { @@ -48967,7 +48969,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_crate-item", - "path": "/models/props/platformer-kit_crate-item.glb.glb", + "path": "/models/props/platformer-kit_crate-item.glb", "category": "prop", "subCategory": "crate", "keywords": { @@ -49035,7 +49037,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_crate-item-strong", - "path": "/models/props/platformer-kit_crate-item-strong.glb.glb", + "path": "/models/props/platformer-kit_crate-item-strong.glb", "category": "prop", "subCategory": "crate", "keywords": { @@ -49099,7 +49101,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_crate-strong", - "path": "/models/props/platformer-kit_crate-strong.glb.glb", + "path": "/models/props/platformer-kit_crate-strong.glb", "category": "prop", "subCategory": "crate", "keywords": { @@ -49166,7 +49168,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_flag", - "path": "/models/props/platformer-kit_flag.glb.glb", + "path": "/models/props/platformer-kit_flag.glb", "category": "prop", "subCategory": "flag", "keywords": { @@ -49242,7 +49244,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_platformer-kit_key", - "path": "/models/props/platformer-kit_key.glb.glb", + "path": "/models/props/platformer-kit_key.glb", "category": "prop", "subCategory": "key", "keywords": { @@ -49314,7 +49316,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_ReciprocatingSaw", - "path": "/models/props/ReciprocatingSaw.glb.glb", + "path": "/models/props/ReciprocatingSaw.glb", "category": "prop", "subCategory": "saw", "keywords": { @@ -49376,7 +49378,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "props_three_js-examples_BoomBox", - "path": "/models/props/three.js-examples_BoomBox.glb.glb", + "path": "/models/props/three.js-examples_BoomBox.glb", "category": "prop", "subCategory": "audio player", "keywords": { @@ -49439,7 +49441,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_ABeautifulGame", - "path": "/models/samples/ABeautifulGame.glb.glb", + "path": "/models/samples/ABeautifulGame.glb", "category": "prop", "subCategory": "game", "keywords": { @@ -49508,7 +49510,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_alien", - "path": "/models/samples/alien.glb.glb", + "path": "/models/samples/alien.glb", "category": "character", "subCategory": "alien", "keywords": { @@ -49571,7 +49573,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_AnimatedColorsCube", - "path": "/models/samples/AnimatedColorsCube.glb.glb", + "path": "/models/samples/AnimatedColorsCube.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -49636,7 +49638,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_AnimationPointerUVs", - "path": "/models/samples/AnimationPointerUVs.glb.glb", + "path": "/models/samples/AnimationPointerUVs.glb", "category": "prop", "subCategory": "animation", "keywords": { @@ -49697,7 +49699,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_AntiqueCamera", - "path": "/models/samples/AntiqueCamera.glb.glb", + "path": "/models/samples/AntiqueCamera.glb", "category": "prop", "subCategory": "camera", "keywords": { @@ -49758,7 +49760,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_Avocado", - "path": "/models/samples/Avocado.glb.glb", + "path": "/models/samples/Avocado.glb", "category": "prop", "subCategory": "fruit", "keywords": { @@ -49825,7 +49827,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_2CylinderEngine", - "path": "/models/samples/babylon-assets_2CylinderEngine.glb.glb", + "path": "/models/samples/babylon-assets_2CylinderEngine.glb", "category": "prop", "subCategory": "engine", "keywords": { @@ -49888,7 +49890,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_Avocado", - "path": "/models/samples/babylon-assets_Avocado.glb.glb", + "path": "/models/samples/babylon-assets_Avocado.glb", "category": "prop", "subCategory": "fruit", "keywords": { @@ -49955,7 +49957,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_BrainStem", - "path": "/models/samples/babylon-assets_BrainStem.glb.glb", + "path": "/models/samples/babylon-assets_BrainStem.glb", "category": "prop", "subCategory": "anatomy", "keywords": { @@ -50016,7 +50018,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_Corset", - "path": "/models/samples/babylon-assets_Corset.glb.glb", + "path": "/models/samples/babylon-assets_Corset.glb", "category": "prop", "subCategory": "clothing", "keywords": { @@ -50079,7 +50081,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_Duck", - "path": "/models/samples/babylon-assets_Duck.glb.glb", + "path": "/models/samples/babylon-assets_Duck.glb", "category": "prop", "subCategory": "toy", "keywords": { @@ -50141,7 +50143,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_Lantern", - "path": "/models/samples/babylon-assets_Lantern.glb.glb", + "path": "/models/samples/babylon-assets_Lantern.glb", "category": "prop", "subCategory": "lantern", "keywords": { @@ -50218,7 +50220,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_MetalRoughSpheres", - "path": "/models/samples/babylon-assets_MetalRoughSpheres.glb.glb", + "path": "/models/samples/babylon-assets_MetalRoughSpheres.glb", "category": "prop", "subCategory": "sphere", "keywords": { @@ -50279,7 +50281,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_RiggedFigure", - "path": "/models/samples/babylon-assets_RiggedFigure.glb.glb", + "path": "/models/samples/babylon-assets_RiggedFigure.glb", "category": "character", "subCategory": "humanoid", "keywords": { @@ -50342,7 +50344,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_RiggedSimple", - "path": "/models/samples/babylon-assets_RiggedSimple.glb.glb", + "path": "/models/samples/babylon-assets_RiggedSimple.glb", "category": "prop", "subCategory": "character", "keywords": { @@ -50405,7 +50407,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_SmilingFace", - "path": "/models/samples/babylon-assets_SmilingFace.glb.glb", + "path": "/models/samples/babylon-assets_SmilingFace.glb", "category": "prop", "subCategory": "face", "keywords": { @@ -50466,7 +50468,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_TextureSettingsTest", - "path": "/models/samples/babylon-assets_TextureSettingsTest.glb.glb", + "path": "/models/samples/babylon-assets_TextureSettingsTest.glb", "category": "prop", "subCategory": "settings", "keywords": { @@ -50530,7 +50532,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_VC", - "path": "/models/samples/babylon-assets_VC.glb.glb", + "path": "/models/samples/babylon-assets_VC.glb", "category": "prop", "subCategory": "misc", "keywords": { @@ -50591,7 +50593,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylon-assets_WalkingLady", - "path": "/models/samples/babylon-assets_WalkingLady.glb.glb", + "path": "/models/samples/babylon-assets_WalkingLady.glb", "category": "character", "subCategory": "human", "keywords": { @@ -50659,7 +50661,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_babylonBuoy", - "path": "/models/samples/babylonBuoy.glb.glb", + "path": "/models/samples/babylonBuoy.glb", "category": "prop", "subCategory": "buoy", "keywords": { @@ -50725,7 +50727,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_BabylonShaderBall_Simple", - "path": "/models/samples/BabylonShaderBall_Simple.glb.glb", + "path": "/models/samples/BabylonShaderBall_Simple.glb", "category": "prop", "subCategory": "ball", "keywords": { @@ -50790,7 +50792,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_ballMesh", - "path": "/models/samples/ballMesh.glb.glb", + "path": "/models/samples/ballMesh.glb", "category": "prop", "subCategory": "ball", "keywords": { @@ -50859,7 +50861,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_bars", - "path": "/models/samples/bars.glb.glb", + "path": "/models/samples/bars.glb", "category": "prop", "subCategory": "bars", "keywords": { @@ -50926,7 +50928,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_Bee", - "path": "/models/samples/Bee.glb.glb", + "path": "/models/samples/Bee.glb", "category": "character", "subCategory": "insect", "keywords": { @@ -50996,7 +50998,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_blackPearl", - "path": "/models/samples/blackPearl.glb.glb", + "path": "/models/samples/blackPearl.glb", "category": "prop", "subCategory": "ship", "keywords": { @@ -51064,7 +51066,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_BrainStem", - "path": "/models/samples/BrainStem.glb.glb", + "path": "/models/samples/BrainStem.glb", "category": "prop", "subCategory": "brain", "keywords": { @@ -51127,7 +51129,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cannon", - "path": "/models/samples/cannon.glb.glb", + "path": "/models/samples/cannon.glb", "category": "prop", "subCategory": "cannon", "keywords": { @@ -51196,7 +51198,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_ceiling", - "path": "/models/samples/ceiling.glb.glb", + "path": "/models/samples/ceiling.glb", "category": "structure", "subCategory": "ceiling", "keywords": { @@ -51266,7 +51268,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_ceiling_corner", - "path": "/models/samples/ceiling corner.glb.glb", + "path": "/models/samples/ceiling corner.glb", "category": "structure", "subCategory": "ceiling", "keywords": { @@ -51338,7 +51340,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_ceiling_straight", - "path": "/models/samples/ceiling straight.glb.glb", + "path": "/models/samples/ceiling straight.glb", "category": "structure", "subCategory": "ceiling", "keywords": { @@ -51406,7 +51408,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_ChronographWatch", - "path": "/models/samples/ChronographWatch.glb.glb", + "path": "/models/samples/ChronographWatch.glb", "category": "prop", "subCategory": "chronograph", "keywords": { @@ -51473,7 +51475,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV1", - "path": "/models/samples/cloth_meshV1.glb.glb", + "path": "/models/samples/cloth_meshV1.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -51543,7 +51545,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV2", - "path": "/models/samples/cloth_meshV2.glb.glb", + "path": "/models/samples/cloth_meshV2.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -51612,7 +51614,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV3", - "path": "/models/samples/cloth_meshV3.glb.glb", + "path": "/models/samples/cloth_meshV3.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -51682,7 +51684,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV4", - "path": "/models/samples/cloth_meshV4.glb.glb", + "path": "/models/samples/cloth_meshV4.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -51750,7 +51752,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV5", - "path": "/models/samples/cloth_meshV5.glb.glb", + "path": "/models/samples/cloth_meshV5.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -51819,7 +51821,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV6", - "path": "/models/samples/cloth_meshV6.glb.glb", + "path": "/models/samples/cloth_meshV6.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -51888,7 +51890,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV7", - "path": "/models/samples/cloth_meshV7.glb.glb", + "path": "/models/samples/cloth_meshV7.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -51957,7 +51959,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV8", - "path": "/models/samples/cloth_meshV8.glb.glb", + "path": "/models/samples/cloth_meshV8.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -52026,7 +52028,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cloth_meshV9", - "path": "/models/samples/cloth_meshV9.glb.glb", + "path": "/models/samples/cloth_meshV9.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -52095,7 +52097,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_clothFolds", - "path": "/models/samples/clothFolds.glb.glb", + "path": "/models/samples/clothFolds.glb", "category": "prop", "subCategory": "cloth", "keywords": { @@ -52162,7 +52164,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_coffin", - "path": "/models/samples/coffin.glb.glb", + "path": "/models/samples/coffin.glb", "category": "prop", "subCategory": "coffin", "keywords": { @@ -52229,7 +52231,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_coffinOpen", - "path": "/models/samples/coffinOpen.glb.glb", + "path": "/models/samples/coffinOpen.glb", "category": "prop", "subCategory": "coffin", "keywords": { @@ -52295,7 +52297,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_CommercialRefrigerator", - "path": "/models/samples/CommercialRefrigerator.glb.glb", + "path": "/models/samples/CommercialRefrigerator.glb", "category": "prop", "subCategory": "refrigerator", "keywords": { @@ -52357,7 +52359,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_corner", - "path": "/models/samples/corner.glb.glb", + "path": "/models/samples/corner.glb", "category": "structure", "subCategory": "corner", "keywords": { @@ -52424,7 +52426,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_corner2", - "path": "/models/samples/corner2.glb.glb", + "path": "/models/samples/corner2.glb", "category": "structure", "subCategory": "architectural_element", "keywords": { @@ -52491,7 +52493,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_Corset", - "path": "/models/samples/Corset.glb.glb", + "path": "/models/samples/Corset.glb", "category": "prop", "subCategory": "clothing", "keywords": { @@ -52553,7 +52555,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_cottage", - "path": "/models/samples/cottage.glb.glb", + "path": "/models/samples/cottage.glb", "category": "structure", "subCategory": "house", "keywords": { @@ -52629,7 +52631,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_D20_Animation", - "path": "/models/samples/D20_Animation.glb.glb", + "path": "/models/samples/D20_Animation.glb", "category": "prop", "subCategory": "dice", "keywords": { @@ -52693,7 +52695,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_DirectionalLight", - "path": "/models/samples/DirectionalLight.glb.glb", + "path": "/models/samples/DirectionalLight.glb", "category": "prop", "subCategory": "directional light", "keywords": { @@ -52762,7 +52764,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_Duck", - "path": "/models/samples/Duck.glb.glb", + "path": "/models/samples/Duck.glb", "category": "prop", "subCategory": "duck", "keywords": { @@ -52828,7 +52830,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_emoji_heart", - "path": "/models/samples/emoji_heart.glb.glb", + "path": "/models/samples/emoji_heart.glb", "category": "prop", "subCategory": "emoji", "keywords": { @@ -52891,7 +52893,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_blade", - "path": "/models/samples/fantasy-town-kit_blade.glb.glb", + "path": "/models/samples/fantasy-town-kit_blade.glb", "category": "prop", "subCategory": "blade", "keywords": { @@ -52964,7 +52966,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_fountain-corner-inner", - "path": "/models/samples/fantasy-town-kit_fountain-corner-inner.glb.glb", + "path": "/models/samples/fantasy-town-kit_fountain-corner-inner.glb", "category": "structure", "subCategory": "fountain", "keywords": { @@ -53033,7 +53035,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_fountain-curved", - "path": "/models/samples/fantasy-town-kit_fountain-curved.glb.glb", + "path": "/models/samples/fantasy-town-kit_fountain-curved.glb", "category": "structure", "subCategory": "fountain", "keywords": { @@ -53105,7 +53107,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_fountain-round", - "path": "/models/samples/fantasy-town-kit_fountain-round.glb.glb", + "path": "/models/samples/fantasy-town-kit_fountain-round.glb", "category": "prop", "subCategory": "fountain", "keywords": { @@ -53176,7 +53178,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_fountain-round-detail", - "path": "/models/samples/fantasy-town-kit_fountain-round-detail.glb.glb", + "path": "/models/samples/fantasy-town-kit_fountain-round-detail.glb", "category": "structure", "subCategory": "fountain", "keywords": { @@ -53247,7 +53249,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_fountain-square", - "path": "/models/samples/fantasy-town-kit_fountain-square.glb.glb", + "path": "/models/samples/fantasy-town-kit_fountain-square.glb", "category": "structure", "subCategory": "fountain", "keywords": { @@ -53319,7 +53321,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_fountain-square-detail", - "path": "/models/samples/fantasy-town-kit_fountain-square-detail.glb.glb", + "path": "/models/samples/fantasy-town-kit_fountain-square-detail.glb", "category": "structure", "subCategory": "fountain", "keywords": { @@ -53385,7 +53387,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_hedge-curved", - "path": "/models/samples/fantasy-town-kit_hedge-curved.glb.glb", + "path": "/models/samples/fantasy-town-kit_hedge-curved.glb", "category": "prop", "subCategory": "hedge", "keywords": { @@ -53461,7 +53463,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_hedge-large-curved", - "path": "/models/samples/fantasy-town-kit_hedge-large-curved.glb.glb", + "path": "/models/samples/fantasy-town-kit_hedge-large-curved.glb", "category": "prop", "subCategory": "hedge", "keywords": { @@ -53536,7 +53538,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_lantern", - "path": "/models/samples/fantasy-town-kit_lantern.glb.glb", + "path": "/models/samples/fantasy-town-kit_lantern.glb", "category": "prop", "subCategory": "lantern", "keywords": { @@ -53608,7 +53610,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_planks", - "path": "/models/samples/fantasy-town-kit_planks.glb.glb", + "path": "/models/samples/fantasy-town-kit_planks.glb", "category": "prop", "subCategory": "planks", "keywords": { @@ -53677,7 +53679,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_planks-opening", - "path": "/models/samples/fantasy-town-kit_planks-opening.glb.glb", + "path": "/models/samples/fantasy-town-kit_planks-opening.glb", "category": "structure", "subCategory": "gate", "keywords": { @@ -53751,7 +53753,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_road-bend", - "path": "/models/samples/fantasy-town-kit_road-bend.glb.glb", + "path": "/models/samples/fantasy-town-kit_road-bend.glb", "category": "structure", "subCategory": "road", "keywords": { @@ -53823,7 +53825,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_road-corner", - "path": "/models/samples/fantasy-town-kit_road-corner.glb.glb", + "path": "/models/samples/fantasy-town-kit_road-corner.glb", "category": "structure", "subCategory": "road", "keywords": { @@ -53891,7 +53893,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_road-corner-inner", - "path": "/models/samples/fantasy-town-kit_road-corner-inner.glb.glb", + "path": "/models/samples/fantasy-town-kit_road-corner-inner.glb", "category": "structure", "subCategory": "road", "keywords": { @@ -53958,7 +53960,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_stairs-wide-wood", - "path": "/models/samples/fantasy-town-kit_stairs-wide-wood.glb.glb", + "path": "/models/samples/fantasy-town-kit_stairs-wide-wood.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -54030,7 +54032,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_stairs-wide-wood-handrail", - "path": "/models/samples/fantasy-town-kit_stairs-wide-wood-handrail.glb.glb", + "path": "/models/samples/fantasy-town-kit_stairs-wide-wood-handrail.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -54099,7 +54101,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_stairs-wood", - "path": "/models/samples/fantasy-town-kit_stairs-wood.glb.glb", + "path": "/models/samples/fantasy-town-kit_stairs-wood.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -54173,7 +54175,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_stairs-wood-handrail", - "path": "/models/samples/fantasy-town-kit_stairs-wood-handrail.glb.glb", + "path": "/models/samples/fantasy-town-kit_stairs-wood-handrail.glb", "category": "structure", "subCategory": "stairs", "keywords": { @@ -54244,7 +54246,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_stall", - "path": "/models/samples/fantasy-town-kit_stall.glb.glb", + "path": "/models/samples/fantasy-town-kit_stall.glb", "category": "structure", "subCategory": "stall", "keywords": { @@ -54314,7 +54316,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_stall-green", - "path": "/models/samples/fantasy-town-kit_stall-green.glb.glb", + "path": "/models/samples/fantasy-town-kit_stall-green.glb", "category": "prop", "subCategory": "stall", "keywords": { @@ -54382,7 +54384,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_stall-red", - "path": "/models/samples/fantasy-town-kit_stall-red.glb.glb", + "path": "/models/samples/fantasy-town-kit_stall-red.glb", "category": "structure", "subCategory": "stall", "keywords": { @@ -54455,7 +54457,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_watermill", - "path": "/models/samples/fantasy-town-kit_watermill.glb.glb", + "path": "/models/samples/fantasy-town-kit_watermill.glb", "category": "structure", "subCategory": "watermill", "keywords": { @@ -54526,7 +54528,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_watermill-wide", - "path": "/models/samples/fantasy-town-kit_watermill-wide.glb.glb", + "path": "/models/samples/fantasy-town-kit_watermill-wide.glb", "category": "structure", "subCategory": "watermill", "keywords": { @@ -54599,7 +54601,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_wheel", - "path": "/models/samples/fantasy-town-kit_wheel.glb.glb", + "path": "/models/samples/fantasy-town-kit_wheel.glb", "category": "prop", "subCategory": "wheel", "keywords": { @@ -54668,7 +54670,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_fantasy-town-kit_windmill", - "path": "/models/samples/fantasy-town-kit_windmill.glb.glb", + "path": "/models/samples/fantasy-town-kit_windmill.glb", "category": "structure", "subCategory": "windmill", "keywords": { @@ -54741,7 +54743,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_Gap", - "path": "/models/samples/Gap.glb.glb", + "path": "/models/samples/Gap.glb", "category": "prop", "subCategory": "gap", "keywords": { @@ -54807,7 +54809,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_gothic_cloister_corner", - "path": "/models/samples/gothic_cloister_corner.glb.glb", + "path": "/models/samples/gothic_cloister_corner.glb", "category": "structure", "subCategory": "cloister", "keywords": { @@ -54880,7 +54882,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_altar-wood", - "path": "/models/samples/graveyard-kit_altar-wood.glb.glb", + "path": "/models/samples/graveyard-kit_altar-wood.glb", "category": "structure", "subCategory": "altar", "keywords": { @@ -54951,7 +54953,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_border-pillar", - "path": "/models/samples/graveyard-kit_border-pillar.glb.glb", + "path": "/models/samples/graveyard-kit_border-pillar.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -55023,7 +55025,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_coffin", - "path": "/models/samples/graveyard-kit_coffin.glb.glb", + "path": "/models/samples/graveyard-kit_coffin.glb", "category": "prop", "subCategory": "coffin", "keywords": { @@ -55088,7 +55090,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_coffin-old", - "path": "/models/samples/graveyard-kit_coffin-old.glb.glb", + "path": "/models/samples/graveyard-kit_coffin-old.glb", "category": "prop", "subCategory": "coffin", "keywords": { @@ -55156,7 +55158,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_cross", - "path": "/models/samples/graveyard-kit_cross.glb.glb", + "path": "/models/samples/graveyard-kit_cross.glb", "category": "prop", "subCategory": "gravestone", "keywords": { @@ -55226,7 +55228,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_cross-wood", - "path": "/models/samples/graveyard-kit_cross-wood.glb.glb", + "path": "/models/samples/graveyard-kit_cross-wood.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -55295,7 +55297,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_crypt", - "path": "/models/samples/graveyard-kit_crypt.glb.glb", + "path": "/models/samples/graveyard-kit_crypt.glb", "category": "structure", "subCategory": "crypt", "keywords": { @@ -55368,7 +55370,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_crypt-a", - "path": "/models/samples/graveyard-kit_crypt-a.glb.glb", + "path": "/models/samples/graveyard-kit_crypt-a.glb", "category": "structure", "subCategory": "crypt", "keywords": { @@ -55439,7 +55441,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_crypt-b", - "path": "/models/samples/graveyard-kit_crypt-b.glb.glb", + "path": "/models/samples/graveyard-kit_crypt-b.glb", "category": "structure", "subCategory": "crypt", "keywords": { @@ -55511,7 +55513,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_crypt-large", - "path": "/models/samples/graveyard-kit_crypt-large.glb.glb", + "path": "/models/samples/graveyard-kit_crypt-large.glb", "category": "structure", "subCategory": "crypt", "keywords": { @@ -55585,7 +55587,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_crypt-small", - "path": "/models/samples/graveyard-kit_crypt-small.glb.glb", + "path": "/models/samples/graveyard-kit_crypt-small.glb", "category": "structure", "subCategory": "crypt", "keywords": { @@ -55658,7 +55660,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_debris", - "path": "/models/samples/graveyard-kit_debris.glb.glb", + "path": "/models/samples/graveyard-kit_debris.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -55727,7 +55729,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_debris-wood", - "path": "/models/samples/graveyard-kit_debris-wood.glb.glb", + "path": "/models/samples/graveyard-kit_debris-wood.glb", "category": "nature", "subCategory": "debris", "keywords": { @@ -55792,7 +55794,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_detail-chalice", - "path": "/models/samples/graveyard-kit_detail-chalice.glb.glb", + "path": "/models/samples/graveyard-kit_detail-chalice.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -55862,7 +55864,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_fire-basket", - "path": "/models/samples/graveyard-kit_fire-basket.glb.glb", + "path": "/models/samples/graveyard-kit_fire-basket.glb", "category": "prop", "subCategory": "fire pit", "keywords": { @@ -55934,7 +55936,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_grave", - "path": "/models/samples/graveyard-kit_grave.glb.glb", + "path": "/models/samples/graveyard-kit_grave.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -56005,7 +56007,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_grave-border", - "path": "/models/samples/graveyard-kit_grave-border.glb.glb", + "path": "/models/samples/graveyard-kit_grave-border.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -56076,7 +56078,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_hay-bale", - "path": "/models/samples/graveyard-kit_hay-bale.glb.glb", + "path": "/models/samples/graveyard-kit_hay-bale.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -56142,7 +56144,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_hay-bale-bundled", - "path": "/models/samples/graveyard-kit_hay-bale-bundled.glb.glb", + "path": "/models/samples/graveyard-kit_hay-bale-bundled.glb", "category": "prop", "subCategory": "hay bale", "keywords": { @@ -56209,7 +56211,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_lantern-glass", - "path": "/models/samples/graveyard-kit_lantern-glass.glb.glb", + "path": "/models/samples/graveyard-kit_lantern-glass.glb", "category": "prop", "subCategory": "lantern", "keywords": { @@ -56276,7 +56278,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_lightpost-all", - "path": "/models/samples/graveyard-kit_lightpost-all.glb.glb", + "path": "/models/samples/graveyard-kit_lightpost-all.glb", "category": "prop", "subCategory": "light", "keywords": { @@ -56348,7 +56350,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_lightpost-double", - "path": "/models/samples/graveyard-kit_lightpost-double.glb.glb", + "path": "/models/samples/graveyard-kit_lightpost-double.glb", "category": "prop", "subCategory": "light", "keywords": { @@ -56423,7 +56425,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_lightpost-single", - "path": "/models/samples/graveyard-kit_lightpost-single.glb.glb", + "path": "/models/samples/graveyard-kit_lightpost-single.glb", "category": "prop", "subCategory": "light", "keywords": { @@ -56497,7 +56499,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pillar-large", - "path": "/models/samples/graveyard-kit_pillar-large.glb.glb", + "path": "/models/samples/graveyard-kit_pillar-large.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -56568,7 +56570,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pillar-small", - "path": "/models/samples/graveyard-kit_pillar-small.glb.glb", + "path": "/models/samples/graveyard-kit_pillar-small.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -56642,7 +56644,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pillar-square", - "path": "/models/samples/graveyard-kit_pillar-square.glb.glb", + "path": "/models/samples/graveyard-kit_pillar-square.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -56715,7 +56717,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pine", - "path": "/models/samples/graveyard-kit_pine.glb.glb", + "path": "/models/samples/graveyard-kit_pine.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -56787,7 +56789,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pine-crooked", - "path": "/models/samples/graveyard-kit_pine-crooked.glb.glb", + "path": "/models/samples/graveyard-kit_pine-crooked.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -56857,7 +56859,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pine-fall", - "path": "/models/samples/graveyard-kit_pine-fall.glb.glb", + "path": "/models/samples/graveyard-kit_pine-fall.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -56928,7 +56930,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pine-fall-crooked", - "path": "/models/samples/graveyard-kit_pine-fall-crooked.glb.glb", + "path": "/models/samples/graveyard-kit_pine-fall-crooked.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -56997,7 +56999,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pumpkin", - "path": "/models/samples/graveyard-kit_pumpkin.glb.glb", + "path": "/models/samples/graveyard-kit_pumpkin.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -57064,7 +57066,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_pumpkin-tall", - "path": "/models/samples/graveyard-kit_pumpkin-tall.glb.glb", + "path": "/models/samples/graveyard-kit_pumpkin-tall.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -57133,7 +57135,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_road", - "path": "/models/samples/graveyard-kit_road.glb.glb", + "path": "/models/samples/graveyard-kit_road.glb", "category": "structure", "subCategory": "road", "keywords": { @@ -57203,7 +57205,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_shovel", - "path": "/models/samples/graveyard-kit_shovel.glb.glb", + "path": "/models/samples/graveyard-kit_shovel.glb", "category": "prop", "subCategory": "shovel", "keywords": { @@ -57271,7 +57273,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_shovel-dirt", - "path": "/models/samples/graveyard-kit_shovel-dirt.glb.glb", + "path": "/models/samples/graveyard-kit_shovel-dirt.glb", "category": "prop", "subCategory": "shovel", "keywords": { @@ -57332,7 +57334,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_trunk", - "path": "/models/samples/graveyard-kit_trunk.glb.glb", + "path": "/models/samples/graveyard-kit_trunk.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -57401,7 +57403,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_trunk-long", - "path": "/models/samples/graveyard-kit_trunk-long.glb.glb", + "path": "/models/samples/graveyard-kit_trunk-long.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -57470,7 +57472,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_urn-round", - "path": "/models/samples/graveyard-kit_urn-round.glb.glb", + "path": "/models/samples/graveyard-kit_urn-round.glb", "category": "prop", "subCategory": "urn", "keywords": { @@ -57540,7 +57542,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyard-kit_urn-square", - "path": "/models/samples/graveyard-kit_urn-square.glb.glb", + "path": "/models/samples/graveyard-kit_urn-square.glb", "category": "prop", "subCategory": "urn", "keywords": { @@ -57605,7 +57607,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_graveyardScene", - "path": "/models/samples/graveyardScene.glb.glb", + "path": "/models/samples/graveyardScene.glb", "category": "structure", "subCategory": "graveyard", "keywords": { @@ -57677,7 +57679,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_greenEnergyBall", - "path": "/models/samples/greenEnergyBall.glb.glb", + "path": "/models/samples/greenEnergyBall.glb", "category": "prop", "subCategory": "energy", "keywords": { @@ -57741,7 +57743,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_greySnapper_vertColor", - "path": "/models/samples/greySnapper_vertColor.glb.glb", + "path": "/models/samples/greySnapper_vertColor.glb", "category": "character", "subCategory": "fish", "keywords": { @@ -57804,7 +57806,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_HarryPotter_Hat_Test", - "path": "/models/samples/HarryPotter_Hat_Test.glb.glb", + "path": "/models/samples/HarryPotter_Hat_Test.glb", "category": "prop", "subCategory": "hat", "keywords": { @@ -57867,7 +57869,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_head", - "path": "/models/samples/head.glb.glb", + "path": "/models/samples/head.glb", "category": "prop", "subCategory": "head", "keywords": { @@ -57929,7 +57931,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_hexTile", - "path": "/models/samples/hexTile.glb.glb", + "path": "/models/samples/hexTile.glb", "category": "prop", "subCategory": "tile", "keywords": { @@ -57996,7 +57998,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_hogwarts_corridor", - "path": "/models/samples/hogwarts_corridor.glb.glb", + "path": "/models/samples/hogwarts_corridor.glb", "category": "structure", "subCategory": "corridor", "keywords": { @@ -58067,7 +58069,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_holiday2021", - "path": "/models/samples/holiday2021.glb.glb", + "path": "/models/samples/holiday2021.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -58132,7 +58134,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_hollowLog", - "path": "/models/samples/hollowLog.glb.glb", + "path": "/models/samples/hollowLog.glb", "category": "nature", "subCategory": "log", "keywords": { @@ -58200,7 +58202,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_inn", - "path": "/models/samples/inn.glb.glb", + "path": "/models/samples/inn.glb", "category": "structure", "subCategory": "inn", "keywords": { @@ -58277,7 +58279,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_IridescentDishWithOlives", - "path": "/models/samples/IridescentDishWithOlives.glb.glb", + "path": "/models/samples/IridescentDishWithOlives.glb", "category": "prop", "subCategory": "dish", "keywords": { @@ -58344,7 +58346,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_iridescentSphere", - "path": "/models/samples/iridescentSphere.glb.glb", + "path": "/models/samples/iridescentSphere.glb", "category": "prop", "subCategory": "sphere", "keywords": { @@ -58409,7 +58411,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_l_hand_lhs", - "path": "/models/samples/l_hand_lhs.glb.glb", + "path": "/models/samples/l_hand_lhs.glb", "category": "prop", "subCategory": "hand", "keywords": { @@ -58470,7 +58472,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_l_hand_rhs", - "path": "/models/samples/l_hand_rhs.glb.glb", + "path": "/models/samples/l_hand_rhs.glb", "category": "prop", "subCategory": "hand", "keywords": { @@ -58534,7 +58536,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_Lantern", - "path": "/models/samples/Lantern.glb.glb", + "path": "/models/samples/Lantern.glb", "category": "prop", "subCategory": "lantern", "keywords": { @@ -58606,7 +58608,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_left", - "path": "/models/samples/left.glb.glb", + "path": "/models/samples/left.glb", "category": "prop", "subCategory": "sign", "keywords": { @@ -58675,7 +58677,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_lightFixture", - "path": "/models/samples/lightFixture.glb.glb", + "path": "/models/samples/lightFixture.glb", "category": "prop", "subCategory": "fixture", "keywords": { @@ -58746,7 +58748,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_lightPaddle", - "path": "/models/samples/lightPaddle.glb.glb", + "path": "/models/samples/lightPaddle.glb", "category": "prop", "subCategory": "paddle", "keywords": { @@ -58812,7 +58814,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_lightPost1", - "path": "/models/samples/lightPost1.glb.glb", + "path": "/models/samples/lightPost1.glb", "category": "prop", "subCategory": "light", "keywords": { @@ -58882,7 +58884,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_lightPost2", - "path": "/models/samples/lightPost2.glb.glb", + "path": "/models/samples/lightPost2.glb", "category": "prop", "subCategory": "street lamp", "keywords": { @@ -58954,7 +58956,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_lightPost3", - "path": "/models/samples/lightPost3.glb.glb", + "path": "/models/samples/lightPost3.glb", "category": "prop", "subCategory": "street lamp", "keywords": { @@ -59024,7 +59026,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_logSaw", - "path": "/models/samples/logSaw.glb.glb", + "path": "/models/samples/logSaw.glb", "category": "prop", "subCategory": "saw", "keywords": { @@ -59088,7 +59090,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_marineGround", - "path": "/models/samples/marineGround.glb.glb", + "path": "/models/samples/marineGround.glb", "category": "environment", "subCategory": "marine", "keywords": { @@ -59154,7 +59156,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_mausoleumLarge", - "path": "/models/samples/mausoleumLarge.glb.glb", + "path": "/models/samples/mausoleumLarge.glb", "category": "structure", "subCategory": "mausoleum", "keywords": { @@ -59227,7 +59229,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_mausoleumLargeSkewed", - "path": "/models/samples/mausoleumLargeSkewed.glb.glb", + "path": "/models/samples/mausoleumLargeSkewed.glb", "category": "structure", "subCategory": "mausoleum", "keywords": { @@ -59302,7 +59304,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_mausoleumSmall", - "path": "/models/samples/mausoleumSmall.glb.glb", + "path": "/models/samples/mausoleumSmall.glb", "category": "structure", "subCategory": "mausoleum", "keywords": { @@ -59376,7 +59378,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_mausoleumSmallSkewed", - "path": "/models/samples/mausoleumSmallSkewed.glb.glb", + "path": "/models/samples/mausoleumSmallSkewed.glb", "category": "structure", "subCategory": "mausoleum", "keywords": { @@ -59448,7 +59450,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_MetalRoughSpheres", - "path": "/models/samples/MetalRoughSpheres.glb.glb", + "path": "/models/samples/MetalRoughSpheres.glb", "category": "prop", "subCategory": "spheres", "keywords": { @@ -59511,7 +59513,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_MetalRoughSpheresNoTextures", - "path": "/models/samples/MetalRoughSpheresNoTextures.glb.glb", + "path": "/models/samples/MetalRoughSpheresNoTextures.glb", "category": "prop", "subCategory": "sphere", "keywords": { @@ -59572,7 +59574,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_miniBar2", - "path": "/models/samples/miniBar2.glb.glb", + "path": "/models/samples/miniBar2.glb", "category": "furniture", "subCategory": "bar", "keywords": { @@ -59639,7 +59641,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0093b022-794", - "path": "/models/samples/model_0093b022-794.glb.glb", + "path": "/models/samples/model_0093b022-794.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -59706,7 +59708,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_00f59c8c-52a", - "path": "/models/samples/model_00f59c8c-52a.glb.glb", + "path": "/models/samples/model_00f59c8c-52a.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -59773,7 +59775,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_01510687-984", - "path": "/models/samples/model_01510687-984.glb.glb", + "path": "/models/samples/model_01510687-984.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -59839,7 +59841,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_016a52a6-dce", - "path": "/models/samples/model_016a52a6-dce.glb.glb", + "path": "/models/samples/model_016a52a6-dce.glb", "category": "structure", "subCategory": "gate", "keywords": { @@ -59916,7 +59918,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_01843fe1-0d8", - "path": "/models/samples/model_01843fe1-0d8.glb.glb", + "path": "/models/samples/model_01843fe1-0d8.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -59979,7 +59981,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_018e3909-86a", - "path": "/models/samples/model_018e3909-86a.glb.glb", + "path": "/models/samples/model_018e3909-86a.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -60044,7 +60046,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_01d40f41-443", - "path": "/models/samples/model_01d40f41-443.glb.glb", + "path": "/models/samples/model_01d40f41-443.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -60111,7 +60113,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_03ce66cf-2cb", - "path": "/models/samples/model_03ce66cf-2cb.glb.glb", + "path": "/models/samples/model_03ce66cf-2cb.glb", "category": "prop", "subCategory": "miniature", "keywords": { @@ -60178,7 +60180,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_04055cca-aa4", - "path": "/models/samples/model_04055cca-aa4.glb.glb", + "path": "/models/samples/model_04055cca-aa4.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -60244,7 +60246,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0453ed65-f52", - "path": "/models/samples/model_0453ed65-f52.glb.glb", + "path": "/models/samples/model_0453ed65-f52.glb", "category": "prop", "subCategory": "sphere", "keywords": { @@ -60312,7 +60314,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_04c0a68c-4d3", - "path": "/models/samples/model_04c0a68c-4d3.glb.glb", + "path": "/models/samples/model_04c0a68c-4d3.glb", "category": "prop", "subCategory": "board", "keywords": { @@ -60378,7 +60380,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0528de32-356", - "path": "/models/samples/model_0528de32-356.glb.glb", + "path": "/models/samples/model_0528de32-356.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -60442,7 +60444,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0551ca36-061", - "path": "/models/samples/model_0551ca36-061.glb.glb", + "path": "/models/samples/model_0551ca36-061.glb", "category": "furniture", "subCategory": "bench", "keywords": { @@ -60514,7 +60516,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_05a53f67-4b9", - "path": "/models/samples/model_05a53f67-4b9.glb.glb", + "path": "/models/samples/model_05a53f67-4b9.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -60578,7 +60580,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_07860247-cc1", - "path": "/models/samples/model_07860247-cc1.glb.glb", + "path": "/models/samples/model_07860247-cc1.glb", "category": "prop", "subCategory": "jar", "keywords": { @@ -60649,7 +60651,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_07e883b3-2e4", - "path": "/models/samples/model_07e883b3-2e4.glb.glb", + "path": "/models/samples/model_07e883b3-2e4.glb", "category": "prop", "subCategory": "plate", "keywords": { @@ -60717,7 +60719,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_087513b0-788", - "path": "/models/samples/model_087513b0-788.glb.glb", + "path": "/models/samples/model_087513b0-788.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -60783,7 +60785,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_08d8ba2b-37f", - "path": "/models/samples/model_08d8ba2b-37f.glb.glb", + "path": "/models/samples/model_08d8ba2b-37f.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -60852,7 +60854,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_09507cba-d6a", - "path": "/models/samples/model_09507cba-d6a.glb.glb", + "path": "/models/samples/model_09507cba-d6a.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -60918,7 +60920,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0970fa42-4ab", - "path": "/models/samples/model_0970fa42-4ab.glb.glb", + "path": "/models/samples/model_0970fa42-4ab.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -60983,7 +60985,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_098364b0-485", - "path": "/models/samples/model_098364b0-485.glb.glb", + "path": "/models/samples/model_098364b0-485.glb", "category": "prop", "subCategory": "tank", "keywords": { @@ -61045,7 +61047,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0a81f502-144", - "path": "/models/samples/model_0a81f502-144.glb.glb", + "path": "/models/samples/model_0a81f502-144.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -61116,7 +61118,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0af6ef40-5d9", - "path": "/models/samples/model_0af6ef40-5d9.glb.glb", + "path": "/models/samples/model_0af6ef40-5d9.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -61189,7 +61191,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0b5e780a-7fd", - "path": "/models/samples/model_0b5e780a-7fd.glb.glb", + "path": "/models/samples/model_0b5e780a-7fd.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -61265,7 +61267,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0c8f0256-480", - "path": "/models/samples/model_0c8f0256-480.glb.glb", + "path": "/models/samples/model_0c8f0256-480.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -61333,7 +61335,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0d126e35-a18", - "path": "/models/samples/model_0d126e35-a18.glb.glb", + "path": "/models/samples/model_0d126e35-a18.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -61399,7 +61401,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0d5aa4c9-f28", - "path": "/models/samples/model_0d5aa4c9-f28.glb.glb", + "path": "/models/samples/model_0d5aa4c9-f28.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -61465,7 +61467,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0da49c1d-aad", - "path": "/models/samples/model_0da49c1d-aad.glb.glb", + "path": "/models/samples/model_0da49c1d-aad.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -61531,7 +61533,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_0e689817-18d", - "path": "/models/samples/model_0e689817-18d.glb.glb", + "path": "/models/samples/model_0e689817-18d.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -61598,7 +61600,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1058e0f3-ca5", - "path": "/models/samples/model_1058e0f3-ca5.glb.glb", + "path": "/models/samples/model_1058e0f3-ca5.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -61671,7 +61673,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_11aba94f-2a2", - "path": "/models/samples/model_11aba94f-2a2.glb.glb", + "path": "/models/samples/model_11aba94f-2a2.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -61741,7 +61743,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_12363a91-7c2", - "path": "/models/samples/model_12363a91-7c2.glb.glb", + "path": "/models/samples/model_12363a91-7c2.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -61807,7 +61809,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_12487f1b-e31", - "path": "/models/samples/model_12487f1b-e31.glb.glb", + "path": "/models/samples/model_12487f1b-e31.glb", "category": "prop", "subCategory": "stone", "keywords": { @@ -61879,7 +61881,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_135ccf25-173", - "path": "/models/samples/model_135ccf25-173.glb.glb", + "path": "/models/samples/model_135ccf25-173.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -61952,7 +61954,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_142eb426-331", - "path": "/models/samples/model_142eb426-331.glb.glb", + "path": "/models/samples/model_142eb426-331.glb", "category": "prop", "subCategory": "book", "keywords": { @@ -62016,7 +62018,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_154c5dbd-c67", - "path": "/models/samples/model_154c5dbd-c67.glb.glb", + "path": "/models/samples/model_154c5dbd-c67.glb", "category": "prop", "subCategory": "crystal", "keywords": { @@ -62089,7 +62091,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_155077a0-2bf", - "path": "/models/samples/model_155077a0-2bf.glb.glb", + "path": "/models/samples/model_155077a0-2bf.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -62159,7 +62161,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_16938d74-b1b", - "path": "/models/samples/model_16938d74-b1b.glb.glb", + "path": "/models/samples/model_16938d74-b1b.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -62231,7 +62233,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_16d8adee-41d", - "path": "/models/samples/model_16d8adee-41d.glb.glb", + "path": "/models/samples/model_16d8adee-41d.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -62305,7 +62307,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_174e6c87-f89", - "path": "/models/samples/model_174e6c87-f89.glb.glb", + "path": "/models/samples/model_174e6c87-f89.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -62369,7 +62371,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1755311d-a94", - "path": "/models/samples/model_1755311d-a94.glb.glb", + "path": "/models/samples/model_1755311d-a94.glb", "category": "prop", "subCategory": "pipe", "keywords": { @@ -62435,7 +62437,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_178bcd33-dde", - "path": "/models/samples/model_178bcd33-dde.glb.glb", + "path": "/models/samples/model_178bcd33-dde.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -62508,7 +62510,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1821afe6-4c6", - "path": "/models/samples/model_1821afe6-4c6.glb.glb", + "path": "/models/samples/model_1821afe6-4c6.glb", "category": "environment", "subCategory": "terrain", "keywords": { @@ -62581,7 +62583,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_18d93646-1b6", - "path": "/models/samples/model_18d93646-1b6.glb.glb", + "path": "/models/samples/model_18d93646-1b6.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -62654,7 +62656,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1946522f-f26", - "path": "/models/samples/model_1946522f-f26.glb.glb", + "path": "/models/samples/model_1946522f-f26.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -62722,7 +62724,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1a2b827d-ca0", - "path": "/models/samples/model_1a2b827d-ca0.glb.glb", + "path": "/models/samples/model_1a2b827d-ca0.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -62790,7 +62792,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1be984cb-ce8", - "path": "/models/samples/model_1be984cb-ce8.glb.glb", + "path": "/models/samples/model_1be984cb-ce8.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -62856,7 +62858,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1c8af2e7-e0e", - "path": "/models/samples/model_1c8af2e7-e0e.glb.glb", + "path": "/models/samples/model_1c8af2e7-e0e.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -62929,7 +62931,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1cd08e71-e60", - "path": "/models/samples/model_1cd08e71-e60.glb.glb", + "path": "/models/samples/model_1cd08e71-e60.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -63003,7 +63005,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1d34d1bb-fa4", - "path": "/models/samples/model_1d34d1bb-fa4.glb.glb", + "path": "/models/samples/model_1d34d1bb-fa4.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -63066,7 +63068,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1ebaca74-ea4", - "path": "/models/samples/model_1ebaca74-ea4.glb.glb", + "path": "/models/samples/model_1ebaca74-ea4.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -63134,7 +63136,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1ebf3984-395", - "path": "/models/samples/model_1ebf3984-395.glb.glb", + "path": "/models/samples/model_1ebf3984-395.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -63198,7 +63200,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1f6de2b1-6a8", - "path": "/models/samples/model_1f6de2b1-6a8.glb.glb", + "path": "/models/samples/model_1f6de2b1-6a8.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -63261,7 +63263,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_1fec001e-606", - "path": "/models/samples/model_1fec001e-606.glb.glb", + "path": "/models/samples/model_1fec001e-606.glb", "category": "prop", "subCategory": "standing lamp", "keywords": { @@ -63327,7 +63329,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_200b163b-fb2", - "path": "/models/samples/model_200b163b-fb2.glb.glb", + "path": "/models/samples/model_200b163b-fb2.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -63395,7 +63397,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_202ac3e3-c96", - "path": "/models/samples/model_202ac3e3-c96.glb.glb", + "path": "/models/samples/model_202ac3e3-c96.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -63461,7 +63463,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_20d6b88d-840", - "path": "/models/samples/model_20d6b88d-840.glb.glb", + "path": "/models/samples/model_20d6b88d-840.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -63527,7 +63529,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_21a2c8fa-3bd", - "path": "/models/samples/model_21a2c8fa-3bd.glb.glb", + "path": "/models/samples/model_21a2c8fa-3bd.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -63595,7 +63597,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_21aa0d34-46b", - "path": "/models/samples/model_21aa0d34-46b.glb.glb", + "path": "/models/samples/model_21aa0d34-46b.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -63658,7 +63660,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_21c2cbf9-0c1", - "path": "/models/samples/model_21c2cbf9-0c1.glb.glb", + "path": "/models/samples/model_21c2cbf9-0c1.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -63729,7 +63731,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_21cc9c37-d86", - "path": "/models/samples/model_21cc9c37-d86.glb.glb", + "path": "/models/samples/model_21cc9c37-d86.glb", "category": "prop", "subCategory": "dice", "keywords": { @@ -63790,7 +63792,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_21fdb9e5-1ad", - "path": "/models/samples/model_21fdb9e5-1ad.glb.glb", + "path": "/models/samples/model_21fdb9e5-1ad.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -63855,7 +63857,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2445097b-bdf", - "path": "/models/samples/model_2445097b-bdf.glb.glb", + "path": "/models/samples/model_2445097b-bdf.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -63927,7 +63929,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_24769937-ced", - "path": "/models/samples/model_24769937-ced.glb.glb", + "path": "/models/samples/model_24769937-ced.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -63992,7 +63994,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_24cb8a6e-a2f", - "path": "/models/samples/model_24cb8a6e-a2f.glb.glb", + "path": "/models/samples/model_24cb8a6e-a2f.glb", "category": "structure", "subCategory": "statue", "keywords": { @@ -64063,7 +64065,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_24ee6619-f7f", - "path": "/models/samples/model_24ee6619-f7f.glb.glb", + "path": "/models/samples/model_24ee6619-f7f.glb", "category": "prop", "subCategory": "sphere", "keywords": { @@ -64127,7 +64129,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_251a10e8-bf6", - "path": "/models/samples/model_251a10e8-bf6.glb.glb", + "path": "/models/samples/model_251a10e8-bf6.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -64193,7 +64195,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_252c5cbe-f20", - "path": "/models/samples/model_252c5cbe-f20.glb.glb", + "path": "/models/samples/model_252c5cbe-f20.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -64265,7 +64267,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2544e0ef-078", - "path": "/models/samples/model_2544e0ef-078.glb.glb", + "path": "/models/samples/model_2544e0ef-078.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -64330,7 +64332,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2568a43c-da7", - "path": "/models/samples/model_2568a43c-da7.glb.glb", + "path": "/models/samples/model_2568a43c-da7.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -64391,7 +64393,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2572bd61-6c2", - "path": "/models/samples/model_2572bd61-6c2.glb.glb", + "path": "/models/samples/model_2572bd61-6c2.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -64456,7 +64458,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_259a3789-b8f", - "path": "/models/samples/model_259a3789-b8f.glb.glb", + "path": "/models/samples/model_259a3789-b8f.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -64522,7 +64524,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2612a456-9d8", - "path": "/models/samples/model_2612a456-9d8.glb.glb", + "path": "/models/samples/model_2612a456-9d8.glb", "category": "prop", "subCategory": "pen", "keywords": { @@ -64586,7 +64588,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_263f2bfa-789", - "path": "/models/samples/model_263f2bfa-789.glb.glb", + "path": "/models/samples/model_263f2bfa-789.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -64651,7 +64653,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_26f30e42-e08", - "path": "/models/samples/model_26f30e42-e08.glb.glb", + "path": "/models/samples/model_26f30e42-e08.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -64722,7 +64724,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_27d6327d-780", - "path": "/models/samples/model_27d6327d-780.glb.glb", + "path": "/models/samples/model_27d6327d-780.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -64791,7 +64793,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_285c3534-738", - "path": "/models/samples/model_285c3534-738.glb.glb", + "path": "/models/samples/model_285c3534-738.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -64863,7 +64865,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_29b2b8b8-376", - "path": "/models/samples/model_29b2b8b8-376.glb.glb", + "path": "/models/samples/model_29b2b8b8-376.glb", "category": "nature", "subCategory": "bush", "keywords": { @@ -64937,7 +64939,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_29f8c09b-7b5", - "path": "/models/samples/model_29f8c09b-7b5.glb.glb", + "path": "/models/samples/model_29f8c09b-7b5.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -65008,7 +65010,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_29fa4c1d-039", - "path": "/models/samples/model_29fa4c1d-039.glb.glb", + "path": "/models/samples/model_29fa4c1d-039.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -65074,7 +65076,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2ae6b5f8-6b7", - "path": "/models/samples/model_2ae6b5f8-6b7.glb.glb", + "path": "/models/samples/model_2ae6b5f8-6b7.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -65142,7 +65144,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2aeae9e8-f67", - "path": "/models/samples/model_2aeae9e8-f67.glb.glb", + "path": "/models/samples/model_2aeae9e8-f67.glb", "category": "prop", "subCategory": "panel", "keywords": { @@ -65209,7 +65211,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2b5e3201-eab", - "path": "/models/samples/model_2b5e3201-eab.glb.glb", + "path": "/models/samples/model_2b5e3201-eab.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -65281,7 +65283,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2c0c2b1e-d04", - "path": "/models/samples/model_2c0c2b1e-d04.glb.glb", + "path": "/models/samples/model_2c0c2b1e-d04.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -65348,7 +65350,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2c397d2d-152", - "path": "/models/samples/model_2c397d2d-152.glb.glb", + "path": "/models/samples/model_2c397d2d-152.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -65417,7 +65419,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2ecdf33c-7b9", - "path": "/models/samples/model_2ecdf33c-7b9.glb.glb", + "path": "/models/samples/model_2ecdf33c-7b9.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -65485,7 +65487,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2ef9fc2d-996", - "path": "/models/samples/model_2ef9fc2d-996.glb.glb", + "path": "/models/samples/model_2ef9fc2d-996.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -65546,7 +65548,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_2f2c50e9-b59", - "path": "/models/samples/model_2f2c50e9-b59.glb.glb", + "path": "/models/samples/model_2f2c50e9-b59.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -65613,7 +65615,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_302cec82-856", - "path": "/models/samples/model_302cec82-856.glb.glb", + "path": "/models/samples/model_302cec82-856.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -65685,7 +65687,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_30b31ef3-3a0", - "path": "/models/samples/model_30b31ef3-3a0.glb.glb", + "path": "/models/samples/model_30b31ef3-3a0.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -65754,7 +65756,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_320a18cb-ccd", - "path": "/models/samples/model_320a18cb-ccd.glb.glb", + "path": "/models/samples/model_320a18cb-ccd.glb", "category": "prop", "subCategory": "lamp", "keywords": { @@ -65827,7 +65829,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_325e7a86-3c4", - "path": "/models/samples/model_325e7a86-3c4.glb.glb", + "path": "/models/samples/model_325e7a86-3c4.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -65895,7 +65897,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_32f1b9ae-541", - "path": "/models/samples/model_32f1b9ae-541.glb.glb", + "path": "/models/samples/model_32f1b9ae-541.glb", "category": "prop", "subCategory": "decorative", "keywords": { @@ -65963,7 +65965,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_33f2ac81-de9", - "path": "/models/samples/model_33f2ac81-de9.glb.glb", + "path": "/models/samples/model_33f2ac81-de9.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -66028,7 +66030,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_348d1f0e-886", - "path": "/models/samples/model_348d1f0e-886.glb.glb", + "path": "/models/samples/model_348d1f0e-886.glb", "category": "structure", "subCategory": "statue", "keywords": { @@ -66097,7 +66099,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_3545490d-1fe", - "path": "/models/samples/model_3545490d-1fe.glb.glb", + "path": "/models/samples/model_3545490d-1fe.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -66159,7 +66161,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_3570068e-f79", - "path": "/models/samples/model_3570068e-f79.glb.glb", + "path": "/models/samples/model_3570068e-f79.glb", "category": "structure", "subCategory": "ruin", "keywords": { @@ -66236,7 +66238,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_35c76694-fce", - "path": "/models/samples/model_35c76694-fce.glb.glb", + "path": "/models/samples/model_35c76694-fce.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -66311,7 +66313,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_36d09061-0ee", - "path": "/models/samples/model_36d09061-0ee.glb.glb", + "path": "/models/samples/model_36d09061-0ee.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -66379,7 +66381,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_370372ec-666", - "path": "/models/samples/model_370372ec-666.glb.glb", + "path": "/models/samples/model_370372ec-666.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -66446,7 +66448,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_37ad51fd-fb2", - "path": "/models/samples/model_37ad51fd-fb2.glb.glb", + "path": "/models/samples/model_37ad51fd-fb2.glb", "category": "prop", "subCategory": "brick", "keywords": { @@ -66513,7 +66515,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_3841d2a9-390", - "path": "/models/samples/model_3841d2a9-390.glb.glb", + "path": "/models/samples/model_3841d2a9-390.glb", "category": "prop", "subCategory": "metal piece", "keywords": { @@ -66574,7 +66576,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_38b81926-4a1", - "path": "/models/samples/model_38b81926-4a1.glb.glb", + "path": "/models/samples/model_38b81926-4a1.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -66649,7 +66651,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_38ee5af8-ae1", - "path": "/models/samples/model_38ee5af8-ae1.glb.glb", + "path": "/models/samples/model_38ee5af8-ae1.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -66716,7 +66718,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_398b2073-135", - "path": "/models/samples/model_398b2073-135.glb.glb", + "path": "/models/samples/model_398b2073-135.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -66786,7 +66788,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_3a9e1495-750", - "path": "/models/samples/model_3a9e1495-750.glb.glb", + "path": "/models/samples/model_3a9e1495-750.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -66847,7 +66849,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_3e16d14d-c88", - "path": "/models/samples/model_3e16d14d-c88.glb.glb", + "path": "/models/samples/model_3e16d14d-c88.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -66911,7 +66913,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_3ecf8f2f-db6", - "path": "/models/samples/model_3ecf8f2f-db6.glb.glb", + "path": "/models/samples/model_3ecf8f2f-db6.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -66982,7 +66984,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_404c439e-090", - "path": "/models/samples/model_404c439e-090.glb.glb", + "path": "/models/samples/model_404c439e-090.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -67050,7 +67052,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_419f7c52-ba1", - "path": "/models/samples/model_419f7c52-ba1.glb.glb", + "path": "/models/samples/model_419f7c52-ba1.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -67117,7 +67119,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_41a64de3-78b", - "path": "/models/samples/model_41a64de3-78b.glb.glb", + "path": "/models/samples/model_41a64de3-78b.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -67181,7 +67183,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_41d4e503-3fe", - "path": "/models/samples/model_41d4e503-3fe.glb.glb", + "path": "/models/samples/model_41d4e503-3fe.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -67250,7 +67252,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_41fd6727-c30", - "path": "/models/samples/model_41fd6727-c30.glb.glb", + "path": "/models/samples/model_41fd6727-c30.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -67315,7 +67317,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_420be263-a32", - "path": "/models/samples/model_420be263-a32.glb.glb", + "path": "/models/samples/model_420be263-a32.glb", "category": "prop", "subCategory": "block", "keywords": { @@ -67381,7 +67383,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_427fe638-14f", - "path": "/models/samples/model_427fe638-14f.glb.glb", + "path": "/models/samples/model_427fe638-14f.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -67447,7 +67449,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_441d42f0-070", - "path": "/models/samples/model_441d42f0-070.glb.glb", + "path": "/models/samples/model_441d42f0-070.glb", "category": "prop", "subCategory": "lamp", "keywords": { @@ -67518,7 +67520,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_45ae3e7a-bf6", - "path": "/models/samples/model_45ae3e7a-bf6.glb.glb", + "path": "/models/samples/model_45ae3e7a-bf6.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -67589,7 +67591,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_45b034f5-5ab", - "path": "/models/samples/model_45b034f5-5ab.glb.glb", + "path": "/models/samples/model_45b034f5-5ab.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -67656,7 +67658,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_45ca27ef-75c", - "path": "/models/samples/model_45ca27ef-75c.glb.glb", + "path": "/models/samples/model_45ca27ef-75c.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -67720,7 +67722,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_45db5c7e-bd0", - "path": "/models/samples/model_45db5c7e-bd0.glb.glb", + "path": "/models/samples/model_45db5c7e-bd0.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -67787,7 +67789,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_4647952e-a6b", - "path": "/models/samples/model_4647952e-a6b.glb.glb", + "path": "/models/samples/model_4647952e-a6b.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -67851,7 +67853,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_46ae6877-d71", - "path": "/models/samples/model_46ae6877-d71.glb.glb", + "path": "/models/samples/model_46ae6877-d71.glb", "category": "structure", "subCategory": "structure", "keywords": { @@ -67920,7 +67922,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_480f46bd-06c", - "path": "/models/samples/model_480f46bd-06c.glb.glb", + "path": "/models/samples/model_480f46bd-06c.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -67986,7 +67988,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_481f5d0e-822", - "path": "/models/samples/model_481f5d0e-822.glb.glb", + "path": "/models/samples/model_481f5d0e-822.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -68050,7 +68052,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_48697b19-ebd", - "path": "/models/samples/model_48697b19-ebd.glb.glb", + "path": "/models/samples/model_48697b19-ebd.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -68122,7 +68124,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_48ab7121-570", - "path": "/models/samples/model_48ab7121-570.glb.glb", + "path": "/models/samples/model_48ab7121-570.glb", "category": "prop", "subCategory": "block", "keywords": { @@ -68188,7 +68190,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_48ca45ab-5bb", - "path": "/models/samples/model_48ca45ab-5bb.glb.glb", + "path": "/models/samples/model_48ca45ab-5bb.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -68252,7 +68254,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_493cf84c-05a", - "path": "/models/samples/model_493cf84c-05a.glb.glb", + "path": "/models/samples/model_493cf84c-05a.glb", "category": "prop", "subCategory": "pedestal", "keywords": { @@ -68316,7 +68318,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_4b7a5f2d-508", - "path": "/models/samples/model_4b7a5f2d-508.glb.glb", + "path": "/models/samples/model_4b7a5f2d-508.glb", "category": "prop", "subCategory": "brick", "keywords": { @@ -68382,7 +68384,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_4b9310cf-647", - "path": "/models/samples/model_4b9310cf-647.glb.glb", + "path": "/models/samples/model_4b9310cf-647.glb", "category": "prop", "subCategory": "miniature", "keywords": { @@ -68448,7 +68450,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_4c0a3ec9-bd7", - "path": "/models/samples/model_4c0a3ec9-bd7.glb.glb", + "path": "/models/samples/model_4c0a3ec9-bd7.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -68520,7 +68522,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_4d36d320-19f", - "path": "/models/samples/model_4d36d320-19f.glb.glb", + "path": "/models/samples/model_4d36d320-19f.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -68584,7 +68586,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_4dda6fc2-86e", - "path": "/models/samples/model_4dda6fc2-86e.glb.glb", + "path": "/models/samples/model_4dda6fc2-86e.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -68650,7 +68652,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_4f2640bd-7ca", - "path": "/models/samples/model_4f2640bd-7ca.glb.glb", + "path": "/models/samples/model_4f2640bd-7ca.glb", "category": "structure", "subCategory": "statue", "keywords": { @@ -68721,7 +68723,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_500544e5-54b", - "path": "/models/samples/model_500544e5-54b.glb.glb", + "path": "/models/samples/model_500544e5-54b.glb", "category": "structure", "subCategory": "pillar base", "keywords": { @@ -68796,7 +68798,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_50087d98-87e", - "path": "/models/samples/model_50087d98-87e.glb.glb", + "path": "/models/samples/model_50087d98-87e.glb", "category": "prop", "subCategory": "dice", "keywords": { @@ -68863,7 +68865,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_51d0846a-cf4", - "path": "/models/samples/model_51d0846a-cf4.glb.glb", + "path": "/models/samples/model_51d0846a-cf4.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -68928,7 +68930,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_51eca8bd-2b8", - "path": "/models/samples/model_51eca8bd-2b8.glb.glb", + "path": "/models/samples/model_51eca8bd-2b8.glb", "category": "prop", "subCategory": "dice", "keywords": { @@ -68992,7 +68994,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_51ef0b07-49c", - "path": "/models/samples/model_51ef0b07-49c.glb.glb", + "path": "/models/samples/model_51ef0b07-49c.glb", "category": "prop", "subCategory": "dust", "keywords": { @@ -69055,7 +69057,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_521a8d84-6bb", - "path": "/models/samples/model_521a8d84-6bb.glb.glb", + "path": "/models/samples/model_521a8d84-6bb.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -69119,7 +69121,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_529019ee-4bd", - "path": "/models/samples/model_529019ee-4bd.glb.glb", + "path": "/models/samples/model_529019ee-4bd.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -69179,7 +69181,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_52e6920e-889", - "path": "/models/samples/model_52e6920e-889.glb.glb", + "path": "/models/samples/model_52e6920e-889.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -69245,7 +69247,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_532b4eca-396", - "path": "/models/samples/model_532b4eca-396.glb.glb", + "path": "/models/samples/model_532b4eca-396.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -69311,7 +69313,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_53fa9973-756", - "path": "/models/samples/model_53fa9973-756.glb.glb", + "path": "/models/samples/model_53fa9973-756.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -69379,7 +69381,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_544c368c-c07", - "path": "/models/samples/model_544c368c-c07.glb.glb", + "path": "/models/samples/model_544c368c-c07.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -69446,7 +69448,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_54db6bb7-87e", - "path": "/models/samples/model_54db6bb7-87e.glb.glb", + "path": "/models/samples/model_54db6bb7-87e.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -69514,7 +69516,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_55c86f23-52a", - "path": "/models/samples/model_55c86f23-52a.glb.glb", + "path": "/models/samples/model_55c86f23-52a.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -69581,7 +69583,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_55ef63a7-ffd", - "path": "/models/samples/model_55ef63a7-ffd.glb.glb", + "path": "/models/samples/model_55ef63a7-ffd.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -69644,7 +69646,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_562d9272-9e4", - "path": "/models/samples/model_562d9272-9e4.glb.glb", + "path": "/models/samples/model_562d9272-9e4.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -69711,7 +69713,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_562f668f-4e6", - "path": "/models/samples/model_562f668f-4e6.glb.glb", + "path": "/models/samples/model_562f668f-4e6.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -69781,7 +69783,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_567d607b-d3e", - "path": "/models/samples/model_567d607b-d3e.glb.glb", + "path": "/models/samples/model_567d607b-d3e.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -69844,7 +69846,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5693c3cb-ead", - "path": "/models/samples/model_5693c3cb-ead.glb.glb", + "path": "/models/samples/model_5693c3cb-ead.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -69905,7 +69907,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_575e6920-829", - "path": "/models/samples/model_575e6920-829.glb.glb", + "path": "/models/samples/model_575e6920-829.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -69973,7 +69975,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5760d90d-3aa", - "path": "/models/samples/model_5760d90d-3aa.glb.glb", + "path": "/models/samples/model_5760d90d-3aa.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -70038,7 +70040,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_58cead34-52d", - "path": "/models/samples/model_58cead34-52d.glb.glb", + "path": "/models/samples/model_58cead34-52d.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -70111,7 +70113,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_58d94a98-dfa", - "path": "/models/samples/model_58d94a98-dfa.glb.glb", + "path": "/models/samples/model_58d94a98-dfa.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -70178,7 +70180,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_58e02f30-f04", - "path": "/models/samples/model_58e02f30-f04.glb.glb", + "path": "/models/samples/model_58e02f30-f04.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -70244,7 +70246,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5943824c-1ee", - "path": "/models/samples/model_5943824c-1ee.glb.glb", + "path": "/models/samples/model_5943824c-1ee.glb", "category": "furniture", "subCategory": "chair", "keywords": { @@ -70313,7 +70315,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_59ac0621-3d2", - "path": "/models/samples/model_59ac0621-3d2.glb.glb", + "path": "/models/samples/model_59ac0621-3d2.glb", "category": "prop", "subCategory": "stand", "keywords": { @@ -70376,7 +70378,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_59fbfef8-3f6", - "path": "/models/samples/model_59fbfef8-3f6.glb.glb", + "path": "/models/samples/model_59fbfef8-3f6.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -70442,7 +70444,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5aeb6ff7-56c", - "path": "/models/samples/model_5aeb6ff7-56c.glb.glb", + "path": "/models/samples/model_5aeb6ff7-56c.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -70509,7 +70511,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5af663c3-c23", - "path": "/models/samples/model_5af663c3-c23.glb.glb", + "path": "/models/samples/model_5af663c3-c23.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -70577,7 +70579,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5b05b336-1f5", - "path": "/models/samples/model_5b05b336-1f5.glb.glb", + "path": "/models/samples/model_5b05b336-1f5.glb", "category": "prop", "subCategory": "block", "keywords": { @@ -70643,7 +70645,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5ba62572-f9e", - "path": "/models/samples/model_5ba62572-f9e.glb.glb", + "path": "/models/samples/model_5ba62572-f9e.glb", "category": "prop", "subCategory": "metal piece", "keywords": { @@ -70706,7 +70708,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5c3443c6-f86", - "path": "/models/samples/model_5c3443c6-f86.glb.glb", + "path": "/models/samples/model_5c3443c6-f86.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -70773,7 +70775,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5d1b5201-0ed", - "path": "/models/samples/model_5d1b5201-0ed.glb.glb", + "path": "/models/samples/model_5d1b5201-0ed.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -70841,7 +70843,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5d9f92bb-a69", - "path": "/models/samples/model_5d9f92bb-a69.glb.glb", + "path": "/models/samples/model_5d9f92bb-a69.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -70908,7 +70910,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_5f3495ea-981", - "path": "/models/samples/model_5f3495ea-981.glb.glb", + "path": "/models/samples/model_5f3495ea-981.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -70976,7 +70978,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6108e984-64b", - "path": "/models/samples/model_6108e984-64b.glb.glb", + "path": "/models/samples/model_6108e984-64b.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -71045,7 +71047,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_61d1f35c-9f4", - "path": "/models/samples/model_61d1f35c-9f4.glb.glb", + "path": "/models/samples/model_61d1f35c-9f4.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -71112,7 +71114,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_62eee14a-030", - "path": "/models/samples/model_62eee14a-030.glb.glb", + "path": "/models/samples/model_62eee14a-030.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -71179,7 +71181,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_630dda53-95a", - "path": "/models/samples/model_630dda53-95a.glb.glb", + "path": "/models/samples/model_630dda53-95a.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -71246,7 +71248,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_63789130-f81", - "path": "/models/samples/model_63789130-f81.glb.glb", + "path": "/models/samples/model_63789130-f81.glb", "category": "prop", "subCategory": "metal", "keywords": { @@ -71310,7 +71312,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_63e35ef7-f63", - "path": "/models/samples/model_63e35ef7-f63.glb.glb", + "path": "/models/samples/model_63e35ef7-f63.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -71380,7 +71382,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_64466ea0-e65", - "path": "/models/samples/model_64466ea0-e65.glb.glb", + "path": "/models/samples/model_64466ea0-e65.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -71447,7 +71449,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_64604dc8-e3f", - "path": "/models/samples/model_64604dc8-e3f.glb.glb", + "path": "/models/samples/model_64604dc8-e3f.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -71518,7 +71520,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_64809de3-3c5", - "path": "/models/samples/model_64809de3-3c5.glb.glb", + "path": "/models/samples/model_64809de3-3c5.glb", "category": "prop", "subCategory": "standing lamp", "keywords": { @@ -71586,7 +71588,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_64f8b4c5-3ec", - "path": "/models/samples/model_64f8b4c5-3ec.glb.glb", + "path": "/models/samples/model_64f8b4c5-3ec.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -71657,7 +71659,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_677a7ddb-579", - "path": "/models/samples/model_677a7ddb-579.glb.glb", + "path": "/models/samples/model_677a7ddb-579.glb", "category": "prop", "subCategory": "bucket", "keywords": { @@ -71723,7 +71725,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_67a706e9-022", - "path": "/models/samples/model_67a706e9-022.glb.glb", + "path": "/models/samples/model_67a706e9-022.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -71790,7 +71792,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_67d2ec8e-f3c", - "path": "/models/samples/model_67d2ec8e-f3c.glb.glb", + "path": "/models/samples/model_67d2ec8e-f3c.glb", "category": "prop", "subCategory": "gold", "keywords": { @@ -71854,7 +71856,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_67f85603-aec", - "path": "/models/samples/model_67f85603-aec.glb.glb", + "path": "/models/samples/model_67f85603-aec.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -71920,7 +71922,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6821c653-ab1", - "path": "/models/samples/model_6821c653-ab1.glb.glb", + "path": "/models/samples/model_6821c653-ab1.glb", "category": "prop", "subCategory": "dust", "keywords": { @@ -71983,7 +71985,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_68ad57d3-a67", - "path": "/models/samples/model_68ad57d3-a67.glb.glb", + "path": "/models/samples/model_68ad57d3-a67.glb", "category": "prop", "subCategory": "metal piece", "keywords": { @@ -72046,7 +72048,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_68d94dec-206", - "path": "/models/samples/model_68d94dec-206.glb.glb", + "path": "/models/samples/model_68d94dec-206.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -72118,7 +72120,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_68fe46d0-625", - "path": "/models/samples/model_68fe46d0-625.glb.glb", + "path": "/models/samples/model_68fe46d0-625.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -72187,7 +72189,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6a1191df-f09", - "path": "/models/samples/model_6a1191df-f09.glb.glb", + "path": "/models/samples/model_6a1191df-f09.glb", "category": "structure", "subCategory": "pillar base", "keywords": { @@ -72261,7 +72263,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6abeb22e-6d0", - "path": "/models/samples/model_6abeb22e-6d0.glb.glb", + "path": "/models/samples/model_6abeb22e-6d0.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -72325,7 +72327,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6b2bc098-b3e", - "path": "/models/samples/model_6b2bc098-b3e.glb.glb", + "path": "/models/samples/model_6b2bc098-b3e.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -72398,7 +72400,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6b40811b-09b", - "path": "/models/samples/model_6b40811b-09b.glb.glb", + "path": "/models/samples/model_6b40811b-09b.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -72467,7 +72469,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6b50b5e9-75b", - "path": "/models/samples/model_6b50b5e9-75b.glb.glb", + "path": "/models/samples/model_6b50b5e9-75b.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -72536,7 +72538,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6b8cf82f-0a5", - "path": "/models/samples/model_6b8cf82f-0a5.glb.glb", + "path": "/models/samples/model_6b8cf82f-0a5.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -72598,7 +72600,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6b91b218-950", - "path": "/models/samples/model_6b91b218-950.glb.glb", + "path": "/models/samples/model_6b91b218-950.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -72666,7 +72668,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6bb02cd7-319", - "path": "/models/samples/model_6bb02cd7-319.glb.glb", + "path": "/models/samples/model_6bb02cd7-319.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -72733,7 +72735,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6dc05ca3-8da", - "path": "/models/samples/model_6dc05ca3-8da.glb.glb", + "path": "/models/samples/model_6dc05ca3-8da.glb", "category": "prop", "subCategory": "stone", "keywords": { @@ -72801,7 +72803,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6df40d45-207", - "path": "/models/samples/model_6df40d45-207.glb.glb", + "path": "/models/samples/model_6df40d45-207.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -72875,7 +72877,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6e5aa4cf-0ac", - "path": "/models/samples/model_6e5aa4cf-0ac.glb.glb", + "path": "/models/samples/model_6e5aa4cf-0ac.glb", "category": "furniture", "subCategory": "bench", "keywords": { @@ -72946,7 +72948,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_6f2d8423-3d1", - "path": "/models/samples/model_6f2d8423-3d1.glb.glb", + "path": "/models/samples/model_6f2d8423-3d1.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -73014,7 +73016,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7089e8e3-3f8", - "path": "/models/samples/model_7089e8e3-3f8.glb.glb", + "path": "/models/samples/model_7089e8e3-3f8.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -73081,7 +73083,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_71a81dcc-ca5", - "path": "/models/samples/model_71a81dcc-ca5.glb.glb", + "path": "/models/samples/model_71a81dcc-ca5.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -73147,7 +73149,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_71ea87eb-93e", - "path": "/models/samples/model_71ea87eb-93e.glb.glb", + "path": "/models/samples/model_71ea87eb-93e.glb", "category": "prop", "subCategory": "crystal", "keywords": { @@ -73218,7 +73220,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7239c899-1a2", - "path": "/models/samples/model_7239c899-1a2.glb.glb", + "path": "/models/samples/model_7239c899-1a2.glb", "category": "prop", "subCategory": "key", "keywords": { @@ -73289,7 +73291,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_72503a6f-b90", - "path": "/models/samples/model_72503a6f-b90.glb.glb", + "path": "/models/samples/model_72503a6f-b90.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -73355,7 +73357,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7259b4e9-5c7", - "path": "/models/samples/model_7259b4e9-5c7.glb.glb", + "path": "/models/samples/model_7259b4e9-5c7.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -73421,7 +73423,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_738688be-9d4", - "path": "/models/samples/model_738688be-9d4.glb.glb", + "path": "/models/samples/model_738688be-9d4.glb", "category": "furniture", "subCategory": "bench", "keywords": { @@ -73493,7 +73495,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_739d2b34-f1b", - "path": "/models/samples/model_739d2b34-f1b.glb.glb", + "path": "/models/samples/model_739d2b34-f1b.glb", "category": "structure", "subCategory": "statue", "keywords": { @@ -73564,7 +73566,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_73aac0fd-d6c", - "path": "/models/samples/model_73aac0fd-d6c.glb.glb", + "path": "/models/samples/model_73aac0fd-d6c.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -73631,7 +73633,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_74a1ed00-855", - "path": "/models/samples/model_74a1ed00-855.glb.glb", + "path": "/models/samples/model_74a1ed00-855.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -73698,7 +73700,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_751f546a-c93", - "path": "/models/samples/model_751f546a-c93.glb.glb", + "path": "/models/samples/model_751f546a-c93.glb", "category": "prop", "subCategory": "machine part", "keywords": { @@ -73762,7 +73764,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_752de33a-ec8", - "path": "/models/samples/model_752de33a-ec8.glb.glb", + "path": "/models/samples/model_752de33a-ec8.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -73834,7 +73836,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_756a01ff-5ff", - "path": "/models/samples/model_756a01ff-5ff.glb.glb", + "path": "/models/samples/model_756a01ff-5ff.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -73908,7 +73910,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_75986358-ed1", - "path": "/models/samples/model_75986358-ed1.glb.glb", + "path": "/models/samples/model_75986358-ed1.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -73980,7 +73982,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_75cb3c5e-85a", - "path": "/models/samples/model_75cb3c5e-85a.glb.glb", + "path": "/models/samples/model_75cb3c5e-85a.glb", "category": "structure", "subCategory": "statue", "keywords": { @@ -74050,7 +74052,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_76d45824-c8e", - "path": "/models/samples/model_76d45824-c8e.glb.glb", + "path": "/models/samples/model_76d45824-c8e.glb", "category": "prop", "subCategory": "brick", "keywords": { @@ -74114,7 +74116,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_76daba86-cb1", - "path": "/models/samples/model_76daba86-cb1.glb.glb", + "path": "/models/samples/model_76daba86-cb1.glb", "category": "prop", "subCategory": "pen", "keywords": { @@ -74181,7 +74183,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_770b16ec-204", - "path": "/models/samples/model_770b16ec-204.glb.glb", + "path": "/models/samples/model_770b16ec-204.glb", "category": "structure", "subCategory": "statue", "keywords": { @@ -74254,7 +74256,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7718b337-b9a", - "path": "/models/samples/model_7718b337-b9a.glb.glb", + "path": "/models/samples/model_7718b337-b9a.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -74323,7 +74325,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_77861599-217", - "path": "/models/samples/model_77861599-217.glb.glb", + "path": "/models/samples/model_77861599-217.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -74390,7 +74392,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7838f3a5-a74", - "path": "/models/samples/model_7838f3a5-a74.glb.glb", + "path": "/models/samples/model_7838f3a5-a74.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -74454,7 +74456,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_798dca47-818", - "path": "/models/samples/model_798dca47-818.glb.glb", + "path": "/models/samples/model_798dca47-818.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -74518,7 +74520,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7a73c075-097", - "path": "/models/samples/model_7a73c075-097.glb.glb", + "path": "/models/samples/model_7a73c075-097.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -74585,7 +74587,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7ab90fb6-577", - "path": "/models/samples/model_7ab90fb6-577.glb.glb", + "path": "/models/samples/model_7ab90fb6-577.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -74651,7 +74653,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7c224626-641", - "path": "/models/samples/model_7c224626-641.glb.glb", + "path": "/models/samples/model_7c224626-641.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -74717,7 +74719,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7c844771-055", - "path": "/models/samples/model_7c844771-055.glb.glb", + "path": "/models/samples/model_7c844771-055.glb", "category": "prop", "subCategory": "dice", "keywords": { @@ -74783,7 +74785,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7cb88781-50b", - "path": "/models/samples/model_7cb88781-50b.glb.glb", + "path": "/models/samples/model_7cb88781-50b.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -74847,7 +74849,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7cd3e5d3-73b", - "path": "/models/samples/model_7cd3e5d3-73b.glb.glb", + "path": "/models/samples/model_7cd3e5d3-73b.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -74911,7 +74913,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7dd071e2-42f", - "path": "/models/samples/model_7dd071e2-42f.glb.glb", + "path": "/models/samples/model_7dd071e2-42f.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -74982,7 +74984,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7e270461-09f", - "path": "/models/samples/model_7e270461-09f.glb.glb", + "path": "/models/samples/model_7e270461-09f.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -75048,7 +75050,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7e2f9384-a39", - "path": "/models/samples/model_7e2f9384-a39.glb.glb", + "path": "/models/samples/model_7e2f9384-a39.glb", "category": "prop", "subCategory": "miniature", "keywords": { @@ -75115,7 +75117,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7f99d291-4b4", - "path": "/models/samples/model_7f99d291-4b4.glb.glb", + "path": "/models/samples/model_7f99d291-4b4.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -75184,7 +75186,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_7fcf1b2e-9cc", - "path": "/models/samples/model_7fcf1b2e-9cc.glb.glb", + "path": "/models/samples/model_7fcf1b2e-9cc.glb", "category": "prop", "subCategory": "industrial", "keywords": { @@ -75248,7 +75250,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_81502a49-a76", - "path": "/models/samples/model_81502a49-a76.glb.glb", + "path": "/models/samples/model_81502a49-a76.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -75314,7 +75316,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_818c6699-100", - "path": "/models/samples/model_818c6699-100.glb.glb", + "path": "/models/samples/model_818c6699-100.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -75384,7 +75386,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_820c5597-d6c", - "path": "/models/samples/model_820c5597-d6c.glb.glb", + "path": "/models/samples/model_820c5597-d6c.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -75449,7 +75451,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_821d7ef7-46d", - "path": "/models/samples/model_821d7ef7-46d.glb.glb", + "path": "/models/samples/model_821d7ef7-46d.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -75516,7 +75518,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_826ab42e-146", - "path": "/models/samples/model_826ab42e-146.glb.glb", + "path": "/models/samples/model_826ab42e-146.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -75588,7 +75590,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_83590595-f7b", - "path": "/models/samples/model_83590595-f7b.glb.glb", + "path": "/models/samples/model_83590595-f7b.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -75654,7 +75656,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_848e2c98-2a9", - "path": "/models/samples/model_848e2c98-2a9.glb.glb", + "path": "/models/samples/model_848e2c98-2a9.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -75723,7 +75725,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8506b1a5-5b5", - "path": "/models/samples/model_8506b1a5-5b5.glb.glb", + "path": "/models/samples/model_8506b1a5-5b5.glb", "category": "prop", "subCategory": "particle", "keywords": { @@ -75788,7 +75790,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_85903796-a0b", - "path": "/models/samples/model_85903796-a0b.glb.glb", + "path": "/models/samples/model_85903796-a0b.glb", "category": "prop", "subCategory": "model", "keywords": { @@ -75856,7 +75858,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_861b6368-f12", - "path": "/models/samples/model_861b6368-f12.glb.glb", + "path": "/models/samples/model_861b6368-f12.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -75928,7 +75930,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_865cf0ba-2c1", - "path": "/models/samples/model_865cf0ba-2c1.glb.glb", + "path": "/models/samples/model_865cf0ba-2c1.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -75995,7 +75997,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_872cead7-b2a", - "path": "/models/samples/model_872cead7-b2a.glb.glb", + "path": "/models/samples/model_872cead7-b2a.glb", "category": "prop", "subCategory": "dagger", "keywords": { @@ -76069,7 +76071,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8758563e-6d0", - "path": "/models/samples/model_8758563e-6d0.glb.glb", + "path": "/models/samples/model_8758563e-6d0.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -76137,7 +76139,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8953543a-9fc", - "path": "/models/samples/model_8953543a-9fc.glb.glb", + "path": "/models/samples/model_8953543a-9fc.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -76204,7 +76206,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8a5bb11a-f24", - "path": "/models/samples/model_8a5bb11a-f24.glb.glb", + "path": "/models/samples/model_8a5bb11a-f24.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -76270,7 +76272,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8a6839a3-0d9", - "path": "/models/samples/model_8a6839a3-0d9.glb.glb", + "path": "/models/samples/model_8a6839a3-0d9.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -76337,7 +76339,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8a79e0ff-4b9", - "path": "/models/samples/model_8a79e0ff-4b9.glb.glb", + "path": "/models/samples/model_8a79e0ff-4b9.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -76401,7 +76403,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8a7bdbf3-34a", - "path": "/models/samples/model_8a7bdbf3-34a.glb.glb", + "path": "/models/samples/model_8a7bdbf3-34a.glb", "category": "structure", "subCategory": "ruin", "keywords": { @@ -76469,7 +76471,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8a94fad3-036", - "path": "/models/samples/model_8a94fad3-036.glb.glb", + "path": "/models/samples/model_8a94fad3-036.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -76536,7 +76538,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8ad79961-226", - "path": "/models/samples/model_8ad79961-226.glb.glb", + "path": "/models/samples/model_8ad79961-226.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -76611,7 +76613,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8b212824-f1f", - "path": "/models/samples/model_8b212824-f1f.glb.glb", + "path": "/models/samples/model_8b212824-f1f.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -76676,7 +76678,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8c134eec-a13", - "path": "/models/samples/model_8c134eec-a13.glb.glb", + "path": "/models/samples/model_8c134eec-a13.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -76750,7 +76752,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8c4fe65f-7aa", - "path": "/models/samples/model_8c4fe65f-7aa.glb.glb", + "path": "/models/samples/model_8c4fe65f-7aa.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -76822,7 +76824,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8ce8a9cf-1fd", - "path": "/models/samples/model_8ce8a9cf-1fd.glb.glb", + "path": "/models/samples/model_8ce8a9cf-1fd.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -76890,7 +76892,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8d0593a2-c73", - "path": "/models/samples/model_8d0593a2-c73.glb.glb", + "path": "/models/samples/model_8d0593a2-c73.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -76957,7 +76959,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8d7b8b87-2c7", - "path": "/models/samples/model_8d7b8b87-2c7.glb.glb", + "path": "/models/samples/model_8d7b8b87-2c7.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -77030,7 +77032,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8db63546-ac4", - "path": "/models/samples/model_8db63546-ac4.glb.glb", + "path": "/models/samples/model_8db63546-ac4.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -77098,7 +77100,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8e1d8db1-b39", - "path": "/models/samples/model_8e1d8db1-b39.glb.glb", + "path": "/models/samples/model_8e1d8db1-b39.glb", "category": "prop", "subCategory": "metal piece", "keywords": { @@ -77161,7 +77163,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8e455f37-a76", - "path": "/models/samples/model_8e455f37-a76.glb.glb", + "path": "/models/samples/model_8e455f37-a76.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -77228,7 +77230,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8e6f6c4e-dba", - "path": "/models/samples/model_8e6f6c4e-dba.glb.glb", + "path": "/models/samples/model_8e6f6c4e-dba.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -77301,7 +77303,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8ecff261-650", - "path": "/models/samples/model_8ecff261-650.glb.glb", + "path": "/models/samples/model_8ecff261-650.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -77370,7 +77372,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_8f0c1d57-f7f", - "path": "/models/samples/model_8f0c1d57-f7f.glb.glb", + "path": "/models/samples/model_8f0c1d57-f7f.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -77437,7 +77439,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_903416f8-79e", - "path": "/models/samples/model_903416f8-79e.glb.glb", + "path": "/models/samples/model_903416f8-79e.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -77501,7 +77503,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_90c7020d-1f1", - "path": "/models/samples/model_90c7020d-1f1.glb.glb", + "path": "/models/samples/model_90c7020d-1f1.glb", "category": "prop", "subCategory": "flag", "keywords": { @@ -77574,7 +77576,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_914760d4-256", - "path": "/models/samples/model_914760d4-256.glb.glb", + "path": "/models/samples/model_914760d4-256.glb", "category": "prop", "subCategory": "clock", "keywords": { @@ -77641,7 +77643,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_91b0924d-be0", - "path": "/models/samples/model_91b0924d-be0.glb.glb", + "path": "/models/samples/model_91b0924d-be0.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -77713,7 +77715,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_931f2e35-0ab", - "path": "/models/samples/model_931f2e35-0ab.glb.glb", + "path": "/models/samples/model_931f2e35-0ab.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -77776,7 +77778,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_93217842-b43", - "path": "/models/samples/model_93217842-b43.glb.glb", + "path": "/models/samples/model_93217842-b43.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -77843,7 +77845,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_939669db-d08", - "path": "/models/samples/model_939669db-d08.glb.glb", + "path": "/models/samples/model_939669db-d08.glb", "category": "prop", "subCategory": "dagger", "keywords": { @@ -77918,7 +77920,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_94641a3c-4a7", - "path": "/models/samples/model_94641a3c-4a7.glb.glb", + "path": "/models/samples/model_94641a3c-4a7.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -77991,7 +77993,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_951a4c89-b28", - "path": "/models/samples/model_951a4c89-b28.glb.glb", + "path": "/models/samples/model_951a4c89-b28.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -78058,7 +78060,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9591d704-da7", - "path": "/models/samples/model_9591d704-da7.glb.glb", + "path": "/models/samples/model_9591d704-da7.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -78124,7 +78126,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9708f413-455", - "path": "/models/samples/model_9708f413-455.glb.glb", + "path": "/models/samples/model_9708f413-455.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -78188,7 +78190,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_973795c2-755", - "path": "/models/samples/model_973795c2-755.glb.glb", + "path": "/models/samples/model_973795c2-755.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -78253,7 +78255,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_977734fe-afc", - "path": "/models/samples/model_977734fe-afc.glb.glb", + "path": "/models/samples/model_977734fe-afc.glb", "category": "prop", "subCategory": "dust", "keywords": { @@ -78316,7 +78318,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_97902287-589", - "path": "/models/samples/model_97902287-589.glb.glb", + "path": "/models/samples/model_97902287-589.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -78382,7 +78384,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_97a9c001-9a3", - "path": "/models/samples/model_97a9c001-9a3.glb.glb", + "path": "/models/samples/model_97a9c001-9a3.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -78448,7 +78450,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9943a455-106", - "path": "/models/samples/model_9943a455-106.glb.glb", + "path": "/models/samples/model_9943a455-106.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -78514,7 +78516,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9b4ff57d-c87", - "path": "/models/samples/model_9b4ff57d-c87.glb.glb", + "path": "/models/samples/model_9b4ff57d-c87.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -78584,7 +78586,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9b5085b5-5e1", - "path": "/models/samples/model_9b5085b5-5e1.glb.glb", + "path": "/models/samples/model_9b5085b5-5e1.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -78657,7 +78659,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9ba49c74-2ed", - "path": "/models/samples/model_9ba49c74-2ed.glb.glb", + "path": "/models/samples/model_9ba49c74-2ed.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -78720,7 +78722,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9d4bd2ba-06e", - "path": "/models/samples/model_9d4bd2ba-06e.glb.glb", + "path": "/models/samples/model_9d4bd2ba-06e.glb", "category": "prop", "subCategory": "tablet", "keywords": { @@ -78791,7 +78793,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9db0be83-2cc", - "path": "/models/samples/model_9db0be83-2cc.glb.glb", + "path": "/models/samples/model_9db0be83-2cc.glb", "category": "prop", "subCategory": "stick", "keywords": { @@ -78860,7 +78862,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9dc11d33-f01", - "path": "/models/samples/model_9dc11d33-f01.glb.glb", + "path": "/models/samples/model_9dc11d33-f01.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -78925,7 +78927,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9dd20045-aee", - "path": "/models/samples/model_9dd20045-aee.glb.glb", + "path": "/models/samples/model_9dd20045-aee.glb", "category": "prop", "subCategory": "wood piece", "keywords": { @@ -78991,7 +78993,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9dd918cd-f18", - "path": "/models/samples/model_9dd918cd-f18.glb.glb", + "path": "/models/samples/model_9dd918cd-f18.glb", "category": "prop", "subCategory": "mirror", "keywords": { @@ -79060,7 +79062,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9df4ab5f-2ec", - "path": "/models/samples/model_9df4ab5f-2ec.glb.glb", + "path": "/models/samples/model_9df4ab5f-2ec.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -79127,7 +79129,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9dfa6387-4f1", - "path": "/models/samples/model_9dfa6387-4f1.glb.glb", + "path": "/models/samples/model_9dfa6387-4f1.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -79195,7 +79197,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_9f14603b-9ef", - "path": "/models/samples/model_9f14603b-9ef.glb.glb", + "path": "/models/samples/model_9f14603b-9ef.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -79268,7 +79270,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a0745221-f6c", - "path": "/models/samples/model_a0745221-f6c.glb.glb", + "path": "/models/samples/model_a0745221-f6c.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -79339,7 +79341,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a077bff9-d75", - "path": "/models/samples/model_a077bff9-d75.glb.glb", + "path": "/models/samples/model_a077bff9-d75.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -79405,7 +79407,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a07969d3-6d3", - "path": "/models/samples/model_a07969d3-6d3.glb.glb", + "path": "/models/samples/model_a07969d3-6d3.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -79470,7 +79472,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a15ed272-471", - "path": "/models/samples/model_a15ed272-471.glb.glb", + "path": "/models/samples/model_a15ed272-471.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -79537,7 +79539,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a1898185-ed1", - "path": "/models/samples/model_a1898185-ed1.glb.glb", + "path": "/models/samples/model_a1898185-ed1.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -79605,7 +79607,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a1e26ab5-fb7", - "path": "/models/samples/model_a1e26ab5-fb7.glb.glb", + "path": "/models/samples/model_a1e26ab5-fb7.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -79680,7 +79682,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a3276f54-2ef", - "path": "/models/samples/model_a3276f54-2ef.glb.glb", + "path": "/models/samples/model_a3276f54-2ef.glb", "category": "prop", "subCategory": "decorative", "keywords": { @@ -79745,7 +79747,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a3db3629-211", - "path": "/models/samples/model_a3db3629-211.glb.glb", + "path": "/models/samples/model_a3db3629-211.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -79807,7 +79809,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a5b149eb-fce", - "path": "/models/samples/model_a5b149eb-fce.glb.glb", + "path": "/models/samples/model_a5b149eb-fce.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -79874,7 +79876,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a60c6ac0-396", - "path": "/models/samples/model_a60c6ac0-396.glb.glb", + "path": "/models/samples/model_a60c6ac0-396.glb", "category": "prop", "subCategory": "unknown", "keywords": { @@ -79937,7 +79939,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a6205e59-c16", - "path": "/models/samples/model_a6205e59-c16.glb.glb", + "path": "/models/samples/model_a6205e59-c16.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -80001,7 +80003,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a62a0689-a8f", - "path": "/models/samples/model_a62a0689-a8f.glb.glb", + "path": "/models/samples/model_a62a0689-a8f.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -80066,7 +80068,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a6702109-209", - "path": "/models/samples/model_a6702109-209.glb.glb", + "path": "/models/samples/model_a6702109-209.glb", "category": "structure", "subCategory": "structure", "keywords": { @@ -80140,7 +80142,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a6ca5e4b-5b3", - "path": "/models/samples/model_a6ca5e4b-5b3.glb.glb", + "path": "/models/samples/model_a6ca5e4b-5b3.glb", "category": "prop", "subCategory": "component", "keywords": { @@ -80201,7 +80203,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a7900c23-d17", - "path": "/models/samples/model_a7900c23-d17.glb.glb", + "path": "/models/samples/model_a7900c23-d17.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -80269,7 +80271,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a8fee894-aa2", - "path": "/models/samples/model_a8fee894-aa2.glb.glb", + "path": "/models/samples/model_a8fee894-aa2.glb", "category": "prop", "subCategory": "brick", "keywords": { @@ -80332,7 +80334,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a9100a65-b11", - "path": "/models/samples/model_a9100a65-b11.glb.glb", + "path": "/models/samples/model_a9100a65-b11.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -80402,7 +80404,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a9203561-e20", - "path": "/models/samples/model_a9203561-e20.glb.glb", + "path": "/models/samples/model_a9203561-e20.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -80472,7 +80474,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a93a2cec-b8e", - "path": "/models/samples/model_a93a2cec-b8e.glb.glb", + "path": "/models/samples/model_a93a2cec-b8e.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -80536,7 +80538,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_a956e9db-07a", - "path": "/models/samples/model_a956e9db-07a.glb.glb", + "path": "/models/samples/model_a956e9db-07a.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -80609,7 +80611,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_aa014453-648", - "path": "/models/samples/model_aa014453-648.glb.glb", + "path": "/models/samples/model_aa014453-648.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -80677,7 +80679,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_aa498820-63c", - "path": "/models/samples/model_aa498820-63c.glb.glb", + "path": "/models/samples/model_aa498820-63c.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -80744,7 +80746,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_aa82fb6a-126", - "path": "/models/samples/model_aa82fb6a-126.glb.glb", + "path": "/models/samples/model_aa82fb6a-126.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -80812,7 +80814,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ac1d0a8c-109", - "path": "/models/samples/model_ac1d0a8c-109.glb.glb", + "path": "/models/samples/model_ac1d0a8c-109.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -80876,7 +80878,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ad0c1afa-f8f", - "path": "/models/samples/model_ad0c1afa-f8f.glb.glb", + "path": "/models/samples/model_ad0c1afa-f8f.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -80952,7 +80954,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ad92253f-0a8", - "path": "/models/samples/model_ad92253f-0a8.glb.glb", + "path": "/models/samples/model_ad92253f-0a8.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -81016,7 +81018,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_aed9682f-9f8", - "path": "/models/samples/model_aed9682f-9f8.glb.glb", + "path": "/models/samples/model_aed9682f-9f8.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -81080,7 +81082,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_aef47f78-1ea", - "path": "/models/samples/model_aef47f78-1ea.glb.glb", + "path": "/models/samples/model_aef47f78-1ea.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -81147,7 +81149,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_afc28cad-022", - "path": "/models/samples/model_afc28cad-022.glb.glb", + "path": "/models/samples/model_afc28cad-022.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -81220,7 +81222,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_afd3a410-a7e", - "path": "/models/samples/model_afd3a410-a7e.glb.glb", + "path": "/models/samples/model_afd3a410-a7e.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -81284,7 +81286,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_afd71af1-468", - "path": "/models/samples/model_afd71af1-468.glb.glb", + "path": "/models/samples/model_afd71af1-468.glb", "category": "prop", "subCategory": "metal part", "keywords": { @@ -81346,7 +81348,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_afebe841-ac8", - "path": "/models/samples/model_afebe841-ac8.glb.glb", + "path": "/models/samples/model_afebe841-ac8.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -81415,7 +81417,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b0208a3a-9cf", - "path": "/models/samples/model_b0208a3a-9cf.glb.glb", + "path": "/models/samples/model_b0208a3a-9cf.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -81484,7 +81486,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b0d1266f-9f9", - "path": "/models/samples/model_b0d1266f-9f9.glb.glb", + "path": "/models/samples/model_b0d1266f-9f9.glb", "category": "prop", "subCategory": "metal scrap", "keywords": { @@ -81547,7 +81549,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b0f9eebc-639", - "path": "/models/samples/model_b0f9eebc-639.glb.glb", + "path": "/models/samples/model_b0f9eebc-639.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -81622,7 +81624,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b1bc954e-134", - "path": "/models/samples/model_b1bc954e-134.glb.glb", + "path": "/models/samples/model_b1bc954e-134.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -81693,7 +81695,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b2246c95-22f", - "path": "/models/samples/model_b2246c95-22f.glb.glb", + "path": "/models/samples/model_b2246c95-22f.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -81759,7 +81761,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b33125ef-435", - "path": "/models/samples/model_b33125ef-435.glb.glb", + "path": "/models/samples/model_b33125ef-435.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -81826,7 +81828,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b38493ef-56f", - "path": "/models/samples/model_b38493ef-56f.glb.glb", + "path": "/models/samples/model_b38493ef-56f.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -81901,7 +81903,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b3f56e38-960", - "path": "/models/samples/model_b3f56e38-960.glb.glb", + "path": "/models/samples/model_b3f56e38-960.glb", "category": "prop", "subCategory": "lamp", "keywords": { @@ -81970,7 +81972,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b4546734-fe6", - "path": "/models/samples/model_b4546734-fe6.glb.glb", + "path": "/models/samples/model_b4546734-fe6.glb", "category": "structure", "subCategory": "structure", "keywords": { @@ -82036,7 +82038,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b4669237-a52", - "path": "/models/samples/model_b4669237-a52.glb.glb", + "path": "/models/samples/model_b4669237-a52.glb", "category": "prop", "subCategory": "lamp", "keywords": { @@ -82108,7 +82110,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b4c079c9-676", - "path": "/models/samples/model_b4c079c9-676.glb.glb", + "path": "/models/samples/model_b4c079c9-676.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -82177,7 +82179,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b530c034-560", - "path": "/models/samples/model_b530c034-560.glb.glb", + "path": "/models/samples/model_b530c034-560.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -82243,7 +82245,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b5f2d03a-8cd", - "path": "/models/samples/model_b5f2d03a-8cd.glb.glb", + "path": "/models/samples/model_b5f2d03a-8cd.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -82311,7 +82313,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b69687b6-927", - "path": "/models/samples/model_b69687b6-927.glb.glb", + "path": "/models/samples/model_b69687b6-927.glb", "category": "prop", "subCategory": "wrench", "keywords": { @@ -82373,7 +82375,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b712b2b3-1ac", - "path": "/models/samples/model_b712b2b3-1ac.glb.glb", + "path": "/models/samples/model_b712b2b3-1ac.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -82439,7 +82441,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b73e0b81-e5b", - "path": "/models/samples/model_b73e0b81-e5b.glb.glb", + "path": "/models/samples/model_b73e0b81-e5b.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -82504,7 +82506,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b7b52f23-c6f", - "path": "/models/samples/model_b7b52f23-c6f.glb.glb", + "path": "/models/samples/model_b7b52f23-c6f.glb", "category": "prop", "subCategory": "stone tablet", "keywords": { @@ -82573,7 +82575,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b7bf1970-2b8", - "path": "/models/samples/model_b7bf1970-2b8.glb.glb", + "path": "/models/samples/model_b7bf1970-2b8.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -82638,7 +82640,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b839d245-7a3", - "path": "/models/samples/model_b839d245-7a3.glb.glb", + "path": "/models/samples/model_b839d245-7a3.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -82706,7 +82708,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b841b2db-d53", - "path": "/models/samples/model_b841b2db-d53.glb.glb", + "path": "/models/samples/model_b841b2db-d53.glb", "category": "prop", "subCategory": "plate", "keywords": { @@ -82769,7 +82771,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b85eecc5-b0c", - "path": "/models/samples/model_b85eecc5-b0c.glb.glb", + "path": "/models/samples/model_b85eecc5-b0c.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -82835,7 +82837,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_b9908061-8b4", - "path": "/models/samples/model_b9908061-8b4.glb.glb", + "path": "/models/samples/model_b9908061-8b4.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -82902,7 +82904,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ba094f95-fd6", - "path": "/models/samples/model_ba094f95-fd6.glb.glb", + "path": "/models/samples/model_ba094f95-fd6.glb", "category": "prop", "subCategory": "panel", "keywords": { @@ -82969,7 +82971,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bb1e31be-8e3", - "path": "/models/samples/model_bb1e31be-8e3.glb.glb", + "path": "/models/samples/model_bb1e31be-8e3.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -83036,7 +83038,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bb650703-a20", - "path": "/models/samples/model_bb650703-a20.glb.glb", + "path": "/models/samples/model_bb650703-a20.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -83107,7 +83109,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bb8eccc2-1a0", - "path": "/models/samples/model_bb8eccc2-1a0.glb.glb", + "path": "/models/samples/model_bb8eccc2-1a0.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -83176,7 +83178,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bbba8700-cc8", - "path": "/models/samples/model_bbba8700-cc8.glb.glb", + "path": "/models/samples/model_bbba8700-cc8.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -83249,7 +83251,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bbfd9a36-4ae", - "path": "/models/samples/model_bbfd9a36-4ae.glb.glb", + "path": "/models/samples/model_bbfd9a36-4ae.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -83316,7 +83318,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bc5c053b-6b8", - "path": "/models/samples/model_bc5c053b-6b8.glb.glb", + "path": "/models/samples/model_bc5c053b-6b8.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -83383,7 +83385,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bc8407a3-861", - "path": "/models/samples/model_bc8407a3-861.glb.glb", + "path": "/models/samples/model_bc8407a3-861.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -83449,7 +83451,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bc8aee66-020", - "path": "/models/samples/model_bc8aee66-020.glb.glb", + "path": "/models/samples/model_bc8aee66-020.glb", "category": "prop", "subCategory": "jar", "keywords": { @@ -83520,7 +83522,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_bcaf6746-de1", - "path": "/models/samples/model_bcaf6746-de1.glb.glb", + "path": "/models/samples/model_bcaf6746-de1.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -83588,7 +83590,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_be4bda23-1c7", - "path": "/models/samples/model_be4bda23-1c7.glb.glb", + "path": "/models/samples/model_be4bda23-1c7.glb", "category": "prop", "subCategory": "object", "keywords": { @@ -83654,7 +83656,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_be8924d5-c65", - "path": "/models/samples/model_be8924d5-c65.glb.glb", + "path": "/models/samples/model_be8924d5-c65.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -83724,7 +83726,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c1d60b5f-82a", - "path": "/models/samples/model_c1d60b5f-82a.glb.glb", + "path": "/models/samples/model_c1d60b5f-82a.glb", "category": "structure", "subCategory": "structure", "keywords": { @@ -83792,7 +83794,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c29e1da8-b8b", - "path": "/models/samples/model_c29e1da8-b8b.glb.glb", + "path": "/models/samples/model_c29e1da8-b8b.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -83857,7 +83859,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c3987744-ec5", - "path": "/models/samples/model_c3987744-ec5.glb.glb", + "path": "/models/samples/model_c3987744-ec5.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -83918,7 +83920,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c423ab76-e31", - "path": "/models/samples/model_c423ab76-e31.glb.glb", + "path": "/models/samples/model_c423ab76-e31.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -83992,7 +83994,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c444ba25-97e", - "path": "/models/samples/model_c444ba25-97e.glb.glb", + "path": "/models/samples/model_c444ba25-97e.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -84053,7 +84055,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c4c118aa-bfa", - "path": "/models/samples/model_c4c118aa-bfa.glb.glb", + "path": "/models/samples/model_c4c118aa-bfa.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -84121,7 +84123,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c4e4b8aa-a8d", - "path": "/models/samples/model_c4e4b8aa-a8d.glb.glb", + "path": "/models/samples/model_c4e4b8aa-a8d.glb", "category": "prop", "subCategory": "bead", "keywords": { @@ -84184,7 +84186,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c5ebde8e-590", - "path": "/models/samples/model_c5ebde8e-590.glb.glb", + "path": "/models/samples/model_c5ebde8e-590.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -84249,7 +84251,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c6475352-ab0", - "path": "/models/samples/model_c6475352-ab0.glb.glb", + "path": "/models/samples/model_c6475352-ab0.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -84314,7 +84316,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c7399ba0-576", - "path": "/models/samples/model_c7399ba0-576.glb.glb", + "path": "/models/samples/model_c7399ba0-576.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -84380,7 +84382,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c7aaa41e-d88", - "path": "/models/samples/model_c7aaa41e-d88.glb.glb", + "path": "/models/samples/model_c7aaa41e-d88.glb", "category": "prop", "subCategory": "abstract", "keywords": { @@ -84448,7 +84450,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c8f214ff-5da", - "path": "/models/samples/model_c8f214ff-5da.glb.glb", + "path": "/models/samples/model_c8f214ff-5da.glb", "category": "prop", "subCategory": "miniature", "keywords": { @@ -84514,7 +84516,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_c97d0688-9d7", - "path": "/models/samples/model_c97d0688-9d7.glb.glb", + "path": "/models/samples/model_c97d0688-9d7.glb", "category": "prop", "subCategory": "floor lamp", "keywords": { @@ -84580,7 +84582,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cbaf22e0-241", - "path": "/models/samples/model_cbaf22e0-241.glb.glb", + "path": "/models/samples/model_cbaf22e0-241.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -84648,7 +84650,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cbb1f63e-909", - "path": "/models/samples/model_cbb1f63e-909.glb.glb", + "path": "/models/samples/model_cbb1f63e-909.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -84717,7 +84719,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cbd86306-ab3", - "path": "/models/samples/model_cbd86306-ab3.glb.glb", + "path": "/models/samples/model_cbd86306-ab3.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -84783,7 +84785,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cc83da49-17e", - "path": "/models/samples/model_cc83da49-17e.glb.glb", + "path": "/models/samples/model_cc83da49-17e.glb", "category": "prop", "subCategory": "metal part", "keywords": { @@ -84845,7 +84847,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ccae3ba8-412", - "path": "/models/samples/model_ccae3ba8-412.glb.glb", + "path": "/models/samples/model_ccae3ba8-412.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -84915,7 +84917,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ccd0e302-53c", - "path": "/models/samples/model_ccd0e302-53c.glb.glb", + "path": "/models/samples/model_ccd0e302-53c.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -84981,7 +84983,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cdaf8464-0df", - "path": "/models/samples/model_cdaf8464-0df.glb.glb", + "path": "/models/samples/model_cdaf8464-0df.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -85049,7 +85051,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cdc0585e-37d", - "path": "/models/samples/model_cdc0585e-37d.glb.glb", + "path": "/models/samples/model_cdc0585e-37d.glb", "category": "prop", "subCategory": "orb", "keywords": { @@ -85116,7 +85118,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cdf6df67-fe9", - "path": "/models/samples/model_cdf6df67-fe9.glb.glb", + "path": "/models/samples/model_cdf6df67-fe9.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -85189,7 +85191,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cdfeb29b-b5e", - "path": "/models/samples/model_cdfeb29b-b5e.glb.glb", + "path": "/models/samples/model_cdfeb29b-b5e.glb", "category": "prop", "subCategory": "metal part", "keywords": { @@ -85252,7 +85254,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ce74927a-c3f", - "path": "/models/samples/model_ce74927a-c3f.glb.glb", + "path": "/models/samples/model_ce74927a-c3f.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -85326,7 +85328,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cec6713a-e4c", - "path": "/models/samples/model_cec6713a-e4c.glb.glb", + "path": "/models/samples/model_cec6713a-e4c.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -85399,7 +85401,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_cff80aa0-ab6", - "path": "/models/samples/model_cff80aa0-ab6.glb.glb", + "path": "/models/samples/model_cff80aa0-ab6.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -85470,7 +85472,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d027a82e-1cd", - "path": "/models/samples/model_d027a82e-1cd.glb.glb", + "path": "/models/samples/model_d027a82e-1cd.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -85537,7 +85539,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d0a14d35-a9a", - "path": "/models/samples/model_d0a14d35-a9a.glb.glb", + "path": "/models/samples/model_d0a14d35-a9a.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -85603,7 +85605,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d0c029e9-5ff", - "path": "/models/samples/model_d0c029e9-5ff.glb.glb", + "path": "/models/samples/model_d0c029e9-5ff.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -85676,7 +85678,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d0d4c8ef-251", - "path": "/models/samples/model_d0d4c8ef-251.glb.glb", + "path": "/models/samples/model_d0d4c8ef-251.glb", "category": "prop", "subCategory": "plank", "keywords": { @@ -85741,7 +85743,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d1140ab6-6f7", - "path": "/models/samples/model_d1140ab6-6f7.glb.glb", + "path": "/models/samples/model_d1140ab6-6f7.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -85805,7 +85807,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d1b6ae44-8ac", - "path": "/models/samples/model_d1b6ae44-8ac.glb.glb", + "path": "/models/samples/model_d1b6ae44-8ac.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -85874,7 +85876,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d2279ea8-74c", - "path": "/models/samples/model_d2279ea8-74c.glb.glb", + "path": "/models/samples/model_d2279ea8-74c.glb", "category": "prop", "subCategory": "bucket", "keywords": { @@ -85941,7 +85943,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d2620506-13d", - "path": "/models/samples/model_d2620506-13d.glb.glb", + "path": "/models/samples/model_d2620506-13d.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -86009,7 +86011,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d2c30b63-4f4", - "path": "/models/samples/model_d2c30b63-4f4.glb.glb", + "path": "/models/samples/model_d2c30b63-4f4.glb", "category": "structure", "subCategory": "structure", "keywords": { @@ -86073,7 +86075,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d2faa1df-81a", - "path": "/models/samples/model_d2faa1df-81a.glb.glb", + "path": "/models/samples/model_d2faa1df-81a.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -86139,7 +86141,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d32d552a-117", - "path": "/models/samples/model_d32d552a-117.glb.glb", + "path": "/models/samples/model_d32d552a-117.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -86205,7 +86207,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d4b3b231-38a", - "path": "/models/samples/model_d4b3b231-38a.glb.glb", + "path": "/models/samples/model_d4b3b231-38a.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -86272,7 +86274,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d4d9d53a-f4c", - "path": "/models/samples/model_d4d9d53a-f4c.glb.glb", + "path": "/models/samples/model_d4d9d53a-f4c.glb", "category": "prop", "subCategory": "sphere", "keywords": { @@ -86341,7 +86343,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d4e325c0-ca2", - "path": "/models/samples/model_d4e325c0-ca2.glb.glb", + "path": "/models/samples/model_d4e325c0-ca2.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -86408,7 +86410,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d4eca46e-5c1", - "path": "/models/samples/model_d4eca46e-5c1.glb.glb", + "path": "/models/samples/model_d4eca46e-5c1.glb", "category": "prop", "subCategory": "dust", "keywords": { @@ -86471,7 +86473,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d4fe17dd-4fd", - "path": "/models/samples/model_d4fe17dd-4fd.glb.glb", + "path": "/models/samples/model_d4fe17dd-4fd.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -86535,7 +86537,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d693b39d-538", - "path": "/models/samples/model_d693b39d-538.glb.glb", + "path": "/models/samples/model_d693b39d-538.glb", "category": "prop", "subCategory": "metal piece", "keywords": { @@ -86600,7 +86602,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d7386ebe-3c0", - "path": "/models/samples/model_d7386ebe-3c0.glb.glb", + "path": "/models/samples/model_d7386ebe-3c0.glb", "category": "prop", "subCategory": "pedestal", "keywords": { @@ -86663,7 +86665,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d8e2ebd4-49c", - "path": "/models/samples/model_d8e2ebd4-49c.glb.glb", + "path": "/models/samples/model_d8e2ebd4-49c.glb", "category": "furniture", "subCategory": "bench", "keywords": { @@ -86732,7 +86734,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d93158e9-522", - "path": "/models/samples/model_d93158e9-522.glb.glb", + "path": "/models/samples/model_d93158e9-522.glb", "category": "prop", "subCategory": "plate", "keywords": { @@ -86797,7 +86799,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d97bc02e-d9c", - "path": "/models/samples/model_d97bc02e-d9c.glb.glb", + "path": "/models/samples/model_d97bc02e-d9c.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -86864,7 +86866,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_d9c612bd-31f", - "path": "/models/samples/model_d9c612bd-31f.glb.glb", + "path": "/models/samples/model_d9c612bd-31f.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -86932,7 +86934,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_da163e91-586", - "path": "/models/samples/model_da163e91-586.glb.glb", + "path": "/models/samples/model_da163e91-586.glb", "category": "prop", "subCategory": "candle", "keywords": { @@ -87005,7 +87007,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_db13e457-827", - "path": "/models/samples/model_db13e457-827.glb.glb", + "path": "/models/samples/model_db13e457-827.glb", "category": "structure", "subCategory": "statue", "keywords": { @@ -87075,7 +87077,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_db2321c0-133", - "path": "/models/samples/model_db2321c0-133.glb.glb", + "path": "/models/samples/model_db2321c0-133.glb", "category": "prop", "subCategory": "laboratory equipment", "keywords": { @@ -87136,7 +87138,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_dbd88b8a-f2a", - "path": "/models/samples/model_dbd88b8a-f2a.glb.glb", + "path": "/models/samples/model_dbd88b8a-f2a.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -87207,7 +87209,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_dd0823c9-59c", - "path": "/models/samples/model_dd0823c9-59c.glb.glb", + "path": "/models/samples/model_dd0823c9-59c.glb", "category": "prop", "subCategory": "dagger", "keywords": { @@ -87280,7 +87282,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_dd087f76-5df", - "path": "/models/samples/model_dd087f76-5df.glb.glb", + "path": "/models/samples/model_dd087f76-5df.glb", "category": "prop", "subCategory": "dust", "keywords": { @@ -87343,7 +87345,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_dd55e3c2-fe1", - "path": "/models/samples/model_dd55e3c2-fe1.glb.glb", + "path": "/models/samples/model_dd55e3c2-fe1.glb", "category": "furniture", "subCategory": "bench", "keywords": { @@ -87415,7 +87417,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_dda9071f-016", - "path": "/models/samples/model_dda9071f-016.glb.glb", + "path": "/models/samples/model_dda9071f-016.glb", "category": "prop", "subCategory": "metal part", "keywords": { @@ -87478,7 +87480,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ddc5d7d2-e7b", - "path": "/models/samples/model_ddc5d7d2-e7b.glb.glb", + "path": "/models/samples/model_ddc5d7d2-e7b.glb", "category": "furniture", "subCategory": "shelf", "keywords": { @@ -87545,7 +87547,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ddebaec6-dbf", - "path": "/models/samples/model_ddebaec6-dbf.glb.glb", + "path": "/models/samples/model_ddebaec6-dbf.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -87621,7 +87623,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_df977e78-571", - "path": "/models/samples/model_df977e78-571.glb.glb", + "path": "/models/samples/model_df977e78-571.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -87686,7 +87688,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_dfd35b24-20d", - "path": "/models/samples/model_dfd35b24-20d.glb.glb", + "path": "/models/samples/model_dfd35b24-20d.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -87751,7 +87753,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e0f28728-2e2", - "path": "/models/samples/model_e0f28728-2e2.glb.glb", + "path": "/models/samples/model_e0f28728-2e2.glb", "category": "prop", "subCategory": "unknown", "keywords": { @@ -87817,7 +87819,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e1cc5d2b-8ce", - "path": "/models/samples/model_e1cc5d2b-8ce.glb.glb", + "path": "/models/samples/model_e1cc5d2b-8ce.glb", "category": "structure", "subCategory": "statue", "keywords": { @@ -87889,7 +87891,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e1e29c43-5eb", - "path": "/models/samples/model_e1e29c43-5eb.glb.glb", + "path": "/models/samples/model_e1e29c43-5eb.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -87958,7 +87960,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e2920a39-48a", - "path": "/models/samples/model_e2920a39-48a.glb.glb", + "path": "/models/samples/model_e2920a39-48a.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -88028,7 +88030,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e32c88b3-0be", - "path": "/models/samples/model_e32c88b3-0be.glb.glb", + "path": "/models/samples/model_e32c88b3-0be.glb", "category": "prop", "subCategory": "small object", "keywords": { @@ -88096,7 +88098,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e34a018d-ca9", - "path": "/models/samples/model_e34a018d-ca9.glb.glb", + "path": "/models/samples/model_e34a018d-ca9.glb", "category": "prop", "subCategory": "stand", "keywords": { @@ -88159,7 +88161,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e3f82d01-354", - "path": "/models/samples/model_e3f82d01-354.glb.glb", + "path": "/models/samples/model_e3f82d01-354.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -88234,7 +88236,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e4bcb83c-18c", - "path": "/models/samples/model_e4bcb83c-18c.glb.glb", + "path": "/models/samples/model_e4bcb83c-18c.glb", "category": "prop", "subCategory": "block", "keywords": { @@ -88300,7 +88302,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e62c71bd-144", - "path": "/models/samples/model_e62c71bd-144.glb.glb", + "path": "/models/samples/model_e62c71bd-144.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -88366,7 +88368,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e6575280-200", - "path": "/models/samples/model_e6575280-200.glb.glb", + "path": "/models/samples/model_e6575280-200.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -88439,7 +88441,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e69bcc63-c34", - "path": "/models/samples/model_e69bcc63-c34.glb.glb", + "path": "/models/samples/model_e69bcc63-c34.glb", "category": "prop", "subCategory": "slab", "keywords": { @@ -88508,7 +88510,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_e80d9f2b-7ff", - "path": "/models/samples/model_e80d9f2b-7ff.glb.glb", + "path": "/models/samples/model_e80d9f2b-7ff.glb", "category": "prop", "subCategory": "container", "keywords": { @@ -88572,7 +88574,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_eb131f00-2c3", - "path": "/models/samples/model_eb131f00-2c3.glb.glb", + "path": "/models/samples/model_eb131f00-2c3.glb", "category": "prop", "subCategory": "pillar", "keywords": { @@ -88644,7 +88646,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_eb2d7523-082", - "path": "/models/samples/model_eb2d7523-082.glb.glb", + "path": "/models/samples/model_eb2d7523-082.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -88716,7 +88718,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_eb4d6a13-ca4", - "path": "/models/samples/model_eb4d6a13-ca4.glb.glb", + "path": "/models/samples/model_eb4d6a13-ca4.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -88788,7 +88790,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ec6b9814-05c", - "path": "/models/samples/model_ec6b9814-05c.glb.glb", + "path": "/models/samples/model_ec6b9814-05c.glb", "category": "structure", "subCategory": "structure", "keywords": { @@ -88854,7 +88856,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ed1058c9-b9e", - "path": "/models/samples/model_ed1058c9-b9e.glb.glb", + "path": "/models/samples/model_ed1058c9-b9e.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -88919,7 +88921,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ed25e36b-caf", - "path": "/models/samples/model_ed25e36b-caf.glb.glb", + "path": "/models/samples/model_ed25e36b-caf.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -88987,7 +88989,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ed9ee2e6-4fe", - "path": "/models/samples/model_ed9ee2e6-4fe.glb.glb", + "path": "/models/samples/model_ed9ee2e6-4fe.glb", "category": "structure", "subCategory": "pillar base", "keywords": { @@ -89058,7 +89060,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_eef315f3-a71", - "path": "/models/samples/model_eef315f3-a71.glb.glb", + "path": "/models/samples/model_eef315f3-a71.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -89127,7 +89129,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ef0825e6-7ab", - "path": "/models/samples/model_ef0825e6-7ab.glb.glb", + "path": "/models/samples/model_ef0825e6-7ab.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -89198,7 +89200,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_ef611be9-f95", - "path": "/models/samples/model_ef611be9-f95.glb.glb", + "path": "/models/samples/model_ef611be9-f95.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -89264,7 +89266,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_efa74db6-33a", - "path": "/models/samples/model_efa74db6-33a.glb.glb", + "path": "/models/samples/model_efa74db6-33a.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -89331,7 +89333,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f0a300e0-68b", - "path": "/models/samples/model_f0a300e0-68b.glb.glb", + "path": "/models/samples/model_f0a300e0-68b.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -89398,7 +89400,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f0d5d20c-288", - "path": "/models/samples/model_f0d5d20c-288.glb.glb", + "path": "/models/samples/model_f0d5d20c-288.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -89461,7 +89463,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f0e31075-8a3", - "path": "/models/samples/model_f0e31075-8a3.glb.glb", + "path": "/models/samples/model_f0e31075-8a3.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -89525,7 +89527,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f1431dfd-6e9", - "path": "/models/samples/model_f1431dfd-6e9.glb.glb", + "path": "/models/samples/model_f1431dfd-6e9.glb", "category": "prop", "subCategory": "tablet", "keywords": { @@ -89596,7 +89598,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f1994e0f-2c0", - "path": "/models/samples/model_f1994e0f-2c0.glb.glb", + "path": "/models/samples/model_f1994e0f-2c0.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -89664,7 +89666,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f1e7458b-159", - "path": "/models/samples/model_f1e7458b-159.glb.glb", + "path": "/models/samples/model_f1e7458b-159.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -89731,7 +89733,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f1ed6ad1-d54", - "path": "/models/samples/model_f1ed6ad1-d54.glb.glb", + "path": "/models/samples/model_f1ed6ad1-d54.glb", "category": "structure", "subCategory": "pillar", "keywords": { @@ -89802,7 +89804,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f33bbd68-b9a", - "path": "/models/samples/model_f33bbd68-b9a.glb.glb", + "path": "/models/samples/model_f33bbd68-b9a.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -89872,7 +89874,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f397d7ef-2a6", - "path": "/models/samples/model_f397d7ef-2a6.glb.glb", + "path": "/models/samples/model_f397d7ef-2a6.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -89939,7 +89941,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f4b87b96-c56", - "path": "/models/samples/model_f4b87b96-c56.glb.glb", + "path": "/models/samples/model_f4b87b96-c56.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -90007,7 +90009,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f4eaac36-c6f", - "path": "/models/samples/model_f4eaac36-c6f.glb.glb", + "path": "/models/samples/model_f4eaac36-c6f.glb", "category": "prop", "subCategory": "sculpture", "keywords": { @@ -90075,7 +90077,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f6e3b0dc-e5a", - "path": "/models/samples/model_f6e3b0dc-e5a.glb.glb", + "path": "/models/samples/model_f6e3b0dc-e5a.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -90142,7 +90144,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_f73f5d73-788", - "path": "/models/samples/model_f73f5d73-788.glb.glb", + "path": "/models/samples/model_f73f5d73-788.glb", "category": "prop", "subCategory": "bucket", "keywords": { @@ -90209,7 +90211,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fa9c4d3f-544", - "path": "/models/samples/model_fa9c4d3f-544.glb.glb", + "path": "/models/samples/model_fa9c4d3f-544.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -90275,7 +90277,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fb3f9cc1-f65", - "path": "/models/samples/model_fb3f9cc1-f65.glb.glb", + "path": "/models/samples/model_fb3f9cc1-f65.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -90346,7 +90348,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fb611993-efd", - "path": "/models/samples/model_fb611993-efd.glb.glb", + "path": "/models/samples/model_fb611993-efd.glb", "category": "prop", "subCategory": "candle holder", "keywords": { @@ -90418,7 +90420,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fbac7d31-dde", - "path": "/models/samples/model_fbac7d31-dde.glb.glb", + "path": "/models/samples/model_fbac7d31-dde.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -90487,7 +90489,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fc2e6a27-c5c", - "path": "/models/samples/model_fc2e6a27-c5c.glb.glb", + "path": "/models/samples/model_fc2e6a27-c5c.glb", "category": "prop", "subCategory": "statue", "keywords": { @@ -90559,7 +90561,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fca00348-326", - "path": "/models/samples/model_fca00348-326.glb.glb", + "path": "/models/samples/model_fca00348-326.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -90633,7 +90635,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fdb3fabc-376", - "path": "/models/samples/model_fdb3fabc-376.glb.glb", + "path": "/models/samples/model_fdb3fabc-376.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -90698,7 +90700,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fdcfac2d-15c", - "path": "/models/samples/model_fdcfac2d-15c.glb.glb", + "path": "/models/samples/model_fdcfac2d-15c.glb", "category": "prop", "subCategory": "bottle", "keywords": { @@ -90766,7 +90768,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fddc5f43-8b9", - "path": "/models/samples/model_fddc5f43-8b9.glb.glb", + "path": "/models/samples/model_fddc5f43-8b9.glb", "category": "nature", "subCategory": "rock", "keywords": { @@ -90837,7 +90839,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fdfb7519-95e", - "path": "/models/samples/model_fdfb7519-95e.glb.glb", + "path": "/models/samples/model_fdfb7519-95e.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -90903,7 +90905,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_model_fe8040e1-71a", - "path": "/models/samples/model_fe8040e1-71a.glb.glb", + "path": "/models/samples/model_fe8040e1-71a.glb", "category": "prop", "subCategory": "box", "keywords": { @@ -90970,7 +90972,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_module_600", - "path": "/models/samples/module_600.glb.glb", + "path": "/models/samples/module_600.glb", "category": "structure", "subCategory": "wall", "keywords": { @@ -91041,17 +91043,19 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_moltenDagger", - "path": "/models/samples/moltenDagger.glb.glb", + "path": "/models/samples/moltenDagger.glb", "category": "prop", "subCategory": "dagger", "keywords": { "ko": [ + "단검", "불", "화염", "판타지", "던전", - "방패", - "횃불" + "무기", + "작은", + "소품" ], "en": [ "molten", @@ -91067,6 +91071,9 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ "fiery", "dangerous", "powerful", + "small", + "item", + "prop", "dungeon", "fantasy battlefield", "volcano", @@ -91112,7 +91119,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_MosquitoInAmber", - "path": "/models/samples/MosquitoInAmber.glb.glb", + "path": "/models/samples/MosquitoInAmber.glb", "category": "prop", "subCategory": "preserved specimen", "keywords": { @@ -91179,7 +91186,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_MultiUVTest", - "path": "/models/samples/MultiUVTest.glb.glb", + "path": "/models/samples/MultiUVTest.glb", "category": "prop", "subCategory": "test", "keywords": { @@ -91238,7 +91245,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_obelisk1", - "path": "/models/samples/obelisk1.glb.glb", + "path": "/models/samples/obelisk1.glb", "category": "structure", "subCategory": "obelisk", "keywords": { @@ -91308,7 +91315,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_obelisk2", - "path": "/models/samples/obelisk2.glb.glb", + "path": "/models/samples/obelisk2.glb", "category": "structure", "subCategory": "obelisk", "keywords": { @@ -91377,7 +91384,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_octopus_customRig", - "path": "/models/samples/octopus_customRig.glb.glb", + "path": "/models/samples/octopus_customRig.glb", "category": "character", "subCategory": "octopus", "keywords": { @@ -91440,7 +91447,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_OrientationTest", - "path": "/models/samples/OrientationTest.glb.glb", + "path": "/models/samples/OrientationTest.glb", "category": "prop", "subCategory": "test", "keywords": { @@ -91498,7 +91505,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_PBR_Spheres", - "path": "/models/samples/PBR_Spheres.glb.glb", + "path": "/models/samples/PBR_Spheres.glb", "category": "prop", "subCategory": "spheres", "keywords": { @@ -91561,7 +91568,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_pill", - "path": "/models/samples/pill.glb.glb", + "path": "/models/samples/pill.glb", "category": "prop", "subCategory": "pill", "keywords": { @@ -91624,7 +91631,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_pinkEnergyBall", - "path": "/models/samples/pinkEnergyBall.glb.glb", + "path": "/models/samples/pinkEnergyBall.glb", "category": "prop", "subCategory": "energy", "keywords": { @@ -91685,7 +91692,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_pirateFort", - "path": "/models/samples/pirateFort.glb.glb", + "path": "/models/samples/pirateFort.glb", "category": "structure", "subCategory": "fort", "keywords": { @@ -91748,7 +91755,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-moving", - "path": "/models/samples/platformer-kit_block-moving.glb.glb", + "path": "/models/samples/platformer-kit_block-moving.glb", "category": "prop", "subCategory": "platform", "keywords": { @@ -91814,7 +91821,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-moving-blue", - "path": "/models/samples/platformer-kit_block-moving-blue.glb.glb", + "path": "/models/samples/platformer-kit_block-moving-blue.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -91879,7 +91886,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-moving-large", - "path": "/models/samples/platformer-kit_block-moving-large.glb.glb", + "path": "/models/samples/platformer-kit_block-moving-large.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -91942,7 +91949,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-corner-overhang", - "path": "/models/samples/platformer-kit_block-snow-corner-overhang.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-corner-overhang.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -92004,7 +92011,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-corner-overhang-low", - "path": "/models/samples/platformer-kit_block-snow-corner-overhang-low.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-corner-overhang-low.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -92065,7 +92072,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-curve", - "path": "/models/samples/platformer-kit_block-snow-curve.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-curve.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92129,7 +92136,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-curve-half", - "path": "/models/samples/platformer-kit_block-snow-curve-half.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-curve-half.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92191,7 +92198,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-curve-low", - "path": "/models/samples/platformer-kit_block-snow-curve-low.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-curve-low.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92257,7 +92264,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-edge", - "path": "/models/samples/platformer-kit_block-snow-edge.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-edge.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92319,7 +92326,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-large-slope", - "path": "/models/samples/platformer-kit_block-snow-large-slope.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-large-slope.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92381,7 +92388,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-large-slope-steep", - "path": "/models/samples/platformer-kit_block-snow-large-slope-steep.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-large-slope-steep.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92442,7 +92449,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-corner", - "path": "/models/samples/platformer-kit_block-snow-overhang-corner.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-corner.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92503,7 +92510,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-edge", - "path": "/models/samples/platformer-kit_block-snow-overhang-edge.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-edge.glb", "category": "structure", "subCategory": "block", "keywords": { @@ -92567,7 +92574,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-large", - "path": "/models/samples/platformer-kit_block-snow-overhang-large.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-large.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -92631,7 +92638,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-large-slope", - "path": "/models/samples/platformer-kit_block-snow-overhang-large-slope.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-large-slope.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -92692,7 +92699,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-large-slope-steep", - "path": "/models/samples/platformer-kit_block-snow-overhang-large-slope-steep.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-large-slope-steep.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -92758,7 +92765,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-large-tall", - "path": "/models/samples/platformer-kit_block-snow-overhang-large-tall.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-large-tall.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92822,7 +92829,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-long", - "path": "/models/samples/platformer-kit_block-snow-overhang-long.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-long.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -92884,7 +92891,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-low", - "path": "/models/samples/platformer-kit_block-snow-overhang-low.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-low.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -92946,7 +92953,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-low-large", - "path": "/models/samples/platformer-kit_block-snow-overhang-low-large.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-low-large.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -93010,7 +93017,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_block-snow-overhang-low-long", - "path": "/models/samples/platformer-kit_block-snow-overhang-low-long.glb.glb", + "path": "/models/samples/platformer-kit_block-snow-overhang-low-long.glb", "category": "prop", "subCategory": "platformer block", "keywords": { @@ -93071,7 +93078,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_bomb", - "path": "/models/samples/platformer-kit_bomb.glb.glb", + "path": "/models/samples/platformer-kit_bomb.glb", "category": "prop", "subCategory": "bomb", "keywords": { @@ -93138,7 +93145,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_brick", - "path": "/models/samples/platformer-kit_brick.glb.glb", + "path": "/models/samples/platformer-kit_brick.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -93207,7 +93214,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_button-round", - "path": "/models/samples/platformer-kit_button-round.glb.glb", + "path": "/models/samples/platformer-kit_button-round.glb", "category": "prop", "subCategory": "button", "keywords": { @@ -93271,7 +93278,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_button-square", - "path": "/models/samples/platformer-kit_button-square.glb.glb", + "path": "/models/samples/platformer-kit_button-square.glb", "category": "prop", "subCategory": "button", "keywords": { @@ -93341,7 +93348,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_conveyor-belt", - "path": "/models/samples/platformer-kit_conveyor-belt.glb.glb", + "path": "/models/samples/platformer-kit_conveyor-belt.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -93407,7 +93414,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_hedge-corner", - "path": "/models/samples/platformer-kit_hedge-corner.glb.glb", + "path": "/models/samples/platformer-kit_hedge-corner.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -93479,7 +93486,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_ladder-broken", - "path": "/models/samples/platformer-kit_ladder-broken.glb.glb", + "path": "/models/samples/platformer-kit_ladder-broken.glb", "category": "prop", "subCategory": "ladder", "keywords": { @@ -93547,7 +93554,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_ladder-long", - "path": "/models/samples/platformer-kit_ladder-long.glb.glb", + "path": "/models/samples/platformer-kit_ladder-long.glb", "category": "prop", "subCategory": "ladder", "keywords": { @@ -93618,7 +93625,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_lever", - "path": "/models/samples/platformer-kit_lever.glb.glb", + "path": "/models/samples/platformer-kit_lever.glb", "category": "prop", "subCategory": "lever", "keywords": { @@ -93686,7 +93693,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_pipe", - "path": "/models/samples/platformer-kit_pipe.glb.glb", + "path": "/models/samples/platformer-kit_pipe.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -93751,7 +93758,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_platform-fortified", - "path": "/models/samples/platformer-kit_platform-fortified.glb.glb", + "path": "/models/samples/platformer-kit_platform-fortified.glb", "category": "prop", "subCategory": "platform", "keywords": { @@ -93819,7 +93826,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_poles", - "path": "/models/samples/platformer-kit_poles.glb.glb", + "path": "/models/samples/platformer-kit_poles.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -93887,7 +93894,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_saw", - "path": "/models/samples/platformer-kit_saw.glb.glb", + "path": "/models/samples/platformer-kit_saw.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -93952,7 +93959,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_spike-block", - "path": "/models/samples/platformer-kit_spike-block.glb.glb", + "path": "/models/samples/platformer-kit_spike-block.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -94015,7 +94022,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_spike-block-wide", - "path": "/models/samples/platformer-kit_spike-block-wide.glb.glb", + "path": "/models/samples/platformer-kit_spike-block-wide.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -94083,7 +94090,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_spring", - "path": "/models/samples/platformer-kit_spring.glb.glb", + "path": "/models/samples/platformer-kit_spring.glb", "category": "prop", "subCategory": "platformer", "keywords": { @@ -94150,7 +94157,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_trap-spikes", - "path": "/models/samples/platformer-kit_trap-spikes.glb.glb", + "path": "/models/samples/platformer-kit_trap-spikes.glb", "category": "prop", "subCategory": "trap", "keywords": { @@ -94221,7 +94228,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_platformer-kit_trap-spikes-large", - "path": "/models/samples/platformer-kit_trap-spikes-large.glb.glb", + "path": "/models/samples/platformer-kit_trap-spikes-large.glb", "category": "prop", "subCategory": "trap", "keywords": { @@ -94292,7 +94299,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_PlaysetLightTest", - "path": "/models/samples/PlaysetLightTest.glb.glb", + "path": "/models/samples/PlaysetLightTest.glb", "category": "prop", "subCategory": "playset", "keywords": { @@ -94351,7 +94358,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_PointLightIntensityTest", - "path": "/models/samples/PointLightIntensityTest.glb.glb", + "path": "/models/samples/PointLightIntensityTest.glb", "category": "prop", "subCategory": "point light", "keywords": { @@ -94415,7 +94422,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_PotOfCoals", - "path": "/models/samples/PotOfCoals.glb.glb", + "path": "/models/samples/PotOfCoals.glb", "category": "prop", "subCategory": "pot", "keywords": { @@ -94484,7 +94491,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_PotOfCoalsAnimationPointer", - "path": "/models/samples/PotOfCoalsAnimationPointer.glb.glb", + "path": "/models/samples/PotOfCoalsAnimationPointer.glb", "category": "prop", "subCategory": "pot", "keywords": { @@ -94552,7 +94559,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_previewSphere", - "path": "/models/samples/previewSphere.glb.glb", + "path": "/models/samples/previewSphere.glb", "category": "prop", "subCategory": "preview", "keywords": { @@ -94615,7 +94622,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_r_hand_lhs", - "path": "/models/samples/r_hand_lhs.glb.glb", + "path": "/models/samples/r_hand_lhs.glb", "category": "prop", "subCategory": "hand", "keywords": { @@ -94678,7 +94685,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_r_hand_rhs", - "path": "/models/samples/r_hand_rhs.glb.glb", + "path": "/models/samples/r_hand_rhs.glb", "category": "prop", "subCategory": "hand", "keywords": { @@ -94743,7 +94750,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_RecursiveSkeletons", - "path": "/models/samples/RecursiveSkeletons.glb.glb", + "path": "/models/samples/RecursiveSkeletons.glb", "category": "prop", "subCategory": "skeleton", "keywords": { @@ -94810,7 +94817,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_RiggedFigure", - "path": "/models/samples/RiggedFigure.glb.glb", + "path": "/models/samples/RiggedFigure.glb", "category": "character", "subCategory": "humanoid", "keywords": { @@ -94877,7 +94884,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_riggedMesh", - "path": "/models/samples/riggedMesh.glb.glb", + "path": "/models/samples/riggedMesh.glb", "category": "prop", "subCategory": "rigged", "keywords": { @@ -94939,7 +94946,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_RiggedSimple", - "path": "/models/samples/RiggedSimple.glb.glb", + "path": "/models/samples/RiggedSimple.glb", "category": "prop", "subCategory": "rigged", "keywords": { @@ -94999,7 +95006,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_right", - "path": "/models/samples/right.glb.glb", + "path": "/models/samples/right.glb", "category": "prop", "subCategory": "arrow", "keywords": { @@ -95065,7 +95072,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_Road_corner", - "path": "/models/samples/Road corner.glb.glb", + "path": "/models/samples/Road corner.glb", "category": "environment", "subCategory": "road", "keywords": { @@ -95129,7 +95136,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_road_gap", - "path": "/models/samples/road gap.glb.glb", + "path": "/models/samples/road gap.glb", "category": "environment", "subCategory": "road", "keywords": { @@ -95192,7 +95199,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_roundedCube", - "path": "/models/samples/roundedCube.glb.glb", + "path": "/models/samples/roundedCube.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -95255,7 +95262,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_roundedCylinder", - "path": "/models/samples/roundedCylinder.glb.glb", + "path": "/models/samples/roundedCylinder.glb", "category": "prop", "subCategory": "cylinder", "keywords": { @@ -95321,7 +95328,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_sarcophagus", - "path": "/models/samples/sarcophagus.glb.glb", + "path": "/models/samples/sarcophagus.glb", "category": "prop", "subCategory": "sarcophagus", "keywords": { @@ -95390,7 +95397,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_sarcophagusOpen", - "path": "/models/samples/sarcophagusOpen.glb.glb", + "path": "/models/samples/sarcophagusOpen.glb", "category": "prop", "subCategory": "sarcophagus", "keywords": { @@ -95460,7 +95467,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_sawMill", - "path": "/models/samples/sawMill.glb.glb", + "path": "/models/samples/sawMill.glb", "category": "structure", "subCategory": "mill", "keywords": { @@ -95530,7 +95537,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_seagulf", - "path": "/models/samples/seagulf.glb.glb", + "path": "/models/samples/seagulf.glb", "category": "character", "subCategory": "bird", "keywords": { @@ -95594,7 +95601,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_shaderBall", - "path": "/models/samples/shaderBall.glb.glb", + "path": "/models/samples/shaderBall.glb", "category": "prop", "subCategory": "shader", "keywords": { @@ -95652,7 +95659,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_shaderBall_rotation", - "path": "/models/samples/shaderBall_rotation.glb.glb", + "path": "/models/samples/shaderBall_rotation.glb", "category": "prop", "subCategory": "ball", "keywords": { @@ -95711,7 +95718,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_shark", - "path": "/models/samples/shark.glb.glb", + "path": "/models/samples/shark.glb", "category": "character", "subCategory": "fish", "keywords": { @@ -95774,7 +95781,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_sign", - "path": "/models/samples/sign.glb.glb", + "path": "/models/samples/sign.glb", "category": "prop", "subCategory": "sign", "keywords": { @@ -95846,7 +95853,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_signboard1", - "path": "/models/samples/signboard1.glb.glb", + "path": "/models/samples/signboard1.glb", "category": "prop", "subCategory": "signboard", "keywords": { @@ -95915,7 +95922,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_signboard2", - "path": "/models/samples/signboard2.glb.glb", + "path": "/models/samples/signboard2.glb", "category": "prop", "subCategory": "signboard", "keywords": { @@ -95987,7 +95994,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_snowBall", - "path": "/models/samples/snowBall.glb.glb", + "path": "/models/samples/snowBall.glb", "category": "prop", "subCategory": "snow", "keywords": { @@ -96051,7 +96058,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_snowField", - "path": "/models/samples/snowField.glb.glb", + "path": "/models/samples/snowField.glb", "category": "environment", "subCategory": "field", "keywords": { @@ -96118,7 +96125,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_solar_system", - "path": "/models/samples/solar_system.glb.glb", + "path": "/models/samples/solar_system.glb", "category": "prop", "subCategory": "system", "keywords": { @@ -96179,7 +96186,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_solid", - "path": "/models/samples/solid.glb.glb", + "path": "/models/samples/solid.glb", "category": "prop", "subCategory": "cube", "keywords": { @@ -96244,7 +96251,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_SpecGlossVsMetalRough", - "path": "/models/samples/SpecGlossVsMetalRough.glb.glb", + "path": "/models/samples/SpecGlossVsMetalRough.glb", "category": "prop", "subCategory": "display", "keywords": { @@ -96304,7 +96311,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_spellDisk", - "path": "/models/samples/spellDisk.glb.glb", + "path": "/models/samples/spellDisk.glb", "category": "prop", "subCategory": "spell", "keywords": { @@ -96372,7 +96379,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_straight", - "path": "/models/samples/straight.glb.glb", + "path": "/models/samples/straight.glb", "category": "prop", "subCategory": "stick", "keywords": { @@ -96439,7 +96446,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_stud", - "path": "/models/samples/stud.glb.glb", + "path": "/models/samples/stud.glb", "category": "prop", "subCategory": "metal fitting", "keywords": { @@ -96501,7 +96508,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_stump", - "path": "/models/samples/stump.glb.glb", + "path": "/models/samples/stump.glb", "category": "nature", "subCategory": "stump", "keywords": { @@ -96572,7 +96579,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_stump1", - "path": "/models/samples/stump1.glb.glb", + "path": "/models/samples/stump1.glb", "category": "nature", "subCategory": "stump", "keywords": { @@ -96645,7 +96652,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_stump2", - "path": "/models/samples/stump2.glb.glb", + "path": "/models/samples/stump2.glb", "category": "nature", "subCategory": "stump", "keywords": { @@ -96716,7 +96723,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_SunglassesKhronos", - "path": "/models/samples/SunglassesKhronos.glb.glb", + "path": "/models/samples/SunglassesKhronos.glb", "category": "prop", "subCategory": "sunglasses", "keywords": { @@ -96779,7 +96786,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_target", - "path": "/models/samples/target.glb.glb", + "path": "/models/samples/target.glb", "category": "prop", "subCategory": "target", "keywords": { @@ -96842,7 +96849,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_TextureCoordinateTest", - "path": "/models/samples/TextureCoordinateTest.glb.glb", + "path": "/models/samples/TextureCoordinateTest.glb", "category": "prop", "subCategory": "test", "keywords": { @@ -96903,7 +96910,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_TextureEncodingTest", - "path": "/models/samples/TextureEncodingTest.glb.glb", + "path": "/models/samples/TextureEncodingTest.glb", "category": "prop", "subCategory": "test", "keywords": { @@ -96963,7 +96970,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_TextureSettingsTest", - "path": "/models/samples/TextureSettingsTest.glb.glb", + "path": "/models/samples/TextureSettingsTest.glb", "category": "prop", "subCategory": "settings", "keywords": { @@ -97020,7 +97027,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_TextureTransformMultiTest", - "path": "/models/samples/TextureTransformMultiTest.glb.glb", + "path": "/models/samples/TextureTransformMultiTest.glb", "category": "prop", "subCategory": "test", "keywords": { @@ -97081,7 +97088,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_bath_day", - "path": "/models/samples/three.js-examples_bath_day.glb.glb", + "path": "/models/samples/three.js-examples_bath_day.glb", "category": "prop", "subCategory": "bathroom", "keywords": { @@ -97147,7 +97154,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_coffeemat", - "path": "/models/samples/three.js-examples_coffeemat.glb.glb", + "path": "/models/samples/three.js-examples_coffeemat.glb", "category": "prop", "subCategory": "mat", "keywords": { @@ -97212,7 +97219,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_coffeeMug", - "path": "/models/samples/three.js-examples_coffeeMug.glb.glb", + "path": "/models/samples/three.js-examples_coffeeMug.glb", "category": "prop", "subCategory": "mug", "keywords": { @@ -97280,7 +97287,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_collision-world", - "path": "/models/samples/three.js-examples_collision-world.glb.glb", + "path": "/models/samples/three.js-examples_collision-world.glb", "category": "prop", "subCategory": "scene", "keywords": { @@ -97343,7 +97350,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_duck", - "path": "/models/samples/three.js-examples_duck.glb.glb", + "path": "/models/samples/three.js-examples_duck.glb", "category": "prop", "subCategory": "toy", "keywords": { @@ -97404,7 +97411,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_facecap", - "path": "/models/samples/three.js-examples_facecap.glb.glb", + "path": "/models/samples/three.js-examples_facecap.glb", "category": "prop", "subCategory": "data", "keywords": { @@ -97467,7 +97474,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_ferrari", - "path": "/models/samples/three.js-examples_ferrari.glb.glb", + "path": "/models/samples/three.js-examples_ferrari.glb", "category": "prop", "subCategory": "sports car", "keywords": { @@ -97536,7 +97543,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_Flamingo", - "path": "/models/samples/three.js-examples_Flamingo.glb.glb", + "path": "/models/samples/three.js-examples_Flamingo.glb", "category": "prop", "subCategory": "decoration", "keywords": { @@ -97601,7 +97608,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_gears", - "path": "/models/samples/three.js-examples_gears.glb.glb", + "path": "/models/samples/three.js-examples_gears.glb", "category": "prop", "subCategory": "gear", "keywords": { @@ -97662,7 +97669,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_godrays_demo", - "path": "/models/samples/three.js-examples_godrays_demo.glb.glb", + "path": "/models/samples/three.js-examples_godrays_demo.glb", "category": "prop", "subCategory": "light effect", "keywords": { @@ -97729,7 +97736,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_IridescentDishWithOlives", - "path": "/models/samples/three.js-examples_IridescentDishWithOlives.glb.glb", + "path": "/models/samples/three.js-examples_IridescentDishWithOlives.glb", "category": "prop", "subCategory": "dish", "keywords": { @@ -97795,7 +97802,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_kira", - "path": "/models/samples/three.js-examples_kira.glb.glb", + "path": "/models/samples/three.js-examples_kira.glb", "category": "prop", "subCategory": "example", "keywords": { @@ -97862,7 +97869,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_LeePerrySmith", - "path": "/models/samples/three.js-examples_LeePerrySmith.glb.glb", + "path": "/models/samples/three.js-examples_LeePerrySmith.glb", "category": "prop", "subCategory": "head", "keywords": { @@ -97923,7 +97930,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_LittlestTokyo", - "path": "/models/samples/three.js-examples_LittlestTokyo.glb.glb", + "path": "/models/samples/three.js-examples_LittlestTokyo.glb", "category": "structure", "subCategory": "city", "keywords": { @@ -97989,7 +97996,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_Michelle", - "path": "/models/samples/three.js-examples_Michelle.glb.glb", + "path": "/models/samples/three.js-examples_Michelle.glb", "category": "character", "subCategory": "human", "keywords": { @@ -98059,7 +98066,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_Nefertiti", - "path": "/models/samples/three.js-examples_Nefertiti.glb.glb", + "path": "/models/samples/three.js-examples_Nefertiti.glb", "category": "prop", "subCategory": "bust", "keywords": { @@ -98125,7 +98132,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_nemetona", - "path": "/models/samples/three.js-examples_nemetona.glb.glb", + "path": "/models/samples/three.js-examples_nemetona.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -98193,7 +98200,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_Parrot", - "path": "/models/samples/three.js-examples_Parrot.glb.glb", + "path": "/models/samples/three.js-examples_Parrot.glb", "category": "character", "subCategory": "bird", "keywords": { @@ -98256,7 +98263,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_pool", - "path": "/models/samples/three.js-examples_pool.glb.glb", + "path": "/models/samples/three.js-examples_pool.glb", "category": "prop", "subCategory": "pool", "keywords": { @@ -98324,7 +98331,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_PrimaryIonDrive", - "path": "/models/samples/three.js-examples_PrimaryIonDrive.glb.glb", + "path": "/models/samples/three.js-examples_PrimaryIonDrive.glb", "category": "prop", "subCategory": "spaceship part", "keywords": { @@ -98387,7 +98394,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_readyplayer_me", - "path": "/models/samples/three.js-examples_readyplayer.me.glb.glb", + "path": "/models/samples/three.js-examples_readyplayer.me.glb", "category": "character", "subCategory": "avatar", "keywords": { @@ -98453,7 +98460,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_RobotExpressive", - "path": "/models/samples/three.js-examples_RobotExpressive.glb.glb", + "path": "/models/samples/three.js-examples_RobotExpressive.glb", "category": "prop", "subCategory": "robot", "keywords": { @@ -98517,7 +98524,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_rolex", - "path": "/models/samples/three.js-examples_rolex.glb.glb", + "path": "/models/samples/three.js-examples_rolex.glb", "category": "prop", "subCategory": "watch", "keywords": { @@ -98587,7 +98594,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_ShaderBall", - "path": "/models/samples/three.js-examples_ShaderBall.glb.glb", + "path": "/models/samples/three.js-examples_ShaderBall.glb", "category": "prop", "subCategory": "ball", "keywords": { @@ -98648,7 +98655,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_ShaderBall2", - "path": "/models/samples/three.js-examples_ShaderBall2.glb.glb", + "path": "/models/samples/three.js-examples_ShaderBall2.glb", "category": "prop", "subCategory": "ball", "keywords": { @@ -98709,7 +98716,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_ShadowmappableMesh", - "path": "/models/samples/three.js-examples_ShadowmappableMesh.glb.glb", + "path": "/models/samples/three.js-examples_ShadowmappableMesh.glb", "category": "prop", "subCategory": "generic", "keywords": { @@ -98770,7 +98777,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_steampunk_camera", - "path": "/models/samples/three.js-examples_steampunk_camera.glb.glb", + "path": "/models/samples/three.js-examples_steampunk_camera.glb", "category": "prop", "subCategory": "camera", "keywords": { @@ -98836,7 +98843,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_Stork", - "path": "/models/samples/three.js-examples_Stork.glb.glb", + "path": "/models/samples/three.js-examples_Stork.glb", "category": "character", "subCategory": "bird", "keywords": { @@ -98905,7 +98912,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_venice_mask", - "path": "/models/samples/three.js-examples_venice_mask.glb.glb", + "path": "/models/samples/three.js-examples_venice_mask.glb", "category": "prop", "subCategory": "mask", "keywords": { @@ -98973,7 +98980,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_three_js-examples_Xbot", - "path": "/models/samples/three.js-examples_Xbot.glb.glb", + "path": "/models/samples/three.js-examples_Xbot.glb", "category": "character", "subCategory": "humanoid", "keywords": { @@ -99034,7 +99041,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_toast_acrobatics", - "path": "/models/samples/toast_acrobatics.glb.glb", + "path": "/models/samples/toast_acrobatics.glb", "category": "prop", "subCategory": "acrobatics", "keywords": { @@ -99101,7 +99108,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_transfiguration_class", - "path": "/models/samples/transfiguration_class.glb.glb", + "path": "/models/samples/transfiguration_class.glb", "category": "prop", "subCategory": "classroom", "keywords": { @@ -99168,7 +99175,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_ufo", - "path": "/models/samples/ufo.glb.glb", + "path": "/models/samples/ufo.glb", "category": "prop", "subCategory": "ufo", "keywords": { @@ -99231,7 +99238,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_underwaterGround", - "path": "/models/samples/underwaterGround.glb.glb", + "path": "/models/samples/underwaterGround.glb", "category": "environment", "subCategory": "underwater", "keywords": { @@ -99298,7 +99305,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_underwaterScene", - "path": "/models/samples/underwaterScene.glb.glb", + "path": "/models/samples/underwaterScene.glb", "category": "environment", "subCategory": "underwater", "keywords": { @@ -99364,7 +99371,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_underwaterSceneNavMesh", - "path": "/models/samples/underwaterSceneNavMesh.glb.glb", + "path": "/models/samples/underwaterSceneNavMesh.glb", "category": "prop", "subCategory": "underwater", "keywords": { @@ -99427,7 +99434,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_valleyvillage", - "path": "/models/samples/valleyvillage.glb.glb", + "path": "/models/samples/valleyvillage.glb", "category": "structure", "subCategory": "village", "keywords": { @@ -99502,7 +99509,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_village", - "path": "/models/samples/village.glb.glb", + "path": "/models/samples/village.glb", "category": "structure", "subCategory": "village", "keywords": { @@ -99575,7 +99582,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_VirtualCity", - "path": "/models/samples/VirtualCity.glb.glb", + "path": "/models/samples/VirtualCity.glb", "category": "structure", "subCategory": "city", "keywords": { @@ -99642,7 +99649,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_wagon", - "path": "/models/samples/wagon.glb.glb", + "path": "/models/samples/wagon.glb", "category": "prop", "subCategory": "wagon", "keywords": { @@ -99712,7 +99719,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_waterwell", - "path": "/models/samples/waterwell.glb.glb", + "path": "/models/samples/waterwell.glb", "category": "prop", "subCategory": "waterwell", "keywords": { @@ -99779,7 +99786,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_Xbot", - "path": "/models/samples/Xbot.glb.glb", + "path": "/models/samples/Xbot.glb", "category": "character", "subCategory": "robot", "keywords": { @@ -99842,7 +99849,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_yellowEnergyBall", - "path": "/models/samples/yellowEnergyBall.glb.glb", + "path": "/models/samples/yellowEnergyBall.glb", "category": "prop", "subCategory": "ball", "keywords": { @@ -99906,7 +99913,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "samples_YetiSmall", - "path": "/models/samples/YetiSmall.glb.glb", + "path": "/models/samples/YetiSmall.glb", "category": "character", "subCategory": "yeti", "keywords": { @@ -99967,7 +99974,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "sketchfab_food_Low-poly_Fangding_food_vessel", - "path": "/models/sketchfab/food/Low-poly_Fangding_food_vessel.glb.glb", + "path": "/models/sketchfab/food/Low-poly_Fangding_food_vessel.glb", "category": "prop", "subCategory": "vessel", "keywords": { @@ -100036,7 +100043,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "sketchfab_food_Lower-poly_Liding_food_vessel__12th-11th_C_BCE", - "path": "/models/sketchfab/food/Lower-poly_Liding_food_vessel__12th-11th_C_BCE.glb.glb", + "path": "/models/sketchfab/food/Lower-poly_Liding_food_vessel__12th-11th_C_BCE.glb", "category": "prop", "subCategory": "vessel", "keywords": { @@ -100104,7 +100111,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_acrobaticPlane_variants", - "path": "/models/vehicles/acrobaticPlane_variants.glb.glb", + "path": "/models/vehicles/acrobaticPlane_variants.glb", "category": "prop", "subCategory": "plane", "keywords": { @@ -100167,7 +100174,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_aerobatic_plane", - "path": "/models/vehicles/aerobatic_plane.glb.glb", + "path": "/models/vehicles/aerobatic_plane.glb", "category": "prop", "subCategory": "aeroplane", "keywords": { @@ -100231,7 +100238,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_babylon-assets_Buggy", - "path": "/models/vehicles/babylon-assets_Buggy.glb.glb", + "path": "/models/vehicles/babylon-assets_Buggy.glb", "category": "prop", "subCategory": "buggy", "keywords": { @@ -100301,7 +100308,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_babylon-assets_CesiumMilkTruck", - "path": "/models/vehicles/babylon-assets_CesiumMilkTruck.glb.glb", + "path": "/models/vehicles/babylon-assets_CesiumMilkTruck.glb", "category": "prop", "subCategory": "truck", "keywords": { @@ -100367,7 +100374,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car", - "path": "/models/vehicles/car.glb.glb", + "path": "/models/vehicles/car.glb", "category": "prop", "subCategory": "car", "keywords": { @@ -100438,7 +100445,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_ambulance", - "path": "/models/vehicles/car-kit_ambulance.glb.glb", + "path": "/models/vehicles/car-kit_ambulance.glb", "category": "prop", "subCategory": "ambulance", "keywords": { @@ -100503,7 +100510,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_box", - "path": "/models/vehicles/car-kit_box.glb.glb", + "path": "/models/vehicles/car-kit_box.glb", "category": "prop", "subCategory": "car", "keywords": { @@ -100567,7 +100574,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_cone", - "path": "/models/vehicles/car-kit_cone.glb.glb", + "path": "/models/vehicles/car-kit_cone.glb", "category": "prop", "subCategory": "cone", "keywords": { @@ -100632,7 +100639,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_cone-flat", - "path": "/models/vehicles/car-kit_cone-flat.glb.glb", + "path": "/models/vehicles/car-kit_cone-flat.glb", "category": "prop", "subCategory": "car", "keywords": { @@ -100701,7 +100708,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-bolt", - "path": "/models/vehicles/car-kit_debris-bolt.glb.glb", + "path": "/models/vehicles/car-kit_debris-bolt.glb", "category": "prop", "subCategory": "debris", "keywords": { @@ -100766,7 +100773,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-bumper", - "path": "/models/vehicles/car-kit_debris-bumper.glb.glb", + "path": "/models/vehicles/car-kit_debris-bumper.glb", "category": "prop", "subCategory": "car part", "keywords": { @@ -100831,7 +100838,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-drivetrain", - "path": "/models/vehicles/car-kit_debris-drivetrain.glb.glb", + "path": "/models/vehicles/car-kit_debris-drivetrain.glb", "category": "prop", "subCategory": "drivetrain", "keywords": { @@ -100895,7 +100902,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-drivetrain-axle", - "path": "/models/vehicles/car-kit_debris-drivetrain-axle.glb.glb", + "path": "/models/vehicles/car-kit_debris-drivetrain-axle.glb", "category": "prop", "subCategory": "drivetrain", "keywords": { @@ -100961,7 +100968,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-nut", - "path": "/models/vehicles/car-kit_debris-nut.glb.glb", + "path": "/models/vehicles/car-kit_debris-nut.glb", "category": "prop", "subCategory": "debris", "keywords": { @@ -101025,7 +101032,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-plate-a", - "path": "/models/vehicles/car-kit_debris-plate-a.glb.glb", + "path": "/models/vehicles/car-kit_debris-plate-a.glb", "category": "prop", "subCategory": "debris", "keywords": { @@ -101089,7 +101096,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-plate-b", - "path": "/models/vehicles/car-kit_debris-plate-b.glb.glb", + "path": "/models/vehicles/car-kit_debris-plate-b.glb", "category": "prop", "subCategory": "car part", "keywords": { @@ -101154,7 +101161,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-plate-small-a", - "path": "/models/vehicles/car-kit_debris-plate-small-a.glb.glb", + "path": "/models/vehicles/car-kit_debris-plate-small-a.glb", "category": "prop", "subCategory": "debris", "keywords": { @@ -101219,7 +101226,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-plate-small-b", - "path": "/models/vehicles/car-kit_debris-plate-small-b.glb.glb", + "path": "/models/vehicles/car-kit_debris-plate-small-b.glb", "category": "prop", "subCategory": "debris", "keywords": { @@ -101285,7 +101292,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-spoiler-a", - "path": "/models/vehicles/car-kit_debris-spoiler-a.glb.glb", + "path": "/models/vehicles/car-kit_debris-spoiler-a.glb", "category": "prop", "subCategory": "spoiler", "keywords": { @@ -101348,7 +101355,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-spoiler-b", - "path": "/models/vehicles/car-kit_debris-spoiler-b.glb.glb", + "path": "/models/vehicles/car-kit_debris-spoiler-b.glb", "category": "prop", "subCategory": "spoiler", "keywords": { @@ -101411,7 +101418,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_debris-tire", - "path": "/models/vehicles/car-kit_debris-tire.glb.glb", + "path": "/models/vehicles/car-kit_debris-tire.glb", "category": "prop", "subCategory": "tire", "keywords": { @@ -101476,7 +101483,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_delivery", - "path": "/models/vehicles/car-kit_delivery.glb.glb", + "path": "/models/vehicles/car-kit_delivery.glb", "category": "prop", "subCategory": "delivery", "keywords": { @@ -101542,7 +101549,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_delivery-flat", - "path": "/models/vehicles/car-kit_delivery-flat.glb.glb", + "path": "/models/vehicles/car-kit_delivery-flat.glb", "category": "prop", "subCategory": "delivery car", "keywords": { @@ -101605,7 +101612,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_firetruck", - "path": "/models/vehicles/car-kit_firetruck.glb.glb", + "path": "/models/vehicles/car-kit_firetruck.glb", "category": "prop", "subCategory": "firetruck", "keywords": { @@ -101674,7 +101681,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_garbage-truck", - "path": "/models/vehicles/car-kit_garbage-truck.glb.glb", + "path": "/models/vehicles/car-kit_garbage-truck.glb", "category": "prop", "subCategory": "truck", "keywords": { @@ -101741,7 +101748,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_hatchback-sports", - "path": "/models/vehicles/car-kit_hatchback-sports.glb.glb", + "path": "/models/vehicles/car-kit_hatchback-sports.glb", "category": "prop", "subCategory": "hatchback", "keywords": { @@ -101811,7 +101818,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_kart-oobi", - "path": "/models/vehicles/car-kit_kart-oobi.glb.glb", + "path": "/models/vehicles/car-kit_kart-oobi.glb", "category": "prop", "subCategory": "kart", "keywords": { @@ -101875,7 +101882,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_kart-oodi", - "path": "/models/vehicles/car-kit_kart-oodi.glb.glb", + "path": "/models/vehicles/car-kit_kart-oodi.glb", "category": "prop", "subCategory": "kart", "keywords": { @@ -101940,7 +101947,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_kart-ooli", - "path": "/models/vehicles/car-kit_kart-ooli.glb.glb", + "path": "/models/vehicles/car-kit_kart-ooli.glb", "category": "prop", "subCategory": "kart", "keywords": { @@ -102005,7 +102012,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_kart-oopi", - "path": "/models/vehicles/car-kit_kart-oopi.glb.glb", + "path": "/models/vehicles/car-kit_kart-oopi.glb", "category": "prop", "subCategory": "kart", "keywords": { @@ -102070,7 +102077,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_kart-oozi", - "path": "/models/vehicles/car-kit_kart-oozi.glb.glb", + "path": "/models/vehicles/car-kit_kart-oozi.glb", "category": "prop", "subCategory": "kart", "keywords": { @@ -102136,7 +102143,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_police", - "path": "/models/vehicles/car-kit_police.glb.glb", + "path": "/models/vehicles/car-kit_police.glb", "category": "prop", "subCategory": "police car", "keywords": { @@ -102201,7 +102208,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_race", - "path": "/models/vehicles/car-kit_race.glb.glb", + "path": "/models/vehicles/car-kit_race.glb", "category": "prop", "subCategory": "race car", "keywords": { @@ -102267,7 +102274,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_race-future", - "path": "/models/vehicles/car-kit_race-future.glb.glb", + "path": "/models/vehicles/car-kit_race-future.glb", "category": "prop", "subCategory": "future car", "keywords": { @@ -102333,7 +102340,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_sedan", - "path": "/models/vehicles/car-kit_sedan.glb.glb", + "path": "/models/vehicles/car-kit_sedan.glb", "category": "prop", "subCategory": "sedan", "keywords": { @@ -102399,7 +102406,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_sedan-sports", - "path": "/models/vehicles/car-kit_sedan-sports.glb.glb", + "path": "/models/vehicles/car-kit_sedan-sports.glb", "category": "prop", "subCategory": "sports car", "keywords": { @@ -102470,7 +102477,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_suv", - "path": "/models/vehicles/car-kit_suv.glb.glb", + "path": "/models/vehicles/car-kit_suv.glb", "category": "prop", "subCategory": "car", "keywords": { @@ -102540,7 +102547,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_suv-luxury", - "path": "/models/vehicles/car-kit_suv-luxury.glb.glb", + "path": "/models/vehicles/car-kit_suv-luxury.glb", "category": "prop", "subCategory": "suv", "keywords": { @@ -102611,7 +102618,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_taxi", - "path": "/models/vehicles/car-kit_taxi.glb.glb", + "path": "/models/vehicles/car-kit_taxi.glb", "category": "prop", "subCategory": "taxi", "keywords": { @@ -102676,7 +102683,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_tractor", - "path": "/models/vehicles/car-kit_tractor.glb.glb", + "path": "/models/vehicles/car-kit_tractor.glb", "category": "prop", "subCategory": "tractor", "keywords": { @@ -102741,7 +102748,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_tractor-police", - "path": "/models/vehicles/car-kit_tractor-police.glb.glb", + "path": "/models/vehicles/car-kit_tractor-police.glb", "category": "prop", "subCategory": "tractor", "keywords": { @@ -102807,7 +102814,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_tractor-shovel", - "path": "/models/vehicles/car-kit_tractor-shovel.glb.glb", + "path": "/models/vehicles/car-kit_tractor-shovel.glb", "category": "prop", "subCategory": "tractor", "keywords": { @@ -102872,7 +102879,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_truck", - "path": "/models/vehicles/car-kit_truck.glb.glb", + "path": "/models/vehicles/car-kit_truck.glb", "category": "prop", "subCategory": "truck", "keywords": { @@ -102937,7 +102944,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_truck-flat", - "path": "/models/vehicles/car-kit_truck-flat.glb.glb", + "path": "/models/vehicles/car-kit_truck-flat.glb", "category": "prop", "subCategory": "truck", "keywords": { @@ -103003,7 +103010,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_van", - "path": "/models/vehicles/car-kit_van.glb.glb", + "path": "/models/vehicles/car-kit_van.glb", "category": "prop", "subCategory": "car", "keywords": { @@ -103071,7 +103078,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_wheel-dark", - "path": "/models/vehicles/car-kit_wheel-dark.glb.glb", + "path": "/models/vehicles/car-kit_wheel-dark.glb", "category": "prop", "subCategory": "wheel", "keywords": { @@ -103136,7 +103143,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_wheel-default", - "path": "/models/vehicles/car-kit_wheel-default.glb.glb", + "path": "/models/vehicles/car-kit_wheel-default.glb", "category": "prop", "subCategory": "wheel", "keywords": { @@ -103201,7 +103208,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_wheel-racing", - "path": "/models/vehicles/car-kit_wheel-racing.glb.glb", + "path": "/models/vehicles/car-kit_wheel-racing.glb", "category": "prop", "subCategory": "racing car wheel", "keywords": { @@ -103265,7 +103272,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_wheel-tractor-back", - "path": "/models/vehicles/car-kit_wheel-tractor-back.glb.glb", + "path": "/models/vehicles/car-kit_wheel-tractor-back.glb", "category": "prop", "subCategory": "tractor", "keywords": { @@ -103331,7 +103338,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_wheel-tractor-dark-back", - "path": "/models/vehicles/car-kit_wheel-tractor-dark-back.glb.glb", + "path": "/models/vehicles/car-kit_wheel-tractor-dark-back.glb", "category": "prop", "subCategory": "tractor", "keywords": { @@ -103394,7 +103401,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_wheel-tractor-dark-front", - "path": "/models/vehicles/car-kit_wheel-tractor-dark-front.glb.glb", + "path": "/models/vehicles/car-kit_wheel-tractor-dark-front.glb", "category": "prop", "subCategory": "tractor", "keywords": { @@ -103457,7 +103464,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_wheel-tractor-front", - "path": "/models/vehicles/car-kit_wheel-tractor-front.glb.glb", + "path": "/models/vehicles/car-kit_wheel-tractor-front.glb", "category": "prop", "subCategory": "tractor", "keywords": { @@ -103521,7 +103528,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_car-kit_wheel-truck", - "path": "/models/vehicles/car-kit_wheel-truck.glb.glb", + "path": "/models/vehicles/car-kit_wheel-truck.glb", "category": "prop", "subCategory": "wheel", "keywords": { @@ -103586,7 +103593,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_CarbonFiberWheel", - "path": "/models/vehicles/CarbonFiberWheel.glb.glb", + "path": "/models/vehicles/CarbonFiberWheel.glb", "category": "prop", "subCategory": "wheel", "keywords": { @@ -103648,7 +103655,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_CarbonFibre", - "path": "/models/vehicles/CarbonFibre.glb.glb", + "path": "/models/vehicles/CarbonFibre.glb", "category": "prop", "subCategory": "panel", "keywords": { @@ -103713,7 +103720,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_CarConcept", - "path": "/models/vehicles/CarConcept.glb.glb", + "path": "/models/vehicles/CarConcept.glb", "category": "prop", "subCategory": "concept car", "keywords": { @@ -103781,7 +103788,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_CesiumMilkTruck", - "path": "/models/vehicles/CesiumMilkTruck.glb.glb", + "path": "/models/vehicles/CesiumMilkTruck.glb", "category": "prop", "subCategory": "truck", "keywords": { @@ -103844,7 +103851,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_ClearCoatCarPaint", - "path": "/models/vehicles/ClearCoatCarPaint.glb.glb", + "path": "/models/vehicles/ClearCoatCarPaint.glb", "category": "prop", "subCategory": "car paint", "keywords": { @@ -103908,7 +103915,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_fantasy-town-kit_cart", - "path": "/models/vehicles/fantasy-town-kit_cart.glb.glb", + "path": "/models/vehicles/fantasy-town-kit_cart.glb", "category": "prop", "subCategory": "cart", "keywords": { @@ -103977,7 +103984,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_fantasy-town-kit_cart-high", - "path": "/models/vehicles/fantasy-town-kit_cart-high.glb.glb", + "path": "/models/vehicles/fantasy-town-kit_cart-high.glb", "category": "prop", "subCategory": "cart", "keywords": { @@ -104045,7 +104052,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_graveyard-kit_pumpkin-carved", - "path": "/models/vehicles/graveyard-kit_pumpkin-carved.glb.glb", + "path": "/models/vehicles/graveyard-kit_pumpkin-carved.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -104112,7 +104119,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_graveyard-kit_pumpkin-tall-carved", - "path": "/models/vehicles/graveyard-kit_pumpkin-tall-carved.glb.glb", + "path": "/models/vehicles/graveyard-kit_pumpkin-tall-carved.glb", "category": "prop", "subCategory": "graveyard", "keywords": { @@ -104181,7 +104188,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_highPolyPlane", - "path": "/models/vehicles/highPolyPlane.glb.glb", + "path": "/models/vehicles/highPolyPlane.glb", "category": "prop", "subCategory": "plane", "keywords": { @@ -104244,7 +104251,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_pumpkinBucketCarved", - "path": "/models/vehicles/pumpkinBucketCarved.glb.glb", + "path": "/models/vehicles/pumpkinBucketCarved.glb", "category": "prop", "subCategory": "car", "keywords": { @@ -104311,7 +104318,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_three_js-examples_space_ship_hallway", - "path": "/models/vehicles/three.js-examples_space_ship_hallway.glb.glb", + "path": "/models/vehicles/three.js-examples_space_ship_hallway.glb", "category": "prop", "subCategory": "spaceship", "keywords": { @@ -104378,7 +104385,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "vehicles_ToyCar", - "path": "/models/vehicles/ToyCar.glb.glb", + "path": "/models/vehicles/ToyCar.glb", "category": "prop", "subCategory": "toy car", "keywords": { @@ -104443,7 +104450,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_babylon-assets_DamagedHelmet", - "path": "/models/weapons/babylon-assets_DamagedHelmet.glb.glb", + "path": "/models/weapons/babylon-assets_DamagedHelmet.glb", "category": "prop", "subCategory": "helmet", "keywords": { @@ -104510,7 +104517,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_bowlingBall", - "path": "/models/weapons/bowlingBall.glb.glb", + "path": "/models/weapons/bowlingBall.glb", "category": "prop", "subCategory": "bowling ball", "keywords": { @@ -104571,7 +104578,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_bowlingPinpin", - "path": "/models/weapons/bowlingPinpin.glb.glb", + "path": "/models/weapons/bowlingPinpin.glb", "category": "prop", "subCategory": "bowling pin", "keywords": { @@ -104632,7 +104639,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_DamagedHelmet", - "path": "/models/weapons/DamagedHelmet.glb.glb", + "path": "/models/weapons/DamagedHelmet.glb", "category": "prop", "subCategory": "helmet", "keywords": { @@ -104705,7 +104712,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_flightHelmet", - "path": "/models/weapons/flightHelmet.glb.glb", + "path": "/models/weapons/flightHelmet.glb", "category": "prop", "subCategory": "helmet", "keywords": { @@ -104768,7 +104775,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_frostAxe", - "path": "/models/weapons/frostAxe.glb.glb", + "path": "/models/weapons/frostAxe.glb", "category": "prop", "subCategory": "axe", "keywords": { @@ -104838,7 +104845,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_frostAxe_noMorph", - "path": "/models/weapons/frostAxe_noMorph.glb.glb", + "path": "/models/weapons/frostAxe_noMorph.glb", "category": "prop", "subCategory": "axe", "keywords": { @@ -104907,7 +104914,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_graveyard-kit_detail-bowl", - "path": "/models/weapons/graveyard-kit_detail-bowl.glb.glb", + "path": "/models/weapons/graveyard-kit_detail-bowl.glb", "category": "prop", "subCategory": "graveyard decor", "keywords": { @@ -104974,7 +104981,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_arrow", - "path": "/models/weapons/platformer-kit_arrow.glb.glb", + "path": "/models/weapons/platformer-kit_arrow.glb", "category": "prop", "subCategory": "arrow", "keywords": { @@ -105039,7 +105046,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_arrows", - "path": "/models/weapons/platformer-kit_arrows.glb.glb", + "path": "/models/weapons/platformer-kit_arrows.glb", "category": "prop", "subCategory": "arrow", "keywords": { @@ -105104,7 +105111,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_block-snow-large-slope-narrow", - "path": "/models/weapons/platformer-kit_block-snow-large-slope-narrow.glb.glb", + "path": "/models/weapons/platformer-kit_block-snow-large-slope-narrow.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -105165,7 +105172,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_block-snow-large-slope-steep-narrow", - "path": "/models/weapons/platformer-kit_block-snow-large-slope-steep-narrow.glb.glb", + "path": "/models/weapons/platformer-kit_block-snow-large-slope-steep-narrow.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -105227,7 +105234,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_block-snow-low-narrow", - "path": "/models/weapons/platformer-kit_block-snow-low-narrow.glb.glb", + "path": "/models/weapons/platformer-kit_block-snow-low-narrow.glb", "category": "prop", "subCategory": "block", "keywords": { @@ -105290,7 +105297,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_block-snow-narrow", - "path": "/models/weapons/platformer-kit_block-snow-narrow.glb.glb", + "path": "/models/weapons/platformer-kit_block-snow-narrow.glb", "category": "prop", "subCategory": "block", "keywords": { @@ -105353,7 +105360,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_block-snow-overhang-large-slope-narrow", - "path": "/models/weapons/platformer-kit_block-snow-overhang-large-slope-narrow.glb.glb", + "path": "/models/weapons/platformer-kit_block-snow-overhang-large-slope-narrow.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -105416,7 +105423,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_block-snow-overhang-large-slope-steep-narrow", - "path": "/models/weapons/platformer-kit_block-snow-overhang-large-slope-steep-narrow.glb.glb", + "path": "/models/weapons/platformer-kit_block-snow-overhang-large-slope-steep-narrow.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -105480,7 +105487,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_block-snow-overhang-low-narrow", - "path": "/models/weapons/platformer-kit_block-snow-overhang-low-narrow.glb.glb", + "path": "/models/weapons/platformer-kit_block-snow-overhang-low-narrow.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -105541,7 +105548,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_platformer-kit_block-snow-overhang-narrow", - "path": "/models/weapons/platformer-kit_block-snow-overhang-narrow.glb.glb", + "path": "/models/weapons/platformer-kit_block-snow-overhang-narrow.glb", "category": "structure", "subCategory": "platform", "keywords": { @@ -105602,7 +105609,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_runeSword", - "path": "/models/weapons/runeSword.glb.glb", + "path": "/models/weapons/runeSword.glb", "category": "prop", "subCategory": "sword", "keywords": { @@ -105678,7 +105685,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_stumpAxe", - "path": "/models/weapons/stumpAxe.glb.glb", + "path": "/models/weapons/stumpAxe.glb", "category": "prop", "subCategory": "axe", "keywords": { @@ -105744,7 +105751,7 @@ export const SEMANTIC_ASSETS: SemanticAsset[] = [ }, { "id": "weapons_sword_noMat", - "path": "/models/weapons/sword_noMat.glb.glb", + "path": "/models/weapons/sword_noMat.glb", "category": "prop", "subCategory": "sword", "keywords": { diff --git a/src/data/semanticAssets.ts b/src/data/semanticAssets.ts index 79c1b51..baa993b 100644 --- a/src/data/semanticAssets.ts +++ b/src/data/semanticAssets.ts @@ -6,12 +6,13 @@ */ export type AssetCategory = - | 'environment' // 환경/장소 - | 'furniture' // 가구 - | 'character' // 캐릭터 - | 'prop' // 소품 - | 'nature' // 자연물 - | 'structure'; // 구조물 + | 'environment' // 환경/장소 + | 'environment_container' // 대규모 환경 컨테이너 (v3.5 추가) + | 'furniture' // 가구 + | 'character' // 캐릭터 + | 'prop' // 소품 + | 'nature' // 자연물 + | 'structure'; // 구조물 export interface SemanticAsset { id: string; diff --git a/src/data/sfx_library.ts b/src/data/sfx_library.ts index 1c940eb..9566a90 100644 --- a/src/data/sfx_library.ts +++ b/src/data/sfx_library.ts @@ -42,68 +42,71 @@ try { } // Kenney SFX CDN (GitHub jsdelivr) -const KENNEY_SFX_CDN = 'https://cdn.jsdelivr.net/gh/KenneyNL/Assets@latest/Audio'; +// Fallback Audio CDN (Phaser Examples & Google Actions) due to KenneyNL availability issues +const PHASER_SFX_CDN = 'https://cdn.jsdelivr.net/gh/photonstorm/phaser-examples@master/examples/assets/audio/SoundEffects'; +const GOOGLE_SFX_CDN = 'https://actions.google.com/sounds/v1/cartoon'; +const KENNEY_SFX_CDN = PHASER_SFX_CDN; // Backwards compatibility for variable name export const SFX_LIBRARY: Record = { // ======================================== // 🏃‍♂️ Movement (40+) // ======================================== - 'footstep_grass_1': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep00.ogg`, category: 'movement', vol: 0.8 }, - 'footstep_grass_2': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep01.ogg`, category: 'movement', vol: 0.8 }, - 'footstep_grass_3': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep02.ogg`, category: 'movement', vol: 0.8 }, - 'footstep_grass_4': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep03.ogg`, category: 'movement', vol: 0.8 }, - 'footstep_grass_5': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep04.ogg`, category: 'movement', vol: 0.8 }, + 'footstep_grass_1': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, + 'footstep_grass_2': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, + 'footstep_grass_3': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, + 'footstep_grass_4': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, + 'footstep_grass_5': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, - 'footstep_wood_1': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep05.ogg`, category: 'movement', vol: 0.9 }, - 'footstep_wood_2': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep06.ogg`, category: 'movement', vol: 0.9 }, - 'footstep_wood_3': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep07.ogg`, category: 'movement', vol: 0.9 }, - 'footstep_wood_4': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep08.ogg`, category: 'movement', vol: 0.9 }, - 'footstep_wood_5': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep09.ogg`, category: 'movement', vol: 0.9 }, + 'footstep_wood_1': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, + 'footstep_wood_2': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, + 'footstep_wood_3': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, + 'footstep_wood_4': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, + 'footstep_wood_5': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, - 'footstep_stone_1': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/footstep00.ogg`, category: 'movement', vol: 0.8 }, + 'footstep_stone_1': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'movement', vol: 0.5 }, // ======================================== // ⚔️ Combat (50+) // ======================================== - 'sword_swing_1': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/chop00.ogg`, category: 'combat' }, - 'sword_swing_2': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/chop01.ogg`, category: 'combat' }, - 'sword_hit_1': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/chop02.ogg`, category: 'combat' }, + 'sword_swing_1': { url: `${PHASER_SFX_CDN}/alien_death1.wav`, category: 'combat' }, + 'sword_swing_2': { url: `${PHASER_SFX_CDN}/alien_death1.wav`, category: 'combat' }, + 'sword_hit_1': { url: `${PHASER_SFX_CDN}/boss_hit.wav`, category: 'combat' }, - 'impact_metal_1': { url: `${KENNEY_SFX_CDN}/Impact%20Sounds/impactMetal_000.ogg`, category: 'combat' }, - 'impact_metal_2': { url: `${KENNEY_SFX_CDN}/Impact%20Sounds/impactMetal_001.ogg`, category: 'combat' }, - 'impact_metal_3': { url: `${KENNEY_SFX_CDN}/Impact%20Sounds/impactMetal_002.ogg`, category: 'combat' }, + 'impact_metal_1': { url: `${PHASER_SFX_CDN}/boss_hit.wav`, category: 'combat' }, + 'impact_metal_2': { url: `${PHASER_SFX_CDN}/boss_hit.wav`, category: 'combat' }, + 'impact_metal_3': { url: `${PHASER_SFX_CDN}/boss_hit.wav`, category: 'combat' }, - 'impact_wood_1': { url: `${KENNEY_SFX_CDN}/Impact%20Sounds/impactWood_000.ogg`, category: 'combat' }, - 'impact_wood_2': { url: `${KENNEY_SFX_CDN}/Impact%20Sounds/impactWood_001.ogg`, category: 'combat' }, + 'impact_wood_1': { url: `${PHASER_SFX_CDN}/boss_hit.wav`, category: 'combat' }, + 'impact_wood_2': { url: `${PHASER_SFX_CDN}/boss_hit.wav`, category: 'combat' }, // ======================================== // 🖱️ UI (40+) // ======================================== - 'click_1': { url: `${KENNEY_SFX_CDN}/UI%20Audio/click1.ogg`, category: 'ui', vol: 0.5 }, - 'click_2': { url: `${KENNEY_SFX_CDN}/UI%20Audio/click2.ogg`, category: 'ui', vol: 0.5 }, - 'click_3': { url: `${KENNEY_SFX_CDN}/UI%20Audio/click3.ogg`, category: 'ui', vol: 0.5 }, - 'hover_1': { url: `${KENNEY_SFX_CDN}/UI%20Audio/rollover2.ogg`, category: 'ui', vol: 0.3 }, - 'hover_2': { url: `${KENNEY_SFX_CDN}/UI%20Audio/rollover3.ogg`, category: 'ui', vol: 0.3 }, + 'click_1': { url: `${GOOGLE_SFX_CDN}/pop.ogg`, category: 'ui', vol: 0.5 }, + 'click_2': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'ui', vol: 0.5 }, + 'click_3': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'ui', vol: 0.5 }, + 'hover_1': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'ui', vol: 0.3 }, + 'hover_2': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'ui', vol: 0.3 }, - 'confirm_1': { url: `${KENNEY_SFX_CDN}/UI%20Audio/confirmation_001.ogg`, category: 'ui' }, - 'confirm_2': { url: `${KENNEY_SFX_CDN}/UI%20Audio/confirmation_002.ogg`, category: 'ui' }, - 'back_1': { url: `${KENNEY_SFX_CDN}/UI%20Audio/back_001.ogg`, category: 'ui' }, - 'error_1': { url: `${KENNEY_SFX_CDN}/UI%20Audio/error_001.ogg`, category: 'ui' }, + 'confirm_1': { url: `${PHASER_SFX_CDN}/escape.wav`, category: 'ui' }, + 'confirm_2': { url: `${PHASER_SFX_CDN}/escape.wav`, category: 'ui' }, + 'back_1': { url: `${PHASER_SFX_CDN}/numkey.wav`, category: 'ui' }, + 'error_1': { url: `${PHASER_SFX_CDN}/squit.mp3`, category: 'ui' }, // ======================================== // ✨ Magic (20+) // ======================================== - 'spell_cast_1': { url: `${KENNEY_SFX_CDN}/Fantasy%20UI/magic00.ogg`, category: 'magic' }, - 'spell_cast_2': { url: `${KENNEY_SFX_CDN}/Fantasy%20UI/magic01.ogg`, category: 'magic' }, - 'spell_hit_1': { url: `${KENNEY_SFX_CDN}/Fantasy%20UI/spell00.ogg`, category: 'magic' }, - 'level_up': { url: `${KENNEY_SFX_CDN}/Fantasy%20UI/mission_complete.ogg`, category: 'magic', vol: 1.0 }, + 'spell_cast_1': { url: `${PHASER_SFX_CDN}/blaster.mp3`, category: 'magic' }, + 'spell_cast_2': { url: `${PHASER_SFX_CDN}/blaster.mp3`, category: 'magic' }, + 'spell_hit_1': { url: `${PHASER_SFX_CDN}/boss_hit.wav`, category: 'magic' }, + 'level_up': { url: `${PHASER_SFX_CDN}/escape.wav`, category: 'magic', vol: 1.0 }, // ======================================== // 🌍 Environment (30+) // ======================================== - 'door_open': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/doorOpen_1.ogg`, category: 'env' }, - 'door_close': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/doorClose_1.ogg`, category: 'env' }, - 'chest_open': { url: `${KENNEY_SFX_CDN}/RPG%20Audio/doorOpen_2.ogg`, category: 'env' }, + 'door_open': { url: `${PHASER_SFX_CDN}/squit.mp3`, category: 'env' }, + 'door_close': { url: `${PHASER_SFX_CDN}/squit.mp3`, category: 'env' }, + 'chest_open': { url: `${PHASER_SFX_CDN}/squit.mp3`, category: 'env' }, // ===== LOCAL SFX (자동 로드: _registry.json → build-asset-registry.ts 생성) ===== // npm run build:registry 실행 시 자동 갱신 (94개 로컬 파일) diff --git a/src/hooks/useBGMPlayer.ts b/src/hooks/useBGMPlayer.ts index 307bc67..78a9ead 100644 --- a/src/hooks/useBGMPlayer.ts +++ b/src/hooks/useBGMPlayer.ts @@ -97,8 +97,6 @@ export function useBGMPlayer(): UseBGMPlayerReturn { const handlePlay = () => setIsPlaying(true); const handlePause = () => setIsPlaying(false); - audio.addEventListener('canplaythrough', handleCanPlay); - audio.addEventListener('error', handleError); audio.addEventListener('play', handlePlay); audio.addEventListener('pause', handlePause); @@ -107,8 +105,11 @@ export function useBGMPlayer(): UseBGMPlayerReturn { audio.removeEventListener('error', handleError); audio.removeEventListener('play', handlePlay); audio.removeEventListener('pause', handlePause); + + // [Phase 3.3] 오디오 리소스 강제 해제 (Memory Leak & Pool Exhaustion 방지) audio.pause(); audio.src = ''; + audio.load(); // 스트림 중단 유도 }; }, [bgmUrl]); diff --git a/src/lib/PromptExpander.ts b/src/lib/PromptExpander.ts index 829dcd4..9c4e81d 100644 --- a/src/lib/PromptExpander.ts +++ b/src/lib/PromptExpander.ts @@ -1,4 +1,4 @@ -import { GoogleGenerativeAI } from '@google/generative-ai'; +import { GoogleGenerativeAI, Part } from '@google/generative-ai'; import { GenreId, GENRE_TEMPLATES } from '@/data/GenreTemplates'; /** @@ -18,8 +18,10 @@ export async function expandPrompt( } try { + const { getModelForTier, AIModelTier } = require('../app/api/ai/utils/gemini'); + const modelId = getModelForTier(AIModelTier.ULTRA); const genAI = new GoogleGenerativeAI(apiKey); - const model = genAI.getGenerativeModel({ model: 'gemini-2.0-flash' }); + const model = genAI.getGenerativeModel({ model: modelId }); const template = GENRE_TEMPLATES[genre]; diff --git a/src/lib/ScenePlanner.ts b/src/lib/ScenePlanner.ts index fb9fea0..73c394e 100644 --- a/src/lib/ScenePlanner.ts +++ b/src/lib/ScenePlanner.ts @@ -174,9 +174,12 @@ export async function planScene( ).join('\n'); try { + const { getModelForTier, AIModelTier } = require('../app/api/ai/utils/gemini'); + const modelId = getModelForTier(AIModelTier.PRO); const genAI = new GoogleGenerativeAI(apiKey); + // [v3.0] 공간 배치 지능 상향 const model = genAI.getGenerativeModel({ - model: 'gemini-2.0-flash', + model: modelId, generationConfig: { responseMimeType: "application/json" } }); diff --git a/src/lib/audioManager.ts b/src/lib/audioManager.ts index 48b1f56..325d0d3 100644 --- a/src/lib/audioManager.ts +++ b/src/lib/audioManager.ts @@ -17,17 +17,17 @@ class AudioManager { private bgmSources: Record = { fantasy: 'https://actions.google.com/sounds/v1/ambiences/fire.ogg', 'sci-fi': 'https://actions.google.com/sounds/v1/science_fiction/space_ambience_industrial.ogg', - horror: 'https://cdn.pixabay.com/download/audio/2022/01/18/audio_d0a13f69d2.mp3', - mystery: 'https://cdn.pixabay.com/download/audio/2022/01/18/audio_d0a13f69d2.mp3', + horror: 'https://actions.google.com/sounds/v1/ambiences/thunderstorm.ogg', + mystery: 'https://actions.google.com/sounds/v1/ambiences/wind_chimes.ogg', modern: 'https://actions.google.com/sounds/v1/ambiences/coffee_shop.ogg' }; // SFX 소스 정의 private sfxSources = { - click: 'https://cdn.pixabay.com/download/audio/2022/03/15/audio_21c8a14b0b.mp3', - success: 'https://cdn.pixabay.com/download/audio/2022/03/10/audio_c8c8a73467.mp3', - footstep: '', - pickup: 'https://cdn.pixabay.com/download/audio/2022/03/15/audio_21c8a14b0b.mp3' + click: 'https://actions.google.com/sounds/v1/cartoon/pop.ogg', + success: 'https://cdn.jsdelivr.net/gh/photonstorm/phaser-examples@master/examples/assets/audio/SoundEffects/escape.wav', + footstep: 'https://cdn.jsdelivr.net/gh/photonstorm/phaser-examples@master/examples/assets/audio/SoundEffects/numkey.wav', + pickup: 'https://cdn.jsdelivr.net/gh/photonstorm/phaser-examples@master/examples/assets/audio/SoundEffects/squit.mp3' }; // [Phase 5] SFX 사전 로드된 인스턴스 풀 (매번 new Howl() 생성 방지) @@ -71,14 +71,14 @@ class AudioManager { public playBGM(genre: string) { if (this.currentGenre === genre) return; - // 이전 BGM 페이드 아웃 + // 이전 BGM 페이드 아웃 및 즉시 언로드 예약 if (this.bgm) { const oldBgm = this.bgm; - oldBgm.fade(0.5, 0, 1000); + oldBgm.fade(oldBgm.volume(), 0, 500); // 페이드 시간을 당겨 더 빨리 해제 setTimeout(() => { oldBgm.stop(); - oldBgm.unload(); // [Phase 5] 이전 인스턴스 메모리 해제 - }, 1000); + oldBgm.unload(); // [Phase 5] 강제 언로드로 Audio Pool 확보 + }, 550); } const targetGenre = (Object.keys(this.bgmSources).includes(genre) ? genre : 'modern') as Genre; @@ -89,26 +89,29 @@ class AudioManager { this.bgm = new Howl({ src: [src], - html5: true, + html5: true, // BGM은 스트리밍을 위해 html5 유지 loop: true, volume: 0, onloaderror: (_id, err) => console.warn(`[Audio] BGM 로드 실패: ${err}`), - onplayerror: (_id, err) => console.warn(`[Audio] BGM 재생 실패: ${err}`) + onplayerror: (_id, err) => { + console.warn(`[Audio] BGM 재생 실패 (Autoplay?): ${err}`); + // 재생 실패 시 사용자 상호작용 후 재시도할 수 있도록 상태 유지 + } }); this.bgm.play(); this.bgm.fade(0, 0.5, 1000); - console.log(`[Audio] BGM 재생: ${targetGenre}`); + console.log(`[Audio] BGM 재생 시작: ${targetGenre}`); } public playBGMFromUrl(url: string) { if (this.bgm) { const oldBgm = this.bgm; - oldBgm.fade(0.5, 0, 1000); + oldBgm.fade(oldBgm.volume(), 0, 500); setTimeout(() => { oldBgm.stop(); oldBgm.unload(); // [Phase 5] 메모리 해제 - }, 1000); + }, 550); } this.bgm = new Howl({ @@ -155,6 +158,31 @@ class AudioManager { public setVolume(vol: number) { Howler.volume(vol); } + + /** + * [Phase 5] 리소스 해제 (씬 전환 시 호출 권장) + * 모든 BGM 및 SFX 인스턴스를 언로드하여 Audio Pool 고갈 방지 + */ + public dispose() { + console.log('[Audio] 모든 오디오 리소스 해제 중...'); + + // BGM 해제 + if (this.bgm) { + this.bgm.stop(); + this.bgm.unload(); + this.bgm = null; + } + + // SFX 풀 해제 + this.sfxPool.forEach((howl) => { + howl.stop(); + howl.unload(); + }); + this.sfxPool.clear(); + + this.currentGenre = null; + console.log('[Audio] 오디오 리소스 정리 완료'); + } } export const audioManager = AudioManager.getInstance(); diff --git a/src/lib/geometry/OBBCollisionSystem.ts b/src/lib/geometry/OBBCollisionSystem.ts index 82f1a12..2722677 100644 --- a/src/lib/geometry/OBBCollisionSystem.ts +++ b/src/lib/geometry/OBBCollisionSystem.ts @@ -191,10 +191,11 @@ export function checkOBBCollision(a: OBB, b: OBB): SATCollisionResult { const distance = Math.abs(centerDiff.dot(axis)); // 간격 = 거리 - (A 반경 + B 반경) + // [Phase 4] 미세 오차 허용 (0.001단위 겹침은 무시) const gap = distance - (radiusA + radiusB); // 간격이 0보다 크면 분리됨 (충돌 없음) - if (gap > 0) { + if (gap > -0.001) { return { collides: false }; } @@ -315,10 +316,11 @@ export class OBBCollisionManager { } // MTV 적용하여 새 위치 반환 + // [Phase 4] 해결 후 아주 미세하게 더 밀어내어 재충돌 방지 return [ - position[0] + totalMTV.x, - position[1] + totalMTV.y, - position[2] + totalMTV.z, + position[0] + totalMTV.x * 1.002, + position[1] + totalMTV.y * 1.002, + position[2] + totalMTV.z * 1.002, ]; } diff --git a/src/lib/schema/nsse-constraints.ts b/src/lib/schema/nsse-constraints.ts index 5885f28..5103ed8 100644 --- a/src/lib/schema/nsse-constraints.ts +++ b/src/lib/schema/nsse-constraints.ts @@ -138,6 +138,22 @@ export const ROLE_PHYSICAL_RULES: Record = { // 카테고리 매칭 우선순위 (긴 키워드 → 짧은 키워드, 오분류 방지) const CATEGORY_PRIORITY: string[] = [ // 복합어 / 구체적 카테고리 (오분류 위험 낮음) + 'knight', 'paladin', 'hero', 'warrior', // 인격체 최우선 'bookshelf', 'tombstone', 'graveyard', 'mushroom', 'campfire', 'character', 'creature', 'environment', 'building', 'terrain', 'boulder', 'vehicle', 'cabinet', 'cottage', - 'village', 'knight', + 'village', // 중간 길이 'castle', 'bridge', 'flower', 'shield', 'scroll', 'potion', 'barrel', 'dragon', 'horse', 'chest', 'crate', 'tower', diff --git a/src/services/VectorSearchService.ts b/src/services/VectorSearchService.ts index 3133d13..0e06990 100644 --- a/src/services/VectorSearchService.ts +++ b/src/services/VectorSearchService.ts @@ -13,8 +13,9 @@ */ import { GoogleGenerativeAI } from '@google/generative-ai'; -import { SEMANTIC_ASSETS, SemanticAsset } from '@/data/semanticAssets.generated'; -import { LexicalSearchService, LexicalSearchResult } from './search/LexicalSearchService'; +import { SEMANTIC_ASSETS, SemanticAsset, AssetCategory } from '@/data/semanticAssets.generated'; +import { CATEGORY_SCALE_TABLE, KEYWORD_CATEGORY_MAP } from '@/config/ScaleNormalizationConfig'; +import { LexicalSearchService, LexicalSearchResult, isBlacklistedPath } from './search/LexicalSearchService'; import { AssetSearchCache } from './SemanticCacheService'; @@ -46,24 +47,6 @@ export interface HybridSearchResult extends SearchResult { // RRF 하이퍼파라미터 (Elasticsearch 기본값: 60) const RRF_K = 60; -// ============================================================ -// 블랙리스트 경로 패턴 - 테스트 파일 및 내부용 에셋 제외 -// ============================================================ -const ASSET_PATH_BLACKLIST = [ - '_test_data', - 'test_', - 'debug_', - '/temp/', -]; - -/** - * 블랙리스트 경로 확인 - */ -function isBlacklistedPath(path: string): boolean { - const lowerPath = path.toLowerCase(); - return ASSET_PATH_BLACKLIST.some(pattern => lowerPath.includes(pattern.toLowerCase())); -} - // ============================================================ // Vector Search Service // ============================================================ @@ -394,10 +377,10 @@ class VectorSearchServiceClass { score *= 1.3; } - // [v3] 카테고리 불일치 페널티: 추론된 카테고리와 완전히 다르면 ×0.5 + // [v3] 카테고리 불일치 페널티: 추론된 카테고리와 완전히 다르면 강력한 페널티 (×0.2) // 하드코딩 없이 기존 inferCategoryFromQuery 결과만 활용 if (inferredCategory && asset.category !== inferredCategory && score > 0) { - score *= 0.5; + score *= 0.2; } return { asset, score, matchCount: score }; @@ -597,25 +580,47 @@ class VectorSearchServiceClass { * [Phase 3] 정확 매칭 우선 처리 추가 * [Phase 4] 시맨틱 캐시 통합 (접근법 D) */ - async findBestHybridMatch(concept: string, roleHint?: string): Promise { + async findBestHybridMatch(concept: string, roleHint?: string, theme?: string): Promise { // [Phase 6] role 기반 카테고리 필터 — character 에셋이 non-character 개념에 매핑되는 것을 방지 - const isCharacterRole = roleHint && ['character', 'npc', 'hero_character'].includes(roleHint.toLowerCase()); + const lowerRole = roleHint?.toLowerCase() || ''; + const isCharacterRole = ['character', 'npc', 'hero_character'].includes(lowerRole); + const isStructureRole = ['structure', 'environment_container', 'building'].includes(lowerRole); // [Phase 4] 시맨틱 캐시 조회 먼저 시도 const cacheResult = await AssetSearchCache.lookup(concept); if (cacheResult.hit && cacheResult.value) { const cached = cacheResult.value; const asset = SEMANTIC_ASSETS.find(a => a.path === cached.assetPath); if (asset) { - console.log(`[HybridSearch] 🚀 캐시 HIT: "${concept}" → ${asset.id} (${cacheResult.responseTimeMs}ms)`); - return { - asset, - score: cached.score, - confidence: cached.score, - vectorRank: 1, - lexicalRank: 1, - rrfScore: cached.score, - matchedTerms: [concept], - }; + // [v3.4 Fix] 캐시된 결과도 현재 roleHint와 상충하는지 최소한의 검증 수행 + if (asset.category === 'character' && !isCharacterRole) { + const conceptLower = concept.toLowerCase(); + const isLivingConcept = ['knight', 'paladin', 'warrior', 'elf', 'human', 'npc', 'hero', 'creature', 'monster', '기사', '용사', '전사', '엘프', '인간', '괴물'].some(k => conceptLower.includes(k)); + if (!isLivingConcept) { + console.log(`[HybridSearch] ⚠️ 캐시된 character 에셋이 부적절한 쿼리에 매핑됨 - 무시: ${asset.id}`); + } else { + console.log(`[HybridSearch] 🚀 캐시 HIT (캐릭터 예외): "${concept}" → ${asset.id}`); + return { + asset, + score: cached.score, + confidence: cached.score, + vectorRank: 1, + lexicalRank: 1, + rrfScore: cached.score, + matchedTerms: [concept], + }; + } + } else { + console.log(`[HybridSearch] 🚀 캐시 HIT: "${concept}" → ${asset.id} (${cacheResult.responseTimeMs}ms)`); + return { + asset, + score: cached.score, + confidence: cached.score, + vectorRank: 1, + lexicalRank: 1, + rrfScore: cached.score, + matchedTerms: [concept], + }; + } } } @@ -656,6 +661,22 @@ class VectorSearchServiceClass { if (exactMatch && !isBlacklistedPath(exactMatch.path)) { // [Phase 6] 정확 매칭에도 character 카테고리 필터 적용 if (exactMatch.category === 'character' && !isCharacterRole) { + // [v3.4 Fix] 쿼리에 명시적인 인격체 키워드가 있으면 허용 + const conceptLower = concept.toLowerCase(); + const isLivingConcept = ['knight', 'warrior', 'npc', 'elf', 'human', 'hero', 'paladin', '기사', '전사', '엘프', '인간', '용사'].some(k => conceptLower.includes(k)); + + if (isLivingConcept) { + console.log(`[HybridSearch] 🎯 정확 매칭 발견 (캐릭터 예외 허용): "${concept}" → ${exactMatch.id}`); + return { + asset: exactMatch, + score: 1.0, + confidence: 1.0, + vectorRank: 1, + lexicalRank: 1, + rrfScore: 1.0, + matchedTerms: [concept], + }; + } console.log(`[HybridSearch] 🚫 정확 매칭 character 필터링: ${exactMatch.id} (role: ${roleHint || 'unknown'})`); } else { console.log(`[HybridSearch] 🎯 정확 매칭 발견: "${concept}" → ${exactMatch.id} (path: ${exactMatch.path})`); @@ -674,17 +695,126 @@ class VectorSearchServiceClass { // 일반 하이브리드 검색 const allResults = await this.hybridSearch(concept, 10); - // 블랙리스트 경로 제외 + [Phase 6] character 카테고리 필터링 - const filteredResults = allResults.filter(r => { - if (isBlacklistedPath(r.asset.path)) return false; - // character 카테고리 에셋은 role이 명시적으로 character/npc일 때만 허용 - if (r.asset.category === 'character' && !isCharacterRole) { - console.log(`[HybridSearch] 🚫 character 에셋 필터링: ${r.asset.id} (role: ${roleHint || 'unknown'})`); - return false; + // [v3.4] 구조물/환경 vs 프롭 정합성 강화 (category와 query 의도 교차 검증용 정규식) + const conceptLower = concept.toLowerCase(); + const isQueryAskingForEnvironment = conceptLower.match(/(field|plain|ocean|forest|desert|valley|landscape|terrain|nature|world|ground|들판|평원|바다|숲|사막|계곡|대지|지형|자연|월드|바닥)/i); + const isQueryAskingForStructure = conceptLower.match(/(gate|castle|tower|building|fall|structure|wall|gate|temple|monument|pavilion|고성|성문|구조물|빌딩|건물|폭포|사원|기념비|루)/i); + const isQueryAskingForSmallProp = conceptLower.match(/(dagger|sword|potion|key|coin|item|prop|box|chest|book|scroll|chalice|gem|ring|단검|칼|포션|열쇠|금화|소품|박스|상자|책|스크롤|성배|보석|반지)/i); + + // 블랙리스트 경로 제외 + [Phase 6] 역할 기반 필터링 및 가중치 조정 + const filteredResults = allResults.filter((r: HybridSearchResult) => { + if (!r || !r.asset) return false; + + const assetPath = r.asset.path || ''; + if (isBlacklistedPath(assetPath)) return false; + + const assetCategory = r.asset.category; + const assetTags = [...(r.asset.keywords?.ko || []), ...(r.asset.keywords?.en || []), ...(r.asset.tags || [])].map((t: string) => t.toLowerCase()); + + // [v3.5+ VAM] Volume-Aware Matching: 쿼리 의도와 에셋 스케일의 물리적 정합성 검증 + const targetScale = this.inferTargetScale(concept); + // 1순위: 에셋에 명시된 physical_scale, 2순위: 카테고리별 기본 스케일 테이블 + // physical_scale은 SemanticAsset 인터페이스에 optional로 존재함 + const assetScale = (r.asset as any).physical_scale || CATEGORY_SCALE_TABLE[assetCategory as keyof typeof CATEGORY_SCALE_TABLE] || 1.0; + + // [v3.1] 캐릭터 필터링 완화: + // 드래곤(dragon), 몬스터(monster) 등 생명체 에셋이 캐릭터 카테고리일 경우, + // 쿼리(concept)에 해당 키워드가 포함되어 있다면 roleHint가 없더라도 허용. + if (assetCategory === 'character' && !isCharacterRole) { + const conceptLower = concept.toLowerCase(); + // [v3.4 Fix] 캐릭터 지칭 키워드 리스트 강화 (기사, 병사 등 추가) + const isLivingConcept = ['dragon', 'monster', 'creature', 'animal', 'knight', 'warrior', 'soldier', 'npc', 'paladin', 'elf', 'human', '용', '괴물', '생물', '동물', '기사', '전사', '병사', '인간'].some(k => conceptLower.includes(k)); + const hasLivingTag = assetTags.some(t => ['living', 'creature', 'humanoid', 'character', 'dragon', 'knight', 'npc'].includes(t)); + + if (isLivingConcept || hasLivingTag) { + console.log(`[HybridSearch] 🐉 캐릭터 필터링 예외 허용: ${r.asset.id}`); + r.rrfScore *= 0.9; // 페널티 감소 (0.8 -> 0.9) + } else { + console.log(`[HybridSearch] 🚫 character 에셋 필터링: ${r.asset.id} (role: ${roleHint || 'unknown'})`); + return false; + } + } + + // [v3.5+ VAM] 물리적 스케일 기반 정합성 검증 (Scale Ratio) + // 스케일 차이가 10배 이상 나면 강력한 페널티 (예: 0.3m 소품 vs 45m 대형 환경) + const scaleRatio = Math.max(targetScale, assetScale) / Math.min(targetScale, assetScale); + + if (scaleRatio > 10) { + const isQuerySmall = targetScale < 1.0; + const isAssetLarge = assetScale > 5.0; + const isQueryLarge = targetScale > 5.0; + const isAssetSmall = assetScale < 1.0; + + if ((isQuerySmall && isAssetLarge) || (isQueryLarge && isAssetSmall)) { + r.rrfScore *= 0.0001; // 거의 차단 수준 + r.confidence *= 0.0001; + console.log(`[HybridSearch] 📏 VAM 차단: ${r.asset.id} (Scale Ratio: ${scaleRatio.toFixed(1)}x, Query: ${concept})`); + } + } + + // [v3.4] 구조물/환경 vs 프롭 정합성 강화 (키워드 기반 가중합산 가속) + if (assetCategory === 'environment_container' || assetCategory === 'environment') { + if (isQueryAskingForEnvironment) { + r.rrfScore *= 1.5; + r.confidence = Math.min(r.confidence * 1.5, 1.0); + } + } else if (assetCategory === 'structure') { + if (isStructureRole || isQueryAskingForStructure) { + r.rrfScore *= 1.4; + r.confidence = Math.min(r.confidence * 1.4, 1.0); + } + } else if (assetCategory === 'prop') { + if (isQueryAskingForSmallProp) { + r.rrfScore *= 1.2; + } } return true; }); + // [v3] ThemeGuard: 현재 씬의 장르(theme)와 에셋의 스타일이 일치하는지 검사 + if (theme && filteredResults.length > 0) { + const normalizedTheme = theme.toLowerCase(); + filteredResults.forEach(r => { + const style = (r.asset as any).style?.toLowerCase() || ''; + const tags = [...r.asset.keywords.ko, ...r.asset.keywords.en].map((k: string) => k.toLowerCase()); + + // 테마 일치 시 보너스 (1.5배) + if (style === normalizedTheme || tags.includes(normalizedTheme)) { + r.rrfScore *= 1.5; + r.confidence = Math.min(r.confidence * 1.5, 1.0); + } + // 테마 불일치(상충) 시 페널티 (0.2배로 강화) + else if (normalizedTheme === 'urban' && (style === 'fantasy' || tags.includes('fantasy'))) { + r.rrfScore *= 0.2; + r.confidence *= 0.2; + } + else if (normalizedTheme === 'fantasy' && (style === 'sci-fi' || tags.includes('sci-fi') || style === 'urban')) { + r.rrfScore *= 0.2; + r.confidence *= 0.2; + } + // [v3.4] Hell/Fantasy 테마 대형 구조물(Gate/Castle) 정합성 강화 및 Dagger 오매칭 방지 + else if ((normalizedTheme === 'hell' || normalizedTheme === 'fantasy') && + (concept.toLowerCase().match(/(gate|castle|tower|temple|monument)/i))) { + // 쿼리가 대형 구조물을 지칭하는데 dagger, sword 등 무기류가 매칭되면 원천 차단에 가까운 페널티 + const isWeaponOrSmallItem = tags.some(t => ['dagger', 'sword', 'blade', 'arrow', 'potion', 'key', 'coin', '단검', '검'].includes(t.toLowerCase())); + if (isWeaponOrSmallItem) { + console.log(`[HybridSearch] 🚫 쿼리(${concept}) vs 에셋(${r.asset.id}) 불일치 차단: ${normalizedTheme} 구조물 자리에 소품 매칭됨`); + r.rrfScore *= 0.001; + r.confidence *= 0.001; + } + } + // Hell 테마에서 Lava 쿼리에 단검이 매칭되는 경우 방지 + else if (normalizedTheme === 'hell' && concept.toLowerCase().includes('lava')) { + if (tags.some(t => ['dagger', 'dagger', 'weapon'].includes(t.toLowerCase()))) { + r.rrfScore *= 0.01; + console.log(`[HybridSearch] 🚫 Lava 쿼리에 단검 매칭 차단: ${r.asset.id}`); + } + } + }); + // 점수에 따라 재정렬 + filteredResults.sort((a, b) => b.rrfScore - a.rrfScore); + } + if (filteredResults.length > 0) { const bestResult = filteredResults[0]; console.log(`[HybridSearch] 최적 매칭: ${bestResult.asset.id} (RRF: ${bestResult.rrfScore.toFixed(4)}, category: ${bestResult.asset.category})`); @@ -885,6 +1015,22 @@ class VectorSearchServiceClass { return results[0].score > 0 ? results[0].skybox.url : null; } + + /** + * [v3.5+ VAM] 쿼리 키워드로부터 목표 물리 스케일 추론 + */ + private inferTargetScale(query: string): number { + const queryLower = query.toLowerCase(); + + // ScaleNormalizationConfig의 키워드 맵 활용 + for (const [category, keywords] of Object.entries(KEYWORD_CATEGORY_MAP) as [string, string[]][]) { + if (keywords.some((k: string) => queryLower.includes(k.toLowerCase()))) { + return CATEGORY_SCALE_TABLE[category as AssetCategory] || 1.0; + } + } + + return 1.0; // 기본값 1m + } } // 싱글톤 인스턴스 diff --git a/src/services/a2a/VisualCriticAgent.ts b/src/services/a2a/VisualCriticAgent.ts index 6cdd96c..5eeb355 100644 --- a/src/services/a2a/VisualCriticAgent.ts +++ b/src/services/a2a/VisualCriticAgent.ts @@ -105,7 +105,7 @@ export class VisualCriticAgent extends BaseAgent { } try { - const model = this.genAI.getGenerativeModel({ model: 'gemini-2.0-flash-exp' }); + const model = this.genAI.getGenerativeModel({ model: 'gemini-2.0-pro' }); const base64Image = typeof imageData === 'string' ? imageData diff --git a/src/services/ai-pipeline/AIPipelineOrchestrator.ts b/src/services/ai-pipeline/AIPipelineOrchestrator.ts index 561c493..2be5740 100644 --- a/src/services/ai-pipeline/AIPipelineOrchestrator.ts +++ b/src/services/ai-pipeline/AIPipelineOrchestrator.ts @@ -27,6 +27,10 @@ import { createDefaultConstraints } from '@/lib/schema/nsse-constraints'; import { AssetBoundingBoxService } from './AssetBoundingBoxService'; import { SkyboxDecisionService } from './SkyboxDecisionService'; import { MissingResourceTracker } from '../MissingResourceTracker'; +import { PhysicsScatteringService, ScatteringObject } from './PhysicsScatteringService'; +import { VLMFeedbackService, VLMFeedback } from './VLMFeedbackService'; +import { PBRMaterialConverter } from './PBRMaterialConverter'; +import { NavMeshGenerationService, NavMeshResult } from './NavMeshGenerationService'; import * as THREE from 'three'; // ============================================================ @@ -55,6 +59,7 @@ export interface PipelineResult { // [IAOS] Skybox 자동 적용 skyboxUrl?: string; environmentType: 'outdoor' | 'indoor' | 'unknown'; // [IAOS] AI 결정 환경 타입 + navMesh?: NavMeshResult; // [v4.0] 내비게이션 데이터 stages: PipelineProgress[]; totalDuration: number; error?: string; @@ -107,6 +112,14 @@ export class AIPipelineOrchestrator { // [MissingResourceTracker] 현재 프롬프트 컨텍스트 설정 MissingResourceTracker.getInstance().setCurrentPrompt(userPrompt); + // [AssetRegistry Init] 에셋 레지스트리 로드 보장 (레이스 컨디션 해결) + try { + const { initializeAssetRegistry } = await import('../../data/AssetRegistry'); + await initializeAssetRegistry(); + } catch (e) { + console.warn('[Pipeline] AssetRegistry 초기화 실패:', e); + } + // [Vector Search Init] 시맨틱 검색 초기화 if (!VectorSearchService.initialized) { console.log('[Pipeline] Vector Search Service 초기화 중...'); @@ -515,9 +528,22 @@ export class AIPipelineOrchestrator { stages.push({ stage: 3, stageName: 'Scale Validation', status: 'completed' }); // ──────────────────────────────────────────────── - // Stage 4: Semantic Role Placement (시맨틱 역할 기반 배치) + // Stage 4: Semantic Role Placement (계층형 NSSE 배치) // ──────────────────────────────────────────────── - this.updateProgress(4, 'Semantic Role Placement', 'running'); + this.updateProgress(4, 'Hierarchical Semantic Placement', 'running'); + + const nsseService = getNSSEIntegrationService(); + nsseService.clear(); + + // 1. 컨테이너와 일반 오브젝트 분리 + const containers = placeableObjects.filter(obj => + obj.semanticRole === 'environment_container' || obj.semanticRole === 'sub_container' + ); + const otherObjects = placeableObjects.filter(obj => + obj.semanticRole !== 'environment_container' && obj.semanticRole !== 'sub_container' + ); + + const intermediatePlaced: any[] = []; // 메인 컨테이너 바운딩 박스 계산 const containerBounds = mainContainer ? { @@ -525,38 +551,95 @@ export class AIPipelineOrchestrator { max: [mainContainerScale / 2, mainContainerScale * 0.6, mainContainerScale / 2] as [number, number, number], } : null; - // 각 오브젝트에 시맨틱 역할 기반 위치 적용 - const placedObjects = placeableObjects.map(obj => { - const semanticRole = obj.semanticRole || 'unspecified'; - const placementHint = obj.placementHint; - - // MCTSPlacementService의 시맨틱 배치 로직 활용 + // 2. 컨테이너 우선 배치 및 서비스 등록 + for (const container of containers) { const position = MCTSPlacementService.applySemanticRolePlacement( - semanticRole, + container.semanticRole, containerBounds, - obj.scale, - placementHint + container.scale, + container.placementHint ); - return { - ...obj, + // 컨테이너 경계 등록 + const bounds = new THREE.Box3( + new THREE.Vector3(position[0] - container.scale[0] / 2, position[1], position[2] - container.scale[2] / 2), + new THREE.Vector3(position[0] + container.scale[0] / 2, position[1] + container.scale[1], position[2] + container.scale[2] / 2) + ); + nsseService.registerContainer(container.id, bounds); + + intermediatePlaced.push({ + ...container, position, - semanticRole, - }; - }); + semanticRole: container.semanticRole + }); + } - this.updateProgress(4, 'Semantic Role Placement', 'completed', - `${placedObjects.length}개 배치 완료`); - stages.push({ stage: 4, stageName: 'Semantic Role Placement', status: 'completed' }); + // 3. 하위 오브젝트 배치 (부모 제약 조건 반영) + for (const obj of otherObjects) { + const semanticRole = obj.semanticRole || 'unspecified'; - const totalDuration = Date.now() - startTime; + // NSSE 제약 조건 준비 (부모 유무에 따라 영역 자동 결정) + const prepared = nsseService.prepareConstraints( + obj.id, + obj.name, + semanticRole as any, + obj.parentId, + obj.placementHint as any + ); - console.log('='.repeat(60)); - console.log(`[NSSE] 완료! 소요 시간: ${totalDuration}ms`); - console.log(`[NSSE] 오브젝트: ${placedObjects.length}`); - console.log(`[NSSE] 공간 관계: ${relationCount}`); - console.log(`[NSSE] 스케일 유효성: ${validCount}/${totalCount}`); - console.log('='.repeat(60)); + // 부모 영역 내에서 샘플링 (기본적으로 중심에서 랜덤 오프셋) + const center = new THREE.Vector3(); + prepared.constraints.searchVolume.getCenter(center); + + const size = new THREE.Vector3(); + prepared.constraints.searchVolume.getSize(size); + + // 랜덤 XZ 오프셋 + center.x += (Math.random() - 0.5) * size.x * 0.8; + center.z += (Math.random() - 0.5) * size.z * 0.8; + + // 시맨틱 역할 기반 Y 조정 및 클램핑 + const finalPos = nsseService.applySemanticRolePlacement(center, prepared.constraints); + + intermediatePlaced.push({ + ...obj, + position: [finalPos.x, finalPos.y, finalPos.z], + semanticRole + }); + } + + const placedObjects = intermediatePlaced; + + this.updateProgress(4, 'Hierarchical Semantic Placement', 'completed', + `${placedObjects.length}개 계층형 배치 완료`); + stages.push({ stage: 4, stageName: 'Hierarchical Semantic Placement', status: 'completed' }); + + // ──────────────────────────────────────────────── + // [v4.0] Stage 5: Physics Scattering (물리 안정화) + // ──────────────────────────────────────────────── + this.updateProgress(5, 'Physics Scattering', 'running'); + const scatteringService = new PhysicsScatteringService(); + + // 물리 연산을 위한 데이터 변환 + const objectsForScattering: ScatteringObject[] = placedObjects.map(obj => ({ + id: obj.id, + position: obj.position, + rotation: [0, Math.random() * Math.PI * 2, 0], // 초기 랜덤 회전 + scale: obj.scale + })); + + const stabilizedObjects = await scatteringService.simulateScattering(objectsForScattering); + + // 물리 안정화 결과 반영 + const finalPlacedObjects = placedObjects.map((obj, i) => ({ + ...obj, + position: stabilizedObjects[i].position + })); + + this.updateProgress(5, 'Physics Scattering', 'completed', '물리적 겹침 해결 및 안착 완료'); + stages.push({ stage: 5, stageName: 'Physics Scattering', status: 'completed' }); + + const totalDuration = Date.now() - startTime; // [MissingResourceTracker] 누락 리소스 디스크 저장 await MissingResourceTracker.getInstance().flush(); @@ -570,7 +653,7 @@ export class AIPipelineOrchestrator { iterations: 1, placement_time_ms: totalDuration, }, - objects: placedObjects.map(obj => ({ + objects: finalPlacedObjects.map(obj => ({ zone_id: 'main', concept: obj.name, asset_id: obj.id, @@ -583,11 +666,21 @@ export class AIPipelineOrchestrator { })), }; + // ──────────────────────────────────────────────── + // [v4.0] Stage 11: NavMesh Generation (이동 가능 영역 계산) + // ──────────────────────────────────────────────── + this.updateProgress(11, 'NavMesh Generation', 'running'); + const navMesh = NavMeshGenerationService.generateGrid(placementResult, 0.5, mainContainerScale); + this.updateProgress(11, 'NavMesh Generation', 'completed', + `이동 가능 영역: ${(navMesh.walkableAreaRatio * 100).toFixed(1)}%`); + stages.push({ stage: 11, stageName: 'NavMesh Generation', status: 'completed' }); + return { success: true, unifiedSceneResult: unifiedResult, inferenceResult, placementResult, + navMesh, stages, totalDuration, environmentType: 'outdoor', // NSSE는 기본 야외 @@ -606,6 +699,137 @@ export class AIPipelineOrchestrator { }; } } + + /** + * [v4.0] MACR (AI 비평가 루프) 포함 씬 생성 및 검증 + * 1. 씬 생성 + * 2. 렌더링 대기 (UI 호출 필요) + * 3. VLM 분석 및 피드백 + */ + async executeWithMACR(userPrompt: string): Promise { + // 1. 기본 생성 (NSSE + Physics) + const result = await this.executeNeuroSymbolic(userPrompt); + if (!result.success) return result; + + try { + this.updateProgress(9, 'Visual Feedback (VLM)', 'pending', '화면 캡처 대기 중...'); + + const vlmService = new VLMFeedbackService(); + + // [Critical] 여기서는 캔버스 캡처를 위해 잠시 대기 + await new Promise(r => setTimeout(r, 1500)); // 렌더링 유예 시간 증대 (1.5s) + + const imageBase64 = await vlmService.captureFromCanvas(); + this.updateProgress(9, 'Visual Feedback (VLM)', 'running', 'Gemini 분석 중...'); + + const feedback = await vlmService.analyzeScene(imageBase64, userPrompt); + + this.updateProgress(9, 'Visual Feedback (VLM)', 'completed', + `점수: ${feedback.overallScore} | 제안: ${feedback.suggestions.length}건`); + + // ──────────────────────────────────────────────── + // [v4.0] Stage 10: Auto-Fix (자율 교정) + // ──────────────────────────────────────────────── + if (feedback.overallScore < 85 && feedback.suggestions.length > 0) { + this.updateProgress(10, 'Auto-Fix (Closed-loop)', 'running', '피드백 기반 자동 수정 중...'); + + const fixedResult = this.autoFixScene(result, feedback); + + this.updateProgress(10, 'Auto-Fix (Closed-loop)', 'completed', + `교정 완료 (suggestions ${feedback.suggestions.length}건 반영)`); + + return { + ...fixedResult, + feedback + }; + } + + return { + ...result, + feedback + }; + + } catch (err) { + console.warn('[MACR] 피드백 단계 건너뜀:', err); + return result; + } + } + + /** + * [v4.0] Stage 10: Auto-Fix 핵심 로직 + * VLM 피드백의 Actionable 제안을 씬 데이터에 반영 + */ + private autoFixScene(result: PipelineResult, feedback: VLMFeedback): PipelineResult { + if (!result.placementResult) return result; + + const updatedObjects = [...result.placementResult.objects]; + let fixCount = 0; + + for (const suggestion of feedback.suggestions) { + if (!suggestion.action) continue; + + const { type, targetId, action } = suggestion; + + // 1. 특정 오브젝트 배치 보정 (Nudge) + if (type === 'placement' && targetId && action.nudge) { + const objIndex = updatedObjects.findIndex(o => o.asset_id === targetId); + if (objIndex !== -1) { + const obj = updatedObjects[objIndex]; + updatedObjects[objIndex] = { + ...obj, + position: [ + obj.position[0] + action.nudge[0], + obj.position[1] + action.nudge[1], + obj.position[2] + action.nudge[2] + ] + }; + fixCount++; + console.log(`[Auto-Fix] Nudged object ${targetId} by ${action.nudge}`); + } + } + + // 2. 스케일 보정 + if (type === 'scale' && targetId && action.scaleMultiplier) { + const objIndex = updatedObjects.findIndex(o => o.asset_id === targetId); + if (objIndex !== -1) { + const obj = updatedObjects[objIndex]; + updatedObjects[objIndex] = { + ...obj, + scale: [ + obj.scale[0] * action.scaleMultiplier, + obj.scale[1] * action.scaleMultiplier, + obj.scale[2] * action.scaleMultiplier + ] + }; + fixCount++; + console.log(`[Auto-Fix] Rescaled object ${targetId} by ${action.scaleMultiplier}`); + } + } + + // 3. 분위기/환경 보정 (Atmosphere/Post-processing) + if (type === 'atmosphere' && action) { + if (action.intensity !== undefined) { + console.log(`[Auto-Fix] Atmosphere enhancement suggested: Intensity ${action.intensity}`); + } + } + + // 4. 조명 보정 (Lighting) + if (type === 'lighting' && action.intensity !== undefined) { + console.log(`[Auto-Fix] Lighting adjustment suggested: Intensity ${action.intensity}`); + } + } + + // [Note] 조명 강도(intensity) 등은 전역 상태나 Renderer 레벨에서의 처리가 필요하므로 + // 여기서는 로그를 남기고, 추후 통합 스토어 액션으로 연동할 수 있도록 설계합니다. + + return { + ...result, + placementResult: { + ...result.placementResult, + objects: updatedObjects + } + }; + } } // 기본 인스턴스 내보내기 diff --git a/src/services/ai-pipeline/AssetIntelligenceService.ts b/src/services/ai-pipeline/AssetIntelligenceService.ts index 35ee6d7..e202937 100644 --- a/src/services/ai-pipeline/AssetIntelligenceService.ts +++ b/src/services/ai-pipeline/AssetIntelligenceService.ts @@ -25,6 +25,8 @@ export const AssetRoleSchema = z.enum([ 'framing', // 프레이밍 요소 (구도 완성) 'ambient', // 환경 요소 (배경 채우기) 'interactive', // 상호작용 가능 요소 + 'character', // 캐릭터 / 생물 + 'structure', // 대형 구조물 / 건물 ]); /** @@ -121,7 +123,7 @@ Generate a JSON object with the following structure: "concept": "", "search_keywords": ["<3-5 keywords for semantic search>"], "count": <1-10>, - "role": "", + "role": "", "priority": <1-10, higher = place first>, "size_hint": "", "material_hint": "" diff --git a/src/services/ai-pipeline/AssetRetrievalService.ts b/src/services/ai-pipeline/AssetRetrievalService.ts index abb9338..64732fc 100644 --- a/src/services/ai-pipeline/AssetRetrievalService.ts +++ b/src/services/ai-pipeline/AssetRetrievalService.ts @@ -222,7 +222,7 @@ export const AssetRetrievalService = { for (const assetConcept of zonePlan.assets) { // 각 개념에 대해 count만큼 에셋 검색 for (let i = 0; i < assetConcept.count; i++) { - const retrieved = await AssetRetrievalService.retrieveSingleAsset(assetConcept, i); + const retrieved = await AssetRetrievalService.retrieveSingleAsset(assetConcept, i, zonePlan.zone_name); // zone_name이나 theme 정보를 활용 가능 assets.push(retrieved); // 통계 업데이트 @@ -253,13 +253,15 @@ export const AssetRetrievalService = { * 단일 에셋 검색 (Multi-Source Strategy) * search_keywords를 활용한 다중 쿼리 전략 */ - retrieveSingleAsset: async (concept: AssetConcept, index: number): Promise => { + retrieveSingleAsset: async (concept: AssetConcept, index: number, themeHint?: string): Promise => { const conceptName = concept.concept; const searchKeywords = concept.search_keywords || []; - // 1단계: 로컬 캐시 검색 (다중 쿼리 전략) + console.log(`[AssetRetrieval] 🔍 retrieveSingleAsset: "${conceptName}" (theme: ${themeHint || 'none'})`); + + // 1단계: 로컬 캐시(Hybrid Search) 검색 // 1-1: 원본 concept으로 검색 - let localPath = await AssetRetrievalService.searchLocalCache(conceptName, concept.role); + let localPath = await AssetRetrievalService.searchLocalCache(conceptName, concept.role, themeHint); // 1-2: concept 검색 실패 시 search_keywords로 순차 검색 if (!localPath && searchKeywords.length > 0) { @@ -347,11 +349,11 @@ export const AssetRetrievalService = { * 로컬 캐시에서 에셋 검색 (Phase 2: 하이브리드 검색) * - BM25 (렉시컬) + Vector (시맨틱) + RRF 융합 */ - searchLocalCache: async (concept: string, roleHint?: string): Promise => { - console.log(`[AssetRetrieval] 🔍 searchLocalCache 호출 (하이브리드 검색): "${concept}"${roleHint ? ` (role: ${roleHint})` : ''}`); + searchLocalCache: async (concept: string, roleHint?: string, theme?: string): Promise => { + console.log(`[AssetRetrieval] 🔍 searchLocalCache 호출 (하이브리드 검색): "${concept}"${roleHint ? ` (role: ${roleHint})` : ''}${theme ? ` (theme: ${theme})` : ''}`); - // Phase 2: 하이브리드 검색 (Vector + BM25 + RRF 융합) + Phase 6: role 필터링 - const result = await VectorSearchService.findBestHybridMatch(concept, roleHint); + // Phase 2: 하이브리드 검색 (Vector + BM25 + RRF 융합) + Phase 6: role 필터링 + v3: ThemeGuard + const result = await VectorSearchService.findBestHybridMatch(concept, roleHint, theme); if (result) { console.log(`[AssetRetrieval] 🔍 HybridSearch 결과: ${result.asset?.id} (RRF: ${result.rrfScore.toFixed(4)}, confidence: ${result.confidence.toFixed(2)})`); diff --git a/src/services/ai-pipeline/NavMeshGenerationService.ts b/src/services/ai-pipeline/NavMeshGenerationService.ts new file mode 100644 index 0000000..2415b63 --- /dev/null +++ b/src/services/ai-pipeline/NavMeshGenerationService.ts @@ -0,0 +1,104 @@ +/** + * NavMeshGenerationService.ts + * + * v4.0 Phase 3: Navigation Intelligence + * 배치된 오브젝트 데이터를 기반으로 캐릭터가 이동 가능한 영역(NavMesh)을 계산합니다. + */ + +import * as THREE from 'three'; +import { PlacementResult, PlacedObject } from './MCTSPlacementService'; + +export interface NavGridCell { + x: number; + z: number; + isWalkable: boolean; +} + +export interface NavMeshResult { + gridSize: number; + resolution: number; + cells: NavGridCell[]; + walkableAreaRatio: number; +} + +export class NavMeshGenerationService { + /** + * 배치 결과로부터 내비게이션 그리드 생성 + * + * @param placementResult - MCTS 배치 결과 + * @param resolution - 그리드 해상도 (기본 0.5m) + * @param sceneSize - 씬 전체 크기 (기본 30m) + */ + static generateGrid( + placementResult: PlacementResult, + resolution: number = 0.5, + sceneSize: number = 30 + ): NavMeshResult { + const halfSize = sceneSize / 2; + const cells: NavGridCell[] = []; + let walkableCount = 0; + + // 1. 그리드 초기화 + for (let x = -halfSize; x < halfSize; x += resolution) { + for (let z = -halfSize; z < halfSize; z += resolution) { + cells.push({ x, z, isWalkable: true }); + } + } + + // 2. 오브젝트별 충돌 영역(AABB) 계산 및 그리드 차단 + placementResult.objects.forEach((obj: any) => { + // 바닥 정적 오브젝트(가구, 구조물)만 내비게이션 차단 대상으로 간주 + if ( + obj.semantic_role === 'furniture_floor' || + obj.semantic_role === 'structure' || + obj.semantic_role === 'sub_container' || + obj.semantic_role === 'environment_container' + ) { + const box = this.calculateObjectFloorAABB(obj); + + // 해당 영역의 그리드 셀들을 non-walkable로 설정 + cells.forEach(cell => { + if (cell.isWalkable && this.isPointInBox(cell.x, cell.z, box)) { + cell.isWalkable = false; + } + }); + } + }); + + walkableCount = cells.filter(c => c.isWalkable).length; + + console.log(`[NavMesh] 생성 완료: 해상도=${resolution}m, 이동가능 비율=${((walkableCount / cells.length) * 100).toFixed(1)}%`); + + return { + gridSize: sceneSize, + resolution, + cells, + walkableAreaRatio: walkableCount / cells.length + }; + } + + /** + * 오브젝트의 바닥 투영 AABB 계산 (패딩 포함) + */ + private static calculateObjectFloorAABB(obj: PlacedObject): { minX: number; minZ: number; maxX: number; maxZ: number } { + const padding = 0.2; // 캐릭터 여유 공간 + const halfX = (obj.scale[0] / 2) + padding; + const halfZ = (obj.scale[2] / 2) + padding; + + return { + minX: obj.position[0] - halfX, + minZ: obj.position[2] - halfZ, + maxX: obj.position[0] + halfX, + maxZ: obj.position[2] + halfZ + }; + } + + /** + * 점이 박스 내부에 있는지 확인 + */ + private static isPointInBox(x: number, z: number, box: { minX: number; minZ: number; maxX: number; maxZ: number }): boolean { + return x >= box.minX && x <= box.maxX && z >= box.minZ && z <= box.maxZ; + } +} + +export default NavMeshGenerationService; diff --git a/src/services/ai-pipeline/PBRMaterialConverter.ts b/src/services/ai-pipeline/PBRMaterialConverter.ts new file mode 100644 index 0000000..caf19b5 --- /dev/null +++ b/src/services/ai-pipeline/PBRMaterialConverter.ts @@ -0,0 +1,87 @@ +/** + * PBRMaterialConverter.ts + * + * 시각적 품질 고도화 서비스 (v4.0 Premium Visuals) + * 기존 Matcap 기반 재질을 물리 기반 렌더링(PBR) 재질로 변환하고 속성을 최적화합니다. + */ + +import * as THREE from 'three'; + +export interface PBRProperties { + roughness?: number; + metalness?: number; + envMapIntensity?: number; + color?: string; + emissive?: string; + emissiveIntensity?: number; +} + +export class PBRMaterialConverter { + /** + * GLB 모델 전체를 순회하며 PBR 재질(MeshStandardMaterial)을 적용합니다. + */ + static convert(group: THREE.Group, props: PBRProperties = {}) { + group.traverse((child) => { + if (child instanceof THREE.Mesh) { + // 기존 재질 정보 추출 + const oldMat = child.material as THREE.MeshStandardMaterial; + + // 새로운 PBR 재질 생성 (MeshStandardMaterial 사용) + const newMat = new THREE.MeshStandardMaterial({ + color: props.color ? new THREE.Color(props.color) : oldMat.color, + map: oldMat.map, + normalMap: oldMat.normalMap, + roughnessMap: oldMat.roughnessMap, + metalnessMap: oldMat.metalnessMap, + aoMap: oldMat.aoMap, + // 기본 PBR 값 설정 + roughness: props.roughness ?? 0.7, + metalness: props.metalness ?? 0.2, + envMapIntensity: props.envMapIntensity ?? 1.0, + // 발광 설정 (필요 시) + emissive: props.emissive ? new THREE.Color(props.emissive) : oldMat.emissive, + emissiveIntensity: props.emissiveIntensity ?? (oldMat.emissiveIntensity || 0), + }); + + // 기존 재질 해제 (메모리 관리) + if (oldMat.dispose) oldMat.dispose(); + + child.material = newMat; + child.castShadow = true; + child.receiveShadow = true; + } + }); + + console.log(`[PBRMaterialConverter] ✨ PBR 재질 변환 완료: ${group.name || 'Unknown Group'}`); + } + + /** + * 시맨틱 역할(SemanticRole)에 따른 프리셋 물성 적용 + */ + static applyByRole(group: THREE.Group, role: string) { + let props: PBRProperties = {}; + + switch (role) { + case 'character': + props = { roughness: 0.6, metalness: 0.1, envMapIntensity: 1.2 }; + break; + case 'structure': + props = { roughness: 0.8, metalness: 0.0, envMapIntensity: 0.8 }; + break; + case 'prop': + if (group.name.toLowerCase().includes('metal')) { + props = { roughness: 0.2, metalness: 0.9, envMapIntensity: 1.5 }; + } else { + props = { roughness: 0.7, metalness: 0.1, envMapIntensity: 1.0 }; + } + break; + case 'nature': + props = { roughness: 0.9, metalness: 0.0, envMapIntensity: 0.5 }; + break; + default: + props = { roughness: 0.7, metalness: 0.2, envMapIntensity: 1.0 }; + } + + this.convert(group, props); + } +} diff --git a/src/services/ai-pipeline/PhysicsScatteringService.ts b/src/services/ai-pipeline/PhysicsScatteringService.ts new file mode 100644 index 0000000..08b50c5 --- /dev/null +++ b/src/services/ai-pipeline/PhysicsScatteringService.ts @@ -0,0 +1,110 @@ +/** + * PhysicsScatteringService.ts + * + * 물리 기반 오브젝트 배치 보정 서비스 (v4.0 Physical Intelligence) + * MCTS로 결정된 초기 위치에서 물리 시뮬레이션을 실행하여 자연스러운 배치를 유도합니다. + */ + +import RAPIER from '@dimforge/rapier3d-compat'; + +export interface ScatteringObject { + id: string; + position: [number, number, number]; + rotation: [number, number, number]; + scale: [number, number, number]; + mass?: number; + friction?: number; + restitution?: number; +} + +export class PhysicsScatteringService { + private static initialized = false; + + /** + * Rapier 엔진 초기화 (WASM 로드) + */ + static async init() { + if (!this.initialized) { + // 브라우저 및 Node 환경에서 호환되도록 초기화 + await RAPIER.init(); + this.initialized = true; + console.log('[PhysicsScatteringService] 🏎️ Rapier Physics Engine Initialized'); + } + } + + /** + * 지정된 오브젝트 리스트에 대해 물리 시뮬레이션 실행 + * @param objects 초기 배치 정보 + * @param steps 시뮬레이션 스텝 (기본 60프레임 = 1초) + * @returns 물리적으로 안정화된 위치 정보를 포함한 오브젝트 리스트 + */ + async simulateScattering(objects: ScatteringObject[], steps: number = 60): Promise { + await PhysicsScatteringService.init(); + + // 1. World 생성 (중력 설정: Y축 아래방향 -9.81) + const gravity = { x: 0.0, y: -9.81, z: 0.0 }; + const world = new RAPIER.World(gravity); + + // 2. 바닥(Ground) 생성 (오브젝트들이 아래로 떨어지지 않게) + // 넓은 평면을 바닥으로 설정 + const groundColliderDesc = RAPIER.ColliderDesc.cuboid(100, 0.1, 100); + world.createCollider(groundColliderDesc); + + // 3. RigidBody 및 Collider 등록 + const bodyMap = new Map(); + + objects.forEach(obj => { + // 위치 보정용 RigidBody (입력 위치보다 아주 약간 위에서 떨어뜨림으로써 겹침 방지 및 안착 유도) + const bodyDesc = RAPIER.RigidBodyDesc.dynamic() + .setTranslation(obj.position[0], obj.position[1] + 0.05, obj.position[2]) + // 단순 Y축 회전 적용 (Quaternion: [0, sin(y/2), 0, cos(y/2)]) + .setRotation({ + x: 0, + y: Math.sin(obj.rotation[1] / 2), + z: 0, + w: Math.cos(obj.rotation[1] / 2) + }); + + const body = world.createRigidBody(bodyDesc); + + // 콜라이더 설정 (단순 박스 기반) + // scale의 절반(half-extents)을 인자로 전달 + const colliderDesc = RAPIER.ColliderDesc.cuboid( + Math.max(obj.scale[0], 0.1) / 2, + Math.max(obj.scale[1], 0.1) / 2, + Math.max(obj.scale[2], 0.1) / 2 + ) + .setFriction(obj.friction ?? 0.5) + .setRestitution(obj.restitution ?? 0.2); + + world.createCollider(colliderDesc, body); + bodyMap.set(obj.id, body); + }); + + // 4. 시뮬레이션 실행 (지정된 스텝만큼) + // [Note] 헤드리스 환경이므로 매우 빠른 속도로 연산됨 + for (let i = 0; i < steps; i++) { + world.step(); + } + + // 5. 결과 추출 + const results = objects.map(obj => { + const body = bodyMap.get(obj.id); + if (!body) return obj; + + const trans = body.translation(); + // 쿼터니언에서 Y축 회전을 다시 추출하는 대신, 안정화된 위치 반영을 주목적으로 함 + + return { + ...obj, + position: [trans.x, trans.y, trans.z] + } as ScatteringObject; + }); + + // 6. 리소스 해제 (Memory leak 방지 필수) + world.free(); + + console.log(`[PhysicsScatteringService] 📦 ${objects.length}개 오브젝트 물리 안정화 완료`); + return results; + } +} diff --git a/src/services/ai-pipeline/RelativeScalePolicy.ts b/src/services/ai-pipeline/RelativeScalePolicy.ts index da25e4c..1b3ecc4 100644 --- a/src/services/ai-pipeline/RelativeScalePolicy.ts +++ b/src/services/ai-pipeline/RelativeScalePolicy.ts @@ -40,6 +40,10 @@ export const SCALE_RATIO_BY_ROLE: Record(); + // [v3.4] ReflexArc (OBB SAT Collision Engine) 초기화 + const ReflexArc = (await import('@/cells/core/ReflexArc')).ReflexArc; + + // 1. 기존 배치 데이터 + 플레이어(PC) 위치 추가 + // PC는 보통 중앙 부근에 위치하므로 (0,0,0) 주변 2m 영역을 충돌 구역으로 설정 + const pcOBB = { + id: 'PLAYER_PC_RESERVED', + position: [0, 0, 0] as [number, number, number], + scale: [1.5, 2.0, 1.5] as [number, number, number], // 플레이어 부피 + rotation: [0, 0, 0] as [number, number, number] + }; + + const candidateObjects = [ + pcOBB, + ...placementResult.objects.map(obj => ({ + id: obj.asset_id, + position: obj.position, + scale: obj.scale, + rotation: obj.rotation + })) + ]; + + const reflexEngine = new ReflexArc(); + // 엔진에 모든 오브젝트 미리 등록하여 상호 충돌 준비 + candidateObjects.forEach(o => reflexEngine.commit(o.id, o.position, o.scale, o.rotation)); for (const obj of placementResult.objects) { - const validated = RenderValidationService.validateObject(obj, positionMap, issues); - validatedObjects.push(validated); + // 1. 기본 물리 및 경계 검증 (지면, 경계 클램핑) + const preValidated = RenderValidationService.validateObjectBasic(obj, issues); - if (validated.was_adjusted) { - adjustedCount++; + // 2. ReflexArc를 통한 정밀 OBB 충돌 검사 및 해결 (MTV 적용) + // PC 영역 침범 시 Nudge(밀어내기)가 수행됨 + const reflexResult = reflexEngine.check( + preValidated.position, + preValidated.scale, + preValidated.rotation, + obj.asset_id + ); + + if (!reflexResult.allowed || reflexResult.action !== 'PASS') { + const isAdjusted = reflexResult.action === 'NUDGE' || reflexResult.action === 'SHRINK'; + + issues.push({ + object_id: obj.asset_id, + issue_type: 'collision', + severity: isAdjusted ? 'fixed' : 'error', + description: `[ReflexArc] ${reflexResult.action}: 충돌 해결 시도됨`, + original_value: obj.position, + corrected_value: reflexResult.finalPosition, + }); + + preValidated.position = reflexResult.finalPosition as [number, number, number]; + preValidated.scale = reflexResult.finalScale as [number, number, number]; + preValidated.was_adjusted = isAdjusted; + preValidated.adjustments = [ + ...(preValidated.adjustments || []), + `ReflexArc ${reflexResult.action} (Penetration: ${(reflexResult.penetrationDepth || 0).toFixed(3)}m)` + ]; } - // 위치 맵에 추가 (충돌 감지용) - const posKey = `${Math.round(validated.position[0])},${Math.round(validated.position[2])}`; - positionMap.set(posKey, obj); + validatedObjects.push(preValidated); + if (preValidated.was_adjusted) adjustedCount++; + } + + // ──────────────────────────────────────────────── + // [Stage 7.5] AI Quality Gate (AI Judge) + // ──────────────────────────────────────────────── + try { + console.log(`[RenderValidation] AI Quality Gate 검증 시도 (PRO)...`); + const aiResponse = await fetch('/api/ai/quality-gate', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ placementResult, sceneSpec }), + }); + + if (aiResponse.ok) { + const aiData = await aiResponse.json(); + + // AI 제안 이슈 반영 + if (aiData.issues && aiData.issues.length > 0) { + aiData.issues.forEach((issue: any) => { + issues.push(issue); + + // 수정 제안이 있고, 대상 오브젝트를 찾은 경우 반영 + const targetObj = validatedObjects.find(o => o.id === issue.object_id); + if (targetObj && issue.suggested_adjustment) { + if (issue.suggested_adjustment.position) { + targetObj.position = issue.suggested_adjustment.position; + targetObj.was_adjusted = true; + targetObj.adjustments = [...(targetObj.adjustments || []), `AI Judge: ${issue.description}`]; + adjustedCount++; + } + } + }); + } + console.log(`[RenderValidation] AI Quality Gate 완료: ${aiData.issues?.length || 0}개 이슈 발견`); + } + } catch (aiError) { + console.warn(`[RenderValidation] AI Quality Gate 실패 (무시하고 휴리스틱 결과 사용):`, aiError); } const validationTime = Date.now() - startTime; @@ -147,11 +232,11 @@ export const RenderValidationService = { }, /** - * 단일 오브젝트 검증 + * 단일 오브젝트 기본 검증 (지면, 경계) + * 충돌은 Stage 7 수준에서 ReflexArc가 처리함 */ - validateObject: ( + validateObjectBasic: ( obj: PlacedObject, - positionMap: Map, issues: ValidationIssue[] ): ValidatedObject => { const adjustments: string[] = []; @@ -193,25 +278,6 @@ export const RenderValidationService = { wasAdjusted = true; } - // 3. 완전 동일 위치 충돌만 처리 (미세 조정) - const posKey = `${Math.round(position[0])},${Math.round(position[2])}`; - if (positionMap.has(posKey)) { - issues.push({ - object_id: obj.asset_id, - issue_type: 'collision', - severity: 'fixed', - description: `동일 위치 충돌 감지`, - }); - - // 약간 이동 (0.5~1.5m 랜덤) - const offset = 0.5 + Math.random(); - const angle = Math.random() * Math.PI * 2; - position[0] += Math.cos(angle) * offset; - position[2] += Math.sin(angle) * offset; - adjustments.push('충돌 회피 이동'); - wasAdjusted = true; - } - return { id: obj.asset_id, asset_id: obj.asset_id, diff --git a/src/services/ai-pipeline/SemanticScaleResolver.ts b/src/services/ai-pipeline/SemanticScaleResolver.ts index 00074bd..da4ad1b 100644 --- a/src/services/ai-pipeline/SemanticScaleResolver.ts +++ b/src/services/ai-pipeline/SemanticScaleResolver.ts @@ -54,6 +54,10 @@ export const SEMANTIC_ALPHA_TABLE: Record = { lighting: 0.015, // 조명 (램프, 횃불) effect: 0.01, // 파티클, 안개, 마법 효과 + // 생물 및 대형 구조물 + character: 0.06, // 캐릭터 (방 크기의 6%, 약 0.72m~1.8m) + structure: 0.5, // 구조물 (방 크기의 50%, 약 5m~10m) + // 기본값 unspecified: 0.05, // 분류되지 않음 - 중간값 }; diff --git a/src/services/ai-pipeline/UnifiedSceneGenerationService.ts b/src/services/ai-pipeline/UnifiedSceneGenerationService.ts index 5a50f92..0e22497 100644 --- a/src/services/ai-pipeline/UnifiedSceneGenerationService.ts +++ b/src/services/ai-pipeline/UnifiedSceneGenerationService.ts @@ -132,7 +132,7 @@ const UNIFIED_SCENE_PROMPT_TEMPLATE = ` "id": "고유 ID", "name": "오브젝트 이름", "description": "검색용 설명", - "semanticRole": "environment_container | sub_container | furniture_floor | decoration_floating | decoration_hanging | decoration_surface | lighting | effect | unspecified", + "semanticRole": "environment_container | sub_container | furniture_floor | decoration_floating | decoration_hanging | decoration_surface | lighting | effect | character | structure | unspecified", "keywords": ["검색", "키워드"], "parentId": "부모 ID (없으면 null)", "isContainer": true/false, @@ -142,6 +142,7 @@ const UNIFIED_SCENE_PROMPT_TEMPLATE = ` "placementHint": { "floatingRange": [minY, maxY], // 부유 오브젝트용 "attachTo": "floor | ceiling | wall", + "y_range": [minY, maxY], // Y축 배치 범위 (필수) "zone": "center | near_wall | corner | random" }, "suggestedScale": 미터_단위_스케일, @@ -172,7 +173,7 @@ const UNIFIED_SCENE_PROMPT_TEMPLATE = ` - 벽면 부착: \`y_range: [1.2, 2.0]\` ### 2. semantic_role (필수) -\`furniture_floor\`, \`decoration_floating\`, \`decoration_hanging\`, \`lighting\`, \`effect\`, \`sub_container\` 중 선택. +\`furniture_floor\`, \`decoration_floating\`, \`decoration_hanging\`, \`lighting\`, \`effect\`, \`sub_container\`, \`character\`, \`structure\` 중 선택. ⚠️ **이 필드가 누락되면 해당 오브젝트는 올바르게 배치되지 않습니다.** @@ -380,6 +381,8 @@ export const UnifiedSceneGenerationService = { decoration_hanging: 1.5, lighting: 0.5, effect: 2, + character: 1.8, + structure: 10, unspecified: 1, }; return scaleMap[role] || 1; diff --git a/src/services/ai-pipeline/VLMFeedbackService.ts b/src/services/ai-pipeline/VLMFeedbackService.ts new file mode 100644 index 0000000..330eeb6 --- /dev/null +++ b/src/services/ai-pipeline/VLMFeedbackService.ts @@ -0,0 +1,147 @@ +/** + * VLMFeedbackService.ts + * + * Stage 9: VLM 기반 비주얼 피드백 서비스 + * 렌더링된 씬 이미지를 분석하여 정성적 평가 및 개선 제안을 생성합니다. (v4.0 MACR) + */ + +import { GoogleGenerativeAI } from "@google/generative-ai"; + +export interface VLMFeedback { + overallScore: number; + composition: string; + atmosphere: string; + physicalIntegrity: string; + issues: string[]; + suggestions: Array<{ + type: 'placement' | 'lighting' | 'scale' | 'atmosphere'; + targetId?: string; + advice: string; + action?: { + nudge?: [number, number, number]; // [x, y, z] 이동량 (미터) + scaleMultiplier?: number; // 스케일 변경 배율 + intensity?: number; // 조명 등 강도 + } + }>; +} + +export class VLMFeedbackService { + private model: any; + + constructor() { + // 환경 변수에서 API 키 로드 (Next.js 클라이언트/서버 공용) + const apiKey = process.env.NEXT_PUBLIC_GEMINI_API_KEY || process.env.GEMINI_API_KEY; + if (!apiKey) { + console.warn('[VLMFeedbackService] API Key missing. Feedback will be skipped.'); + return; + } + const genAI = new GoogleGenerativeAI(apiKey); + this.model = genAI.getGenerativeModel({ model: "gemini-2.0-flash" }); + } + + /** + * 클라이언트 캔버스 캡처 요청 및 대기 + * [Note] PreviewCanvas.tsx의 CaptureScene 컴포넌트가 활성화되어 있어야 함 + */ + async captureFromCanvas(): Promise { + if (typeof window === 'undefined') { + throw new Error('[VLMFeedbackService] Capture is only supported in browser environment'); + } + + return new Promise((resolve, reject) => { + const requestId = Math.random().toString(36).substring(7); + const timeout = setTimeout(() => { + window.removeEventListener(`captureResponse_${requestId}`, handleResponse as any); + reject(new Error('[VLMFeedbackService] Capture timed out (5s)')); + }, 5000); + + const handleResponse = (e: CustomEvent) => { + clearTimeout(timeout); + window.removeEventListener(`captureResponse_${requestId}`, handleResponse as any); + if (e.detail.success) { + resolve(e.detail.dataUrl); + } else { + reject(new Error(e.detail.error || 'Unknown capture error')); + } + }; + + window.addEventListener(`captureResponse_${requestId}`, handleResponse as any); + + // PreviewCanvas에 캡처 요청 발송 + console.log(`[VLMFeedbackService] 📸 캡처 요청 중 (requestId: ${requestId})...`); + window.dispatchEvent(new CustomEvent('requestSceneCapture', { detail: { requestId } })); + }); + } + + /** + * Gemini VLM을 통한 씬 분석 + */ + async analyzeScene(imageBase64: string, originalPrompt: string): Promise { + if (!this.model) throw new Error('[VLMFeedbackService] Model not initialized'); + + // Data URL에서 실제 Base64 데이터만 추출 + const base64Data = imageBase64.includes(',') ? imageBase64.split(',')[1] : imageBase64; + + const systemPrompt = ` + 사용자의 원본 요청: "${originalPrompt}" + + 당신은 시각 예술 디자인 전문가이자 가상 공간 물리학자입니다. + 제공된 이미지는 AI가 생성한 3D 가상 공간의 현재 렌더링 스냅샷입니다. + 이 공간을 다음 세 가지 정성적 기준으로 상세히 분석하고 JSON 형식으로만 답변하세요. + + 분석 기준: + 1. Composition (구도): 오브젝트들이 조화롭게 배치되어 있는가? (황금비율, 중심점 등) + 2. Atmosphere (분위기): 사용자의 요청 테마가 조명과 배치를 통해 잘 표현되었는가? + 3. Physical Integrity (물리적 정함성): 물체가 공중에 떠 있거나, 부자연스럽게 겹치거나, 지지대 없이 놓인 부분이 있는가? + + 출력 형식 (반드시 유효한 JSON이어야 함): + { + "overallScore": 0~100 사이의 점수, + "composition": "구도 분석 (한국어)", + "atmosphere": "분위기 분석 (한국어)", + "physicalIntegrity": "물리 정합성 분석 (한국어)", + "issues": ["문제점 1", "문제점 2"], + "suggestions": [ + { + "type": "placement | lighting | scale | atmosphere", + "targetId": "문제 오브젝트 ID (알 수 없으면 생략)", + "advice": "구체적인 개선 조언", + "action": { + "nudge": [x, y, z], // 이동이 필요할 경우 (예: [0, 0.5, 0]) + "scaleMultiplier": 0.5~2.0, // 크기 조정이 필요할 경우 + "intensity": 0.1~2.0 // 조명 등 강도 조정 시 + } + } + ] + } + + 주의: 마크다운 코드 블록 없이 JSON 객체 본체만 답변하십시오. + `; + + try { + const result = await this.model.generateContent([ + systemPrompt, + { inlineData: { data: base64Data, mimeType: "image/webp" } } + ]); + + const responseText = result.response.text(); + + // JSON 추출 및 파싱 + const jsonStart = responseText.indexOf('{'); + const jsonEnd = responseText.lastIndexOf('}') + 1; + const jsonString = responseText.substring(jsonStart, jsonEnd); + + if (!jsonString) { + throw new Error('VLM did not return a valid JSON object'); + } + + const feedback: VLMFeedback = JSON.parse(jsonString); + console.log('[VLMFeedbackService] ✅ 피드백 수신 완료:', feedback.overallScore); + return feedback; + + } catch (err) { + console.error('[VLMFeedbackService] ❌ 분석 중 에러 발생:', err); + throw err; + } + } +} diff --git a/src/services/judge/LLMJudgeService.ts b/src/services/judge/LLMJudgeService.ts index f06e8a7..a8a4159 100644 --- a/src/services/judge/LLMJudgeService.ts +++ b/src/services/judge/LLMJudgeService.ts @@ -22,8 +22,8 @@ import type { } from './types'; import { DEFAULT_CRITERIA_PRESETS } from './types'; -// 기본 설정 -const DEFAULT_MODEL = 'gemini-1.5-flash'; +// 기본 설정 - v3.0 업그레이드 (고지능 판정을 위해 Pro 모델 사용) +const DEFAULT_MODEL = 'gemini-2.0-pro'; const DEFAULT_TEMPERATURE = 0.3; // 낮은 온도로 일관된 평가 /** @@ -140,7 +140,7 @@ ${JSON.stringify(request.targetData, null, 2)}`; console.log(`[LLMJudge] Gemini API 호출 시작 (모델: ${this.config.model})`); const response = await fetch( - `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${apiKey}`, + `https://generativelanguage.googleapis.com/v1beta/models/${this.config.model}:generateContent?key=${apiKey}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, diff --git a/src/services/search/LexicalSearchService.ts b/src/services/search/LexicalSearchService.ts index 1063c00..fde1104 100644 --- a/src/services/search/LexicalSearchService.ts +++ b/src/services/search/LexicalSearchService.ts @@ -164,7 +164,7 @@ const ASSET_PATH_BLACKLIST = [ /** * 블랙리스트 경로 확인 */ -function isBlacklistedPath(path: string): boolean { +export function isBlacklistedPath(path: string): boolean { const lowerPath = path.toLowerCase(); return ASSET_PATH_BLACKLIST.some(pattern => lowerPath.includes(pattern.toLowerCase())); } diff --git a/src/utils/autoScaleAsset.ts b/src/utils/autoScaleAsset.ts index d0f1d22..d566ab9 100644 --- a/src/utils/autoScaleAsset.ts +++ b/src/utils/autoScaleAsset.ts @@ -125,7 +125,7 @@ export async function autoScaleAsset( // 3. 주축 감지 const dominantAxis = detectDominantAxis(currentSize, category); - const currentSizeOnAxis = currentSize[dominantAxis]; + let currentSizeOnAxis = currentSize[dominantAxis]; // 4. 시맨틱 분석 (프롬프트가 있는 경우) let semantic: SemanticScaleResult | null = null; @@ -146,21 +146,31 @@ export async function autoScaleAsset( // 5. 스케일 팩터 계산 let scaleFactor = 1.0; + let preScaleFactor = 1.0; + + // [P0] mm 단위 모델 사전 정규화 (1km 이상) + if (currentSizeOnAxis > MM_UNIT_DETECTION_THRESHOLD) { + preScaleFactor = MM_TO_METER_SCALE; + console.log(`[AutoScale] ⚠️ mm 단위 모델 감지 (Async): ${path.split('/').pop()}`); + console.log(` - 원본: ${currentSizeOnAxis.toFixed(0)}m → 정규화: ${(currentSizeOnAxis * preScaleFactor).toFixed(2)}m`); + currentSizeOnAxis *= preScaleFactor; + } if (currentSizeOnAxis > 0 && isFinite(currentSizeOnAxis)) { - // 대형 건물은 축소만 (확대 금지) - if (category === 'buildings' || category === 'environment') { - scaleFactor = currentSizeOnAxis > targetSize - ? targetSize / currentSizeOnAxis - : 1.0; - } else { - scaleFactor = targetSize / currentSizeOnAxis; + // [v3.4 Fix] 스케일 팩터 안전성 강화 + let rawScaleFactor = targetSize / currentSizeOnAxis; + + if (rawScaleFactor < 0.01 || rawScaleFactor > 100.0) { + console.warn(`[AutoScale] ⚠️ 스케일 이상치 감지 (${path.split('/').pop()}): ×${rawScaleFactor.toFixed(4)}`); + rawScaleFactor = Math.min(Math.max(rawScaleFactor, 0.05), 10.0); + console.log(` - 🛡️ 안전 스케일로 보정됨: ×${rawScaleFactor.toFixed(4)}`); } - // 클램핑 제거: 알고리즘이 계산한 정확한 값 사용 + // 최종 스케일 팩터 = mm 보정 * 타겟 보정 + scaleFactor = rawScaleFactor * preScaleFactor; } - console.log(`[AutoScale] ✅ ${path.split('/').pop()}: ${currentSizeOnAxis.toFixed(2)}m → ${targetSize.toFixed(2)}m (×${scaleFactor.toFixed(4)})`); + console.log(`[AutoScale] ✅ ${path.split('/').pop()}: ${currentSizeOnAxis.toFixed(2)}m → ${(currentSizeOnAxis * scaleFactor).toFixed(2)}m (×${scaleFactor.toFixed(4)})`); return { scaleFactor, @@ -204,14 +214,15 @@ export function autoScaleAssetSync( let scaleFactor = 1.0; if (currentSizeOnAxis > 0 && isFinite(currentSizeOnAxis)) { - if (category === 'environment_container') { - // [P0] 대형 환경 컨테이너는 항상 타겟 크기(45m)로 맞춤 - scaleFactor = targetSize / currentSizeOnAxis; - } else if (category === 'buildings' || category === 'environment') { - // 일반 건물은 타겟보다 큰 경우에만 축소 - scaleFactor = currentSizeOnAxis > targetSize ? targetSize / currentSizeOnAxis : 1.0; + // [v3.4 Fix] 스케일 팩터 안전성 강화 (Clamping & Sanity Check) + const rawScaleFactor = targetSize / currentSizeOnAxis; + + if (rawScaleFactor < 0.01 || rawScaleFactor > 100.0) { + console.warn(`[AutoScale] ⚠️ 스케일 이상치 감지 (${path.split('/').pop()}): ×${rawScaleFactor.toFixed(4)}`); + scaleFactor = Math.min(Math.max(rawScaleFactor, 0.05), 10.0); + console.log(` - 🛡️ 안전 스케일로 보정됨: ×${scaleFactor.toFixed(4)}`); } else { - scaleFactor = targetSize / currentSizeOnAxis; + scaleFactor = rawScaleFactor; } }