{
 "schemaVersion": 1,
 "origin": "https://lib.gamenow.us/assets/",
 "packs": [
  {
   "id": "amb-city",
   "version": 1,
   "kind": "audio",
   "title": "City & Wilds Ambience",
   "author": "여러 저작자 — 파일별 meta.author (IgnasD, Kresiek The Furry, rubberduck, Wolfgang_, aquinn, Aj_, LokiF, isaiah658, bart, RandomMind, Rango Mango, Kenney, JaggedStone, Ogrebane, Vehicle, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "VERDICT(game_id verdict, ~/SRC/globalShadow — 어두운 영웅의 잠입·저격·탐험 액션) 용으로 만들었지만 어느 게임이든 쓸 수 있다. 환경음 루프 5종: 도시 낮(큰길 차 소리)·도시 밤(귀뚜라미·먼 차·먼 사이렌)·정글(늪·새·벌레·개구리)·항구 공업지대(물결·증기 기계·갈매기·먼 금속 쿵·배 고동)·동굴/유적(지하 공기·물방울·낮은 웅웅). 스테레오 mp3 128kbps, -20 LUFS 안팎·피크 -1.5 dBFS(배경에 깔도록 작게). OpenGameArt 의 CC0 현장 녹음을 길게 크로스페이드해 루프로 만들고(2초 등전력), 한 번씩 나는 소리(갈매기·사이렌·물방울 등)는 루프 안에 감아 넣어 이음매가 없다. 모자란 저역 웅웅·배 고동만 합성(meta.method). 루프는 meta.loopStart/loopEnd. 만드는 법: python3 -I tools/audio/build-audio-verdict.py amb-city",
   "tags": [
    "ambience",
    "loop",
    "city",
    "traffic",
    "night",
    "jungle",
    "harbor",
    "industrial",
    "cave",
    "ruins"
   ],
   "files": [
    {
     "path": "city-day-loop.mp3",
     "meta": {
      "role": "amb-city-day",
      "description": "도시 낮 — 큰길 차 소리 + 생활 소음(26초)",
      "duration": 26.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 26.1,
      "lufs": -20,
      "peak": -5.2,
      "channels": 2,
      "origin": [
       "synthesized",
       "vd-traffic/gatve Varniu_2.ogg",
       "vd-traffic/gatve Varniu_3.ogg",
       "vd-amb-outdoor/amb_outdoor1_loop.wav",
       "rd-sfx100b/sfx100v2_loop_highway.ogg"
      ],
      "method": "먼 차량 웅웅: 고속도로 녹음 스펙트럼의 원형 잡음 + 느린 주기 변조",
      "author": "IgnasD, Kresiek The Furry, rubberduck, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/high-traffic-road-sounds",
       "https://opengameart.org/content/amb-outside-1",
       "https://opengameart.org/content/100-cc0-sfx-2",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 420093,
     "sha256": "bc1827ec311055c9036b83d14f78e9de234b568416f6c32904311315993ab8ea"
    },
    {
     "path": "city-night-loop.mp3",
     "meta": {
      "role": "amb-city-night",
      "description": "도시 밤 — 귀뚜라미 + 먼 차 + 먼 사이렌 한 번(33초)",
      "duration": 33.356,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 33.25619,
      "lufs": -21,
      "peak": -10.3,
      "channels": 2,
      "origin": [
       "synthesized",
       "vd-crickets/crickets_1.mp3",
       "vd-traffic/gatve Varniu_2.ogg",
       "vd-traffic/gatve Varniu_3.ogg",
       "rd-sfx100b/sfx100v2_loop_highway.ogg",
       "vd-siren/siren.mp3",
       "vd-jungle-aj/birdsCrickets/birdNight.wav"
      ],
      "method": "먼 도시 웅웅: 고속도로 녹음 스펙트럼의 저역 원형 잡음",
      "author": "Wolfgang_, IgnasD, rubberduck, aquinn, Aj_, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/crickets-ambient-noise-loopable",
       "https://opengameart.org/content/high-traffic-road-sounds",
       "https://opengameart.org/content/100-cc0-sfx-2",
       "https://opengameart.org/content/sirens-and-alarm-noise",
       "https://opengameart.org/content/birdcricketfrog-and-mosquito-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 534613,
     "sha256": "e160bd72dec086b3b32d25cc79a8d8ef2762d2b1d2748ee5ee0d3269ced731ff"
    },
    {
     "path": "jungle-loop.mp3",
     "meta": {
      "role": "amb-jungle",
      "description": "정글 — 늪·새·벌레·개구리(30초)",
      "duration": 30.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 30.1,
      "lufs": -20,
      "peak": -2.8,
      "channels": 2,
      "origin": [
       "vd-swamp/swamp.ogg",
       "vd-birds/birds-isaiah658.ogg",
       "vd-jungle-aj/birdsCrickets/cricket2.wav",
       "vd-jungle-aj/birdsCrickets/frog.wav",
       "vd-jungle-aj/birdsCrickets/bird2.wav",
       "vd-jungle-aj/birdsCrickets/bird.wav"
      ],
      "author": "LokiF, isaiah658, Aj_",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/swamp-environment-audio",
       "https://opengameart.org/content/ambient-bird-sounds",
       "https://opengameart.org/content/birdcricketfrog-and-mosquito-sounds"
      ]
     },
     "bytes": 484458,
     "sha256": "0a9db03152a6d0e48e9ee6e95a486e78fb3c1622b9bba16fb19f7d7d879469a6"
    },
    {
     "path": "harbor-loop.mp3",
     "meta": {
      "role": "amb-harbor",
      "description": "항구·공업지대 — 물결·증기 기계·갈매기·먼 금속 쿵·배 고동(22초)",
      "duration": 22.204,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 22.103855,
      "lufs": -20,
      "peak": -5.4,
      "channels": 2,
      "origin": [
       "synthesized",
       "vd-generator/generator_loop.wav",
       "vd-waves/Vistula.mp3",
       "vd-seagull/Seagull Ambient 1.wav",
       "vd-seagull/Seagull Ambient 2.wav",
       "vd-seagull/Seagull Ambient 3.wav",
       "kenney-impact/Audio/impactMetal_heavy_001.ogg",
       "kenney-impact/Audio/impactMetal_heavy_002.ogg"
      ],
      "method": "배 고동: 톱니파 화음 92·138Hz 2.4초(로패스·잔향, 멀게)",
      "author": "bart, RandomMind, Rango Mango, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/steam-boiler-sound-loop",
       "https://opengameart.org/content/sea-and-river-wave-sounds",
       "https://opengameart.org/content/solo-seagull-sound-effects",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 356145,
     "sha256": "31ffeeee52897d1c96b11388cafaa96c805d4d24ca49b11957aeac12c6f4f91d"
    },
    {
     "path": "cave-loop.mp3",
     "meta": {
      "role": "amb-cave",
      "description": "동굴·유적 내부 — 지하 공기·물방울·낮은 웅웅(30초)",
      "duration": 30.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 30.1,
      "lufs": -22.2,
      "peak": -1.9,
      "channels": 2,
      "origin": [
       "synthesized",
       "vd-dungeon/dungeon_ambient_1.ogg",
       "vd-dark-amb/dark_ambiences/ambience-1.wav",
       "tinysized/sfx-cc0/water-drop-01.wav",
       "tinysized/sfx-cc0/water-drop-02.wav",
       "tinysized/sfx-cc0/water-drop-03.wav"
      ],
      "method": "동굴 저역: 어두운 공기 녹음 스펙트럼의 원형 잡음 + 느린 주기 변조",
      "author": "JaggedStone, Ogrebane, Vehicle, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/loopable-dungeon-ambience",
       "https://opengameart.org/content/dark-ambiences",
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 484458,
     "sha256": "4a53b7389ee896838f94d086dd5c009eb9b9786df222b0e615d33b86a263c1e9"
    }
   ],
   "base": "amb-city/1/"
  },
  {
   "id": "amb-mars",
   "version": 1,
   "kind": "audio",
   "title": "Mars Ambience",
   "author": "여러 저작자 — 파일별 meta.author (Luke.RUSTLTD, aquinn, sketchman3, gmason, mieki256, rubberduck, NenadSimic, pauliuw, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "화성 환경음(바람 약·강, 모래 폭풍, 먼 우르릉). 스테레오 mp3 128kbps, -18 LUFS 안팎·피크 -1.5 dBFS. 바람·폭풍 루프는 원본 녹음의 스펙트럼을 가진 원형 잡음과 주기 변조로 만들어 이음매가 원리상 없다(meta.loopStart/loopEnd). 옅은 대기 느낌으로 고역을 눌렀다. 합성 조합·가공물은 CC0. 만드는 법: python3 -I tools/audio/build-audio.py amb-mars",
   "tags": [
    "ambience",
    "mars",
    "wind",
    "sandstorm",
    "rumble",
    "loop"
   ],
   "files": [
    {
     "path": "wind-light-loop.mp3",
     "meta": {
      "role": "wind",
      "description": "약한 바람",
      "duration": 24.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 24.1,
      "lufs": -20,
      "peak": -7.7,
      "channels": 2,
      "origin": [
       "synthesized",
       "wind-pd/wind1.wav",
       "wind-pd/wind3.wav",
       "space-winds/space-wind_0.mp3"
      ],
      "method": "낮은 바람결: 녹음 스펙트럼의 원형 잡음 + 주기 변조",
      "author": "Luke.RUSTLTD, aquinn, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/wind1",
       "https://opengameart.org/content/space-winds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 388328,
     "sha256": "dc2c8f327839bf28492aa49e1278632b344f43784dc3dc1ad19866b04060f2b2"
    },
    {
     "path": "wind-strong-loop.mp3",
     "meta": {
      "role": "wind",
      "description": "강한 바람(돌풍)",
      "duration": 30.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 30.1,
      "lufs": -18,
      "peak": -2.7,
      "channels": 2,
      "origin": [
       "synthesized",
       "space-winds/space-wind_0.mp3",
       "wind-whoosh/wind woosh loop.ogg"
      ],
      "method": "바람 녹음 스펙트럼의 원형 잡음 + 주기 돌풍 변조(합성 조합)",
      "author": "aquinn, sketchman3, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/space-winds",
       "https://opengameart.org/content/wind-whoosh-loop",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 484458,
     "sha256": "a1b654f135ea66bbdf2614767cf0234cd2081390b783e061b76361cb38cd6a69"
    },
    {
     "path": "sandstorm-loop.mp3",
     "meta": {
      "role": "sandstorm",
      "description": "모래 폭풍",
      "duration": 30.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 30.1,
      "lufs": -18,
      "peak": -2.6,
      "channels": 2,
      "origin": [
       "synthesized",
       "space-winds/space-wind_0.mp3",
       "wind-whoosh/wind woosh loop.ogg",
       "deep-rumble/deep_rumble.ogg"
      ],
      "method": "모래 폭풍: 바람·굉음 녹음 스펙트럼의 원형 잡음 + 주기 돌풍 + 원형 모래 알갱이 파열음(합성 조합)",
      "author": "aquinn, sketchman3, gmason, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/space-winds",
       "https://opengameart.org/content/wind-whoosh-loop",
       "https://opengameart.org/content/underwater-or-space-engine-rumble",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 605563,
     "sha256": "295297cbdfd6037622a28f70c60a845c442e73a8e5815216984bb61f4f6e20c0"
    },
    {
     "path": "rumble-far-1.mp3",
     "meta": {
      "role": "rumble",
      "description": "먼 지진 우르릉",
      "duration": 6.95,
      "loop": false,
      "lufs": -20,
      "peak": -10.8,
      "channels": 2,
      "origin": [
       "earthquake/shake.flac"
      ],
      "author": "mieki256",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/earthquake-and-open-sesame"
      ]
     },
     "bytes": 112475,
     "sha256": "1e5c7866a58afc4defbbdd81c49deceb7d0687a085e4541cc1322ac2c3b51671"
    },
    {
     "path": "rumble-far-2.mp3",
     "meta": {
      "role": "rumble",
      "description": "먼 천둥·포격 우르릉",
      "duration": 7.259,
      "loop": false,
      "lufs": -20,
      "peak": -4.2,
      "channels": 2,
      "origin": [
       "rd-sfx100b/sfx100v2_thunder_01.ogg",
       "distant-explosion/NenadSimic - Muffled Distant Explosion.wav",
       "far-explosion/explosion_somewhere_far.mp3"
      ],
      "author": "rubberduck, NenadSimic, pauliuw",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/100-cc0-sfx-2",
       "https://opengameart.org/content/muffled-distant-explosion",
       "https://opengameart.org/content/explosion-somewhere-far"
      ]
     },
     "bytes": 117072,
     "sha256": "0e29e696707c58cfd355bde849e34cca9615c5ae9f669c5bf110ee0f51d8e081"
    }
   ],
   "base": "amb-mars/1/"
  },
  {
   "id": "ambientcg-city",
   "version": 1,
   "kind": "texture",
   "title": "ambientCG City Ground Materials",
   "author": "ambientCG (Lennart Demes)",
   "license": "CC0-1.0",
   "source": "https://ambientcg.com/",
   "sources": [
    "https://ambientcg.com/view?id=Asphalt010",
    "https://ambientcg.com/view?id=Road006",
    "https://ambientcg.com/view?id=Concrete034",
    "https://ambientcg.com/view?id=PavingStones138",
    "https://ambientcg.com/view?id=Grass004",
    "https://ambientcg.com/view?id=Snow006",
    "https://ambientcg.com/view?id=Ground054",
    "https://ambientcg.com/view?id=Ground037"
   ],
   "notes": "도시 지면용 ambientCG PBR 재질 8종(아스팔트·땜질 도로·콘크리트·판석·잔디·눈·진흙·숲 바닥). 모두 이음매 없이 반복(tileable). color 는 sRGB, normal(OpenGL 규약, +Y 위)·roughness·ao 는 선형. meta.tile_m 은 한 장이 덮는 실제 크기(m). 넓은 땅에 반복해 깔리므로 normal 은 512(ambientcg-mars 와 같은 이유). 처음 쓴 게임: VERDICT(verdict) — 절차 캔버스 지면 텍스처를 대체. 원본: asphalt=Asphalt010, road-patched=Road006, concrete=Concrete034, paving=PavingStones138, grass=Grass004, snow=Snow006, dirt=Ground054, forest-ground=Ground037.",
   "tags": [
    "texture",
    "pbr",
    "ground",
    "asphalt",
    "concrete",
    "grass",
    "snow",
    "city",
    "tileable"
   ],
   "files": [
    {
     "path": "asphalt-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "asphalt",
      "ambientcg": "Asphalt010",
      "colorSpace": "srgb"
     },
     "bytes": 237196,
     "sha256": "a7078d11fb6f725836d1f2a8e1ff714f6e4ddbc5709142c8e71ccc846f6c5398"
    },
    {
     "path": "asphalt-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "asphalt",
      "ambientcg": "Asphalt010",
      "colorSpace": "linear",
      "normalConvention": "OpenGL"
     },
     "bytes": 166822,
     "sha256": "d71b3a0ac9b858efa52352e26cddf414b6da2b6f93a1a29933796fd1736c93d0"
    },
    {
     "path": "asphalt-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "asphalt",
      "ambientcg": "Asphalt010",
      "colorSpace": "linear"
     },
     "bytes": 285984,
     "sha256": "acb6a8af3bb6f531e7727bbe2b8b50a3f632193dd7f906de6a432cd78439a2f6"
    },
    {
     "path": "road-patched-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "road-patched",
      "ambientcg": "Road006",
      "colorSpace": "srgb",
      "tile_m": [
       7.5,
       7.5
      ]
     },
     "bytes": 156692,
     "sha256": "063c7906c277212577b15af38edf3e3ffd751da2133bec5012d8138226207c3b"
    },
    {
     "path": "road-patched-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "road-patched",
      "ambientcg": "Road006",
      "colorSpace": "linear",
      "normalConvention": "OpenGL",
      "tile_m": [
       7.5,
       7.5
      ]
     },
     "bytes": 154444,
     "sha256": "edf2d994aeab70956cac6fc7a52af69257bc983669e77c4dcb91fd7607fa5003"
    },
    {
     "path": "road-patched-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "road-patched",
      "ambientcg": "Road006",
      "colorSpace": "linear",
      "tile_m": [
       7.5,
       7.5
      ]
     },
     "bytes": 167960,
     "sha256": "e9c57dcf575cd093e2cdbd081b87d95d748d1867f01a028a3d46859a54e4b8fc"
    },
    {
     "path": "concrete-color.webp",
     "meta": {
      "size": [
       1024,
       512
      ],
      "role": "color",
      "material": "concrete",
      "ambientcg": "Concrete034",
      "colorSpace": "srgb",
      "tile_m": [
       1.1,
       0.55
      ]
     },
     "bytes": 36268,
     "sha256": "aaf9446b2912489f835005e5e40fbd64ec9ecc5304259a297ff404e61370db0d"
    },
    {
     "path": "concrete-normal.webp",
     "meta": {
      "size": [
       512,
       256
      ],
      "role": "normal",
      "material": "concrete",
      "ambientcg": "Concrete034",
      "colorSpace": "linear",
      "normalConvention": "OpenGL",
      "tile_m": [
       1.1,
       0.55
      ]
     },
     "bytes": 84496,
     "sha256": "59af47d100e826036b75456a052ddff5eabfe649411694d4c3e83b269bc9b452"
    },
    {
     "path": "concrete-roughness.webp",
     "meta": {
      "size": [
       1024,
       512
      ],
      "role": "roughness",
      "material": "concrete",
      "ambientcg": "Concrete034",
      "colorSpace": "linear",
      "tile_m": [
       1.1,
       0.55
      ]
     },
     "bytes": 26450,
     "sha256": "b28e05f426a61ab3da61b2227699e609a6261b8cbed2457d9609278aa5a3ce3a"
    },
    {
     "path": "paving-color.webp",
     "meta": {
      "size": [
       512,
       1024
      ],
      "role": "color",
      "material": "paving",
      "ambientcg": "PavingStones138",
      "colorSpace": "srgb",
      "tile_m": [
       1.25,
       2.5
      ]
     },
     "bytes": 156756,
     "sha256": "f270c0767c2584f2fba61ce063409f1d48af285fe89f8ae3efc59f9e8627b0ff"
    },
    {
     "path": "paving-normal.webp",
     "meta": {
      "size": [
       256,
       512
      ],
      "role": "normal",
      "material": "paving",
      "ambientcg": "PavingStones138",
      "colorSpace": "linear",
      "normalConvention": "OpenGL",
      "tile_m": [
       1.25,
       2.5
      ]
     },
     "bytes": 105928,
     "sha256": "a359378d10b918b0c627834e89600820379ec45bf1ed665e5bb14dacf4a8257c"
    },
    {
     "path": "paving-roughness.webp",
     "meta": {
      "size": [
       512,
       1024
      ],
      "role": "roughness",
      "material": "paving",
      "ambientcg": "PavingStones138",
      "colorSpace": "linear",
      "tile_m": [
       1.25,
       2.5
      ]
     },
     "bytes": 47852,
     "sha256": "0f44106f69fbe78c471aa4f71132b7169c9eb0363e4a6bd5b04c668db195ad48"
    },
    {
     "path": "paving-ao.webp",
     "meta": {
      "size": [
       512,
       1024
      ],
      "role": "ao",
      "material": "paving",
      "ambientcg": "PavingStones138",
      "colorSpace": "linear",
      "tile_m": [
       1.25,
       2.5
      ]
     },
     "bytes": 69120,
     "sha256": "71a2fba92d8c2a4365aa689c53788be6db6e6404a46fbb019cffa2a668a889be"
    },
    {
     "path": "grass-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "grass",
      "ambientcg": "Grass004",
      "colorSpace": "srgb",
      "tile_m": [
       1.4,
       1.4
      ]
     },
     "bytes": 381318,
     "sha256": "1fc22c2bc1b6e2e39f6ca3b5514aeb9dff3f8c9c56e646eefd8ccd1ab0f48301"
    },
    {
     "path": "grass-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "grass",
      "ambientcg": "Grass004",
      "colorSpace": "linear",
      "normalConvention": "OpenGL",
      "tile_m": [
       1.4,
       1.4
      ]
     },
     "bytes": 319506,
     "sha256": "a251b7c750d5ea759c74ae8581ea306df88ed60ba49d9d02cb01276c1333d69a"
    },
    {
     "path": "grass-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "grass",
      "ambientcg": "Grass004",
      "colorSpace": "linear",
      "tile_m": [
       1.4,
       1.4
      ]
     },
     "bytes": 399514,
     "sha256": "1c07b06aa9c3bdb2eea2b57753fcdbfe9271b072640ecb42ebd4c1b9de1ff366"
    },
    {
     "path": "grass-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "grass",
      "ambientcg": "Grass004",
      "colorSpace": "linear",
      "tile_m": [
       1.4,
       1.4
      ]
     },
     "bytes": 448628,
     "sha256": "ebe143bb2d874df6b02a72e0a87a94f8f593d4431bd7eb0e6595413c45fa3c8d"
    },
    {
     "path": "snow-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "snow",
      "ambientcg": "Snow006",
      "colorSpace": "srgb",
      "tile_m": [
       2.5,
       2.5
      ]
     },
     "bytes": 30414,
     "sha256": "e3a533506808d728e08dfba86db34fd723b18b106835ed7d3b177fe8887706f8"
    },
    {
     "path": "snow-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "snow",
      "ambientcg": "Snow006",
      "colorSpace": "linear",
      "normalConvention": "OpenGL",
      "tile_m": [
       2.5,
       2.5
      ]
     },
     "bytes": 226118,
     "sha256": "582331094aaee7160c365ba4f74b5eab3bf5a90b10f70842c3804e37690a14d1"
    },
    {
     "path": "snow-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "snow",
      "ambientcg": "Snow006",
      "colorSpace": "linear",
      "tile_m": [
       2.5,
       2.5
      ]
     },
     "bytes": 44996,
     "sha256": "063ee2fb7b775fca50cd58477645c16275d58b864cf11e52d6668e01b25a3027"
    },
    {
     "path": "snow-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "snow",
      "ambientcg": "Snow006",
      "colorSpace": "linear",
      "tile_m": [
       2.5,
       2.5
      ]
     },
     "bytes": 82570,
     "sha256": "706505608febe9003098af3b5e8290d6ecb45f6fa580a880dc509c01bfaf08e0"
    },
    {
     "path": "dirt-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "dirt",
      "ambientcg": "Ground054",
      "colorSpace": "srgb",
      "tile_m": [
       3.5,
       3.5
      ]
     },
     "bytes": 261544,
     "sha256": "b5531f305c344be903b69b0f13c23126511cc203c94482d56cc87102491d6391"
    },
    {
     "path": "dirt-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "dirt",
      "ambientcg": "Ground054",
      "colorSpace": "linear",
      "normalConvention": "OpenGL",
      "tile_m": [
       3.5,
       3.5
      ]
     },
     "bytes": 204298,
     "sha256": "04e9da03bc31f10275d423d0984c1040753ff54e701d03e331b5654ff2c4d4e3"
    },
    {
     "path": "dirt-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "dirt",
      "ambientcg": "Ground054",
      "colorSpace": "linear",
      "tile_m": [
       3.5,
       3.5
      ]
     },
     "bytes": 198490,
     "sha256": "52aa76a4e776fc7a6154b0a29ca8e1e0a3d8fd1132971f3a1ca9eb46b640affd"
    },
    {
     "path": "dirt-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "dirt",
      "ambientcg": "Ground054",
      "colorSpace": "linear",
      "tile_m": [
       3.5,
       3.5
      ]
     },
     "bytes": 71274,
     "sha256": "3e13f7494a3fa57b5fec0ee115a632aafff35aee94f19f8b5a8977657cc3a1d4"
    },
    {
     "path": "forest-ground-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "forest-ground",
      "ambientcg": "Ground037",
      "colorSpace": "srgb",
      "tile_m": [
       2.1,
       2.1
      ]
     },
     "bytes": 509060,
     "sha256": "74fbcfe9ecb57c01be5c33ab1cc6c9cc1345e1c422cd9141dc2bdee350aecb0b"
    },
    {
     "path": "forest-ground-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "forest-ground",
      "ambientcg": "Ground037",
      "colorSpace": "linear",
      "normalConvention": "OpenGL",
      "tile_m": [
       2.1,
       2.1
      ]
     },
     "bytes": 301972,
     "sha256": "ea5826c8fc956138cb4fc5a4c247201662468a56d1619ad02bd1ea8f00ebfe61"
    },
    {
     "path": "forest-ground-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "forest-ground",
      "ambientcg": "Ground037",
      "colorSpace": "linear",
      "tile_m": [
       2.1,
       2.1
      ]
     },
     "bytes": 228588,
     "sha256": "d8082b9238373b8fab2d7c86b29be7fe0f4c0447dfcff8a9dd109f4812db0241"
    },
    {
     "path": "forest-ground-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "forest-ground",
      "ambientcg": "Ground037",
      "colorSpace": "linear",
      "tile_m": [
       2.1,
       2.1
      ]
     },
     "bytes": 136350,
     "sha256": "31dbafb4033ae02abd46a949dc607ed43bd60f82215e306de6ba9b30353d829b"
    }
   ],
   "base": "ambientcg-city/1/"
  },
  {
   "id": "ambientcg-mars",
   "version": 1,
   "kind": "texture",
   "title": "ambientCG Mars Ground Materials",
   "author": "ambientCG (Lennart Demes)",
   "license": "CC0-1.0",
   "source": "https://ambientcg.com/",
   "sources": [
    "https://ambientcg.com/view?id=Ground026",
    "https://ambientcg.com/view?id=Rocks011",
    "https://ambientcg.com/view?id=Gravel025",
    "https://ambientcg.com/view?id=Rock029"
   ],
   "notes": "화성 지면용 ambientCG 사진측량 PBR 재질 4종(붉은 모래·바위 지면·자갈·절벽 바위). 모두 이음매 없이 반복(tileable). color 는 sRGB(three: colorSpace = SRGBColorSpace), normal·roughness·ao 는 선형. normal 은 OpenGL 규약(+Y 위, three 기본과 같음 — NormalGL 원본). meta.tile_m 은 원본 한 장이 덮는 실제 크기(m, ambientCG 가 밝힌 것만). WebP: color·roughness·ao 손실 q85, normal 은 near-lossless(40) — 손실 WebP 는 색차 4:2:0 이라 사진측량 노멀의 잔결이 뭉개져서(측정 각도 오차 평균 9~11°) near-lossless 를 쓰되, 지형에 반복해 깔리는 지면 노멀은 512 로 줄였다(장당 약 0.3MB). 색은 원본 그대로이며 게임이 필요하면 color 에 색을 곱해 쓴다. ao 는 aoMap 용(three r151+ 는 기본 uv 를 쓴다). 원본: red-sand=Ground026, rock-ground=Rocks011, gravel=Gravel025, cliff-rock=Rock029.",
   "tags": [
    "texture",
    "pbr",
    "ground",
    "terrain",
    "mars",
    "tileable"
   ],
   "files": [
    {
     "path": "red-sand-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "red-sand",
      "ambientcg": "Ground026",
      "colorSpace": "srgb"
     },
     "bytes": 281904,
     "sha256": "aac39e36626d238fcb383653dede8c83d7a09ffbb313be9350e569ae9308fe70"
    },
    {
     "path": "red-sand-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "red-sand",
      "ambientcg": "Ground026",
      "colorSpace": "linear",
      "normalConvention": "OpenGL"
     },
     "bytes": 267068,
     "sha256": "f8bb78228c0f4b3dc32b3ee7ad06dcbd9df4b8d16f5fdcdc1788119f633da64c"
    },
    {
     "path": "red-sand-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "red-sand",
      "ambientcg": "Ground026",
      "colorSpace": "linear"
     },
     "bytes": 138292,
     "sha256": "dcc061d672ca9d0f15b1702567b004a9579edfd7744d18c33c4bd073b1dd04a1"
    },
    {
     "path": "red-sand-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "red-sand",
      "ambientcg": "Ground026",
      "colorSpace": "linear"
     },
     "bytes": 92904,
     "sha256": "03fc64b60ade7f9f10fa8f61cc7a25d7f9602ee0cf5cf99a308a0ab286b3f22c"
    },
    {
     "path": "rock-ground-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "rock-ground",
      "ambientcg": "Rocks011",
      "colorSpace": "srgb"
     },
     "bytes": 191552,
     "sha256": "43a8f5883df2f121d3c1726b47602e39a43394ba25d67d0a20e17e8db4277bd3"
    },
    {
     "path": "rock-ground-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "rock-ground",
      "ambientcg": "Rocks011",
      "colorSpace": "linear",
      "normalConvention": "OpenGL"
     },
     "bytes": 249582,
     "sha256": "403dec23de1d34b1f608dec100b198d11340445bbd83eb1c2d4434f15af40c5a"
    },
    {
     "path": "rock-ground-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "rock-ground",
      "ambientcg": "Rocks011",
      "colorSpace": "linear"
     },
     "bytes": 73130,
     "sha256": "a1414dc334b1b2f41ade60467a47700c73caa691a8cd1800234e5a150586656f"
    },
    {
     "path": "rock-ground-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "rock-ground",
      "ambientcg": "Rocks011",
      "colorSpace": "linear"
     },
     "bytes": 183192,
     "sha256": "3f602a4ea15483988f5d6bf3d92545ed4cea141023673139bba9961b5cea1f3d"
    },
    {
     "path": "gravel-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "gravel",
      "ambientcg": "Gravel025",
      "colorSpace": "srgb",
      "tile_m": [
       1.5,
       1.5
      ]
     },
     "bytes": 246456,
     "sha256": "a2e6f972967bf25bd7c8057bc0c6409d8999902d93c79864965a3225047103c3"
    },
    {
     "path": "gravel-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "gravel",
      "ambientcg": "Gravel025",
      "colorSpace": "linear",
      "normalConvention": "OpenGL",
      "tile_m": [
       1.5,
       1.5
      ]
     },
     "bytes": 356336,
     "sha256": "1fd4518daff8090c39ef206cf0746615a09e972bd67adc7dbd1236be5e66e93b"
    },
    {
     "path": "gravel-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "gravel",
      "ambientcg": "Gravel025",
      "colorSpace": "linear",
      "tile_m": [
       1.5,
       1.5
      ]
     },
     "bytes": 96512,
     "sha256": "f93d79bb69a6e4cc7505657b2e49f3394b64898c1b5a698598f408063bcfdb2d"
    },
    {
     "path": "gravel-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "gravel",
      "ambientcg": "Gravel025",
      "colorSpace": "linear",
      "tile_m": [
       1.5,
       1.5
      ]
     },
     "bytes": 346302,
     "sha256": "90d36427e88b4d49a6d8b8b4a2edbfb42a40f7dd745ad767044fda03f7a85b41"
    },
    {
     "path": "cliff-rock-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "cliff-rock",
      "ambientcg": "Rock029",
      "colorSpace": "srgb"
     },
     "bytes": 272742,
     "sha256": "2ab61e6a7f1627b8756796075e1113d761b819a70cb344439ce71f687199b9d9"
    },
    {
     "path": "cliff-rock-normal.webp",
     "meta": {
      "size": 512,
      "role": "normal",
      "material": "cliff-rock",
      "ambientcg": "Rock029",
      "colorSpace": "linear",
      "normalConvention": "OpenGL"
     },
     "bytes": 334748,
     "sha256": "d65f42b6309e0170c0e2623327b9ef9898b945a229f33be6f9ad790d8ce2d1fb"
    },
    {
     "path": "cliff-rock-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "cliff-rock",
      "ambientcg": "Rock029",
      "colorSpace": "linear"
     },
     "bytes": 137310,
     "sha256": "5ae25f6faa32c1e59562269f068ea1ca21555207873f08050b2db21f5142d0b7"
    },
    {
     "path": "cliff-rock-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "cliff-rock",
      "ambientcg": "Rock029",
      "colorSpace": "linear"
     },
     "bytes": 99364,
     "sha256": "e66eeb9ba29cde9716530817f837aae50aacd42a3f8918f11f7a9ceeb322f0be"
    }
   ],
   "base": "ambientcg-mars/1/"
  },
  {
   "id": "ambientcg-mars-lite",
   "version": 1,
   "kind": "texture",
   "title": "ambientCG Mars Ground Materials — lite",
   "author": "ambientCG (Lennart Demes)",
   "license": "CC0-1.0",
   "source": "https://ambientcg.com/",
   "sources": [
    "https://ambientcg.com/view?id=Ground026",
    "https://ambientcg.com/view?id=Rocks011",
    "https://ambientcg.com/view?id=Gravel025",
    "https://ambientcg.com/view?id=Rock029"
   ],
   "notes": "ambientcg-mars/1 에서 만든 가벼운 사본(tools/models/ambientcg-lite.mjs). <재질>-luma: color 의 선형 밝기(0.3R+0.59G+0.11B)를 sRGB 회색조로 — SRGBColorSpace 로 읽어 밝기만 쓰는 셰이더(MECH MARS 지형)용, 512. <재질>-normal-256: 노멀 256, near-lossless(40)(OpenGL 규약 +Y 위). 색이 필요하면 원본 팩의 color 를 쓴다. 처음 쓴 게임: MECH MARS(휴대폰 첫 로딩).",
   "tags": [
    "texture",
    "ground",
    "terrain",
    "mars",
    "tileable",
    "lite"
   ],
   "files": [
    {
     "path": "red-sand-luma-512.webp",
     "meta": {
      "material": "red-sand",
      "ambientcg": "Ground026",
      "from": "ambientcg-mars/1",
      "size": 512,
      "role": "luma",
      "colorSpace": "srgb"
     },
     "bytes": 59236,
     "sha256": "593b7f3f93124a4702dafd1ba16220172d38c3d509d45a70fcc6b9d3649717b4"
    },
    {
     "path": "red-sand-normal-256.webp",
     "meta": {
      "material": "red-sand",
      "ambientcg": "Ground026",
      "from": "ambientcg-mars/1",
      "size": 256,
      "role": "normal",
      "colorSpace": "linear"
     },
     "bytes": 55112,
     "sha256": "b6f4e563d0ae7014740d6b4d5d63da76c14b424afb748ac3cb84fbcc8690ba0c"
    },
    {
     "path": "rock-ground-luma-512.webp",
     "meta": {
      "material": "rock-ground",
      "ambientcg": "Rocks011",
      "from": "ambientcg-mars/1",
      "size": 512,
      "role": "luma",
      "colorSpace": "srgb"
     },
     "bytes": 44346,
     "sha256": "52402c729d370e204531070b2e2ca7a7a7f39fc16db2ad02f43316102c56f84c"
    },
    {
     "path": "rock-ground-normal-256.webp",
     "meta": {
      "material": "rock-ground",
      "ambientcg": "Rocks011",
      "from": "ambientcg-mars/1",
      "size": 256,
      "role": "normal",
      "colorSpace": "linear"
     },
     "bytes": 64514,
     "sha256": "b4cc562f1a599584b44612a2bf676be4a9261f1b74986634b92ffed1c940acee"
    },
    {
     "path": "gravel-luma-512.webp",
     "meta": {
      "material": "gravel",
      "ambientcg": "Gravel025",
      "tile_m": [
       1.5,
       1.5
      ],
      "from": "ambientcg-mars/1",
      "size": 512,
      "role": "luma",
      "colorSpace": "srgb"
     },
     "bytes": 66884,
     "sha256": "4e78601a697c3d38d5a79897c91da004bb7738c26afb58b469e19c8b37c4d13f"
    },
    {
     "path": "gravel-normal-256.webp",
     "meta": {
      "material": "gravel",
      "ambientcg": "Gravel025",
      "tile_m": [
       1.5,
       1.5
      ],
      "from": "ambientcg-mars/1",
      "size": 256,
      "role": "normal",
      "colorSpace": "linear"
     },
     "bytes": 95624,
     "sha256": "91ef1ba6646fb01d946f0d9bd4126e10136c181f2f3147cc96ff010879b51c52"
    },
    {
     "path": "cliff-rock-luma-512.webp",
     "meta": {
      "material": "cliff-rock",
      "ambientcg": "Rock029",
      "from": "ambientcg-mars/1",
      "size": 512,
      "role": "luma",
      "colorSpace": "srgb"
     },
     "bytes": 64826,
     "sha256": "0997d339e91a0135b7f5d3c6227de8fb0a0854fc9619cc9c888b8e136d565e3d"
    },
    {
     "path": "cliff-rock-normal-256.webp",
     "meta": {
      "material": "cliff-rock",
      "ambientcg": "Rock029",
      "from": "ambientcg-mars/1",
      "size": 256,
      "role": "normal",
      "colorSpace": "linear"
     },
     "bytes": 82504,
     "sha256": "e650ed9c9566a0e6f7d893604d744f9fa6d826fd45f8505aeff5a8e49fcedbd0"
    }
   ],
   "base": "ambientcg-mars-lite/1/"
  },
  {
   "id": "ambientcg-metal",
   "version": 1,
   "kind": "texture",
   "title": "ambientCG Metal Materials",
   "author": "ambientCG (Lennart Demes)",
   "license": "CC0-1.0",
   "source": "https://ambientcg.com/",
   "sources": [
    "https://ambientcg.com/view?id=PaintedMetal010",
    "https://ambientcg.com/view?id=MetalPlates003"
   ],
   "notes": "기체·기지용 ambientCG PBR 금속 재질 2종(벗겨지고 녹슨 흰 도장 금속, 리벳 박힌 금속 판). 이음매 없이 반복(tileable). color 는 sRGB, normal(OpenGL 규약, +Y 위)·roughness·metalness(·ao) 는 선형. 흰 도장은 게임이 color 에 색을 곱해 도색을 바꾸기 좋다. painted-metal-metalness 는 원본 그대로 전부 0(도장·녹 모두 비금속 — metalness=0 상수로 써도 같다), metal-plate-metalness 는 판=1·이음선=낮음. WebP: color·roughness·metalness·ao 손실 q85, normal near-lossless(40). 원본: painted-metal=PaintedMetal010, metal-plate=MetalPlates003.",
   "tags": [
    "texture",
    "pbr",
    "metal",
    "painted",
    "rust",
    "tileable"
   ],
   "files": [
    {
     "path": "painted-metal-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "painted-metal",
      "ambientcg": "PaintedMetal010",
      "colorSpace": "srgb"
     },
     "bytes": 147820,
     "sha256": "6c7ae4d74dc8aaa9be8ac13c9fdd499fbd43c5cb76f56f4e5a8a5809c3e35032"
    },
    {
     "path": "painted-metal-normal.webp",
     "meta": {
      "size": 1024,
      "role": "normal",
      "material": "painted-metal",
      "ambientcg": "PaintedMetal010",
      "colorSpace": "linear",
      "normalConvention": "OpenGL"
     },
     "bytes": 810772,
     "sha256": "ee39f2c38490eedeb592b8444bf065f59fcb41a4db7de268eb3f109825945e6c"
    },
    {
     "path": "painted-metal-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "painted-metal",
      "ambientcg": "PaintedMetal010",
      "colorSpace": "linear"
     },
     "bytes": 102454,
     "sha256": "3468f2966ce9a7733e5fddd7141b30838d21fc5fc0c45c69536b510949e425b7"
    },
    {
     "path": "painted-metal-ao.webp",
     "meta": {
      "size": 1024,
      "role": "ao",
      "material": "painted-metal",
      "ambientcg": "PaintedMetal010",
      "colorSpace": "linear"
     },
     "bytes": 144660,
     "sha256": "0a852b51e5f798d8a308b9cc82d5859c3b13b995cd59674b016658bd1a16770c"
    },
    {
     "path": "painted-metal-metalness.webp",
     "meta": {
      "size": 1024,
      "role": "metalness",
      "material": "painted-metal",
      "ambientcg": "PaintedMetal010",
      "colorSpace": "linear"
     },
     "bytes": 1926,
     "sha256": "ab21bd62ec4f18c6997c48e7f307195e096c5ce07e93c1a0dfde910446f6cecd"
    },
    {
     "path": "metal-plate-color.webp",
     "meta": {
      "size": 1024,
      "role": "color",
      "material": "metal-plate",
      "ambientcg": "MetalPlates003",
      "colorSpace": "srgb"
     },
     "bytes": 15512,
     "sha256": "53b2ed60ff759e80679793fe46baebdaf9f377431c6689ea710543b452fe6fe0"
    },
    {
     "path": "metal-plate-normal.webp",
     "meta": {
      "size": 1024,
      "role": "normal",
      "material": "metal-plate",
      "ambientcg": "MetalPlates003",
      "colorSpace": "linear",
      "normalConvention": "OpenGL"
     },
     "bytes": 527974,
     "sha256": "00d4687b14853f6a8e3829712292baafbf4428dfea5152fbeb57fa8788da0158"
    },
    {
     "path": "metal-plate-roughness.webp",
     "meta": {
      "size": 1024,
      "role": "roughness",
      "material": "metal-plate",
      "ambientcg": "MetalPlates003",
      "colorSpace": "linear"
     },
     "bytes": 42158,
     "sha256": "aff704e054331c8bddfbe286a4389e9b4ada6ecc45e96960e8162953b8b5742e"
    },
    {
     "path": "metal-plate-metalness.webp",
     "meta": {
      "size": 1024,
      "role": "metalness",
      "material": "metal-plate",
      "ambientcg": "MetalPlates003",
      "colorSpace": "linear"
     },
     "bytes": 56432,
     "sha256": "3401620dd6e4b4c70c21c21d3949c24047cdcd01690e5c3c59b509b714fb8794"
    }
   ],
   "base": "ambientcg-metal/1/"
  },
  {
   "id": "curling-stone",
   "version": 1,
   "kind": "model",
   "title": "Curling Stone",
   "author": "ADMA200",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/curling-cartoon-tiger-and-ball-382f4534a1c24b4dacd011378a2a6359",
   "notes": "Static Body/Handle geometry from the attributed ShenMian/curling mirror at e8d002daeeb7ce9a93de640153e501a364f24afe. Original materials replaced with solid PBR; normalized to 0.29 m diameter. No source textures or embedded scripts retained.",
   "tags": [
    "curling",
    "sport",
    "stone"
   ],
   "files": [
    {
     "path": "curling-stone.glb",
     "meta": {
      "tris": 5040,
      "vertices": 2555,
      "diameter": 0.29,
      "anims": []
     },
     "bytes": 123572,
     "sha256": "3ef3e6cc5770c04a7c50ba7c27c44f3c3647115ef79ab7662788d18185effbd9"
    },
    {
     "path": "stone-coral.png",
     "meta": {
      "role": "sprite",
      "size": [
       256,
       256
      ],
      "derivedFrom": "curling-stone.glb",
      "changes": "Top view rendered with Three.js; handle recolored for team."
     },
     "bytes": 25384,
     "sha256": "30782baa8205d2ecc6464f13db52a470df48751a9a2fb56842aabe158eaa1d71"
    },
    {
     "path": "stone-mint.png",
     "meta": {
      "role": "sprite",
      "size": [
       256,
       256
      ],
      "derivedFrom": "curling-stone.glb",
      "changes": "Top view rendered with Three.js; handle recolored for team."
     },
     "bytes": 26031,
     "sha256": "fc6062eb56d5888d9badb365d78f0ee986e4d0c8c6909a26d69ffee95bc3995e"
    }
   ],
   "base": "curling-stone/1/"
  },
  {
   "id": "fishing-audio",
   "version": 1,
   "kind": "audio",
   "title": "Moonlake Fishing Audio",
   "author": "CleytonKauffman, RandomMind, jcpmcdonald",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "Moonlake calm exploration music, water ambience and fishing effects. CC0 source pages and original files are recorded in sources/fishing-audio.json; normalized MP3 output is shared by the GameNow asset library. Audio listening review is still required before claiming final mix quality.",
   "tags": [
    "fishing",
    "lake",
    "water",
    "ambience",
    "music",
    "effects"
   ],
   "files": [
    {
     "path": "moonlake-theme.mp3",
     "meta": {
      "role": "bgm",
      "title": "Exploration Theme",
      "author": "CleytonKauffman",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/exploration-theme"
      ],
      "duration": 134.4,
      "loop": true,
      "origin": [
       "theme.ogg"
      ]
     },
     "bytes": 2672349,
     "sha256": "fce915de001c9d4adbc7b598d5287f3cc6db54a885623493840a9793a15400c8"
    },
    {
     "path": "lake-waves.mp3",
     "meta": {
      "role": "ambience",
      "title": "Sea and river wave sounds",
      "author": "RandomMind",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/sea-and-river-wave-sounds"
      ],
      "duration": 30,
      "loop": true,
      "origin": [
       "river.mp3"
      ]
     },
     "bytes": 427660,
     "sha256": "2cc74536ca903399f376c11144c225a36c504c6dd435c6c9f47ceb77431c02f5"
    },
    {
     "path": "fish-splash.mp3",
     "meta": {
      "role": "sfx",
      "title": "Skippy Fish Water Sound Collection - waterReentry",
      "author": "jcpmcdonald",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/skippy-fish-water-sound-collection"
      ],
      "duration": 0.313,
      "origin": [
       "waterReentry.ogg"
      ]
     },
     "bytes": 8349,
     "sha256": "b4b5813b8de7539e34943db08a4b6c7dc5eca561f997bce115d5ed8d4d5080e2"
    },
    {
     "path": "bubbles.mp3",
     "meta": {
      "role": "sfx",
      "title": "Skippy Fish Water Sound Collection - bubbles",
      "author": "jcpmcdonald",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/skippy-fish-water-sound-collection"
      ],
      "duration": 0.604,
      "origin": [
       "bubbles.ogg"
      ]
     },
     "bytes": 15501,
     "sha256": "697db100d48864db8d0e37eb3725dc82bc1ff79f19ef4a11a2a3126b0ed039be"
    }
   ],
   "base": "fishing-audio/1/"
  },
  {
   "id": "fishing-models",
   "version": 1,
   "kind": "model",
   "title": "Animated Fish Pack Models",
   "author": "Quaternius",
   "license": "CC0-1.0",
   "source": "https://opengameart.org/content/animated-fish",
   "notes": "The 2018 OpenGameArt release and its included License.txt explicitly dedicate this pack to CC0 1.0. OBJ and MTL were converted to GLB with obj2gltf; geometry and source colors are preserved. Source page and license are in licenses/fishing-models/.",
   "tags": [
    "fish",
    "fishing",
    "underwater",
    "lowpoly",
    "wildlife"
   ],
   "files": [
    {
     "path": "fish-a.glb",
     "meta": {
      "role": "fish",
      "origin": [
       "OBJ/Fish1.obj",
       "OBJ/Fish1.mtl"
      ],
      "author": "Quaternius",
      "license": "CC0-1.0"
     },
     "bytes": 32920,
     "sha256": "7079e11205c0d68a279a96abccbb4eb39477037f1e78e2700886665c16ab884f"
    },
    {
     "path": "fish-b.glb",
     "meta": {
      "role": "fish",
      "origin": [
       "OBJ/Fish2.obj",
       "OBJ/Fish2.mtl"
      ],
      "author": "Quaternius",
      "license": "CC0-1.0"
     },
     "bytes": 30304,
     "sha256": "58cd9237da5bc341aaa12ecc7ad8d24e57a26babc93738f36a9b4b7b97c38f70"
    },
    {
     "path": "fish-c.glb",
     "meta": {
      "role": "fish",
      "origin": [
       "OBJ/Fish3.obj",
       "OBJ/Fish3.mtl"
      ],
      "author": "Quaternius",
      "license": "CC0-1.0"
     },
     "bytes": 40168,
     "sha256": "e5005fdcec259f60f149158f724b5dd5d18822205b51f6ebf5c62c40498f0495"
    },
    {
     "path": "manta-ray.glb",
     "meta": {
      "role": "ray",
      "origin": [
       "OBJ/Manta ray.obj",
       "OBJ/Manta ray.mtl"
      ],
      "author": "Quaternius",
      "license": "CC0-1.0"
     },
     "bytes": 40564,
     "sha256": "1c8b2f717f7a5f92c8584c9463897cb71b226aae8153e4039baf09da770af868"
    },
    {
     "path": "shark.glb",
     "meta": {
      "role": "boss",
      "origin": [
       "OBJ/Shark.obj",
       "OBJ/Shark.mtl"
      ],
      "author": "Quaternius",
      "license": "CC0-1.0"
     },
     "bytes": 36416,
     "sha256": "a57f87d03c3b70110237961e3718401f62d5d0d8c219157e98576b99419c21c0"
    }
   ],
   "base": "fishing-models/1/"
  },
  {
   "id": "kaykit-space-base",
   "version": 1,
   "kind": "model",
   "title": "KayKit Space Base Bits",
   "author": "Kay Lousberg (KayKit, www.kaylousberg.com)",
   "license": "CC0-1.0",
   "source": "https://github.com/KayKit-Game-Assets/KayKit-Space-Base-Bits-1.0",
   "notes": "KayKit Space Base Bits 1.0 의 glTF 중 화성 기지용 33개. 정적 소품: 노드 변환을 굽고 한 메시로 합침, 원점=바닥 중심, 원본 단위 유지(meta.bbox), meshopt. 모든 glb 가 그라디언트 아틀라스 한 장 spacebits-texture.webp(무손실 WebP, EXT_texture_webp)을 외부 uri 로 참조한다 — 같은 폴더에서 읽을 것(GLTFLoader 는 glb 주소 기준으로 찾는다). 앞쪽=+Z(원본 그대로 — 트럭 앞유리·착륙선·기지 모듈 문이 +Z). 움직일 부품(트럭 바퀴·풍차 날개·드릴·차고 문)이 있는 모델은 노드를 지켰다 — meta.parts 의 노드 이름(피벗은 원본 그대로, 축척 1)을 돌리거나 옮기면 된다. 원작자 표기는 의무 아님(권장: Kay Lousberg).",
   "tags": [
    "scifi",
    "space-base",
    "mars",
    "low-poly",
    "static",
    "kaykit"
   ],
   "files": [
    {
     "path": "spacebits-texture.webp",
     "meta": {
      "role": "atlas",
      "size": [
       1024,
       1024
      ],
      "format": "webp-lossless",
      "original": "spacebits_texture.png",
      "usedBy": "all glb (external uri)"
     },
     "bytes": 12924,
     "sha256": "b7393234d933e9346e2dfe2cc46750dbb37fc0860a716feeb81323712e0df5f1"
    },
    {
     "path": "basemodule-a.glb",
     "meta": {
      "name": "basemodule_A",
      "group": "base-module",
      "tris": 586,
      "bbox": {
       "min": [
        -1.124,
        0,
        -1.088
       ],
       "max": [
        1.124,
        1,
        1.088
       ]
      },
      "size": [
       2.248,
       1,
       2.176
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 14044,
     "sha256": "32d0d063a2a8427d65af9a0aedd21e5907ca0e62f2344c4cc27f61c268e1e58f"
    },
    {
     "path": "basemodule-b.glb",
     "meta": {
      "name": "basemodule_B",
      "group": "base-module",
      "tris": 620,
      "bbox": {
       "min": [
        -1.04,
        0,
        -1.158
       ],
       "max": [
        1.04,
        1,
        1.158
       ]
      },
      "size": [
       2.08,
       1,
       2.316
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 15692,
     "sha256": "7394a8bd90a76f73a415d22c6223f9791ee6c4efab967fd1ba805b7f3e34dd94"
    },
    {
     "path": "basemodule-c.glb",
     "meta": {
      "name": "basemodule_C",
      "group": "base-module",
      "tris": 644,
      "bbox": {
       "min": [
        -1,
        0,
        -1.103
       ],
       "max": [
        1,
        1,
        1.103
       ]
      },
      "size": [
       2,
       1,
       2.206
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 15640,
     "sha256": "8c0f13109fc3878bc7bb499e9905df8d565ceebc7aefb0430829531e68d97b61"
    },
    {
     "path": "basemodule-d.glb",
     "meta": {
      "name": "basemodule_D",
      "group": "base-module",
      "tris": 780,
      "bbox": {
       "min": [
        -1.222,
        0,
        -1.072
       ],
       "max": [
        1.222,
        1,
        1.072
       ]
      },
      "size": [
       2.444,
       1,
       2.144
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 18824,
     "sha256": "e89807f446fec3702f2e7e9ae73fad6c797f5b391d30b1a3a0a0485b9b152898"
    },
    {
     "path": "basemodule-e.glb",
     "meta": {
      "name": "basemodule_E",
      "group": "base-module",
      "tris": 732,
      "bbox": {
       "min": [
        -1.111,
        0,
        -1.139
       ],
       "max": [
        1.111,
        1.65,
        1.139
       ]
      },
      "size": [
       2.222,
       1.65,
       2.278
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 18120,
     "sha256": "713d14550ccca54db8e2a2e24b639ede90688a6a99ca2e87a49f18277d6759df"
    },
    {
     "path": "basemodule-garage.glb",
     "meta": {
      "name": "basemodule_garage",
      "group": "base-module",
      "tris": 770,
      "bbox": {
       "min": [
        -1,
        0,
        -1.187
       ],
       "max": [
        1,
        1,
        1.187
       ]
      },
      "size": [
       2,
       1,
       2.374
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ],
      "parts": [
       {
        "node": "basemodule_garage_door",
        "pivot": [
         0,
         0,
         -0.091
        ]
       }
      ]
     },
     "bytes": 19308,
     "sha256": "9d2fc301e42802279cfd579acb715caf1b9b395a0e3a7021ffc523e605197a96"
    },
    {
     "path": "roofmodule-solarpanels.glb",
     "meta": {
      "name": "roofmodule_solarpanels",
      "group": "roof",
      "tris": 284,
      "bbox": {
       "min": [
        -0.698,
        0,
        -0.698
       ],
       "max": [
        0.698,
        0.571,
        0.698
       ]
      },
      "size": [
       1.396,
       0.571,
       1.396
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 7712,
     "sha256": "6069f7771e017f2fbff61fb129ab2026d6cbe665e53465218489ec899ff0d355"
    },
    {
     "path": "roofmodule-cargo-a.glb",
     "meta": {
      "name": "roofmodule_cargo_A",
      "group": "roof",
      "tris": 784,
      "bbox": {
       "min": [
        -0.698,
        0,
        -0.698
       ],
       "max": [
        0.698,
        0.72,
        0.698
       ]
      },
      "size": [
       1.396,
       0.72,
       1.396
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 17672,
     "sha256": "2333fd2ed8c94b89e7748b93f2d4db0451768bf54d73abe118ff53812332c9bb"
    },
    {
     "path": "cargo-a.glb",
     "meta": {
      "name": "cargo_A",
      "group": "cargo",
      "tris": 128,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.26
       ],
       "max": [
        0.25,
        0.52,
        0.26
       ]
      },
      "size": [
       0.5,
       0.52,
       0.52
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 4680,
     "sha256": "56a5da7ebb22f903effd7caa31d037b1cbfdf7ece36c1ff23705fd22e743175b"
    },
    {
     "path": "cargo-a-stacked.glb",
     "meta": {
      "name": "cargo_A_stacked",
      "group": "cargo",
      "tris": 488,
      "bbox": {
       "min": [
        -0.51,
        0,
        -0.51
       ],
       "max": [
        0.51,
        1.021,
        0.51
       ]
      },
      "size": [
       1.02,
       1.021,
       1.02
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 13320,
     "sha256": "a344421d55ea4366324dba2cb217d61c10af84207f1192cb82976df30699eeab"
    },
    {
     "path": "containers-a.glb",
     "meta": {
      "name": "containers_A",
      "group": "cargo",
      "tris": 280,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        0.2,
        0.25
       ]
      },
      "size": [
       0.5,
       0.2,
       0.5
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 8232,
     "sha256": "4ebc5328d62aed72fce2152f88682f8995e3a18327cc888c361351b2b38e47f2"
    },
    {
     "path": "cargodepot-a.glb",
     "meta": {
      "name": "cargodepot_A",
      "group": "cargo",
      "tris": 924,
      "bbox": {
       "min": [
        -1.036,
        0,
        -1.041
       ],
       "max": [
        1.036,
        1.12,
        1.041
       ]
      },
      "size": [
       2.072,
       1.12,
       2.082
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 20788,
     "sha256": "18d87009038822c52e29df20e7577042aad9bc3d021e24cb18388a0e4edf29ca"
    },
    {
     "path": "drill-structure.glb",
     "meta": {
      "name": "drill_structure",
      "group": "industry",
      "tris": 1198,
      "bbox": {
       "min": [
        -0.875,
        0,
        -0.875
       ],
       "max": [
        0.875,
        2,
        0.875
       ]
      },
      "size": [
       1.75,
       2,
       1.75
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ],
      "parts": [
       {
        "node": "drill_module",
        "pivot": [
         0,
         1,
         0
        ]
       }
      ]
     },
     "bytes": 28056,
     "sha256": "21a13fe12de88493126fcf26321ff34652b5a932df136b2fb259682ff1962128"
    },
    {
     "path": "windturbine-tall.glb",
     "meta": {
      "name": "windturbine_tall",
      "group": "power",
      "tris": 632,
      "bbox": {
       "min": [
        -0.833,
        0,
        -0.5
       ],
       "max": [
        0.833,
        3,
        0.5
       ]
      },
      "size": [
       1.666,
       3,
       1
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ],
      "parts": [
       {
        "node": "windturbine_tall_fan",
        "pivot": [
         0,
         2.05,
         0.055
        ]
       }
      ]
     },
     "bytes": 15604,
     "sha256": "d394619035a932fa6df0d576db6db64a83f2a48df737b82ddbd970a696b25fd1"
    },
    {
     "path": "solarpanel.glb",
     "meta": {
      "name": "solarpanel",
      "group": "power",
      "tris": 118,
      "bbox": {
       "min": [
        -0.45,
        0,
        -0.225
       ],
       "max": [
        0.45,
        0.371,
        0.225
       ]
      },
      "size": [
       0.9,
       0.371,
       0.45
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 4568,
     "sha256": "b893730e7578f2f612d6579810020c0a78fc0f95ccd0887157b05639ea4f2ee8"
    },
    {
     "path": "lander-a.glb",
     "meta": {
      "name": "lander_A",
      "group": "vehicle",
      "tris": 1464,
      "bbox": {
       "min": [
        -0.686,
        0,
        -0.711
       ],
       "max": [
        0.686,
        1.192,
        0.711
       ]
      },
      "size": [
       1.372,
       1.192,
       1.422
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 30528,
     "sha256": "595e2df2e05332332e6e13e51fcc3a17309d43cd90558d9f54166f6ace96d72d"
    },
    {
     "path": "lander-b.glb",
     "meta": {
      "name": "lander_B",
      "group": "vehicle",
      "tris": 1208,
      "bbox": {
       "min": [
        -0.686,
        0,
        -0.711
       ],
       "max": [
        0.686,
        1.095,
        0.711
       ]
      },
      "size": [
       1.372,
       1.095,
       1.422
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 27324,
     "sha256": "2789203aa6b8ffcf440d0436734fa12798523cbe432808170498d52821fff697"
    },
    {
     "path": "lander-base.glb",
     "meta": {
      "name": "lander_base",
      "group": "pad",
      "tris": 638,
      "bbox": {
       "min": [
        -0.672,
        0,
        -0.672
       ],
       "max": [
        0.672,
        0.5,
        0.672
       ]
      },
      "size": [
       1.344,
       0.5,
       1.344
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 16544,
     "sha256": "e5be0f8273a466c7991d17ea67145b9749616eef1c6fe774fa0ce2f417c4507e"
    },
    {
     "path": "landingpad-large.glb",
     "meta": {
      "name": "landingpad_large",
      "group": "pad",
      "tris": 478,
      "bbox": {
       "min": [
        -1.25,
        0,
        -1.25
       ],
       "max": [
        1.25,
        0.5,
        1.25
       ]
      },
      "size": [
       2.5,
       0.5,
       2.5
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 12044,
     "sha256": "552c5e3941d3020e6594d8277799c7a8800f5f54e835d12a91c90e710b59f387"
    },
    {
     "path": "landingpad-small.glb",
     "meta": {
      "name": "landingpad_small",
      "group": "pad",
      "tris": 454,
      "bbox": {
       "min": [
        -0.95,
        0,
        -0.95
       ],
       "max": [
        0.95,
        0.5,
        0.95
       ]
      },
      "size": [
       1.9,
       0.5,
       1.9
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 11964,
     "sha256": "a6b5cd3a91dae84b98fed45f476665a47970e1a7a12f63e3509edf274da41082"
    },
    {
     "path": "spacetruck.glb",
     "meta": {
      "name": "spacetruck",
      "group": "vehicle",
      "tris": 1118,
      "bbox": {
       "min": [
        -0.245,
        0,
        -0.447
       ],
       "max": [
        0.245,
        0.566,
        0.447
       ]
      },
      "size": [
       0.49,
       0.566,
       0.894
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ],
      "parts": [
       {
        "node": "spacetruck_wheel_front_left",
        "pivot": [
         0.172,
         0.088,
         0.212
        ]
       },
       {
        "node": "spacetruck_wheel_front_right",
        "pivot": [
         -0.172,
         0.088,
         0.212
        ]
       },
       {
        "node": "spacetruck_wheel_rear_left",
        "pivot": [
         0.172,
         0.088,
         -0.215
        ]
       },
       {
        "node": "spacetruck_wheel_rear_right",
        "pivot": [
         -0.172,
         0.088,
         -0.215
        ]
       }
      ]
     },
     "bytes": 21960,
     "sha256": "ad0a0fdff45fbf5dcb1f2cc059114494fe0c813b5385b39d3830386d63c52078"
    },
    {
     "path": "spacetruck-large.glb",
     "meta": {
      "name": "spacetruck_large",
      "group": "vehicle",
      "tris": 1434,
      "bbox": {
       "min": [
        -0.252,
        0,
        -0.514
       ],
       "max": [
        0.252,
        0.685,
        0.514
       ]
      },
      "size": [
       0.504,
       0.685,
       1.028
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ],
      "parts": [
       {
        "node": "spacetruck_large_wheel_front_left",
        "pivot": [
         0.172,
         0.114,
         0.272
        ]
       },
       {
        "node": "spacetruck_large_wheel_front_right",
        "pivot": [
         -0.172,
         0.114,
         0.272
        ]
       },
       {
        "node": "spacetruck_large_wheel_rear_left",
        "pivot": [
         0.172,
         0.114,
         -0.156
        ]
       },
       {
        "node": "spacetruck_large_wheel_rear_right",
        "pivot": [
         -0.172,
         0.114,
         -0.156
        ]
       }
      ]
     },
     "bytes": 29652,
     "sha256": "85f4b7aa24a03c0c4aec424d58debe2591cc5b57da382cbeb324ced770a52023"
    },
    {
     "path": "spacetruck-trailer.glb",
     "meta": {
      "name": "spacetruck_trailer",
      "group": "vehicle",
      "tris": 824,
      "bbox": {
       "min": [
        -0.24,
        0,
        -0.5
       ],
       "max": [
        0.24,
        0.338,
        0.5
       ]
      },
      "size": [
       0.48,
       0.338,
       1
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ],
      "parts": [
       {
        "node": "spacetruck_trailer_wheel_front_left",
        "pivot": [
         0.172,
         0.088,
         0.264
        ]
       },
       {
        "node": "spacetruck_trailer_wheel_front_right",
        "pivot": [
         -0.172,
         0.088,
         0.264
        ]
       },
       {
        "node": "spacetruck_trailer_wheel_rear_left",
        "pivot": [
         0.172,
         0.088,
         -0.264
        ]
       },
       {
        "node": "spacetruck_trailer_wheel_rear_right",
        "pivot": [
         -0.172,
         0.088,
         -0.264
        ]
       }
      ]
     },
     "bytes": 15484,
     "sha256": "99be8c7bfd621d2942fa08b4969c3b29b68359464fda2185f7217b6ad6866fb4"
    },
    {
     "path": "structure-tall.glb",
     "meta": {
      "name": "structure_tall",
      "group": "structure",
      "tris": 670,
      "bbox": {
       "min": [
        -0.875,
        0,
        -0.875
       ],
       "max": [
        0.875,
        2,
        0.875
       ]
      },
      "size": [
       1.75,
       2,
       1.75
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 17736,
     "sha256": "aa9a7ae47d2421e200d8b69df1bac0c1bafe28fa5bebde5f74200db3ef3f58dc"
    },
    {
     "path": "structure-low.glb",
     "meta": {
      "name": "structure_low",
      "group": "structure",
      "tris": 422,
      "bbox": {
       "min": [
        -0.875,
        0,
        -0.875
       ],
       "max": [
        0.875,
        1,
        0.875
       ]
      },
      "size": [
       1.75,
       1,
       1.75
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 12052,
     "sha256": "f299187ed6aa624d41902f97a254f5031fa906a3ea2b0d370db0aea74c6132db"
    },
    {
     "path": "tunnel-straight-a.glb",
     "meta": {
      "name": "tunnel_straight_A",
      "group": "structure",
      "tris": 608,
      "bbox": {
       "min": [
        -1,
        0,
        -0.465
       ],
       "max": [
        1,
        0.6,
        0.465
       ]
      },
      "size": [
       2,
       0.6,
       0.93
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 13428,
     "sha256": "35b5efbf209ae8fbcb2fd89e15f74f5dfcc4c51639b741ec87f76707b0b3ccdf"
    },
    {
     "path": "lights.glb",
     "meta": {
      "name": "lights",
      "group": "structure",
      "tris": 356,
      "bbox": {
       "min": [
        -0.34,
        0,
        -0.34
       ],
       "max": [
        0.34,
        0.998,
        0.34
       ]
      },
      "size": [
       0.68,
       0.998,
       0.68
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 9452,
     "sha256": "aef50240a0a21e9f2a5ecb57c966ce10f8459cca7b7a2b72676872f77ad00a63"
    },
    {
     "path": "rocks-a.glb",
     "meta": {
      "name": "rocks_A",
      "group": "terrain",
      "tris": 88,
      "bbox": {
       "min": [
        -0.657,
        0,
        -0.821
       ],
       "max": [
        0.657,
        0.354,
        0.821
       ]
      },
      "size": [
       1.314,
       0.354,
       1.642
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 4708,
     "sha256": "c065f46f575317390403f220cf00e41504ccccac489b6797603a838d1bddd787"
    },
    {
     "path": "rocks-b.glb",
     "meta": {
      "name": "rocks_B",
      "group": "terrain",
      "tris": 160,
      "bbox": {
       "min": [
        -0.941,
        0,
        -0.869
       ],
       "max": [
        0.941,
        1.067,
        0.869
       ]
      },
      "size": [
       1.882,
       1.067,
       1.738
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 6120,
     "sha256": "d9175fc50b2f5eaff315c2a8d1e039af618c54d3c9d6798592b14e23b06ab4d4"
    },
    {
     "path": "rock-b.glb",
     "meta": {
      "name": "rock_B",
      "group": "terrain",
      "tris": 36,
      "bbox": {
       "min": [
        -0.348,
        0,
        -0.401
       ],
       "max": [
        0.348,
        0.401,
        0.401
       ]
      },
      "size": [
       0.696,
       0.401,
       0.802
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 3364,
     "sha256": "d630d6e1313d8d6d1d39a1694904af44145e5a69dbb6f11b635e11e418955d55"
    },
    {
     "path": "terrain-mining.glb",
     "meta": {
      "name": "terrain_mining",
      "group": "terrain",
      "tris": 76,
      "bbox": {
       "min": [
        -1,
        0,
        -1
       ],
       "max": [
        1,
        2.073,
        1
       ]
      },
      "size": [
       2,
       2.073,
       2
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 4100,
     "sha256": "db7d071b13899b670d7624f983c3c9a44fe9b79946f78380af11b7a4ace980d2"
    },
    {
     "path": "terrain-slope.glb",
     "meta": {
      "name": "terrain_slope",
      "group": "terrain",
      "tris": 28,
      "bbox": {
       "min": [
        -1,
        0,
        -1
       ],
       "max": [
        1,
        2,
        1
       ]
      },
      "size": [
       2,
       2,
       2
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 2848,
     "sha256": "5f092b59492c2eaefbddce92629697c88dda8e87d260a1c1aba8ec46d16e5e29"
    },
    {
     "path": "terrain-low-curved.glb",
     "meta": {
      "name": "terrain_low_curved",
      "group": "terrain",
      "tris": 36,
      "bbox": {
       "min": [
        -1,
        0,
        -1
       ],
       "max": [
        1,
        1,
        1
       ]
      },
      "size": [
       2,
       1,
       2
      ],
      "forward": "+Z",
      "anims": [],
      "textures": [
       "spacebits-texture.webp"
      ]
     },
     "bytes": 2980,
     "sha256": "faf2895a9bf4b5fabc1ffb4c2dfdd19bcec8fb26aa03bc33538aa2310d063db2"
    }
   ],
   "base": "kaykit-space-base/1/"
  },
  {
   "id": "kenney-car-kit",
   "version": 1,
   "kind": "model",
   "title": "Car Kit",
   "author": "Kenney (www.kenney.nl)",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/car-kit",
   "notes": "Kenney Car Kit 의 GLB 중 30개(승용차·택시·경찰차·SUV·밴·트럭·배송차·구급차·소방차·쓰레기차·트랙터·경주차 + 라바콘·상자·부서진 차 조각). 탈것은 노드 구조를 지켰다: body + wheel-front-left·wheel-front-right·wheel-back-left·wheel-back-right(meta.wheels; 피벗 = 바퀴 중심, meta.wheelInfo 에 pivot·radius) + 차종별 부품(meta.parts — firetruck grill, garbage-truck arm·trash 등). 메시는 <노드>_mesh 자식이다. 바퀴는 노드 로컬 X 축 회전으로 굴리고(전진 시 +X 축 둘레 양의 각속도 = 바퀴 윗면이 +Z 로), 앞바퀴는 로컬 Y 회전으로 조향한다. 앞쪽 = +Z(원본 그대로, 돌리지 않음), 왼쪽 = +X, 원점 = 바닥 중심(바퀴 바닥 y=0). suv 의 뒤 보조 바퀴(wheel-back)는 굴러가는 바퀴가 아니라 부품이다. 축척: 원본 단위(meta.size) — 세단 길이 2.55 단위 ≈ 4.5 m 라 1 단위 ≈ 1.75 m(바퀴 반지름 0.3 ≈ 0.53 m, 장난감처럼 통통한 비율). Kenney City Kit(1 단위 ≈ 8 m)과 축척이 다르다 — 도시 키트 옆에 놓으려면 약 0.22 배. 텍스처: 공통 색표 colormap(512²)을 무손실 WebP 로 품음(EXT_texture_webp). meshopt(GLTFLoader.setMeshoptDecoder 필요). 처음 쓴 게임: VERDICT(verdict). 원작자 표기는 의무 아님(권장: Kenney). 만드는 법: node tools/models/kenney-car-kit.mjs fetch && node tools/models/kenney-car-kit.mjs build",
   "tags": [
    "vehicle",
    "car",
    "truck",
    "police",
    "taxi",
    "city",
    "wheels",
    "low-poly",
    "kenney"
   ],
   "files": [
    {
     "path": "sedan.glb",
     "meta": {
      "name": "sedan",
      "role": "car",
      "description": "승용차(세단)",
      "tris": 2032,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.275
       ],
       "max": [
        0.75,
        1.3,
        1.275
       ]
      },
      "size": [
       1.5,
       1.3,
       2.55
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right",
       "wheel-front-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.685
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.635
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.635
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.685
        ],
        "radius": 0.3,
        "width": 0.35
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.15,
         0
        ]
       }
      ]
     },
     "bytes": 23612,
     "sha256": "40147e7ebcc0d34acb113a9c414ac455b2cfaafd3b4c4e43b42fffc5a549690b"
    },
    {
     "path": "sedan-sports.glb",
     "meta": {
      "name": "sedan-sports",
      "role": "car",
      "description": "스포츠 세단",
      "tris": 2088,
      "bbox": {
       "min": [
        -0.65,
        0,
        -1.275
       ],
       "max": [
        0.65,
        1.1,
        1.275
       ]
      },
      "size": [
       1.3,
       1.1,
       2.55
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-back-right",
       "wheel-back-left",
       "wheel-front-left",
       "wheel-front-right"
      ],
      "wheelInfo": [
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.635
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.635
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.685
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.685
        ],
        "radius": 0.3,
        "width": 0.35
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.15,
         0
        ]
       },
       {
        "node": "spoiler",
        "parent": "body",
        "pivot": [
         0,
         0.6,
         -1.044
        ]
       }
      ]
     },
     "bytes": 25976,
     "sha256": "206544db8c6b99629011fe4030660e40403d42fbecaacaed33ae652e940677c7"
    },
    {
     "path": "hatchback-sports.glb",
     "meta": {
      "name": "hatchback-sports",
      "role": "car",
      "description": "스포츠 해치백",
      "tris": 2088,
      "bbox": {
       "min": [
        -0.65,
        0,
        -1.425
       ],
       "max": [
        0.65,
        1.1,
        1.425
       ]
      },
      "size": [
       1.3,
       1.1,
       2.85
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.835
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.835
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.785
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.785
        ],
        "radius": 0.3,
        "width": 0.35
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.15,
         0
        ]
       }
      ]
     },
     "bytes": 24580,
     "sha256": "2ebe9e408b2e7173f835dd80b04a2d56e0f641bc483902ae1ce8234aad391f4e"
    },
    {
     "path": "suv.glb",
     "meta": {
      "name": "suv",
      "role": "car",
      "description": "SUV",
      "tris": 2474,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.35
       ],
       "max": [
        0.75,
        1.3,
        1.35
       ]
      },
      "size": [
       1.5,
       1.3,
       2.7
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-back-left",
       "wheel-back-right",
       "wheel-front-left",
       "wheel-front-right"
      ],
      "wheelInfo": [
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.56
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.56
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.76
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.76
        ],
        "radius": 0.3,
        "width": 0.35
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.2,
         0
        ]
       },
       {
        "node": "wheel-back",
        "parent": "body",
        "pivot": [
         0,
         0.7,
         -1.05
        ]
       }
      ]
     },
     "bytes": 27864,
     "sha256": "88fb9de7b2c6ae47dd991d4346a58eb4031b160273d7a1f38288dd55d8c69fdb"
    },
    {
     "path": "suv-luxury.glb",
     "meta": {
      "name": "suv-luxury",
      "role": "car",
      "description": "고급 SUV(보스 차량)",
      "tris": 2086,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.425
       ],
       "max": [
        0.75,
        1.3,
        1.425
       ]
      },
      "size": [
       1.5,
       1.3,
       2.85
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-back-right",
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.735
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.785
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.785
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.735
        ],
        "radius": 0.3,
        "width": 0.35
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.125,
         0
        ]
       }
      ]
     },
     "bytes": 24300,
     "sha256": "27c52af799d0d4ffbbc36fedd91865ff171047ee9585278b8ab5614861106b74"
    },
    {
     "path": "van.glb",
     "meta": {
      "name": "van",
      "role": "car",
      "description": "밴",
      "tris": 2082,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.375
       ],
       "max": [
        0.75,
        1.35,
        1.375
       ]
      },
      "size": [
       1.5,
       1.35,
       2.75
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.785
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.785
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.735
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.735
        ],
        "radius": 0.3,
        "width": 0.35
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.2,
         0.125
        ]
       }
      ]
     },
     "bytes": 24276,
     "sha256": "182b0844e6a538dffdc3cca32ae62542f38235570ee5047aedf7651f1f76056d"
    },
    {
     "path": "taxi.glb",
     "meta": {
      "name": "taxi",
      "role": "car",
      "description": "택시(지붕 표시등)",
      "tris": 2072,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.375
       ],
       "max": [
        0.75,
        1.5,
        1.375
       ]
      },
      "size": [
       1.5,
       1.5,
       2.75
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.785
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.785
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.735
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.735
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.15,
         0
        ]
       }
      ]
     },
     "bytes": 22924,
     "sha256": "67221e128db089d471f05739ee87d67a74375f925cc465e7fe0c26bcb7de65c6"
    },
    {
     "path": "police.glb",
     "meta": {
      "name": "police",
      "role": "car",
      "description": "경찰차(경광등)",
      "tris": 2304,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.55
       ],
       "max": [
        0.75,
        1.3,
        1.55
       ]
      },
      "size": [
       1.5,
       1.3,
       3.1
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-back-left",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-front-right"
      ],
      "wheelInfo": [
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.81
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.81
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.81
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.81
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.2,
         -0.025
        ]
       },
       {
        "node": "grill",
        "parent": "body",
        "pivot": [
         0,
         0.274,
         1.45
        ]
       }
      ]
     },
     "bytes": 27424,
     "sha256": "886248b280ed890ca8440d5e7f1f1c99937309da3b1db75be33a901ddbd1db6a"
    },
    {
     "path": "truck.glb",
     "meta": {
      "name": "truck",
      "role": "truck",
      "description": "픽업트럭",
      "tris": 2082,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.475
       ],
       "max": [
        0.75,
        1.3,
        1.475
       ]
      },
      "size": [
       1.5,
       1.3,
       2.95
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.885
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.885
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.735
        ],
        "radius": 0.3,
        "width": 0.35
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.735
        ],
        "radius": 0.3,
        "width": 0.35
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.15,
         0
        ]
       }
      ]
     },
     "bytes": 24304,
     "sha256": "0b286c9907f6c2974399ae741d06e4055c8aa25b9604b7b77aaaf3586a22b3ee"
    },
    {
     "path": "truck-flat.glb",
     "meta": {
      "name": "truck-flat",
      "role": "truck",
      "description": "평판 트럭",
      "tris": 2488,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.373
       ],
       "max": [
        0.75,
        1.3,
        1.373
       ]
      },
      "size": [
       1.5,
       1.3,
       2.746
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.783
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.783
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.637
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.637
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.15,
         0
        ]
       }
      ]
     },
     "bytes": 25228,
     "sha256": "ad502eccb83a7c10dafa1ac6fc901cb76b4f585f3f2d954557483ba681830ef6"
    },
    {
     "path": "delivery.glb",
     "meta": {
      "name": "delivery",
      "role": "truck",
      "description": "배송 트럭(화물칸)",
      "tris": 2476,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.625
       ],
       "max": [
        0.75,
        1.65,
        1.625
       ]
      },
      "size": [
       1.5,
       1.65,
       3.25
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         1.035
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         1.035
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.585
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.585
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "door",
        "parent": null,
        "pivot": [
         0,
         1.5,
         -1.45
        ]
       },
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.15,
         0
        ]
       }
      ]
     },
     "bytes": 26956,
     "sha256": "66fbd769e379344b09576f63c4a4b1b9fbab984e4195843ba0259ae3403b119f"
    },
    {
     "path": "delivery-flat.glb",
     "meta": {
      "name": "delivery-flat",
      "role": "truck",
      "description": "배송 트럭(평판)",
      "tris": 2574,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.625
       ],
       "max": [
        0.75,
        1.35,
        1.625
       ]
      },
      "size": [
       1.5,
       1.35,
       3.25
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-back-left",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-front-right"
      ],
      "wheelInfo": [
       {
        "node": "wheel-back-left",
        "pivot": [
         0.375,
         0.3,
         -0.585
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         1.035
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.375,
         0.3,
         -0.585
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         1.035
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.15,
         0
        ]
       }
      ]
     },
     "bytes": 25816,
     "sha256": "0c8aa47c22b4f535677286a0dcfd050f2dccaa4d249918c08ab8adedd6fb3532"
    },
    {
     "path": "ambulance.glb",
     "meta": {
      "name": "ambulance",
      "role": "truck",
      "description": "구급차",
      "tris": 2804,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.625
       ],
       "max": [
        0.75,
        1.8,
        1.625
       ]
      },
      "size": [
       1.5,
       1.8,
       3.25
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         1.035
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         1.035
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.885
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.885
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.2,
         0
        ]
       },
       {
        "node": "door-right",
        "parent": null,
        "pivot": [
         -0.55,
         0.4,
         -1.45
        ]
       },
       {
        "node": "door-left",
        "parent": null,
        "pivot": [
         0.55,
         0.4,
         -1.45
        ]
       }
      ]
     },
     "bytes": 31100,
     "sha256": "fb1d0a7757beb766293d3ecf1ae9b2055575e406f30bf3cff4254a1d4aedef04"
    },
    {
     "path": "firetruck.glb",
     "meta": {
      "name": "firetruck",
      "role": "truck",
      "description": "소방차",
      "tris": 2767,
      "bbox": {
       "min": [
        -0.75,
        0,
        -1.7
       ],
       "max": [
        0.75,
        1.7,
        1.7
       ]
      },
      "size": [
       1.5,
       1.7,
       3.4
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.4,
         0.3,
         0.96
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.4,
         0.3,
         0.96
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.4,
         0.3,
         -0.66
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.4,
         0.3,
         -0.66
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.2,
         0
        ]
       },
       {
        "node": "grill",
        "parent": "body",
        "pivot": [
         0,
         0.274,
         1.6
        ]
       }
      ]
     },
     "bytes": 31472,
     "sha256": "387bbb73944c5497513b36044f20d29f24aadf80cb5d492374dd074691d425aa"
    },
    {
     "path": "garbage-truck.glb",
     "meta": {
      "name": "garbage-truck",
      "role": "truck",
      "description": "쓰레기 수거차",
      "tris": 3124,
      "bbox": {
       "min": [
        -0.8,
        0,
        -1.725
       ],
       "max": [
        0.8,
        1.6,
        1.725
       ]
      },
      "size": [
       1.6,
       1.6,
       3.45
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         1.085
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         1.085
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.535
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.535
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "arm",
        "parent": null,
        "pivot": [
         0,
         0.482,
         0.3
        ]
       },
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.125,
         0
        ]
       },
       {
        "node": "trash",
        "parent": "body",
        "pivot": [
         0.016,
         1.4,
         -0.133
        ]
       }
      ]
     },
     "bytes": 37988,
     "sha256": "5a8ac09d6a56927ce1e20dcdb4d59485d08ba8be05a8be4b17b4c1000b2af085"
    },
    {
     "path": "tractor.glb",
     "meta": {
      "name": "tractor",
      "role": "tractor",
      "description": "트랙터",
      "tris": 2044,
      "bbox": {
       "min": [
        -0.671,
        0,
        -1.101
       ],
       "max": [
        0.671,
        1.602,
        1.101
       ]
      },
      "size": [
       1.342,
       1.602,
       2.202
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.265,
         0.326,
         0.731
        ],
        "radius": 0.326,
        "width": 0.299
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.265,
         0.326,
         0.731
        ],
        "radius": 0.326,
        "width": 0.299
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.259,
         0.526,
         -0.575
        ],
        "radius": 0.526,
        "width": 0.412
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.259,
         0.526,
         -0.575
        ],
        "radius": 0.526,
        "width": 0.412
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.188,
         0.109
        ]
       }
      ]
     },
     "bytes": 33428,
     "sha256": "e145a3342bf408d5f9db63b56079eacc656262ee6a9b948c2b6965c15301bb6a"
    },
    {
     "path": "tractor-police.glb",
     "meta": {
      "name": "tractor-police",
      "role": "tractor",
      "description": "경찰 트랙터(장난스러운)",
      "tris": 2278,
      "bbox": {
       "min": [
        -0.671,
        0,
        -1.151
       ],
       "max": [
        0.671,
        1.702,
        1.151
       ]
      },
      "size": [
       1.342,
       1.702,
       2.302
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-right",
       "wheel-front-left",
       "wheel-back-right",
       "wheel-back-left"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.265,
         0.326,
         0.681
        ],
        "radius": 0.326,
        "width": 0.299
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.265,
         0.326,
         0.681
        ],
        "radius": 0.326,
        "width": 0.299
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.259,
         0.526,
         -0.625
        ],
        "radius": 0.526,
        "width": 0.412
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.259,
         0.526,
         -0.625
        ],
        "radius": 0.526,
        "width": 0.412
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.188,
         0.109
        ]
       },
       {
        "node": "grill",
        "parent": "body",
        "pivot": [
         0,
         0.271,
         1.101
        ]
       }
      ]
     },
     "bytes": 37840,
     "sha256": "1a79d9a663910b3615358386b0ec70f5d31e2d08f32988d7debc4cd1b5c56d2e"
    },
    {
     "path": "tractor-shovel.glb",
     "meta": {
      "name": "tractor-shovel",
      "role": "tractor",
      "description": "굴삭 트랙터(앞 삽)",
      "tris": 2646,
      "bbox": {
       "min": [
        -0.83,
        0,
        -1.235
       ],
       "max": [
        0.83,
        1.512,
        1.235
       ]
      },
      "size": [
       1.66,
       1.512,
       2.47
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-back-left",
       "wheel-back-right",
       "wheel-front-left",
       "wheel-front-right"
      ],
      "wheelInfo": [
       {
        "node": "wheel-back-left",
        "pivot": [
         0.488,
         0.438,
         -0.686
        ],
        "radius": 0.438,
        "width": 0.343
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.488,
         0.438,
         -0.686
        ],
        "radius": 0.438,
        "width": 0.343
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.415,
         0.269,
         0.412
        ],
        "radius": 0.269,
        "width": 0.247
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.415,
         0.269,
         0.412
        ],
        "radius": 0.269,
        "width": 0.247
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0,
         0
        ]
       },
       {
        "node": "shovel",
        "parent": "body",
        "pivot": [
         0,
         0.683,
         0.631
        ]
       }
      ]
     },
     "bytes": 41384,
     "sha256": "333daa77ef9698ba681c3e8836631618438f14b4503e20f7d0e280ec974c0827"
    },
    {
     "path": "race.glb",
     "meta": {
      "name": "race",
      "role": "race",
      "description": "경주차(포뮬러)",
      "tris": 1952,
      "bbox": {
       "min": [
        -0.65,
        0,
        -1.28
       ],
       "max": [
        0.65,
        0.733,
        1.28
       ]
      },
      "size": [
       1.3,
       0.733,
       2.56
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "wheelInfo": [
       {
        "node": "wheel-front-left",
        "pivot": [
         0.35,
         0.3,
         0.64
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.35,
         0.3,
         0.64
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-left",
        "pivot": [
         0.35,
         0.3,
         -0.88
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.35,
         0.3,
         -0.88
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.1,
         0
        ]
       }
      ]
     },
     "bytes": 21116,
     "sha256": "dee5316b2316d54990643da47bbfdf74d25964c537ff042521a9210c0d545d5d"
    },
    {
     "path": "race-future.glb",
     "meta": {
      "name": "race-future",
      "role": "race",
      "description": "미래형 경주차",
      "tris": 2068,
      "bbox": {
       "min": [
        -0.6,
        0,
        -1.33
       ],
       "max": [
        0.6,
        0.833,
        1.33
       ]
      },
      "size": [
       1.2,
       0.833,
       2.66
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": [],
      "wheels": [
       "wheel-back-left",
       "wheel-back-right",
       "wheel-front-left",
       "wheel-front-right"
      ],
      "wheelInfo": [
       {
        "node": "wheel-back-left",
        "pivot": [
         0.3,
         0.3,
         -0.93
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-back-right",
        "pivot": [
         -0.3,
         0.3,
         -0.93
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-left",
        "pivot": [
         0.3,
         0.3,
         0.59
        ],
        "radius": 0.3,
        "width": 0.3
       },
       {
        "node": "wheel-front-right",
        "pivot": [
         -0.3,
         0.3,
         0.59
        ],
        "radius": 0.3,
        "width": 0.3
       }
      ],
      "parts": [
       {
        "node": "body",
        "parent": null,
        "pivot": [
         0,
         0.2,
         0
        ]
       }
      ]
     },
     "bytes": 23176,
     "sha256": "44b0caf14d407b3456cdb8e6979187b1a6dd2ffcfba351495be1879f0d415c61"
    },
    {
     "path": "cone.glb",
     "meta": {
      "name": "cone",
      "role": "prop",
      "description": "라바콘",
      "tris": 172,
      "bbox": {
       "min": [
        -0.238,
        0,
        -0.238
       ],
       "max": [
        0.238,
        0.595,
        0.238
       ]
      },
      "size": [
       0.476,
       0.595,
       0.476
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 7820,
     "sha256": "f7fda84cf110e34c5424a512b6ce9b955a51233a0bc6c858e805f97c3b8d7d86"
    },
    {
     "path": "cone-flat.glb",
     "meta": {
      "name": "cone-flat",
      "role": "prop",
      "description": "쓰러진 라바콘 받침",
      "tris": 172,
      "bbox": {
       "min": [
        -0.238,
        0,
        -0.238
       ],
       "max": [
        0.238,
        0.281,
        0.238
       ]
      },
      "size": [
       0.476,
       0.281,
       0.476
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 7880,
     "sha256": "d45d3d169ce426a0af03e2ec7711acf11f1b1b78529d6e62e00257875c2db09f"
    },
    {
     "path": "box.glb",
     "meta": {
      "name": "box",
      "role": "prop",
      "description": "골판지 상자",
      "tris": 124,
      "bbox": {
       "min": [
        -0.357,
        0,
        -0.357
       ],
       "max": [
        0.357,
        0.715,
        0.357
       ]
      },
      "size": [
       0.714,
       0.715,
       0.714
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 7788,
     "sha256": "e268ce84d4d3f2ee3781b997ecf39eb9799a1d596f9c94a9df0d5f33c06db1a6"
    },
    {
     "path": "debris-tire.glb",
     "meta": {
      "name": "debris-tire",
      "role": "debris",
      "description": "부서진 차 — 타이어",
      "tris": 288,
      "bbox": {
       "min": [
        -0.175,
        0,
        -0.3
       ],
       "max": [
        0.175,
        0.6,
        0.3
       ]
      },
      "size": [
       0.35,
       0.6,
       0.6
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 8912,
     "sha256": "a03b7f5ee068aef4f57663a288954f72e5afc01728bd8c9b768c789cb5892b8f"
    },
    {
     "path": "debris-door.glb",
     "meta": {
      "name": "debris-door",
      "role": "debris",
      "description": "부서진 차 — 문",
      "tris": 68,
      "bbox": {
       "min": [
        -0.094,
        0,
        -0.4
       ],
       "max": [
        0.094,
        0.9,
        0.4
       ]
      },
      "size": [
       0.188,
       0.9,
       0.8
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 6920,
     "sha256": "cf3e298f97d76e50f97b8de2ba99a3dc77e92f96188e8290aeaa4a4e96ec4ee7"
    },
    {
     "path": "debris-door-window.glb",
     "meta": {
      "name": "debris-door-window",
      "role": "debris",
      "description": "부서진 차 — 창 달린 문",
      "tris": 74,
      "bbox": {
       "min": [
        -0.094,
        0,
        -0.4
       ],
       "max": [
        0.094,
        0.9,
        0.4
       ]
      },
      "size": [
       0.188,
       0.9,
       0.8
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 6988,
     "sha256": "e82ef6750ee842f51041acb9721d822f918683d6e355d7e39e419e1d4b91caca"
    },
    {
     "path": "debris-bumper.glb",
     "meta": {
      "name": "debris-bumper",
      "role": "debris",
      "description": "부서진 차 — 범퍼",
      "tris": 116,
      "bbox": {
       "min": [
        -0.65,
        0,
        -0.225
       ],
       "max": [
        0.65,
        0.4,
        0.225
       ]
      },
      "size": [
       1.3,
       0.4,
       0.45
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 7408,
     "sha256": "fce44359e64dea57beb542f8b764164c26757f951ccd011b07ad878c24f4a164"
    },
    {
     "path": "debris-plate-a.glb",
     "meta": {
      "name": "debris-plate-a",
      "role": "debris",
      "description": "부서진 차 — 철판",
      "tris": 40,
      "bbox": {
       "min": [
        -0.45,
        0,
        -0.45
       ],
       "max": [
        0.45,
        0.1,
        0.45
       ]
      },
      "size": [
       0.9,
       0.1,
       0.9
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 6484,
     "sha256": "f85093627ed1f09138c006e5039c96394f0e4d3697c03d1075cbe2dc5d161a05"
    },
    {
     "path": "debris-plate-small-a.glb",
     "meta": {
      "name": "debris-plate-small-a",
      "role": "debris",
      "description": "부서진 차 — 작은 철판",
      "tris": 28,
      "bbox": {
       "min": [
        -0.225,
        0,
        -0.225
       ],
       "max": [
        0.225,
        0.1,
        0.225
       ]
      },
      "size": [
       0.45,
       0.1,
       0.45
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 6348,
     "sha256": "28b89931a33760f48c75a9fe50746d2503bb57aa3515ebba8c038b9484f1851a"
    },
    {
     "path": "debris-spoiler-a.glb",
     "meta": {
      "name": "debris-spoiler-a",
      "role": "debris",
      "description": "부서진 차 — 스포일러",
      "tris": 48,
      "bbox": {
       "min": [
        -0.55,
        0,
        -0.119
       ],
       "max": [
        0.55,
        0.3,
        0.119
       ]
      },
      "size": [
       1.1,
       0.3,
       0.238
      ],
      "forward": "+Z",
      "left": "+X",
      "origin": "bottom-center",
      "anims": []
     },
     "bytes": 6744,
     "sha256": "7b757006800f1d0db212dc2aada3d27a42c44fc3cd2f2d5f2348a892fa46ea58"
    }
   ],
   "base": "kenney-car-kit/1/"
  },
  {
   "id": "kenney-city-commercial",
   "version": 1,
   "kind": "model",
   "title": "City Kit (Commercial)",
   "author": "Kenney (www.kenney.nl)",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/city-kit-commercial",
   "notes": "Kenney City Kit (Commercial) 2.1 의 GLB 중 41개(meta.role: commercial·skyscraper·prop). 원본 단위 그대로 — 게임이 meta.size 로 축척한다(Kenney City Kit 4종 공통 축척: 도로 타일 한 칸 = 1 단위 ≈ 8 m(2차선 폭). 출입문 높이 약 0.25·층고 약 0.4·가로등 0.6~0.68·라바콘 0.094 단위 — 사람(1.8 m)은 약 0.22 단위. 게임에서 1 = 1 m 로 쓰려면 8 배). 정적 모델: 노드 변환을 굽고 재질별로 합침(메시 하나), 원점=바닥 중심(bbox), meshopt(GLTFLoader.setMeshoptDecoder 필요). 원본 원점(격자 기준)은 새 좌표에서 meta.origin0 — 격자에 맞추려면 −origin0 만큼 옮긴다. 앞쪽=+Z(원본 그대로 — 출입문·차양·신호등 앞면). 텍스처: 키트 공통 색표 colormap(512²)을 무손실 WebP 로 glb 마다 품었다(EXT_texture_webp). lowDetail 표시 모델은 먼 배경(스카이라인)용. 처음 쓴 게임: VERDICT(verdict). 원작자 표기는 의무 아님(권장: Kenney). 만드는 법: node tools/models/kenney-city.mjs fetch kenney-city-commercial && node tools/models/kenney-city.mjs build kenney-city-commercial",
   "tags": [
    "city",
    "building",
    "commercial",
    "skyscraper",
    "low-poly",
    "kenney"
   ],
   "files": [
    {
     "path": "building-a.glb",
     "meta": {
      "name": "building-a",
      "role": "commercial",
      "tris": 1252,
      "bbox": {
       "min": [
        -0.442,
        0,
        -0.47
       ],
       "max": [
        0.442,
        1.293,
        0.47
       ]
      },
      "size": [
       0.884,
       1.293,
       0.94
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 20120,
     "sha256": "4b6f33b0b43b00715f959b5bd7c358411515bdcd7d685bc9a1276ad01eddf335"
    },
    {
     "path": "building-b.glb",
     "meta": {
      "name": "building-b",
      "role": "commercial",
      "tris": 1276,
      "bbox": {
       "min": [
        -0.485,
        0,
        -0.47
       ],
       "max": [
        0.485,
        1.293,
        0.47
       ]
      },
      "size": [
       0.97,
       1.293,
       0.94
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 20424,
     "sha256": "4c2f19ad467c0d98ca28ea0b2428053a31358011b579f14e8a51b0876550ab2a"
    },
    {
     "path": "building-c.glb",
     "meta": {
      "name": "building-c",
      "role": "commercial",
      "tris": 1195,
      "bbox": {
       "min": [
        -0.442,
        0,
        -0.545
       ],
       "max": [
        0.442,
        0.893,
        0.545
       ]
      },
      "size": [
       0.884,
       0.893,
       1.09
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 19248,
     "sha256": "8d4276acb7210b10db02431ec16111b14c9ae6ffa1f074abb081c5f5f869f8cc"
    },
    {
     "path": "building-d.glb",
     "meta": {
      "name": "building-d",
      "role": "commercial",
      "tris": 1100,
      "bbox": {
       "min": [
        -0.42,
        0,
        -0.45
       ],
       "max": [
        0.42,
        1.293,
        0.45
       ]
      },
      "size": [
       0.84,
       1.293,
       0.9
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 18096,
     "sha256": "7236bc940c02224c813a4edfe42a2398723e641e7a3539cc2fd8791292d45769"
    },
    {
     "path": "building-e.glb",
     "meta": {
      "name": "building-e",
      "role": "commercial",
      "tris": 1509,
      "bbox": {
       "min": [
        -0.82,
        0,
        -0.504
       ],
       "max": [
        0.82,
        0.893,
        0.504
       ]
      },
      "size": [
       1.64,
       0.893,
       1.008
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 23984,
     "sha256": "31f73604cd9d4003e61167ff6a43900445541070215190365ed067ba0c2edbc1"
    },
    {
     "path": "building-f.glb",
     "meta": {
      "name": "building-f",
      "role": "commercial",
      "tris": 1794,
      "bbox": {
       "min": [
        -0.42,
        0,
        -0.515
       ],
       "max": [
        0.42,
        1.693,
        0.515
       ]
      },
      "size": [
       0.84,
       1.693,
       1.03
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 25716,
     "sha256": "b8b1ba953357fff052659be38255883ca6581f6f115daa754846df4fbe0ceb09"
    },
    {
     "path": "building-g.glb",
     "meta": {
      "name": "building-g",
      "role": "commercial",
      "tris": 2006,
      "bbox": {
       "min": [
        -0.485,
        0,
        -0.461
       ],
       "max": [
        0.485,
        1.693,
        0.461
       ]
      },
      "size": [
       0.97,
       1.693,
       0.922
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 29004,
     "sha256": "c78403f36eb2f1e096849e984b60dbc1fcf5e32709374416a1420198cc3f1426"
    },
    {
     "path": "building-h.glb",
     "meta": {
      "name": "building-h",
      "role": "commercial",
      "tris": 1512,
      "bbox": {
       "min": [
        -0.442,
        0,
        -0.504
       ],
       "max": [
        0.442,
        1.293,
        0.504
       ]
      },
      "size": [
       0.884,
       1.293,
       1.008
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 22712,
     "sha256": "dade872a13dc46a07e439fa20c88dad8e2f08a487dbe82335a723132c1e4bb49"
    },
    {
     "path": "building-i.glb",
     "meta": {
      "name": "building-i",
      "role": "commercial",
      "tris": 2544,
      "bbox": {
       "min": [
        -0.62,
        0,
        -0.651
       ],
       "max": [
        0.62,
        1.68,
        0.651
       ]
      },
      "size": [
       1.24,
       1.68,
       1.302
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 36248,
     "sha256": "f9911fa5021130b84028ff33a2b599b8801ef2983f94ddfee2c5dc69de8112af"
    },
    {
     "path": "building-j.glb",
     "meta": {
      "name": "building-j",
      "role": "commercial",
      "tris": 5246,
      "bbox": {
       "min": [
        -1.042,
        0,
        -0.67
       ],
       "max": [
        1.042,
        1.693,
        0.67
       ]
      },
      "size": [
       2.084,
       1.693,
       1.34
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 64288,
     "sha256": "479a0bd66954589bd3c437126e0036278ed376bb1d73ad685b911b77e8ae6db3"
    },
    {
     "path": "building-k.glb",
     "meta": {
      "name": "building-k",
      "role": "commercial",
      "tris": 2960,
      "bbox": {
       "min": [
        -1.042,
        0,
        -0.471
       ],
       "max": [
        1.042,
        1.47,
        0.471
       ]
      },
      "size": [
       2.084,
       1.47,
       0.942
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 39792,
     "sha256": "aaa1bda051291e3c47dcb42b648bf95f21d5d22efaf858a6f6c46c60e525733a"
    },
    {
     "path": "building-l.glb",
     "meta": {
      "name": "building-l",
      "role": "commercial",
      "tris": 3512,
      "bbox": {
       "min": [
        -0.685,
        0,
        -0.701
       ],
       "max": [
        0.685,
        2.27,
        0.701
       ]
      },
      "size": [
       1.37,
       2.27,
       1.402
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 45028,
     "sha256": "15b1d74a456971a2909ef8c2cee2943f98e1f19f64e0bf4d549bc01ca3ed7bc3"
    },
    {
     "path": "building-m.glb",
     "meta": {
      "name": "building-m",
      "role": "commercial",
      "tris": 3740,
      "bbox": {
       "min": [
        -0.62,
        0,
        -0.621
       ],
       "max": [
        0.62,
        3.15,
        0.621
       ]
      },
      "size": [
       1.24,
       3.15,
       1.242
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 45884,
     "sha256": "e4ba3061be006153309cf34960470d665a1b9260142d440781fce9f019fefaaf"
    },
    {
     "path": "building-n.glb",
     "meta": {
      "name": "building-n",
      "role": "commercial",
      "tris": 4350,
      "bbox": {
       "min": [
        -1.16,
        0,
        -0.91
       ],
       "max": [
        1.16,
        2.48,
        0.91
       ]
      },
      "size": [
       2.32,
       2.48,
       1.82
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 52212,
     "sha256": "23a23b0b067044c4391572086d621288e519961eb003ce150cafbafcaa3ef1e0"
    },
    {
     "path": "building-skyscraper-a.glb",
     "meta": {
      "name": "building-skyscraper-a",
      "role": "skyscraper",
      "tris": 1292,
      "bbox": {
       "min": [
        -0.68,
        0,
        -0.68
       ],
       "max": [
        0.68,
        2.88,
        0.68
       ]
      },
      "size": [
       1.36,
       2.88,
       1.36
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 22108,
     "sha256": "71088bf8cbcd7d04f6d5333a4d62a0cd907ee744d57de0d9db62c2130e356b89"
    },
    {
     "path": "building-skyscraper-b.glb",
     "meta": {
      "name": "building-skyscraper-b",
      "role": "skyscraper",
      "tris": 1592,
      "bbox": {
       "min": [
        -0.68,
        0,
        -0.68
       ],
       "max": [
        0.68,
        4.48,
        0.68
       ]
      },
      "size": [
       1.36,
       4.48,
       1.36
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 26024,
     "sha256": "c3427e625486d668b792cc7b83aac875abe35e3b3668bf035850de9c57aa5b8f"
    },
    {
     "path": "building-skyscraper-c.glb",
     "meta": {
      "name": "building-skyscraper-c",
      "role": "skyscraper",
      "tris": 1704,
      "bbox": {
       "min": [
        -0.64,
        0,
        -0.694
       ],
       "max": [
        0.64,
        4.08,
        0.694
       ]
      },
      "size": [
       1.28,
       4.08,
       1.388
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 26400,
     "sha256": "fe5caf08edf597c4572c65eebe5d7d1e5720ade77df36e1d7cf92dcb02adb027"
    },
    {
     "path": "building-skyscraper-d.glb",
     "meta": {
      "name": "building-skyscraper-d",
      "role": "skyscraper",
      "tris": 1892,
      "bbox": {
       "min": [
        -0.64,
        0,
        -0.694
       ],
       "max": [
        0.64,
        5.47,
        0.694
       ]
      },
      "size": [
       1.28,
       5.47,
       1.388
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 29808,
     "sha256": "9e2b54901b47712c4654d51552bf15513747ed3f6a78005d06ac6b424c027c59"
    },
    {
     "path": "building-skyscraper-e.glb",
     "meta": {
      "name": "building-skyscraper-e",
      "role": "skyscraper",
      "tris": 1156,
      "bbox": {
       "min": [
        -0.648,
        0,
        -0.621
       ],
       "max": [
        0.648,
        4.08,
        0.621
       ]
      },
      "size": [
       1.296,
       4.08,
       1.242
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 19196,
     "sha256": "097b631eaff5be7ee7d05e20f52d24a809cd4b5c6bc40a46cfd280972c19bbf8"
    },
    {
     "path": "detail-awning.glb",
     "meta": {
      "name": "detail-awning",
      "role": "prop",
      "description": "차양(건물 앞에 붙임)",
      "tris": 40,
      "bbox": {
       "min": [
        -0.2,
        0,
        -0.074
       ],
       "max": [
        0.2,
        0.4,
        0.074
       ]
      },
      "size": [
       0.4,
       0.4,
       0.148
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.174
      ],
      "anims": []
     },
     "bytes": 6124,
     "sha256": "6582c2ae0cef8f62df11239c2490013712669e2d3aaa743470d19d9de4de5d26"
    },
    {
     "path": "detail-awning-wide.glb",
     "meta": {
      "name": "detail-awning-wide",
      "role": "prop",
      "description": "넓은 차양",
      "tris": 40,
      "bbox": {
       "min": [
        -0.4,
        0,
        -0.074
       ],
       "max": [
        0.4,
        0.4,
        0.074
       ]
      },
      "size": [
       0.8,
       0.4,
       0.148
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.174
      ],
      "anims": []
     },
     "bytes": 6128,
     "sha256": "b69f14d14e6886cbf412c8c79dc2303edc687a4060162218e46e678544408986"
    },
    {
     "path": "detail-overhang.glb",
     "meta": {
      "name": "detail-overhang",
      "role": "prop",
      "description": "처마(건물 앞에 붙임)",
      "tris": 64,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.1
       ],
       "max": [
        0.25,
        0.4,
        0.1
       ]
      },
      "size": [
       0.5,
       0.4,
       0.2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.15
      ],
      "anims": []
     },
     "bytes": 6324,
     "sha256": "c6465265b0ceae3873f431598173b0b08f58e2348e5eaf1c7cdf8e425a7d0c82"
    },
    {
     "path": "detail-overhang-wide.glb",
     "meta": {
      "name": "detail-overhang-wide",
      "role": "prop",
      "description": "넓은 처마",
      "tris": 64,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.1
       ],
       "max": [
        0.5,
        0.4,
        0.1
       ]
      },
      "size": [
       1,
       0.4,
       0.2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.15
      ],
      "anims": []
     },
     "bytes": 6304,
     "sha256": "a02c19c7a139ea33fd11da3e942dc564fc92f7ddc3d8f551d4dda9db46634664"
    },
    {
     "path": "detail-parasol-a.glb",
     "meta": {
      "name": "detail-parasol-a",
      "role": "prop",
      "description": "파라솔 탁자",
      "tris": 96,
      "bbox": {
       "min": [
        -0.173,
        0,
        -0.2
       ],
       "max": [
        0.173,
        0.45,
        0.2
       ]
      },
      "size": [
       0.346,
       0.45,
       0.4
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6640,
     "sha256": "98913e06d25cddf58fd1a7b935eacea5a2b7b7c3e6e731fde8826e2afeff6a22"
    },
    {
     "path": "detail-parasol-b.glb",
     "meta": {
      "name": "detail-parasol-b",
      "role": "prop",
      "description": "파라솔 탁자",
      "tris": 120,
      "bbox": {
       "min": [
        -0.173,
        0,
        -0.2
       ],
       "max": [
        0.173,
        0.45,
        0.2
       ]
      },
      "size": [
       0.346,
       0.45,
       0.4
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7012,
     "sha256": "3ac9a6f07d5f77f2fd43ed9aa317c445fc90930a516d69b6db464a0a1eb893a6"
    },
    {
     "path": "low-detail-building-a.glb",
     "meta": {
      "name": "low-detail-building-a",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 188,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        2,
        0.25
       ]
      },
      "size": [
       0.5,
       2,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7680,
     "sha256": "89721eefbd0cb92435b8808a1b2dcc6449659ef11e6295397300fd2e82b4679f"
    },
    {
     "path": "low-detail-building-b.glb",
     "meta": {
      "name": "low-detail-building-b",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 200,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        2.225,
        0.25
       ]
      },
      "size": [
       0.5,
       2.225,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7940,
     "sha256": "c7a27ac550417a627d3a45bb37f3ce3538638a2d9da4ebce6e40e271bad3c62f"
    },
    {
     "path": "low-detail-building-c.glb",
     "meta": {
      "name": "low-detail-building-c",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 142,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        2.25,
        0.25
       ]
      },
      "size": [
       0.5,
       2.25,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7356,
     "sha256": "e7eac67a8e4a92008ce251743ba108542bcc86f36a16f047f9260a8627d263a5"
    },
    {
     "path": "low-detail-building-d.glb",
     "meta": {
      "name": "low-detail-building-d",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 106,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        1.75,
        0.25
       ]
      },
      "size": [
       0.5,
       1.75,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6640,
     "sha256": "533362ca7b238d36d24c5e2af61f5b8fccfa80fd13d6cce69371c93454299c7b"
    },
    {
     "path": "low-detail-building-e.glb",
     "meta": {
      "name": "low-detail-building-e",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 96,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        1.8,
        0.25
       ]
      },
      "size": [
       0.5,
       1.8,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6696,
     "sha256": "957c91db18f7a5fce637971cdcd8f8b4b6a580ba9ee8da6385364e45128ac286"
    },
    {
     "path": "low-detail-building-f.glb",
     "meta": {
      "name": "low-detail-building-f",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 88,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        2,
        0.25
       ]
      },
      "size": [
       0.5,
       2,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6324,
     "sha256": "023b643f322613ff4915305311f4cc9ee8d54a668113a7a259d0cdbaccc8c5cf"
    },
    {
     "path": "low-detail-building-g.glb",
     "meta": {
      "name": "low-detail-building-g",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 200,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        2,
        0.25
       ]
      },
      "size": [
       0.5,
       2,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7216,
     "sha256": "ab939d24450ce8568949a4b18f45eb9c3293699dbf4b43b9eb26d600c1b9a788"
    },
    {
     "path": "low-detail-building-h.glb",
     "meta": {
      "name": "low-detail-building-h",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 378,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        2.1,
        0.25
       ]
      },
      "size": [
       0.5,
       2.1,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 9576,
     "sha256": "1c599bd798725300a19d4e8095b981ad80a6ae5cc46154c1375235d62e17190d"
    },
    {
     "path": "low-detail-building-i.glb",
     "meta": {
      "name": "low-detail-building-i",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 152,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        1.775,
        0.25
       ]
      },
      "size": [
       0.5,
       1.775,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7272,
     "sha256": "2b5781e6cae09c3f8689703142bd8f9876689a12869a9b71eb551e0b49d8b700"
    },
    {
     "path": "low-detail-building-j.glb",
     "meta": {
      "name": "low-detail-building-j",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 188,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        1.75,
        0.25
       ]
      },
      "size": [
       0.5,
       1.75,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7948,
     "sha256": "532a33a593823b0123c7d081a8e5e4315794b6bab804398155d096696708f001"
    },
    {
     "path": "low-detail-building-k.glb",
     "meta": {
      "name": "low-detail-building-k",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 86,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        1.55,
        0.25
       ]
      },
      "size": [
       0.5,
       1.55,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6532,
     "sha256": "c5857c34ffe7b0afd0e8fff47a9fa27c47f4f5d3ac556b499cf4d9b65e8d85a9"
    },
    {
     "path": "low-detail-building-l.glb",
     "meta": {
      "name": "low-detail-building-l",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 150,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        1.85,
        0.25
       ]
      },
      "size": [
       0.5,
       1.85,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7196,
     "sha256": "91a2387842321606155aa95b2150fc80d44f6e809af741f41b979a81c79c1eff"
    },
    {
     "path": "low-detail-building-m.glb",
     "meta": {
      "name": "low-detail-building-m",
      "role": "skyscraper",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 188,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        1.975,
        0.25
       ]
      },
      "size": [
       0.5,
       1.975,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7800,
     "sha256": "735ed5b6ef637ddd27b57191d5a7de8cf363b8ea6c4620c95fbd767f4ef56094"
    },
    {
     "path": "low-detail-building-n.glb",
     "meta": {
      "name": "low-detail-building-n",
      "role": "commercial",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 62,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        0.7,
        0.25
       ]
      },
      "size": [
       0.5,
       0.7,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6280,
     "sha256": "0ce8c82b7a57458e2f6af362e43ae5d50efccab023d81f4afa6ca1082ba64b0e"
    },
    {
     "path": "low-detail-building-wide-a.glb",
     "meta": {
      "name": "low-detail-building-wide-a",
      "role": "commercial",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 156,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.25
       ],
       "max": [
        0.5,
        1.1,
        0.25
       ]
      },
      "size": [
       1,
       1.1,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7508,
     "sha256": "13ccb3f16048cfcbc36c2ffbec46d49d7b8a5f36d8b755f2f0fac5af8a72f215"
    },
    {
     "path": "low-detail-building-wide-b.glb",
     "meta": {
      "name": "low-detail-building-wide-b",
      "role": "commercial",
      "description": "먼 배경용 저해상(창 없음)",
      "lowDetail": true,
      "tris": 246,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.25
       ],
       "max": [
        0.5,
        1.15,
        0.25
       ]
      },
      "size": [
       1,
       1.15,
       0.5
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 8332,
     "sha256": "288044359a64a5f04bf5ff16033f4bae139a2f3c1e31d3cd34d95ee4b54d30c0"
    }
   ],
   "base": "kenney-city-commercial/1/"
  },
  {
   "id": "kenney-city-industrial",
   "version": 1,
   "kind": "model",
   "title": "City Kit (Industrial)",
   "author": "Kenney (www.kenney.nl)",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/city-kit-industrial",
   "notes": "Kenney City Kit (Industrial) 2.0 의 GLB 중 35개(meta.role: industrial·prop). 원본 단위 그대로 — 게임이 meta.size 로 축척한다(Kenney City Kit 4종 공통 축척: 도로 타일 한 칸 = 1 단위 ≈ 8 m(2차선 폭). 출입문 높이 약 0.25·층고 약 0.4·가로등 0.6~0.68·라바콘 0.094 단위 — 사람(1.8 m)은 약 0.22 단위. 게임에서 1 = 1 m 로 쓰려면 8 배). 정적 모델: 노드 변환을 굽고 재질별로 합침(메시 하나), 원점=바닥 중심(bbox), meshopt(GLTFLoader.setMeshoptDecoder 필요). 원본 원점(격자 기준)은 새 좌표에서 meta.origin0 — 격자에 맞추려면 −origin0 만큼 옮긴다. 앞쪽=+Z(원본 그대로 — 출입문·차양·신호등 앞면). 텍스처: 키트 공통 색표 colormap(512²)을 무손실 WebP 로 glb 마다 품었다(EXT_texture_webp). lowDetail 표시 모델은 먼 배경(스카이라인)용. 처음 쓴 게임: VERDICT(verdict). 원작자 표기는 의무 아님(권장: Kenney). 만드는 법: node tools/models/kenney-city.mjs fetch kenney-city-industrial && node tools/models/kenney-city.mjs build kenney-city-industrial",
   "tags": [
    "city",
    "industrial",
    "factory",
    "warehouse",
    "chimney",
    "tank",
    "container",
    "harbor",
    "low-poly",
    "kenney"
   ],
   "files": [
    {
     "path": "building-a.glb",
     "meta": {
      "name": "building-a",
      "role": "industrial",
      "tris": 2046,
      "bbox": {
       "min": [
        -1.042,
        0,
        -0.621
       ],
       "max": [
        1.042,
        1.47,
        0.621
       ]
      },
      "size": [
       2.084,
       1.47,
       1.242
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       -0.001,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 30160,
     "sha256": "9776c081c31bcebb36ca5e42e0f7b16f2b1149cb3b7534e736391a7a9fbe49e7"
    },
    {
     "path": "building-b.glb",
     "meta": {
      "name": "building-b",
      "role": "industrial",
      "tris": 2422,
      "bbox": {
       "min": [
        -1.042,
        0,
        -0.631
       ],
       "max": [
        1.042,
        1.47,
        0.631
       ]
      },
      "size": [
       2.084,
       1.47,
       1.262
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       -0.001,
       0,
       0.008
      ],
      "anims": []
     },
     "bytes": 35040,
     "sha256": "84868351351192a772aa1c700881afd78d1c4e0ff08f5b3e1a3fe403e8bece05"
    },
    {
     "path": "building-c.glb",
     "meta": {
      "name": "building-c",
      "role": "industrial",
      "tris": 1928,
      "bbox": {
       "min": [
        -0.938,
        0,
        -1.054
       ],
       "max": [
        0.938,
        1.25,
        1.054
       ]
      },
      "size": [
       1.876,
       1.25,
       2.108
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       -0.096,
       0,
       -0.143
      ],
      "anims": []
     },
     "bytes": 28916,
     "sha256": "47ac3447c76f179bebe5198903a88f05d595789cbe60596a8c3ade23042a53f0"
    },
    {
     "path": "building-d.glb",
     "meta": {
      "name": "building-d",
      "role": "industrial",
      "tris": 1158,
      "bbox": {
       "min": [
        -0.442,
        0,
        -0.71
       ],
       "max": [
        0.442,
        1.415,
        0.71
       ]
      },
      "size": [
       0.884,
       1.415,
       1.42
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.09
      ],
      "anims": []
     },
     "bytes": 20316,
     "sha256": "3633fc1d6bcd495e7c7db8af826222cd89dc0f121fac69b836ae7d28e9dc50ad"
    },
    {
     "path": "building-e.glb",
     "meta": {
      "name": "building-e",
      "role": "industrial",
      "tris": 1484,
      "bbox": {
       "min": [
        -0.842,
        0,
        -0.645
       ],
       "max": [
        0.842,
        1.65,
        0.645
       ]
      },
      "size": [
       1.684,
       1.65,
       1.29
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.249
      ],
      "anims": []
     },
     "bytes": 24552,
     "sha256": "12a9299f026f4f6d67e3b9c92346db4d58721283f9b8d93d96ac17b408f90d92"
    },
    {
     "path": "building-f.glb",
     "meta": {
      "name": "building-f",
      "role": "industrial",
      "tris": 1552,
      "bbox": {
       "min": [
        -0.895,
        0,
        -0.64
       ],
       "max": [
        0.895,
        1.925,
        0.64
       ]
      },
      "size": [
       1.79,
       1.925,
       1.28
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.453,
       0,
       -0.254
      ],
      "anims": []
     },
     "bytes": 25816,
     "sha256": "75b3401971a48b2f93135099ecad5291ef2571fbed32121bb092ca6cd34248bf"
    },
    {
     "path": "building-g.glb",
     "meta": {
      "name": "building-g",
      "role": "industrial",
      "tris": 1242,
      "bbox": {
       "min": [
        -0.839,
        0,
        -0.642
       ],
       "max": [
        0.839,
        1.28,
        0.642
       ]
      },
      "size": [
       1.678,
       1.28,
       1.284
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 21256,
     "sha256": "905486da7b74b7237c734766ff4a49b6cfb1ced14ff24b6e1904cc697aae7fc9"
    },
    {
     "path": "building-h.glb",
     "meta": {
      "name": "building-h",
      "role": "industrial",
      "tris": 698,
      "bbox": {
       "min": [
        -0.661,
        0,
        -0.655
       ],
       "max": [
        0.661,
        0.734,
        0.655
       ]
      },
      "size": [
       1.322,
       0.734,
       1.31
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.581,
       0,
       -0.279
      ],
      "anims": []
     },
     "bytes": 15328,
     "sha256": "7e81fe89d27deb81174bcf030eed182437e55aea7933aa1ed9e99ab64ad3b62e"
    },
    {
     "path": "building-i.glb",
     "meta": {
      "name": "building-i",
      "role": "industrial",
      "tris": 798,
      "bbox": {
       "min": [
        -0.514,
        0,
        -0.65
       ],
       "max": [
        0.514,
        0.734,
        0.65
       ]
      },
      "size": [
       1.028,
       0.734,
       1.3
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.434,
       0,
       -0.274
      ],
      "anims": []
     },
     "bytes": 16196,
     "sha256": "6b54c485a28710ffd529f4b8d310e86824dbe633921c176edf3e64303ea92e2e"
    },
    {
     "path": "building-j.glb",
     "meta": {
      "name": "building-j",
      "role": "industrial",
      "tris": 886,
      "bbox": {
       "min": [
        -0.513,
        0,
        -0.65
       ],
       "max": [
        0.513,
        0.861,
        0.65
       ]
      },
      "size": [
       1.026,
       0.861,
       1.3
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.435,
       0,
       -0.274
      ],
      "anims": []
     },
     "bytes": 17060,
     "sha256": "3f080b07629ad2eb073970bb89928964e24e2efb701ae37c2b9bc6d30f83dba2"
    },
    {
     "path": "building-k.glb",
     "meta": {
      "name": "building-k",
      "role": "industrial",
      "tris": 702,
      "bbox": {
       "min": [
        -0.651,
        0,
        -0.457
       ],
       "max": [
        0.651,
        0.773,
        0.457
       ]
      },
      "size": [
       1.302,
       0.773,
       0.914
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.007
      ],
      "anims": []
     },
     "bytes": 15388,
     "sha256": "a1e4f136d4f6f708f2a6a5bfce17942d51f0ac9d2ed29613cebc88fb83d77be2"
    },
    {
     "path": "building-l.glb",
     "meta": {
      "name": "building-l",
      "role": "industrial",
      "tris": 1896,
      "bbox": {
       "min": [
        -1.042,
        0,
        -0.935
       ],
       "max": [
        1.042,
        1.925,
        0.935
       ]
      },
      "size": [
       2.084,
       1.925,
       1.87
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.422,
       0,
       -0.224
      ],
      "anims": []
     },
     "bytes": 29728,
     "sha256": "3dc2d6adc51e262b2e4b9ce856c247b6533b05a59da2d448d26fc156990e1238"
    },
    {
     "path": "building-m.glb",
     "meta": {
      "name": "building-m",
      "role": "industrial",
      "tris": 1694,
      "bbox": {
       "min": [
        -0.658,
        0,
        -0.85
       ],
       "max": [
        0.658,
        1.519,
        0.85
       ]
      },
      "size": [
       1.316,
       1.519,
       1.7
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 26020,
     "sha256": "0bfdf059c71c42f3c090afcbfd82873cd36197791de5ffebaf190bcc5be093a8"
    },
    {
     "path": "building-n.glb",
     "meta": {
      "name": "building-n",
      "role": "industrial",
      "tris": 1262,
      "bbox": {
       "min": [
        -0.488,
        0,
        -0.71
       ],
       "max": [
        0.488,
        1.905,
        0.71
       ]
      },
      "size": [
       0.976,
       1.905,
       1.42
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.452,
       0,
       -0.56
      ],
      "anims": []
     },
     "bytes": 20964,
     "sha256": "650d9a7a7e24e6e00e3d294b309ab4ee89f317c44773282038d61e96b7d534d6"
    },
    {
     "path": "building-o.glb",
     "meta": {
      "name": "building-o",
      "role": "industrial",
      "tris": 868,
      "bbox": {
       "min": [
        -0.442,
        0,
        -0.62
       ],
       "max": [
        0.442,
        0.918,
        0.62
       ]
      },
      "size": [
       0.884,
       0.918,
       1.24
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.442,
       0,
       -0.62
      ],
      "anims": []
     },
     "bytes": 16724,
     "sha256": "ed48a3b3de6b87e766f17b986896c6b4c1cf2f3657d6605752710802086ca426"
    },
    {
     "path": "building-p.glb",
     "meta": {
      "name": "building-p",
      "role": "industrial",
      "tris": 1162,
      "bbox": {
       "min": [
        -0.842,
        0,
        -0.496
       ],
       "max": [
        0.842,
        0.714,
        0.496
       ]
      },
      "size": [
       1.684,
       0.714,
       0.992
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 21012,
     "sha256": "afcdd5245ac9294f490fcb3caa9d3672c0abcac517e94a871ea514e0f07bd4b4"
    },
    {
     "path": "building-q.glb",
     "meta": {
      "name": "building-q",
      "role": "industrial",
      "tris": 2062,
      "bbox": {
       "min": [
        -1.07,
        0,
        -0.885
       ],
       "max": [
        1.07,
        0.88,
        0.885
       ]
      },
      "size": [
       2.14,
       0.88,
       1.77
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.228,
       0,
       -0.011
      ],
      "anims": []
     },
     "bytes": 32028,
     "sha256": "ecbc577f6c9cce824d9fd3c73df6b76aada8ec26dc945cd3a2775d4d34b669b5"
    },
    {
     "path": "building-r.glb",
     "meta": {
      "name": "building-r",
      "role": "industrial",
      "tris": 1912,
      "bbox": {
       "min": [
        -1.242,
        0,
        -0.636
       ],
       "max": [
        1.242,
        1.393,
        0.636
       ]
      },
      "size": [
       2.484,
       1.393,
       1.272
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 29636,
     "sha256": "bbc25327f2a6b2a9ff58780a958e2ac10fa41f23ec0f3fc2f881da658f5a4a8b"
    },
    {
     "path": "building-s.glb",
     "meta": {
      "name": "building-s",
      "role": "industrial",
      "tris": 876,
      "bbox": {
       "min": [
        -1.06,
        0,
        -0.458
       ],
       "max": [
        1.06,
        0.837,
        0.458
       ]
      },
      "size": [
       2.12,
       0.837,
       0.916
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.01,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 17136,
     "sha256": "d15ff60fc3287f6415a22f4684d32647f3260ef94c865e43e63a246f748fdeec"
    },
    {
     "path": "building-t.glb",
     "meta": {
      "name": "building-t",
      "role": "industrial",
      "tris": 1586,
      "bbox": {
       "min": [
        -0.861,
        0,
        -0.695
       ],
       "max": [
        0.861,
        1.015,
        0.695
       ]
      },
      "size": [
       1.722,
       1.015,
       1.39
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 25228,
     "sha256": "402369a240d79b0bf97dc98ae69664ae0d022612b5b4f6fe11b4c4ee8cafb740"
    },
    {
     "path": "chimney-basic.glb",
     "meta": {
      "name": "chimney-basic",
      "role": "industrial",
      "description": "굴뚝(가는)",
      "tris": 88,
      "bbox": {
       "min": [
        -0.1,
        0,
        -0.1
       ],
       "max": [
        0.1,
        1,
        0.1
       ]
      },
      "size": [
       0.2,
       1,
       0.2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7304,
     "sha256": "072eb8fe854f62b4265417ed51b242e8d65e5151a6aca0d0ce0c8f8468bdb604"
    },
    {
     "path": "chimney-small.glb",
     "meta": {
      "name": "chimney-small",
      "role": "industrial",
      "description": "굴뚝(작은)",
      "tris": 124,
      "bbox": {
       "min": [
        -0.15,
        0,
        -0.15
       ],
       "max": [
        0.15,
        0.75,
        0.15
       ]
      },
      "size": [
       0.3,
       0.75,
       0.3
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7368,
     "sha256": "d8ac3e5621c8314ab98988d8face2fc3ca1e29b30e84d2637e3a11448c955306"
    },
    {
     "path": "chimney-medium.glb",
     "meta": {
      "name": "chimney-medium",
      "role": "industrial",
      "description": "굴뚝(중간)",
      "tris": 160,
      "bbox": {
       "min": [
        -0.225,
        0,
        -0.225
       ],
       "max": [
        0.225,
        1.925,
        0.225
       ]
      },
      "size": [
       0.45,
       1.925,
       0.45
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7960,
     "sha256": "fc266b953637289a7490d75d7a7407d5a7cbd2971749cb853cb31a551b3a7e7c"
    },
    {
     "path": "chimney-large.glb",
     "meta": {
      "name": "chimney-large",
      "role": "industrial",
      "description": "냉각탑형 큰 굴뚝",
      "tris": 218,
      "bbox": {
       "min": [
        -0.54,
        0,
        -0.54
       ],
       "max": [
        0.54,
        1.7,
        0.54
       ]
      },
      "size": [
       1.08,
       1.7,
       1.08
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 8396,
     "sha256": "2ac6817ebf0c0a7764c94833cf10b349e0f3bdf46158f754cd8d41cce778f82c"
    },
    {
     "path": "detail-tank.glb",
     "meta": {
      "name": "detail-tank",
      "role": "industrial",
      "description": "눕힌 원통 탱크",
      "tris": 310,
      "bbox": {
       "min": [
        -0.424,
        0,
        -0.258
       ],
       "max": [
        0.424,
        0.415,
        0.258
       ]
      },
      "size": [
       0.848,
       0.415,
       0.516
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 9512,
     "sha256": "5b42a0bc2de7f6196c6f6323485249740ba41b1d18dee0cb9f79c72ff45f366a"
    },
    {
     "path": "detail-tank-large.glb",
     "meta": {
      "name": "detail-tank-large",
      "role": "industrial",
      "description": "큰 원통 저장 탱크",
      "tris": 566,
      "bbox": {
       "min": [
        -0.754,
        0,
        -0.824
       ],
       "max": [
        0.754,
        0.962,
        0.824
       ]
      },
      "size": [
       1.508,
       0.962,
       1.648
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.07
      ],
      "anims": []
     },
     "bytes": 11212,
     "sha256": "7e1024ab98b2b05f998e0e24a1d2cded4b521f90c808ef17f45058f884d5cbf9"
    },
    {
     "path": "water-tower.glb",
     "meta": {
      "name": "water-tower",
      "role": "industrial",
      "description": "급수탑",
      "tris": 968,
      "bbox": {
       "min": [
        -0.426,
        0,
        -0.416
       ],
       "max": [
        0.426,
        2.142,
        0.416
       ]
      },
      "size": [
       0.852,
       2.142,
       0.832
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 15124,
     "sha256": "bf67aacb27ba0a1cec330bc81935d78a625102ab346e8c3aacd69b07947de92f"
    },
    {
     "path": "windmill.glb",
     "meta": {
      "name": "windmill",
      "role": "industrial",
      "description": "풍력 발전기(날개는 한 메시 — 돌리지 못함)",
      "tris": 456,
      "bbox": {
       "min": [
        -0.302,
        0,
        -0.563
       ],
       "max": [
        0.302,
        2.314,
        0.563
       ]
      },
      "size": [
       0.604,
       2.314,
       1.126
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.013,
       0,
       0.003
      ],
      "anims": []
     },
     "bytes": 12160,
     "sha256": "1b75a1072d6ac513c22bff5c433a5abd78e098bd0a2d732d8453170bee890cb2"
    },
    {
     "path": "windmill-low.glb",
     "meta": {
      "name": "windmill-low",
      "role": "industrial",
      "description": "풍력 발전기(낮은)",
      "tris": 456,
      "bbox": {
       "min": [
        -0.302,
        0,
        -0.563
       ],
       "max": [
        0.302,
        1.794,
        0.563
       ]
      },
      "size": [
       0.604,
       1.794,
       1.126
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.013,
       0,
       0.003
      ],
      "anims": []
     },
     "bytes": 12224,
     "sha256": "1a119c4903ec166a44fb004241e85549fe667c6538c6d85bffeb525766eefdf8"
    },
    {
     "path": "shipping-container-a.glb",
     "meta": {
      "name": "shipping-container-a",
      "role": "prop",
      "description": "컨테이너(빨강)",
      "tris": 402,
      "bbox": {
       "min": [
        -0.186,
        0,
        -0.411
       ],
       "max": [
        0.186,
        0.348,
        0.411
       ]
      },
      "size": [
       0.372,
       0.348,
       0.822
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11292,
     "sha256": "3cb34a25a90059d252ada2367257ecb4bd125ba54c76d47f8cfebacdb17f2886"
    },
    {
     "path": "shipping-container-b.glb",
     "meta": {
      "name": "shipping-container-b",
      "role": "prop",
      "description": "컨테이너(파랑)",
      "tris": 402,
      "bbox": {
       "min": [
        -0.186,
        0,
        -0.411
       ],
       "max": [
        0.186,
        0.348,
        0.411
       ]
      },
      "size": [
       0.372,
       0.348,
       0.822
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11280,
     "sha256": "7fbc1d3dc25aedc747f4e44f2178b3b2a918a3d0a547240822830c655b6046a1"
    },
    {
     "path": "shipping-container-c.glb",
     "meta": {
      "name": "shipping-container-c",
      "role": "prop",
      "description": "컨테이너(초록)",
      "tris": 402,
      "bbox": {
       "min": [
        -0.186,
        0,
        -0.411
       ],
       "max": [
        0.186,
        0.348,
        0.411
       ]
      },
      "size": [
       0.372,
       0.348,
       0.822
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11292,
     "sha256": "3288fe85760cf10ebaea5b9886efb0b7ce36d2b66b7d96ecc0050f59a8306d3b"
    },
    {
     "path": "solar-panel-flat.glb",
     "meta": {
      "name": "solar-panel-flat",
      "role": "prop",
      "description": "태양광 판(지붕용)",
      "tris": 164,
      "bbox": {
       "min": [
        -0.209,
        0,
        -0.357
       ],
       "max": [
        0.209,
        0.061,
        0.357
       ]
      },
      "size": [
       0.418,
       0.061,
       0.714
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7664,
     "sha256": "6b7c7f314fa90afd4fd3e7759a16259f7183ba1a13830690b3459e7cf9e4442f"
    },
    {
     "path": "solar-panel-landscape.glb",
     "meta": {
      "name": "solar-panel-landscape",
      "role": "prop",
      "description": "태양광 판",
      "tris": 244,
      "bbox": {
       "min": [
        -0.357,
        0,
        -0.198
       ],
       "max": [
        0.357,
        0.262,
        0.198
       ]
      },
      "size": [
       0.714,
       0.262,
       0.396
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.148,
       0,
       0.127
      ],
      "anims": []
     },
     "bytes": 9412,
     "sha256": "bfb47d94f68e689368dd56e192a5975a4814d74feb4a8089d258b98b73362866"
    },
    {
     "path": "solar-panel-landscape-group.glb",
     "meta": {
      "name": "solar-panel-landscape-group",
      "role": "prop",
      "description": "태양광 판 묶음",
      "tris": 976,
      "bbox": {
       "min": [
        -0.757,
        0,
        -0.448
       ],
       "max": [
        0.757,
        0.262,
        0.448
       ]
      },
      "size": [
       1.514,
       0.262,
       0.896
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 18608,
     "sha256": "03a2ac211614de72e3749dbe6c3b1ed7e3493770ecd6b45dfd67623a7204891d"
    }
   ],
   "base": "kenney-city-industrial/1/"
  },
  {
   "id": "kenney-city-roads",
   "version": 1,
   "kind": "model",
   "title": "City Kit (Roads)",
   "author": "Kenney (www.kenney.nl)",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/city-kit-roads",
   "notes": "Kenney City Kit (Roads) 의 GLB 중 45개(meta.role: prop·road). 원본 단위 그대로 — 게임이 meta.size 로 축척한다(Kenney City Kit 4종 공통 축척: 도로 타일 한 칸 = 1 단위 ≈ 8 m(2차선 폭). 출입문 높이 약 0.25·층고 약 0.4·가로등 0.6~0.68·라바콘 0.094 단위 — 사람(1.8 m)은 약 0.22 단위. 게임에서 1 = 1 m 로 쓰려면 8 배). 정적 모델: 노드 변환을 굽고 재질별로 합침(메시 하나), 원점=바닥 중심(bbox), meshopt(GLTFLoader.setMeshoptDecoder 필요). 원본 원점(격자 기준)은 새 좌표에서 meta.origin0 — 격자에 맞추려면 −origin0 만큼 옮긴다. 앞쪽=+Z(원본 그대로 — 출입문·차양·신호등 앞면). 텍스처: 키트 공통 색표 colormap(512²)을 무손실 WebP 로 glb 마다 품었다(EXT_texture_webp). lowDetail 표시 모델은 먼 배경(스카이라인)용. 처음 쓴 게임: VERDICT(verdict). 원작자 표기는 의무 아님(권장: Kenney). 만드는 법: node tools/models/kenney-city.mjs fetch kenney-city-roads && node tools/models/kenney-city.mjs build kenney-city-roads",
   "tags": [
    "city",
    "road",
    "street",
    "streetlight",
    "traffic-light",
    "sign",
    "props",
    "low-poly",
    "kenney"
   ],
   "files": [
    {
     "path": "light-curved.glb",
     "meta": {
      "name": "light-curved",
      "role": "prop",
      "description": "가로등(굽은 한 팔)",
      "tris": 92,
      "bbox": {
       "min": [
        -0.025,
        0,
        -0.112
       ],
       "max": [
        0.025,
        0.675,
        0.112
       ]
      },
      "size": [
       0.05,
       0.675,
       0.224
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.088
      ],
      "anims": []
     },
     "bytes": 6492,
     "sha256": "9679bc38082c787dc89421346e3d9f334e32c091725237cba0f15cb2662697c7"
    },
    {
     "path": "light-curved-double.glb",
     "meta": {
      "name": "light-curved-double",
      "role": "prop",
      "description": "가로등(굽은 두 팔)",
      "tris": 152,
      "bbox": {
       "min": [
        -0.025,
        0,
        -0.2
       ],
       "max": [
        0.025,
        0.675,
        0.2
       ]
      },
      "size": [
       0.05,
       0.675,
       0.4
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7224,
     "sha256": "f0d3b3cd4fa6955b95f38dea0a3507bc44cf1ef5878d029dc7a1ee56a5dc7261"
    },
    {
     "path": "light-curved-cross.glb",
     "meta": {
      "name": "light-curved-cross",
      "role": "prop",
      "description": "가로등(굽은 네 팔)",
      "tris": 270,
      "bbox": {
       "min": [
        -0.2,
        0,
        -0.2
       ],
       "max": [
        0.2,
        0.675,
        0.2
       ]
      },
      "size": [
       0.4,
       0.675,
       0.4
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 8672,
     "sha256": "23d087933d8cbbf2dfb9e0cb67618eb18c888e8a8cb82740ab280c8706a850b4"
    },
    {
     "path": "light-square.glb",
     "meta": {
      "name": "light-square",
      "role": "prop",
      "description": "가로등(꺾인 한 팔)",
      "tris": 60,
      "bbox": {
       "min": [
        -0.025,
        0,
        -0.119
       ],
       "max": [
        0.025,
        0.6,
        0.119
       ]
      },
      "size": [
       0.05,
       0.6,
       0.238
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.094
      ],
      "anims": []
     },
     "bytes": 6120,
     "sha256": "ee60db0d5588a89b8a3b9f7262411672a15951233b485d3c2049ad03eec50eba"
    },
    {
     "path": "light-square-double.glb",
     "meta": {
      "name": "light-square-double",
      "role": "prop",
      "description": "가로등(T자)",
      "tris": 88,
      "bbox": {
       "min": [
        -0.025,
        0,
        -0.213
       ],
       "max": [
        0.025,
        0.6,
        0.213
       ]
      },
      "size": [
       0.05,
       0.6,
       0.426
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6440,
     "sha256": "96a755f2fd3abba6bc7cc3b7f79611f215c534aa10b26c690ca1652ecda1fab9"
    },
    {
     "path": "light-square-cross.glb",
     "meta": {
      "name": "light-square-cross",
      "role": "prop",
      "description": "가로등(十자)",
      "tris": 134,
      "bbox": {
       "min": [
        -0.213,
        0,
        -0.213
       ],
       "max": [
        0.213,
        0.6,
        0.213
       ]
      },
      "size": [
       0.426,
       0.6,
       0.426
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7000,
     "sha256": "9c319a0355dc350d3d17a3c87b68e33d00f24f323feacc4d0647cdfdeada4659"
    },
    {
     "path": "traffic-light.glb",
     "meta": {
      "name": "traffic-light",
      "role": "prop",
      "description": "신호등(기둥)",
      "tris": 212,
      "bbox": {
       "min": [
        -0.059,
        0,
        -0.045
       ],
       "max": [
        0.059,
        0.515,
        0.045
       ]
      },
      "size": [
       0.118,
       0.515,
       0.09
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.014,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7900,
     "sha256": "9deca7fb3517dec3b5728c9be3a3d1b932c7f902a6c646d4d130391c99d4529f"
    },
    {
     "path": "traffic-light-hanging.glb",
     "meta": {
      "name": "traffic-light-hanging",
      "role": "prop",
      "description": "신호등(팔에 매단)",
      "tris": 230,
      "bbox": {
       "min": [
        -0.059,
        0,
        -0.147
       ],
       "max": [
        0.059,
        0.509,
        0.147
       ]
      },
      "size": [
       0.118,
       0.509,
       0.294
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.014,
       0,
       0.103
      ],
      "anims": []
     },
     "bytes": 8172,
     "sha256": "438ca2d8f11de46ec25160228fc6c13adf959eb93e1bc88dfc5da05569348e23"
    },
    {
     "path": "road-sign-stop.glb",
     "meta": {
      "name": "road-sign-stop",
      "role": "prop",
      "description": "정지 표지판",
      "tris": 104,
      "bbox": {
       "min": [
        -0.039,
        0,
        -0.069
       ],
       "max": [
        0.039,
        0.494,
        0.069
       ]
      },
      "size": [
       0.078,
       0.494,
       0.138
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.013,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6744,
     "sha256": "eccfed65911883425c25d13a316494631ef315203b94a62ede3342f756e2b0c2"
    },
    {
     "path": "road-sign-warning.glb",
     "meta": {
      "name": "road-sign-warning",
      "role": "prop",
      "description": "경고 표지판",
      "tris": 104,
      "bbox": {
       "min": [
        -0.039,
        0,
        -0.074
       ],
       "max": [
        0.039,
        0.499,
        0.074
       ]
      },
      "size": [
       0.078,
       0.499,
       0.148
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.013,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6800,
     "sha256": "798cdf162f9d0e76c440233e980be29d5266c522121073e87224757dc1ab526f"
    },
    {
     "path": "road-sign-street.glb",
     "meta": {
      "name": "road-sign-street",
      "role": "prop",
      "description": "거리 이름 표지판",
      "tris": 154,
      "bbox": {
       "min": [
        -0.098,
        0,
        -0.098
       ],
       "max": [
        0.098,
        0.475,
        0.098
       ]
      },
      "size": [
       0.196,
       0.475,
       0.196
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.073,
       0,
       -0.073
      ],
      "anims": []
     },
     "bytes": 7128,
     "sha256": "c466b34d1be3532a80cfecb98be3af83e670f3ed0f9277e57c17ad67c5a3cc45"
    },
    {
     "path": "road-sign-empty.glb",
     "meta": {
      "name": "road-sign-empty",
      "role": "prop",
      "description": "빈 표지판",
      "tris": 42,
      "bbox": {
       "min": [
        -0.025,
        0,
        -0.025
       ],
       "max": [
        0.025,
        0.475,
        0.025
       ]
      },
      "size": [
       0.05,
       0.475,
       0.05
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5884,
     "sha256": "cebcfe27b3b47fae9f36a6461a09a2bef3dfcc8683edad79ed27e422f39d8dfb"
    },
    {
     "path": "sign-highway.glb",
     "meta": {
      "name": "sign-highway",
      "role": "prop",
      "description": "고속도로 표지판 문",
      "tris": 180,
      "bbox": {
       "min": [
        -0.066,
        0,
        -0.5
       ],
       "max": [
        0.066,
        0.707,
        0.5
       ]
      },
      "size": [
       0.132,
       0.707,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.041,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7600,
     "sha256": "5ca2283fca89e840c6d96a07a7d3b754d99382b86e90ba6edb2a95992c953ba9"
    },
    {
     "path": "sign-highway-wide.glb",
     "meta": {
      "name": "sign-highway-wide",
      "role": "prop",
      "description": "고속도로 표지판 문(넓은)",
      "tris": 144,
      "bbox": {
       "min": [
        -0.066,
        0,
        -0.5
       ],
       "max": [
        0.066,
        0.707,
        0.5
       ]
      },
      "size": [
       0.132,
       0.707,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.041,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7212,
     "sha256": "1ef86d312771d59020276ca4d4c8fc565458c80d05c581aab5c76e6fb783ab10"
    },
    {
     "path": "sign-highway-detailed.glb",
     "meta": {
      "name": "sign-highway-detailed",
      "role": "prop",
      "description": "고속도로 표지판 문(자세한)",
      "tris": 256,
      "bbox": {
       "min": [
        -0.066,
        0,
        -0.5
       ],
       "max": [
        0.066,
        0.822,
        0.5
       ]
      },
      "size": [
       0.132,
       0.822,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.041,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 8416,
     "sha256": "0823338f22342fedd66124345497e78ea1ec8d6314c8e03c708fe0b8b0f62c9e"
    },
    {
     "path": "construction-cone.glb",
     "meta": {
      "name": "construction-cone",
      "role": "prop",
      "description": "라바콘",
      "tris": 66,
      "bbox": {
       "min": [
        -0.038,
        0,
        -0.038
       ],
       "max": [
        0.038,
        0.094,
        0.038
       ]
      },
      "size": [
       0.076,
       0.094,
       0.076
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6008,
     "sha256": "969e1f4f3ef533c6dd34174e73ed35540a74a9826f6e00a11e18aafc6c7420f1"
    },
    {
     "path": "construction-barrier.glb",
     "meta": {
      "name": "construction-barrier",
      "role": "prop",
      "description": "콘크리트 방호벽",
      "tris": 60,
      "bbox": {
       "min": [
        -0.068,
        0,
        -0.112
       ],
       "max": [
        0.068,
        0.13,
        0.112
       ]
      },
      "size": [
       0.136,
       0.13,
       0.224
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5932,
     "sha256": "b9a796f3c732f26530a9e7a49804978025dd42491083a78f445d88bb669f3a3c"
    },
    {
     "path": "construction-fence.glb",
     "meta": {
      "name": "construction-fence",
      "role": "prop",
      "description": "공사 울타리",
      "tris": 136,
      "bbox": {
       "min": [
        -0.037,
        0,
        -0.188
       ],
       "max": [
        0.037,
        0.179,
        0.188
       ]
      },
      "size": [
       0.074,
       0.179,
       0.376
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6644,
     "sha256": "f16cec98bc2a3168b6feea6653e84e884464c58f66e93355d9722dae261d1a62"
    },
    {
     "path": "construction-light.glb",
     "meta": {
      "name": "construction-light",
      "role": "prop",
      "description": "공사 경고등",
      "tris": 144,
      "bbox": {
       "min": [
        -0.037,
        0,
        -0.037
       ],
       "max": [
        0.037,
        0.234,
        0.037
       ]
      },
      "size": [
       0.074,
       0.234,
       0.074
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7212,
     "sha256": "4f374837e9a1127d8d0aac88ae731e305994148dafa8567c5f7d1e308973c5e0"
    },
    {
     "path": "dumpster.glb",
     "meta": {
      "name": "dumpster",
      "role": "prop",
      "description": "대형 쓰레기통",
      "tris": 234,
      "bbox": {
       "min": [
        -0.138,
        0,
        -0.185
       ],
       "max": [
        0.138,
        0.209,
        0.185
       ]
      },
      "size": [
       0.276,
       0.209,
       0.37
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       -0.008,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 8072,
     "sha256": "7bb77a964aca41629f82d46fcbad8d98e690017c63f574f59e442642933e2712"
    },
    {
     "path": "electricity-pole.glb",
     "meta": {
      "name": "electricity-pole",
      "role": "prop",
      "description": "전봇대 둘 + 전선",
      "tris": 416,
      "bbox": {
       "min": [
        -0.29,
        0,
        -0.107
       ],
       "max": [
        0.29,
        0.525,
        0.107
       ]
      },
      "size": [
       0.58,
       0.525,
       0.214
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.008,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 9824,
     "sha256": "fc225f5be5f30c10546e6eaec5b90c687a481b0ed237473c2413ebf601502d00"
    },
    {
     "path": "electricity-pole-single.glb",
     "meta": {
      "name": "electricity-pole-single",
      "role": "prop",
      "description": "전봇대",
      "tris": 176,
      "bbox": {
       "min": [
        -0.04,
        0,
        -0.107
       ],
       "max": [
        0.04,
        0.525,
        0.107
       ]
      },
      "size": [
       0.08,
       0.525,
       0.214
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.008,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7280,
     "sha256": "7d0c4c81a60a9b7acfff3c81037472d7bd98b3befb05880fd9af3a7d0281a1ea"
    },
    {
     "path": "electricity-side.glb",
     "meta": {
      "name": "electricity-side",
      "role": "prop",
      "description": "전봇대(옆) 둘 + 전선",
      "tris": 416,
      "bbox": {
       "min": [
        -0.282,
        0,
        -0.215
       ],
       "max": [
        0.282,
        0.525,
        0.215
       ]
      },
      "size": [
       0.564,
       0.525,
       0.43
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.076
      ],
      "anims": []
     },
     "bytes": 9800,
     "sha256": "c707517f03a2ac72fbe7b9aaa78248b8ee15fa0885b2259068488500dba9d4ac"
    },
    {
     "path": "electricity-side-single.glb",
     "meta": {
      "name": "electricity-side-single",
      "role": "prop",
      "description": "전봇대(옆)",
      "tris": 176,
      "bbox": {
       "min": [
        -0.032,
        0,
        -0.215
       ],
       "max": [
        0.032,
        0.525,
        0.215
       ]
      },
      "size": [
       0.064,
       0.525,
       0.43
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.184
      ],
      "anims": []
     },
     "bytes": 7284,
     "sha256": "a3523b887e4c8d48eb47e4ef61a823ab1d8fdf486cca4e7a8701ed05309ca09f"
    },
    {
     "path": "bridge-pillar.glb",
     "meta": {
      "name": "bridge-pillar",
      "role": "prop",
      "description": "고가 교각",
      "tris": 38,
      "bbox": {
       "min": [
        -0.05,
        0,
        -0.05
       ],
       "max": [
        0.05,
        0.5,
        0.05
       ]
      },
      "size": [
       0.1,
       0.5,
       0.1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5932,
     "sha256": "6353be0b22b3d14c197cdb22510feb7f51b8cc8167c1385c73393ab9997de91c"
    },
    {
     "path": "bridge-pillar-wide.glb",
     "meta": {
      "name": "bridge-pillar-wide",
      "role": "prop",
      "description": "고가 교각(넓은)",
      "tris": 38,
      "bbox": {
       "min": [
        -0.07,
        0,
        -0.07
       ],
       "max": [
        0.07,
        0.5,
        0.07
       ]
      },
      "size": [
       0.14,
       0.5,
       0.14
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5948,
     "sha256": "cb6e771902f972270ec49527e1bd4e01c6a0746d4e55d77e4dc221ae36dcde78"
    },
    {
     "path": "road-straight.glb",
     "meta": {
      "name": "road-straight",
      "role": "road",
      "description": "직선",
      "tris": 44,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.02,
        0.5
       ]
      },
      "size": [
       1,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5716,
     "sha256": "a5527f06f518ca4c69ff60a7838194de6032056bc1f4ebefcafa8e66b8bfce63"
    },
    {
     "path": "road-straight-half.glb",
     "meta": {
      "name": "road-straight-half",
      "role": "road",
      "description": "직선(반 칸)",
      "tris": 44,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.5
       ],
       "max": [
        0.25,
        0.02,
        0.5
       ]
      },
      "size": [
       0.5,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5768,
     "sha256": "02624dd6c8209fe9517077523534c71ded2f40b0665b7cfa0f423d779b492482"
    },
    {
     "path": "road-crossing.glb",
     "meta": {
      "name": "road-crossing",
      "role": "road",
      "description": "횡단보도",
      "tris": 104,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.02,
        0.5
       ]
      },
      "size": [
       1,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6072,
     "sha256": "daeac774f9fffbed458705cf180dd6991efd71d0887d43ff801c0bddedd5be4b"
    },
    {
     "path": "road-bend.glb",
     "meta": {
      "name": "road-bend",
      "role": "road",
      "description": "굽은 길",
      "tris": 260,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.02,
        0.5
       ]
      },
      "size": [
       1,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7328,
     "sha256": "479ee60d54b6cad63332f960dc2348e190bd8793fba58374262b84f6ebcdff83"
    },
    {
     "path": "road-curve.glb",
     "meta": {
      "name": "road-curve",
      "role": "road",
      "description": "곡선(큰)",
      "tris": 308,
      "bbox": {
       "min": [
        -1,
        0,
        -1
       ],
       "max": [
        1,
        0.02,
        1
       ]
      },
      "size": [
       2,
       0.02,
       2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7792,
     "sha256": "13883d1e88568febf6c69d9d0e21600fbd51bd0f9c85b8fbc70029a5e224a1ef"
    },
    {
     "path": "road-crossroad.glb",
     "meta": {
      "name": "road-crossroad",
      "role": "road",
      "description": "十자로",
      "tris": 116,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.02,
        0.5
       ]
      },
      "size": [
       1,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6464,
     "sha256": "b37c95e5f2db029ffd3df0ea6c5c367090cac3f234d7f7e6b556080b666e079b"
    },
    {
     "path": "road-intersection.glb",
     "meta": {
      "name": "road-intersection",
      "role": "road",
      "description": "T자로",
      "tris": 84,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.02,
        0.5
       ]
      },
      "size": [
       1,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6200,
     "sha256": "b4126b96728182c547dc3483ca46ba60fb72155ecbdfc75f04febf71ad17bbc1"
    },
    {
     "path": "road-end.glb",
     "meta": {
      "name": "road-end",
      "role": "road",
      "description": "막다른 길",
      "tris": 42,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.02,
        0.5
       ]
      },
      "size": [
       1,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5688,
     "sha256": "d96113d0f8d3c85c7bb91cba6affd558c2f6a8dac5cb81e6e50ff33ccda3cb37"
    },
    {
     "path": "road-end-round.glb",
     "meta": {
      "name": "road-end-round",
      "role": "road",
      "description": "막다른 길(둥근)",
      "tris": 218,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.02,
        0.5
       ]
      },
      "size": [
       1,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7272,
     "sha256": "cd58270b35f5914e46e17d527d30d2181729d969bcd988a55198b207aad64632"
    },
    {
     "path": "road-roundabout.glb",
     "meta": {
      "name": "road-roundabout",
      "role": "road",
      "description": "로터리",
      "tris": 1636,
      "bbox": {
       "min": [
        -1.5,
        0,
        -1.5
       ],
       "max": [
        1.5,
        0.02,
        1.5
       ]
      },
      "size": [
       3,
       0.02,
       3
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 16024,
     "sha256": "fa89d7ebe62cb8b0da4fedbe0cc54e4b90c5ea13b94976acc0ee79ac4593c5cf"
    },
    {
     "path": "road-split.glb",
     "meta": {
      "name": "road-split",
      "role": "road",
      "description": "갈라지는 길",
      "tris": 862,
      "bbox": {
       "min": [
        -0.5,
        0,
        -1
       ],
       "max": [
        0.5,
        0.02,
        1
       ]
      },
      "size": [
       1,
       0.02,
       2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11152,
     "sha256": "f05b3ac3576b775b18539ab50adbef4bdd930b4c9d5bb8909eeeb93bb6d294e4"
    },
    {
     "path": "road-side.glb",
     "meta": {
      "name": "road-side",
      "role": "road",
      "description": "길가(보도 붙은 직선)",
      "tris": 44,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.655
       ],
       "max": [
        0.5,
        0.02,
        0.655
       ]
      },
      "size": [
       1,
       0.02,
       1.31
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.155
      ],
      "anims": []
     },
     "bytes": 5784,
     "sha256": "6afe1762a6684b4a3ec1deee142f4a09f89926ed01b75ecd9765a5fcc9a309e0"
    },
    {
     "path": "road-side-entry.glb",
     "meta": {
      "name": "road-side-entry",
      "role": "road",
      "description": "길가 진입",
      "tris": 306,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.655
       ],
       "max": [
        0.5,
        0.02,
        0.655
       ]
      },
      "size": [
       1,
       0.02,
       1.31
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.155
      ],
      "anims": []
     },
     "bytes": 7660,
     "sha256": "5beb926886a307954a4a4eac069a624c5b01a329c00e8391b862087d50ae2635"
    },
    {
     "path": "road-side-exit.glb",
     "meta": {
      "name": "road-side-exit",
      "role": "road",
      "description": "길가 진출",
      "tris": 306,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.655
       ],
       "max": [
        0.5,
        0.02,
        0.655
       ]
      },
      "size": [
       1,
       0.02,
       1.31
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.155
      ],
      "anims": []
     },
     "bytes": 7696,
     "sha256": "5126085978a6a1df1c3728490b9736ffea8890b2f240a6c0fea2dd194ecf4a29"
    },
    {
     "path": "road-bridge.glb",
     "meta": {
      "name": "road-bridge",
      "role": "road",
      "description": "다리(고가)",
      "tris": 240,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.52,
        0.5
       ]
      },
      "size": [
       1,
       0.52,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 9136,
     "sha256": "38ce17bbf6d5535ab7aae08200c814fe06b84bfd44f0c2fcded5e38277cbd0cf"
    },
    {
     "path": "road-slant.glb",
     "meta": {
      "name": "road-slant",
      "role": "road",
      "description": "경사로",
      "tris": 44,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.27,
        0.5
       ]
      },
      "size": [
       1,
       0.27,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5788,
     "sha256": "912a9b9270ac47a0cee458c572c146e964f2dd86e73a2ae74fb02c1e91e7a4e4"
    },
    {
     "path": "tile-low.glb",
     "meta": {
      "name": "tile-low",
      "role": "road",
      "description": "보도 블록(낮은)",
      "tris": 12,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.02,
        0.5
       ]
      },
      "size": [
       1,
       0.02,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5328,
     "sha256": "d5ddae654c1992d418d299bdc02d08585f1f8592ed33b2b27fc1045e34487fb3"
    },
    {
     "path": "tile-high.glb",
     "meta": {
      "name": "tile-high",
      "role": "road",
      "description": "보도 블록(높은)",
      "tris": 12,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.25,
        0.5
       ]
      },
      "size": [
       1,
       0.25,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5324,
     "sha256": "38cc9e13a66be7ce009725d2baa01129fc9b2c98565df133a76b100662afac3d"
    },
    {
     "path": "tile-slant.glb",
     "meta": {
      "name": "tile-slant",
      "role": "road",
      "description": "보도 블록(경사)",
      "tris": 12,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.27,
        0.5
       ]
      },
      "size": [
       1,
       0.27,
       1
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5356,
     "sha256": "09328996edfb0d93178e85b5b93c2be5b6c8b5111c2478dc907c32e3e9be0cdc"
    }
   ],
   "base": "kenney-city-roads/1/"
  },
  {
   "id": "kenney-city-suburban",
   "version": 1,
   "kind": "model",
   "title": "City Kit (Suburban)",
   "author": "Kenney (www.kenney.nl)",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/city-kit-suburban",
   "notes": "Kenney City Kit (Suburban) 2.0 의 GLB 중 40개(meta.role: house·prop·road). 원본 단위 그대로 — 게임이 meta.size 로 축척한다(Kenney City Kit 4종 공통 축척: 도로 타일 한 칸 = 1 단위 ≈ 8 m(2차선 폭). 출입문 높이 약 0.25·층고 약 0.4·가로등 0.6~0.68·라바콘 0.094 단위 — 사람(1.8 m)은 약 0.22 단위. 게임에서 1 = 1 m 로 쓰려면 8 배). 정적 모델: 노드 변환을 굽고 재질별로 합침(메시 하나), 원점=바닥 중심(bbox), meshopt(GLTFLoader.setMeshoptDecoder 필요). 원본 원점(격자 기준)은 새 좌표에서 meta.origin0 — 격자에 맞추려면 −origin0 만큼 옮긴다. 앞쪽=+Z(원본 그대로 — 출입문·차양·신호등 앞면). 텍스처: 키트 공통 색표 colormap(512²)을 무손실 WebP 로 glb 마다 품었다(EXT_texture_webp). lowDetail 표시 모델은 먼 배경(스카이라인)용. 처음 쓴 게임: VERDICT(verdict). 원작자 표기는 의무 아님(권장: Kenney). 만드는 법: node tools/models/kenney-city.mjs fetch kenney-city-suburban && node tools/models/kenney-city.mjs build kenney-city-suburban",
   "tags": [
    "city",
    "suburban",
    "house",
    "fence",
    "tree",
    "low-poly",
    "kenney"
   ],
   "files": [
    {
     "path": "building-type-a.glb",
     "meta": {
      "name": "building-type-a",
      "role": "house",
      "tris": 1174,
      "bbox": {
       "min": [
        -0.65,
        0,
        -0.514
       ],
       "max": [
        0.65,
        0.834,
        0.514
       ]
      },
      "size": [
       1.3,
       0.834,
       1.028
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 24604,
     "sha256": "030fd106b020c04d4fe435a0d9f27d0f8a0685e7118e097cfff2c78024e6af1c"
    },
    {
     "path": "building-type-b.glb",
     "meta": {
      "name": "building-type-b",
      "role": "house",
      "tris": 1748,
      "bbox": {
       "min": [
        -0.914,
        0,
        -0.57
       ],
       "max": [
        0.914,
        1.138,
        0.57
       ]
      },
      "size": [
       1.828,
       1.138,
       1.14
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 30560,
     "sha256": "2d4c6768a5b5d8e4747752ca02fa9d2eca5c5b014b101d905251a74f677422d9"
    },
    {
     "path": "building-type-c.glb",
     "meta": {
      "name": "building-type-c",
      "role": "house",
      "tris": 1196,
      "bbox": {
       "min": [
        -0.643,
        0,
        -0.514
       ],
       "max": [
        0.643,
        1.034,
        0.514
       ]
      },
      "size": [
       1.286,
       1.034,
       1.028
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 25192,
     "sha256": "9d5afc776302b90b2a1c078ec00c7749e8083c3dccdf1f42f4f54e7bdb11adaf"
    },
    {
     "path": "building-type-d.glb",
     "meta": {
      "name": "building-type-d",
      "role": "house",
      "tris": 1757,
      "bbox": {
       "min": [
        -0.878,
        0,
        -0.514
       ],
       "max": [
        0.878,
        1.237,
        0.514
       ]
      },
      "size": [
       1.756,
       1.237,
       1.028
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 31552,
     "sha256": "726d3041a89496c44ee0058010313ee092ce75b5558f5804773603e27d1b9708"
    },
    {
     "path": "building-type-e.glb",
     "meta": {
      "name": "building-type-e",
      "role": "house",
      "tris": 1731,
      "bbox": {
       "min": [
        -0.65,
        0,
        -0.514
       ],
       "max": [
        0.65,
        1.137,
        0.514
       ]
      },
      "size": [
       1.3,
       1.137,
       1.028
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 30912,
     "sha256": "bf226eb977c98fec38a6892ed0e7b1375cb1c0414d99444950d3697eb6634788"
    },
    {
     "path": "building-type-f.glb",
     "meta": {
      "name": "building-type-f",
      "role": "house",
      "tris": 1616,
      "bbox": {
       "min": [
        -0.714,
        0,
        -0.703
       ],
       "max": [
        0.714,
        1.138,
        0.703
       ]
      },
      "size": [
       1.428,
       1.138,
       1.406
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 30976,
     "sha256": "9ca4289ed13001b0d60871062e3d3bd9452e19783c72b9fc8411313667f0647f"
    },
    {
     "path": "building-type-g.glb",
     "meta": {
      "name": "building-type-g",
      "role": "house",
      "tris": 1067,
      "bbox": {
       "min": [
        -0.725,
        0,
        -0.589
       ],
       "max": [
        0.725,
        0.768,
        0.589
       ]
      },
      "size": [
       1.45,
       0.768,
       1.178
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 23608,
     "sha256": "3e813d09e8db3242f4dd0a628a8de0053bb7cc2846f6798dc08d1d5daa7312a3"
    },
    {
     "path": "building-type-h.glb",
     "meta": {
      "name": "building-type-h",
      "role": "house",
      "tris": 770,
      "bbox": {
       "min": [
        -0.65,
        0,
        -0.458
       ],
       "max": [
        0.65,
        0.738,
        0.458
       ]
      },
      "size": [
       1.3,
       0.738,
       0.916
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 20364,
     "sha256": "db7f0f5d7dad082a8f801fd961c29b85f48e2e52fbde48cad0cc464086d8a3f7"
    },
    {
     "path": "building-type-i.glb",
     "meta": {
      "name": "building-type-i",
      "role": "house",
      "tris": 800,
      "bbox": {
       "min": [
        -0.643,
        0,
        -0.514
       ],
       "max": [
        0.643,
        0.738,
        0.514
       ]
      },
      "size": [
       1.286,
       0.738,
       1.028
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 21268,
     "sha256": "c5df513ea40d9d827605873e34e1fa794b69c0a5e32d65bd38f50969eb6fca6e"
    },
    {
     "path": "building-type-j.glb",
     "meta": {
      "name": "building-type-j",
      "role": "house",
      "tris": 1210,
      "bbox": {
       "min": [
        -0.685,
        0,
        -0.458
       ],
       "max": [
        0.685,
        1.038,
        0.458
       ]
      },
      "size": [
       1.37,
       1.038,
       0.916
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 25256,
     "sha256": "3daac41857330f860638afa637ef1cb6c68a8833d3303a0c66eb11f2fe954c40"
    },
    {
     "path": "building-type-k.glb",
     "meta": {
      "name": "building-type-k",
      "role": "house",
      "tris": 1024,
      "bbox": {
       "min": [
        -0.46,
        0,
        -0.51
       ],
       "max": [
        0.46,
        1.15,
        0.51
       ]
      },
      "size": [
       0.92,
       1.15,
       1.02
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 23272,
     "sha256": "852c21fbec5638888e11d79548e43316bc41ac991b8e982b3b037968787349cc"
    },
    {
     "path": "building-type-l.glb",
     "meta": {
      "name": "building-type-l",
      "role": "house",
      "tris": 1310,
      "bbox": {
       "min": [
        -0.517,
        0,
        -0.51
       ],
       "max": [
        0.517,
        1.049,
        0.51
       ]
      },
      "size": [
       1.034,
       1.049,
       1.02
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 25888,
     "sha256": "37f8b11442157477b843eaf53044d228b7b4e2a61a8fbd9e397b9366e2297b2c"
    },
    {
     "path": "building-type-m.glb",
     "meta": {
      "name": "building-type-m",
      "role": "house",
      "tris": 1112,
      "bbox": {
       "min": [
        -0.714,
        0,
        -0.714
       ],
       "max": [
        0.714,
        0.737,
        0.714
       ]
      },
      "size": [
       1.428,
       0.737,
       1.428
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 24692,
     "sha256": "d9001fb00b56c5155f2d67a7c91863dee56a5fa725f456dcfe949a374187f200"
    },
    {
     "path": "building-type-n.glb",
     "meta": {
      "name": "building-type-n",
      "role": "house",
      "tris": 1612,
      "bbox": {
       "min": [
        -0.892,
        0,
        -0.689
       ],
       "max": [
        0.892,
        1.138,
        0.689
       ]
      },
      "size": [
       1.784,
       1.138,
       1.378
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 31096,
     "sha256": "f9e01624291a8f236a5dd35037cdae372bf65fa7e95777dc58f9d5ce06dac78c"
    },
    {
     "path": "building-type-o.glb",
     "meta": {
      "name": "building-type-o",
      "role": "house",
      "tris": 1326,
      "bbox": {
       "min": [
        -0.635,
        0,
        -0.514
       ],
       "max": [
        0.635,
        1.137,
        0.514
       ]
      },
      "size": [
       1.27,
       1.137,
       1.028
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 27184,
     "sha256": "8480a1ca281e3593fba88b7be87e414aaf46e764c235833acf73f109e371db04"
    },
    {
     "path": "building-type-p.glb",
     "meta": {
      "name": "building-type-p",
      "role": "house",
      "tris": 1282,
      "bbox": {
       "min": [
        -0.62,
        0,
        -0.495
       ],
       "max": [
        0.62,
        0.918,
        0.495
       ]
      },
      "size": [
       1.24,
       0.918,
       0.99
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 26132,
     "sha256": "e9e0623f77ed46a926aa5ed816c3ae7d7ca5ffed066c8eecde560aceffe35698"
    },
    {
     "path": "building-type-q.glb",
     "meta": {
      "name": "building-type-q",
      "role": "house",
      "tris": 1140,
      "bbox": {
       "min": [
        -0.62,
        0,
        -0.443
       ],
       "max": [
        0.62,
        0.918,
        0.443
       ]
      },
      "size": [
       1.24,
       0.918,
       0.886
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.021
      ],
      "anims": []
     },
     "bytes": 24704,
     "sha256": "897be104fcf884e1f2d6c7aada87d0b5a2bbab5be4c6b9ecace32d3052c82ccf"
    },
    {
     "path": "building-type-r.glb",
     "meta": {
      "name": "building-type-r",
      "role": "house",
      "tris": 1030,
      "bbox": {
       "min": [
        -0.514,
        0,
        -0.51
       ],
       "max": [
        0.514,
        1.141,
        0.51
       ]
      },
      "size": [
       1.028,
       1.141,
       1.02
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 23344,
     "sha256": "2002a7778dcc0b5a789991e9dc2fb74412f3e8f63a2abb6014e88310bf800080"
    },
    {
     "path": "building-type-s.glb",
     "meta": {
      "name": "building-type-s",
      "role": "house",
      "tris": 1212,
      "bbox": {
       "min": [
        -0.703,
        0,
        -0.543
       ],
       "max": [
        0.703,
        1.138,
        0.543
       ]
      },
      "size": [
       1.406,
       1.138,
       1.086
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 25984,
     "sha256": "70d760fdfa841f557c0f9bd371d004b121c63cefde61d51901cb147e1461b873"
    },
    {
     "path": "building-type-t.glb",
     "meta": {
      "name": "building-type-t",
      "role": "house",
      "tris": 2062,
      "bbox": {
       "min": [
        -0.657,
        0,
        -0.703
       ],
       "max": [
        0.657,
        1.156,
        0.703
       ]
      },
      "size": [
       1.314,
       1.156,
       1.406
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0.007,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 34620,
     "sha256": "d2985c671fd2eecf96d135c105a30b0fc8d380b9d72772550ab5e997a4131b2d"
    },
    {
     "path": "building-type-u.glb",
     "meta": {
      "name": "building-type-u",
      "role": "house",
      "tris": 1332,
      "bbox": {
       "min": [
        -0.714,
        0,
        -0.544
       ],
       "max": [
        0.714,
        1.138,
        0.544
       ]
      },
      "size": [
       1.428,
       1.138,
       1.088
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 27332,
     "sha256": "a2cb2de8fdfd1a320e646327045aad6f4fefe92090e058921cc3ac46bee5a7c4"
    },
    {
     "path": "fence.glb",
     "meta": {
      "name": "fence",
      "role": "prop",
      "description": "울타리 한 칸",
      "tris": 88,
      "bbox": {
       "min": [
        -0.238,
        0,
        -0.037
       ],
       "max": [
        0.238,
        0.27,
        0.037
       ]
      },
      "size": [
       0.476,
       0.27,
       0.074
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 12664,
     "sha256": "d92bd140b95728d54be29162c578018fe6df503b1249e25b36795bf7c5b01726"
    },
    {
     "path": "fence-low.glb",
     "meta": {
      "name": "fence-low",
      "role": "prop",
      "description": "낮은 울타리(양 끝 기둥)",
      "tris": 180,
      "bbox": {
       "min": [
        -0.638,
        0,
        -0.419
       ],
       "max": [
        0.638,
        0.17,
        0.419
       ]
      },
      "size": [
       1.276,
       0.17,
       0.838
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.019
      ],
      "anims": []
     },
     "bytes": 13964,
     "sha256": "20d64b6e17643c0f8126caeda243b0add9ebbc8084709f4faf411e097f1d4338"
    },
    {
     "path": "fence-1x2.glb",
     "meta": {
      "name": "fence-1x2",
      "role": "prop",
      "description": "울타리 ㄷ자 1×2",
      "tris": 156,
      "bbox": {
       "min": [
        -0.437,
        0,
        -0.219
       ],
       "max": [
        0.438,
        0.27,
        0.219
       ]
      },
      "size": [
       0.875,
       0.27,
       0.438
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.019
      ],
      "anims": []
     },
     "bytes": 13620,
     "sha256": "0afe7d07b1704dd4f1ab42dc79596a910eeaae02e07a270ec90526fc5f47790c"
    },
    {
     "path": "fence-1x3.glb",
     "meta": {
      "name": "fence-1x3",
      "role": "prop",
      "description": "울타리 ㄷ자 1×3",
      "tris": 204,
      "bbox": {
       "min": [
        -0.638,
        0,
        -0.219
       ],
       "max": [
        0.638,
        0.27,
        0.219
       ]
      },
      "size": [
       1.276,
       0.27,
       0.438
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.019
      ],
      "anims": []
     },
     "bytes": 14332,
     "sha256": "3dd2cf037e53bdde5e140b83ce8b421d57d1eb02d9a94cb8ab53caf101cb549b"
    },
    {
     "path": "fence-1x4.glb",
     "meta": {
      "name": "fence-1x4",
      "role": "prop",
      "description": "울타리 ㄷ자 1×4",
      "tris": 252,
      "bbox": {
       "min": [
        -0.838,
        0,
        -0.219
       ],
       "max": [
        0.838,
        0.27,
        0.219
       ]
      },
      "size": [
       1.676,
       0.27,
       0.438
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.019
      ],
      "anims": []
     },
     "bytes": 14988,
     "sha256": "8c27a48cc1ddc790ac519991b7625e4a82bd10abe315d35d41a52512c98f0b78"
    },
    {
     "path": "fence-2x2.glb",
     "meta": {
      "name": "fence-2x2",
      "role": "prop",
      "description": "울타리 ㄷ자 2×2",
      "tris": 236,
      "bbox": {
       "min": [
        -0.437,
        0,
        -0.419
       ],
       "max": [
        0.438,
        0.27,
        0.419
       ]
      },
      "size": [
       0.875,
       0.27,
       0.838
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.019
      ],
      "anims": []
     },
     "bytes": 14708,
     "sha256": "6e4a1c672e8ee684796b594ce4a89551dfaf50bcac7d4eb1cef7cb71ebe2c849"
    },
    {
     "path": "fence-2x3.glb",
     "meta": {
      "name": "fence-2x3",
      "role": "prop",
      "description": "울타리 ㄷ자 2×3",
      "tris": 284,
      "bbox": {
       "min": [
        -0.638,
        0,
        -0.419
       ],
       "max": [
        0.638,
        0.27,
        0.419
       ]
      },
      "size": [
       1.276,
       0.27,
       0.838
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.019
      ],
      "anims": []
     },
     "bytes": 15396,
     "sha256": "33e11ca2fb0b44d6b0ef7bcace530fb2388527a33846749c788842131deea878"
    },
    {
     "path": "fence-3x2.glb",
     "meta": {
      "name": "fence-3x2",
      "role": "prop",
      "description": "울타리 ㄷ자 3×2",
      "tris": 316,
      "bbox": {
       "min": [
        -0.438,
        0,
        -0.619
       ],
       "max": [
        0.438,
        0.27,
        0.619
       ]
      },
      "size": [
       0.876,
       0.27,
       1.238
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.019
      ],
      "anims": []
     },
     "bytes": 15868,
     "sha256": "b6fc8d33a82431403e4fdbb56d6d92bde9ec9daa2fb427b039aaa01e5a5da717"
    },
    {
     "path": "fence-3x3.glb",
     "meta": {
      "name": "fence-3x3",
      "role": "prop",
      "description": "울타리 ㄷ자 3×3",
      "tris": 364,
      "bbox": {
       "min": [
        -0.638,
        0,
        -0.619
       ],
       "max": [
        0.638,
        0.27,
        0.619
       ]
      },
      "size": [
       1.276,
       0.27,
       1.238
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       -0.019
      ],
      "anims": []
     },
     "bytes": 16456,
     "sha256": "c11b5dcb91d4c1c55a93ed922e6ac2d8183b247376a609c303e8fd354e1c06ca"
    },
    {
     "path": "planter.glb",
     "meta": {
      "name": "planter",
      "role": "prop",
      "description": "화단(덤불 3)",
      "tris": 204,
      "bbox": {
       "min": [
        -0.2,
        0,
        -0.15
       ],
       "max": [
        0.2,
        0.177,
        0.15
       ]
      },
      "size": [
       0.4,
       0.177,
       0.3
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0.001
      ],
      "anims": []
     },
     "bytes": 13544,
     "sha256": "e1be5041efef5eef1e7845840faa485d9d57e8f1af6bb8af3881fa97e53cdb65"
    },
    {
     "path": "tree-large.glb",
     "meta": {
      "name": "tree-large",
      "role": "prop",
      "description": "나무(큰 원뿔형)",
      "tris": 42,
      "bbox": {
       "min": [
        -0.105,
        0,
        -0.121
       ],
       "max": [
        0.105,
        0.767,
        0.121
       ]
      },
      "size": [
       0.21,
       0.767,
       0.242
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 12052,
     "sha256": "1f31e70db4594b2c5fa2f65901c1b8d9d4bba35e477e593b33d868ee5925c595"
    },
    {
     "path": "tree-small.glb",
     "meta": {
      "name": "tree-small",
      "role": "prop",
      "description": "나무(작은 원뿔형)",
      "tris": 42,
      "bbox": {
       "min": [
        -0.105,
        0,
        -0.121
       ],
       "max": [
        0.105,
        0.567,
        0.121
       ]
      },
      "size": [
       0.21,
       0.567,
       0.242
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 12036,
     "sha256": "616eed33a8dc741af48d78fbc817945068762e67fdc952b1cdc7aba573d6ac65"
    },
    {
     "path": "driveway-long.glb",
     "meta": {
      "name": "driveway-long",
      "role": "road",
      "description": "차고 진입로(긴)",
      "tris": 12,
      "bbox": {
       "min": [
        -0.18,
        0,
        -0.2
       ],
       "max": [
        0.18,
        0.01,
        0.2
       ]
      },
      "size": [
       0.36,
       0.01,
       0.4
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11720,
     "sha256": "babd924f0351407bac4853c0c1dffa0708dda6ec769a61e8e94250bd37e950a0"
    },
    {
     "path": "driveway-short.glb",
     "meta": {
      "name": "driveway-short",
      "role": "road",
      "description": "차고 진입로(짧은)",
      "tris": 12,
      "bbox": {
       "min": [
        -0.18,
        0,
        -0.1
       ],
       "max": [
        0.18,
        0.01,
        0.1
       ]
      },
      "size": [
       0.36,
       0.01,
       0.2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11736,
     "sha256": "53d65b64f76b05c0fa9ed1aa9665a96f29199a0f4f37b4bc378c8f3fc60170c7"
    },
    {
     "path": "path-long.glb",
     "meta": {
      "name": "path-long",
      "role": "road",
      "description": "보도(긴)",
      "tris": 12,
      "bbox": {
       "min": [
        -0.1,
        0,
        -0.2
       ],
       "max": [
        0.1,
        0.01,
        0.2
       ]
      },
      "size": [
       0.2,
       0.01,
       0.4
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11712,
     "sha256": "c270bb410f99008e2e1dea0e67dd2b3e5c1048e9d334d8082a1ca19d3da5c7da"
    },
    {
     "path": "path-short.glb",
     "meta": {
      "name": "path-short",
      "role": "road",
      "description": "보도(짧은)",
      "tris": 12,
      "bbox": {
       "min": [
        -0.1,
        0,
        -0.1
       ],
       "max": [
        0.1,
        0.01,
        0.1
       ]
      },
      "size": [
       0.2,
       0.01,
       0.2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11728,
     "sha256": "a3fa4390655fe3268cca745a53c964d0c6c4007448f884776db04fd7aa09d113"
    },
    {
     "path": "path-stones-long.glb",
     "meta": {
      "name": "path-stones-long",
      "role": "road",
      "description": "디딤돌 길(긴)",
      "tris": 48,
      "bbox": {
       "min": [
        -0.07,
        0,
        -0.2
       ],
       "max": [
        0.07,
        0.01,
        0.2
       ]
      },
      "size": [
       0.14,
       0.01,
       0.4
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 12144,
     "sha256": "1baa29b6d03dfb7dd5d83bb796fb610fc4b172160a2c524be82535800cf477c0"
    },
    {
     "path": "path-stones-short.glb",
     "meta": {
      "name": "path-stones-short",
      "role": "road",
      "description": "디딤돌 길(짧은)",
      "tris": 24,
      "bbox": {
       "min": [
        -0.07,
        0,
        -0.1
       ],
       "max": [
        0.07,
        0.01,
        0.1
       ]
      },
      "size": [
       0.14,
       0.01,
       0.2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11868,
     "sha256": "b18bf692a6480ca8fcb2db392180cbfb04da7ec842958b96ae198f89ef9e3725"
    },
    {
     "path": "path-stones-messy.glb",
     "meta": {
      "name": "path-stones-messy",
      "role": "road",
      "description": "디딤돌 길(흩어진)",
      "tris": 36,
      "bbox": {
       "min": [
        -0.078,
        0,
        -0.181
       ],
       "max": [
        0.078,
        0.01,
        0.181
       ]
      },
      "size": [
       0.156,
       0.01,
       0.362
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 12060,
     "sha256": "0acb5b2cfe533c639512a4eb0719b272b4e8e04a23d98e411ce0b24c9b66bc6b"
    }
   ],
   "base": "kenney-city-suburban/1/"
  },
  {
   "id": "kenney-cube-pets",
   "version": 1,
   "kind": "model",
   "title": "Cube Pets",
   "author": "Kenney (www.kenney.nl)",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/cube-pets",
   "notes": "Kenney Cube Pets 2.0 의 동물 24마리(정육면체 몸통 저폴리, 마리당 422~951 삼각형). 뼈대 없이 노드 TRS 애니메이션: static·idle·walk·run·eat·dance·gesture-positive·gesture-negative(static 0.1s, idle 1s, walk·eat·dance 0.5s, run·gesture-* 0.25s, 선형 보간, 루프용). 클립이 root 를 포함한 모든 노드의 T·R·S 를 쓰므로 게임이 클립과 코드 애니메이션을 섞을 때는 클립을 끄거나(또는 해당 트랙을 빼고) 노드를 돌린다. 노드 이름·계층·피벗은 원본 그대로: <animal-이름> → root → body·leg-front-left/right·leg-back-left/right (+ body 아래 tail·wing-left/right·Group). 다리 노드 원점이 엉덩이 피벗(몸통 밑면, 예: leg-front-left (0.25,0.3,0.25)) — 다리는 X 축으로 돌리면 걷는다. 두 발 동물(chick·parrot·penguin)은 leg-front-left/right 만(z=0), fish 는 다리 없음, elephant 의 tail 노드는 앞쪽 코(trunk), Group 은 코·주둥이·볏·집게 같은 장식. meta.parts 에 노드별 피벗. 앞쪽=+Z(원본 그대로 — 얼굴이 +Z, 왼쪽 다리가 +X), Y 위, 원점=바닥(y=0)·몸통 중심(원본 그대로, 몸통은 x·z ±0.625 의 1.25 정육면체, 키 약 1.4~1.7). 텍스처: 원본 colormap.png(512², 32px 너비 칸마다 세로 그라데이션 — 색 1829개)를 무손실 WebP 로 glb 안에 품었다(EXT_texture_webp, three.js GLTFLoader 기본 지원). UV 가 칸 안쪽을 가리켜 NearestFilter 로 바꿔도 색이 같다(먼 거리 밉맵에서 옆 칸이 번지면 minFilter 를 NearestFilter/LinearFilter(밉맵 없음)로). meshopt 는 쓰지 않았다(애니메이션 노드에 양자화 보정 변환을 넣을 수 없고 파일이 작다). 원작자 표기는 의무 아님(권장: Kenney).",
   "tags": [
    "animal",
    "pet",
    "cute",
    "low-poly",
    "animated",
    "node-animation",
    "kenney"
   ],
   "files": [
    {
     "path": "animal-beaver.glb",
     "meta": {
      "name": "beaver",
      "tris": 670,
      "bbox": {
       "min": [
        -0.625,
        0,
        -1.04
       ],
       "max": [
        0.625,
        1.501,
        0.797
       ]
      },
      "size": [
       1.25,
       1.501,
       1.837
      ],
      "forward": "+Z",
      "nodes": [
       "animal-beaver",
       "root",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right",
       "body",
       "tail"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "tail",
        "kind": "tail",
        "parent": "body",
        "pivot": [
         0,
         0.719,
         -0.495
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [
       "tail"
      ],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 73644,
     "sha256": "816b3a2fe1901e24db97f6d3764e1aa0c314b51a0f8d7493b9eaf7114dbea5de"
    },
    {
     "path": "animal-bee.glb",
     "meta": {
      "name": "bee",
      "tris": 742,
      "bbox": {
       "min": [
        -0.667,
        0,
        -0.625
       ],
       "max": [
        0.668,
        1.999,
        0.668
       ]
      },
      "size": [
       1.335,
       1.999,
       1.293
      ],
      "forward": "+Z",
      "nodes": [
       "animal-bee",
       "root",
       "body",
       "wing-left",
       "wing-right",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "wing-left",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         0.196,
         1.501,
         -0.022
        ]
       },
       {
        "node": "wing-right",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         -0.196,
         1.501,
         -0.022
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [
       "wing-left",
       "wing-right"
      ],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 78088,
     "sha256": "9ef3799f706fc8a7e07fd0143d7c73a607d1534047403f353323395a812241b8"
    },
    {
     "path": "animal-bunny.glb",
     "meta": {
      "name": "bunny",
      "tris": 575,
      "bbox": {
       "min": [
        -0.625,
        0,
        -0.625
       ],
       "max": [
        0.625,
        2.01,
        0.705
       ]
      },
      "size": [
       1.25,
       2.01,
       1.33
      ],
      "forward": "+Z",
      "nodes": [
       "animal-bunny",
       "root",
       "body",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 65564,
     "sha256": "c163ae2c0d28daedd15138f76b70e4c5895864e257d26709c29e233e63b043c5"
    },
    {
     "path": "animal-cat.glb",
     "meta": {
      "name": "cat",
      "tris": 684,
      "bbox": {
       "min": [
        -0.625,
        0,
        -1.104
       ],
       "max": [
        0.625,
        1.71,
        0.702
       ]
      },
      "size": [
       1.25,
       1.71,
       1.806
      ],
      "forward": "+Z",
      "nodes": [
       "animal-cat",
       "root",
       "body",
       "Group",
       "tail",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "Group",
        "kind": "decor",
        "parent": "body",
        "pivot": [
         0.181,
         0.609,
         0.635
        ]
       },
       {
        "node": "tail",
        "kind": "tail",
        "parent": "body",
        "pivot": [
         0,
         0.819,
         -0.548
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [
       "tail"
      ],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 79140,
     "sha256": "e716fa49be74acd64e8c5691587f2eba510baaf602aad42b37feb14c52b8c1dd"
    },
    {
     "path": "animal-caterpillar.glb",
     "meta": {
      "name": "caterpillar",
      "tris": 578,
      "bbox": {
       "min": [
        -0.722,
        0,
        -0.625
       ],
       "max": [
        0.722,
        1.747,
        0.707
       ]
      },
      "size": [
       1.444,
       1.747,
       1.332
      ],
      "forward": "+Z",
      "nodes": [
       "animal-caterpillar",
       "root",
       "leg-front-left",
       "body",
       "leg-back-left",
       "leg-back-right",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-front-left",
       "leg-back-left",
       "leg-back-right",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 65200,
     "sha256": "07d26b1b2d9a5f3b870c31e978213444982dbbb0dee8bb0a100958d54d7d7e1e"
    },
    {
     "path": "animal-chick.glb",
     "meta": {
      "name": "chick",
      "tris": 490,
      "bbox": {
       "min": [
        -1.098,
        0,
        -0.625
       ],
       "max": [
        1.098,
        1.594,
        0.725
       ]
      },
      "size": [
       2.196,
       1.594,
       1.35
      ],
      "forward": "+Z",
      "nodes": [
       "animal-chick",
       "root",
       "leg-front-right",
       "leg-front-left",
       "body",
       "wing-left",
       "wing-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "wing-left",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         0.625,
         0.644,
         0.031
        ]
       },
       {
        "node": "wing-right",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         -0.525,
         0.644,
         0.031
        ]
       }
      ],
      "legs": [
       "leg-front-right",
       "leg-front-left"
      ],
      "wings": [
       "wing-left",
       "wing-right"
      ],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 60108,
     "sha256": "c3a5792fd405f6c7d6af0493ab90ecc9f8a44d78db549968d332190cc5d66a00"
    },
    {
     "path": "animal-cow.glb",
     "meta": {
      "name": "cow",
      "tris": 578,
      "bbox": {
       "min": [
        -0.77,
        0,
        -0.625
       ],
       "max": [
        0.77,
        1.612,
        0.835
       ]
      },
      "size": [
       1.54,
       1.612,
       1.46
      ],
      "forward": "+Z",
      "nodes": [
       "animal-cow",
       "root",
       "leg-front-right",
       "leg-front-left",
       "leg-back-right",
       "leg-back-left",
       "body",
       "Group"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "Group",
        "kind": "decor",
        "parent": "body",
        "pivot": [
         0,
         0.759,
         0.625
        ]
       }
      ],
      "legs": [
       "leg-front-right",
       "leg-front-left",
       "leg-back-right",
       "leg-back-left"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 57828,
     "sha256": "7f15c706d31cdacd60dc8b0faec2c770f600d31c4e02213c031e189739c19d2a"
    },
    {
     "path": "animal-crab.glb",
     "meta": {
      "name": "crab",
      "tris": 676,
      "bbox": {
       "min": [
        -1.168,
        0,
        -0.674
       ],
       "max": [
        1.168,
        1.431,
        0.674
       ]
      },
      "size": [
       2.336,
       1.431,
       1.348
      ],
      "forward": "+Z",
      "nodes": [
       "animal-crab",
       "root",
       "leg-back-left",
       "body",
       "Group",
       "leg-front-left",
       "leg-back-right",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "Group",
        "kind": "decor",
        "parent": "body",
        "pivot": [
         0.625,
         0.181,
         -0.625
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-front-left",
       "leg-back-right",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 73832,
     "sha256": "c17b37dd9b4b14c21245642381fad345e1459ad098cf4e00a4929d083054e69a"
    },
    {
     "path": "animal-deer.glb",
     "meta": {
      "name": "deer",
      "tris": 760,
      "bbox": {
       "min": [
        -0.77,
        0,
        -0.625
       ],
       "max": [
        0.77,
        1.993,
        0.935
       ]
      },
      "size": [
       1.54,
       1.993,
       1.56
      ],
      "forward": "+Z",
      "nodes": [
       "animal-deer",
       "root",
       "leg-back-left",
       "body",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 78428,
     "sha256": "b288177504a26391b28e41f7ef41578a14d282a152853349653d7ba2b7856548"
    },
    {
     "path": "animal-dog.glb",
     "meta": {
      "name": "dog",
      "tris": 490,
      "bbox": {
       "min": [
        -0.625,
        0,
        -0.625
       ],
       "max": [
        0.635,
        1.584,
        0.876
       ]
      },
      "size": [
       1.26,
       1.584,
       1.501
      ],
      "forward": "+Z",
      "nodes": [
       "animal-dog",
       "root",
       "body",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 57348,
     "sha256": "b288032cb4bb8616f64ef5c85f91ed97fe1a79e116c3f810ecc224a8af9da491"
    },
    {
     "path": "animal-elephant.glb",
     "meta": {
      "name": "elephant",
      "tris": 676,
      "bbox": {
       "min": [
        -0.939,
        0,
        -0.625
       ],
       "max": [
        0.939,
        1.431,
        1.05
       ]
      },
      "size": [
       1.878,
       1.431,
       1.675
      ],
      "forward": "+Z",
      "nodes": [
       "animal-elephant",
       "root",
       "body",
       "tail",
       "leg-back-left",
       "leg-front-left",
       "leg-back-right",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "tail",
        "kind": "trunk",
        "parent": "body",
        "pivot": [
         0,
         0.644,
         0.625
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-front-left",
       "leg-back-right",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [
       "tail"
      ],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 73288,
     "sha256": "8e0e2b61539fe21b2e0bec6982ebe9452566b3fa723bbc17fba113cbeb597ca3"
    },
    {
     "path": "animal-fish.glb",
     "meta": {
      "name": "fish",
      "tris": 422,
      "bbox": {
       "min": [
        -0.942,
        0.104,
        -0.625
       ],
       "max": [
        0.942,
        1.732,
        0.635
       ]
      },
      "size": [
       1.884,
       1.628,
       1.26
      ],
      "forward": "+Z",
      "nodes": [
       "animal-fish",
       "root",
       "body",
       "wing-right",
       "wing-left"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "wing-right",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         -0.625,
         0.594,
         0.213
        ]
       },
       {
        "node": "wing-left",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         0.625,
         0.594,
         0.213
        ]
       }
      ],
      "legs": [],
      "wings": [
       "wing-right",
       "wing-left"
      ],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 48436,
     "sha256": "199d47fa84a4a60f356474ea3e7d98532b2f9932c1dc1d9ab2e9417b2269f5d9"
    },
    {
     "path": "animal-fox.glb",
     "meta": {
      "name": "fox",
      "tris": 568,
      "bbox": {
       "min": [
        -0.625,
        0,
        -1.374
       ],
       "max": [
        0.625,
        1.686,
        0.935
       ]
      },
      "size": [
       1.25,
       1.686,
       2.309
      ],
      "forward": "+Z",
      "nodes": [
       "animal-fox",
       "root",
       "body",
       "tail",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "tail",
        "kind": "tail",
        "parent": "body",
        "pivot": [
         0,
         0.719,
         -0.495
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [
       "tail"
      ],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 68200,
     "sha256": "fed0db83be1b8882d67c0b497319f7e72b81c7ba995749e586d9e2ca241fbc6d"
    },
    {
     "path": "animal-giraffe.glb",
     "meta": {
      "name": "giraffe",
      "tris": 598,
      "bbox": {
       "min": [
        -0.768,
        0,
        -0.625
       ],
       "max": [
        0.787,
        1.714,
        0.791
       ]
      },
      "size": [
       1.555,
       1.714,
       1.416
      ],
      "forward": "+Z",
      "nodes": [
       "animal-giraffe",
       "root",
       "body",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 66340,
     "sha256": "a4ce05f0deddeb05a3c6c570becc3b5be97dc1912c7416165505422c2f0754f6"
    },
    {
     "path": "animal-hog.glb",
     "meta": {
      "name": "hog",
      "tris": 706,
      "bbox": {
       "min": [
        -0.675,
        0,
        -0.625
       ],
       "max": [
        0.675,
        1.516,
        0.876
       ]
      },
      "size": [
       1.35,
       1.516,
       1.501
      ],
      "forward": "+Z",
      "nodes": [
       "animal-hog",
       "root",
       "body",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 72484,
     "sha256": "0a12190f563f6716ec4518736da6a0c35b8361a68d822227405ded8d6e07e098"
    },
    {
     "path": "animal-koala.glb",
     "meta": {
      "name": "koala",
      "tris": 594,
      "bbox": {
       "min": [
        -0.971,
        0,
        -0.625
       ],
       "max": [
        0.971,
        1.463,
        0.764
       ]
      },
      "size": [
       1.942,
       1.463,
       1.389
      ],
      "forward": "+Z",
      "nodes": [
       "animal-koala",
       "root",
       "body",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 65288,
     "sha256": "95b454b47be01cd9451cb2c5cab5bdf342e41adcce99eddd475f1c2f89747239"
    },
    {
     "path": "animal-lion.glb",
     "meta": {
      "name": "lion",
      "tris": 889,
      "bbox": {
       "min": [
        -0.825,
        0,
        -1.104
       ],
       "max": [
        0.825,
        1.746,
        0.796
       ]
      },
      "size": [
       1.65,
       1.746,
       1.9
      ],
      "forward": "+Z",
      "nodes": [
       "animal-lion",
       "root",
       "leg-front-right",
       "body",
       "tail",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "tail",
        "kind": "tail",
        "parent": "body",
        "pivot": [
         0,
         0.819,
         -0.548
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-front-right",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left"
      ],
      "wings": [],
      "tail": [
       "tail"
      ],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 89760,
     "sha256": "846a75f11f7c71f238d2fb1fc93e842a85283d98ee83fe3fada79e61041ca9d5"
    },
    {
     "path": "animal-monkey.glb",
     "meta": {
      "name": "monkey",
      "tris": 918,
      "bbox": {
       "min": [
        -0.991,
        0,
        -1.08
       ],
       "max": [
        0.991,
        1.61,
        0.701
       ]
      },
      "size": [
       1.982,
       1.61,
       1.781
      ],
      "forward": "+Z",
      "nodes": [
       "animal-monkey",
       "root",
       "leg-front-left",
       "leg-front-right",
       "leg-back-right",
       "leg-back-left",
       "body",
       "tail"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "tail",
        "kind": "tail",
        "parent": "body",
        "pivot": [
         0,
         0.719,
         -0.525
        ]
       }
      ],
      "legs": [
       "leg-front-left",
       "leg-front-right",
       "leg-back-right",
       "leg-back-left"
      ],
      "wings": [],
      "tail": [
       "tail"
      ],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 90888,
     "sha256": "488fb9e33ebeaca3c84067dcced0cc62fd90593cf75014da7a7e464daeb66696"
    },
    {
     "path": "animal-panda.glb",
     "meta": {
      "name": "panda",
      "tris": 734,
      "bbox": {
       "min": [
        -0.672,
        0,
        -0.625
       ],
       "max": [
        0.672,
        1.501,
        0.815
       ]
      },
      "size": [
       1.344,
       1.501,
       1.44
      ],
      "forward": "+Z",
      "nodes": [
       "animal-panda",
       "root",
       "body",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 67268,
     "sha256": "723dee85252f1f2d8b2945096136412c68d77f661c33a9a5e73e46d2efbeeca8"
    },
    {
     "path": "animal-parrot.glb",
     "meta": {
      "name": "parrot",
      "tris": 530,
      "bbox": {
       "min": [
        -1.098,
        0,
        -1.094
       ],
       "max": [
        1.098,
        1.681,
        0.808
       ]
      },
      "size": [
       2.196,
       1.681,
       1.902
      ],
      "forward": "+Z",
      "nodes": [
       "animal-parrot",
       "root",
       "body",
       "Group",
       "tail",
       "wing-right",
       "wing-left",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "Group",
        "kind": "decor",
        "parent": "body",
        "pivot": [
         0,
         1.343,
         0.112
        ]
       },
       {
        "node": "tail",
        "kind": "tail",
        "parent": "body",
        "pivot": [
         0,
         0.719,
         -0.495
        ]
       },
       {
        "node": "wing-right",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         -0.525,
         0.644,
         0.031
        ]
       },
       {
        "node": "wing-left",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         0.625,
         0.644,
         0.031
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0
        ]
       }
      ],
      "legs": [
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [
       "wing-right",
       "wing-left"
      ],
      "tail": [
       "tail"
      ],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 69240,
     "sha256": "96fd837ecadea70763ee05fa573f075ef686b1563e05a0deeffaaa55aaff5914"
    },
    {
     "path": "animal-penguin.glb",
     "meta": {
      "name": "penguin",
      "tris": 558,
      "bbox": {
       "min": [
        -1.095,
        0,
        -0.625
       ],
       "max": [
        1.095,
        1.594,
        0.725
       ]
      },
      "size": [
       2.19,
       1.594,
       1.35
      ],
      "forward": "+Z",
      "nodes": [
       "animal-penguin",
       "root",
       "leg-front-right",
       "body",
       "wing-left",
       "wing-right",
       "leg-front-left"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "wing-left",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         0.625,
         0.644,
         0.031
        ]
       },
       {
        "node": "wing-right",
        "kind": "wing",
        "parent": "body",
        "pivot": [
         -0.525,
         0.644,
         0.031
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0
        ]
       }
      ],
      "legs": [
       "leg-front-right",
       "leg-front-left"
      ],
      "wings": [
       "wing-left",
       "wing-right"
      ],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 62808,
     "sha256": "44c38fc81e92ba5ea70592e4dc536f871e034dd8ac24d46729bb226b912037e7"
    },
    {
     "path": "animal-pig.glb",
     "meta": {
      "name": "pig",
      "tris": 424,
      "bbox": {
       "min": [
        -0.625,
        0,
        -0.625
       ],
       "max": [
        0.625,
        1.584,
        0.835
       ]
      },
      "size": [
       1.25,
       1.584,
       1.46
      ],
      "forward": "+Z",
      "nodes": [
       "animal-pig",
       "root",
       "body",
       "Group",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "Group",
        "kind": "decor",
        "parent": "body",
        "pivot": [
         0,
         0.809,
         0.625
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 57136,
     "sha256": "c3bbfa42b34430b83f67e2c486da71d6ec5239371e09965b2eff904074aec7f9"
    },
    {
     "path": "animal-polar.glb",
     "meta": {
      "name": "polar",
      "tris": 522,
      "bbox": {
       "min": [
        -0.625,
        0,
        -0.625
       ],
       "max": [
        0.625,
        1.501,
        0.87
       ]
      },
      "size": [
       1.25,
       1.501,
       1.495
      ],
      "forward": "+Z",
      "nodes": [
       "animal-polar",
       "root",
       "body",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-back-left",
       "leg-back-right",
       "leg-front-left",
       "leg-front-right"
      ],
      "wings": [],
      "tail": [],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 43804,
     "sha256": "f1b40325963c3bf917870bdb8289326babfc879357dd09a1e14c6fc2901daf3e"
    },
    {
     "path": "animal-tiger.glb",
     "meta": {
      "name": "tiger",
      "tris": 951,
      "bbox": {
       "min": [
        -0.675,
        0,
        -1.104
       ],
       "max": [
        0.675,
        1.71,
        0.796
       ]
      },
      "size": [
       1.35,
       1.71,
       1.9
      ],
      "forward": "+Z",
      "nodes": [
       "animal-tiger",
       "root",
       "leg-front-right",
       "body",
       "tail",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left"
      ],
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1
       },
       {
        "name": "walk",
        "duration": 0.5
       },
       {
        "name": "run",
        "duration": 0.25
       },
       {
        "name": "eat",
        "duration": 0.5
       },
       {
        "name": "dance",
        "duration": 0.5
       },
       {
        "name": "gesture-positive",
        "duration": 0.25
       },
       {
        "name": "gesture-negative",
        "duration": 0.25
       }
      ],
      "parts": [
       {
        "node": "leg-front-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         0.25
        ]
       },
       {
        "node": "body",
        "kind": "body",
        "parent": "root",
        "pivot": [
         0,
         0.181,
         0
        ]
       },
       {
        "node": "tail",
        "kind": "tail",
        "parent": "body",
        "pivot": [
         0,
         0.819,
         -0.548
        ]
       },
       {
        "node": "leg-back-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-back-right",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         -0.25,
         0.3,
         -0.25
        ]
       },
       {
        "node": "leg-front-left",
        "kind": "leg",
        "parent": "root",
        "pivot": [
         0.25,
         0.3,
         0.25
        ]
       }
      ],
      "legs": [
       "leg-front-right",
       "leg-back-left",
       "leg-back-right",
       "leg-front-left"
      ],
      "wings": [],
      "tail": [
       "tail"
      ],
      "textures": [
       "map:512x512"
      ]
     },
     "bytes": 89472,
     "sha256": "97858a9f5bb636519902ec01f6783fe3dea1054d2f1aae01690a229c2a53fcf7"
    }
   ],
   "base": "kenney-cube-pets/1/"
  },
  {
   "id": "kenney-platformer-kit",
   "version": 1,
   "kind": "model",
   "title": "Platformer Kit",
   "author": "Kenney (www.kenney.nl)",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/platformer-kit",
   "notes": "Kenney Platformer Kit 4.1 의 GLB 중 52개(관·문·깃발·나무·꽃·풀·바위·울타리·표지판·사다리·상자·통·폭탄·톱·가시 함정·스프링·레버·버튼·동전·별·하트·보석·보물상자·발판·잔디/눈 블록·캐릭터 oobi). 원본 단위 그대로(1 = 블록 한 칸, block-grass 는 1×1×1) — 게임이 meta.bbox/size 로 축척한다. 텍스처: 모든 모델이 같은 색표 colormap(512², 32px 너비 칸마다 세로 그라데이션 — 색 2015개)을 무손실 WebP 로 glb 마다 품었다(EXT_texture_webp, 약 3KB). UV 가 칸 안쪽을 가리켜 NearestFilter 로 바꿔도 색이 같다. 정적 소품: 노드 변환을 굽고 재질별로 합침, 원점=바닥 중심(bbox), meshopt. 원본 원점(타일 격자 기준)은 새 좌표에서 meta.origin0 에 있다 — 격자에 맞추려면 모델을 −origin0 만큼 옮긴다. 앞쪽=+Z(원본 그대로 — 캐릭터 얼굴·표지판 앞면이 +Z). 움직일 부품은 노드를 지켰다(meta.parts: node·pivot·motion, 메시는 <node>_mesh 자식): chest lid, lever handle, button-round button, trap-spikes* spikes, spring platform·coil(원본 이름 spring 이 둘이라 자식을 coil 로), door-rotate* door(원본 클립 그대로). 원본이 한 메시인 saw 는 blade 노드(톱날 중심 피벗, 로컬 Z 로 돌림), flag 는 pole·cloth 노드(천 피벗 = 깃대 축)로 나눴다. door-open·door-large-open 은 문짝 없는 문틀(아치)이다 — 문짝이 열리는 문이 필요하면 door-rotate·door-rotate-large. pipe 는 위가 뚫린 관(1×0.56×1). character-oobi 는 뼈대 캐릭터(클립 25개, 원점 발밑 그대로). 원작자 표기는 의무 아님(권장: Kenney).",
   "tags": [
    "platformer",
    "props",
    "nature",
    "low-poly",
    "cute",
    "kenney"
   ],
   "files": [
    {
     "path": "pipe.glb",
     "meta": {
      "name": "pipe",
      "group": "pipe",
      "tris": 216,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.564,
        0.5
       ]
      },
      "size": [
       1,
       0.564,
       1
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7628,
     "sha256": "997839fe40e91f58a753b07d4af938662659dda6d1910c1388bb210595e2c10f"
    },
    {
     "path": "door-large-open.glb",
     "meta": {
      "name": "door-large-open",
      "group": "door",
      "tris": 176,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.15
       ],
       "max": [
        0.5,
        1,
        0.15
       ]
      },
      "size": [
       1,
       1,
       0.3
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7536,
     "sha256": "4d2a54902d917eb0654ef7ab1cff61cfa2df37f0a29fefee8f8e58f497072207"
    },
    {
     "path": "door-open.glb",
     "meta": {
      "name": "door-open",
      "group": "door",
      "tris": 68,
      "bbox": {
       "min": [
        -0.3,
        0,
        -0.1
       ],
       "max": [
        0.3,
        1,
        0.1
       ]
      },
      "size": [
       0.6,
       1,
       0.2
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6296,
     "sha256": "c03dde9ed360f72334d8f7bb0c49bb225af85c831387263709ce7083a2d2a299"
    },
    {
     "path": "door-rotate.glb",
     "meta": {
      "name": "door-rotate",
      "group": "door",
      "tris": 401,
      "bbox": {
       "min": [
        -0.3,
        0,
        -0.1
       ],
       "max": [
        0.3,
        1,
        0.1
       ]
      },
      "size": [
       0.6,
       1,
       0.2
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": [
       {
        "name": "open",
        "duration": 1
       },
       {
        "name": "close",
        "duration": 1
       },
       {
        "name": "open-and-close",
        "duration": 2
       }
      ],
      "nodes": [
       "door-rotate",
       "door"
      ],
      "parts": [
       {
        "node": "door",
        "parent": "door-rotate",
        "pivot": [
         -0.199,
         0,
         0
        ],
        "motion": "경첩(피벗) 둘레 로컬 Y 회전 — 클립 open/close/open-and-close(최대 약 100°)"
       }
      ]
     },
     "bytes": 15132,
     "sha256": "df7d9f26e8dca90d053e09a08284d3efbf2274ac3ad9ea50aad4b57199b2203c"
    },
    {
     "path": "door-rotate-large.glb",
     "meta": {
      "name": "door-rotate-large",
      "group": "door",
      "tris": 380,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.15
       ],
       "max": [
        0.5,
        1,
        0.15
       ]
      },
      "size": [
       1,
       1,
       0.3
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": [
       {
        "name": "open",
        "duration": 1
       },
       {
        "name": "close",
        "duration": 1
       },
       {
        "name": "open-and-close",
        "duration": 2
       }
      ],
      "nodes": [
       "door-rotate-large",
       "door"
      ],
      "parts": [
       {
        "node": "door",
        "parent": "door-rotate-large",
        "pivot": [
         -0.3,
         0,
         0
        ],
        "motion": "경첩(피벗) 둘레 로컬 Y 회전 — 클립 open/close/open-and-close(최대 약 100°)"
       }
      ]
     },
     "bytes": 14996,
     "sha256": "92d4c6e9a4ddb7330b2f0c33712f33254b6a2bfe92dbfa4cfa3d358f93129cd8"
    },
    {
     "path": "flag.glb",
     "meta": {
      "name": "flag",
      "group": "goal",
      "tris": 110,
      "bbox": {
       "min": [
        -0.212,
        0,
        -0.056
       ],
       "max": [
        0.212,
        0.9,
        0.056
       ]
      },
      "size": [
       0.424,
       0.9,
       0.112
      ],
      "forward": "+Z",
      "origin0": [
       -0.156,
       0,
       0
      ],
      "anims": [],
      "nodes": [
       "flag",
       "pole",
       "cloth"
      ],
      "parts": [
       {
        "node": "pole",
        "parent": "flag",
        "pivot": [
         -0.156,
         0,
         0
        ],
        "motion": "깃대(움직이지 않음)"
       },
       {
        "node": "cloth",
        "parent": "flag",
        "pivot": [
         -0.156,
         0.565,
         0
        ],
        "motion": "깃대 축(피벗) 둘레 로컬 Y 회전·X 축척으로 펄럭임(코드)"
       }
      ]
     },
     "bytes": 8620,
     "sha256": "db782d6652c17e625d0d205eec825cf1e6bbd550b14e3f99d8e91891b2013c89"
    },
    {
     "path": "tree.glb",
     "meta": {
      "name": "tree",
      "group": "tree",
      "tris": 408,
      "bbox": {
       "min": [
        -0.544,
        0,
        -0.554
       ],
       "max": [
        0.544,
        1.931,
        0.554
       ]
      },
      "size": [
       1.088,
       1.931,
       1.108
      ],
      "forward": "+Z",
      "origin0": [
       -0.006,
       0,
       -0.003
      ],
      "anims": []
     },
     "bytes": 11440,
     "sha256": "72aafa2810b9b2ab84bff171f030a11a9f48821b791662dc209a41ee89add4ba"
    },
    {
     "path": "tree-pine.glb",
     "meta": {
      "name": "tree-pine",
      "group": "tree",
      "tris": 204,
      "bbox": {
       "min": [
        -0.474,
        0,
        -0.474
       ],
       "max": [
        0.474,
        1.997,
        0.474
       ]
      },
      "size": [
       0.948,
       1.997,
       0.948
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7908,
     "sha256": "a1319188b1b20c00a5af8f9ebf840c0296fbf453ae46d8be2521fcd943168224"
    },
    {
     "path": "tree-pine-small.glb",
     "meta": {
      "name": "tree-pine-small",
      "group": "tree",
      "tris": 204,
      "bbox": {
       "min": [
        -0.332,
        0,
        -0.332
       ],
       "max": [
        0.332,
        1.398,
        0.332
       ]
      },
      "size": [
       0.664,
       1.398,
       0.664
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7924,
     "sha256": "a9bf346e10407cb31b28dddedfaeaed4a03720bf7d48239e8c328ffb12be1f63"
    },
    {
     "path": "tree-snow.glb",
     "meta": {
      "name": "tree-snow",
      "group": "tree",
      "tris": 408,
      "bbox": {
       "min": [
        -0.544,
        0,
        -0.554
       ],
       "max": [
        0.544,
        1.931,
        0.554
       ]
      },
      "size": [
       1.088,
       1.931,
       1.108
      ],
      "forward": "+Z",
      "origin0": [
       -0.006,
       0,
       -0.003
      ],
      "anims": []
     },
     "bytes": 11456,
     "sha256": "f5c2a208546cb003821691699c8296a1da4a85262e7dbf445bf1fd867bb8a9c8"
    },
    {
     "path": "tree-pine-snow.glb",
     "meta": {
      "name": "tree-pine-snow",
      "group": "tree",
      "tris": 204,
      "bbox": {
       "min": [
        -0.474,
        0,
        -0.474
       ],
       "max": [
        0.474,
        1.997,
        0.474
       ]
      },
      "size": [
       0.948,
       1.997,
       0.948
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7920,
     "sha256": "548b50dbed5af57a1f2872dee3271b1f377a4ab8c939ec98fd41dd05aa56983c"
    },
    {
     "path": "tree-pine-snow-small.glb",
     "meta": {
      "name": "tree-pine-snow-small",
      "group": "tree",
      "tris": 204,
      "bbox": {
       "min": [
        -0.332,
        0,
        -0.332
       ],
       "max": [
        0.332,
        1.398,
        0.332
       ]
      },
      "size": [
       0.664,
       1.398,
       0.664
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7940,
     "sha256": "ea54adf05296dc8b2e62d9e7b8f942b327ac7475e0e16924ef457beadd8ddded"
    },
    {
     "path": "flowers.glb",
     "meta": {
      "name": "flowers",
      "group": "plant",
      "tris": 264,
      "bbox": {
       "min": [
        -0.388,
        0,
        -0.393
       ],
       "max": [
        0.388,
        0.137,
        0.393
       ]
      },
      "size": [
       0.776,
       0.137,
       0.786
      ],
      "forward": "+Z",
      "origin0": [
       -0.01,
       0,
       0.009
      ],
      "anims": []
     },
     "bytes": 9988,
     "sha256": "a4e2d97f41cba5053c07620840accb0207abcf81d4fce3c4a5f4ef48cd9c24f2"
    },
    {
     "path": "flowers-tall.glb",
     "meta": {
      "name": "flowers-tall",
      "group": "plant",
      "tris": 398,
      "bbox": {
       "min": [
        -0.273,
        0,
        -0.309
       ],
       "max": [
        0.273,
        0.462,
        0.309
       ]
      },
      "size": [
       0.546,
       0.462,
       0.618
      ],
      "forward": "+Z",
      "origin0": [
       0.001,
       0,
       -0.001
      ],
      "anims": []
     },
     "bytes": 12276,
     "sha256": "e3bf248204813763f481ff3c000ad86963e260b6db626072fe58607db72390f6"
    },
    {
     "path": "grass.glb",
     "meta": {
      "name": "grass",
      "group": "plant",
      "tris": 72,
      "bbox": {
       "min": [
        -0.259,
        0,
        -0.272
       ],
       "max": [
        0.259,
        0.314,
        0.272
       ]
      },
      "size": [
       0.518,
       0.314,
       0.544
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6668,
     "sha256": "eecc3aab494f9048085e852a49fb3956e29674dfa205fbd2d90b867db3051839"
    },
    {
     "path": "mushrooms.glb",
     "meta": {
      "name": "mushrooms",
      "group": "plant",
      "tris": 126,
      "bbox": {
       "min": [
        -0.261,
        0,
        -0.256
       ],
       "max": [
        0.261,
        0.289,
        0.256
       ]
      },
      "size": [
       0.522,
       0.289,
       0.512
      ],
      "forward": "+Z",
      "origin0": [
       0.001,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7308,
     "sha256": "9e64780ef2bde8a2266aee23c9ace378347f6212995026dc91346be4780a16a0"
    },
    {
     "path": "plant.glb",
     "meta": {
      "name": "plant",
      "group": "plant",
      "tris": 108,
      "bbox": {
       "min": [
        -0.256,
        0,
        -0.221
       ],
       "max": [
        0.256,
        0.172,
        0.221
       ]
      },
      "size": [
       0.512,
       0.172,
       0.442
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0.066
      ],
      "anims": []
     },
     "bytes": 7500,
     "sha256": "90e71bb5ffb3faf604cc59375d43ada5b73c743afeaa68c11f8d93fbbde744a2"
    },
    {
     "path": "rocks.glb",
     "meta": {
      "name": "rocks",
      "group": "rock",
      "tris": 100,
      "bbox": {
       "min": [
        -0.327,
        0,
        -0.331
       ],
       "max": [
        0.327,
        0.4,
        0.331
       ]
      },
      "size": [
       0.654,
       0.4,
       0.662
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7224,
     "sha256": "7db7151a4e9693bc70c9413c2258d4ff18da0569a6d9e44de20ddf415c4ee92b"
    },
    {
     "path": "stones.glb",
     "meta": {
      "name": "stones",
      "group": "rock",
      "tris": 120,
      "bbox": {
       "min": [
        -0.355,
        0,
        -0.395
       ],
       "max": [
        0.355,
        0.05,
        0.395
       ]
      },
      "size": [
       0.71,
       0.05,
       0.79
      ],
      "forward": "+Z",
      "origin0": [
       0.003,
       0,
       -0.005
      ],
      "anims": []
     },
     "bytes": 7456,
     "sha256": "5d37adda7b263ba110dfbbf3636556de34e1879fcf51fd26dcc2d743b2c726bd"
    },
    {
     "path": "hedge.glb",
     "meta": {
      "name": "hedge",
      "group": "hedge",
      "tris": 72,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.15
       ],
       "max": [
        0.5,
        0.4,
        0.15
       ]
      },
      "size": [
       1,
       0.4,
       0.3
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       -0.35
      ],
      "anims": []
     },
     "bytes": 6200,
     "sha256": "a12a030b40eb70325d4a554e20e4319982af64d1bf3a7360ec02869b32697fdc"
    },
    {
     "path": "hedge-corner.glb",
     "meta": {
      "name": "hedge-corner",
      "group": "hedge",
      "tris": 104,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.4,
        0.5
       ]
      },
      "size": [
       1,
       0.4,
       1
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6560,
     "sha256": "d0d570b4f670be930748667436afd354cf1111f43054e3217e460b0646a3eaaf"
    },
    {
     "path": "fence-straight.glb",
     "meta": {
      "name": "fence-straight",
      "group": "fence",
      "tris": 48,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.07
       ],
       "max": [
        0.5,
        0.4,
        0.07
       ]
      },
      "size": [
       1,
       0.4,
       0.14
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       -0.42
      ],
      "anims": []
     },
     "bytes": 6376,
     "sha256": "144241a948393a410c89c4717846c63ad8952c465eec194e3f82ae7217954ee8"
    },
    {
     "path": "fence-low-straight.glb",
     "meta": {
      "name": "fence-low-straight",
      "group": "fence",
      "tris": 72,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.1
       ],
       "max": [
        0.5,
        0.3,
        0.1
       ]
      },
      "size": [
       1,
       0.3,
       0.2
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       -0.4
      ],
      "anims": []
     },
     "bytes": 6404,
     "sha256": "de8ac40c6a701799de8b4e3f10e15cac84fea5aee76270d01a0569a90d27bead"
    },
    {
     "path": "fence-broken.glb",
     "meta": {
      "name": "fence-broken",
      "group": "fence",
      "tris": 216,
      "bbox": {
       "min": [
        -0.513,
        0,
        -0.07
       ],
       "max": [
        0.513,
        0.4,
        0.07
       ]
      },
      "size": [
       1.026,
       0.4,
       0.14
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       -0.42
      ],
      "anims": []
     },
     "bytes": 9056,
     "sha256": "0f3794d2d9864d28bc4a9a33d4b217a79d52edade2e96aa9644d02229c4f02e9"
    },
    {
     "path": "fence-rope.glb",
     "meta": {
      "name": "fence-rope",
      "group": "fence",
      "tris": 180,
      "bbox": {
       "min": [
        -0.475,
        0,
        -0.105
       ],
       "max": [
        0.475,
        0.3,
        0.105
       ]
      },
      "size": [
       0.95,
       0.3,
       0.21
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7600,
     "sha256": "eecabcde220dead6a1fa96198bc2b5276cc2c597a15a925c9f72cc06a52309f6"
    },
    {
     "path": "sign.glb",
     "meta": {
      "name": "sign",
      "group": "sign",
      "tris": 76,
      "bbox": {
       "min": [
        -0.242,
        0,
        -0.066
       ],
       "max": [
        0.242,
        0.6,
        0.066
       ]
      },
      "size": [
       0.484,
       0.6,
       0.132
      ],
      "forward": "+Z",
      "origin0": [
       0.003,
       0,
       -0.01
      ],
      "anims": []
     },
     "bytes": 6844,
     "sha256": "272920b43c5c0cdbfc186a27c660287e9e3d7c65ff1d8dbabfb7fe3ed5c60317"
    },
    {
     "path": "arrow.glb",
     "meta": {
      "name": "arrow",
      "group": "sign",
      "tris": 64,
      "bbox": {
       "min": [
        -0.228,
        0,
        -0.071
       ],
       "max": [
        0.228,
        0.6,
        0.071
       ]
      },
      "size": [
       0.456,
       0.6,
       0.142
      ],
      "forward": "+Z",
      "origin0": [
       -0.025,
       0,
       -0.015
      ],
      "anims": []
     },
     "bytes": 6560,
     "sha256": "8e9222132c3adbdb35bed2650a17958abded99e5ed42530f487115d4cabafb87"
    },
    {
     "path": "arrows.glb",
     "meta": {
      "name": "arrows",
      "group": "sign",
      "tris": 88,
      "bbox": {
       "min": [
        -0.251,
        0,
        -0.071
       ],
       "max": [
        0.251,
        0.9,
        0.071
       ]
      },
      "size": [
       0.502,
       0.9,
       0.142
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       -0.015
      ],
      "anims": []
     },
     "bytes": 7124,
     "sha256": "42f75fb3b49003edc8d327089e227ad383a194daa460d6a11f609900bef7f849"
    },
    {
     "path": "ladder.glb",
     "meta": {
      "name": "ladder",
      "group": "ladder",
      "tris": 56,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.05
       ],
       "max": [
        0.25,
        1,
        0.05
       ]
      },
      "size": [
       0.5,
       1,
       0.1
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6384,
     "sha256": "90478d83aeb64f6f2a93ecbaeeb622a2a4e6cf646d846ffb2b3d3ddcfb8e7c46"
    },
    {
     "path": "crate.glb",
     "meta": {
      "name": "crate",
      "group": "crate",
      "tris": 156,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        0.5,
        0.25
       ]
      },
      "size": [
       0.5,
       0.5,
       0.5
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7960,
     "sha256": "be5d2cfa1644aa520d4617514788902f663a0a5396c53b605ee3c789e4228640"
    },
    {
     "path": "crate-strong.glb",
     "meta": {
      "name": "crate-strong",
      "group": "crate",
      "tris": 428,
      "bbox": {
       "min": [
        -0.3,
        0,
        -0.3
       ],
       "max": [
        0.3,
        0.6,
        0.3
       ]
      },
      "size": [
       0.6,
       0.6,
       0.6
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 11904,
     "sha256": "852bde088b9c6d95be3ea39b584a3afb6783b879b6f4826e7c499c9120113be3"
    },
    {
     "path": "barrel.glb",
     "meta": {
      "name": "barrel",
      "group": "crate",
      "tris": 148,
      "bbox": {
       "min": [
        -0.259,
        0,
        -0.259
       ],
       "max": [
        0.259,
        0.476,
        0.259
       ]
      },
      "size": [
       0.518,
       0.476,
       0.518
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7560,
     "sha256": "c9cbd24ba6ca4a37092dff9bbf0f0b024f7d02de9640a6cef956ecdda9ebddf5"
    },
    {
     "path": "bomb.glb",
     "meta": {
      "name": "bomb",
      "group": "item",
      "tris": 148,
      "bbox": {
       "min": [
        -0.247,
        0,
        -0.247
       ],
       "max": [
        0.247,
        0.542,
        0.247
       ]
      },
      "size": [
       0.494,
       0.542,
       0.494
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0.004,
       0
      ],
      "anims": []
     },
     "bytes": 7060,
     "sha256": "31e8580a943075f1ca5134c434de78a4498c30b51c6594ef74bc337805af080e"
    },
    {
     "path": "saw.glb",
     "meta": {
      "name": "saw",
      "group": "hazard",
      "tris": 128,
      "bbox": {
       "min": [
        -0.397,
        0,
        -0.152
       ],
       "max": [
        0.397,
        0.794,
        0.152
       ]
      },
      "size": [
       0.794,
       0.794,
       0.304
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0.397,
       0
      ],
      "anims": [],
      "nodes": [
       "saw",
       "blade"
      ],
      "parts": [
       {
        "node": "blade",
        "parent": "saw",
        "pivot": [
         0,
         0.397,
         0
        ],
        "motion": "톱날 중심(피벗) 둘레 로컬 Z 회전(코드로 계속 돌림) — 톱날 면이 ±Z 를 본다"
       }
      ]
     },
     "bytes": 7500,
     "sha256": "8943eda11afd8e3f67fdc36b2900e9819611b7d2e23ba04a1fa034fde7d60c6e"
    },
    {
     "path": "trap-spikes.glb",
     "meta": {
      "name": "trap-spikes",
      "group": "hazard",
      "tris": 168,
      "bbox": {
       "min": [
        -0.32,
        0,
        -0.319
       ],
       "max": [
        0.32,
        0.255,
        0.319
       ]
      },
      "size": [
       0.64,
       0.255,
       0.638
      ],
      "forward": "+Z",
      "origin0": [
       0.001,
       0,
       0
      ],
      "anims": [
       {
        "name": "show",
        "duration": 0.2
       },
       {
        "name": "hide",
        "duration": 0.2
       },
       {
        "name": "show-hide",
        "duration": 1.2
       }
      ],
      "nodes": [
       "trap-spikes",
       "spikes"
      ],
      "parts": [
       {
        "node": "spikes",
        "parent": "trap-spikes",
        "pivot": [
         0.001,
         0,
         0
        ],
        "motion": "로컬 Y 이동(숨김 −0.15) — 클립 show/hide/show-hide"
       }
      ]
     },
     "bytes": 12420,
     "sha256": "197356684a56713ff5ffa2d3a97d48e132675d987f2ce72259ae963b9ab94311"
    },
    {
     "path": "trap-spikes-large.glb",
     "meta": {
      "name": "trap-spikes-large",
      "group": "hazard",
      "tris": 282,
      "bbox": {
       "min": [
        -0.382,
        0,
        -0.382
       ],
       "max": [
        0.382,
        0.255,
        0.382
       ]
      },
      "size": [
       0.764,
       0.255,
       0.764
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": [
       {
        "name": "show",
        "duration": 0.2
       },
       {
        "name": "hide",
        "duration": 0.2
       },
       {
        "name": "show-hide",
        "duration": 1.2
       }
      ],
      "nodes": [
       "trap-spikes-large",
       "spikes"
      ],
      "parts": [
       {
        "node": "spikes",
        "parent": "trap-spikes-large",
        "pivot": [
         0,
         0,
         0
        ],
        "motion": "로컬 Y 이동(숨김 −0.15) — 클립 show/hide/show-hide"
       }
      ]
     },
     "bytes": 13432,
     "sha256": "4904766cf96aba27ef2701cb34dd0ccf0d2a86b5d347a28351fd5cc62bbce07a"
    },
    {
     "path": "spike-block.glb",
     "meta": {
      "name": "spike-block",
      "group": "hazard",
      "tris": 116,
      "bbox": {
       "min": [
        -0.45,
        0,
        -0.45
       ],
       "max": [
        0.45,
        0.9,
        0.45
       ]
      },
      "size": [
       0.9,
       0.9,
       0.9
      ],
      "forward": "+Z",
      "origin0": [
       0,
       -0.05,
       0
      ],
      "anims": []
     },
     "bytes": 7740,
     "sha256": "ced5409445500c9a507f9bd8a18ec3e20e75d7416d0b751be4156b98df5f3f1f"
    },
    {
     "path": "spring.glb",
     "meta": {
      "name": "spring",
      "group": "mechanism",
      "tris": 356,
      "bbox": {
       "min": [
        -0.375,
        0,
        -0.375
       ],
       "max": [
        0.375,
        0.468,
        0.375
       ]
      },
      "size": [
       0.75,
       0.468,
       0.75
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": [],
      "nodes": [
       "spring",
       "platform",
       "coil"
      ],
      "parts": [
       {
        "node": "platform",
        "parent": "spring",
        "pivot": [
         0,
         0.295,
         0
        ],
        "motion": "로컬 Y 이동(누르기·튕기기, 코드)"
       },
       {
        "node": "coil",
        "parent": "spring",
        "pivot": [
         0.001,
         0.03,
         0.001
        ],
        "motion": "로컬 Y 축척(눌림, 코드)"
       }
      ]
     },
     "bytes": 11744,
     "sha256": "3a2afa18765b4dc15f5e94fec7be528393ccce9dd32b2973751dd50dac44353e"
    },
    {
     "path": "lever.glb",
     "meta": {
      "name": "lever",
      "group": "mechanism",
      "tris": 134,
      "bbox": {
       "min": [
        -0.3,
        0,
        -0.225
       ],
       "max": [
        0.3,
        0.642,
        0.225
       ]
      },
      "size": [
       0.6,
       0.642,
       0.45
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": [
       {
        "name": "toggle-on",
        "duration": 0.5
       },
       {
        "name": "toggle-off",
        "duration": 0.5
       },
       {
        "name": "toggle",
        "duration": 1
       }
      ],
      "nodes": [
       "lever",
       "handle"
      ],
      "parts": [
       {
        "node": "handle",
        "parent": "lever",
        "pivot": [
         0,
         0.1,
         0
        ],
        "motion": "로컬 Z 회전 ±50° — 클립 toggle-on/toggle-off/toggle"
       }
      ]
     },
     "bytes": 12248,
     "sha256": "8a5ac49364892d3d8309ab91d553b45e246863e3ae5f3b059b029a59cce22125"
    },
    {
     "path": "button-round.glb",
     "meta": {
      "name": "button-round",
      "group": "mechanism",
      "tris": 92,
      "bbox": {
       "min": [
        -0.29,
        0,
        -0.251
       ],
       "max": [
        0.29,
        0.185,
        0.251
       ]
      },
      "size": [
       0.58,
       0.185,
       0.502
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": [
       {
        "name": "toggle-on",
        "duration": 0.2
       },
       {
        "name": "toggle-off",
        "duration": 0.2
       },
       {
        "name": "toggle",
        "duration": 0.5
       }
      ],
      "nodes": [
       "button-round",
       "button"
      ],
      "parts": [
       {
        "node": "button",
        "parent": "button-round",
        "pivot": [
         0,
         0,
         0
        ],
        "motion": "로컬 Y 이동(눌림 −0.05) — 클립 toggle-on/toggle-off/toggle"
       }
      ]
     },
     "bytes": 11028,
     "sha256": "1413dc4ddab4eb67d8ff5c02ff9d67413b648ae5874c9fc62e0cd524971cf387"
    },
    {
     "path": "coin-gold.glb",
     "meta": {
      "name": "coin-gold",
      "group": "pickup",
      "tris": 124,
      "bbox": {
       "min": [
        -0.2,
        0,
        -0.088
       ],
       "max": [
        0.2,
        0.4,
        0.088
       ]
      },
      "size": [
       0.4,
       0.4,
       0.176
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7308,
     "sha256": "b7ded1bbf08d0f7e0b4602dd928026610581369256d94b120978afc5072e6714"
    },
    {
     "path": "star.glb",
     "meta": {
      "name": "star",
      "group": "pickup",
      "tris": 30,
      "bbox": {
       "min": [
        -0.182,
        0,
        -0.119
       ],
       "max": [
        0.182,
        0.363,
        0.119
       ]
      },
      "size": [
       0.364,
       0.363,
       0.238
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6020,
     "sha256": "ad6f99113e54ba25625c3f1e7dd58dd8752e059ac7b30a9a353465435ceaec18"
    },
    {
     "path": "heart.glb",
     "meta": {
      "name": "heart",
      "group": "pickup",
      "tris": 44,
      "bbox": {
       "min": [
        -0.206,
        0,
        -0.06
       ],
       "max": [
        0.206,
        0.384,
        0.06
       ]
      },
      "size": [
       0.412,
       0.384,
       0.12
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6072,
     "sha256": "005da680898c55c11812693219edbabfd804bb3eaf41fac23ab3d2d6f0cccaf5"
    },
    {
     "path": "jewel.glb",
     "meta": {
      "name": "jewel",
      "group": "pickup",
      "tris": 12,
      "bbox": {
       "min": [
        -0.166,
        0,
        -0.144
       ],
       "max": [
        0.166,
        0.37,
        0.144
       ]
      },
      "size": [
       0.332,
       0.37,
       0.288
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 5972,
     "sha256": "41c0e891af34a27f72d274e53772d748f417f4a7f52446c631dfef11a608c103"
    },
    {
     "path": "chest.glb",
     "meta": {
      "name": "chest",
      "group": "pickup",
      "tris": 232,
      "bbox": {
       "min": [
        -0.25,
        0,
        -0.25
       ],
       "max": [
        0.25,
        0.45,
        0.25
       ]
      },
      "size": [
       0.5,
       0.45,
       0.5
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": [
       {
        "name": "open",
        "duration": 0.3
       },
       {
        "name": "close",
        "duration": 1
       },
       {
        "name": "open-close",
        "duration": 2
       }
      ],
      "nodes": [
       "chest",
       "lid"
      ],
      "parts": [
       {
        "node": "lid",
        "parent": "chest",
        "pivot": [
         0,
         0.2,
         -0.2
        ],
        "motion": "뒤쪽 경첩(피벗) 둘레 로컬 X 회전(약 45°) — 클립 open/close/open-close"
       }
      ]
     },
     "bytes": 14184,
     "sha256": "1b4211a4512fde563a3f57ca724e3f037bcc7244916197245e7c1e919e50ea89"
    },
    {
     "path": "poles.glb",
     "meta": {
      "name": "poles",
      "group": "platform",
      "tris": 268,
      "bbox": {
       "min": [
        -0.55,
        0,
        -0.175
       ],
       "max": [
        0.55,
        1,
        0.175
       ]
      },
      "size": [
       1.1,
       1,
       0.35
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 8508,
     "sha256": "6d367d1ace53723ccfe178368fbbe044bb9aa0c9fdfa45afe4beee994d4796c8"
    },
    {
     "path": "platform.glb",
     "meta": {
      "name": "platform",
      "group": "platform",
      "tris": 84,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        0.195,
        0.5
       ]
      },
      "size": [
       1,
       0.195,
       1
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 7020,
     "sha256": "ab98121aebce7ab91fede27e1dc38997db4504b9db26e52daa791ccd346ed3e4"
    },
    {
     "path": "block-grass.glb",
     "meta": {
      "name": "block-grass",
      "group": "block",
      "tris": 92,
      "bbox": {
       "min": [
        -0.541,
        0,
        -0.541
       ],
       "max": [
        0.541,
        1,
        0.541
       ]
      },
      "size": [
       1.082,
       1,
       1.082
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6636,
     "sha256": "f578487fc4b803bf53cb02e930c0840f240089b6d765632c50509867022d1f25"
    },
    {
     "path": "block-grass-large.glb",
     "meta": {
      "name": "block-grass-large",
      "group": "block",
      "tris": 92,
      "bbox": {
       "min": [
        -1.041,
        0,
        -1.041
       ],
       "max": [
        1.041,
        1,
        1.041
       ]
      },
      "size": [
       2.082,
       1,
       2.082
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6656,
     "sha256": "75263139781f103c7deb35174cf29eb6588608eb16c0585dc592111a3fdcee78"
    },
    {
     "path": "block-snow.glb",
     "meta": {
      "name": "block-snow",
      "group": "block",
      "tris": 92,
      "bbox": {
       "min": [
        -0.541,
        0,
        -0.541
       ],
       "max": [
        0.541,
        1,
        0.541
       ]
      },
      "size": [
       1.082,
       1,
       1.082
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6632,
     "sha256": "0eb093dc5564c5689174af9bd52bdee670e6c0ceedf6b02912449cf2a29ff386"
    },
    {
     "path": "block-snow-large.glb",
     "meta": {
      "name": "block-snow-large",
      "group": "block",
      "tris": 92,
      "bbox": {
       "min": [
        -1.041,
        0,
        -1.041
       ],
       "max": [
        1.041,
        1,
        1.041
       ]
      },
      "size": [
       2.082,
       1,
       2.082
      ],
      "forward": "+Z",
      "origin0": [
       0,
       0,
       0
      ],
      "anims": []
     },
     "bytes": 6656,
     "sha256": "0c83eb4af7b6c8c07f9f85dc270506c8ebad6160ba9b0a1202a542169736d812"
    },
    {
     "path": "character-oobi.glb",
     "meta": {
      "name": "character-oobi",
      "group": "character",
      "tris": 1096,
      "bbox": {
       "min": [
        -0.427,
        0,
        -0.287
       ],
       "max": [
        0.441,
        0.907,
        0.316
       ]
      },
      "size": [
       0.868,
       0.907,
       0.603
      ],
      "forward": "+Z",
      "anims": [
       {
        "name": "static",
        "duration": 0.1
       },
       {
        "name": "idle",
        "duration": 1.333
       },
       {
        "name": "walk",
        "duration": 0.667
       },
       {
        "name": "sprint",
        "duration": 0.5
       },
       {
        "name": "jump",
        "duration": 0.5
       },
       {
        "name": "fall",
        "duration": 0.333
       },
       {
        "name": "crouch",
        "duration": 0.167
       },
       {
        "name": "sit",
        "duration": 0.167
       },
       {
        "name": "drive",
        "duration": 0.167
       },
       {
        "name": "die",
        "duration": 0.333
       },
       {
        "name": "pick-up",
        "duration": 0.5
       },
       {
        "name": "emote-yes",
        "duration": 0.667
       },
       {
        "name": "emote-no",
        "duration": 0.667
       },
       {
        "name": "holding-right",
        "duration": 0.167
       },
       {
        "name": "holding-left",
        "duration": 0.167
       },
       {
        "name": "holding-both",
        "duration": 0.167
       },
       {
        "name": "holding-right-shoot",
        "duration": 0.2
       },
       {
        "name": "holding-left-shoot",
        "duration": 0.2
       },
       {
        "name": "holding-both-shoot",
        "duration": 0.2
       },
       {
        "name": "attack-melee-right",
        "duration": 0.417
       },
       {
        "name": "attack-melee-left",
        "duration": 0.417
       },
       {
        "name": "attack-kick-right",
        "duration": 0.533
       },
       {
        "name": "attack-kick-left",
        "duration": 0.533
       },
       {
        "name": "interact-right",
        "duration": 0.667
       },
       {
        "name": "interact-left",
        "duration": 0.667
       }
      ],
      "bones": [
       "root",
       "leg-left",
       "leg-right",
       "torso",
       "arm-left",
       "arm-right"
      ],
      "nodes": [
       "character-oobi",
       "root",
       "leg-left",
       "leg-right",
       "torso",
       "arm-left",
       "arm-right",
       "body-mesh"
      ]
     },
     "bytes": 68040,
     "sha256": "c22699e6b978e246a940b47e359aa708a9ccbc47e2050f687d66baf894fbdc84"
    }
   ],
   "base": "kenney-platformer-kit/1/"
  },
  {
   "id": "kenney-space-kit",
   "version": 1,
   "kind": "model",
   "title": "Space Kit",
   "author": "Kenney (www.kenney.nl)",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/space-kit",
   "notes": "Kenney Space Kit 2.0 의 GLTF(glb) 중 33개(바위·크레이터·운석·포탑·위성 접시·격납고·구조물·발전기·탈것·우주인). 메크는 이 키트에 없다. 텍스처 없음 — 이름 붙은 단색 재질(dark·metal·metalDark·metalRed 등, meta.materials)이라 게임이 재질 이름으로 색을 바꿀 수 있다. 정적 소품: 노드 변환을 굽고 재질별로 합침, 원점=바닥 중심, 원본 단위 유지(meta.bbox), meshopt. 앞쪽=+Z(원본 −Z 를 Y 축 180° 돌림 — 우주선 기수·포신·우주인 얼굴이 +Z). 움직일 부품(포탑 turret·barrel, 격납고 gate_1/2, 우주인 팔다리)은 노드를 지켰다 — meta.parts 의 노드를 돌리면 된다(피벗 원본 그대로, 축척 1). 원작자 표기는 의무 아님(권장: Kenney).",
   "tags": [
    "scifi",
    "space",
    "mars",
    "low-poly",
    "static",
    "kenney"
   ],
   "files": [
    {
     "path": "rock.glb",
     "meta": {
      "name": "rock",
      "group": "rock",
      "tris": 172,
      "bbox": {
       "min": [
        -0.401,
        0,
        -0.425
       ],
       "max": [
        0.401,
        0.3,
        0.425
       ]
      },
      "size": [
       0.802,
       0.3,
       0.85
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockTrack",
       "rock"
      ]
     },
     "bytes": 5352,
     "sha256": "cde6209a23ba4d5993ccf6c86f45818bead0ad10d65c29e9802c2713bb9e8124"
    },
    {
     "path": "rock-large-a.glb",
     "meta": {
      "name": "rock_largeA",
      "group": "rock",
      "tris": 176,
      "bbox": {
       "min": [
        -0.46,
        0,
        -0.417
       ],
       "max": [
        0.46,
        0.5,
        0.417
       ]
      },
      "size": [
       0.92,
       0.5,
       0.834
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockTrack",
       "rock"
      ]
     },
     "bytes": 5400,
     "sha256": "a999407f55f878025c71f523df83a02ff5544548f255b9b5aa84a49b818829a3"
    },
    {
     "path": "rock-large-b.glb",
     "meta": {
      "name": "rock_largeB",
      "group": "rock",
      "tris": 172,
      "bbox": {
       "min": [
        -0.464,
        0,
        -0.47
       ],
       "max": [
        0.464,
        0.5,
        0.47
       ]
      },
      "size": [
       0.928,
       0.5,
       0.94
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockTrack",
       "rock"
      ]
     },
     "bytes": 5392,
     "sha256": "7ce3d4844a87bd33e08d8be5f1feabb024d5b6d05460719e3c75729d92929d2a"
    },
    {
     "path": "rocks-small-a.glb",
     "meta": {
      "name": "rocks_smallA",
      "group": "rock",
      "tris": 60,
      "bbox": {
       "min": [
        -0.469,
        0,
        -0.435
       ],
       "max": [
        0.469,
        0.105,
        0.435
       ]
      },
      "size": [
       0.938,
       0.105,
       0.87
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rock"
      ]
     },
     "bytes": 2932,
     "sha256": "88cab47ea0590c053254998b7ecfd233847338c549c9768de34b0b000daac4b2"
    },
    {
     "path": "rocks-small-b.glb",
     "meta": {
      "name": "rocks_smallB",
      "group": "rock",
      "tris": 48,
      "bbox": {
       "min": [
        -0.364,
        0,
        -0.349
       ],
       "max": [
        0.364,
        0.186,
        0.349
       ]
      },
      "size": [
       0.728,
       0.186,
       0.698
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rock"
      ]
     },
     "bytes": 2700,
     "sha256": "57f60d47c843b4b625756b13fec2a0927f1da58a3ee608f0f4dc3fd5fc229066"
    },
    {
     "path": "rock-crystals.glb",
     "meta": {
      "name": "rock_crystals",
      "group": "rock",
      "tris": 364,
      "bbox": {
       "min": [
        -0.425,
        0,
        -0.401
       ],
       "max": [
        0.425,
        0.338,
        0.401
       ]
      },
      "size": [
       0.85,
       0.338,
       0.802
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockTrack",
       "rock",
       "crystal"
      ]
     },
     "bytes": 8952,
     "sha256": "46d06cddae5b3b5dcf19c900b3ed35c670de8736bc2280a4d9f10d1839019318"
    },
    {
     "path": "rock-crystals-large-a.glb",
     "meta": {
      "name": "rock_crystalsLargeA",
      "group": "rock",
      "tris": 384,
      "bbox": {
       "min": [
        -0.417,
        0,
        -0.46
       ],
       "max": [
        0.417,
        0.541,
        0.46
       ]
      },
      "size": [
       0.834,
       0.541,
       0.92
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockTrack",
       "rock",
       "crystal"
      ]
     },
     "bytes": 9316,
     "sha256": "1c31280e92fc337865cc9f9ad8c933d8d83df787ebe43dd285127fe7e48ab52c"
    },
    {
     "path": "meteor-detailed.glb",
     "meta": {
      "name": "meteor_detailed",
      "group": "rock",
      "tris": 196,
      "bbox": {
       "min": [
        -0.433,
        0,
        -0.413
       ],
       "max": [
        0.433,
        0.735,
        0.413
       ]
      },
      "size": [
       0.866,
       0.735,
       0.826
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockTrack"
      ]
     },
     "bytes": 4988,
     "sha256": "e6a680086767ac32d3ffe0a82464b2e78ef52ec319333eda65e80b63d250452c"
    },
    {
     "path": "meteor-half.glb",
     "meta": {
      "name": "meteor_half",
      "group": "rock",
      "tris": 44,
      "bbox": {
       "min": [
        -0.433,
        0,
        -0.375
       ],
       "max": [
        0.433,
        0.368,
        0.375
       ]
      },
      "size": [
       0.866,
       0.368,
       0.75
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockTrack"
      ]
     },
     "bytes": 2656,
     "sha256": "44b49fa4402881584942a52aea327d172c770055092a43a244e970d6d9109996"
    },
    {
     "path": "crater.glb",
     "meta": {
      "name": "crater",
      "group": "crater",
      "tris": 60,
      "bbox": {
       "min": [
        -0.358,
        0,
        -0.413
       ],
       "max": [
        0.358,
        0.118,
        0.413
       ]
      },
      "size": [
       0.716,
       0.118,
       0.826
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockDark",
       "rock"
      ]
     },
     "bytes": 3804,
     "sha256": "f2fe110b09f6cd7cc626f22f9f0b68081192bc5a86345997dc02f779047fb176"
    },
    {
     "path": "crater-large.glb",
     "meta": {
      "name": "craterLarge",
      "group": "crater",
      "tris": 60,
      "bbox": {
       "min": [
        -0.443,
        0,
        -0.443
       ],
       "max": [
        0.443,
        0.12,
        0.443
       ]
      },
      "size": [
       0.886,
       0.12,
       0.886
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "rockDark",
       "rock"
      ]
     },
     "bytes": 3716,
     "sha256": "3f2d8a9a198d1ec2a5fc4d65fab633e80f3f6d4237291e5c6f63c0af0fd8abd7"
    },
    {
     "path": "turret-single.glb",
     "meta": {
      "name": "turret_single",
      "group": "turret",
      "tris": 576,
      "bbox": {
       "min": [
        -0.3,
        0,
        -0.361
       ],
       "max": [
        0.3,
        0.9,
        0.361
       ]
      },
      "size": [
       0.6,
       0.9,
       0.722
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metal",
       "dark",
       "metalRed",
       "metalDark"
      ],
      "parts": [
       {
        "node": "turret",
        "pivot": [
         0,
         0.35,
         0
        ]
       },
       {
        "node": "barrel_1",
        "pivot": [
         -0.04,
         0.547,
         0.161
        ]
       },
       {
        "node": "barrel_2",
        "pivot": [
         0.14,
         0.547,
         0.161
        ]
       }
      ]
     },
     "bytes": 13908,
     "sha256": "713329170d18f68db19f2dafb3676fb9303aa46751c7510a8622b817e8750de4"
    },
    {
     "path": "turret-double.glb",
     "meta": {
      "name": "turret_double",
      "group": "turret",
      "tris": 876,
      "bbox": {
       "min": [
        -0.45,
        0,
        -0.3
       ],
       "max": [
        0.45,
        0.7,
        0.3
       ]
      },
      "size": [
       0.9,
       0.7,
       0.6
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalRed",
       "metal",
       "dark",
       "metalDark"
      ],
      "parts": [
       {
        "node": "turret",
        "pivot": [
         0,
         0.3,
         0.025
        ]
       }
      ]
     },
     "bytes": 14184,
     "sha256": "f0270920f87992165a0098d6a70a0a24171310369065210840c0d181f266d76c"
    },
    {
     "path": "satellite-dish.glb",
     "meta": {
      "name": "satelliteDish",
      "group": "antenna",
      "tris": 274,
      "bbox": {
       "min": [
        -0.344,
        0,
        -0.283
       ],
       "max": [
        0.344,
        0.616,
        0.283
       ]
      },
      "size": [
       0.688,
       0.616,
       0.566
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalDark",
       "dark",
       "_defaultMat",
       "metal",
       "metalRed"
      ]
     },
     "bytes": 9584,
     "sha256": "e412279ced214e45436601db476bf057b1b7e63733a0b1b9adf8a4e8748838bc"
    },
    {
     "path": "satellite-dish-detailed.glb",
     "meta": {
      "name": "satelliteDish_detailed",
      "group": "antenna",
      "tris": 390,
      "bbox": {
       "min": [
        -0.35,
        0,
        -0.35
       ],
       "max": [
        0.35,
        0.616,
        0.35
       ]
      },
      "size": [
       0.7,
       0.616,
       0.7
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metal",
       "metalDark",
       "_defaultMat",
       "metalRed",
       "dark"
      ]
     },
     "bytes": 10756,
     "sha256": "b21ddd49f9dd50e26fd865cd51f98166c1e9dfb308802837e5e8d589982d52c6"
    },
    {
     "path": "satellite-dish-large.glb",
     "meta": {
      "name": "satelliteDish_large",
      "group": "antenna",
      "tris": 186,
      "bbox": {
       "min": [
        -0.424,
        0,
        -0.368
       ],
       "max": [
        0.424,
        0.814,
        0.368
       ]
      },
      "size": [
       0.848,
       0.814,
       0.736
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalDark",
       "metal",
       "dark"
      ]
     },
     "bytes": 6848,
     "sha256": "a8e8fc3ff1644e376d4626690fb6155b42e848f8f8d545710e9a1e94916b25a7"
    },
    {
     "path": "machine-wireless.glb",
     "meta": {
      "name": "machine_wireless",
      "group": "antenna",
      "tris": 174,
      "bbox": {
       "min": [
        -0.375,
        0,
        -0.25
       ],
       "max": [
        0.375,
        0.6,
        0.25
       ]
      },
      "size": [
       0.75,
       0.6,
       0.5
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metal",
       "metalDark",
       "metalRed",
       "dark"
      ]
     },
     "bytes": 7032,
     "sha256": "2545ded604bc0643ff6f9a43c5d255a5c95e373f0f40ebb6c1edb72517ae7401"
    },
    {
     "path": "hangar-large-a.glb",
     "meta": {
      "name": "hangar_largeA",
      "group": "hangar",
      "tris": 412,
      "bbox": {
       "min": [
        -1,
        0,
        -1.5
       ],
       "max": [
        1,
        1,
        1.5
       ]
      },
      "size": [
       2,
       1,
       3
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalDark",
       "metal",
       "dark",
       "metalRed"
      ],
      "parts": [
       {
        "node": "gate_1",
        "pivot": [
         0,
         0,
         1.35
        ]
       },
       {
        "node": "gate_2",
        "pivot": [
         0,
         0,
         -1.35
        ]
       }
      ]
     },
     "bytes": 10480,
     "sha256": "b91f530c2d58cbdff4f0e719eec9e3e439196a6783909fc3bb244187255c52d6"
    },
    {
     "path": "hangar-small-a.glb",
     "meta": {
      "name": "hangar_smallA",
      "group": "hangar",
      "tris": 280,
      "bbox": {
       "min": [
        -1,
        0,
        -1
       ],
       "max": [
        1,
        1,
        1
       ]
      },
      "size": [
       2,
       1,
       2
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalDark",
       "metal",
       "dark",
       "metalRed"
      ],
      "parts": [
       {
        "node": "gate_1",
        "pivot": [
         0,
         0,
         0.85
        ]
       },
       {
        "node": "gate_2",
        "pivot": [
         0,
         0,
         -0.85
        ]
       }
      ]
     },
     "bytes": 9204,
     "sha256": "c6b68734fe839aa8d8564c364e83e4dec00d2007751baec584990ad6d58a1cc6"
    },
    {
     "path": "hangar-round-a.glb",
     "meta": {
      "name": "hangar_roundA",
      "group": "hangar",
      "tris": 166,
      "bbox": {
       "min": [
        -1.636,
        0,
        -1.417
       ],
       "max": [
        1.636,
        1.5,
        1.417
       ]
      },
      "size": [
       3.272,
       1.5,
       2.834
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalRed",
       "metal",
       "metalDark",
       "dark"
      ]
     },
     "bytes": 7144,
     "sha256": "8a6fa64b842e1709077baa676571a4cd4a65ae351fd50d8e89f6ba6ec1fd213d"
    },
    {
     "path": "hangar-round-glass.glb",
     "meta": {
      "name": "hangar_roundGlass",
      "group": "hangar",
      "tris": 113,
      "bbox": {
       "min": [
        -1.636,
        0,
        -1.417
       ],
       "max": [
        1.636,
        1.4,
        1.417
       ]
      },
      "size": [
       3.272,
       1.4,
       2.834
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalRed",
       "metalDark",
       "_defaultMat",
       "dark"
      ]
     },
     "bytes": 6384,
     "sha256": "39204c39f8d5a3f2f3ac3775aa8f621c6343b33ab096948edca0c20162bfa7a6"
    },
    {
     "path": "structure.glb",
     "meta": {
      "name": "structure",
      "group": "structure",
      "tris": 168,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        1,
        0.5
       ]
      },
      "size": [
       1,
       1,
       1
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalRed",
       "metal"
      ]
     },
     "bytes": 4916,
     "sha256": "61f2161b2943b035d9799a6031ba964c1794f7aaadd1459c65e2db450ef9afa3"
    },
    {
     "path": "structure-closed.glb",
     "meta": {
      "name": "structure_closed",
      "group": "structure",
      "tris": 264,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        1,
        0.5
       ]
      },
      "size": [
       1,
       1,
       1
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalRed",
       "metal",
       "metalDark"
      ]
     },
     "bytes": 6652,
     "sha256": "ca572be31ef98afd2c0978a2a3ea92a5b785357233c6a17114d67c93b837ede6"
    },
    {
     "path": "structure-diagonal.glb",
     "meta": {
      "name": "structure_diagonal",
      "group": "structure",
      "tris": 344,
      "bbox": {
       "min": [
        -0.5,
        0,
        -0.5
       ],
       "max": [
        0.5,
        1,
        0.5
       ]
      },
      "size": [
       1,
       1,
       1
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalRed",
       "metal",
       "metalDark"
      ]
     },
     "bytes": 7760,
     "sha256": "f58173bed5a34d13ccdfa7d83fbac2a9725771580a6a8263f187beed8185a50c"
    },
    {
     "path": "machine-generator.glb",
     "meta": {
      "name": "machine_generator",
      "group": "machine",
      "tris": 406,
      "bbox": {
       "min": [
        -0.35,
        0,
        -0.263
       ],
       "max": [
        0.35,
        0.4,
        0.263
       ]
      },
      "size": [
       0.7,
       0.4,
       0.526
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalDark",
       "metalRed",
       "metal",
       "_defaultMat",
       "dark"
      ]
     },
     "bytes": 9896,
     "sha256": "95a70290882b524bcc6f5b087ac028d9d4fffb839b0609f11fafd7a2ae522b4b"
    },
    {
     "path": "machine-barrel.glb",
     "meta": {
      "name": "machine_barrel",
      "group": "machine",
      "tris": 338,
      "bbox": {
       "min": [
        -0.323,
        0,
        -0.258
       ],
       "max": [
        0.323,
        0.6,
        0.258
       ]
      },
      "size": [
       0.646,
       0.6,
       0.516
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalRed",
       "metalDark",
       "dark",
       "metal"
      ]
     },
     "bytes": 8344,
     "sha256": "0b93826164bdb62ac37b00037d1b5ce55affc12c2bf510d01a55706becb51ffb"
    },
    {
     "path": "machine-barrel-large.glb",
     "meta": {
      "name": "machine_barrelLarge",
      "group": "machine",
      "tris": 192,
      "bbox": {
       "min": [
        -0.377,
        0,
        -0.377
       ],
       "max": [
        0.377,
        0.6,
        0.377
       ]
      },
      "size": [
       0.754,
       0.6,
       0.754
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalDark",
       "metalRed",
       "metal",
       "dark"
      ]
     },
     "bytes": 7708,
     "sha256": "934d831e8c03e646b5f529d4b2873ada95c74c961350be10b5c5892f5ffb0990"
    },
    {
     "path": "barrels.glb",
     "meta": {
      "name": "barrels",
      "group": "machine",
      "tris": 268,
      "bbox": {
       "min": [
        -0.275,
        0,
        -0.248
       ],
       "max": [
        0.275,
        0.35,
        0.248
       ]
      },
      "size": [
       0.55,
       0.35,
       0.496
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalDark",
       "metal",
       "metalRed"
      ]
     },
     "bytes": 7972,
     "sha256": "0fa8ec8870c8ef094b063b60ac2bed18f80409f52f5502729bcb59029370b613"
    },
    {
     "path": "rover.glb",
     "meta": {
      "name": "rover",
      "group": "vehicle",
      "tris": 172,
      "bbox": {
       "min": [
        -0.15,
        0,
        -0.175
       ],
       "max": [
        0.15,
        0.385,
        0.175
       ]
      },
      "size": [
       0.3,
       0.385,
       0.35
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "dark",
       "metal",
       "metalRed",
       "metalDark"
      ]
     },
     "bytes": 7392,
     "sha256": "49a232d9ee1f48a026e2f3e8b95c7fbf793bd42c95219b4b9bb23a1d25472384"
    },
    {
     "path": "craft-miner.glb",
     "meta": {
      "name": "craft_miner",
      "group": "vehicle",
      "tris": 384,
      "bbox": {
       "min": [
        -0.9,
        0,
        -1.3
       ],
       "max": [
        0.9,
        0.7,
        1.3
       ]
      },
      "size": [
       1.8,
       0.7,
       2.6
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "dark",
       "metalDark",
       "metal",
       "metalRed"
      ]
     },
     "bytes": 10040,
     "sha256": "1821cecf150eb827dc4f44fbb7406d7259368fb817a1287c8b1871d392b777aa"
    },
    {
     "path": "craft-cargo-a.glb",
     "meta": {
      "name": "craft_cargoA",
      "group": "vehicle",
      "tris": 264,
      "bbox": {
       "min": [
        -0.8,
        0,
        -1.225
       ],
       "max": [
        0.8,
        0.8,
        1.225
       ]
      },
      "size": [
       1.6,
       0.8,
       2.45
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metalDark",
       "dark",
       "metalRed",
       "metal"
      ]
     },
     "bytes": 8308,
     "sha256": "17801ba908baf53c8a133e56019eb70d3513f6b3ec904fc971084d0f7a149614"
    },
    {
     "path": "craft-speeder-a.glb",
     "meta": {
      "name": "craft_speederA",
      "group": "vehicle",
      "tris": 280,
      "bbox": {
       "min": [
        -1,
        0,
        -1.05
       ],
       "max": [
        1,
        0.8,
        1.05
       ]
      },
      "size": [
       2,
       0.8,
       2.1
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "metal",
       "metalRed",
       "dark",
       "metalDark"
      ]
     },
     "bytes": 8728,
     "sha256": "6b39280ed4801f51c3f4c9e717c56b2d1ebc092e34b6a4ced702f9cf374211d1"
    },
    {
     "path": "astronaut-a.glb",
     "meta": {
      "name": "astronautA",
      "group": "character",
      "tris": 296,
      "bbox": {
       "min": [
        -0.242,
        0,
        -0.165
       ],
       "max": [
        0.242,
        0.793,
        0.165
       ]
      },
      "size": [
       0.484,
       0.793,
       0.33
      ],
      "forward": "+Z",
      "anims": [],
      "materials": [
       "dark",
       "metal",
       "metalRed",
       "metalDark",
       "skin",
       "rock",
       "rockDark"
      ],
      "parts": [
       {
        "node": "armLeft",
        "pivot": [
         0.13,
         0.473,
         0.035
        ]
       },
       {
        "node": "armRight",
        "pivot": [
         -0.13,
         0.473,
         0.035
        ]
       },
       {
        "node": "body",
        "pivot": [
         0,
         0.223,
         0.035
        ]
       },
       {
        "node": "head",
        "pivot": [
         0,
         0.483,
         0.035
        ]
       },
       {
        "node": "legLeft",
        "pivot": [
         0.13,
         0.223,
         0.035
        ]
       },
       {
        "node": "legRight",
        "pivot": [
         -0.13,
         0.223,
         0.035
        ]
       }
      ]
     },
     "bytes": 22788,
     "sha256": "a3680f48e4cf171b500b003731007da820abf2965a4c1d5d7644dc29503d680c"
    }
   ],
   "base": "kenney-space-kit/1/"
  },
  {
   "id": "lab-props",
   "version": 1,
   "kind": "model",
   "title": "Science Lab Props (Poly Pizza: CreativeTrio · Kenney · Quaternius · Google Poly 외)",
   "author": "여러 저작자 — 파일별 meta.author/license/source (Colonel Cthulu, MilkAndBanana, Poly by Google, Quaternius, Ryan Donaldson, Gabriel Valdivia, Zoe XR, iPoly3D, CreativeTrio, Kenney, William Murphy, Ali12, jeremy, hat_my_guy, Nick Slough, Jarlan Perez, GameNow 절차 생성)",
   "license": "CC-BY-3.0",
   "source": "https://poly.pizza",
   "notes": "EUREKA LAB(과학 퍼즐) 실험실 소품: 실험대·의자·칠판·책장 같은 배경 소품과 현미경·비커·플라스크·전구·자석·화분 같은 탁상 소품. Poly Pizza 의 로우폴리 모델(CC0: MilkAndBanana, Quaternius, iPoly3D, CreativeTrio, Kenney, hat_my_guy / CC-BY 3.0: Colonel Cthulu, Poly by Google, Ryan Donaldson, Gabriel Valdivia, Zoe XR, William Murphy, Ali12, jeremy, Nick Slough, Jarlan Perez). 라이선스가 섞여 있다 — 팩 license 는 가장 제약이 큰 CC-BY-3.0, 파일별 meta.license 를 따른다. CC-BY 파일(microscope, erlenmeyer-flask, test-tube-rack, magnifier, dna-model, clipboard, lab-table, lab-bench, chalkboard, light-bulb, magnet, plant-sprout, bell, balloon, basket)은 게임 크레딧에 meta.attribution(제목·저자·라이선스·출처)을 표시해야 한다. 알맞은 공개 모델이 없던 atom-model, bunsen-burner 은 이 저장소가 단순 도형으로 직접 만들었다(CC0, meta.author 'GameNow', licenses/lab-props/GENERATED-CC0.txt). 정적 모델: 원점 = 바닥 중심(경계 상자 아래 가운데), 앞쪽 +Z(원본이 다른 쪽을 보던 것은 meta.rotatedY 만큼 돌렸다). 축척은 실제 크기에 맞췄다 — 1 단위 = 1 m(실험대 높이 0.9, 현미경 0.35, 비커 0.12 …; meta.size, 원본 대비 배율 meta.scaled). 게임이 보기 좋게 키워 쓴다. 텍스처는 WebP(최대 512), meshopt 압축(GLTFLoader.setMeshoptDecoder 필요). 만드는 법: node tools/models/lab-props.mjs fetch && node tools/models/lab-props.mjs build",
   "tags": [
    "lab",
    "science",
    "school",
    "desk",
    "props",
    "decor",
    "low-poly",
    "puzzle",
    "eureka-lab"
   ],
   "files": [
    {
     "path": "microscope.glb",
     "meta": {
      "title": "Microscope",
      "creator": "Colonel Cthulu",
      "author": "Colonel Cthulu",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "05VXLT8kN4k",
      "page": "https://poly.pizza/m/05VXLT8kN4k",
      "source": "https://poly.pizza/m/05VXLT8kN4k",
      "attribution": "\"Microscope\" by Colonel Cthulu (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/05VXLT8kN4k",
      "note": "+Z 쪽에서 옆모습(가장 알아보기 쉬운 면)이 보이게 돌렸다. 사람이 앉는 쪽(팔·접안렌즈가 기운 쪽)은 −X",
      "rotatedY": 60,
      "scaled": 0.4331,
      "tris": 604,
      "bbox": {
       "min": [
        -0.135,
        0,
        -0.117
       ],
       "max": [
        0.135,
        0.35,
        0.117
       ]
      },
      "size": [
       0.27,
       0.35,
       0.233
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 15060,
     "sha256": "03a74162c272e5be4304c38ad88605f882a73fbed3b753bf0bd5fb9317fea8b9"
    },
    {
     "path": "beaker.glb",
     "meta": {
      "title": "Measuring Cup",
      "creator": "MilkAndBanana",
      "author": "MilkAndBanana",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "pV3YC6J5QC",
      "page": "https://poly.pizza/m/pV3YC6J5QC",
      "source": "https://poly.pizza/m/pV3YC6J5QC",
      "note": "눈금 있는 투명 계량 비커(손잡이 달림, 원제 Measuring Cup)",
      "scaled": 0.0343,
      "tris": 282,
      "bbox": {
       "min": [
        -0.1,
        0,
        -0.073
       ],
       "max": [
        0.1,
        0.08,
        0.073
       ]
      },
      "size": [
       0.2,
       0.08,
       0.145
      ],
      "textures": [
       "map:256x1"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 7772,
     "sha256": "2381ca56dbc6677964c0d3652dde395bb1f475ad5ba28ee62e01eae4e0fd650a"
    },
    {
     "path": "erlenmeyer-flask.glb",
     "meta": {
      "title": "Erlenmeyer flask",
      "creator": "Poly by Google",
      "author": "Poly by Google",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "advGpqPqy0P",
      "page": "https://poly.pizza/m/advGpqPqy0P",
      "source": "https://poly.pizza/m/advGpqPqy0P",
      "attribution": "\"Erlenmeyer flask\" by Poly by Google (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/advGpqPqy0P",
      "note": "푸른 액체가 든 삼각 플라스크",
      "scaled": 4.682e-07,
      "tris": 1608,
      "bbox": {
       "min": [
        -0.055,
        0,
        -0.056
       ],
       "max": [
        0.055,
        0.2,
        0.056
       ]
      },
      "size": [
       0.111,
       0.2,
       0.112
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 29136,
     "sha256": "5f88b58710ba39ad86be30911c16dbaf3c1ec416ebafcb17cb83887fbe463a9c"
    },
    {
     "path": "round-flask.glb",
     "meta": {
      "title": "Potion Bottle",
      "creator": "Quaternius",
      "author": "Quaternius",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "WJxYta4Z96",
      "page": "https://poly.pizza/m/WJxYta4Z96",
      "source": "https://poly.pizza/m/WJxYta4Z96",
      "note": "원본 제목은 Potion Bottle — 코르크 마개 둥근 플라스크로 쓴다",
      "scaled": 0.1869,
      "tris": 1328,
      "bbox": {
       "min": [
        -0.062,
        0,
        -0.062
       ],
       "max": [
        0.062,
        0.18,
        0.062
       ]
      },
      "size": [
       0.125,
       0.18,
       0.125
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 12364,
     "sha256": "14c7d33e80ebc15800a02bdf9b2c27a49d799ea139813fc68ca952d924018abf"
    },
    {
     "path": "test-tube-rack.glb",
     "meta": {
      "title": "Science Tubes",
      "creator": "Ryan Donaldson",
      "author": "Ryan Donaldson",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "6TUXVb_x88c",
      "page": "https://poly.pizza/m/6TUXVb_x88c",
      "source": "https://poly.pizza/m/6TUXVb_x88c",
      "attribution": "\"Science Tubes\" by Ryan Donaldson (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/6TUXVb_x88c",
      "note": "시험관 4개(색 액체)가 꽂힌 받침",
      "scaled": 0.3158,
      "tris": 1344,
      "bbox": {
       "min": [
        -0.15,
        0,
        -0.068
       ],
       "max": [
        0.15,
        0.147,
        0.068
       ]
      },
      "size": [
       0.3,
       0.147,
       0.136
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 25596,
     "sha256": "a680678f294d385b4aeeea0a5f37b2ba4722cbe3dbe16c17fba11c0cdb552298"
    },
    {
     "path": "magnifier.glb",
     "meta": {
      "title": "Magnifying Glass",
      "creator": "Gabriel Valdivia",
      "author": "Gabriel Valdivia",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "c8HQVCBMIMR",
      "page": "https://poly.pizza/m/c8HQVCBMIMR",
      "source": "https://poly.pizza/m/c8HQVCBMIMR",
      "attribution": "\"Magnifying Glass\" by Gabriel Valdivia (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/c8HQVCBMIMR",
      "note": "세워진 돋보기(렌즈 면이 +Z) — 눕히려면 X 축으로 돌린다",
      "rotatedY": -90,
      "scaled": 0.3324,
      "tris": 256,
      "bbox": {
       "min": [
        -0.056,
        0,
        -0.024
       ],
       "max": [
        0.056,
        0.25,
        0.024
       ]
      },
      "size": [
       0.113,
       0.25,
       0.048
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 8004,
     "sha256": "0caeb13ee00d7ce9b2d896e3d7ce0666bfd1a617a8d180abe7870723d58b2330"
    },
    {
     "path": "dna-model.glb",
     "meta": {
      "title": "DNA",
      "creator": "Zoe XR",
      "author": "Zoe XR",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "0e5xgkdcuEW",
      "page": "https://poly.pizza/m/0e5xgkdcuEW",
      "source": "https://poly.pizza/m/0e5xgkdcuEW",
      "attribution": "\"DNA\" by Zoe XR (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/0e5xgkdcuEW",
      "scaled": 0.1367,
      "tris": 1720,
      "bbox": {
       "min": [
        -0.09,
        0,
        -0.078
       ],
       "max": [
        0.09,
        0.4,
        0.078
       ]
      },
      "size": [
       0.179,
       0.4,
       0.156
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 36636,
     "sha256": "1d4bd4ebf3e9cf6ec4f90eea5a50076d212521adb20172c934324b19268e28b6"
    },
    {
     "path": "crystal.glb",
     "meta": {
      "title": "Crystal",
      "creator": "iPoly3D",
      "author": "iPoly3D",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "Wj8Qjq38T8",
      "page": "https://poly.pizza/m/Wj8Qjq38T8",
      "source": "https://poly.pizza/m/Wj8Qjq38T8",
      "note": "빛·광학 장식용 수정 덩어리",
      "scaled": 0.02145,
      "tris": 98,
      "bbox": {
       "min": [
        -0.069,
        0,
        -0.058
       ],
       "max": [
        0.069,
        0.15,
        0.058
       ]
      },
      "size": [
       0.137,
       0.15,
       0.116
      ],
      "textures": [
       "map:256x256"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 6208,
     "sha256": "35b51aa8c5ff80d09888fab45d42f4151b241647bd4855bfe33bfc92ebe26393"
    },
    {
     "path": "desk-lamp.glb",
     "meta": {
      "title": "Light Desk",
      "creator": "Quaternius",
      "author": "Quaternius",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "uJDWrSJGVH",
      "page": "https://poly.pizza/m/uJDWrSJGVH",
      "source": "https://poly.pizza/m/uJDWrSJGVH",
      "scaled": 0.7851,
      "tris": 356,
      "bbox": {
       "min": [
        -0.099,
        0,
        -0.178
       ],
       "max": [
        0.099,
        0.45,
        0.178
       ]
      },
      "size": [
       0.197,
       0.45,
       0.356
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 7936,
     "sha256": "22e2f04ef0c1c74da8cb3cff9d52b2946b4697a8e875d9c13ff9db8093abdde3"
    },
    {
     "path": "books.glb",
     "meta": {
      "title": "Books",
      "creator": "CreativeTrio",
      "author": "CreativeTrio",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "dxt7dETAy9",
      "page": "https://poly.pizza/m/dxt7dETAy9",
      "source": "https://poly.pizza/m/dxt7dETAy9",
      "scaled": 1.604,
      "tris": 360,
      "bbox": {
       "min": [
        -0.158,
        0,
        -0.101
       ],
       "max": [
        0.158,
        0.25,
        0.101
       ]
      },
      "size": [
       0.316,
       0.25,
       0.201
      ],
      "textures": [
       "map:128x128"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 11152,
     "sha256": "67aa3ff8dad2c3183a639852c7644410551e8909cb0df79669471d032c17c4cf"
    },
    {
     "path": "globe.glb",
     "meta": {
      "title": "Globe",
      "creator": "CreativeTrio",
      "author": "CreativeTrio",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "Y4Dof9b2p5",
      "page": "https://poly.pizza/m/Y4Dof9b2p5",
      "source": "https://poly.pizza/m/Y4Dof9b2p5",
      "scaled": 1.426,
      "tris": 478,
      "bbox": {
       "min": [
        -0.141,
        0,
        -0.122
       ],
       "max": [
        0.141,
        0.4,
        0.122
       ]
      },
      "size": [
       0.283,
       0.4,
       0.244
      ],
      "textures": [
       "map:128x128"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 16484,
     "sha256": "2d7baf3fb4a3fe447624f20587df05b40259bc24d4342a14347975a3d449b0cc"
    },
    {
     "path": "laptop.glb",
     "meta": {
      "title": "Laptop",
      "creator": "Kenney",
      "author": "Kenney",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "GnbwSUiVty",
      "page": "https://poly.pizza/m/GnbwSUiVty",
      "source": "https://poly.pizza/m/GnbwSUiVty",
      "rotatedY": 180,
      "scaled": 1.288,
      "tris": 136,
      "bbox": {
       "min": [
        -0.17,
        0,
        -0.155
       ],
       "max": [
        0.17,
        0.208,
        0.155
       ]
      },
      "size": [
       0.34,
       0.208,
       0.309
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 5280,
     "sha256": "4367ec5fbd3e82467c642f87f3b998560a5778389226f848dd6e8159e70e5178"
    },
    {
     "path": "clipboard.glb",
     "meta": {
      "title": "clipboard",
      "creator": "William Murphy",
      "author": "William Murphy",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "8H5SDxwMnEA",
      "page": "https://poly.pizza/m/8H5SDxwMnEA",
      "source": "https://poly.pizza/m/8H5SDxwMnEA",
      "attribution": "\"clipboard\" by William Murphy (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/8H5SDxwMnEA",
      "rotatedY": -90,
      "scaled": 0.6275,
      "tris": 92,
      "bbox": {
       "min": [
        -0.119,
        0,
        -0.016
       ],
       "max": [
        0.119,
        0.32,
        0.016
       ]
      },
      "size": [
       0.238,
       0.32,
       0.031
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 5400,
     "sha256": "7eb6b31b3306bd3acdb07103fd638954b9351a72955c6f65691fb4c302486250"
    },
    {
     "path": "alarm-clock.glb",
     "meta": {
      "title": "Alarm Clock",
      "creator": "CreativeTrio",
      "author": "CreativeTrio",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "y5f363OS9C",
      "page": "https://poly.pizza/m/y5f363OS9C",
      "source": "https://poly.pizza/m/y5f363OS9C",
      "scaled": 0.7813,
      "tris": 458,
      "bbox": {
       "min": [
        -0.049,
        0,
        -0.025
       ],
       "max": [
        0.049,
        0.15,
        0.025
       ]
      },
      "size": [
       0.097,
       0.15,
       0.049
      ],
      "textures": [
       "map:128x128"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 15820,
     "sha256": "f0f2cde17cf7a52f9216ac8e3dd13f3de7cf2259a07cdaf1ec5ba4fc07a039e3"
    },
    {
     "path": "trophy.glb",
     "meta": {
      "title": "Trophy",
      "creator": "CreativeTrio",
      "author": "CreativeTrio",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "fLy8KmmD1t",
      "page": "https://poly.pizza/m/fLy8KmmD1t",
      "source": "https://poly.pizza/m/fLy8KmmD1t",
      "scaled": 1.026,
      "tris": 518,
      "bbox": {
       "min": [
        -0.085,
        0,
        -0.061
       ],
       "max": [
        0.085,
        0.3,
        0.061
       ]
      },
      "size": [
       0.17,
       0.3,
       0.122
      ],
      "textures": [
       "map:128x128"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 16520,
     "sha256": "b39746018cba0fdf0c1d23d77af92e74246eb64a3b36b12c81b1c3a231815a2c"
    },
    {
     "path": "lab-table.glb",
     "meta": {
      "title": "Lab Desk",
      "creator": "Colonel Cthulu",
      "author": "Colonel Cthulu",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "6KxaD6I6I48",
      "page": "https://poly.pizza/m/6KxaD6I6I48",
      "source": "https://poly.pizza/m/6KxaD6I6I48",
      "attribution": "\"Lab Desk\" by Colonel Cthulu (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/6KxaD6I6I48",
      "note": "수납장 달린 넓은 실험대(회색 상판) — 퍼즐 판을 올려놓는 작업대",
      "scaled": 0.8175,
      "tris": 4884,
      "bbox": {
       "min": [
        -1.034,
        0,
        -0.721
       ],
       "max": [
        1.034,
        0.9,
        0.721
       ]
      },
      "size": [
       2.067,
       0.9,
       1.442
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 73304,
     "sha256": "739bab8a8df32b85a58448314d8d33d09eef7410a7d3cbf36fcf495ed73aa5b8"
    },
    {
     "path": "lab-bench.glb",
     "meta": {
      "title": "Lab Table",
      "creator": "Ali12",
      "author": "Ali12",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "NyeiCAto3N",
      "page": "https://poly.pizza/m/NyeiCAto3N",
      "source": "https://poly.pizza/m/NyeiCAto3N",
      "attribution": "\"Lab Table\" by Ali12 (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/NyeiCAto3N",
      "note": "검은 상판의 긴 실험대(서랍·수납장이 +Z)",
      "rotatedY": -90,
      "scaled": 0.7679,
      "tris": 1074,
      "bbox": {
       "min": [
        -2.072,
        0,
        -0.758
       ],
       "max": [
        2.072,
        0.9,
        0.758
       ]
      },
      "size": [
       4.144,
       0.9,
       1.515
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 15612,
     "sha256": "f16fdbe14b7478d2843ded016ecd7dfc1fa8d847d5c64b5f2b0a701b05afc501"
    },
    {
     "path": "stool.glb",
     "meta": {
      "title": "Bar Stool",
      "creator": "Kenney",
      "author": "Kenney",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "2do92chR2k",
      "page": "https://poly.pizza/m/2do92chR2k",
      "source": "https://poly.pizza/m/2do92chR2k",
      "scaled": 1.494,
      "tris": 352,
      "bbox": {
       "min": [
        -0.198,
        0,
        -0.172
       ],
       "max": [
        0.198,
        0.65,
        0.172
       ]
      },
      "size": [
       0.397,
       0.65,
       0.344
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 5080,
     "sha256": "822963cea1df9ee26949cf771576fc0a91f4f34e399ca2951ece69fd3cf8f476"
    },
    {
     "path": "bookshelf.glb",
     "meta": {
      "title": "Bookcase with Books",
      "creator": "Quaternius",
      "author": "Quaternius",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "tACDGJ4CGW",
      "page": "https://poly.pizza/m/tACDGJ4CGW",
      "source": "https://poly.pizza/m/tACDGJ4CGW",
      "note": "원본 10948 tris → 단순화(책 낱권이 많아 8천 tris 안팎에서 멈춤). 배경용",
      "scaled": 0.5932,
      "simplifiedFromTris": 10948,
      "tris": 8235,
      "bbox": {
       "min": [
        -0.546,
        0,
        -0.197
       ],
       "max": [
        0.546,
        2,
        0.197
       ]
      },
      "size": [
       1.093,
       2,
       0.394
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 123740,
     "sha256": "be609763ff811676b581dc7889bb090b0ccbcf8367f004136277945e2a0fbdbd"
    },
    {
     "path": "chalkboard.glb",
     "meta": {
      "title": "Blackboard",
      "creator": "jeremy",
      "author": "jeremy",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "duhtFXbJCfc",
      "page": "https://poly.pizza/m/duhtFXbJCfc",
      "source": "https://poly.pizza/m/duhtFXbJCfc",
      "attribution": "\"Blackboard\" by jeremy (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/duhtFXbJCfc",
      "note": "녹색 칠판(분필 받침 포함), 벽걸이",
      "scaled": 0.2404,
      "tris": 260,
      "bbox": {
       "min": [
        -1.2,
        0,
        -0.094
       ],
       "max": [
        1.2,
        1.49,
        0.094
       ]
      },
      "size": [
       2.4,
       1.49,
       0.188
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 9956,
     "sha256": "1df2b6fb5f5e140c6c3867be9777d5239ac8349e4040c0003fe92c8416526a85"
    },
    {
     "path": "telescope.glb",
     "meta": {
      "title": "Telescope",
      "creator": "CreativeTrio",
      "author": "CreativeTrio",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "RjyTCQvA8b",
      "page": "https://poly.pizza/m/RjyTCQvA8b",
      "source": "https://poly.pizza/m/RjyTCQvA8b",
      "scaled": 1.269,
      "tris": 734,
      "bbox": {
       "min": [
        -0.325,
        0,
        -0.377
       ],
       "max": [
        0.325,
        1.2,
        0.377
       ]
      },
      "size": [
       0.651,
       1.2,
       0.754
      ],
      "textures": [
       "map:128x128"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 22972,
     "sha256": "4c38fe50674d18882a163c88af0406415d4fdc4595bab8154ad3d0fe4c78d17a"
    },
    {
     "path": "potted-plant.glb",
     "meta": {
      "title": "Houseplant",
      "creator": "Quaternius",
      "author": "Quaternius",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "IBLX2Jz90O",
      "page": "https://poly.pizza/m/IBLX2Jz90O",
      "source": "https://poly.pizza/m/IBLX2Jz90O",
      "scaled": 1.888,
      "tris": 492,
      "bbox": {
       "min": [
        -0.483,
        0,
        -0.499
       ],
       "max": [
        0.483,
        0.8,
        0.499
       ]
      },
      "size": [
       0.966,
       0.8,
       0.998
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 11544,
     "sha256": "e537029931a932a6a71636018e6bfebf9376948449b4947d21e07b6a6b178e3c"
    },
    {
     "path": "light-bulb.glb",
     "meta": {
      "title": "Light bulb",
      "creator": "Poly by Google",
      "author": "Poly by Google",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "6ssvUix7Ycr",
      "page": "https://poly.pizza/m/6ssvUix7Ycr",
      "source": "https://poly.pizza/m/6ssvUix7Ycr",
      "attribution": "\"Light bulb\" by Poly by Google (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/6ssvUix7Ycr",
      "scaled": 0.003102,
      "tris": 1174,
      "bbox": {
       "min": [
        -0.034,
        0,
        -0.035
       ],
       "max": [
        0.034,
        0.12,
        0.035
       ]
      },
      "size": [
       0.069,
       0.12,
       0.07
      ],
      "textures": [
       "map:256x256"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 8828,
     "sha256": "a124d665ab77f54d239e9ecd209e50718e0628a804fdb875d965a11a734e1835"
    },
    {
     "path": "battery.glb",
     "meta": {
      "title": "Battery",
      "creator": "hat_my_guy",
      "author": "hat_my_guy",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "AnhRmF6bYL",
      "page": "https://poly.pizza/m/AnhRmF6bYL",
      "source": "https://poly.pizza/m/AnhRmF6bYL",
      "note": "AA 건전지(+극 위)",
      "scaled": 0.01333,
      "tris": 604,
      "bbox": {
       "min": [
        -0.007,
        0,
        -0.007
       ],
       "max": [
        0.007,
        0.05,
        0.007
       ]
      },
      "size": [
       0.014,
       0.05,
       0.014
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 11212,
     "sha256": "0ce973e4404f94645d7f3c4e49e355d90284708458daaee9fad7e3cd88297991"
    },
    {
     "path": "magnet.glb",
     "meta": {
      "title": "Magnet",
      "creator": "Poly by Google",
      "author": "Poly by Google",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "dD2RIIea6WR",
      "page": "https://poly.pizza/m/dD2RIIea6WR",
      "source": "https://poly.pizza/m/dD2RIIea6WR",
      "attribution": "\"Magnet\" by Poly by Google (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/dD2RIIea6WR",
      "note": "말굽자석(빨강·은색 극)",
      "scaled": 0.0005252,
      "tris": 776,
      "bbox": {
       "min": [
        -0.06,
        0,
        -0.011
       ],
       "max": [
        0.06,
        0.102,
        0.011
       ]
      },
      "size": [
       0.12,
       0.102,
       0.021
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 5256,
     "sha256": "91b19dc40c68a226fd3e584268694efe2663e2c07f282cdc697da7140dcd3197"
    },
    {
     "path": "plant-sprout.glb",
     "meta": {
      "title": "Small Pot Plant",
      "creator": "Nick Slough",
      "author": "Nick Slough",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "PbjJ35eNTs",
      "page": "https://poly.pizza/m/PbjJ35eNTs",
      "source": "https://poly.pizza/m/PbjJ35eNTs",
      "attribution": "\"Small Pot Plant\" by Nick Slough (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/PbjJ35eNTs",
      "note": "흰 화분의 새싹",
      "scaled": 0.4925,
      "tris": 302,
      "bbox": {
       "min": [
        -0.059,
        0,
        -0.044
       ],
       "max": [
        0.059,
        0.12,
        0.044
       ]
      },
      "size": [
       0.117,
       0.12,
       0.088
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 13628,
     "sha256": "ec87889bd4d597152ce3f1b6b61c41986fe1a13ae853ac20bedc25dcfac02beb"
    },
    {
     "path": "plant-grown.glb",
     "meta": {
      "title": "Potted Plant",
      "creator": "CreativeTrio",
      "author": "CreativeTrio",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "GJ3Bm5FDE4",
      "page": "https://poly.pizza/m/GJ3Bm5FDE4",
      "source": "https://poly.pizza/m/GJ3Bm5FDE4",
      "note": "빨간 화분에 자란 식물",
      "scaled": 1.065,
      "tris": 390,
      "bbox": {
       "min": [
        -0.188,
        0,
        -0.148
       ],
       "max": [
        0.188,
        0.3,
        0.148
       ]
      },
      "size": [
       0.375,
       0.3,
       0.295
      ],
      "textures": [
       "map:128x128"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 14060,
     "sha256": "cb94a38c5d9980d406204b814ad91abad96a77ef16c8b6ca82555564a3cab991"
    },
    {
     "path": "bell.glb",
     "meta": {
      "title": "Desk Bell",
      "creator": "Jarlan Perez",
      "author": "Jarlan Perez",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "1BXI7wJyaG8",
      "page": "https://poly.pizza/m/1BXI7wJyaG8",
      "source": "https://poly.pizza/m/1BXI7wJyaG8",
      "attribution": "\"Desk Bell\" by Jarlan Perez (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/1BXI7wJyaG8",
      "note": "탁상 호출 벨",
      "scaled": 0.165,
      "tris": 604,
      "bbox": {
       "min": [
        -0.067,
        0,
        -0.067
       ],
       "max": [
        0.067,
        0.08,
        0.067
       ]
      },
      "size": [
       0.134,
       0.08,
       0.134
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 12156,
     "sha256": "54831013350b550c65dce344552ae5937c47bc5024d5f5240c6a99fad8f226aa"
    },
    {
     "path": "fan.glb",
     "meta": {
      "title": "Desk Fan",
      "creator": "CreativeTrio",
      "author": "CreativeTrio",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "OlTLyyXoXY",
      "page": "https://poly.pizza/m/OlTLyyXoXY",
      "source": "https://poly.pizza/m/OlTLyyXoXY",
      "scaled": 1.526,
      "tris": 294,
      "bbox": {
       "min": [
        -0.148,
        0,
        -0.111
       ],
       "max": [
        0.148,
        0.4,
        0.111
       ]
      },
      "size": [
       0.297,
       0.4,
       0.222
      ],
      "textures": [
       "map:128x128"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 11556,
     "sha256": "4600c81ffc195d1f8204ea7b0ca626ad67256cadd536de28daf7d8f0f933d104"
    },
    {
     "path": "balloon.glb",
     "meta": {
      "title": "Balloon",
      "creator": "Poly by Google",
      "author": "Poly by Google",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "d1gDDhM7pTf",
      "page": "https://poly.pizza/m/d1gDDhM7pTf",
      "source": "https://poly.pizza/m/d1gDDhM7pTf",
      "attribution": "\"Balloon\" by Poly by Google (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/d1gDDhM7pTf",
      "note": "풍선 + 가는 끈(원점 = 끈 아래 끝)",
      "scaled": 1.057,
      "tris": 1048,
      "bbox": {
       "min": [
        -0.14,
        0,
        -0.14
       ],
       "max": [
        0.14,
        0.702,
        0.14
       ]
      },
      "size": [
       0.28,
       0.702,
       0.28
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 9760,
     "sha256": "b7095d8219a4753080d08769db921713ee6447bd9fac4f93650498676179f9fd"
    },
    {
     "path": "basket.glb",
     "meta": {
      "title": "Basket",
      "creator": "Poly by Google",
      "author": "Poly by Google",
      "license": "CC-BY-3.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/3.0/",
      "publicID": "a0umk-CRRwo",
      "page": "https://poly.pizza/m/a0umk-CRRwo",
      "source": "https://poly.pizza/m/a0umk-CRRwo",
      "attribution": "\"Basket\" by Poly by Google (CC-BY 3.0) via Poly Pizza https://poly.pizza/m/a0umk-CRRwo",
      "scaled": 2.667e-06,
      "tris": 1932,
      "bbox": {
       "min": [
        -0.15,
        0,
        -0.148
       ],
       "max": [
        0.15,
        0.31,
        0.148
       ]
      },
      "size": [
       0.3,
       0.31,
       0.295
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 32972,
     "sha256": "0a5e1b2eff06478f1539327b922eea647461478c07bbfcc7dab3bb1fef81dd78"
    },
    {
     "path": "cup.glb",
     "meta": {
      "title": "Cup",
      "creator": "Kenney",
      "author": "Kenney",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "aSF8ANEIsX",
      "page": "https://poly.pizza/m/aSF8ANEIsX",
      "source": "https://poly.pizza/m/aSF8ANEIsX",
      "scaled": 0.5,
      "tris": 80,
      "bbox": {
       "min": [
        -0.05,
        0,
        -0.058
       ],
       "max": [
        0.05,
        0.1,
        0.058
       ]
      },
      "size": [
       0.1,
       0.1,
       0.116
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 2716,
     "sha256": "3b4c7d2e0bc5b4d753dab02238fab9958c5128b2bd95692a66a1782cb3030283"
    },
    {
     "path": "watering-can.glb",
     "meta": {
      "title": "Watering Can",
      "creator": "CreativeTrio",
      "author": "CreativeTrio",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "publicID": "b2R90QehIt",
      "page": "https://poly.pizza/m/b2R90QehIt",
      "source": "https://poly.pizza/m/b2R90QehIt",
      "scaled": 1.166,
      "tris": 554,
      "bbox": {
       "min": [
        -0.095,
        0,
        -0.228
       ],
       "max": [
        0.095,
        0.3,
        0.228
       ]
      },
      "size": [
       0.19,
       0.3,
       0.455
      ],
      "textures": [
       "map:128x128"
      ],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 15248,
     "sha256": "ead2e541288e5a2f5f19d636bfdd2db6f7f6813e88b27d5f7135378691bb161e"
    },
    {
     "path": "atom-model.glb",
     "meta": {
      "title": "atom-model (procedural)",
      "creator": "GameNow",
      "author": "GameNow (procedural — this repo)",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "source": "generated: gamenow-assets/tools/models/lab-props.mjs (atom-model)",
      "note": "원자 모형(받침·막대·양성자 빨강/중성자 파랑 핵·궤도 고리 셋·노란 전자). 재질 이름 proton·neutron·orbit·electron·stand·rod",
      "tris": 2192,
      "bbox": {
       "min": [
        -0.081,
        0,
        -0.072
       ],
       "max": [
        0.081,
        0.316,
        0.072
       ]
      },
      "size": [
       0.163,
       0.316,
       0.143
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 48348,
     "sha256": "5a858644907e8aec7a029a26503ff9e5920e0904435227023010231b38c45673"
    },
    {
     "path": "bunsen-burner.glb",
     "meta": {
      "title": "bunsen-burner (procedural)",
      "creator": "GameNow",
      "author": "GameNow (procedural — this repo)",
      "license": "CC0-1.0",
      "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
      "source": "generated: gamenow-assets/tools/models/lab-props.mjs (bunsen-burner)",
      "note": "분젠 버너(받침·관·놋쇠 공기 조절 고리·가스 꼭지 +X·파란 불꽃). 불꽃은 재질 flame(반투명)·flame-core — 끄려면 이 두 재질의 메시를 숨긴다",
      "tris": 296,
      "bbox": {
       "min": [
        -0.046,
        0,
        -0.042
       ],
       "max": [
        0.046,
        0.222,
        0.042
       ]
      },
      "size": [
       0.093,
       0.222,
       0.084
      ],
      "textures": [],
      "origin": "bottom-center",
      "forward": "+Z"
     },
     "bytes": 10760,
     "sha256": "1dbda460796bdf34333558cbc15eaa09d6954c2c619a89d6b72a39a470f631e8"
    }
   ],
   "base": "lab-props/1/"
  },
  {
   "id": "mech-pioneer",
   "version": 1,
   "kind": "model",
   "title": "Mech Character Model (Pioneer)",
   "author": "Colorado Stark (OpenGameArt uploader)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org/content/mech-character-model",
   "notes": "원작자 이름이 페이지에 따로 없어 OpenGameArt 업로더 이름을 적었다. FBX(3ds Max Biped) → glb. 정규화: 키 1.0(발바닥 y=0·머리 꼭대기 y=1), 원점 = 두 발 사이 바닥, 앞쪽 +Z, Y 위 — 축척은 뼈대·정점·inverse bind 에 구워서 노드에 scale 이 없다. 애니메이션 없음(원본 Take 001 은 T자세 정지라 버림) — 게임이 Bip001_* 뼈대를 코드로 움직인다. 노드 44개 중 스킨 조인트 39개. 텍스처는 glb 안(EXT_texture_webp, meshopt — GLTFLoader.setMeshoptDecoder 필요): baseColor 1024(sRGB), normal 1024(glTF 규약으로 변환: 원본 OpenGL Y+ → 이미지 뒤집기 + G 반전), metallicRoughness 1024(G = 원본 스페큘러를 뒤집은 roughness 0.35~0.95, B = 1, metallicFactor 0.45 — 게임이 factor 로 조절). pioneer-paintmask.webp = 파란 도장 부분 흰색(색상 185~235°·채도>0.2·명도>0.12, 녹·흠집 제외, 경계 흐림). glb 텍스처와 같은 glTF 방향이라 TextureLoader 로 읽으면 flipY=false, UV 는 map 과 같다. pioneer-lod1.glb = 삼각형 약 35%·텍스처 512(스킨 유지).",
   "tags": [
    "mech",
    "humanoid",
    "skinned",
    "biped",
    "sci-fi",
    "pbr"
   ],
   "files": [
    {
     "path": "pioneer.glb",
     "meta": {
      "tris": 15434,
      "bones": 44,
      "skinJoints": 39,
      "boneNames": [
       "Bip001",
       "Bip001_Pelvis",
       "Bip001_Spine",
       "Bip001_R_Thigh",
       "Bip001_R_Calf",
       "Bip001_R_Foot",
       "Bip001_R_Toe0",
       "Bip001_Spine1",
       "Bip001_Neck",
       "Bip001_Neck1",
       "Bip001_Neck2",
       "Bip001_Head",
       "Bip001_L_Clavicle",
       "Bip001_L_UpperArm",
       "Bip001_L_Forearm",
       "Bip001_L_Hand",
       "Bip001_L_Finger0",
       "Bip001_L_Finger01",
       "Bip001_L_Finger1",
       "Bip001_L_Finger11",
       "Bip001_L_Finger2",
       "Bip001_L_Finger21",
       "Bip001_L_Finger3",
       "Bip001_L_Finger31",
       "Bip001_L_Finger4",
       "Bip001_L_Finger41",
       "Bip001_R_Clavicle",
       "Bip001_R_UpperArm",
       "Bip001_R_Forearm",
       "Bip001_R_Hand",
       "Bip001_R_Finger4",
       "Bip001_R_Finger41",
       "Bip001_R_Finger2",
       "Bip001_R_Finger21",
       "Bip001_R_Finger3",
       "Bip001_R_Finger31",
       "Bip001_R_Finger0",
       "Bip001_R_Finger01",
       "Bip001_R_Finger1",
       "Bip001_R_Finger11",
       "Bip001_L_Thigh",
       "Bip001_L_Calf",
       "Bip001_L_Foot",
       "Bip001_L_Toe0"
      ],
      "nonJointBones": [
       "Bip001_R_Toe0",
       "Bip001_Neck",
       "Bip001_Neck1",
       "Bip001_Neck2",
       "Bip001_L_Toe0"
      ],
      "anims": [],
      "bbox": {
       "min": [
        -0.693,
        0,
        -0.197
       ],
       "max": [
        0.693,
        1,
        0.131
       ]
      },
      "size": [
       1.386,
       1,
       0.328
      ],
      "height": 1,
      "forward": "+Z",
      "up": "+Y",
      "origin": "feet-center-ground",
      "textures": [
       "map:1024x1024",
       "normalMap:1024x1024",
       "roughnessMap:1024x1024",
       "metalnessMap:1024x1024"
      ],
      "materials": [
       "Pioneer"
      ]
     },
     "bytes": 788916,
     "sha256": "be13990869c957faeb6d17cb291694f64cd7d3f1f809f5ce82d668a7fcbbc777"
    },
    {
     "path": "pioneer-lod1.glb",
     "meta": {
      "tris": 5400,
      "bones": 44,
      "anims": [],
      "bbox": {
       "min": [
        -0.693,
        0,
        -0.197
       ],
       "max": [
        0.693,
        0.999,
        0.131
       ]
      },
      "height": 1,
      "forward": "+Z",
      "up": "+Y",
      "lodOf": "pioneer.glb",
      "textures": [
       "map:512x512",
       "normalMap:512x512",
       "roughnessMap:512x512",
       "metalnessMap:512x512"
      ]
     },
     "bytes": 299092,
     "sha256": "c47b67b32d8d948b4b73719487bfe53ef24082ea550b9250009b742dbf62d47d"
    },
    {
     "path": "pioneer-paintmask.webp",
     "meta": {
      "size": 1024,
      "role": "paintmask",
      "colorSpace": "linear",
      "channels": "gray",
      "uv": "same as pioneer.glb baseColor (glTF orientation, flipY=false)",
      "coverage": 0.164,
      "rule": "hue 185-235°, sat>0.2, value>0.12, soft edges, blur ~1px"
     },
     "bytes": 277880,
     "sha256": "bf9ab2164f91ec8ce767a85ed19d4cfcf9049749aea6539e2f1ff2dd1ba4fe55"
    }
   ],
   "base": "mech-pioneer/1/"
  },
  {
   "id": "music-frontier",
   "version": 1,
   "kind": "music",
   "title": "Frontier War Music",
   "author": "여러 저작자 — 파일별 meta.author (mrpoly, Emma_MA, cynicmusic, sperrylion (remix of \"Predynastic Dawn\" by Bobjt), vitalezzz, iamoneabe, nene, CleytonKauffman)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "배경음악(메뉴 1·전투 5·보스 1·승리/패배 스팅어). 전부 OpenGameArt 의 CC0 곡. 스테레오 mp3 128kbps, -18 LUFS 안팎·피크 -1.5 dBFS. 루프 곡은 meta.loopStart/loopEnd(초, 디코딩 기준)로 이어 튼다(원본이 루프인 곡은 통째로, 끝 이음매가 튀는 곡은 짧게 크로스페이드). 만드는 법: python3 -I tools/audio/build-audio.py music-frontier",
   "tags": [
    "music",
    "loop",
    "battle",
    "boss",
    "menu",
    "sci-fi",
    "orchestral",
    "metal"
   ],
   "files": [
    {
     "path": "music-menu.mp3",
     "meta": {
      "role": "menu",
      "description": "Menu Music — mrpoly",
      "duration": 47.922,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 47.821837,
      "lufs": -18,
      "peak": -1.7,
      "channels": 2,
      "origin": [
       "menu-music/awesomeness.wav"
      ],
      "author": "mrpoly",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/menu-music"
      ]
     },
     "bytes": 767835,
     "sha256": "e928f915048c9b15263409bddf52cc2994eda1d243f9535ab914841d3084f85d"
    },
    {
     "path": "music-battle-1.mp3",
     "meta": {
      "role": "battle",
      "description": "Determined Pursuit (epic orchestra loop) — Emma_MA",
      "duration": 108.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 108.1,
      "lufs": -18,
      "peak": -5.8,
      "channels": 2,
      "origin": [
       "pursuit/determined_pursuit_loop.wav"
      ],
      "author": "Emma_MA",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/determined-pursuit-epic-orchestra-loop"
      ]
     },
     "bytes": 1732484,
     "sha256": "c2fae4f26c5b17885b014a0fd24b1c0e6e958ceb7d514f8a3e166330c509c5dd"
    },
    {
     "path": "music-battle-2.mp3",
     "meta": {
      "role": "battle",
      "description": "Battle Theme A — cynicmusic (끝이 2초쯤 잦아들었다가 처음으로 돌아간다)",
      "duration": 96.052,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 95.951837,
      "lufs": -18,
      "peak": -8,
      "channels": 2,
      "origin": [
       "battle-a/battleThemeA.mp3"
      ],
      "author": "cynicmusic",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/battle-theme-a"
      ]
     },
     "bytes": 1537715,
     "sha256": "ab98b8d75c5d2001cc7f0bcd75bbe1d2da34d4c3bf7763b7f86fc73780c58edf"
    },
    {
     "path": "music-battle-3.mp3",
     "meta": {
      "role": "battle",
      "description": "Battle for Mars — sperrylion (remix of Predynastic Dawn by Bobjt)",
      "duration": 172.042,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 171.941859,
      "lufs": -17.9,
      "peak": -6.6,
      "channels": 2,
      "origin": [
       "battle-for-mars/battle_for_mars_2025_-_loop.ogg"
      ],
      "author": "sperrylion (remix of \"Predynastic Dawn\" by Bobjt)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/battle-for-mars"
      ]
     },
     "bytes": 2753559,
     "sha256": "4a3ca3964adfe15378269783e7c98b4265303285864890376027489a1b31d436"
    },
    {
     "path": "music-battle-4.mp3",
     "meta": {
      "role": "battle",
      "description": "Brute Force — vitalezzz",
      "duration": 148.564,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 148.463651,
      "lufs": -18,
      "peak": -5.8,
      "channels": 2,
      "origin": [
       "brute-force/brute_force_loop.wav"
      ],
      "author": "vitalezzz",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/brute-force"
      ]
     },
     "bytes": 2378231,
     "sha256": "4de8c79411677585678e73e1256e897af51b1b6bf7a22408f228f44f292e41c3"
    },
    {
     "path": "music-battle-5.mp3",
     "meta": {
      "role": "battle",
      "description": "Final Stand — iamoneabe",
      "duration": 64.19,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 64.09,
      "lufs": -18,
      "peak": -4.5,
      "channels": 2,
      "origin": [
       "final-stand/final_stand.wav"
      ],
      "author": "iamoneabe",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/final-stand"
      ]
     },
     "bytes": 1028223,
     "sha256": "9291f9eb13f5188385ae7e498722e2b1f9aa72616b2485fc478e08c1f3c96285"
    },
    {
     "path": "music-boss.mp3",
     "meta": {
      "role": "boss",
      "description": "Boss Battle #2 (symphonic metal) — nene",
      "duration": 39.524,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 39.42415,
      "lufs": -18,
      "peak": -5.4,
      "channels": 2,
      "origin": [
       "boss-metal/boss_battle_#2_metal_loop.wav"
      ],
      "author": "nene",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/boss-battle-2-symphonic-metal"
      ]
     },
     "bytes": 633670,
     "sha256": "95a0809ff6eea7eec64dba7cb1c0da9e7043502c92933167b68e95c60c58ba1d"
    },
    {
     "path": "music-victory.mp3",
     "meta": {
      "role": "victory",
      "description": "Victory Fanfare Short — cynicmusic",
      "duration": 11.712,
      "loop": false,
      "lufs": -18,
      "peak": -7.2,
      "channels": 2,
      "origin": [
       "victory-fanfare/Heavy_ConceptB.wav"
      ],
      "author": "cynicmusic",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/victory-fanfare-short"
      ]
     },
     "bytes": 188543,
     "sha256": "5f8cba2da721f25cc5d67041e6f485c1d094e6c027bffef91d6ed2836029e344"
    },
    {
     "path": "music-defeat.mp3",
     "meta": {
      "role": "defeat",
      "description": "Game Over Theme \"No Hope\" — CleytonKauffman",
      "duration": 12.964,
      "loop": false,
      "lufs": -18,
      "peak": -2.8,
      "channels": 2,
      "origin": [
       "game-over/GameOver-Music/No Hope.wav"
      ],
      "author": "CleytonKauffman",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/game-over-theme"
      ]
     },
     "bytes": 208605,
     "sha256": "b2027f48524207c8df3bf0239a33216be1ad68885eff28e62b5a8c55c0026c79"
    }
   ],
   "base": "music-frontier/1/"
  },
  {
   "id": "music-lab",
   "version": 1,
   "kind": "music",
   "title": "Lab Puzzle Music",
   "author": "여러 저작자 — 파일별 meta.author (CleytonKauffman, Brandon75689, Ruskerdax, isaiah658)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "EUREKA LAB 배경음악(메뉴·실험 1·실험 2·온라인 경주). 전부 OpenGameArt 의 CC0 곡(파일별 meta.title/author/source). 잔잔하고 호기심 어린 분위기 — 보사노바(메뉴), 마림바·피아노(실험 1), DX-7 전자 피아노 퍼즐곡(실험 2), 밝고 빠른 곡(경주). 스테레오 mp3 128kbps, -16 LUFS 안팎·피크 -1.5 dBFS. 모두 루프 — meta.loopStart/loopEnd(초, 디코딩 기준)로 AudioBufferSourceNode 에 넣는다. 곡 안에서 같은 박자 자리 두 점(특징 유사도로 찾고 파형 상관으로 샘플 단위 정렬)을 골라 그 사이만 잘라 짧게 크로스페이드했다(인트로·아웃트로 뺌, meta.description). 만드는 법: python3 -I tools/audio/build-audio-eureka.py music-lab",
   "tags": [
    "music",
    "loop",
    "puzzle",
    "calm",
    "jazz",
    "bossa-nova",
    "marimba",
    "synth",
    "menu",
    "race",
    "eureka-lab"
   ],
   "files": [
    {
     "path": "music-menu.mp3",
     "meta": {
      "role": "menu",
      "description": "Buy Something! (Shop Theme) — CleytonKauffman. 플루트 보사노바(120BPM), 가볍고 경쾌. 88초 중 8.0s~80.0s(144박) 루프",
      "duration": 72.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 72.1,
      "lufs": -16,
      "peak": -1.7,
      "channels": 2,
      "origin": [
       "shop-theme/shop_theme/Buy Something!.ogg"
      ],
      "author": "CleytonKauffman",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/shop-theme"
      ],
      "title": "Shop Theme",
      "sourceRange": [
       8.03,
       80.03
      ],
      "seamCorrelation": 0.867
     },
     "bytes": 1156119,
     "sha256": "a9e10db137a01ca7758979b43e53739ca8d68076f09281eee259d0dfa7297d9e"
    },
    {
     "path": "music-lab-1.mp3",
     "meta": {
      "role": "level",
      "description": "Feel good island — Brandon75689. 마림바·피아노, 잔잔하고 기분 좋은 곡(130BPM). 113초 중 18.2s~99.4s(176박) 루프",
      "duration": 81.466,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 81.366145,
      "lufs": -16,
      "peak": -2.2,
      "channels": 2,
      "origin": [
       "feel-good-island/island_0.flac"
      ],
      "author": "Brandon75689",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/feel-good-island"
      ],
      "title": "Feel good island",
      "sourceRange": [
       18.2,
       99.4661
      ],
      "seamCorrelation": 0.784
     },
     "bytes": 1304494,
     "sha256": "33498047009b8ae21ff95d730c1871747bf5f82e578315eee4965b18844c7210"
    },
    {
     "path": "music-lab-2.mp3",
     "meta": {
      "role": "level",
      "description": "Puzzling — Ruskerdax. DX-7 전자 피아노 + TR-909, 퍼즐 게임용으로 만든 80년대풍 생각하는 음악(148BPM). 120초 중 15.7s~106.6s(224박) 루프",
      "duration": 91.012,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 90.910952,
      "lufs": -16,
      "peak": -4.8,
      "channels": 2,
      "origin": [
       "puzzling/ruskerdax_-_puzzling.mp3"
      ],
      "author": "Ruskerdax",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/puzzling"
      ],
      "title": "Puzzling",
      "sourceRange": [
       15.74,
       106.551
      ],
      "seamCorrelation": 0.71
     },
     "bytes": 1457467,
     "sha256": "f11e55189cefb432415f5db4ee475f06843d601560c1c80429855c413bfb23f8"
    },
    {
     "path": "music-race.mp3",
     "meta": {
      "role": "race",
      "description": "Sunflower Valley — isaiah658. 밝고 빠른 곡(Spyro 풍, 125BPM). 142초 중 5.3s~97.4s(192박) 루프",
      "duration": 92.36,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 92.26,
      "lufs": -16,
      "peak": -1.7,
      "channels": 2,
      "origin": [
       "sunflower-valley/Sunflower-Valley-isaiah658.ogg"
      ],
      "author": "isaiah658",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/sunflower-valley"
      ],
      "title": "Sunflower Valley",
      "sourceRange": [
       5.25,
       97.41
      ],
      "seamCorrelation": 0.967
     },
     "bytes": 1478783,
     "sha256": "9dfee730ac4005a00be1ba2fc5bfcbed714f0182d098093cad5d0efdba59b1e3"
    }
   ],
   "base": "music-lab/1/"
  },
  {
   "id": "music-meadow",
   "version": 1,
   "kind": "music",
   "title": "Meadow Music",
   "author": "여러 저작자 — 파일별 meta.author (cynicmusic, CleytonKauffman, Emma_MA, Spring Spring, Zane Little Music)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "PET PARADE 배경음악(메뉴·풀밭·동굴·눈·용암·온라인 경주). 전부 OpenGameArt 의 CC0 곡(파일별 meta.title/author/source). 스테레오 mp3 128kbps(용암은 원곡이 모노), -16 LUFS 안팎·피크 -1.5 dBFS. 모두 루프 — meta.loopStart/loopEnd(초, 디코딩 기준)로 AudioBufferSourceNode 에 넣는다. 원곡이 루프인 곡은 통째로, 끝이 잦아드는 곡은 박자로 자르고 꼬리를 처음에 겹쳤고, 긴 곡은 같은 자리 두 점 사이만 잘라 짧게 크로스페이드했다(meta.description). 만드는 법: python3 -I tools/audio/build-audio-petparade.py music-meadow",
   "tags": [
    "music",
    "loop",
    "cute",
    "happy",
    "puzzle",
    "menu",
    "cave",
    "snow",
    "lava",
    "race"
   ],
   "files": [
    {
     "path": "music-menu.mp3",
     "meta": {
      "role": "menu",
      "description": "Happy Lullaby (song17) — cynicmusic. 종·아르페지오, 잔잔하고 밝다. 100BPM 64박(38.4초)으로 자르고 끝 잔향을 처음에 겹침",
      "duration": 38.6,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 38.5,
      "lufs": -16,
      "peak": -3.4,
      "channels": 2,
      "origin": [
       "song17/song17.mp3"
      ],
      "author": "cynicmusic",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/happy-lullaby-song17"
      ],
      "title": "Happy Lullaby (song17)"
     },
     "bytes": 618623,
     "sha256": "dd0735d71c5db1ea0c46677967be6d922852367ab773aa217788742f65561512"
    },
    {
     "path": "music-meadow.mp3",
     "meta": {
      "role": "level-meadow",
      "description": "Children's March Theme — CleytonKauffman. 경쾌한 행진곡, 원곡이 이음매 없는 루프(180BPM 192박)",
      "duration": 64.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 64.1,
      "lufs": -16,
      "peak": -1.6,
      "channels": 2,
      "origin": [
       "childrens-march/Children's March Theme.wav"
      ],
      "author": "CleytonKauffman",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/childrens-march-theme"
      ],
      "title": "Children's March Theme"
     },
     "bytes": 1028223,
     "sha256": "8187b32bd74c19cb5cb356b0bd75edcfe86f1e599aa488e0316c2bd32f215b46"
    },
    {
     "path": "music-cave.mp3",
     "meta": {
      "role": "level-cave",
      "description": "Underwater Theme — CleytonKauffman. 종·플루트·아르페지오(신비롭지만 귀엽게). 170초 중 같은 자리 두 점(0.8s·94.6s, 상관 0.95) 사이 93.8초 루프",
      "duration": 94.018,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 93.917687,
      "lufs": -16,
      "peak": -3.8,
      "channels": 2,
      "origin": [
       "underwater/Cleyton RX - Underwater.wav"
      ],
      "author": "CleytonKauffman",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/underwater-theme"
      ],
      "title": "Underwater Theme"
     },
     "bytes": 1505533,
     "sha256": "95a5d1783a2153a45777953b82ebb5c825b743231c9515b2e91bd9f8e852a6bf"
    },
    {
     "path": "music-snow.mp3",
     "meta": {
      "role": "level-snow",
      "description": "Wintery loop — Emma_MA. 피아노·토이 피아노·목관·방울, 잔잔. 원곡이 루프(65BPM 48박)",
      "duration": 44.507,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 44.406621,
      "lufs": -16,
      "peak": -3.4,
      "channels": 2,
      "origin": [
       "wintery-loop/wintery loop.wav"
      ],
      "author": "Emma_MA",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/wintery-loop"
      ],
      "title": "Wintery loop"
     },
     "bytes": 713082,
     "sha256": "7faa58427baab96f32725c9a8b2e8943351e9c404068809ee44bf494e59366e6"
    },
    {
     "path": "music-lava.mp3",
     "meta": {
      "role": "level-lava",
      "description": "Fire Level — Spring Spring. 긴장감 있지만 신나는 칩튠(모노). 130BPM 224박(103.4초)으로 자르고 끝 꼬리를 처음에 겹침",
      "duration": 103.585,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 103.484626,
      "lufs": -16,
      "peak": -1.5,
      "channels": 1,
      "origin": [
       "fire-level/Danish Mega Pony v. 4 OST - Track 02 (Fire Level)_0.mp3"
      ],
      "author": "Spring Spring",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fire-level"
      ],
      "title": "Fire Level"
     },
     "bytes": 1243891,
     "sha256": "2cd1c59cb2f3ea97456a7045688a1f29ec807dd77cb98bb4daa1def39bf4e4c2"
    },
    {
     "path": "music-race.mp3",
     "meta": {
      "role": "race",
      "description": "Dizzy Racing — Zane Little Music. 빠르고 장난스러운 경주곡(175BPM). 136초 중 같은 자리 두 점(15.4s·92.2s, 224박) 사이 76.8초 루프(인트로·아웃트로 뺌)",
      "duration": 77,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 76.899977,
      "lufs": -16,
      "peak": -4,
      "channels": 2,
      "origin": [
       "dizzy-racing/dizzy_racing.wav"
      ],
      "author": "Zane Little Music",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/dizzy-racing"
      ],
      "title": "Dizzy Racing"
     },
     "bytes": 1233023,
     "sha256": "c74959de5ed09d1af49795ca24ac8fb50791dc7c10f89b797dd867d494ce7ea6"
    }
   ],
   "base": "music-meadow/1/"
  },
  {
   "id": "music-shadow",
   "version": 1,
   "kind": "music",
   "title": "Shadow Noir Music",
   "author": "여러 저작자 — 파일별 meta.author (Ruskerdax, Lisboa, Umplix, Samza, Sudocolon, sperrylion, qubodup (remix of \"Shrine\" by yd), SterlingRay, Joth, Kresiek The Furry, Kenney)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "VERDICT(game_id verdict, ~/SRC/globalShadow — 어두운 영웅의 잠입·저격·탐험 액션) 용으로 만들었지만 어느 게임이든 쓸 수 있다. 배경음악: 누아르 재즈 메뉴, 잠입 2곡, 추격, 전투(어두운 액션), 유적 2곡 + 스팅어(승리·실패·불길한 발견·짧은 색소폰 실패/단서). 전부 CC0(OpenGameArt 작곡가들·Kenney — 파일별 meta.title/author/source). 스테레오 mp3 128kbps(잠입 1은 112kbps, 잠입 2는 원곡 클리핑 때문에 160kbps), -17 LUFS 안팎(잔잔한 곡·스팅어 -18~-19)·피크 -1.5 dBFS. 루프 곡은 meta.loopStart/loopEnd(초, 디코딩 기준)로 이어 튼다: 원곡이 루프인 곡은 통째로, 긴 곡은 곡 안에서 가장 닮은 두 점 사이만 잘라 짧게 크로스페이드했다(meta.description 에 원곡 구간). 스팅어는 루프가 아니다. 만드는 법: python3 -I tools/audio/build-audio-verdict.py music-shadow",
   "tags": [
    "music",
    "loop",
    "stealth",
    "noir",
    "jazz",
    "chase",
    "action",
    "ruins",
    "temple",
    "mystery",
    "stinger"
   ],
   "files": [
    {
     "path": "music-menu.mp3",
     "meta": {
      "role": "menu",
      "description": "Moil — Ruskerdax. 느린 다크 재즈(로즈 피아노·재즈 드럼·바리톤 색소폰·콘트라베이스). 185초 중 15.5s~108.15s(가장 닮은 두 점) 92.6초 루프",
      "duration": 92.852,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 92.752177,
      "lufs": -17,
      "peak": -2,
      "channels": 2,
      "origin": [
       "vd-moil/ruskerdax_-_moil.mp3"
      ],
      "author": "Ruskerdax",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/moil"
      ],
      "title": "Moil"
     },
     "bytes": 1486724,
     "sha256": "fa1fd2eda758a8428852fa698429e35b31773343a023a3e166434445f3298315"
    },
    {
     "path": "music-stealth.mp3",
     "meta": {
      "role": "stealth",
      "description": "Stealth in the Woods — Lisboa. 잠입용 긴장 루프(원곡이 루프, 152.8초 통째)",
      "duration": 152.96,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 152.860204,
      "lufs": -17,
      "peak": -4.1,
      "channels": 2,
      "origin": [
       "vd-stealth-woods/Stealth in the Woods.mp3"
      ],
      "author": "Lisboa",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/stealth-music"
      ],
      "title": "Stealth in the Woods"
     },
     "bytes": 2142398,
     "sha256": "60dafbd077cc654afd3ac91e26f4509bb52411e9b505d124954fd8e37ec50f10"
    },
    {
     "path": "music-stealth-2.mp3",
     "meta": {
      "role": "stealth",
      "description": "Sneaking into the Robot Factory — Umplix(Sneaky Music Pack). 실내 잠입·해킹. 61초 중 5.95s~51.77s 45.8초 루프",
      "duration": 46.018,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 45.918186,
      "lufs": -19.1,
      "peak": -2.4,
      "channels": 2,
      "origin": [
       "vd-sneaky/sneaking_into_the_robot_factory.wav"
      ],
      "author": "Umplix",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/sneaky-music-pack"
      ],
      "title": "Sneaky Music Pack"
     },
     "bytes": 921645,
     "sha256": "7ff67bbe88aba41627acbd2b25f0e7bf68b066dc4ee37ae3051be90db4b2e884"
    },
    {
     "path": "music-chase.mp3",
     "meta": {
      "role": "chase",
      "description": "Chase in the Night — Samza. 추격 장면 BGM. 118초 중 16.05s~112.05s(같은 마디) 96초 루프",
      "duration": 96.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 96.1,
      "lufs": -17,
      "peak": -2,
      "channels": 2,
      "origin": [
       "vd-chase-night/chase_in_the_night.wav"
      ],
      "author": "Samza",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/chase-in-the-night"
      ],
      "title": "Chase in the Night"
     },
     "bytes": 1540223,
     "sha256": "0ef1587be7a91eb4e0ab77ba7492346df20922b9a6f6935e78b49be9b82bfed6"
    },
    {
     "path": "music-action.mp3",
     "meta": {
      "role": "action",
      "description": "The Hunt — Sudocolon. 어두운 액션(일그러진 베이스·압축 드럼) — 전투·들킴. 174초 중 38.15s~140.76s(같은 마디) 102.6초 루프",
      "duration": 102.809,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 102.708571,
      "lufs": -17,
      "peak": -7.8,
      "channels": 2,
      "origin": [
       "vd-the-hunt/The Hunt.ogg"
      ],
      "author": "Sudocolon",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-hunt"
      ],
      "title": "The Hunt"
     },
     "bytes": 1645967,
     "sha256": "7c5ba8e60aae0aa8b777e12e2b85e330e935f19dbec910b0d91e44f4cc5b80ec"
    },
    {
     "path": "music-ruins.mp3",
     "meta": {
      "role": "ruins",
      "description": "Ancient Mysteries — sperrylion. 신비로운 고대 유적 테마(원곡이 루프, 120초 통째)",
      "duration": 120.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 120.1,
      "lufs": -17,
      "peak": -5.5,
      "channels": 2,
      "origin": [
       "vd-ancient-mysteries/ancient_mysteries.ogg"
      ],
      "author": "sperrylion",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/ancient-mysteries"
      ],
      "title": "Ancient Mysteries"
     },
     "bytes": 1924328,
     "sha256": "15e0680d3f0e9cf37ba1249b4ad9098a6fb1f5677dbbc5a48cba208c89c62f6b"
    },
    {
     "path": "music-ruins-dark.mp3",
     "meta": {
      "role": "ruins-dark",
      "description": "Dark Shrine Loop — qubodup(yd 의 Shrine 리믹스). 어두운 사당·동굴 유적. 56.6초 중 1.3s~31.56s 30.3초 루프",
      "duration": 30.458,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 30.358254,
      "lufs": -18,
      "peak": -2.7,
      "channels": 2,
      "origin": [
       "vd-dark-shrine/qubodup-yd-DarkShrineLoop-OpenGameArt.flac"
      ],
      "author": "qubodup (remix of \"Shrine\" by yd)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/dark-shrine-loop"
      ],
      "title": "Dark Shrine Loop"
     },
     "bytes": 488220,
     "sha256": "a0e26f1ad6bbf2339baf9d6c25e9e19d14bfbe98c1afe8899edcc77a892f2503"
    },
    {
     "path": "stinger-victory.mp3",
     "meta": {
      "role": "victory",
      "description": "Success Stinger — SterlingRay. 임무 완수(원곡 16.8초 중 마지막 악절 10.25s~끝)",
      "duration": 6.225,
      "loop": false,
      "lufs": -17,
      "peak": -6.8,
      "channels": 2,
      "origin": [
       "vd-success-stinger/success_stinger.mp3"
      ],
      "author": "SterlingRay",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/success-stinger"
      ],
      "title": "Success Stinger"
     },
     "bytes": 100772,
     "sha256": "f5c6adf4ff3d0dbccfdee44aef6b6dc0861d729353a96bd117c5428059b821e7"
    },
    {
     "path": "stinger-fail.mp3",
     "meta": {
      "role": "fail",
      "description": "Death of a Ninja (Game Over) — Joth. 임무 실패·사망(16초, 동양풍)",
      "duration": 16.048,
      "loop": false,
      "lufs": -17,
      "peak": -3.5,
      "channels": 2,
      "origin": [
       "vd-ninja-over/Death of a Ninja (Game Over).mp3"
      ],
      "author": "Joth",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/death-of-a-ninja-game-over"
      ],
      "title": "Death of a Ninja (Game Over)"
     },
     "bytes": 257924,
     "sha256": "baaacfd431c52c8693d367447da92a96d6d1431f5ab267e75768ba391721e180"
    },
    {
     "path": "stinger-dark.mp3",
     "meta": {
      "role": "reveal",
      "description": "Dark Stinger 1 — Kresiek The Furry. 불길한 발견·목표 등장(앞 9초, 길게 잦아듦)",
      "duration": 9,
      "loop": false,
      "lufs": -18,
      "peak": -7,
      "channels": 2,
      "origin": [
       "vd-dark-stinger/dark_stinger_0.wav"
      ],
      "author": "Kresiek The Furry",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/dark-stinger-1"
      ],
      "title": "Dark Stinger 1"
     },
     "bytes": 145075,
     "sha256": "dfdcdb0b591e44e40569ceb6b836701828e4707c39be988922cede6fb5fa0152"
    },
    {
     "path": "stinger-fail-short.mp3",
     "meta": {
      "role": "fail-short",
      "description": "색소폰 반음씩 내려감(뿌-뿌-뿌) — Kenney Music Jingles SAX07. 짧은 실패·들킴",
      "duration": 2.61,
      "loop": false,
      "lufs": -18,
      "peak": -10.1,
      "channels": 2,
      "origin": [
       "kenney-jingles/jingles_SAX07.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/music-jingles"
      ],
      "title": "Music Jingles"
     },
     "bytes": 42675,
     "sha256": "b275f32d63496bf382ec1283a5802bf68b4aabc8278f5d65c29ea47dc3eedd74"
    },
    {
     "path": "stinger-clue.mp3",
     "meta": {
      "role": "clue",
      "description": "색소폰 네 음 올라감 — Kenney Music Jingles SAX10. 단서·증거 발견",
      "duration": 1.596,
      "loop": false,
      "lufs": -18,
      "peak": -9.9,
      "channels": 2,
      "origin": [
       "kenney-jingles/jingles_SAX10.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/music-jingles"
      ],
      "title": "Music Jingles"
     },
     "bytes": 26793,
     "sha256": "817b37e3c49ce3709b0015e55ac622c99ab55fde83362840fe9bea30e48290b3"
    }
   ],
   "base": "music-shadow/1/"
  },
  {
   "id": "polyhaven-hdri",
   "version": 1,
   "kind": "texture",
   "title": "Poly Haven HDRIs (sunset harbor, overcast city, city night)",
   "author": "Poly Haven (Greg Zaal 외 — 파일마다 meta.authors)",
   "license": "CC0-1.0",
   "source": "https://polyhaven.com/hdris",
   "sources": [
    "https://polyhaven.com/a/venice_sunset",
    "https://polyhaven.com/a/potsdamer_platz",
    "https://polyhaven.com/a/modern_buildings_night",
    "https://polyhaven.com/a/industrial_sunset_puresky"
   ],
   "notes": "장면 환경광·반사용 1k Radiance HDR 4장(각 1.1~1.5MB). three.js: RGBELoader 로 읽어 PMREMGenerator.fromEquirectangular → scene.environment(배경은 게임의 절차 하늘을 그대로 두고 반사·간접광만). equirect 가로 1024. 1k 는 반사·조명용이지 배경으로 크게 보이면 흐리다. 테마 대응: harbor-sunset=dusk, overcast-city=winter, city-night=neon, sunset-sky=예비. 만드는 법: node tools/models/polyhaven-hdri.mjs",
   "tags": [
    "hdri",
    "environment",
    "sky",
    "sunset",
    "night",
    "overcast",
    "polyhaven"
   ],
   "files": [
    {
     "path": "harbor-sunset.hdr",
     "meta": {
      "polyhaven": "venice_sunset",
      "title": "Venice Sunset",
      "authors": {
       "Greg Zaal": "All"
      },
      "resolution": "1k",
      "format": "Radiance RGBE",
      "use": "dusk — 바다·건물이 있는 노을(1장 항구 도시). 태양 낮음, 따뜻한 색",
      "categories": [
       "outdoor",
       "skies",
       "nature",
       "urban",
       "sunrise-sunset",
       "clear",
       "medium contrast",
       "natural light"
      ],
      "evs": 19,
      "whitebalance": 5400,
      "coords": [
       45.4303,
       12.3541
      ]
     },
     "bytes": 1440400,
     "sha256": "92fe2b29b1957828fb8925a57633540bbba5bf380d9285ed553443e834249352"
    },
    {
     "path": "overcast-city.hdr",
     "meta": {
      "polyhaven": "potsdamer_platz",
      "title": "Potsdamer Platz",
      "authors": {
       "Greg Zaal": "All"
      },
      "resolution": "1k",
      "format": "Radiance RGBE",
      "use": "winter — 흐린 낮 도심(2장 눈 도시). 부드러운 균일광",
      "categories": [
       "outdoor",
       "urban",
       "morning-afternoon",
       "overcast",
       "low contrast",
       "natural light"
      ],
      "evs": 6,
      "coords": [
       52.50949,
       13.375868
      ]
     },
     "bytes": 1540678,
     "sha256": "7afe4c2f9700ee78c7477c53fa355463d7dda1fdede401432d6b5f9ff0a95696"
    },
    {
     "path": "city-night.hdr",
     "meta": {
      "polyhaven": "modern_buildings_night",
      "title": "Modern Buildings Night",
      "authors": {
       "Greg Zaal": "All"
      },
      "resolution": "1k",
      "format": "Radiance RGBE",
      "use": "neon — 밤 도심, 가로등·창 불빛(3장 네온 밤). 비 젖은 길 반사용",
      "categories": [
       "outdoor",
       "urban",
       "night",
       "partly cloudy",
       "high contrast",
       "artificial light"
      ],
      "evs": 21,
      "coords": [
       52.520154,
       13.376159
      ]
     },
     "bytes": 1655510,
     "sha256": "a690048dcecabf5ed1ad773f7abdec7cce7b1fea4d89b17f054a18f3e0fa2919"
    },
    {
     "path": "sunset-sky.hdr",
     "meta": {
      "polyhaven": "industrial_sunset_puresky",
      "title": "Industrial Sunset (Pure Sky)",
      "authors": {
       "Jarod Guest": "Sky Edits",
       "Sergej Majboroda": "Original"
      },
      "resolution": "1k",
      "format": "Radiance RGBE",
      "use": "예비 — 하늘만 있는 노을(건물 없는 깨끗한 반사)",
      "categories": [
       "outdoor",
       "skies",
       "nature",
       "sunrise-sunset",
       "partly cloudy",
       "low contrast",
       "natural light",
       "pure skies"
      ],
      "evs": 13
     },
     "bytes": 1158432,
     "sha256": "ce8235e4b1b10b620120ceeb32eb3e80af15ea29b09a8625a4bdae647dff328d"
    }
   ],
   "base": "polyhaven-hdri/1/"
  },
  {
   "id": "quaternius-guns",
   "version": 1,
   "kind": "model",
   "title": "Low-poly Firearms (Quaternius · Pichuliru, Poly Pizza)",
   "author": "Quaternius; Pichuliru (소음기) — 파일별 meta.creator",
   "license": "CC0-1.0",
   "source": "https://poly.pizza/u/Quaternius",
   "notes": "Quaternius 의 저폴리 총기(poly.pizza, CC0) 10종 — 저격총 2·돌격소총 2·기관단총 2·권총 2·리볼버·산탄총 — 과 Pichuliru 소음기(CC0), 그리고 둘을 합친 소음 권총. 단색 재질만(텍스처 없음, meta.materials). 앞쪽 = +Z(총구), 위 = +Y — 원본(총구 +X)을 Y 축 −90° 돌렸다. 원점 = 오른손이 쥐는 손잡이 어림(meta.gripU: 개머리 끝에서 길이의 그 비율 자리, 높이는 그 단면의 가장 낮은 점과 총열 높이 사이 — 총열에서 40% 아래). meta.muzzle = 원점 기준 총구 끝(총열 높이·가장 앞)이라 총구 불꽃·탄 시작점·소음기 붙일 자리로 쓴다. 축척은 원본 단위 그대로인데 Quaternius 총은 모델마다 제각각이라(권총 ≈1.8, 저격총 ≈6.3 단위) 실제 길이 어림 meta.suggestedLength(m) 와 suggestedScale(= suggestedLength / size[2])을 적었다 — 1 단위 = 1 m 세계에서 손에 들리려면 모델을 suggestedScale 배로. 소음기(suppressor.glb)만 원본이 미터 단위(길이 0.14 m)이고 원점이 뒤 끝 — 총 모델의 자식으로 붙이려면 총의 muzzle 위치에 두고 축척 1/총 suggestedScale. pistol-silenced 는 그렇게 미리 합친 것(소음기 노드 이름 suppressor). meshopt(GLTFLoader.setMeshoptDecoder 필요). 원작자 표기는 의무 아님(권장: Quaternius).",
   "tags": [
    "weapon",
    "gun",
    "firearm",
    "sniper",
    "rifle",
    "smg",
    "pistol",
    "suppressor",
    "low-poly",
    "quaternius"
   ],
   "files": [
    {
     "path": "sniper-rifle.glb",
     "meta": {
      "role": "sniper",
      "description": "볼트액션 저격총(검정, 망원 조준경)",
      "creator": "Quaternius",
      "title": "Sniper Rifle",
      "publicID": "XCIC2Ae4Rb",
      "source": "https://poly.pizza/m/XCIC2Ae4Rb",
      "tris": 1344,
      "bbox": {
       "min": [
        -0.23,
        -0.708,
        -1.964
       ],
       "max": [
        0.23,
        0.64,
        4.372
       ]
      },
      "size": [
       0.46,
       1.348,
       6.336
      ],
      "length": 6.336,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.31,
      "muzzle": [
       0,
       0.212,
       4.372
      ],
      "suggestedLength": 1.2,
      "suggestedScale": 0.189,
      "rotatedY": -90,
      "materials": [
       "Metal",
       "Black",
       "DarkMetal",
       "Glass",
       "Grey"
      ],
      "anims": []
     },
     "bytes": 25272,
     "sha256": "833cf5ed610b94150893282d46cf9f8129cd6e0169e7566632093274aae030bf"
    },
    {
     "path": "sniper-rifle-bipod.glb",
     "meta": {
      "role": "sniper",
      "description": "저격총(조준경·양각대)",
      "creator": "Quaternius",
      "title": "Sniper Rifle",
      "publicID": "i65hEldsw6",
      "source": "https://poly.pizza/m/i65hEldsw6",
      "tris": 1688,
      "bbox": {
       "min": [
        -0.624,
        -1.121,
        -1.584
       ],
       "max": [
        0.624,
        0.778,
        4.752
       ]
      },
      "size": [
       1.248,
       1.899,
       6.336
      ],
      "length": 6.336,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.25,
      "muzzle": [
       0,
       0.35,
       4.752
      ],
      "suggestedLength": 1.25,
      "suggestedScale": 0.197,
      "rotatedY": -90,
      "materials": [
       "LightMetal",
       "Metal",
       "DarkMetal",
       "Black",
       "Grey",
       "Glass"
      ],
      "anims": []
     },
     "bytes": 32896,
     "sha256": "0586a64059ecac475a0e63c453e607dd7ce3158babcf74b6bcb1f489eec2bc70"
    },
    {
     "path": "assault-rifle.glb",
     "meta": {
      "role": "rifle",
      "description": "M4 계열 돌격소총",
      "creator": "Quaternius",
      "title": "Assault Rifle",
      "publicID": "Bgvuu4CUMV",
      "source": "https://poly.pizza/m/Bgvuu4CUMV",
      "tris": 1930,
      "bbox": {
       "min": [
        -0.173,
        -0.984,
        -1.551
       ],
       "max": [
        0.173,
        0.806,
        3.618
       ]
      },
      "size": [
       0.346,
       1.79,
       5.169
      ],
      "length": 5.169,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.3,
      "muzzle": [
       0,
       0.372,
       3.618
      ],
      "suggestedLength": 0.85,
      "suggestedScale": 0.164,
      "rotatedY": -90,
      "materials": [
       "Main",
       "MainDark",
       "MainLight"
      ],
      "anims": []
     },
     "bytes": 31488,
     "sha256": "0178874157007ea7ad40f9c3bc2886bb564cbfee40042fff8366a3750df17a9b"
    },
    {
     "path": "assault-rifle-ak.glb",
     "meta": {
      "role": "rifle",
      "description": "AK 계열 돌격소총(나무 개머리)",
      "creator": "Quaternius",
      "title": "Assault Rifle",
      "publicID": "K2lXTYFSLC",
      "source": "https://poly.pizza/m/K2lXTYFSLC",
      "tris": 1304,
      "bbox": {
       "min": [
        -0.098,
        -1.046,
        -1.681
       ],
       "max": [
        0.098,
        0.555,
        3.741
       ]
      },
      "size": [
       0.196,
       1.601,
       5.422
      ],
      "length": 5.422,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.31,
      "muzzle": [
       0,
       0.385,
       3.741
      ],
      "suggestedLength": 0.88,
      "suggestedScale": 0.162,
      "rotatedY": -90,
      "materials": [
       "Wood",
       "Black",
       "DarkMetal",
       "Metal",
       "DarkWood"
      ],
      "anims": []
     },
     "bytes": 25868,
     "sha256": "7984b0e19c2a816a984f8877be1c0a85dc7c3cf96a2ade2468874268221fb812"
    },
    {
     "path": "smg.glb",
     "meta": {
      "role": "smg",
      "description": "기관단총(접이 개머리)",
      "creator": "Quaternius",
      "title": "Submachine Gun",
      "publicID": "7ehatxr7FY",
      "source": "https://poly.pizza/m/7ehatxr7FY",
      "tris": 1374,
      "bbox": {
       "min": [
        -0.159,
        -1.025,
        -1.739
       ],
       "max": [
        0.159,
        0.822,
        2.305
       ]
      },
      "size": [
       0.318,
       1.847,
       4.044
      ],
      "length": 4.044,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.43,
      "muzzle": [
       0,
       0.402,
       2.305
      ],
      "suggestedLength": 0.6,
      "suggestedScale": 0.148,
      "rotatedY": -90,
      "materials": [
       "DarkMetal",
       "Metal",
       "Black",
       "Grey"
      ],
      "anims": []
     },
     "bytes": 22580,
     "sha256": "a6062ee4db35343156648c601ba788e9662b419230e27d820d88fa1f66139e0e"
    },
    {
     "path": "smg-2.glb",
     "meta": {
      "role": "smg",
      "description": "기관단총(앞손잡이·개머리)",
      "creator": "Quaternius",
      "title": "Submachine Gun",
      "publicID": "nsP3JukU73",
      "source": "https://poly.pizza/m/nsP3JukU73",
      "tris": 1566,
      "bbox": {
       "min": [
        -0.159,
        -0.848,
        -1.839
       ],
       "max": [
        0.159,
        0.675,
        2.159
       ]
      },
      "size": [
       0.318,
       1.523,
       3.998
      ],
      "length": 3.998,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.46,
      "muzzle": [
       0,
       0.377,
       2.159
      ],
      "suggestedLength": 0.6,
      "suggestedScale": 0.15,
      "rotatedY": -90,
      "materials": [
       "DarkMetal",
       "Metal",
       "Black",
       "Grey"
      ],
      "anims": []
     },
     "bytes": 26656,
     "sha256": "72c2c6fa225dfac1f993469c929ddf06fafd79fb830cc8f58e6d6b97fd109331"
    },
    {
     "path": "pistol.glb",
     "meta": {
      "role": "pistol",
      "description": "권총(검정, 나무 손잡이)",
      "creator": "Quaternius",
      "title": "Pistol",
      "publicID": "Jyn9qex4ba",
      "source": "https://poly.pizza/m/Jyn9qex4ba",
      "tris": 1040,
      "bbox": {
       "min": [
        -0.162,
        -0.583,
        -0.364
       ],
       "max": [
        0.162,
        0.579,
        1.456
       ]
      },
      "size": [
       0.324,
       1.162,
       1.82
      ],
      "length": 1.82,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.2,
      "muzzle": [
       0,
       0.388,
       1.456
      ],
      "suggestedLength": 0.2,
      "suggestedScale": 0.11,
      "rotatedY": -90,
      "materials": [
       "DarkWood",
       "Metal",
       "Black",
       "DarkMetal",
       "Black2"
      ],
      "anims": []
     },
     "bytes": 23708,
     "sha256": "96f25ae5abc7d7e4b471eef75ef256e1c28b47991a34c086f5df122c8070ecf4"
    },
    {
     "path": "pistol-2.glb",
     "meta": {
      "role": "pistol",
      "description": "권총(긴 슬라이드, 레일)",
      "creator": "Quaternius",
      "title": "Pistol",
      "publicID": "52kQzphmeF",
      "source": "https://poly.pizza/m/52kQzphmeF",
      "tris": 1878,
      "bbox": {
       "min": [
        -0.154,
        -0.583,
        -0.416
       ],
       "max": [
        0.154,
        0.578,
        2.031
       ]
      },
      "size": [
       0.308,
       1.161,
       2.447
      ],
      "length": 2.447,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.17,
      "muzzle": [
       0,
       0.389,
       2.031
      ],
      "suggestedLength": 0.22,
      "suggestedScale": 0.09,
      "rotatedY": -90,
      "materials": [
       "Metal",
       "Black",
       "LightMetal"
      ],
      "anims": []
     },
     "bytes": 29748,
     "sha256": "61450e33611d85f4023ed0b02f9afc2045a55930109703293c5debbf98bb1b6a"
    },
    {
     "path": "revolver.glb",
     "meta": {
      "role": "pistol",
      "description": "리볼버",
      "creator": "Quaternius",
      "title": "Revolver",
      "publicID": "9C26wSpMS0",
      "source": "https://poly.pizza/m/9C26wSpMS0",
      "tris": 1434,
      "bbox": {
       "min": [
        -0.147,
        -0.477,
        -0.258
       ],
       "max": [
        0.147,
        0.505,
        1.727
       ]
      },
      "size": [
       0.294,
       0.982,
       1.985
      ],
      "length": 1.985,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.13,
      "muzzle": [
       0,
       0.316,
       1.727
      ],
      "suggestedLength": 0.3,
      "suggestedScale": 0.151,
      "rotatedY": -90,
      "materials": [
       "DarkWood",
       "Metal",
       "Grey",
       "LightMetal"
      ],
      "anims": []
     },
     "bytes": 27048,
     "sha256": "718d43810fe83f173d7774fb451885823d6d6b42afc1a8da96fab931dd8dfa71"
    },
    {
     "path": "shotgun.glb",
     "meta": {
      "role": "shotgun",
      "description": "펌프 산탄총(나무 개머리, 권총손잡이 없음 — 원점은 개머리 목)",
      "creator": "Quaternius",
      "title": "Shotgun",
      "publicID": "ZmPTnh7njL",
      "source": "https://poly.pizza/m/ZmPTnh7njL",
      "tris": 978,
      "bbox": {
       "min": [
        -0.123,
        -0.573,
        -1.446
       ],
       "max": [
        0.123,
        0.37,
        4.339
       ]
      },
      "size": [
       0.246,
       0.943,
       5.785
      ],
      "length": 5.785,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.25,
      "muzzle": [
       0,
       0.206,
       4.339
      ],
      "suggestedLength": 1,
      "suggestedScale": 0.173,
      "rotatedY": -90,
      "materials": [
       "Wood",
       "Metal",
       "DarkMetal",
       "Black"
      ],
      "anims": []
     },
     "bytes": 19388,
     "sha256": "ffba486468ca0a37482d7d818d19013651f6424898002395d8287ae53e44ce5c"
    },
    {
     "path": "suppressor.glb",
     "meta": {
      "role": "attachment",
      "description": "소음기(미터 단위, 길이 0.14 m). 원점 = 뒤 끝 가운데 — 총의 meta.muzzle 자리에(총 축척으로 나눠) 붙이면 +Z 로 뻗는다",
      "creator": "Pichuliru",
      "title": "Suppressor",
      "publicID": "VLiLj3j1tS",
      "source": "https://poly.pizza/m/VLiLj3j1tS",
      "tris": 192,
      "bbox": {
       "min": [
        -0.018,
        -0.018,
        0
       ],
       "max": [
        0.018,
        0.018,
        0.143
       ]
      },
      "size": [
       0.036,
       0.036,
       0.143
      ],
      "length": 0.143,
      "forward": "+Z",
      "up": "+Y",
      "origin": "rear-center(attach point)",
      "suggestedLength": 0.143,
      "suggestedScale": 1,
      "rotatedY": 180,
      "materials": [
       "M_PCL_Flat_Black_Lighter",
       "M_PCL_Flat_Black",
       "M_PCL_Flat_Grey_Dark"
      ],
      "anims": []
     },
     "bytes": 8632,
     "sha256": "6035e2aeef419c79e84fce7a43efc298f9f91ca645ee55a2ac5e5a17947ddb93"
    },
    {
     "path": "pistol-silenced.glb",
     "meta": {
      "role": "pistol",
      "description": "소음기 권총(pistol + Pichuliru 소음기, 소음기는 노드 'suppressor' — 숨기면 그냥 pistol). 총구(meta.muzzle)는 소음기 앞 끝",
      "creator": "Quaternius; Pichuliru",
      "title": "Pistol + Suppressor",
      "publicID": "Jyn9qex4ba + VLiLj3j1tS",
      "source": "https://poly.pizza/m/Jyn9qex4ba https://poly.pizza/m/VLiLj3j1tS",
      "tris": 1232,
      "bbox": {
       "min": [
        -0.162,
        -0.583,
        -0.364
       ],
       "max": [
        0.162,
        0.579,
        2.76
       ]
      },
      "size": [
       0.324,
       1.162,
       3.124
      ],
      "length": 3.124,
      "forward": "+Z",
      "up": "+Y",
      "origin": "grip(approx)",
      "gripU": 0.2,
      "muzzle": [
       0,
       0.388,
       2.76
      ],
      "suggestedLength": 0.343,
      "suggestedScale": 0.11,
      "rotatedY": -90,
      "nodes": [
       "pistol-silenced",
       "suppressor"
      ],
      "materials": [
       "DarkWood",
       "Metal",
       "Black",
       "DarkMetal",
       "Black2",
       "M_PCL_Flat_Black_Lighter",
       "M_PCL_Flat_Black",
       "M_PCL_Flat_Grey_Dark"
      ],
      "anims": []
     },
     "bytes": 31872,
     "sha256": "4e2ce8bab8c43daf6178703f14fde789c251fbe67328380206eaa1ff05cae417"
    }
   ],
   "base": "quaternius-guns/1/"
  },
  {
   "id": "quaternius-mechs",
   "version": 1,
   "kind": "model",
   "title": "Animated Mechs (Quaternius, Poly Pizza)",
   "author": "Quaternius",
   "license": "CC0-1.0",
   "source": "https://poly.pizza/u/Quaternius",
   "notes": "Quaternius 의 애니메이션 메크 4종(Poly Pizza 배포 glb). 조종석에 동물 조종사가 앉은 다리 넷 메크. 애니메이션 17개 유지(키프레임 resample, 클립 이름의 RobotArmature| 접두사는 뗐다 — Idle·Walk·Run·Shoot_Big …). 원점·축척은 원본 그대로(발 아래 원점, 키 약 3) — meta.bbox 참고. 앞쪽 +Z. 텍스처 아틀라스 1장 WebP, meshopt(GLTFLoader.setMeshoptDecoder 필요).",
   "tags": [
    "mech",
    "animated",
    "skinned",
    "low-poly",
    "quaternius"
   ],
   "files": [
    {
     "path": "mech-frog.glb",
     "meta": {
      "title": "Mech",
      "creator": "Quaternius",
      "publicID": "o3Ps8z8ByP",
      "page": "https://poly.pizza/m/o3Ps8z8ByP",
      "pilotNode": "FinnTheFrog",
      "forward": "+Z",
      "tris": 5846,
      "bbox": {
       "min": [
        -1.692,
        -0.019,
        -0.83
       ],
       "max": [
        1.692,
        3.003,
        1.311
       ]
      },
      "size": [
       3.383,
       3.022,
       2.141
      ],
      "anims": [
       "Dance",
       "Death",
       "Hello",
       "HitRecieve_1",
       "HitRecieve_2",
       "Idle",
       "Jump",
       "Jump_Landing",
       "Jump_NoHeight",
       "Kick",
       "No",
       "Pickup",
       "Run",
       "Shoot_Big",
       "Shoot_Small",
       "Walk",
       "Yes"
      ],
      "bones": 13,
      "origin": "original"
     },
     "bytes": 169476,
     "sha256": "4548266d8fbb6cb062e253a30a2bfb7ff94dd65b2681fd637aadf53bb72acc86"
    },
    {
     "path": "mech-red-panda.glb",
     "meta": {
      "title": "Mech",
      "creator": "Quaternius",
      "publicID": "D5wW2jDO42",
      "page": "https://poly.pizza/m/D5wW2jDO42",
      "pilotNode": "RaeTheRedPanda",
      "forward": "+Z",
      "tris": 4008,
      "bbox": {
       "min": [
        -1.335,
        -0.001,
        -0.719
       ],
       "max": [
        1.37,
        2.955,
        1.313
       ]
      },
      "size": [
       2.705,
       2.956,
       2.032
      ],
      "anims": [
       "Dance",
       "Death",
       "Hello",
       "HitRecieve_1",
       "HitRecieve_2",
       "Idle",
       "Jump",
       "Jump_Landing",
       "Jump_NoHeight",
       "Kick",
       "No",
       "Pickup",
       "Run",
       "Shoot_Big",
       "Shoot_Small",
       "Walk",
       "Yes"
      ],
      "bones": 13,
      "origin": "original"
     },
     "bytes": 149660,
     "sha256": "bf7f2a3bd5a3834a874d1f9a2ac164d1ae1b868d0cb202d354edcb34a18ef6ae"
    },
    {
     "path": "mech-bee.glb",
     "meta": {
      "title": "Mech",
      "creator": "Quaternius",
      "publicID": "4UvIHxnoSR",
      "page": "https://poly.pizza/m/4UvIHxnoSR",
      "pilotNode": "BarbaraTheBee",
      "forward": "+Z",
      "tris": 6756,
      "bbox": {
       "min": [
        -1.432,
        -0.001,
        -0.747
       ],
       "max": [
        1.479,
        2.872,
        1.426
       ]
      },
      "size": [
       2.912,
       2.873,
       2.173
      ],
      "anims": [
       "Dance",
       "Death",
       "Hello",
       "HitRecieve_1",
       "HitRecieve_2",
       "Idle",
       "Jump",
       "Jump_Landing",
       "Jump_NoHeight",
       "Kick",
       "No",
       "Pickup",
       "Run",
       "Shoot_Big",
       "Shoot_Small",
       "Walk",
       "Yes"
      ],
      "bones": 13,
      "origin": "original"
     },
     "bytes": 170020,
     "sha256": "b01b8707e0ad72b274c0699803cc84325a1b7aef0f9356f84ffc4b34f8b0bd1f"
    },
    {
     "path": "mech-flamingo.glb",
     "meta": {
      "title": "Mech",
      "creator": "Quaternius",
      "publicID": "tLs9mFVCSU",
      "page": "https://poly.pizza/m/tLs9mFVCSU",
      "pilotNode": "FernandoTheFlamingo",
      "forward": "+Z",
      "tris": 4086,
      "bbox": {
       "min": [
        -1.328,
        -0.001,
        -0.892
       ],
       "max": [
        1.379,
        3.502,
        1.303
       ]
      },
      "size": [
       2.707,
       3.503,
       2.195
      ],
      "anims": [
       "Dance",
       "Death",
       "Hello",
       "HitRecieve_1",
       "HitRecieve_2",
       "Idle",
       "Jump",
       "Jump_Landing",
       "Jump_NoHeight",
       "Kick",
       "No",
       "Pickup",
       "Run",
       "Shoot_Big",
       "Shoot_Small",
       "Walk",
       "Yes"
      ],
      "bones": 13,
      "origin": "original"
     },
     "bytes": 147864,
     "sha256": "711a58cdd1dd74733dc39c7804546266163aaf242641975e4346d867f2a8d60e"
    }
   ],
   "base": "quaternius-mechs/1/"
  },
  {
   "id": "quaternius-people",
   "version": 1,
   "kind": "model",
   "title": "Animated People (Quaternius, Poly Pizza)",
   "author": "Quaternius",
   "license": "CC0-1.0",
   "source": "https://poly.pizza/u/Quaternius",
   "notes": "Quaternius 의 애니메이션 사람 10명(Poly Pizza 배포 glb — 정장 보스·SWAT 경비·펑크 남녀·작업자·시민 남녀 셋·후드티·두건 쓴 잠입자). 모두 같은 뼈대(CharacterArmature, 뼈 62개 — 이름까지 같다)와 같은 클립 24개: Death, Gun_Shoot, HitRecieve, HitRecieve_2, Idle, Idle_Gun, Idle_Gun_Pointing, Idle_Gun_Shoot, Idle_Neutral, Idle_Sword, Interact, Kick_Left, Kick_Right, Punch_Left, Punch_Right, Roll, Run, Run_Back, Run_Left, Run_Right, Run_Shoot, Sword_Slash, Walk, Wave. 한 파일의 AnimationClip 을 다른 캐릭터의 AnimationMixer 에 그대로 쓸 수 있다. 클립 이름의 CharacterArmature| 접두사는 뗐다. 쓸 만한 대응: 대기 Idle(무기 없이 Idle_Neutral), 걷기 Walk, 뛰기 Run(+Run_Back/Left/Right), 죽음 Death, 총 쏘기 Gun_Shoot·Idle_Gun_Shoot·Run_Shoot, 조준 Idle_Gun_Pointing·Idle_Gun, 주먹 Punch_Left/Right, 발차기 Kick_Left/Right, 근접 베기(칼 제압) Sword_Slash, 피격 HitRecieve·HitRecieve_2, 구르기 Roll, 조작(해킹·줍기) Interact, 손 흔들기 Wave. 웅크리기·살금살금·점프 클립은 이 계열에 없다 — 게임이 Walk 를 느리게 + 엉덩이(Hips) 높이를 낮추는 식으로 만든다. 총 메시는 없다 — 손 뼈(meta 없음, 이름 Wrist.R/Fist.R 등)에 붙인다. 원점·축척 원본 그대로(발밑 y=0, 키 약 1.8 — 1 단위 = 1 m), 앞쪽 +Z. 텍스처 없음 — 단색 재질(meta.materials, 예: hoodie 의 Purple 을 검게 칠하면 어두운 후드). hooded-rogue 는 손에 Sword 노드(뼈에 붙은 정적 메시, meta.props)가 있다 — visible=false 로 숨길 수 있다. 키프레임 resample, meshopt(GLTFLoader.setMeshoptDecoder 필요). 처음 쓴 게임: VERDICT(verdict). 만드는 법: node tools/models/quaternius-people.mjs fetch && node tools/models/quaternius-people.mjs build",
   "tags": [
    "character",
    "human",
    "animated",
    "skinned",
    "shared-rig",
    "city",
    "low-poly",
    "quaternius"
   ],
   "files": [
    {
     "path": "business-man.glb",
     "meta": {
      "title": "Business Man",
      "creator": "Quaternius",
      "publicID": "JFrLIKqvCH",
      "page": "https://poly.pizza/m/JFrLIKqvCH",
      "use": "boss",
      "description": "검은 정장·넥타이 남자(범죄 조직 보스·표적·사업가)",
      "tris": 6634,
      "height": 1.824,
      "bbox": {
       "min": [
        -0.275,
        -0.001,
        -0.171
       ],
       "max": [
        0.331,
        1.824,
        0.472
       ]
      },
      "size": [
       0.606,
       1.825,
       0.643
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.042,
       "Gun_Shoot": 0.583,
       "HitRecieve": 0.542,
       "HitRecieve_2": 0.542,
       "Idle": 1.667,
       "Idle_Gun": 1.667,
       "Idle_Gun_Pointing": 1.667,
       "Idle_Gun_Shoot": 0.667,
       "Idle_Neutral": 1.667,
       "Idle_Sword": 1.667,
       "Interact": 1.25,
       "Kick_Left": 0.917,
       "Kick_Right": 0.917,
       "Punch_Left": 0.833,
       "Punch_Right": 0.833,
       "Roll": 1.333,
       "Run": 0.792,
       "Run_Back": 0.833,
       "Run_Left": 0.792,
       "Run_Right": 0.792,
       "Run_Shoot": 0.833,
       "Sword_Slash": 1,
       "Walk": 1.333,
       "Wave": 1.667
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Suit_Legs",
       "Suit_Feet",
       "Suit_Body",
       "Suit_Head"
      ],
      "materials": [
       "Suit",
       "Black",
       "White",
       "Tie",
       "Skin",
       "Hair",
       "Eyebrows",
       "Eye"
      ]
     },
     "bytes": 538564,
     "sha256": "1a0fc6594009493b2cd64d2930aeb34e5993fdabd543b50c2746080fc5404fbd"
    },
    {
     "path": "swat.glb",
     "meta": {
      "title": "SWAT",
      "creator": "Quaternius",
      "publicID": "Btfn3G5Xv4",
      "page": "https://poly.pizza/m/Btfn3G5Xv4",
      "use": "guard",
      "description": "검은 전술복·헬멧 SWAT(경비병·특수부대 적)",
      "tris": 7752,
      "height": 1.818,
      "bbox": {
       "min": [
        -0.296,
        -0.002,
        -0.171
       ],
       "max": [
        0.324,
        1.818,
        0.463
       ]
      },
      "size": [
       0.62,
       1.82,
       0.634
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.042,
       "Gun_Shoot": 0.583,
       "HitRecieve": 0.542,
       "HitRecieve_2": 0.542,
       "Idle": 1.667,
       "Idle_Gun": 1.667,
       "Idle_Gun_Pointing": 1.667,
       "Idle_Gun_Shoot": 0.667,
       "Idle_Neutral": 1.667,
       "Idle_Sword": 1.667,
       "Interact": 1.25,
       "Kick_Left": 0.917,
       "Kick_Right": 0.917,
       "Punch_Left": 0.833,
       "Punch_Right": 0.833,
       "Roll": 1.333,
       "Run": 0.792,
       "Run_Back": 0.833,
       "Run_Left": 0.792,
       "Run_Right": 0.792,
       "Run_Shoot": 0.833,
       "Sword_Slash": 1,
       "Walk": 1.333,
       "Wave": 1.667
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Swat_Legs",
       "Swat_Feet",
       "Swat_Body",
       "Swat_Head"
      ],
      "materials": [
       "Swat",
       "Swat_Black",
       "Skin",
       "Visor"
      ]
     },
     "bytes": 550456,
     "sha256": "c26fede115b192c02f5b0b3bf95e4eac446d4000588a910b8af7e640ccc8c2e1"
    },
    {
     "path": "punk-man.glb",
     "meta": {
      "title": "Punk",
      "creator": "Quaternius",
      "publicID": "BTALZymknF",
      "page": "https://poly.pizza/m/BTALZymknF",
      "use": "thug",
      "description": "모히칸 펑크 남자(조직 하수인·불량배)",
      "tris": 5500,
      "height": 1.932,
      "bbox": {
       "min": [
        -0.276,
        -0.004,
        -0.171
       ],
       "max": [
        0.331,
        1.932,
        0.472
       ]
      },
      "size": [
       0.607,
       1.936,
       0.643
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.042,
       "Gun_Shoot": 0.583,
       "HitRecieve": 0.542,
       "HitRecieve_2": 0.542,
       "Idle": 1.667,
       "Idle_Gun": 1.667,
       "Idle_Gun_Pointing": 1.667,
       "Idle_Gun_Shoot": 0.667,
       "Idle_Neutral": 1.667,
       "Idle_Sword": 1.667,
       "Interact": 1.25,
       "Kick_Left": 0.917,
       "Kick_Right": 0.917,
       "Punch_Left": 0.833,
       "Punch_Right": 0.833,
       "Roll": 1.333,
       "Run": 0.792,
       "Run_Back": 0.833,
       "Run_Left": 0.792,
       "Run_Right": 0.792,
       "Run_Shoot": 0.833,
       "Sword_Slash": 1,
       "Walk": 1.333,
       "Wave": 1.667
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Punk_Feet",
       "Punk_Legs",
       "Punk_Body",
       "Punk_Head"
      ],
      "materials": [
       "Black",
       "Skin",
       "LightBlue",
       "White",
       "Red_Dark",
       "Earrings",
       "Red",
       "Eyebrows",
       "Eye"
      ]
     },
     "bytes": 520180,
     "sha256": "b3335d345b33c4b505a494026aede0a6d0736fb30b461444255670e1567ca610"
    },
    {
     "path": "punk-woman.glb",
     "meta": {
      "title": "Punk",
      "creator": "Quaternius",
      "publicID": "djXoqejw6w",
      "page": "https://poly.pizza/m/djXoqejw6w",
      "use": "thug",
      "description": "모히칸 펑크 여자(조직 하수인·불량배)",
      "tris": 5956,
      "height": 1.918,
      "bbox": {
       "min": [
        -0.251,
        0,
        -0.164
       ],
       "max": [
        0.259,
        1.918,
        0.438
       ]
      },
      "size": [
       0.51,
       1.918,
       0.602
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.333,
       "Gun_Shoot": 0.75,
       "HitRecieve": 0.708,
       "HitRecieve_2": 0.708,
       "Idle": 2.083,
       "Idle_Gun": 2.083,
       "Idle_Gun_Pointing": 2.083,
       "Idle_Gun_Shoot": 0.833,
       "Idle_Neutral": 2.083,
       "Idle_Sword": 2.083,
       "Interact": 1.583,
       "Kick_Left": 1.167,
       "Kick_Right": 1.167,
       "Punch_Left": 1.042,
       "Punch_Right": 1.042,
       "Roll": 1.667,
       "Run": 1,
       "Run_Back": 1.042,
       "Run_Left": 1,
       "Run_Right": 1,
       "Run_Shoot": 1.042,
       "Sword_Slash": 1.292,
       "Walk": 1.667,
       "Wave": 2.083
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Punk_Body",
       "Punk_Feet",
       "Punk_Head",
       "Punk_Legs"
      ],
      "materials": [
       "Skin",
       "Pink",
       "Black",
       "Grey",
       "Hair_Brown",
       "Brown"
      ]
     },
     "bytes": 539436,
     "sha256": "1f6d0d8bfdac6211484f5fa75154ff8fa272c9582e53623c9a08625867ad06f6"
    },
    {
     "path": "worker.glb",
     "meta": {
      "title": "Worker",
      "creator": "Quaternius",
      "publicID": "Yg2bQZO6Hj",
      "page": "https://poly.pizza/m/Yg2bQZO6Hj",
      "use": "worker",
      "description": "안전모·형광 조끼 작업자(공사장·항구·공장)",
      "tris": 5240,
      "height": 1.83,
      "bbox": {
       "min": [
        -0.276,
        -0.004,
        -0.166
       ],
       "max": [
        0.331,
        1.83,
        0.472
       ]
      },
      "size": [
       0.607,
       1.834,
       0.638
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.042,
       "Gun_Shoot": 0.583,
       "HitRecieve": 0.542,
       "HitRecieve_2": 0.542,
       "Idle": 1.667,
       "Idle_Gun": 1.667,
       "Idle_Gun_Pointing": 1.667,
       "Idle_Gun_Shoot": 0.667,
       "Idle_Neutral": 1.667,
       "Idle_Sword": 1.667,
       "Interact": 1.25,
       "Kick_Left": 0.917,
       "Kick_Right": 0.917,
       "Punch_Left": 0.833,
       "Punch_Right": 0.833,
       "Roll": 1.333,
       "Run": 0.792,
       "Run_Back": 0.833,
       "Run_Left": 0.792,
       "Run_Right": 0.792,
       "Run_Shoot": 0.833,
       "Sword_Slash": 1,
       "Walk": 1.333,
       "Wave": 1.667
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Worker_Feet",
       "Worker_Legs",
       "Worker_Body",
       "Worker_Head"
      ],
      "materials": [
       "Black",
       "Grey",
       "Brown2",
       "Brown",
       "Worker_Yellow",
       "Worker_Vest",
       "LightBrown",
       "Skin",
       "Eyebrows",
       "Eye",
       "Moustache"
      ]
     },
     "bytes": 516064,
     "sha256": "ec0197f58262e957cd409809f10fd371d146529b3c07f543de22bd7b31cf6368"
    },
    {
     "path": "casual-man.glb",
     "meta": {
      "title": "Casual Character",
      "creator": "Quaternius",
      "publicID": "kZ3DmIoGip",
      "page": "https://poly.pizza/m/kZ3DmIoGip",
      "use": "civilian",
      "description": "티셔츠·청바지 남자(시민)",
      "tris": 5776,
      "height": 1.822,
      "bbox": {
       "min": [
        -0.276,
        -0.002,
        -0.171
       ],
       "max": [
        0.331,
        1.822,
        0.472
       ]
      },
      "size": [
       0.607,
       1.824,
       0.643
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.042,
       "Gun_Shoot": 0.583,
       "HitRecieve": 0.542,
       "HitRecieve_2": 0.542,
       "Idle": 1.667,
       "Idle_Gun": 1.667,
       "Idle_Gun_Pointing": 1.667,
       "Idle_Gun_Shoot": 0.667,
       "Idle_Neutral": 1.667,
       "Idle_Sword": 1.667,
       "Interact": 1.25,
       "Kick_Left": 0.917,
       "Kick_Right": 0.917,
       "Punch_Left": 0.833,
       "Punch_Right": 0.833,
       "Roll": 1.333,
       "Run": 0.792,
       "Run_Back": 0.833,
       "Run_Left": 0.792,
       "Run_Right": 0.792,
       "Run_Shoot": 0.833,
       "Sword_Slash": 1,
       "Walk": 1.333,
       "Wave": 1.667
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Casual2_Feet",
       "Casual2_Body",
       "Casual2_Head",
       "Casual2_Legs"
      ],
      "materials": [
       "White",
       "Red_Dark",
       "LightBrown",
       "Skin",
       "Skin_Darker",
       "Eyebrows",
       "Eye",
       "Hair",
       "LightBlue"
      ]
     },
     "bytes": 520784,
     "sha256": "40b3c190a9493f89a6ec4c933a96f5123741565dc3b4df9fa10f3b1eb78973f8"
    },
    {
     "path": "woman-casual.glb",
     "meta": {
      "title": "Animated Woman",
      "creator": "Quaternius",
      "publicID": "qJ2gsTUBHL",
      "page": "https://poly.pizza/m/qJ2gsTUBHL",
      "use": "civilian",
      "description": "흰 상의·주황 바지 여자(시민)",
      "tris": 6424,
      "height": 1.801,
      "bbox": {
       "min": [
        -0.251,
        -0.009,
        -0.169
       ],
       "max": [
        0.273,
        1.801,
        0.451
       ]
      },
      "size": [
       0.524,
       1.81,
       0.62
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.333,
       "Gun_Shoot": 0.75,
       "HitRecieve": 0.708,
       "HitRecieve_2": 0.708,
       "Idle": 2.083,
       "Idle_Gun": 2.083,
       "Idle_Gun_Pointing": 2.083,
       "Idle_Gun_Shoot": 0.833,
       "Idle_Neutral": 2.083,
       "Idle_Sword": 2.083,
       "Interact": 1.583,
       "Kick_Left": 1.167,
       "Kick_Right": 1.167,
       "Punch_Left": 1.042,
       "Punch_Right": 1.042,
       "Roll": 1.667,
       "Run": 1,
       "Run_Back": 1.042,
       "Run_Left": 1,
       "Run_Right": 1,
       "Run_Shoot": 1.042,
       "Sword_Slash": 1.292,
       "Walk": 1.667,
       "Wave": 2.083
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Casual_Body",
       "Casual_Feet",
       "Casual_Head",
       "Casual_Legs"
      ],
      "materials": [
       "White",
       "Skin",
       "Grey",
       "Hair_Blond",
       "Hair_Brown",
       "Brown",
       "Orange"
      ]
     },
     "bytes": 540768,
     "sha256": "32952ae21f88d9c3936d1fe2a7d6325c3d8434f5ca0338bf1fad50ea260689ed"
    },
    {
     "path": "woman-dress.glb",
     "meta": {
      "title": "Animated Woman",
      "creator": "Quaternius",
      "publicID": "nIItLV9nxS",
      "page": "https://poly.pizza/m/nIItLV9nxS",
      "use": "civilian",
      "description": "초록 원피스 여자(시민)",
      "tris": 6108,
      "height": 1.8,
      "bbox": {
       "min": [
        -0.251,
        0,
        -0.158
       ],
       "max": [
        0.283,
        1.8,
        0.435
       ]
      },
      "size": [
       0.534,
       1.8,
       0.593
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.333,
       "Gun_Shoot": 0.75,
       "HitRecieve": 0.708,
       "HitRecieve_2": 0.708,
       "Idle": 2.083,
       "Idle_Gun": 2.083,
       "Idle_Gun_Pointing": 2.083,
       "Idle_Gun_Shoot": 0.833,
       "Idle_Neutral": 2.083,
       "Idle_Sword": 2.083,
       "Interact": 1.583,
       "Kick_Left": 1.167,
       "Kick_Right": 1.167,
       "Punch_Left": 1.042,
       "Punch_Right": 1.042,
       "Roll": 1.667,
       "Run": 1,
       "Run_Back": 1.042,
       "Run_Left": 1,
       "Run_Right": 1,
       "Run_Shoot": 1.042,
       "Sword_Slash": 1.292,
       "Walk": 1.667,
       "Wave": 2.083
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Formad_Head",
       "Formal_Body",
       "Formal_Feet",
       "Formal_Legs"
      ],
      "materials": [
       "Skin",
       "Red",
       "Brown",
       "LimeGreen",
       "Gold"
      ]
     },
     "bytes": 533820,
     "sha256": "6489d8c13ccff45ceb4d97b30866aefbcb9d0a62739f72c3e43ee62f3a322067"
    },
    {
     "path": "hoodie.glb",
     "meta": {
      "title": "Hoodie Character",
      "creator": "Quaternius",
      "publicID": "gKLBoRsyKe",
      "page": "https://poly.pizza/m/gKLBoRsyKe",
      "use": "hero",
      "description": "후드티·반바지 남자 — 주인공 후보(재질 Purple 을 검게 칠하면 어두운 후드)",
      "tris": 6206,
      "height": 1.832,
      "bbox": {
       "min": [
        -0.285,
        -0.004,
        -0.171
       ],
       "max": [
        0.331,
        1.832,
        0.472
       ]
      },
      "size": [
       0.616,
       1.836,
       0.643
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.042,
       "Gun_Shoot": 0.583,
       "HitRecieve": 0.542,
       "HitRecieve_2": 0.542,
       "Idle": 1.667,
       "Idle_Gun": 1.667,
       "Idle_Gun_Pointing": 1.667,
       "Idle_Gun_Shoot": 0.667,
       "Idle_Neutral": 1.667,
       "Idle_Sword": 1.667,
       "Interact": 1.25,
       "Kick_Left": 0.917,
       "Kick_Right": 0.917,
       "Punch_Left": 0.833,
       "Punch_Right": 0.833,
       "Roll": 1.333,
       "Run": 0.792,
       "Run_Back": 0.833,
       "Run_Left": 0.792,
       "Run_Right": 0.792,
       "Run_Shoot": 0.833,
       "Sword_Slash": 1,
       "Walk": 1.333,
       "Wave": 1.667
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Casual_Feet",
       "Casual_Legs",
       "Casual_Head",
       "Casual_Body"
      ],
      "materials": [
       "White",
       "Purple",
       "Skin",
       "LightBlue",
       "Eyebrows",
       "Eye",
       "Hair"
      ]
     },
     "bytes": 531492,
     "sha256": "437ca83abce8a99486a224056c23c5d9095dec6e52539d817a601403be608ee0"
    },
    {
     "path": "hooded-rogue.glb",
     "meta": {
      "title": "Hooded Adventurer",
      "creator": "Quaternius",
      "publicID": "y9KWOVG21R",
      "page": "https://poly.pizza/m/y9KWOVG21R",
      "use": "hero",
      "description": "두건 쓴 어두운 가죽옷 여자(손에 Sword 노드 — 숨길 수 있다) — 잠입 주인공 후보",
      "tris": 7276,
      "height": 1.835,
      "bbox": {
       "min": [
        -0.301,
        -0.002,
        -0.158
       ],
       "max": [
        0.274,
        1.835,
        0.838
       ]
      },
      "size": [
       0.575,
       1.837,
       0.996
      ],
      "forward": "+Z",
      "origin": "feet (원본 그대로, y=0 발바닥·x=z=0 몸 중심)",
      "anims": [
       "Death",
       "Gun_Shoot",
       "HitRecieve",
       "HitRecieve_2",
       "Idle",
       "Idle_Gun",
       "Idle_Gun_Pointing",
       "Idle_Gun_Shoot",
       "Idle_Neutral",
       "Idle_Sword",
       "Interact",
       "Kick_Left",
       "Kick_Right",
       "Punch_Left",
       "Punch_Right",
       "Roll",
       "Run",
       "Run_Back",
       "Run_Left",
       "Run_Right",
       "Run_Shoot",
       "Sword_Slash",
       "Walk",
       "Wave"
      ],
      "animDurations": {
       "Death": 1.333,
       "Gun_Shoot": 0.75,
       "HitRecieve": 0.708,
       "HitRecieve_2": 0.708,
       "Idle": 2.083,
       "Idle_Gun": 2.083,
       "Idle_Gun_Pointing": 2.083,
       "Idle_Gun_Shoot": 0.833,
       "Idle_Neutral": 2.083,
       "Idle_Sword": 2.083,
       "Interact": 1.583,
       "Kick_Left": 1.167,
       "Kick_Right": 1.167,
       "Punch_Left": 1.042,
       "Punch_Right": 1.042,
       "Roll": 1.667,
       "Run": 1,
       "Run_Back": 1.042,
       "Run_Left": 1,
       "Run_Right": 1,
       "Run_Shoot": 1.042,
       "Sword_Slash": 1.292,
       "Walk": 1.667,
       "Wave": 2.083
      },
      "rig": "quaternius-modular-62",
      "bones": 62,
      "skinnedMeshes": [
       "Medieval_Body",
       "Medieval_Feet",
       "Medieval_Head",
       "Medieval_Legs"
      ],
      "materials": [
       "Metal",
       "Brown2",
       "Metal_Dark",
       "Black",
       "LightBrown",
       "DarkBrown",
       "Skin",
       "Gold",
       "White",
       "Brown"
      ],
      "props": [
       {
        "node": "Sword",
        "bone": "Middle1.R"
       }
      ]
     },
     "bytes": 568596,
     "sha256": "c61d21b7f03543e7894112b93459109900dd2beff6290d349015aef7ed98acd4"
    }
   ],
   "base": "quaternius-people/1/"
  },
  {
   "id": "quaternius-scifi",
   "version": 1,
   "kind": "model",
   "title": "Sci-fi Vehicles, Base & Props (Quaternius · Kenney, Poly Pizza)",
   "author": "Quaternius; Kenney (파일별 meta.creator)",
   "license": "CC0-1.0",
   "source": "https://poly.pizza/u/Quaternius",
   "notes": "Poly Pizza 에 올라온 Quaternius·Kenney 의 CC0 소품(파일별 meta.creator·title·publicID). 정적 모델은 원점 = 바닥 중심(경계 상자 아래 가운데), 애니메이션 모델(로봇·탱크 4종)은 노드 구조·애니메이션을 원본 그대로 두고(클립 이름의 …Armature| 접두사만 뗌) 원점도 원본(이미 바닥)이다. 앞쪽은 모두 +Z — 원본이 −X 를 보던 탱크 1·2·4·5 는 Y 축 +90° 회전 루트 노드(<이름>_forward)를 더했다. 축척은 원본 단위(meta.bbox·size 참고 — 모델마다 다르니 게임이 맞춘다. 탱크는 길이 약 15, 로버 약 4). 재질 대부분은 단색(텍스처 없음)이라 게임이 재질 색으로 칠할 수 있다. 텍스처는 WebP(최대 512), meshopt 압축(GLTFLoader.setMeshoptDecoder 필요).",
   "tags": [
    "sci-fi",
    "vehicle",
    "base",
    "props",
    "rocks",
    "robot",
    "low-poly",
    "quaternius",
    "kenney"
   ],
   "files": [
    {
     "path": "rover-1.glb",
     "meta": {
      "title": "Rover",
      "creator": "Quaternius",
      "publicID": "tzOLXetacM",
      "page": "https://poly.pizza/m/tzOLXetacM",
      "forward": "+Z",
      "tris": 7346,
      "bbox": {
       "min": [
        -2.291,
        0,
        -2.58
       ],
       "max": [
        2.291,
        4.883,
        2.58
       ]
      },
      "size": [
       4.582,
       4.883,
       5.159
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 82992,
     "sha256": "5cc2177d8f004674ed1c7dd26f0f2efdc64c0c8c7fbb1d0b40029461c2869e44"
    },
    {
     "path": "rover-2.glb",
     "meta": {
      "title": "Rover",
      "creator": "Quaternius",
      "publicID": "WRd1piJOfh",
      "page": "https://poly.pizza/m/WRd1piJOfh",
      "forward": "+Z",
      "tris": 8032,
      "bbox": {
       "min": [
        -2.291,
        0,
        -3.281
       ],
       "max": [
        2.291,
        4.882,
        3.281
       ]
      },
      "size": [
       4.582,
       4.882,
       6.562
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 90804,
     "sha256": "96eed4bbe2f65d5a0e731393ab3ff1f53b1064859158dfc1d25862f417995f46"
    },
    {
     "path": "rover-3.glb",
     "meta": {
      "title": "Round Rover",
      "creator": "Quaternius",
      "publicID": "ejdkcNgMpr",
      "page": "https://poly.pizza/m/ejdkcNgMpr",
      "forward": "+Z",
      "tris": 7052,
      "bbox": {
       "min": [
        -2.894,
        0,
        -1.845
       ],
       "max": [
        2.894,
        5.168,
        1.845
       ]
      },
      "size": [
       5.788,
       5.168,
       3.691
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 80704,
     "sha256": "634d21d59eef7470bceea422731b8e7c21e688fe099aedf26e35abfc90eb6615"
    },
    {
     "path": "tank-1.glb",
     "meta": {
      "title": "Tank",
      "creator": "Quaternius",
      "publicID": "FA5daiyZQq",
      "page": "https://poly.pizza/m/FA5daiyZQq",
      "forward": "+Z",
      "rotatedY": 90,
      "tris": 7222,
      "bbox": {
       "min": [
        -5.116,
        -0.013,
        -7.373
       ],
       "max": [
        4.976,
        4.607,
        10.306
       ]
      },
      "size": [
       10.092,
       4.62,
       17.679
      ],
      "anims": [
       "Tank_Backwards",
       "Tank_Forward",
       "Tank_TurningLeft",
       "Tank_TurningRight"
      ],
      "bones": 45,
      "origin": "original"
     },
     "bytes": 166248,
     "sha256": "969ec6ae7a25f15eedf4759f0380c24e56d693d4ac2df477c16779a658190af8"
    },
    {
     "path": "tank-2.glb",
     "meta": {
      "title": "Tank",
      "creator": "Quaternius",
      "publicID": "cW3zvvkMOM",
      "page": "https://poly.pizza/m/cW3zvvkMOM",
      "forward": "+Z",
      "rotatedY": 90,
      "tris": 6544,
      "bbox": {
       "min": [
        -5.339,
        -0.023,
        -7.437
       ],
       "max": [
        5.204,
        6.737,
        7.437
       ]
      },
      "size": [
       10.543,
       6.76,
       14.874
      ],
      "anims": [
       "Tank_Backwards",
       "Tank_Forward",
       "Tank_TurningLeft",
       "Tank_TurningRight"
      ],
      "bones": 45,
      "origin": "original"
     },
     "bytes": 155636,
     "sha256": "77310821f27e73ccfbf05f4f7b3da4f182a964d92f79f1eb18e3862c1e9e7374"
    },
    {
     "path": "tank-3.glb",
     "meta": {
      "title": "Tank",
      "creator": "Quaternius",
      "publicID": "Dc4k4CooN3",
      "page": "https://poly.pizza/m/Dc4k4CooN3",
      "forward": "+Z",
      "tris": 2800,
      "bbox": {
       "min": [
        -1.186,
        0,
        -1.251
       ],
       "max": [
        1.186,
        2.144,
        1.251
       ]
      },
      "size": [
       2.372,
       2.144,
       2.503
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 33792,
     "sha256": "b6343b734ce96a4b1285bf136e3a91873d3b6b3dbd6fab7b4c4817eea9eb4695"
    },
    {
     "path": "tank-4.glb",
     "meta": {
      "title": "Tank",
      "creator": "Quaternius",
      "publicID": "jWS1CLA0RO",
      "page": "https://poly.pizza/m/jWS1CLA0RO",
      "forward": "+Z",
      "rotatedY": 90,
      "tris": 6064,
      "bbox": {
       "min": [
        -5.116,
        -0.032,
        -7.395
       ],
       "max": [
        4.976,
        7.465,
        9.829
       ]
      },
      "size": [
       10.092,
       7.496,
       17.224
      ],
      "anims": [
       "Tank_Backwards",
       "Tank_Forward",
       "Tank_TurningLeft",
       "Tank_TurningRight"
      ],
      "bones": 45,
      "origin": "original"
     },
     "bytes": 152804,
     "sha256": "eeeb969eb30f8c9fa05bedbe38be6830ed8b356e598d5f09d25bd60dd910b64c"
    },
    {
     "path": "tank-5.glb",
     "meta": {
      "title": "Tank",
      "creator": "Quaternius",
      "publicID": "uYHpj7lz1J",
      "page": "https://poly.pizza/m/uYHpj7lz1J",
      "forward": "+Z",
      "rotatedY": 90,
      "tris": 11402,
      "bbox": {
       "min": [
        -5.042,
        -0.032,
        -7.395
       ],
       "max": [
        4.938,
        5.965,
        8.765
       ]
      },
      "size": [
       9.979,
       5.997,
       16.16
      ],
      "anims": [
       "Tank_Backwards",
       "Tank_Forward",
       "Tank_TurningLeft",
       "Tank_TurningRight"
      ],
      "bones": 45,
      "origin": "original"
     },
     "bytes": 189232,
     "sha256": "55056af604292247b44447f2a9db3df0761cb4c0f78afb64614c8989d727a711"
    },
    {
     "path": "gas-tank.glb",
     "meta": {
      "title": "Tank",
      "creator": "Quaternius",
      "publicID": "j59k7ctnZM",
      "page": "https://poly.pizza/m/j59k7ctnZM",
      "tris": 1392,
      "bbox": {
       "min": [
        -0.285,
        0,
        -0.309
       ],
       "max": [
        0.285,
        0.831,
        0.309
       ]
      },
      "size": [
       0.569,
       0.831,
       0.619
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 19468,
     "sha256": "ad53c9dccd2a9013d572ce00baef9f13c9adca6a30772d76ddbac66a6dd7ee7a"
    },
    {
     "path": "spaceship-1.glb",
     "meta": {
      "title": "Spaceship",
      "creator": "Quaternius",
      "publicID": "uCeLfsdmNP",
      "page": "https://poly.pizza/m/uCeLfsdmNP",
      "forward": "+Z",
      "tris": 1614,
      "bbox": {
       "min": [
        -4.974,
        0,
        -5.583
       ],
       "max": [
        4.974,
        2.35,
        5.583
       ]
      },
      "size": [
       9.949,
       2.35,
       11.166
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 27500,
     "sha256": "a348975f41032aec1770d86800cd56ba995879566ccb34e04cb8edcc9e649b42"
    },
    {
     "path": "spaceship-2.glb",
     "meta": {
      "title": "Spaceship",
      "creator": "Quaternius",
      "publicID": "xNbtFQwirO",
      "page": "https://poly.pizza/m/xNbtFQwirO",
      "forward": "+Z",
      "tris": 590,
      "bbox": {
       "min": [
        -5.312,
        0,
        -3.781
       ],
       "max": [
        5.312,
        2.215,
        3.781
       ]
      },
      "size": [
       10.624,
       2.215,
       7.561
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 13220,
     "sha256": "2087050eb661337d6d5f54ff096ee103d8bc625ac1de2ad51e82076ca129aa29"
    },
    {
     "path": "spaceship-3.glb",
     "meta": {
      "title": "Spaceship",
      "creator": "Quaternius",
      "publicID": "PQzePrvBCD",
      "page": "https://poly.pizza/m/PQzePrvBCD",
      "forward": "+Z",
      "tris": 1190,
      "bbox": {
       "min": [
        -5.191,
        0,
        -4.605
       ],
       "max": [
        5.191,
        1.858,
        4.605
       ]
      },
      "size": [
       10.382,
       1.858,
       9.21
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 22224,
     "sha256": "df3f4d3e1db2f354e4e38a86b608d2f508fd344f4cb9f99e2a53b61c16767a22"
    },
    {
     "path": "spaceship-4.glb",
     "meta": {
      "title": "Spaceship",
      "creator": "Quaternius",
      "publicID": "htfBk9vPfw",
      "page": "https://poly.pizza/m/htfBk9vPfw",
      "forward": "+Z",
      "tris": 540,
      "bbox": {
       "min": [
        -1.684,
        0,
        -3.641
       ],
       "max": [
        1.684,
        1.067,
        3.641
       ]
      },
      "size": [
       3.367,
       1.067,
       7.282
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 12460,
     "sha256": "c45bbdbcfd22de83aa4d0c1070a052cef7680b99da941342e055b3eb1eb3e4f6"
    },
    {
     "path": "spaceship-5.glb",
     "meta": {
      "title": "Spaceship",
      "creator": "Quaternius",
      "publicID": "VSxUAFhzbA",
      "page": "https://poly.pizza/m/VSxUAFhzbA",
      "forward": "+Z",
      "tris": 3376,
      "bbox": {
       "min": [
        -5.811,
        0,
        -2.054
       ],
       "max": [
        5.811,
        3.056,
        2.054
       ]
      },
      "size": [
       11.621,
       3.056,
       4.109
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 43092,
     "sha256": "ac8702b767bded66fc8ffd564361fc529c1cfb5337a1374d79a167eb2e341e4e"
    },
    {
     "path": "dome-geodesic.glb",
     "meta": {
      "title": "Geodesic Dome",
      "creator": "Quaternius",
      "publicID": "T7Ge6maWq4",
      "page": "https://poly.pizza/m/T7Ge6maWq4",
      "tris": 1432,
      "bbox": {
       "min": [
        -4.265,
        0,
        -4.265
       ],
       "max": [
        4.265,
        5.281,
        4.265
       ]
      },
      "size": [
       8.53,
       5.281,
       8.53
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 23876,
     "sha256": "fba095f158ae7deb04d69968f7622cdf5a23571115f712814381e9eb016a1887"
    },
    {
     "path": "base-large.glb",
     "meta": {
      "title": "Base Large",
      "creator": "Quaternius",
      "publicID": "UyH95ZAeJ2",
      "page": "https://poly.pizza/m/UyH95ZAeJ2",
      "tris": 2790,
      "bbox": {
       "min": [
        -4.265,
        0,
        -4.265
       ],
       "max": [
        4.265,
        4.971,
        4.265
       ]
      },
      "size": [
       8.53,
       4.972,
       8.53
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 36108,
     "sha256": "9b857f564fb1c7cba3c1c17cfef4bb5eb38411a4dc157b0ee02c229162b01505"
    },
    {
     "path": "solar-panel-1.glb",
     "meta": {
      "title": "Solar Panel",
      "creator": "Quaternius",
      "publicID": "ah89Y79JdT",
      "page": "https://poly.pizza/m/ah89Y79JdT",
      "tris": 812,
      "bbox": {
       "min": [
        -1.364,
        0,
        -0.867
       ],
       "max": [
        1.364,
        1.701,
        0.867
       ]
      },
      "size": [
       2.727,
       1.701,
       1.734
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 12052,
     "sha256": "66156420b5f6e8d1a60baf70eb59aa07fc0169c191ff6e85d22b594caf3010ac"
    },
    {
     "path": "solar-panel-2.glb",
     "meta": {
      "title": "Solar Panel Ground",
      "creator": "Quaternius",
      "publicID": "LbGiYP5iJu",
      "page": "https://poly.pizza/m/LbGiYP5iJu",
      "tris": 372,
      "bbox": {
       "min": [
        -0.645,
        0,
        -0.833
       ],
       "max": [
        0.645,
        1.096,
        0.833
       ]
      },
      "size": [
       1.289,
       1.096,
       1.667
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 6808,
     "sha256": "a3c1391cd02ccf505dedefcf5ab0d55fd4d9b45fd1e395d3566315f871fdc050"
    },
    {
     "path": "solar-panel-3.glb",
     "meta": {
      "title": "Solar Panel Structure",
      "creator": "Quaternius",
      "publicID": "snXloZEimW",
      "page": "https://poly.pizza/m/snXloZEimW",
      "tris": 1432,
      "bbox": {
       "min": [
        -2,
        0,
        -2
       ],
       "max": [
        2,
        3.069,
        2
       ]
      },
      "size": [
       4,
       3.069,
       4
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 15676,
     "sha256": "fb48db560b68e543ba52489a3b4a58ec6bb320f2c23fae9fdbc48da8afb1bac9"
    },
    {
     "path": "antenna-1.glb",
     "meta": {
      "title": "Antenna",
      "creator": "Quaternius",
      "publicID": "OuHQCigiUR",
      "page": "https://poly.pizza/m/OuHQCigiUR",
      "tris": 412,
      "bbox": {
       "min": [
        -0.309,
        0,
        -0.328
       ],
       "max": [
        0.309,
        0.731,
        0.328
       ]
      },
      "size": [
       0.617,
       0.731,
       0.657
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 9060,
     "sha256": "19a1fcee1b1ef26fe1198d48fb571d2708869fb2beaeed2d4f2a70fa40908dd2"
    },
    {
     "path": "antenna-2.glb",
     "meta": {
      "title": "Antenna",
      "creator": "Quaternius",
      "publicID": "l5Oc9swvKk",
      "page": "https://poly.pizza/m/l5Oc9swvKk",
      "tris": 88,
      "bbox": {
       "min": [
        -0.201,
        0,
        -0.032
       ],
       "max": [
        0.201,
        1.656,
        0.032
       ]
      },
      "size": [
       0.402,
       1.656,
       0.063
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 3440,
     "sha256": "f1edaf975d856060ec86bf2fc2d82b8044e4bf39676bf1b0f3969d370f62284a"
    },
    {
     "path": "antenna-3.glb",
     "meta": {
      "title": "Roof Antenna",
      "creator": "Quaternius",
      "publicID": "Fbdg52kqJ6",
      "page": "https://poly.pizza/m/Fbdg52kqJ6",
      "tris": 492,
      "bbox": {
       "min": [
        -0.706,
        0,
        -0.717
       ],
       "max": [
        0.706,
        3.543,
        0.717
       ]
      },
      "size": [
       1.412,
       3.543,
       1.433
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 9032,
     "sha256": "32402ea0643087e3ad779095d17e961ceb095878b4b538e201b9d5d1241f8244"
    },
    {
     "path": "radar.glb",
     "meta": {
      "title": "Roof Radar",
      "creator": "Quaternius",
      "publicID": "V7XQDxF8JC",
      "page": "https://poly.pizza/m/V7XQDxF8JC",
      "tris": 972,
      "bbox": {
       "min": [
        -0.813,
        0,
        -0.825
       ],
       "max": [
        0.813,
        2.713,
        0.825
       ]
      },
      "size": [
       1.626,
       2.713,
       1.649
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 14264,
     "sha256": "0c88215f40ca750607ebb216675770a160ca437f5514c6e1c7550439a1da19b1"
    },
    {
     "path": "satellite-dish.glb",
     "meta": {
      "title": "Satellite Dish",
      "creator": "Kenney",
      "publicID": "IDRrztoAMB",
      "page": "https://poly.pizza/m/IDRrztoAMB",
      "tris": 390,
      "bbox": {
       "min": [
        -0.35,
        0,
        -0.35
       ],
       "max": [
        0.35,
        0.616,
        0.35
       ]
      },
      "size": [
       0.7,
       0.617,
       0.7
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 11272,
     "sha256": "796c014a10fb6a99059f421c12f849f3316b45883ce6a33c0f736ef713c6e81b"
    },
    {
     "path": "container-1.glb",
     "meta": {
      "title": "Shipping Container",
      "creator": "Quaternius",
      "publicID": "dQXRtm5GbO",
      "page": "https://poly.pizza/m/dQXRtm5GbO",
      "tris": 1336,
      "bbox": {
       "min": [
        -2.18,
        0,
        -1.045
       ],
       "max": [
        2.18,
        2.131,
        1.045
       ]
      },
      "size": [
       4.359,
       2.13,
       2.09
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 17312,
     "sha256": "c568eaa3637184fc76a12be5dd95d6a30c85481e8bfa466b709a9012b339d0e2"
    },
    {
     "path": "container-2.glb",
     "meta": {
      "title": "Container Red",
      "creator": "Quaternius",
      "publicID": "vzzCNUB6Zn",
      "page": "https://poly.pizza/m/vzzCNUB6Zn",
      "tris": 1032,
      "bbox": {
       "min": [
        -2.854,
        0,
        -1.28
       ],
       "max": [
        2.854,
        2.603,
        1.28
       ]
      },
      "size": [
       5.708,
       2.603,
       2.56
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 14452,
     "sha256": "0cb01c04955633adb88771b851c802e082e770a429ef59188e6d094ea51a0638"
    },
    {
     "path": "container-3.glb",
     "meta": {
      "title": "Container Small",
      "creator": "Quaternius",
      "publicID": "B79i6fHgVU",
      "page": "https://poly.pizza/m/B79i6fHgVU",
      "tris": 920,
      "bbox": {
       "min": [
        -1.097,
        0,
        -1.045
       ],
       "max": [
        1.097,
        2.131,
        1.045
       ]
      },
      "size": [
       2.194,
       2.131,
       2.09
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 13348,
     "sha256": "4a6693ece8034fa6d5c42925e4591aa4a45ce1f1943ce19ca80c9e2ea353bce5"
    },
    {
     "path": "container-4.glb",
     "meta": {
      "title": "Container Green",
      "creator": "Quaternius",
      "publicID": "h5RUr3vlcS",
      "page": "https://poly.pizza/m/h5RUr3vlcS",
      "tris": 1336,
      "bbox": {
       "min": [
        -2.854,
        0,
        -1.28
       ],
       "max": [
        2.854,
        2.604,
        1.28
       ]
      },
      "size": [
       5.709,
       2.604,
       2.56
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 16720,
     "sha256": "aceae1fc2593abe43ce549663d0fcf7f6860347c2808b5dc0f0c90868a84e431"
    },
    {
     "path": "container-5.glb",
     "meta": {
      "title": "Scifi Container",
      "creator": "Quaternius",
      "publicID": "22FBVK7m9c",
      "page": "https://poly.pizza/m/22FBVK7m9c",
      "tris": 4930,
      "bbox": {
       "min": [
        -0.601,
        0,
        -0.376
       ],
       "max": [
        0.601,
        0.582,
        0.376
       ]
      },
      "size": [
       1.202,
       0.582,
       0.752
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 75528,
     "sha256": "d60e3f6a7280d4b61a7bc1753ab0d587bfe13cb3fb7c6103996d9db494a23bc1"
    },
    {
     "path": "container-6.glb",
     "meta": {
      "title": "Shipping Container Structure",
      "creator": "Quaternius",
      "publicID": "ebmepOXDRd",
      "page": "https://poly.pizza/m/ebmepOXDRd",
      "tris": 3966,
      "bbox": {
       "min": [
        -3.988,
        0,
        -2.261
       ],
       "max": [
        3.988,
        4.56,
        2.261
       ]
      },
      "size": [
       7.975,
       4.56,
       4.522
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 60228,
     "sha256": "fd2475996afd203fb62852aab7867601e6b85942d7ca9b551f1a07a1552c5c11"
    },
    {
     "path": "crate-scifi.glb",
     "meta": {
      "title": "Scifi Crate",
      "creator": "Quaternius",
      "publicID": "bPeXlVjwCH",
      "page": "https://poly.pizza/m/bPeXlVjwCH",
      "tris": 2688,
      "bbox": {
       "min": [
        -0.399,
        0,
        -0.399
       ],
       "max": [
        0.399,
        0.806,
        0.399
       ]
      },
      "size": [
       0.797,
       0.806,
       0.797
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 46096,
     "sha256": "514e8d316098d2aec2f75920078a111a736cd3134838e756774805698ebb9894"
    },
    {
     "path": "battery.glb",
     "meta": {
      "title": "Battery",
      "creator": "Quaternius",
      "publicID": "OOvs45iGQg",
      "page": "https://poly.pizza/m/OOvs45iGQg",
      "tris": 100,
      "bbox": {
       "min": [
        -0.15,
        0,
        -0.15
       ],
       "max": [
        0.15,
        0.46,
        0.15
       ]
      },
      "size": [
       0.3,
       0.46,
       0.3
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 6068,
     "sha256": "02a404e7e10d84b85b5b0500f019cc9a8412ca0d3703fd66d6f18426c4883fb6"
    },
    {
     "path": "turret-1.glb",
     "meta": {
      "title": "Turret Cannon",
      "creator": "Quaternius",
      "publicID": "mNJ6poH7Cp",
      "page": "https://poly.pizza/m/mNJ6poH7Cp",
      "forward": "+Z",
      "tris": 1318,
      "bbox": {
       "min": [
        -0.579,
        0,
        -0.557
       ],
       "max": [
        0.579,
        0.647,
        0.557
       ]
      },
      "size": [
       1.158,
       0.647,
       1.115
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 26232,
     "sha256": "ed0f3e3b8a6e8818172047271fa1cd3bd6f69d18abb8f29a2c14c32576db517c"
    },
    {
     "path": "turret-2.glb",
     "meta": {
      "title": "Turret Gun",
      "creator": "Quaternius",
      "publicID": "ekTQhbJId7",
      "page": "https://poly.pizza/m/ekTQhbJId7",
      "forward": "+Z",
      "tris": 1182,
      "bbox": {
       "min": [
        -0.579,
        0,
        -0.582
       ],
       "max": [
        0.579,
        0.587,
        0.582
       ]
      },
      "size": [
       1.158,
       0.587,
       1.164
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 24948,
     "sha256": "b8d70281f0b19da8a33bd39f764adc4a803019aadbb3220fcce3a8d1efccf293"
    },
    {
     "path": "turret-3.glb",
     "meta": {
      "title": "Turret Gun",
      "creator": "Quaternius",
      "publicID": "hThPXDCbwl",
      "page": "https://poly.pizza/m/hThPXDCbwl",
      "forward": "+Z",
      "tris": 1504,
      "bbox": {
       "min": [
        -0.579,
        0,
        -0.582
       ],
       "max": [
        0.579,
        0.587,
        0.582
       ]
      },
      "size": [
       1.158,
       0.587,
       1.164
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 29128,
     "sha256": "19959643b5241125feb7388b64c07062c869c47d1d20d13b8f0b841d0bc11a25"
    },
    {
     "path": "turret-4.glb",
     "meta": {
      "title": "Turret",
      "creator": "Kenney",
      "publicID": "mXKbcMPLSS",
      "page": "https://poly.pizza/m/mXKbcMPLSS",
      "forward": "+Z",
      "tris": 576,
      "bbox": {
       "min": [
        -0.3,
        0,
        -0.361
       ],
       "max": [
        0.3,
        0.9,
        0.361
       ]
      },
      "size": [
       0.6,
       0.9,
       0.722
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 10528,
     "sha256": "84921f16f460d037a681c73a3923f8f69d7d375c23c11e31cac69738442d7b5e"
    },
    {
     "path": "turret-5.glb",
     "meta": {
      "title": "Double Turret",
      "creator": "Kenney",
      "publicID": "wMb4gh6STL",
      "page": "https://poly.pizza/m/wMb4gh6STL",
      "forward": "+Z",
      "tris": 876,
      "bbox": {
       "min": [
        -0.45,
        0,
        -0.3
       ],
       "max": [
        0.45,
        0.7,
        0.3
       ]
      },
      "size": [
       0.9,
       0.7,
       0.6
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 12304,
     "sha256": "42ff8cbd4a6c86632aaad809ced165a79c7a7fef0a7d2e44839de7e7cbdcbaf5"
    },
    {
     "path": "rock-red-large-1.glb",
     "meta": {
      "title": "Rock Large",
      "creator": "Quaternius",
      "publicID": "54jZKTAt5p",
      "page": "https://poly.pizza/m/54jZKTAt5p",
      "tris": 222,
      "bbox": {
       "min": [
        -3.835,
        0,
        -3.666
       ],
       "max": [
        3.835,
        3.289,
        3.666
       ]
      },
      "size": [
       7.671,
       3.289,
       7.333
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 7464,
     "sha256": "4c59e6330f92f7625cd4fa136e568271e25c4c3b68238b5c990fa28309fbb694"
    },
    {
     "path": "rock-red-large-2.glb",
     "meta": {
      "title": "Rock Large",
      "creator": "Quaternius",
      "publicID": "li0YBlBEMz",
      "page": "https://poly.pizza/m/li0YBlBEMz",
      "tris": 432,
      "bbox": {
       "min": [
        -4.271,
        0,
        -3.809
       ],
       "max": [
        4.271,
        8.206,
        3.809
       ]
      },
      "size": [
       8.543,
       8.206,
       7.619
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 11704,
     "sha256": "8e1af5edff654f6a85f6f5e3b3464da2993081e074a68d8fbbae2c0e8dc49584"
    },
    {
     "path": "rock-red-large-3.glb",
     "meta": {
      "title": "Rock Large",
      "creator": "Quaternius",
      "publicID": "d2VWOdthtR",
      "page": "https://poly.pizza/m/d2VWOdthtR",
      "tris": 448,
      "bbox": {
       "min": [
        -2.657,
        0,
        -2.597
       ],
       "max": [
        2.657,
        7.427,
        2.597
       ]
      },
      "size": [
       5.314,
       7.427,
       5.193
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 10968,
     "sha256": "67302bbc0c10fba5f8d41c180aa163d76195ed11ffd0a477174640ac3609f412"
    },
    {
     "path": "rock-red-tall.glb",
     "meta": {
      "title": "Rock",
      "creator": "Quaternius",
      "publicID": "R2UjZAX3By",
      "page": "https://poly.pizza/m/R2UjZAX3By",
      "tris": 456,
      "bbox": {
       "min": [
        -1.078,
        0,
        -0.85
       ],
       "max": [
        1.078,
        3.464,
        0.85
       ]
      },
      "size": [
       2.156,
       3.464,
       1.7
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 10820,
     "sha256": "eb69e4c7022c15a4dab2d838acc8f8a124e8d92194a9d6e153dcfae397a1ffdf"
    },
    {
     "path": "rock-red-small.glb",
     "meta": {
      "title": "Rock",
      "creator": "Quaternius",
      "publicID": "HtpdTh3Ld6",
      "page": "https://poly.pizza/m/HtpdTh3Ld6",
      "tris": 210,
      "bbox": {
       "min": [
        -1.371,
        0,
        -1.259
       ],
       "max": [
        1.371,
        2.711,
        1.259
       ]
      },
      "size": [
       2.742,
       2.711,
       2.519
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 7204,
     "sha256": "5f141f7ed11de0deb29d29f3dec78ab2177c868072b900c71e1e26c5d0c5d3eb"
    },
    {
     "path": "rock-spires.glb",
     "meta": {
      "title": "Rock",
      "creator": "Quaternius",
      "publicID": "RtLRqYjfMs",
      "page": "https://poly.pizza/m/RtLRqYjfMs",
      "tris": 632,
      "bbox": {
       "min": [
        -0.309,
        0,
        -0.349
       ],
       "max": [
        0.309,
        0.566,
        0.349
       ]
      },
      "size": [
       0.619,
       0.566,
       0.698
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 11016,
     "sha256": "99b02e6a64addc175e46d23b809d05a2ebe741ae600b5c138d653aabf1219867"
    },
    {
     "path": "rock-gray-tall.glb",
     "meta": {
      "title": "Rock",
      "creator": "Quaternius",
      "publicID": "4MUaQTcDdc",
      "page": "https://poly.pizza/m/4MUaQTcDdc",
      "tris": 162,
      "bbox": {
       "min": [
        -0.077,
        0,
        -0.073
       ],
       "max": [
        0.077,
        0.19,
        0.073
       ]
      },
      "size": [
       0.155,
       0.19,
       0.147
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 4404,
     "sha256": "20bf8dba09d3c65551a380bf6bdfcffcaca84733998bc9c73928cad877d6c909"
    },
    {
     "path": "rock-boulder.glb",
     "meta": {
      "title": "Rock",
      "creator": "Quaternius",
      "publicID": "Z6M4GNkgWt",
      "page": "https://poly.pizza/m/Z6M4GNkgWt",
      "tris": 160,
      "bbox": {
       "min": [
        -0.801,
        0,
        -0.732
       ],
       "max": [
        0.801,
        1.096,
        0.732
       ]
      },
      "size": [
       1.603,
       1.096,
       1.465
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 3952,
     "sha256": "0e864919c59ffffe4932e2fd90f3a91baa3d1d09332480e4116f76df1bf534fd"
    },
    {
     "path": "rocks-jagged.glb",
     "meta": {
      "title": "Rocks",
      "creator": "Quaternius",
      "publicID": "38eDa0gjwZ",
      "page": "https://poly.pizza/m/38eDa0gjwZ",
      "simplifiedFromTris": 19960,
      "tris": 2498,
      "bbox": {
       "min": [
        -3.422,
        0,
        -2.97
       ],
       "max": [
        3.422,
        6.168,
        2.97
       ]
      },
      "size": [
       6.844,
       6.168,
       5.94
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 24736,
     "sha256": "0dc6f722f3e9120c2fd2d4f1dc11e6a24d922e237285e7f1c341cb93a4595ceb"
    },
    {
     "path": "rocks-flat.glb",
     "meta": {
      "title": "Rocks",
      "creator": "Quaternius",
      "publicID": "OQvi8PIZ40",
      "page": "https://poly.pizza/m/OQvi8PIZ40",
      "tris": 84,
      "bbox": {
       "min": [
        -0.152,
        0,
        -0.131
       ],
       "max": [
        0.152,
        0.08,
        0.131
       ]
      },
      "size": [
       0.304,
       0.08,
       0.262
      ],
      "anims": [],
      "origin": "bottom-center"
     },
     "bytes": 3584,
     "sha256": "7738214e84fd5ce01e1eb9a27ace23804300455b390100b0c559785ccd72fdbe"
    },
    {
     "path": "robot-1.glb",
     "meta": {
      "title": "Animated Robot",
      "creator": "Quaternius",
      "publicID": "QCm7qe9uNJ",
      "page": "https://poly.pizza/m/QCm7qe9uNJ",
      "forward": "+Z",
      "tris": 3237,
      "bbox": {
       "min": [
        -1.521,
        -0.02,
        -1.282
       ],
       "max": [
        1.579,
        4.476,
        1.346
       ]
      },
      "size": [
       3.1,
       4.497,
       2.628
      ],
      "anims": [
       "Robot_Dance",
       "Robot_Death",
       "Robot_Idle",
       "Robot_Jump",
       "Robot_No",
       "Robot_Punch",
       "Robot_Running",
       "Robot_Sitting",
       "Robot_Standing",
       "Robot_ThumbsUp",
       "Robot_Walking",
       "Robot_WalkJump",
       "Robot_Wave",
       "Robot_Yes"
      ],
      "bones": 43,
      "origin": "original"
     },
     "bytes": 205692,
     "sha256": "e5058db6ce103c0cb3f6ff18e3d7a9077aa2a7ce5ca6db1830936f178f4540b3"
    },
    {
     "path": "robot-2.glb",
     "meta": {
      "title": "Robot Enemy",
      "creator": "Quaternius",
      "publicID": "1gNo5ezvmr",
      "page": "https://poly.pizza/m/1gNo5ezvmr",
      "forward": "+Z",
      "tris": 4380,
      "bbox": {
       "min": [
        -0.647,
        -0.007,
        -0.348
       ],
       "max": [
        0.642,
        0.705,
        0.308
       ]
      },
      "size": [
       1.289,
       0.711,
       0.656
      ],
      "anims": [
       "Attack",
       "Death",
       "Idle",
       "Jump",
       "Run",
       "Shoot",
       "Walk"
      ],
      "bones": 15,
      "origin": "original"
     },
     "bytes": 126664,
     "sha256": "5e2211bff47aa69c08da851c333a2fc1166a96ff63324839cc1c9633a2d7f517"
    },
    {
     "path": "robot-3.glb",
     "meta": {
      "title": "Robot Enemy Legs Gun",
      "creator": "Quaternius",
      "publicID": "lFZfDh2hzP",
      "page": "https://poly.pizza/m/lFZfDh2hzP",
      "forward": "+Z",
      "tris": 4702,
      "bbox": {
       "min": [
        -0.644,
        -0.004,
        -0.234
       ],
       "max": [
        0.644,
        0.906,
        0.659
       ]
      },
      "size": [
       1.288,
       0.91,
       0.893
      ],
      "anims": [
       "Attack",
       "Death",
       "Idle",
       "Jump",
       "Run",
       "Shoot",
       "Walk"
      ],
      "bones": 15,
      "origin": "original"
     },
     "bytes": 101636,
     "sha256": "8d8b08da027c52e0f4bbf8ac4b62ea64b5087111a4870fbc05bf3b0123eecde6"
    },
    {
     "path": "robot-4.glb",
     "meta": {
      "title": "Robot Enemy Flying",
      "creator": "Quaternius",
      "publicID": "lF3jeRJwiH",
      "page": "https://poly.pizza/m/lF3jeRJwiH",
      "forward": "+Z",
      "tris": 4544,
      "bbox": {
       "min": [
        -0.644,
        0.105,
        -0.234
       ],
       "max": [
        0.643,
        0.878,
        0.439
       ]
      },
      "size": [
       1.287,
       0.774,
       0.673
      ],
      "anims": [
       "Attack",
       "Dead",
       "Idle",
       "Run",
       "Shoot",
       "Walk"
      ],
      "bones": 11,
      "origin": "original"
     },
     "bytes": 80916,
     "sha256": "4f18cd116a80b95908908d080579bcb9511879cbf9d75cf0c9ab74d43f9d3994"
    },
    {
     "path": "robot-5.glb",
     "meta": {
      "title": "Robot Enemy Flying Gun",
      "creator": "Quaternius",
      "publicID": "UDTM6X1y9a",
      "page": "https://poly.pizza/m/UDTM6X1y9a",
      "forward": "+Z",
      "tris": 4582,
      "bbox": {
       "min": [
        -0.644,
        0.065,
        -0.389
       ],
       "max": [
        0.643,
        0.937,
        0.839
       ]
      },
      "size": [
       1.287,
       0.872,
       1.228
      ],
      "anims": [
       "Attack",
       "Dead",
       "Idle",
       "Run",
       "Shoot",
       "Walk"
      ],
      "bones": 12,
      "origin": "original"
     },
     "bytes": 87504,
     "sha256": "119905055a45921ce864c7efaae0fa53bda813ae34c5c47ae314232795300b3c"
    },
    {
     "path": "robot-6.glb",
     "meta": {
      "title": "Robot Enemy Large",
      "creator": "Quaternius",
      "publicID": "mPDR0L5uKx",
      "page": "https://poly.pizza/m/mPDR0L5uKx",
      "forward": "+Z",
      "tris": 4256,
      "bbox": {
       "min": [
        -0.715,
        -0.004,
        -0.344
       ],
       "max": [
        0.715,
        0.889,
        0.435
       ]
      },
      "size": [
       1.43,
       0.893,
       0.778
      ],
      "anims": [
       "Attack",
       "Attack.001",
       "Death",
       "Idle",
       "Jump",
       "Run",
       "Shoot",
       "Walk"
      ],
      "bones": 15,
      "origin": "original"
     },
     "bytes": 114840,
     "sha256": "a8b6971f077460ec5c4755a83981e762ba4efc12580983a6dbf47a5abffb2c06"
    }
   ],
   "base": "quaternius-scifi/1/"
  },
  {
   "id": "ruins-kit",
   "version": 1,
   "kind": "model",
   "title": "Ancient Ruins & Jungle Kit",
   "author": "Quaternius; Kenney; reyshapes; CircuitZ (파일별 meta.creator)",
   "license": "CC0-1.0",
   "source": "https://poly.pizza/m/F2LAK03B0r",
   "notes": "고대 유적·사원·정글 키트(전부 CC0). 돌 유적 조각(기둥·아치·벽·계단·바닥·돌덩이·석상·횃불·항아리·촛불·해골)은 Quaternius \"Modular Ruins Pack\"(poly.pizza, 한 장면에 늘어선 조각을 노드별로 떼어 냄), 우상 머리·오벨리스크·부서진 기둥·돌고리는 Kenney Nature Kit, 제단·단지는 Kenney Graveyard Kit, 야자수·큰 나무·고사리·덤불·이끼 바위/통나무·받침대는 Quaternius(poly.pizza), 큰 잎 식물은 reyshapes, 화덕은 CircuitZ. 서 있는 화로(brazier)는 쓸 만한 CC0 원본이 없어 벽 횃불(torch-wall)·화덕(fire-pit)으로 대신한다 — 불꽃·빛은 게임이 더한다. Kenney 조각은 밝은 회색 단색 재질이라 Quaternius 돌(올리브빛 회색)과 색이 다르다(게임이 재질 색을 맞춰도 된다). meta.role: ruin(구조물) · plant · rock · prop. 정적 모델: 노드 변환을 굽고 재질별로 합침, 원점 = 바닥 중심(경계 상자 아래 가운데), 앞쪽 +Z(벽·아치는 X 로 길고 겉면이 ±Z), 텍스처 WebP(최대 512), meshopt(GLTFLoader.setMeshoptDecoder 필요). 축척은 원본 단위 그대로 — 원본마다 다르다: Quaternius 유적 조각은 1 단위 ≈ 1 m(벽 2×2, 기둥 4, 아치 3.5), Kenney 조각은 작고(석상 머리 1, 제단 1.04 폭) Quaternius 나무·바위도 제각각이라 meta.suggestedHeight(m)·suggestedScale 을 적었다 — 1 단위 = 1 m 세계에 놓으려면 모델을 suggestedScale 배로. 벽·바닥은 2 단위 격자(Wall 2×2, Floor 2×2, 큰 벽 4×4)라 suggestedScale 1 이면 그대로 맞물린다. 원작자 표기는 의무 아님(권장: Quaternius, Kenney).",
   "tags": [
    "ruins",
    "temple",
    "jungle",
    "ancient",
    "stone",
    "plants",
    "palm",
    "rocks",
    "low-poly",
    "quaternius",
    "kenney"
   ],
   "files": [
    {
     "path": "column-square.glb",
     "meta": {
      "role": "ruin",
      "description": "네모 돌기둥(온전)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Column_Square",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 690,
      "bbox": {
       "min": [
        -0.328,
        0,
        -0.328
       ],
       "max": [
        0.328,
        3.99,
        0.328
       ]
      },
      "size": [
       0.656,
       3.99,
       0.656
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 4,
      "suggestedScale": 1.003,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 12168,
     "sha256": "9bdcb67d45795c1ddbdec4fa671c0f1bc43ef4827d79311773c4dc472b763254"
    },
    {
     "path": "column-round.glb",
     "meta": {
      "role": "ruin",
      "description": "둥근 돌기둥(온전)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Column_Round",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 1010,
      "bbox": {
       "min": [
        -0.328,
        0,
        -0.328
       ],
       "max": [
        0.328,
        3.99,
        0.328
       ]
      },
      "size": [
       0.656,
       3.99,
       0.656
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 4,
      "suggestedScale": 1.003,
      "materials": [
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 13632,
     "sha256": "9eef18d5db9883c4ba7b7a2cbbbaf332358222902de16d41f60ad7b9dab96f48"
    },
    {
     "path": "column-round-short.glb",
     "meta": {
      "role": "ruin",
      "description": "짧은 둥근 기둥(부러진 기둥·받침대로)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Column_Round_Short",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 634,
      "bbox": {
       "min": [
        -0.245,
        0,
        -0.245
       ],
       "max": [
        0.245,
        1.83,
        0.245
       ]
      },
      "size": [
       0.49,
       1.83,
       0.49
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.83,
      "suggestedScale": 1,
      "materials": [
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 10128,
     "sha256": "48f8779ac9029b38f08c5d658eb252765891535e7a4d59342a8376c78af6bfee"
    },
    {
     "path": "column-support.glb",
     "meta": {
      "role": "ruin",
      "description": "다리 받침 기둥(두꺼운 사각 기둥)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Column_BridgeSupport",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 1239,
      "bbox": {
       "min": [
        -0.39,
        0,
        -0.309
       ],
       "max": [
        0.39,
        4.02,
        0.309
       ]
      },
      "size": [
       0.78,
       4.02,
       0.618
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 4,
      "suggestedScale": 0.995,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 17160,
     "sha256": "740be17642bff61316c3c955591b31c7b7756db9459ccad5acece7fafcbcbc35"
    },
    {
     "path": "arch-round.glb",
     "meta": {
      "role": "ruin",
      "description": "둥근 아치(사각 기둥 둘 + 아치)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Arch_Round",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 2950,
      "bbox": {
       "min": [
        -1.546,
        0,
        -0.245
       ],
       "max": [
        1.546,
        3.533,
        0.245
       ]
      },
      "size": [
       3.092,
       3.533,
       0.49
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 3.53,
      "suggestedScale": 0.999,
      "materials": [
       "Highlights",
       "Main",
       "Black"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 35696,
     "sha256": "bc635e12b3fd6c4ef006a40863b428cc78efcbdd0f8b955bf832188a648d0bbf"
    },
    {
     "path": "arch-round-columns.glb",
     "meta": {
      "role": "ruin",
      "description": "둥근 아치(둥근 기둥)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Arch_Round_RoundColumn",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 3270,
      "bbox": {
       "min": [
        -1.546,
        0,
        -0.245
       ],
       "max": [
        1.546,
        3.531,
        0.245
       ]
      },
      "size": [
       3.092,
       3.531,
       0.49
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 3.53,
      "suggestedScale": 1,
      "materials": [
       "Main",
       "Black"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 41864,
     "sha256": "8b0a9c64d76bfbfb7dd7581da227c7be14fc59d3162349b52b943bcc63c07a6c"
    },
    {
     "path": "arch-gothic.glb",
     "meta": {
      "role": "ruin",
      "description": "뾰족 아치",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Arch_Gothic",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 2898,
      "bbox": {
       "min": [
        -1.546,
        0,
        -0.245
       ],
       "max": [
        1.546,
        3.76,
        0.245
       ]
      },
      "size": [
       3.092,
       3.76,
       0.49
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 3.76,
      "suggestedScale": 1,
      "materials": [
       "Highlights",
       "Main",
       "Black"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 36364,
     "sha256": "bcd8233dac416342638a4f90eade3ac054e160593a93776550140cf74e4afcde"
    },
    {
     "path": "wall.glb",
     "meta": {
      "role": "ruin",
      "description": "돌벽 2×2(두께 0.29, 겉면 ±Z)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 1296,
      "bbox": {
       "min": [
        -0.999,
        0,
        -0.143
       ],
       "max": [
        0.999,
        2.001,
        0.143
       ]
      },
      "size": [
       1.998,
       2.001,
       0.286
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 2,
      "suggestedScale": 1,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 24400,
     "sha256": "147b7275ee3b73ef872634ff584a7b8b848556923d39dd223a4b647fee02cd7c"
    },
    {
     "path": "wall-half.glb",
     "meta": {
      "role": "ruin",
      "description": "돌벽 반쪽 1×2",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall_Half",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 632,
      "bbox": {
       "min": [
        -0.498,
        0,
        -0.143
       ],
       "max": [
        0.498,
        2.001,
        0.143
       ]
      },
      "size": [
       0.996,
       2.001,
       0.286
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 2,
      "suggestedScale": 1,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 13416,
     "sha256": "1207d960cedcbe7125b1cbb936a4a5570d58b66fedc4aab543e2d0922852a8f2"
    },
    {
     "path": "wall-broken.glb",
     "meta": {
      "role": "ruin",
      "description": "무너진 돌벽",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall_Broken",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 971,
      "bbox": {
       "min": [
        -0.995,
        0,
        -0.143
       ],
       "max": [
        0.995,
        1.947,
        0.143
       ]
      },
      "size": [
       1.99,
       1.947,
       0.286
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.95,
      "suggestedScale": 1.002,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 18736,
     "sha256": "b9d00a582bd4f073231e7b8da4ff77c0d7093e897fec8c90fa2ef0b846d59e58"
    },
    {
     "path": "wall-hole.glb",
     "meta": {
      "role": "ruin",
      "description": "구멍 난 돌벽",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall_Hole",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 912,
      "bbox": {
       "min": [
        -0.999,
        0,
        -0.143
       ],
       "max": [
        0.999,
        2.001,
        0.143
       ]
      },
      "size": [
       1.998,
       2.001,
       0.286
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 2,
      "suggestedScale": 1,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 18176,
     "sha256": "aa535bea0fc0caabf2bd8f06e82f7a1ba51566a4f4a690d0bc9855130e04aa2b"
    },
    {
     "path": "wall-overgrown.glb",
     "meta": {
      "role": "ruin",
      "description": "덩굴 덮인 돌벽",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall_Overgrown",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 1370,
      "bbox": {
       "min": [
        -0.995,
        0,
        -0.152
       ],
       "max": [
        0.995,
        1.985,
        0.152
       ]
      },
      "size": [
       1.99,
       1.985,
       0.304
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.98,
      "suggestedScale": 0.997,
      "materials": [
       "Highlights",
       "Main",
       "Green",
       "Leaf_Texture"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 41884,
     "sha256": "a2169103eb300919dfa5f1e1785e9a03b52e0b925c7954caa5ead1cd92345be9"
    },
    {
     "path": "wall-double-broken.glb",
     "meta": {
      "role": "ruin",
      "description": "두꺼운 벽의 무너진 밑동(낮은 담)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall_Double_Broken",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 856,
      "bbox": {
       "min": [
        -0.995,
        0,
        -0.283
       ],
       "max": [
        0.995,
        0.987,
        0.283
       ]
      },
      "size": [
       1.99,
       0.987,
       0.566
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.99,
      "suggestedScale": 1.003,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 16312,
     "sha256": "30accb9d61ecee7f9f6788835558c8dfb4ed16e63a77261d2f0a153d8d6b32ca"
    },
    {
     "path": "wall-arch.glb",
     "meta": {
      "role": "ruin",
      "description": "아치 문이 난 큰 벽 4×4",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall_ArchRound",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 2360,
      "bbox": {
       "min": [
        -2.002,
        0,
        -0.155
       ],
       "max": [
        2.002,
        3.994,
        0.155
       ]
      },
      "size": [
       4.004,
       3.994,
       0.31
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 4,
      "suggestedScale": 1.002,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 41100,
     "sha256": "f7dd1e0c6a08a77ff87525857189727a7f07651b5a8334657dfc067aee487746"
    },
    {
     "path": "wall-arch-broken.glb",
     "meta": {
      "role": "ruin",
      "description": "아치 문이 난 큰 벽(무너짐)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall_ArchRound_Broken",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 1604,
      "bbox": {
       "min": [
        -1.997,
        0,
        -0.155
       ],
       "max": [
        1.997,
        3.985,
        0.155
       ]
      },
      "size": [
       3.994,
       3.985,
       0.31
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 3.98,
      "suggestedScale": 0.999,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 29212,
     "sha256": "025bf1a584e51f038e0fcbd599dd242be80f3a600b4f2973092d768b55211ea2"
    },
    {
     "path": "wall-arch-overgrown.glb",
     "meta": {
      "role": "ruin",
      "description": "아치 문이 난 큰 벽(덩굴)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Wall_ArchRound_Overgrown",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 2598,
      "bbox": {
       "min": [
        -2.002,
        0,
        -0.158
       ],
       "max": [
        2.002,
        3.994,
        0.158
       ]
      },
      "size": [
       4.004,
       3.994,
       0.316
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 4,
      "suggestedScale": 1.002,
      "materials": [
       "Highlights",
       "Main",
       "Green",
       "Leaf_Texture"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 62616,
     "sha256": "c72233e20e750b8972d97536a40816dbb570d828cde3f933b3ce741636d2083f"
    },
    {
     "path": "window-bars-overgrown.glb",
     "meta": {
      "role": "ruin",
      "description": "창살 창이 난 벽(덩굴)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Window_Bars_Overgrown",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 1350,
      "bbox": {
       "min": [
        -0.995,
        0,
        -0.153
       ],
       "max": [
        0.995,
        1.987,
        0.153
       ]
      },
      "size": [
       1.99,
       1.987,
       0.306
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 2,
      "suggestedScale": 1.007,
      "materials": [
       "Highlights",
       "Main",
       "Metal",
       "Green",
       "Leaf_Texture"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 42456,
     "sha256": "38199f38dd18cde6ebe1018adf96d1ef2b5666cedc23aa4a86cef35dc46801f6"
    },
    {
     "path": "stairs.glb",
     "meta": {
      "role": "ruin",
      "description": "돌계단(낮음) — 아래 칸이 +Z, −Z 쪽으로 올라간다(원본은 +X 로 올라가 Y +90° 돌림)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Stairs",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 2268,
      "bbox": {
       "min": [
        -1.076,
        0,
        -1.008
       ],
       "max": [
        1.076,
        0.922,
        1.008
       ]
      },
      "size": [
       2.152,
       0.922,
       2.016
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.92,
      "suggestedScale": 0.998,
      "rotatedY": 90,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 37076,
     "sha256": "a1cea9004f416b7a664933ca2fa56549e74f298762e584fd23225f3d692f8dc3"
    },
    {
     "path": "stairs-tall.glb",
     "meta": {
      "role": "ruin",
      "description": "돌계단(높음) — +Z 쪽에서 −Z 쪽으로 올라간다. 첫 칸이 이미 약 0.9 높이(밑이 꽉 찬 덩어리)라 stairs(높이 0.92) 뒤에 이어 붙이면 두 층 계단이 된다",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Stairs_2",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 2068,
      "bbox": {
       "min": [
        -1.076,
        0,
        -1.008
       ],
       "max": [
        1.076,
        1.782,
        1.008
       ]
      },
      "size": [
       2.152,
       1.782,
       2.016
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.78,
      "suggestedScale": 0.999,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 33580,
     "sha256": "8265f2ae66498ee6d9f4e33bb5edc437642f89e037333698675275c62ec1fbd6"
    },
    {
     "path": "floor-tiles.glb",
     "meta": {
      "role": "ruin",
      "description": "돌바닥 타일 2×2",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Floor_Squares",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 413,
      "bbox": {
       "min": [
        -0.996,
        0,
        -0.998
       ],
       "max": [
        0.996,
        0.116,
        0.998
       ]
      },
      "size": [
       1.992,
       0.116,
       1.996
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.12,
      "suggestedScale": 1.034,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 10980,
     "sha256": "8e46a76b446d0b53e857b0866600b0edf726ef20345c98238c5f12a4bae56482"
    },
    {
     "path": "floor-tiles-large.glb",
     "meta": {
      "role": "ruin",
      "description": "큰 판석 바닥 2×2",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Floor_SquareLarge",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 118,
      "bbox": {
       "min": [
        -0.989,
        0,
        -0.99
       ],
       "max": [
        0.989,
        0.108,
        0.99
       ]
      },
      "size": [
       1.978,
       0.108,
       1.98
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.11,
      "suggestedScale": 1.019,
      "materials": [
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 4292,
     "sha256": "b2bffbe7202ae7564f0fdaf0e371be34227a4a6ece9ee93e24400752b5083517"
    },
    {
     "path": "floor-diamond.glb",
     "meta": {
      "role": "ruin",
      "description": "마름모 무늬 바닥 2×2(제단 앞·퍼즐 판)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Floor_Diamond",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 400,
      "bbox": {
       "min": [
        -1,
        0,
        -1
       ],
       "max": [
        1,
        0.118,
        1
       ]
      },
      "size": [
       2,
       0.118,
       2
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.12,
      "suggestedScale": 1.017,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 10776,
     "sha256": "a94f9ac50ef08f8943f9be15f7b81d2d316db36451311c629145aa112b0a7e83"
    },
    {
     "path": "bricks.glb",
     "meta": {
      "role": "rock",
      "description": "무너진 돌덩이 더미",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Bricks",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 312,
      "bbox": {
       "min": [
        -0.912,
        0,
        -0.805
       ],
       "max": [
        0.912,
        0.546,
        0.805
       ]
      },
      "size": [
       1.824,
       0.546,
       1.61
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.55,
      "suggestedScale": 1.007,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 7872,
     "sha256": "edf0c5e0816374821279dc905507a862219acc57419fd3ac88588884bdf7120e"
    },
    {
     "path": "brick.glb",
     "meta": {
      "role": "prop",
      "description": "돌덩이 하나(밀거나 옮기는 퍼즐 블록으로)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Brick",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 76,
      "bbox": {
       "min": [
        -0.265,
        0,
        -0.142
       ],
       "max": [
        0.265,
        0.32,
        0.142
       ]
      },
      "size": [
       0.53,
       0.32,
       0.284
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.32,
      "suggestedScale": 1,
      "materials": [
       "Highlights",
       "Main"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 4540,
     "sha256": "1e4b4deb6dbe95bd43f16d40bbf9e67da088cd4a47fe78a35bec84405d8a06b7"
    },
    {
     "path": "statue-stag.glb",
     "meta": {
      "role": "ruin",
      "description": "사슴 석상(받침 포함, 원본은 −X 를 봐 Y +90° 돌림)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Statue_Stag",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 4042,
      "bbox": {
       "min": [
        -0.636,
        0,
        -1.153
       ],
       "max": [
        0.636,
        4.634,
        1.153
       ]
      },
      "size": [
       1.272,
       4.634,
       2.306
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 4.63,
      "suggestedScale": 0.999,
      "rotatedY": 90,
      "materials": [
       "Stone"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 47568,
     "sha256": "f7c8a92811d9f330758849178e15e7ac8ad1d1881c668858d19bb1c4aea14af1"
    },
    {
     "path": "statue-fox.glb",
     "meta": {
      "role": "ruin",
      "description": "여우 석상(받침 포함)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Statue_Fox",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 2150,
      "bbox": {
       "min": [
        -0.675,
        0,
        -0.839
       ],
       "max": [
        0.675,
        3.752,
        0.839
       ]
      },
      "size": [
       1.35,
       3.752,
       1.678
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 3.75,
      "suggestedScale": 0.999,
      "materials": [
       "Stone"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 25788,
     "sha256": "f0a876220d31e7ff9e2595d8658eaa39a36cc96b72756c155b8ce7ff5cf6616a"
    },
    {
     "path": "torch-wall.glb",
     "meta": {
      "role": "prop",
      "description": "벽 횃불(불꽃 포함, 벽에 붙는 쪽 −Z)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Torch",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 386,
      "bbox": {
       "min": [
        -0.139,
        0,
        -0.219
       ],
       "max": [
        0.139,
        1.17,
        0.219
       ]
      },
      "size": [
       0.278,
       1.17,
       0.438
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.17,
      "suggestedScale": 1,
      "materials": [
       "DarkMetal",
       "Fire"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 7668,
     "sha256": "b3a4b21c023132dbfb705a25558a30ed0e87a5d35d0d71497753222abd60e5fb"
    },
    {
     "path": "pot.glb",
     "meta": {
      "role": "prop",
      "description": "큰 항아리",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Pot1",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 1036,
      "bbox": {
       "min": [
        -0.384,
        0,
        -0.384
       ],
       "max": [
        0.384,
        0.962,
        0.384
       ]
      },
      "size": [
       0.768,
       0.962,
       0.768
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.96,
      "suggestedScale": 0.998,
      "materials": [
       "Pot_Main",
       "Pot_Detail"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 15064,
     "sha256": "e7ba368f01db3fd1e7ec0a62985b4ed0f0ebc518e1f1908c41e4d07f30d5df43"
    },
    {
     "path": "pot-broken.glb",
     "meta": {
      "role": "prop",
      "description": "깨진 큰 항아리",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Pot1_Broken",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 431,
      "bbox": {
       "min": [
        -0.384,
        0,
        -0.384
       ],
       "max": [
        0.384,
        0.661,
        0.384
       ]
      },
      "size": [
       0.768,
       0.661,
       0.768
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.66,
      "suggestedScale": 0.998,
      "materials": [
       "Pot_Main",
       "Pot_Detail"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 8596,
     "sha256": "fecff7e8d5adfe93645e408f149281435260818eea486386829222ada8498e18"
    },
    {
     "path": "pot-small.glb",
     "meta": {
      "role": "prop",
      "description": "작은 항아리",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Pot2",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 878,
      "bbox": {
       "min": [
        -0.232,
        0,
        -0.232
       ],
       "max": [
        0.232,
        0.637,
        0.232
       ]
      },
      "size": [
       0.464,
       0.637,
       0.464
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.64,
      "suggestedScale": 1.005,
      "materials": [
       "Pot_Main",
       "Pot_Detail"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 12844,
     "sha256": "358c6d593f569c1c110f29798f4817e20eaa3bce98b8e5d910c11dc23d3f5599"
    },
    {
     "path": "candles.glb",
     "meta": {
      "role": "prop",
      "description": "촛불 무리(제단 장식)",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Candles_2",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 1224,
      "bbox": {
       "min": [
        -0.497,
        0,
        -0.493
       ],
       "max": [
        0.497,
        0.646,
        0.493
       ]
      },
      "size": [
       0.994,
       0.646,
       0.986
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.65,
      "suggestedScale": 1.006,
      "materials": [
       "Black",
       "Candle",
       "Light"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 16712,
     "sha256": "db58ab9dfb86ff258ba090aea037a4150654ea2d8e8ed3ab61935dadfe0b13d4"
    },
    {
     "path": "skull.glb",
     "meta": {
      "role": "prop",
      "description": "해골",
      "creator": "Quaternius",
      "title": "Modular Ruins Pack — Skull",
      "publicID": "F2LAK03B0r",
      "source": "https://poly.pizza/m/F2LAK03B0r",
      "tris": 426,
      "bbox": {
       "min": [
        -0.222,
        0,
        -0.298
       ],
       "max": [
        0.222,
        0.461,
        0.298
       ]
      },
      "size": [
       0.444,
       0.461,
       0.596
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.46,
      "suggestedScale": 0.998,
      "materials": [
       "Bone"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 7264,
     "sha256": "657f4734f322dea90287123df0de64451a958cb5411d942eaaf1001ba73f8d6b"
    },
    {
     "path": "idol-head.glb",
     "meta": {
      "role": "ruin",
      "description": "거대 석상 머리(모아이풍 우상, 원본 얼굴 −Z 를 Y 180° 돌림)",
      "creator": "Kenney",
      "title": "Nature Kit — statue_head",
      "source": "https://kenney.nl/assets/nature-kit",
      "tris": 196,
      "bbox": {
       "min": [
        -0.363,
        0,
        -0.277
       ],
       "max": [
        0.363,
        1,
        0.277
       ]
      },
      "size": [
       0.726,
       1,
       0.554
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 2.5,
      "suggestedScale": 2.5,
      "rotatedY": 180,
      "materials": [
       "stone",
       "stoneDark",
       "_defaultMat"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 6548,
     "sha256": "bd11689ee570a50d8bd9eeb1648ee86e7f483bf96ed9afea39f1a834f4ce8e19"
    },
    {
     "path": "obelisk.glb",
     "meta": {
      "role": "ruin",
      "description": "오벨리스크",
      "creator": "Kenney",
      "title": "Nature Kit — statue_obelisk",
      "source": "https://kenney.nl/assets/nature-kit",
      "tris": 38,
      "bbox": {
       "min": [
        -0.154,
        0,
        -0.154
       ],
       "max": [
        0.154,
        0.875,
        0.154
       ]
      },
      "size": [
       0.308,
       0.875,
       0.308
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 3,
      "suggestedScale": 3.429,
      "materials": [
       "stoneDark",
       "stone"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 3520,
     "sha256": "59e656e4252f7b0ef1500f0d7dec72981d5ca5922d247daf34c4b649eda83f02"
    },
    {
     "path": "column-broken.glb",
     "meta": {
      "role": "ruin",
      "description": "부서진 기둥(위가 깨짐)",
      "creator": "Kenney",
      "title": "Nature Kit — statue_columnDamaged",
      "source": "https://kenney.nl/assets/nature-kit",
      "tris": 108,
      "bbox": {
       "min": [
        -0.15,
        0,
        -0.15
       ],
       "max": [
        0.15,
        0.7,
        0.15
       ]
      },
      "size": [
       0.3,
       0.7,
       0.3
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 2.8,
      "suggestedScale": 4,
      "materials": [
       "stoneDark",
       "stone"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 4216,
     "sha256": "9f42612ecbd1382431e129a2f6bfeaf36b59a308252fdc5706a5a8cc9f6dc796"
    },
    {
     "path": "stone-ring.glb",
     "meta": {
      "role": "ruin",
      "description": "돌고리(고대 장치·문)",
      "creator": "Kenney",
      "title": "Nature Kit — statue_ring",
      "source": "https://kenney.nl/assets/nature-kit",
      "tris": 76,
      "bbox": {
       "min": [
        -0.3,
        0,
        -0.2
       ],
       "max": [
        0.3,
        0.796,
        0.2
       ]
      },
      "size": [
       0.6,
       0.796,
       0.4
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 2.4,
      "suggestedScale": 3.015,
      "materials": [
       "stone",
       "stoneDark"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 3932,
     "sha256": "a35dcee67ebbe41d8f6e6f17c5c4011e9eeae80decbe84b9ff7a525ddc33fdb6"
    },
    {
     "path": "altar.glb",
     "meta": {
      "role": "prop",
      "description": "돌 제단",
      "creator": "Kenney",
      "title": "Graveyard Kit — altar-stone",
      "source": "https://kenney.nl/assets/graveyard-kit",
      "tris": 166,
      "bbox": {
       "min": [
        -0.52,
        0,
        -0.327
       ],
       "max": [
        0.52,
        0.488,
        0.327
       ]
      },
      "size": [
       1.04,
       0.488,
       0.654
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1,
      "suggestedScale": 2.049,
      "materials": [
       "colormap"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 7316,
     "sha256": "257760e47fdfb46fbab246ddafd14d44f1600d1ff0f05c9602b5fdfd039af4ea"
    },
    {
     "path": "fire-pit.glb",
     "meta": {
      "role": "prop",
      "description": "돌을 둘러 쌓은 화덕(장작만 — 불꽃은 게임이 입자·빛으로)",
      "creator": "CircuitZ",
      "title": "Fire Pit 1",
      "publicID": "DsQslCOoz0",
      "source": "https://poly.pizza/m/DsQslCOoz0",
      "tris": 732,
      "bbox": {
       "min": [
        -0.49,
        0,
        -0.499
       ],
       "max": [
        0.49,
        0.377,
        0.499
       ]
      },
      "size": [
       0.98,
       0.377,
       0.998
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.5,
      "suggestedScale": 1.326,
      "materials": [
       "Stone.001",
       "Wood.001"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 24168,
     "sha256": "65d808c0c26c35a5aeb1f0c5bc1b0d13b043d12dad4060a13a40354e9cf50c58"
    },
    {
     "path": "pedestal.glb",
     "meta": {
      "role": "prop",
      "description": "둥근 돌 받침대(유물·우상을 올리는 퍼즐 받침)",
      "creator": "Quaternius",
      "title": "Column Round",
      "publicID": "n8ZvVFcJhl",
      "source": "https://poly.pizza/m/n8ZvVFcJhl",
      "tris": 332,
      "bbox": {
       "min": [
        -0.7,
        0,
        -0.736
       ],
       "max": [
        0.7,
        1.773,
        0.736
       ]
      },
      "size": [
       1.4,
       1.773,
       1.472
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.1,
      "suggestedScale": 0.62,
      "materials": [
       "Marble"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 5400,
     "sha256": "c42b2e5ed56ce060ffa1b1474a7e6ce0c4b2482fc713a57aeb07e302ff9d8e1f"
    },
    {
     "path": "pedestal-square.glb",
     "meta": {
      "role": "prop",
      "description": "네모 돌 받침대",
      "creator": "Quaternius",
      "title": "Pedestal",
      "publicID": "wUeoDKnFBF",
      "source": "https://poly.pizza/m/wUeoDKnFBF",
      "tris": 1182,
      "bbox": {
       "min": [
        -0.872,
        0,
        -0.872
       ],
       "max": [
        0.872,
        2.315,
        0.872
       ]
      },
      "size": [
       1.744,
       2.315,
       1.744
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.1,
      "suggestedScale": 0.475,
      "materials": [
       "Marble"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 17132,
     "sha256": "eef38d461c1cbdfd03f3c492609f561a305fb0df938cabea2772663a6f0991ed"
    },
    {
     "path": "urn.glb",
     "meta": {
      "role": "prop",
      "description": "돌 단지",
      "creator": "Kenney",
      "title": "Graveyard Kit — urn-round",
      "source": "https://kenney.nl/assets/graveyard-kit",
      "tris": 230,
      "bbox": {
       "min": [
        -0.132,
        0,
        -0.132
       ],
       "max": [
        0.132,
        0.384,
        0.132
       ]
      },
      "size": [
       0.264,
       0.384,
       0.264
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.8,
      "suggestedScale": 2.083,
      "materials": [
       "colormap"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 7304,
     "sha256": "e1968823ca6a1a041a5136ae1d60222c39949a4cf369ca8582e7f54f68431d6f"
    },
    {
     "path": "palm-1.glb",
     "meta": {
      "role": "plant",
      "description": "야자수",
      "creator": "Quaternius",
      "title": "Palm Tree",
      "publicID": "A6cKJYFsIb",
      "source": "https://poly.pizza/m/A6cKJYFsIb",
      "tris": 3134,
      "bbox": {
       "min": [
        -1.431,
        0,
        -1.377
       ],
       "max": [
        1.431,
        2.689,
        1.377
       ]
      },
      "size": [
       2.862,
       2.689,
       2.754
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 8,
      "suggestedScale": 2.975,
      "materials": [
       "Atlas"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 36776,
     "sha256": "04d2cbd5c76fdfc8e478f9b88c0f81ff82259c9357f90f00f907b8aa6713f664"
    },
    {
     "path": "palm-2.glb",
     "meta": {
      "role": "plant",
      "description": "야자수(휜 줄기, 큼)",
      "creator": "Quaternius",
      "title": "Palm Tree",
      "publicID": "DsrrAYmucG",
      "source": "https://poly.pizza/m/DsrrAYmucG",
      "tris": 3208,
      "bbox": {
       "min": [
        -1.305,
        0,
        -1.259
       ],
       "max": [
        1.305,
        3.587,
        1.259
       ]
      },
      "size": [
       2.61,
       3.587,
       2.518
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 10,
      "suggestedScale": 2.788,
      "materials": [
       "Atlas"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 35304,
     "sha256": "eef211973e5095c826ad7ef49c33878fb0bf50af691ef48b331fa8f44d1a9d31"
    },
    {
     "path": "palm-3.glb",
     "meta": {
      "role": "plant",
      "description": "야자수",
      "creator": "Quaternius",
      "title": "Palm Tree",
      "publicID": "P0tgwyXBgr",
      "source": "https://poly.pizza/m/P0tgwyXBgr",
      "tris": 2924,
      "bbox": {
       "min": [
        -1.318,
        0,
        -1.289
       ],
       "max": [
        1.318,
        2.685,
        1.289
       ]
      },
      "size": [
       2.636,
       2.685,
       2.578
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 8,
      "suggestedScale": 2.98,
      "materials": [
       "Atlas"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 34876,
     "sha256": "201ab71d64943d7c124256887bebcdbb717b7c1f1c4d6552049e8d428c13f909"
    },
    {
     "path": "tree-large-1.glb",
     "meta": {
      "role": "plant",
      "description": "큰 활엽수",
      "creator": "Quaternius",
      "title": "Tree",
      "publicID": "aVOxaHRPWe",
      "source": "https://poly.pizza/m/aVOxaHRPWe",
      "tris": 5648,
      "bbox": {
       "min": [
        -2.232,
        0,
        -2.138
       ],
       "max": [
        2.232,
        7.643,
        2.138
       ]
      },
      "size": [
       4.464,
       7.643,
       4.276
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 12,
      "suggestedScale": 1.57,
      "materials": [
       "Bark_NormalTree",
       "Leaves_NormalTree"
      ],
      "textures": [
       "map:512x512",
       "normalMap:512x512"
      ],
      "anims": []
     },
     "bytes": 164368,
     "sha256": "0645bb2778a24035aa7e69ac703e00f2a17b07a9737a2b83f1d7f5e316a602d9"
    },
    {
     "path": "tree-large-2.glb",
     "meta": {
      "role": "plant",
      "description": "큰 활엽수",
      "creator": "Quaternius",
      "title": "Tree",
      "publicID": "qZtx0AHhcy",
      "source": "https://poly.pizza/m/qZtx0AHhcy",
      "tris": 6265,
      "bbox": {
       "min": [
        -2.156,
        0,
        -2.289
       ],
       "max": [
        2.156,
        7.265,
        2.289
       ]
      },
      "size": [
       4.312,
       7.265,
       4.578
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 12,
      "suggestedScale": 1.652,
      "materials": [
       "Bark_NormalTree",
       "Leaves_NormalTree"
      ],
      "textures": [
       "map:512x512",
       "normalMap:512x512"
      ],
      "anims": []
     },
     "bytes": 182932,
     "sha256": "3250bce534eda71738efdb549d857a32548f2b281f5eae6689760d2b37b006ac"
    },
    {
     "path": "tree-canopy.glb",
     "meta": {
      "role": "plant",
      "description": "넓게 퍼진 우산형 나무(정글 덮개)",
      "creator": "Quaternius",
      "title": "Tree",
      "publicID": "2paAm1ja4w",
      "source": "https://poly.pizza/m/2paAm1ja4w",
      "tris": 2888,
      "bbox": {
       "min": [
        -0.945,
        0,
        -1.387
       ],
       "max": [
        0.945,
        2.481,
        1.387
       ]
      },
      "size": [
       1.89,
       2.481,
       2.774
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 10,
      "suggestedScale": 4.031,
      "materials": [
       "Wood",
       "Green"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 53160,
     "sha256": "11928745ba4097d0d8e9d4be3532a9ba6a0345bd35fc65ed2bd3637f681c9adb"
    },
    {
     "path": "fern.glb",
     "meta": {
      "role": "plant",
      "description": "고사리",
      "creator": "Quaternius",
      "title": "Fern",
      "publicID": "jqcanvH7D6",
      "source": "https://poly.pizza/m/jqcanvH7D6",
      "tris": 288,
      "bbox": {
       "min": [
        -4.523,
        0,
        -4.244
       ],
       "max": [
        4.523,
        2.689,
        4.244
       ]
      },
      "size": [
       9.046,
       2.689,
       8.488
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.8,
      "suggestedScale": 0.298,
      "materials": [
       "Leaves"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 57132,
     "sha256": "01bac769a1581c4b68a196155b95f23ade9bde9f0beb9fb25c71e9c23cd51d62"
    },
    {
     "path": "plant-leafy.glb",
     "meta": {
      "role": "plant",
      "description": "잎 넓은 풀",
      "creator": "Quaternius",
      "title": "Plant",
      "publicID": "NrJN7UcglF",
      "source": "https://poly.pizza/m/NrJN7UcglF",
      "tris": 120,
      "bbox": {
       "min": [
        -0.637,
        0,
        -0.693
       ],
       "max": [
        0.637,
        1.014,
        0.693
       ]
      },
      "size": [
       1.274,
       1.014,
       1.386
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.8,
      "suggestedScale": 0.789,
      "materials": [
       "Leaves"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 54472,
     "sha256": "6675b648408170ffc6de083d28590562de2fc257e6e90eb4a2c1848c09e0a66e"
    },
    {
     "path": "plant-big-leaf.glb",
     "meta": {
      "role": "plant",
      "description": "큰 잎 덩굴 식물(reyshapes)",
      "creator": "reyshapes",
      "title": "Big Leaf Plant",
      "publicID": "aKIm5k6l5F",
      "source": "https://poly.pizza/m/aKIm5k6l5F",
      "tris": 732,
      "bbox": {
       "min": [
        -3.004,
        0,
        -2.349
       ],
       "max": [
        3.004,
        6.529,
        2.349
       ]
      },
      "size": [
       6.008,
       6.529,
       4.698
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 2.2,
      "suggestedScale": 0.337,
      "materials": [
       "Material.007"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 12640,
     "sha256": "72fd80b83a4cb1fdab484b52767cee93fb2690229d2ab10c92bce66a0605f09c"
    },
    {
     "path": "bush-1.glb",
     "meta": {
      "role": "plant",
      "description": "잎 무성한 덤불",
      "creator": "Quaternius",
      "title": "Bush",
      "publicID": "ooG6CkLyE8",
      "source": "https://poly.pizza/m/ooG6CkLyE8",
      "tris": 360,
      "bbox": {
       "min": [
        -1.034,
        0,
        -1.033
       ],
       "max": [
        1.034,
        1.188,
        1.033
       ]
      },
      "size": [
       2.068,
       1.188,
       2.066
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.3,
      "suggestedScale": 1.094,
      "materials": [
       "Texture_Leaves"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 22668,
     "sha256": "dded4a4166b1c78e2e48fd696892aa01304f9d136cacaa8854e9b9978066e459"
    },
    {
     "path": "bush-2.glb",
     "meta": {
      "role": "plant",
      "description": "둥근 덤불",
      "creator": "Quaternius",
      "title": "Bush",
      "publicID": "92EytlU1El",
      "source": "https://poly.pizza/m/92EytlU1El",
      "tris": 364,
      "bbox": {
       "min": [
        -0.664,
        0,
        -0.845
       ],
       "max": [
        0.664,
        1.242,
        0.845
       ]
      },
      "size": [
       1.328,
       1.242,
       1.69
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.2,
      "suggestedScale": 0.966,
      "materials": [
       "Green"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 9112,
     "sha256": "7e69b37d1c52a156fb29f2b9fa2ebb18db20912fe39347362d4bc7f39188040c"
    },
    {
     "path": "log-moss.glb",
     "meta": {
      "role": "plant",
      "description": "이끼 낀 쓰러진 통나무",
      "creator": "Quaternius",
      "title": "Wood Log with Moss",
      "publicID": "nwsYvcI0bC",
      "source": "https://poly.pizza/m/nwsYvcI0bC",
      "tris": 614,
      "bbox": {
       "min": [
        -0.448,
        0,
        -1.335
       ],
       "max": [
        0.448,
        0.688,
        1.335
       ]
      },
      "size": [
       0.896,
       0.688,
       2.67
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.7,
      "suggestedScale": 1.017,
      "materials": [
       "Wood",
       "Green",
       "Mushroom_Top",
       "Mushroom_Bottom",
       "DarkGreen"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 18132,
     "sha256": "c4e13fe159553e022b1f415b0854dd50e95c067b18d9ff483a8652c5963f7e00"
    },
    {
     "path": "stump-moss.glb",
     "meta": {
      "role": "plant",
      "description": "이끼 낀 그루터기",
      "creator": "Quaternius",
      "title": "Tree Stump with Moss",
      "publicID": "nFvEbUX6LE",
      "source": "https://poly.pizza/m/nFvEbUX6LE",
      "tris": 232,
      "bbox": {
       "min": [
        -0.68,
        0,
        -0.516
       ],
       "max": [
        0.68,
        0.622,
        0.516
       ]
      },
      "size": [
       1.36,
       0.622,
       1.032
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.8,
      "suggestedScale": 1.286,
      "materials": [
       "Wood",
       "Green"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 7688,
     "sha256": "4043d9f3afe68f427f96358371870dd60e983eeb96d542c6bb9a36431052f5db"
    },
    {
     "path": "rock-moss.glb",
     "meta": {
      "role": "rock",
      "description": "이끼 바위",
      "creator": "Quaternius",
      "title": "Rock Moss",
      "publicID": "Oar39tFugM",
      "source": "https://poly.pizza/m/Oar39tFugM",
      "tris": 68,
      "bbox": {
       "min": [
        -0.369,
        0,
        -0.401
       ],
       "max": [
        0.369,
        0.557,
        0.401
       ]
      },
      "size": [
       0.738,
       0.557,
       0.802
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.5,
      "suggestedScale": 2.693,
      "materials": [
       "Rock",
       "Green"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 4580,
     "sha256": "8bfaed11d1f690dbf0db82a941bc8609a4db53f457e8d7b940e77b686eee927c"
    },
    {
     "path": "rock-moss-2.glb",
     "meta": {
      "role": "rock",
      "description": "이끼 바위(중간)",
      "creator": "Quaternius",
      "title": "Rock Medium",
      "publicID": "s1OJ3bBzqc",
      "source": "https://poly.pizza/m/s1OJ3bBzqc",
      "tris": 342,
      "bbox": {
       "min": [
        -1.613,
        0,
        -1.495
       ],
       "max": [
        1.613,
        2.26,
        1.495
       ]
      },
      "size": [
       3.226,
       2.26,
       2.99
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.5,
      "suggestedScale": 0.664,
      "materials": [
       "Rocks"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 31052,
     "sha256": "6308bff8756df3ef6fca0c78f9ff6eb9f7d7ec3d424b9a5aa34ce3786db382c1"
    },
    {
     "path": "rock-medium.glb",
     "meta": {
      "role": "rock",
      "description": "회색 바위(중간)",
      "creator": "Quaternius",
      "title": "Rock Medium",
      "publicID": "KZdEP3uUpa",
      "source": "https://poly.pizza/m/KZdEP3uUpa",
      "tris": 244,
      "bbox": {
       "min": [
        -1.524,
        0,
        -1.239
       ],
       "max": [
        1.524,
        1.899,
        1.239
       ]
      },
      "size": [
       3.048,
       1.899,
       2.478
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.5,
      "suggestedScale": 0.79,
      "materials": [
       "Rocks"
      ],
      "textures": [
       "map:512x512"
      ],
      "anims": []
     },
     "bytes": 29420,
     "sha256": "8a7b201eb82039ae4083d67688becc7df7d43587b6f1c6094a4bdb367295c7c0"
    },
    {
     "path": "rocks-cluster.glb",
     "meta": {
      "role": "rock",
      "description": "뾰족 바위 무리",
      "creator": "Quaternius",
      "title": "Rocks",
      "publicID": "Gl3pcrdnpW",
      "source": "https://poly.pizza/m/Gl3pcrdnpW",
      "tris": 426,
      "bbox": {
       "min": [
        -0.196,
        0,
        -0.23
       ],
       "max": [
        0.196,
        0.19,
        0.23
       ]
      },
      "size": [
       0.392,
       0.19,
       0.46
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 1.5,
      "suggestedScale": 7.895,
      "materials": [
       "Stone"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 8068,
     "sha256": "aeeadb2330aa892a87b7e7ebf795c621a08b4fd19972f833003575a55ad55d2a"
    },
    {
     "path": "rocks-flat.glb",
     "meta": {
      "role": "rock",
      "description": "납작한 바위 무리",
      "creator": "Quaternius",
      "title": "Rocks",
      "publicID": "OQvi8PIZ40",
      "source": "https://poly.pizza/m/OQvi8PIZ40",
      "tris": 84,
      "bbox": {
       "min": [
        -0.152,
        0,
        -0.131
       ],
       "max": [
        0.152,
        0.08,
        0.131
       ]
      },
      "size": [
       0.304,
       0.08,
       0.262
      ],
      "forward": "+Z",
      "origin": "bottom-center",
      "suggestedHeight": 0.8,
      "suggestedScale": 10,
      "materials": [
       "Stone_Dark"
      ],
      "textures": [],
      "anims": []
     },
     "bytes": 3588,
     "sha256": "fc3ff9afb84d875dd0899f3cf779a8a5cdf2167d2165013b8be364254aed4a1a"
    }
   ],
   "base": "ruins-kit/1/"
  },
  {
   "id": "sfx-agent",
   "version": 1,
   "kind": "audio",
   "title": "Agent Action SFX",
   "author": "여러 저작자 — 파일별 meta.author (EmoPreben, Kenney, bart, Ben Jaszczak, et al. (submitted by bart), NenadSimic, SpringySpringo, qubodup, rubberduck, artisticdude, Vehicle, Macro, Cough-E, EZduzziteh, GGBotNet, mikeask, looneybits, Rocha57, bonebrah, themightyglider, mieki256, FacadeGaikan, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "VERDICT(game_id verdict, ~/SRC/globalShadow — 어두운 영웅의 잠입·저격·탐험 액션) 용으로 만들었지만 어느 게임이든 쓸 수 있다. 잠입·저격 액션 효과음: 소음기 권총·권총·저격총(크게, 긴 메아리)·노리쇠·재장전·소총·기관단총 연사, 몸/콘크리트 피탄, 주먹·제압·쓰러짐·휘두름, 발소리(콘크리트 4·풀 2·흙 1)·점프·착지, 문·자물쇠·장치 딸깍, 키패드·해킹 진행/성공/실패, 경보 루프 2종, 자동차(시동·공회전/고회전 루프·급가속·문·경적·타이어 끽·충돌), 퍼즐 돌 끌림(한 번·루프)·돌 쿵, 유리 깨짐, 심장 박동 루프 2종(조준경 집중), 카메라 셔터(증거 사진). 무전(radio-beep·radio-squelch·radio-static-loop)은 sfx-ui 팩에 이미 있어 넣지 않았다. 모노 mp3, 0.4초 미만은 피크 -1.5 dBFS 기준(LUFS 상한), 나머지는 -16~-21 LUFS(meta.lufs). 앞 무음 없음 — 발사·타격이 0초에 시작한다. 총성은 The Free Firearm Sound Library(CC0, 실제 총 녹음: Mosin Nagant·AR-15·PPSh·Walther PPQ), 소음기는 EmoPreben·bart 녹음. 엔진·타이어 끽·키패드·클랙슨 등 마땅한 CC0 녹음이 없는 것은 numpy 합성(meta.method — 엔진은 실제 엔진 녹음의 스펙트럼을 질감으로 섞었다). 루프는 meta.loopStart/loopEnd(초, 디코딩 기준)로 AudioBufferSourceNode 에 넣는다. 엔진 루프는 playbackRate 로 회전수를 바꿔 쓰면 된다(idle 850rpm·rev 3600rpm). 원본은 전부 CC0(파일별 meta.author/source), 합성음·가공물도 CC0. 만드는 법: python3 -I tools/audio/build-audio-verdict.py sfx-agent",
   "tags": [
    "sfx",
    "stealth",
    "gun",
    "sniper",
    "suppressed",
    "melee",
    "footstep",
    "door",
    "hack",
    "alarm",
    "car",
    "puzzle",
    "heartbeat",
    "camera"
   ],
   "files": [
    {
     "path": "pistol-suppressed-1.mp3",
     "meta": {
      "role": "gun-suppressed",
      "description": "소음기 권총 퓻(주인공) — EmoPreben Silencers",
      "duration": 0.5,
      "loop": false,
      "lufs": -21.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-silencers/Silencers - 1.wav",
       "kenney-rpg/Audio/metalClick.ogg"
      ],
      "method": "저역 툭: 사인 140→70Hz 짧은 감쇠",
      "author": "EmoPreben, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/silencers-by-emopreben",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 6941,
     "sha256": "03b39b74ec6687dc15c58851214e1f250e13435ae4f59e44ec5565bfbdde31b8"
    },
    {
     "path": "pistol-suppressed-2.mp3",
     "meta": {
      "role": "gun-suppressed",
      "description": "소음기 권총 퓻(주인공) — EmoPreben Silencers",
      "duration": 0.5,
      "loop": false,
      "lufs": -21,
      "peak": -3.2,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-silencers/Silencers - 5.wav",
       "kenney-rpg/Audio/metalClick.ogg"
      ],
      "method": "저역 툭: 사인 140→70Hz 짧은 감쇠",
      "author": "EmoPreben, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/silencers-by-emopreben",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 6941,
     "sha256": "576801548196c97ea2486e8693f62cdb051d0b29567dd1aaaff66d3c9c4e8d74"
    },
    {
     "path": "pistol-suppressed-3.mp3",
     "meta": {
      "role": "gun-suppressed",
      "description": "소음기 권총 퓻(조금 높게) — bart silencer",
      "duration": 0.5,
      "loop": false,
      "lufs": -21,
      "peak": -4.5,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-silencer/silencer.wav",
       "kenney-rpg/Audio/metalClick.ogg"
      ],
      "method": "저역 툭: 사인 140→70Hz 짧은 감쇠",
      "author": "bart, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/hollywood-style-pistol-silencer-sound-effect",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 6941,
     "sha256": "3d14c77a599ed6925883c58457c1fd1ce8528ce96e750719eace68ed28caa846"
    },
    {
     "path": "pistol-shot.mp3",
     "meta": {
      "role": "gun-pistol",
      "description": "권총 한 발(소음기 없음, 적) — Walther PPQ 9mm",
      "duration": 1.199,
      "loop": false,
      "lufs": -22.5,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "vd-firearm/Walther PPQ/X_39P.wav"
      ],
      "author": "Ben Jaszczak, et al. (submitted by bart)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library"
      ]
     },
     "bytes": 17598,
     "sha256": "9d01816273e8eafc94470457492780c423fc2a6d68907cb17bca4ea081b4e922"
    },
    {
     "path": "sniper-shot.mp3",
     "meta": {
      "role": "gun-sniper",
      "description": "저격총 한 발 — Mosin Nagant 가까이+중간 거리 메아리 + 저역 압력파 + 먼 반향(약 4초)",
      "duration": 4.2,
      "loop": false,
      "lufs": -17.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-firearm/Mosin Nagant/M_21P.wav",
       "vd-firearm/Mosin Nagant/M_26P.wav",
       "distant-explosion/NenadSimic - Muffled Distant Explosion.wav"
      ],
      "method": "저격 압력파: 사인 75→32Hz + 포화, 먼 반향: 잡음 IR 잔향(0.12초 지연)",
      "author": "Ben Jaszczak, et al. (submitted by bart), NenadSimic, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://opengameart.org/content/muffled-distant-explosion",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 68171,
     "sha256": "4905bdde75ac0191764232218f958ef608af907b1598475f073b9e2d6dd8f3f2"
    },
    {
     "path": "sniper-bolt.mp3",
     "meta": {
      "role": "gun-bolt",
      "description": "노리쇠 당겼다 밀기(저격 후 장전)",
      "duration": 0.85,
      "loop": false,
      "lufs": -17.9,
      "peak": -4.8,
      "channels": 1,
      "origin": [
       "vd-gun-reload/shotguncock_0.wav",
       "kenney-rpg/Audio/metalClick.ogg",
       "kenney-rpg/Audio/metalLatch.ogg"
      ],
      "author": "SpringySpringo, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/gun-reload-sounds",
       "https://kenney.nl/assets/rpg-audio"
      ]
     },
     "bytes": 11016,
     "sha256": "fa4aab706b042dcd343c4474410993dada592a81e1693a28629f9f5e3a288ad3"
    },
    {
     "path": "reload-pistol.mp3",
     "meta": {
      "role": "gun-reload",
      "description": "권총 탄창 갈기 — SpringySpringo",
      "duration": 1.51,
      "loop": false,
      "lufs": -18,
      "peak": -3.5,
      "channels": 1,
      "origin": [
       "vd-gun-reload/gunreload1.wav"
      ],
      "author": "SpringySpringo",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/gun-reload-sounds"
      ]
     },
     "bytes": 18853,
     "sha256": "283fc91856d9a3743c782b9193613f6b961ff71ac1859fde808699488b382d6e"
    },
    {
     "path": "reload-rifle.mp3",
     "meta": {
      "role": "gun-reload",
      "description": "소총 탄창 갈기 — SpringySpringo",
      "duration": 1.494,
      "loop": false,
      "lufs": -21.9,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "vd-gun-reload/assaultriflereload1_0.wav"
      ],
      "author": "SpringySpringo",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/gun-reload-sounds"
      ]
     },
     "bytes": 18853,
     "sha256": "f109cb4dcf9d56ad7df3587f810b85cc6b0f3eb5e4bd83b6719017e3f7973b51"
    },
    {
     "path": "rifle-shot.mp3",
     "meta": {
      "role": "gun-rifle",
      "description": "소총 한 발(경비) — AR-15",
      "duration": 1.3,
      "loop": false,
      "lufs": -23.7,
      "peak": -2,
      "channels": 1,
      "origin": [
       "vd-firearm/AR-15/D_32P.wav"
      ],
      "author": "Ben Jaszczak, et al. (submitted by bart)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library"
      ]
     },
     "bytes": 19061,
     "sha256": "f6e2e2b617d87cdaf23385bbcff72af991bd8d1b557a9b0794235b09a2c3d8fd"
    },
    {
     "path": "smg-burst.mp3",
     "meta": {
      "role": "gun-burst",
      "description": "기관단총 짧은 연사(4발, 경비) — PPSh",
      "duration": 1.3,
      "loop": false,
      "lufs": -19.7,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "vd-firearm/PPSh/P_32P.wav"
      ],
      "author": "Ben Jaszczak, et al. (submitted by bart)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library"
      ]
     },
     "bytes": 19061,
     "sha256": "c654d1bfc236fc9020428519bf0148e48b908b52aa2ece7b004bbdac7bda6037"
    },
    {
     "path": "smg-burst-long.mp3",
     "meta": {
      "role": "gun-burst",
      "description": "기관단총 긴 연사(약 1초) — PPSh",
      "duration": 2,
      "loop": false,
      "lufs": -16,
      "peak": -3,
      "channels": 1,
      "origin": [
       "vd-firearm/PPSh/P_34P.wav"
      ],
      "author": "Ben Jaszczak, et al. (submitted by bart)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library"
      ]
     },
     "bytes": 28935,
     "sha256": "885450fa90d7555338ae4490396b8a35506fd4796c1bf0e98cd838276cea8a17"
    },
    {
     "path": "impact-flesh-1.mp3",
     "meta": {
      "role": "impact-flesh",
      "description": "총알이 몸에 맞음 퍽",
      "duration": 0.45,
      "loop": false,
      "lufs": -17.9,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-towel-body/wet_towel_on_body-07.flac",
       "kenney-impact/Audio/impactPunch_medium_002.ogg"
      ],
      "method": "탄 맞는 딱: 고역 잡음 6ms",
      "author": "qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/40-wet-towel-clubpoundhitattack-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 6314,
     "sha256": "69f1f17a7fb63717acc4a1c019ce748741e792799a6ae47f78715d525089dbfd"
    },
    {
     "path": "impact-flesh-2.mp3",
     "meta": {
      "role": "impact-flesh",
      "description": "총알이 몸에 맞음 퍽",
      "duration": 0.45,
      "loop": false,
      "lufs": -17.9,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-towel-body/wet_towel_on_body-17.flac",
       "kenney-impact/Audio/impactPunch_medium_004.ogg"
      ],
      "method": "탄 맞는 딱: 고역 잡음 6ms",
      "author": "qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/40-wet-towel-clubpoundhitattack-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 6314,
     "sha256": "329b340aa985899bfbd2e9d020b48514b9eaa43c34afa9853ac85fe1379e73c9"
    },
    {
     "path": "impact-concrete-1.mp3",
     "meta": {
      "role": "impact-concrete",
      "description": "총알이 콘크리트·벽에 맞음(딱+부스러기)",
      "duration": 0.6,
      "loop": false,
      "lufs": -21.3,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "synthesized",
       "rd-breaking/bfh1_rock_hit_01.ogg",
       "kenney-impact/Audio/impactMining_001.ogg",
       "rd-sfx100b/sfx100v2_stones_01.ogg"
      ],
      "method": "탄 맞는 딱: 고역 잡음 5ms",
      "author": "rubberduck, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/100-cc0-sfx-2",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 7881,
     "sha256": "7cf7c25466a04556bd869b60d0802e2eacb300a85871147540e33a25b6070d8e"
    },
    {
     "path": "impact-concrete-2.mp3",
     "meta": {
      "role": "impact-concrete",
      "description": "총알이 콘크리트·돌에 맞음(딱+깨짐)",
      "duration": 0.6,
      "loop": false,
      "lufs": -21.5,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "rd-breaking/bfh1_rock_breaking_01.ogg",
       "kenney-impact/Audio/impactMining_003.ogg",
       "rd-sfx100b/sfx100v2_stones_03.ogg"
      ],
      "method": "탄 맞는 딱: 고역 잡음 5ms",
      "author": "rubberduck, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/100-cc0-sfx-2",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 7881,
     "sha256": "83f01a61a5cfa89a12a1ef082bda552534719069b7c1fa8c9902601aa7c4c015"
    },
    {
     "path": "punch-1.mp3",
     "meta": {
      "role": "punch",
      "description": "주먹 퍽",
      "duration": 0.5,
      "loop": false,
      "lufs": -19.6,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "vd-punch/qubodupPunch02.ogg",
       "kenney-impact/Audio/impactPunch_heavy_000.ogg"
      ],
      "author": "qubodup, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/punch",
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 6941,
     "sha256": "7cefd0989660412b85c9121c8c9f3f1d54729dca494340e8607beb39ba3c073c"
    },
    {
     "path": "punch-2.mp3",
     "meta": {
      "role": "punch",
      "description": "주먹 퍽(무겁게)",
      "duration": 0.5,
      "loop": false,
      "lufs": -20.3,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-punch/qubodupPunch04.ogg",
       "kenney-impact/Audio/impactPunch_heavy_003.ogg"
      ],
      "author": "qubodup, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/punch",
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 6941,
     "sha256": "10273b2a85678c8ceae0c9f447dac46a7cf9bcf03c3f31ba0be27433e3ef1e09"
    },
    {
     "path": "takedown.mp3",
     "meta": {
      "role": "takedown",
      "description": "뒤에서 제압 — 퍽 + 0.45초 뒤 쓰러짐",
      "duration": 1.4,
      "loop": false,
      "lufs": -18.3,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-punch/qubodupPunch05.ogg",
       "vd-towel-body/wet_towel_on_body-35.flac",
       "kenney-rpg/Audio/cloth2.ogg",
       "vd-towel-floor/wet_towel_on_floor-10.flac",
       "kenney-impact/Audio/impactSoft_heavy_002.ogg"
      ],
      "method": "쓰러짐 저역 쿵: 사인 90→45Hz",
      "author": "qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/punch",
       "https://opengameart.org/content/40-wet-towel-clubpoundhitattack-sounds",
       "https://kenney.nl/assets/rpg-audio",
       "https://opengameart.org/content/12-wet-towel-hittingfallingpunching-floor-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 17599,
     "sha256": "5b7be94a2df1c0c1866dc416019ae4cea3e23b504b2f770036a4b06e02b08b8b"
    },
    {
     "path": "body-fall.mp3",
     "meta": {
      "role": "body-fall",
      "description": "몸이 바닥에 쓰러짐",
      "duration": 1.194,
      "loop": false,
      "lufs": -18.7,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-towel-floor/wet_towel_on_floor-12.flac",
       "vd-towel-floor/wet_towel_on_floor-06.flac",
       "kenney-impact/Audio/impactSoft_heavy_000.ogg",
       "kenney-rpg/Audio/cloth4.ogg"
      ],
      "method": "쓰러짐 저역 쿵: 사인 85→40Hz",
      "author": "qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/12-wet-towel-hittingfallingpunching-floor-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 15091,
     "sha256": "41a87217b5c7b8defc649aa99d55356bde6038fca6a7ae1bd03620322766932b"
    },
    {
     "path": "melee-swing.mp3",
     "meta": {
      "role": "swing",
      "description": "맨손·칼 휘두름 휙",
      "duration": 0.117,
      "loop": false,
      "lufs": -17.9,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "swishes/swishes/swish-3.wav"
      ],
      "author": "artisticdude",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/swishes-sound-pack"
      ]
     },
     "bytes": 2239,
     "sha256": "828b4173b02f26b659abf90c5e8af0655e087a96eb50446b195f9bb9a773e3fa"
    },
    {
     "path": "footstep-concrete-1.mp3",
     "meta": {
      "role": "footstep-concrete",
      "description": "콘크리트 발소리",
      "duration": 0.103,
      "loop": false,
      "lufs": -29,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_concrete_000.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 1925,
     "sha256": "074a8ec567db435eb4f2fddc232f81cda1f3508b594e1acb250ec3df7a8f807f"
    },
    {
     "path": "footstep-concrete-2.mp3",
     "meta": {
      "role": "footstep-concrete",
      "description": "콘크리트 발소리",
      "duration": 0.106,
      "loop": false,
      "lufs": -30.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_concrete_001.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2239,
     "sha256": "9f0de777028d43a43a66618552632b1876169db95d0740de325470462cb2573b"
    },
    {
     "path": "footstep-concrete-3.mp3",
     "meta": {
      "role": "footstep-concrete",
      "description": "콘크리트 발소리",
      "duration": 0.11,
      "loop": false,
      "lufs": -30.7,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_concrete_002.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2239,
     "sha256": "96a4f51114a8fe590cb00d99c87229b82a44e723c6332b42813bb407911753a5"
    },
    {
     "path": "footstep-concrete-4.mp3",
     "meta": {
      "role": "footstep-concrete",
      "description": "콘크리트 발소리",
      "duration": 0.108,
      "loop": false,
      "lufs": -29.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_concrete_003.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2239,
     "sha256": "c997180bf2be82e888ca8bf10cf10118c3790018129d20d6c3b54594d15b2f65"
    },
    {
     "path": "footstep-grass-1.mp3",
     "meta": {
      "role": "footstep-grass",
      "description": "풀 발소리",
      "duration": 0.168,
      "loop": false,
      "lufs": -29.1,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_grass_000.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2866,
     "sha256": "89e864ed40b3d65e23e850916c6d178b5b90ac3505e6fe4baf3894581160dead"
    },
    {
     "path": "footstep-grass-2.mp3",
     "meta": {
      "role": "footstep-grass",
      "description": "풀 발소리",
      "duration": 0.147,
      "loop": false,
      "lufs": -29.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_grass_003.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2552,
     "sha256": "fee11cb500568ae610b87bc2fae83a5121b0d3299e3811a3dff6580e62883c2e"
    },
    {
     "path": "footstep-dirt-1.mp3",
     "meta": {
      "role": "footstep-dirt",
      "description": "흙·진흙 발소리",
      "duration": 0.322,
      "loop": false,
      "lufs": -22.2,
      "peak": -2.2,
      "channels": 1,
      "origin": [
       "tinysized/sfx-cc0/mud-steps-02.wav"
      ],
      "author": "Vehicle",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx"
      ]
     },
     "bytes": 4747,
     "sha256": "42f525c51a46d26ff1fb91bb269f1c7595ed6c10bc50341b4726fe25d854aa34"
    },
    {
     "path": "jump.mp3",
     "meta": {
      "role": "jump",
      "description": "점프(가죽 장화 디딤 + 옷 스침)",
      "duration": 0.341,
      "loop": false,
      "lufs": -24.5,
      "peak": -2,
      "channels": 1,
      "origin": [
       "tinysized/sfx-cc0/boots-leather-jump-01.wav",
       "kenney-rpg/Audio/cloth1.ogg",
       "swishes/swishes/swish-9.wav"
      ],
      "author": "Vehicle, Kenney, artisticdude",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx",
       "https://kenney.nl/assets/rpg-audio",
       "https://opengameart.org/content/swishes-sound-pack"
      ]
     },
     "bytes": 5060,
     "sha256": "eb11c066f37d94db673ad4ada2be79f18b99c7805ce5a2f4b86e7b28df2b5fca"
    },
    {
     "path": "land.mp3",
     "meta": {
      "role": "land",
      "description": "착지",
      "duration": 0.6,
      "loop": false,
      "lufs": -17.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-jump-landing/Jump 1.wav",
       "kenney-impact/Audio/footstep_concrete_001.ogg",
       "kenney-impact/Audio/footstep_concrete_003.ogg",
       "kenney-impact/Audio/impactSoft_medium_001.ogg"
      ],
      "method": "착지 저역: 사인 110→55Hz",
      "author": "Macro, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/jump-landing",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 7881,
     "sha256": "f16c24ee620a8d7036a95ff89c876bb0cc12ab62d9a389e106e0b3e4e76f7122"
    },
    {
     "path": "door-open.mp3",
     "meta": {
      "role": "door-open",
      "description": "문 열림 — qubodup Door Set",
      "duration": 0.54,
      "loop": false,
      "lufs": -20.4,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "vd-door-set/qubodup-DoorSet/flac/qubodup-DoorOpen02.flac"
      ],
      "author": "qubodup",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/door-open-door-close-set"
      ]
     },
     "bytes": 7254,
     "sha256": "b96180a4c3f0ce738520bb1fc0fb7f369efc5a97da674f49e2ed4e6f33424323"
    },
    {
     "path": "door-close.mp3",
     "meta": {
      "role": "door-close",
      "description": "문 닫힘 — qubodup Door Set",
      "duration": 0.448,
      "loop": false,
      "lufs": -21.3,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-door-set/qubodup-DoorSet/flac/qubodup-DoorClose03.flac"
      ],
      "author": "qubodup",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/door-open-door-close-set"
      ]
     },
     "bytes": 6314,
     "sha256": "63a747fcf1133a13f9814ef06930164fafbb9d34efa2771686218f776167ce4f"
    },
    {
     "path": "door-locked.mp3",
     "meta": {
      "role": "door-locked",
      "description": "잠긴 문 손잡이 덜컥 — Cough-E",
      "duration": 0.817,
      "loop": false,
      "lufs": -19,
      "peak": -2.3,
      "channels": 1,
      "origin": [
       "vd-door-lock/DoorLockSounds/LockedDoorHandleJiggle.wav"
      ],
      "author": "Cough-E",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/door-lock-sounds"
      ]
     },
     "bytes": 10703,
     "sha256": "bfdb39d0aa281ce02f422d4f687e2e9b9817cf1bf081864100feacfbad9dead4"
    },
    {
     "path": "lock-open.mp3",
     "meta": {
      "role": "lock-open",
      "description": "자물쇠 풀림 철컥",
      "duration": 0.676,
      "loop": false,
      "lufs": -22.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-door-lock/DoorLockSounds/UnlockDoor.wav",
       "rd-woodmetal/lock_open_01.ogg"
      ],
      "author": "Cough-E, rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/door-lock-sounds",
       "https://opengameart.org/content/100-cc0-metal-and-wood-sfx"
      ]
     },
     "bytes": 8822,
     "sha256": "c6d3b8111b572f2f61b0caf4aaae2c9623283d0b2d34b354cca2c352fdb0b472"
    },
    {
     "path": "mechanism-click.mp3",
     "meta": {
      "role": "mechanism",
      "description": "장치·스위치·퍼즐 맞물림 딸깍",
      "duration": 0.4,
      "loop": false,
      "lufs": -21.3,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "tinysized/sfx-cc0/keyhole-lockbox-turn-01.wav",
       "kenney-rpg/Audio/metalClick.ogg"
      ],
      "method": "맞물림 저역 톡: 사인 180→110Hz",
      "author": "Vehicle, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 5687,
     "sha256": "4e796e984f01a98823e8128ab6f8d2dc112ab326e4b47789f94a861719c5fc27"
    },
    {
     "path": "keypad-beep-1.mp3",
     "meta": {
      "role": "keypad",
      "description": "키패드 누름 삑",
      "duration": 0.09,
      "loop": false,
      "lufs": -18.5,
      "peak": -11.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/click_002.ogg"
      ],
      "method": "키패드 삑: 사각파 2400Hz 70ms(압전 버저 대역)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 1925,
     "sha256": "2f9aab68eb970bfc1604f791df392705ec1a2243fd585980322f6e8dc569f8cf"
    },
    {
     "path": "keypad-beep-2.mp3",
     "meta": {
      "role": "keypad",
      "description": "키패드 누름 삑(조금 높게)",
      "duration": 0.09,
      "loop": false,
      "lufs": -18.4,
      "peak": -11.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/click_002.ogg"
      ],
      "method": "키패드 삑: 사각파 2600Hz 70ms(압전 버저 대역)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 1925,
     "sha256": "ba2850d75a903fb880b9d6651926fd3f35e4efb3550c0bb19c288b80462704d9"
    },
    {
     "path": "keypad-beep-3.mp3",
     "meta": {
      "role": "keypad",
      "description": "키패드 누름 삑(더 높게)",
      "duration": 0.09,
      "loop": false,
      "lufs": -18.5,
      "peak": -11.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/click_002.ogg"
      ],
      "method": "키패드 삑: 사각파 2800Hz 70ms(압전 버저 대역)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 1925,
     "sha256": "97636e47ec3224d0e55995dd9b32abbdf9779aa609a8ac635483453ff4458b90"
    },
    {
     "path": "keypad-accept.mp3",
     "meta": {
      "role": "keypad-accept",
      "description": "비밀번호 맞음 삐빅 + 걸쇠",
      "duration": 0.75,
      "loop": false,
      "lufs": -18,
      "peak": -14,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-rpg/Audio/metalLatch.ogg"
      ],
      "method": "키패드 맞음: 사각파 2093→2794Hz 두 번",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 9762,
     "sha256": "66c9158b4a0e6837e0abebe2215a4a6ffbb5727d3fe438babd90053f5307ebfa"
    },
    {
     "path": "keypad-deny.mp3",
     "meta": {
      "role": "keypad-deny",
      "description": "비밀번호 틀림 부-부-",
      "duration": 0.38,
      "loop": false,
      "lufs": -17.4,
      "peak": -6.1,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "틀림 버저: 톱니파 220Hz + 233Hz(맥놀이) 두 번, 대역 통과",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 5374,
     "sha256": "e2ee40146e4efaf7bfc86275825bc31356d18ede0cce4ed0ca23c69ccba23eb6"
    },
    {
     "path": "hack-loop.mp3",
     "meta": {
      "role": "hack-progress",
      "description": "해킹 진행 중 데이터 지지직·삑삑 루프",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -21,
      "peak": -12.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-scifi/Audio/computerNoise_000.ogg",
       "kenney-scifi/Audio/computerNoise_002.ogg"
      ],
      "method": "데이터 삑: 사인 1.4~3.2kHz 무작위 짧은 음(2초 주기로 감아 넣음)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 27316,
     "sha256": "2287048d8276b0af7589a88603c1b5a1c2c39e1432e06d8863d281010333028b"
    },
    {
     "path": "hack-success.mp3",
     "meta": {
      "role": "hack-success",
      "description": "해킹 성공",
      "duration": 0.9,
      "loop": false,
      "lufs": -18,
      "peak": -6.2,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/confirmation_002.ogg"
      ],
      "method": "해킹 성공: 사각파 1047·1319·1568·2093Hz 아르페지오",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 11643,
     "sha256": "f68c03f2e0333ef9fbcdfccccd4a9a8f25b39601b8077bbbf3ee82661cd38dce"
    },
    {
     "path": "hack-fail.mp3",
     "meta": {
      "role": "hack-fail",
      "description": "해킹 실패·접근 거부",
      "duration": 0.6,
      "loop": false,
      "lufs": -18,
      "peak": -3.2,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/error_006.ogg",
       "kenney-ui/Audio/glitch_002.ogg"
      ],
      "method": "거부 버저: 톱니파 150Hz + 159Hz 0.35초, 대역 통과",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 7881,
     "sha256": "8db8492d62093dd65fb27630883c69b7c38eb3660dcc6f1184999ae814440f1d"
    },
    {
     "path": "alarm-loop.mp3",
     "meta": {
      "role": "alarm",
      "description": "보안 경보(두 음 교대) — EZduzziteh Alarm 1",
      "duration": 2.046,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.945986,
      "lufs": -18,
      "peak": -13.8,
      "channels": 1,
      "origin": [
       "vd-alarm/alarm_2.ogg"
      ],
      "author": "EZduzziteh",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/alarm-1"
      ]
     },
     "bytes": 25436,
     "sha256": "bf68df0ae2b2c89bbca768d5b82f32257e18001b057424387d9465e701d353bc"
    },
    {
     "path": "alarm-klaxon-loop.mp3",
     "meta": {
      "role": "alarm",
      "description": "시설 경보 클랙슨 우웅(1.6초 주기)",
      "duration": 1.8,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.7,
      "lufs": -18,
      "peak": -13.9,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "클랙슨: 사각·톱니 섞음 400→900Hz 상승(1.6초 주기) + 대역 통과 + 포화",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 22301,
     "sha256": "6d5800806786a9097292026002ae28bd52c44ac6841ca92423873520aee2f391"
    },
    {
     "path": "car-engine-start.mp3",
     "meta": {
      "role": "car-start",
      "description": "시동(→ 공회전으로 잦아듦)",
      "duration": 2.754,
      "loop": false,
      "lufs": -16,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-car-pack/Car_Engine_Start_Up.ogg",
       "vd-car-pack/Car_Engine_Loop.ogg"
      ],
      "method": "시동 뒤 공회전 꼬리: 엔진 합성 850rpm",
      "author": "GGBotNet, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 33899,
     "sha256": "7cc6eb3499ba1f6f745b880a710d68636dcc6fa83549b12f148e2583c8a66c1b"
    },
    {
     "path": "car-engine-idle-loop.mp3",
     "meta": {
      "role": "car-engine",
      "description": "엔진 공회전 루프(850rpm) — playbackRate 로 회전수 조절",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -18,
      "peak": -5.5,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-car-pack/Car_Engine_Loop.ogg"
      ],
      "method": "엔진 합성: 점화 주파수(850rpm→28.3Hz) 배기 펄스·배음·반 차수 + 배기관 공명 EQ + 흡기 잡음(2초 주기)",
      "author": "GGBotNet, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 27316,
     "sha256": "c00d6f294a41b7946870a7dc4e507a56e0b42c6bda40afe136746802ae837924"
    },
    {
     "path": "car-engine-rev-loop.mp3",
     "meta": {
      "role": "car-engine",
      "description": "엔진 고회전 루프(3600rpm, 가속 중)",
      "duration": 1.7,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.6,
      "lufs": -17,
      "peak": -9.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-car-pack/Car_Engine_Loop.ogg"
      ],
      "method": "엔진 합성: 점화 주파수(3600rpm→120Hz) 배기 펄스·배음 + 배기관 공명 EQ + 흡기 잡음(1.5초 주기)",
      "author": "GGBotNet, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 21360,
     "sha256": "149bf446d294a90e250ca1ef214a88bd9d75f32993ca0e6c85e2d04d540fe165"
    },
    {
     "path": "car-accelerate.mp3",
     "meta": {
      "role": "car-accelerate",
      "description": "급가속 부웅 — mikeask",
      "duration": 3.199,
      "loop": false,
      "lufs": -16,
      "peak": -8.4,
      "channels": 1,
      "origin": [
       "vd-car-accel/car acceleration.wav"
      ],
      "author": "mikeask",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-acceleration"
      ]
     },
     "bytes": 39228,
     "sha256": "99fd604230ddcaefdfcaeda1a5e6a4fac50fe47fcfd242830832508ad3a3c526"
    },
    {
     "path": "car-door-open.mp3",
     "meta": {
      "role": "car-door",
      "description": "자동차 문 열림",
      "duration": 0.982,
      "loop": false,
      "lufs": -24.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-car-door/door_opening.wav"
      ],
      "author": "looneybits",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/cardoorsfx"
      ]
     },
     "bytes": 12583,
     "sha256": "efdba72912f82ff6081b510514af0f6fefc85985e5d9ddcaa3df1207c54397de"
    },
    {
     "path": "car-door-close.mp3",
     "meta": {
      "role": "car-door",
      "description": "자동차 문 닫힘 쾅",
      "duration": 0.705,
      "loop": false,
      "lufs": -18.4,
      "peak": -2,
      "channels": 1,
      "origin": [
       "vd-car-door/door_closing.wav",
       "vd-car-pack/Car_Door_Close.ogg"
      ],
      "author": "looneybits, GGBotNet",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/cardoorsfx",
       "https://opengameart.org/content/car-sound-effects-pack-low-quality"
      ]
     },
     "bytes": 9135,
     "sha256": "4802e38c30fc0d801bf866bd6df6dd43b8685aae80c9283cf4cc22d245037118"
    },
    {
     "path": "car-horn.mp3",
     "meta": {
      "role": "car-horn",
      "description": "경적 빵 — GGBotNet",
      "duration": 0.451,
      "loop": false,
      "lufs": -17.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-car-pack/Car_Horn.ogg"
      ],
      "author": "GGBotNet",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality"
      ]
     },
     "bytes": 6314,
     "sha256": "0230940887fc7ef75cb715ba610523224b8c6edb1db838455b59b5a5128b318c"
    },
    {
     "path": "car-horn-double.mp3",
     "meta": {
      "role": "car-horn",
      "description": "경적 빵빵",
      "duration": 0.771,
      "loop": false,
      "lufs": -17,
      "peak": -2.8,
      "channels": 1,
      "origin": [
       "vd-car-pack/Car_Horn.ogg"
      ],
      "author": "GGBotNet",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality"
      ]
     },
     "bytes": 10076,
     "sha256": "7c9c35a0cc2678bdf3958cb04b6f9144dd484174ea9122c5a21dcd91abead46f"
    },
    {
     "path": "tire-screech.mp3",
     "meta": {
      "role": "tire-screech",
      "description": "타이어 끽(1.4초)",
      "duration": 1.399,
      "loop": false,
      "lufs": -17.1,
      "peak": -4.4,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-car-spin/car_spinning.wav"
      ],
      "method": "타이어 끽: 1.15kHz 배음 3개 + 음정 흔들림 + 붙음-미끄러짐 진폭 변조 + 대역 잡음",
      "author": "Rocha57, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/spin",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 17599,
     "sha256": "b75dc2dda4c21893cdcb46780f988a781fde7aaf28556d0b3f6f9c2f4320edba"
    },
    {
     "path": "tire-screech-loop.mp3",
     "meta": {
      "role": "tire-screech",
      "description": "타이어 끽 루프(드리프트 중)",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -18,
      "peak": -7.2,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "타이어 끽 루프: 1.15kHz 배음 3개 + 주기 음정 흔들림·진폭 변조 + 원형 대역 잡음(2초 주기)",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 27316,
     "sha256": "4b29bef78713ee3268c91487d3eadfed0cd2ae6543808b1d49632e1fbde4d21e"
    },
    {
     "path": "car-crash.mp3",
     "meta": {
      "role": "car-crash",
      "description": "자동차 충돌(쾅 + 유리 + 파편)",
      "duration": 3.04,
      "loop": false,
      "lufs": -19.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-crash/qubodup-crash.ogg",
       "kenney-impact/Audio/impactMetal_heavy_003.ogg",
       "kenney-impact/Audio/impactPlate_heavy_002.ogg",
       "rd-breaking/bfh1_glass_breaking_03.ogg",
       "rd-breaking/bfh1_metal_falling_03.ogg"
      ],
      "method": "충돌 저역 쿵: 사인 70→30Hz + 포화",
      "author": "qubodup, Kenney, rubberduck, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/crash-collision",
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 49781,
     "sha256": "e8016bff50049d404c8d47589869a3fbada890b482cd3a760945c43c30df014e"
    },
    {
     "path": "stone-slide.mp3",
     "meta": {
      "role": "stone-slide",
      "description": "돌판·석상이 끌리며 움직임(1.8초)",
      "duration": 1.995,
      "loop": false,
      "lufs": -17,
      "peak": -2,
      "channels": 1,
      "origin": [
       "vd-stone-door/stone_door.ogg",
       "vd-boulder/move_boulder.ogg",
       "earthquake/shake.flac"
      ],
      "author": "bonebrah, themightyglider, mieki256",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/stone-door",
       "https://opengameart.org/content/moving-boulder",
       "https://opengameart.org/content/earthquake-and-open-sesame"
      ]
     },
     "bytes": 24809,
     "sha256": "1283735647a05a2d8b01d6742c61890cf450081b51bb716c270560d2ab01eac3"
    },
    {
     "path": "stone-grind-loop.mp3",
     "meta": {
      "role": "stone-grind",
      "description": "돌 끌림 지속 루프(퍼즐 돌을 미는 동안)",
      "duration": 2.7,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.6,
      "lufs": -18,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-stone-door/stone_door.ogg",
       "vd-boulder/move_boulder.ogg"
      ],
      "method": "돌 끌림 루프: 녹음 스펙트럼의 원형 잡음 + 주기 변조 + 원형 알갱이 파열음 + 저역 원형 잡음(2.5초 주기)",
      "author": "bonebrah, themightyglider, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/stone-door",
       "https://opengameart.org/content/moving-boulder",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 33272,
     "sha256": "5c3e97d27e5bf083287148658154844abee74371da96791a4ad36f6d1d0ce90e"
    },
    {
     "path": "stone-thud.mp3",
     "meta": {
      "role": "stone-thud",
      "description": "무거운 돌이 제자리에 쿵(퍼즐 맞음·돌문 닫힘)",
      "duration": 2.46,
      "loop": false,
      "lufs": -18.5,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-boulder/boulder_drop.ogg",
       "rd-breaking/bfh1_rock_hit_01.ogg"
      ],
      "method": "돌 쿵: 사인 80→35Hz + 포화",
      "author": "themightyglider, rubberduck, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/moving-boulder",
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 30451,
     "sha256": "3d5bc7ffab1fbe4337dcad178eb42daabfac13a188ae0eeed1911bceaf58b8da"
    },
    {
     "path": "glass-break.mp3",
     "meta": {
      "role": "glass-break",
      "description": "유리 깨짐",
      "duration": 1.142,
      "loop": false,
      "lufs": -20.6,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "rd-breaking/bfh1_glass_breaking_01.ogg",
       "kenney-impact/Audio/impactGlass_heavy_002.ogg",
       "rd-breaking/bfh1_glass_falling_02.ogg"
      ],
      "author": "rubberduck, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 16867,
     "sha256": "7ae8691b64ef5de302c9cb7e3b34c2688f8c779b79e6bee8da6dd37f750c194c"
    },
    {
     "path": "heartbeat-loop.mp3",
     "meta": {
      "role": "heartbeat",
      "description": "심장 박동 루프 67bpm(조준경 숨 참기) — bart",
      "duration": 2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.9,
      "lufs": -19.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-heartbeat/heartbeat_slow_0.wav"
      ],
      "author": "bart",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/heartbeat-sounds"
      ]
     },
     "bytes": 24809,
     "sha256": "abe9d7bf8685db4f4b31b46c16b25e576ccfdf3b071f87a4ffab450813ee7659"
    },
    {
     "path": "heartbeat-fast-loop.mp3",
     "meta": {
      "role": "heartbeat",
      "description": "빠른 심장 박동 루프 107bpm(들킬 위기) — bart",
      "duration": 1.325,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.225011,
      "lufs": -18.8,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-heartbeat/heartbeat_fast_0.wav"
      ],
      "author": "bart",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/heartbeat-sounds"
      ]
     },
     "bytes": 16658,
     "sha256": "7aa0eb9f64157eeb9e95a212ffbd006133f3b6e93462f4191c3935b7bc31d1d7"
    },
    {
     "path": "camera-shutter.mp3",
     "meta": {
      "role": "camera",
      "description": "카메라 셔터 찰칵(증거 사진) — FacadeGaikan",
      "duration": 0.534,
      "loop": false,
      "lufs": -19,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-camera2/camera.ogg"
      ],
      "author": "FacadeGaikan",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/camerashudder"
      ]
     },
     "bytes": 7254,
     "sha256": "ee6a13ad96c5641da7124fb2c2f5d256d343efb62d1b3469b0ef7fda73b1771c"
    },
    {
     "path": "camera-shutter-2.mp3",
     "meta": {
      "role": "camera",
      "description": "카메라 셔터 + 필름 감김 — themightyglider",
      "duration": 0.863,
      "loop": false,
      "lufs": -21.4,
      "peak": -2,
      "channels": 1,
      "origin": [
       "vd-camera/photo.ogg"
      ],
      "author": "themightyglider",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/camera"
      ]
     },
     "bytes": 11329,
     "sha256": "d3e3d54f47f27bf76a8d445feb513971a1d799841b03ea7442478726572cb2ce"
    }
   ],
   "base": "sfx-agent/1/"
  },
  {
   "id": "sfx-agent",
   "version": 2,
   "kind": "audio",
   "title": "Agent Action SFX",
   "author": "여러 저작자 — 파일별 meta.author (Ben Jaszczak, et al. (submitted by bart), Kenney, NenadSimic, SpringySpringo, qubodup, rubberduck, artisticdude, Vehicle, Macro, Cough-E, EZduzziteh, GGBotNet, mikeask, looneybits, Rocha57, bonebrah, themightyglider, mieki256, bart, FacadeGaikan, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "VERDICT(game_id verdict, ~/SRC/globalShadow — 어두운 영웅의 잠입·저격·탐험 액션) 용으로 만들었지만 어느 게임이든 쓸 수 있다. 잠입·저격 액션 효과음: 소음기 권총·권총·저격총(크게, 긴 메아리)·노리쇠·재장전·소총·기관단총 연사, 몸/콘크리트 피탄, 주먹·제압·쓰러짐·휘두름, 발소리(콘크리트 4·풀 2·흙 1)·점프·착지, 문·자물쇠·장치 딸깍, 키패드·해킹 진행/성공/실패, 경보 루프 2종, 자동차(시동·공회전/고회전 루프·급가속·문·경적·타이어 끽·충돌), 퍼즐 돌 끌림(한 번·루프)·돌 쿵, 유리 깨짐, 심장 박동 루프 2종(조준경 집중), 카메라 셔터(증거 사진). 무전(radio-beep·radio-squelch·radio-static-loop)은 sfx-ui 팩에 이미 있어 넣지 않았다. 모노 mp3, 0.4초 미만은 피크 -1.5 dBFS 기준(LUFS 상한), 나머지는 -16~-21 LUFS(meta.lufs). 앞 무음 없음 — 발사·타격이 0초에 시작한다. 총성은 The Free Firearm Sound Library(CC0, 실제 총 녹음: Mosin Nagant·AR-15·PPSh·Walther PPQ), 소음기 권총(v2)은 실총 근접 녹음을 저역 통과·단축해 소음기처럼 만들었다(v1 의 EmoPreben·bart 실린서 녹음은 숨소리 같아 뺐다). 엔진·타이어 끽·키패드·클랙슨 등 마땅한 CC0 녹음이 없는 것은 numpy 합성(meta.method — 엔진은 실제 엔진 녹음의 스펙트럼을 질감으로 섞었다). 루프는 meta.loopStart/loopEnd(초, 디코딩 기준)로 AudioBufferSourceNode 에 넣는다. 엔진 루프는 playbackRate 로 회전수를 바꿔 쓰면 된다(idle 850rpm·rev 3600rpm). 원본은 전부 CC0(파일별 meta.author/source), 합성음·가공물도 CC0. 만드는 법: python3 -I tools/audio/build-audio-verdict.py sfx-agent",
   "tags": [
    "sfx",
    "stealth",
    "gun",
    "sniper",
    "suppressed",
    "melee",
    "footstep",
    "door",
    "hack",
    "alarm",
    "car",
    "puzzle",
    "heartbeat",
    "camera"
   ],
   "files": [
    {
     "path": "pistol-suppressed-1.mp3",
     "meta": {
      "role": "gun-suppressed",
      "description": "소음기 권총 탁(주인공) — Ruger Mark III .22 근접 녹음을 소음기처럼",
      "duration": 0.36,
      "loop": false,
      "lufs": -20.6,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-firearm/Ruger Mark III/R_35P.wav",
       "kenney-rpg/Audio/metalClick.ogg"
      ],
      "method": "저역 툭: 사인 150→75Hz 짧은 감쇠",
      "author": "Ben Jaszczak, et al. (submitted by bart), Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 5060,
     "sha256": "9476bfafca35edeba15b4bb2dfabe476026791b9fac0c5d173ce9b3e2f4d8351"
    },
    {
     "path": "pistol-suppressed-2.mp3",
     "meta": {
      "role": "gun-suppressed",
      "description": "소음기 권총 탁(주인공) — Walther PPQ 9mm 근접 녹음을 소음기처럼",
      "duration": 0.36,
      "loop": false,
      "lufs": -19.4,
      "peak": -2.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-firearm/Walther PPQ/X_39P.wav",
       "kenney-rpg/Audio/metalClick.ogg"
      ],
      "method": "저역 툭: 사인 150→75Hz 짧은 감쇠",
      "author": "Ben Jaszczak, et al. (submitted by bart), Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 5060,
     "sha256": "893dc853cf6e8ac449a9397bf56935a11cb26b3a9f885f08e70dd8680bc20f74"
    },
    {
     "path": "pistol-suppressed-3.mp3",
     "meta": {
      "role": "gun-suppressed",
      "description": "소음기 권총 탁(조금 둔하게) — 1911 .45 근접 녹음을 소음기처럼",
      "duration": 0.36,
      "loop": false,
      "lufs": -19.5,
      "peak": -2.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-firearm/1911/A_42P.wav",
       "kenney-rpg/Audio/metalClick.ogg"
      ],
      "method": "저역 툭: 사인 150→75Hz 짧은 감쇠",
      "author": "Ben Jaszczak, et al. (submitted by bart), Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 5060,
     "sha256": "51ae7176f253d9d157944eceb1ab15e6ead0602c4521ae927c817f976fdb5908"
    },
    {
     "path": "pistol-shot.mp3",
     "meta": {
      "role": "gun-pistol",
      "description": "권총 한 발(소음기 없음, 적) — Walther PPQ 9mm",
      "duration": 1.199,
      "loop": false,
      "lufs": -22.5,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "vd-firearm/Walther PPQ/X_39P.wav"
      ],
      "author": "Ben Jaszczak, et al. (submitted by bart)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library"
      ]
     },
     "bytes": 17598,
     "sha256": "9d01816273e8eafc94470457492780c423fc2a6d68907cb17bca4ea081b4e922"
    },
    {
     "path": "sniper-shot.mp3",
     "meta": {
      "role": "gun-sniper",
      "description": "저격총 한 발 — Mosin Nagant 가까이+중간 거리 메아리 + 저역 압력파 + 먼 반향(약 4초)",
      "duration": 4.2,
      "loop": false,
      "lufs": -17.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-firearm/Mosin Nagant/M_21P.wav",
       "vd-firearm/Mosin Nagant/M_26P.wav",
       "distant-explosion/NenadSimic - Muffled Distant Explosion.wav"
      ],
      "method": "저격 압력파: 사인 75→32Hz + 포화, 먼 반향: 잡음 IR 잔향(0.12초 지연)",
      "author": "Ben Jaszczak, et al. (submitted by bart), NenadSimic, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://opengameart.org/content/muffled-distant-explosion",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 68171,
     "sha256": "4905bdde75ac0191764232218f958ef608af907b1598475f073b9e2d6dd8f3f2"
    },
    {
     "path": "sniper-bolt.mp3",
     "meta": {
      "role": "gun-bolt",
      "description": "노리쇠 당겼다 밀기(저격 후 장전)",
      "duration": 0.85,
      "loop": false,
      "lufs": -17.9,
      "peak": -4.8,
      "channels": 1,
      "origin": [
       "vd-gun-reload/shotguncock_0.wav",
       "kenney-rpg/Audio/metalClick.ogg",
       "kenney-rpg/Audio/metalLatch.ogg"
      ],
      "author": "SpringySpringo, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/gun-reload-sounds",
       "https://kenney.nl/assets/rpg-audio"
      ]
     },
     "bytes": 11016,
     "sha256": "fa4aab706b042dcd343c4474410993dada592a81e1693a28629f9f5e3a288ad3"
    },
    {
     "path": "reload-pistol.mp3",
     "meta": {
      "role": "gun-reload",
      "description": "권총 탄창 갈기 — SpringySpringo",
      "duration": 1.51,
      "loop": false,
      "lufs": -18,
      "peak": -3.5,
      "channels": 1,
      "origin": [
       "vd-gun-reload/gunreload1.wav"
      ],
      "author": "SpringySpringo",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/gun-reload-sounds"
      ]
     },
     "bytes": 18853,
     "sha256": "283fc91856d9a3743c782b9193613f6b961ff71ac1859fde808699488b382d6e"
    },
    {
     "path": "reload-rifle.mp3",
     "meta": {
      "role": "gun-reload",
      "description": "소총 탄창 갈기 — SpringySpringo",
      "duration": 1.494,
      "loop": false,
      "lufs": -21.9,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "vd-gun-reload/assaultriflereload1_0.wav"
      ],
      "author": "SpringySpringo",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/gun-reload-sounds"
      ]
     },
     "bytes": 18853,
     "sha256": "f109cb4dcf9d56ad7df3587f810b85cc6b0f3eb5e4bd83b6719017e3f7973b51"
    },
    {
     "path": "rifle-shot.mp3",
     "meta": {
      "role": "gun-rifle",
      "description": "소총 한 발(경비) — AR-15",
      "duration": 1.3,
      "loop": false,
      "lufs": -23.7,
      "peak": -2,
      "channels": 1,
      "origin": [
       "vd-firearm/AR-15/D_32P.wav"
      ],
      "author": "Ben Jaszczak, et al. (submitted by bart)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library"
      ]
     },
     "bytes": 19061,
     "sha256": "f6e2e2b617d87cdaf23385bbcff72af991bd8d1b557a9b0794235b09a2c3d8fd"
    },
    {
     "path": "smg-burst.mp3",
     "meta": {
      "role": "gun-burst",
      "description": "기관단총 짧은 연사(4발, 경비) — PPSh",
      "duration": 1.3,
      "loop": false,
      "lufs": -19.7,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "vd-firearm/PPSh/P_32P.wav"
      ],
      "author": "Ben Jaszczak, et al. (submitted by bart)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library"
      ]
     },
     "bytes": 19061,
     "sha256": "c654d1bfc236fc9020428519bf0148e48b908b52aa2ece7b004bbdac7bda6037"
    },
    {
     "path": "smg-burst-long.mp3",
     "meta": {
      "role": "gun-burst",
      "description": "기관단총 긴 연사(약 1초) — PPSh",
      "duration": 2,
      "loop": false,
      "lufs": -16,
      "peak": -3,
      "channels": 1,
      "origin": [
       "vd-firearm/PPSh/P_34P.wav"
      ],
      "author": "Ben Jaszczak, et al. (submitted by bart)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library"
      ]
     },
     "bytes": 28935,
     "sha256": "885450fa90d7555338ae4490396b8a35506fd4796c1bf0e98cd838276cea8a17"
    },
    {
     "path": "impact-flesh-1.mp3",
     "meta": {
      "role": "impact-flesh",
      "description": "총알이 몸에 맞음 퍽",
      "duration": 0.45,
      "loop": false,
      "lufs": -17.9,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-towel-body/wet_towel_on_body-07.flac",
       "kenney-impact/Audio/impactPunch_medium_002.ogg"
      ],
      "method": "탄 맞는 딱: 고역 잡음 6ms",
      "author": "qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/40-wet-towel-clubpoundhitattack-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 6314,
     "sha256": "69f1f17a7fb63717acc4a1c019ce748741e792799a6ae47f78715d525089dbfd"
    },
    {
     "path": "impact-flesh-2.mp3",
     "meta": {
      "role": "impact-flesh",
      "description": "총알이 몸에 맞음 퍽",
      "duration": 0.45,
      "loop": false,
      "lufs": -17.9,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-towel-body/wet_towel_on_body-17.flac",
       "kenney-impact/Audio/impactPunch_medium_004.ogg"
      ],
      "method": "탄 맞는 딱: 고역 잡음 6ms",
      "author": "qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/40-wet-towel-clubpoundhitattack-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 6314,
     "sha256": "329b340aa985899bfbd2e9d020b48514b9eaa43c34afa9853ac85fe1379e73c9"
    },
    {
     "path": "impact-concrete-1.mp3",
     "meta": {
      "role": "impact-concrete",
      "description": "총알이 콘크리트·벽에 맞음(딱+부스러기)",
      "duration": 0.6,
      "loop": false,
      "lufs": -21.3,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "synthesized",
       "rd-breaking/bfh1_rock_hit_01.ogg",
       "kenney-impact/Audio/impactMining_001.ogg",
       "rd-sfx100b/sfx100v2_stones_01.ogg"
      ],
      "method": "탄 맞는 딱: 고역 잡음 5ms",
      "author": "rubberduck, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/100-cc0-sfx-2",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 7881,
     "sha256": "7cf7c25466a04556bd869b60d0802e2eacb300a85871147540e33a25b6070d8e"
    },
    {
     "path": "impact-concrete-2.mp3",
     "meta": {
      "role": "impact-concrete",
      "description": "총알이 콘크리트·돌에 맞음(딱+깨짐)",
      "duration": 0.6,
      "loop": false,
      "lufs": -21.5,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "rd-breaking/bfh1_rock_breaking_01.ogg",
       "kenney-impact/Audio/impactMining_003.ogg",
       "rd-sfx100b/sfx100v2_stones_03.ogg"
      ],
      "method": "탄 맞는 딱: 고역 잡음 5ms",
      "author": "rubberduck, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/100-cc0-sfx-2",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 7881,
     "sha256": "83f01a61a5cfa89a12a1ef082bda552534719069b7c1fa8c9902601aa7c4c015"
    },
    {
     "path": "punch-1.mp3",
     "meta": {
      "role": "punch",
      "description": "주먹 퍽",
      "duration": 0.5,
      "loop": false,
      "lufs": -19.6,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "vd-punch/qubodupPunch02.ogg",
       "kenney-impact/Audio/impactPunch_heavy_000.ogg"
      ],
      "author": "qubodup, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/punch",
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 6941,
     "sha256": "7cefd0989660412b85c9121c8c9f3f1d54729dca494340e8607beb39ba3c073c"
    },
    {
     "path": "punch-2.mp3",
     "meta": {
      "role": "punch",
      "description": "주먹 퍽(무겁게)",
      "duration": 0.5,
      "loop": false,
      "lufs": -20.3,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-punch/qubodupPunch04.ogg",
       "kenney-impact/Audio/impactPunch_heavy_003.ogg"
      ],
      "author": "qubodup, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/punch",
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 6941,
     "sha256": "10273b2a85678c8ceae0c9f447dac46a7cf9bcf03c3f31ba0be27433e3ef1e09"
    },
    {
     "path": "takedown.mp3",
     "meta": {
      "role": "takedown",
      "description": "뒤에서 제압 — 퍽 + 0.45초 뒤 쓰러짐",
      "duration": 1.4,
      "loop": false,
      "lufs": -18.3,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-punch/qubodupPunch05.ogg",
       "vd-towel-body/wet_towel_on_body-35.flac",
       "kenney-rpg/Audio/cloth2.ogg",
       "vd-towel-floor/wet_towel_on_floor-10.flac",
       "kenney-impact/Audio/impactSoft_heavy_002.ogg"
      ],
      "method": "쓰러짐 저역 쿵: 사인 90→45Hz",
      "author": "qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/punch",
       "https://opengameart.org/content/40-wet-towel-clubpoundhitattack-sounds",
       "https://kenney.nl/assets/rpg-audio",
       "https://opengameart.org/content/12-wet-towel-hittingfallingpunching-floor-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 17599,
     "sha256": "5b7be94a2df1c0c1866dc416019ae4cea3e23b504b2f770036a4b06e02b08b8b"
    },
    {
     "path": "body-fall.mp3",
     "meta": {
      "role": "body-fall",
      "description": "몸이 바닥에 쓰러짐",
      "duration": 1.194,
      "loop": false,
      "lufs": -18.7,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-towel-floor/wet_towel_on_floor-12.flac",
       "vd-towel-floor/wet_towel_on_floor-06.flac",
       "kenney-impact/Audio/impactSoft_heavy_000.ogg",
       "kenney-rpg/Audio/cloth4.ogg"
      ],
      "method": "쓰러짐 저역 쿵: 사인 85→40Hz",
      "author": "qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/12-wet-towel-hittingfallingpunching-floor-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 15091,
     "sha256": "41a87217b5c7b8defc649aa99d55356bde6038fca6a7ae1bd03620322766932b"
    },
    {
     "path": "melee-swing.mp3",
     "meta": {
      "role": "swing",
      "description": "맨손·칼 휘두름 휙",
      "duration": 0.117,
      "loop": false,
      "lufs": -17.9,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "swishes/swishes/swish-3.wav"
      ],
      "author": "artisticdude",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/swishes-sound-pack"
      ]
     },
     "bytes": 2239,
     "sha256": "828b4173b02f26b659abf90c5e8af0655e087a96eb50446b195f9bb9a773e3fa"
    },
    {
     "path": "footstep-concrete-1.mp3",
     "meta": {
      "role": "footstep-concrete",
      "description": "콘크리트 발소리",
      "duration": 0.103,
      "loop": false,
      "lufs": -29,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_concrete_000.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 1925,
     "sha256": "074a8ec567db435eb4f2fddc232f81cda1f3508b594e1acb250ec3df7a8f807f"
    },
    {
     "path": "footstep-concrete-2.mp3",
     "meta": {
      "role": "footstep-concrete",
      "description": "콘크리트 발소리",
      "duration": 0.106,
      "loop": false,
      "lufs": -30.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_concrete_001.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2239,
     "sha256": "9f0de777028d43a43a66618552632b1876169db95d0740de325470462cb2573b"
    },
    {
     "path": "footstep-concrete-3.mp3",
     "meta": {
      "role": "footstep-concrete",
      "description": "콘크리트 발소리",
      "duration": 0.11,
      "loop": false,
      "lufs": -30.7,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_concrete_002.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2239,
     "sha256": "96a4f51114a8fe590cb00d99c87229b82a44e723c6332b42813bb407911753a5"
    },
    {
     "path": "footstep-concrete-4.mp3",
     "meta": {
      "role": "footstep-concrete",
      "description": "콘크리트 발소리",
      "duration": 0.108,
      "loop": false,
      "lufs": -29.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_concrete_003.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2239,
     "sha256": "c997180bf2be82e888ca8bf10cf10118c3790018129d20d6c3b54594d15b2f65"
    },
    {
     "path": "footstep-grass-1.mp3",
     "meta": {
      "role": "footstep-grass",
      "description": "풀 발소리",
      "duration": 0.168,
      "loop": false,
      "lufs": -29.1,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_grass_000.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2866,
     "sha256": "89e864ed40b3d65e23e850916c6d178b5b90ac3505e6fe4baf3894581160dead"
    },
    {
     "path": "footstep-grass-2.mp3",
     "meta": {
      "role": "footstep-grass",
      "description": "풀 발소리",
      "duration": 0.147,
      "loop": false,
      "lufs": -29.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_grass_003.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2552,
     "sha256": "fee11cb500568ae610b87bc2fae83a5121b0d3299e3811a3dff6580e62883c2e"
    },
    {
     "path": "footstep-dirt-1.mp3",
     "meta": {
      "role": "footstep-dirt",
      "description": "흙·진흙 발소리",
      "duration": 0.322,
      "loop": false,
      "lufs": -22.2,
      "peak": -2.2,
      "channels": 1,
      "origin": [
       "tinysized/sfx-cc0/mud-steps-02.wav"
      ],
      "author": "Vehicle",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx"
      ]
     },
     "bytes": 4747,
     "sha256": "42f525c51a46d26ff1fb91bb269f1c7595ed6c10bc50341b4726fe25d854aa34"
    },
    {
     "path": "jump.mp3",
     "meta": {
      "role": "jump",
      "description": "점프(가죽 장화 디딤 + 옷 스침)",
      "duration": 0.341,
      "loop": false,
      "lufs": -24.5,
      "peak": -2,
      "channels": 1,
      "origin": [
       "tinysized/sfx-cc0/boots-leather-jump-01.wav",
       "kenney-rpg/Audio/cloth1.ogg",
       "swishes/swishes/swish-9.wav"
      ],
      "author": "Vehicle, Kenney, artisticdude",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx",
       "https://kenney.nl/assets/rpg-audio",
       "https://opengameart.org/content/swishes-sound-pack"
      ]
     },
     "bytes": 5060,
     "sha256": "eb11c066f37d94db673ad4ada2be79f18b99c7805ce5a2f4b86e7b28df2b5fca"
    },
    {
     "path": "land.mp3",
     "meta": {
      "role": "land",
      "description": "착지",
      "duration": 0.6,
      "loop": false,
      "lufs": -17.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-jump-landing/Jump 1.wav",
       "kenney-impact/Audio/footstep_concrete_001.ogg",
       "kenney-impact/Audio/footstep_concrete_003.ogg",
       "kenney-impact/Audio/impactSoft_medium_001.ogg"
      ],
      "method": "착지 저역: 사인 110→55Hz",
      "author": "Macro, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/jump-landing",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 7881,
     "sha256": "f16c24ee620a8d7036a95ff89c876bb0cc12ab62d9a389e106e0b3e4e76f7122"
    },
    {
     "path": "door-open.mp3",
     "meta": {
      "role": "door-open",
      "description": "문 열림 — qubodup Door Set",
      "duration": 0.54,
      "loop": false,
      "lufs": -20.4,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "vd-door-set/qubodup-DoorSet/flac/qubodup-DoorOpen02.flac"
      ],
      "author": "qubodup",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/door-open-door-close-set"
      ]
     },
     "bytes": 7254,
     "sha256": "b96180a4c3f0ce738520bb1fc0fb7f369efc5a97da674f49e2ed4e6f33424323"
    },
    {
     "path": "door-close.mp3",
     "meta": {
      "role": "door-close",
      "description": "문 닫힘 — qubodup Door Set",
      "duration": 0.448,
      "loop": false,
      "lufs": -21.3,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-door-set/qubodup-DoorSet/flac/qubodup-DoorClose03.flac"
      ],
      "author": "qubodup",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/door-open-door-close-set"
      ]
     },
     "bytes": 6314,
     "sha256": "63a747fcf1133a13f9814ef06930164fafbb9d34efa2771686218f776167ce4f"
    },
    {
     "path": "door-locked.mp3",
     "meta": {
      "role": "door-locked",
      "description": "잠긴 문 손잡이 덜컥 — Cough-E",
      "duration": 0.817,
      "loop": false,
      "lufs": -19,
      "peak": -2.3,
      "channels": 1,
      "origin": [
       "vd-door-lock/DoorLockSounds/LockedDoorHandleJiggle.wav"
      ],
      "author": "Cough-E",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/door-lock-sounds"
      ]
     },
     "bytes": 10703,
     "sha256": "bfdb39d0aa281ce02f422d4f687e2e9b9817cf1bf081864100feacfbad9dead4"
    },
    {
     "path": "lock-open.mp3",
     "meta": {
      "role": "lock-open",
      "description": "자물쇠 풀림 철컥",
      "duration": 0.676,
      "loop": false,
      "lufs": -22.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-door-lock/DoorLockSounds/UnlockDoor.wav",
       "rd-woodmetal/lock_open_01.ogg"
      ],
      "author": "Cough-E, rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/door-lock-sounds",
       "https://opengameart.org/content/100-cc0-metal-and-wood-sfx"
      ]
     },
     "bytes": 8822,
     "sha256": "c6d3b8111b572f2f61b0caf4aaae2c9623283d0b2d34b354cca2c352fdb0b472"
    },
    {
     "path": "mechanism-click.mp3",
     "meta": {
      "role": "mechanism",
      "description": "장치·스위치·퍼즐 맞물림 딸깍",
      "duration": 0.4,
      "loop": false,
      "lufs": -21.3,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "tinysized/sfx-cc0/keyhole-lockbox-turn-01.wav",
       "kenney-rpg/Audio/metalClick.ogg"
      ],
      "method": "맞물림 저역 톡: 사인 180→110Hz",
      "author": "Vehicle, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx",
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 5687,
     "sha256": "4e796e984f01a98823e8128ab6f8d2dc112ab326e4b47789f94a861719c5fc27"
    },
    {
     "path": "keypad-beep-1.mp3",
     "meta": {
      "role": "keypad",
      "description": "키패드 누름 삑",
      "duration": 0.09,
      "loop": false,
      "lufs": -18.5,
      "peak": -11.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/click_002.ogg"
      ],
      "method": "키패드 삑: 사각파 2400Hz 70ms(압전 버저 대역)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 1925,
     "sha256": "2f9aab68eb970bfc1604f791df392705ec1a2243fd585980322f6e8dc569f8cf"
    },
    {
     "path": "keypad-beep-2.mp3",
     "meta": {
      "role": "keypad",
      "description": "키패드 누름 삑(조금 높게)",
      "duration": 0.09,
      "loop": false,
      "lufs": -18.4,
      "peak": -11.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/click_002.ogg"
      ],
      "method": "키패드 삑: 사각파 2600Hz 70ms(압전 버저 대역)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 1925,
     "sha256": "ba2850d75a903fb880b9d6651926fd3f35e4efb3550c0bb19c288b80462704d9"
    },
    {
     "path": "keypad-beep-3.mp3",
     "meta": {
      "role": "keypad",
      "description": "키패드 누름 삑(더 높게)",
      "duration": 0.09,
      "loop": false,
      "lufs": -18.5,
      "peak": -11.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/click_002.ogg"
      ],
      "method": "키패드 삑: 사각파 2800Hz 70ms(압전 버저 대역)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 1925,
     "sha256": "97636e47ec3224d0e55995dd9b32abbdf9779aa609a8ac635483453ff4458b90"
    },
    {
     "path": "keypad-accept.mp3",
     "meta": {
      "role": "keypad-accept",
      "description": "비밀번호 맞음 삐빅 + 걸쇠",
      "duration": 0.75,
      "loop": false,
      "lufs": -18,
      "peak": -14,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-rpg/Audio/metalLatch.ogg"
      ],
      "method": "키패드 맞음: 사각파 2093→2794Hz 두 번",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 9762,
     "sha256": "66c9158b4a0e6837e0abebe2215a4a6ffbb5727d3fe438babd90053f5307ebfa"
    },
    {
     "path": "keypad-deny.mp3",
     "meta": {
      "role": "keypad-deny",
      "description": "비밀번호 틀림 부-부-",
      "duration": 0.38,
      "loop": false,
      "lufs": -17.4,
      "peak": -6.1,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "틀림 버저: 톱니파 220Hz + 233Hz(맥놀이) 두 번, 대역 통과",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 5374,
     "sha256": "e2ee40146e4efaf7bfc86275825bc31356d18ede0cce4ed0ca23c69ccba23eb6"
    },
    {
     "path": "hack-loop.mp3",
     "meta": {
      "role": "hack-progress",
      "description": "해킹 진행 중 데이터 지지직·삑삑 루프",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -21,
      "peak": -12.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-scifi/Audio/computerNoise_000.ogg",
       "kenney-scifi/Audio/computerNoise_002.ogg"
      ],
      "method": "데이터 삑: 사인 1.4~3.2kHz 무작위 짧은 음(2초 주기로 감아 넣음)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 27316,
     "sha256": "2287048d8276b0af7589a88603c1b5a1c2c39e1432e06d8863d281010333028b"
    },
    {
     "path": "hack-success.mp3",
     "meta": {
      "role": "hack-success",
      "description": "해킹 성공",
      "duration": 0.9,
      "loop": false,
      "lufs": -18,
      "peak": -6.2,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/confirmation_002.ogg"
      ],
      "method": "해킹 성공: 사각파 1047·1319·1568·2093Hz 아르페지오",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 11643,
     "sha256": "f68c03f2e0333ef9fbcdfccccd4a9a8f25b39601b8077bbbf3ee82661cd38dce"
    },
    {
     "path": "hack-fail.mp3",
     "meta": {
      "role": "hack-fail",
      "description": "해킹 실패·접근 거부",
      "duration": 0.6,
      "loop": false,
      "lufs": -18,
      "peak": -3.2,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/error_006.ogg",
       "kenney-ui/Audio/glitch_002.ogg"
      ],
      "method": "거부 버저: 톱니파 150Hz + 159Hz 0.35초, 대역 통과",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 7881,
     "sha256": "8db8492d62093dd65fb27630883c69b7c38eb3660dcc6f1184999ae814440f1d"
    },
    {
     "path": "alarm-loop.mp3",
     "meta": {
      "role": "alarm",
      "description": "보안 경보(두 음 교대) — EZduzziteh Alarm 1",
      "duration": 2.046,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.945986,
      "lufs": -18,
      "peak": -13.8,
      "channels": 1,
      "origin": [
       "vd-alarm/alarm_2.ogg"
      ],
      "author": "EZduzziteh",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/alarm-1"
      ]
     },
     "bytes": 25436,
     "sha256": "bf68df0ae2b2c89bbca768d5b82f32257e18001b057424387d9465e701d353bc"
    },
    {
     "path": "alarm-klaxon-loop.mp3",
     "meta": {
      "role": "alarm",
      "description": "시설 경보 클랙슨 우웅(1.6초 주기)",
      "duration": 1.8,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.7,
      "lufs": -18,
      "peak": -13.9,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "클랙슨: 사각·톱니 섞음 400→900Hz 상승(1.6초 주기) + 대역 통과 + 포화",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 22301,
     "sha256": "6d5800806786a9097292026002ae28bd52c44ac6841ca92423873520aee2f391"
    },
    {
     "path": "car-engine-start.mp3",
     "meta": {
      "role": "car-start",
      "description": "시동(→ 공회전으로 잦아듦)",
      "duration": 2.754,
      "loop": false,
      "lufs": -16,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-car-pack/Car_Engine_Start_Up.ogg",
       "vd-car-pack/Car_Engine_Loop.ogg"
      ],
      "method": "시동 뒤 공회전 꼬리: 엔진 합성 850rpm",
      "author": "GGBotNet, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 33899,
     "sha256": "7cc6eb3499ba1f6f745b880a710d68636dcc6fa83549b12f148e2583c8a66c1b"
    },
    {
     "path": "car-engine-idle-loop.mp3",
     "meta": {
      "role": "car-engine",
      "description": "엔진 공회전 루프(850rpm) — playbackRate 로 회전수 조절",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -18,
      "peak": -5.5,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-car-pack/Car_Engine_Loop.ogg"
      ],
      "method": "엔진 합성: 점화 주파수(850rpm→28.3Hz) 배기 펄스·배음·반 차수 + 배기관 공명 EQ + 흡기 잡음(2초 주기)",
      "author": "GGBotNet, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 27316,
     "sha256": "c00d6f294a41b7946870a7dc4e507a56e0b42c6bda40afe136746802ae837924"
    },
    {
     "path": "car-engine-rev-loop.mp3",
     "meta": {
      "role": "car-engine",
      "description": "엔진 고회전 루프(3600rpm, 가속 중)",
      "duration": 1.7,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.6,
      "lufs": -17,
      "peak": -9.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-car-pack/Car_Engine_Loop.ogg"
      ],
      "method": "엔진 합성: 점화 주파수(3600rpm→120Hz) 배기 펄스·배음 + 배기관 공명 EQ + 흡기 잡음(1.5초 주기)",
      "author": "GGBotNet, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 21360,
     "sha256": "149bf446d294a90e250ca1ef214a88bd9d75f32993ca0e6c85e2d04d540fe165"
    },
    {
     "path": "car-accelerate.mp3",
     "meta": {
      "role": "car-accelerate",
      "description": "급가속 부웅 — mikeask",
      "duration": 3.199,
      "loop": false,
      "lufs": -16,
      "peak": -8.4,
      "channels": 1,
      "origin": [
       "vd-car-accel/car acceleration.wav"
      ],
      "author": "mikeask",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-acceleration"
      ]
     },
     "bytes": 39228,
     "sha256": "99fd604230ddcaefdfcaeda1a5e6a4fac50fe47fcfd242830832508ad3a3c526"
    },
    {
     "path": "car-door-open.mp3",
     "meta": {
      "role": "car-door",
      "description": "자동차 문 열림",
      "duration": 0.982,
      "loop": false,
      "lufs": -24.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-car-door/door_opening.wav"
      ],
      "author": "looneybits",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/cardoorsfx"
      ]
     },
     "bytes": 12583,
     "sha256": "efdba72912f82ff6081b510514af0f6fefc85985e5d9ddcaa3df1207c54397de"
    },
    {
     "path": "car-door-close.mp3",
     "meta": {
      "role": "car-door",
      "description": "자동차 문 닫힘 쾅",
      "duration": 0.705,
      "loop": false,
      "lufs": -18.4,
      "peak": -2,
      "channels": 1,
      "origin": [
       "vd-car-door/door_closing.wav",
       "vd-car-pack/Car_Door_Close.ogg"
      ],
      "author": "looneybits, GGBotNet",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/cardoorsfx",
       "https://opengameart.org/content/car-sound-effects-pack-low-quality"
      ]
     },
     "bytes": 9135,
     "sha256": "4802e38c30fc0d801bf866bd6df6dd43b8685aae80c9283cf4cc22d245037118"
    },
    {
     "path": "car-horn.mp3",
     "meta": {
      "role": "car-horn",
      "description": "경적 빵 — GGBotNet",
      "duration": 0.451,
      "loop": false,
      "lufs": -17.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-car-pack/Car_Horn.ogg"
      ],
      "author": "GGBotNet",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality"
      ]
     },
     "bytes": 6314,
     "sha256": "0230940887fc7ef75cb715ba610523224b8c6edb1db838455b59b5a5128b318c"
    },
    {
     "path": "car-horn-double.mp3",
     "meta": {
      "role": "car-horn",
      "description": "경적 빵빵",
      "duration": 0.771,
      "loop": false,
      "lufs": -17,
      "peak": -2.8,
      "channels": 1,
      "origin": [
       "vd-car-pack/Car_Horn.ogg"
      ],
      "author": "GGBotNet",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/car-sound-effects-pack-low-quality"
      ]
     },
     "bytes": 10076,
     "sha256": "7c9c35a0cc2678bdf3958cb04b6f9144dd484174ea9122c5a21dcd91abead46f"
    },
    {
     "path": "tire-screech.mp3",
     "meta": {
      "role": "tire-screech",
      "description": "타이어 끽(1.4초)",
      "duration": 1.399,
      "loop": false,
      "lufs": -17.1,
      "peak": -4.4,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-car-spin/car_spinning.wav"
      ],
      "method": "타이어 끽: 1.15kHz 배음 3개 + 음정 흔들림 + 붙음-미끄러짐 진폭 변조 + 대역 잡음",
      "author": "Rocha57, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/spin",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 17599,
     "sha256": "b75dc2dda4c21893cdcb46780f988a781fde7aaf28556d0b3f6f9c2f4320edba"
    },
    {
     "path": "tire-screech-loop.mp3",
     "meta": {
      "role": "tire-screech",
      "description": "타이어 끽 루프(드리프트 중)",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -18,
      "peak": -7.2,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "타이어 끽 루프: 1.15kHz 배음 3개 + 주기 음정 흔들림·진폭 변조 + 원형 대역 잡음(2초 주기)",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 27316,
     "sha256": "4b29bef78713ee3268c91487d3eadfed0cd2ae6543808b1d49632e1fbde4d21e"
    },
    {
     "path": "car-crash.mp3",
     "meta": {
      "role": "car-crash",
      "description": "자동차 충돌(쾅 + 유리 + 파편)",
      "duration": 3.04,
      "loop": false,
      "lufs": -19.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-crash/qubodup-crash.ogg",
       "kenney-impact/Audio/impactMetal_heavy_003.ogg",
       "kenney-impact/Audio/impactPlate_heavy_002.ogg",
       "rd-breaking/bfh1_glass_breaking_03.ogg",
       "rd-breaking/bfh1_metal_falling_03.ogg"
      ],
      "method": "충돌 저역 쿵: 사인 70→30Hz + 포화",
      "author": "qubodup, Kenney, rubberduck, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/crash-collision",
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 49781,
     "sha256": "e8016bff50049d404c8d47589869a3fbada890b482cd3a760945c43c30df014e"
    },
    {
     "path": "stone-slide.mp3",
     "meta": {
      "role": "stone-slide",
      "description": "돌판·석상이 끌리며 움직임(1.8초)",
      "duration": 1.995,
      "loop": false,
      "lufs": -17,
      "peak": -2,
      "channels": 1,
      "origin": [
       "vd-stone-door/stone_door.ogg",
       "vd-boulder/move_boulder.ogg",
       "earthquake/shake.flac"
      ],
      "author": "bonebrah, themightyglider, mieki256",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/stone-door",
       "https://opengameart.org/content/moving-boulder",
       "https://opengameart.org/content/earthquake-and-open-sesame"
      ]
     },
     "bytes": 24809,
     "sha256": "1283735647a05a2d8b01d6742c61890cf450081b51bb716c270560d2ab01eac3"
    },
    {
     "path": "stone-grind-loop.mp3",
     "meta": {
      "role": "stone-grind",
      "description": "돌 끌림 지속 루프(퍼즐 돌을 미는 동안)",
      "duration": 2.7,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.6,
      "lufs": -18,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-stone-door/stone_door.ogg",
       "vd-boulder/move_boulder.ogg"
      ],
      "method": "돌 끌림 루프: 녹음 스펙트럼의 원형 잡음 + 주기 변조 + 원형 알갱이 파열음 + 저역 원형 잡음(2.5초 주기)",
      "author": "bonebrah, themightyglider, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/stone-door",
       "https://opengameart.org/content/moving-boulder",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 33272,
     "sha256": "5c3e97d27e5bf083287148658154844abee74371da96791a4ad36f6d1d0ce90e"
    },
    {
     "path": "stone-thud.mp3",
     "meta": {
      "role": "stone-thud",
      "description": "무거운 돌이 제자리에 쿵(퍼즐 맞음·돌문 닫힘)",
      "duration": 2.46,
      "loop": false,
      "lufs": -18.5,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "vd-boulder/boulder_drop.ogg",
       "rd-breaking/bfh1_rock_hit_01.ogg"
      ],
      "method": "돌 쿵: 사인 80→35Hz + 포화",
      "author": "themightyglider, rubberduck, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/moving-boulder",
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio-verdict.py"
      ]
     },
     "bytes": 30451,
     "sha256": "3d5bc7ffab1fbe4337dcad178eb42daabfac13a188ae0eeed1911bceaf58b8da"
    },
    {
     "path": "glass-break.mp3",
     "meta": {
      "role": "glass-break",
      "description": "유리 깨짐",
      "duration": 1.142,
      "loop": false,
      "lufs": -20.6,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "rd-breaking/bfh1_glass_breaking_01.ogg",
       "kenney-impact/Audio/impactGlass_heavy_002.ogg",
       "rd-breaking/bfh1_glass_falling_02.ogg"
      ],
      "author": "rubberduck, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 16867,
     "sha256": "7ae8691b64ef5de302c9cb7e3b34c2688f8c779b79e6bee8da6dd37f750c194c"
    },
    {
     "path": "heartbeat-loop.mp3",
     "meta": {
      "role": "heartbeat",
      "description": "심장 박동 루프 67bpm(조준경 숨 참기) — bart",
      "duration": 2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.9,
      "lufs": -19.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-heartbeat/heartbeat_slow_0.wav"
      ],
      "author": "bart",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/heartbeat-sounds"
      ]
     },
     "bytes": 24809,
     "sha256": "abe9d7bf8685db4f4b31b46c16b25e576ccfdf3b071f87a4ffab450813ee7659"
    },
    {
     "path": "heartbeat-fast-loop.mp3",
     "meta": {
      "role": "heartbeat",
      "description": "빠른 심장 박동 루프 107bpm(들킬 위기) — bart",
      "duration": 1.325,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.225011,
      "lufs": -18.8,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-heartbeat/heartbeat_fast_0.wav"
      ],
      "author": "bart",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/heartbeat-sounds"
      ]
     },
     "bytes": 16658,
     "sha256": "7aa0eb9f64157eeb9e95a212ffbd006133f3b6e93462f4191c3935b7bc31d1d7"
    },
    {
     "path": "camera-shutter.mp3",
     "meta": {
      "role": "camera",
      "description": "카메라 셔터 찰칵(증거 사진) — FacadeGaikan",
      "duration": 0.534,
      "loop": false,
      "lufs": -19,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "vd-camera2/camera.ogg"
      ],
      "author": "FacadeGaikan",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/camerashudder"
      ]
     },
     "bytes": 7254,
     "sha256": "ee6a13ad96c5641da7124fb2c2f5d256d343efb62d1b3469b0ef7fda73b1771c"
    },
    {
     "path": "camera-shutter-2.mp3",
     "meta": {
      "role": "camera",
      "description": "카메라 셔터 + 필름 감김 — themightyglider",
      "duration": 0.863,
      "loop": false,
      "lufs": -21.4,
      "peak": -2,
      "channels": 1,
      "origin": [
       "vd-camera/photo.ogg"
      ],
      "author": "themightyglider",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/camera"
      ]
     },
     "bytes": 11329,
     "sha256": "d3e3d54f47f27bf76a8d445feb513971a1d799841b03ea7442478726572cb2ce"
    }
   ],
   "base": "sfx-agent/2/"
  },
  {
   "id": "sfx-critters",
   "version": 1,
   "kind": "audio",
   "title": "Critter SFX",
   "author": "여러 저작자 — 파일별 meta.author (cogitollc, EZduzziteh, rubberduck, Kenney, PWL, artisticdude, Vehicle, StarNinjas, bart, qubodup, Fupi, fvcalderan, MintoDog, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "PET PARADE 용 귀여운 만화 효과음(관에서 튀어나옴·명령 대답 삑·집 도착 딩·길 잃음 퐁·물·쿵·파기·뚫기·다리 놓기·폭탄·우산·벽 타기·호루라기·출구 딩동·UI·출발 3-2-1-GO·완료/실패 징글·별 1~3·경주 승리/패배·빨리 감기 루프). 아이용 — 폭력적인 소리 없음. 모노 mp3(징글은 스테레오), 0.4초 미만은 피크 -1.5 dBFS 기준(LUFS 상한), 나머지는 -16~-20 LUFS. 앞 무음 없음. 원본은 전부 CC0(Kenney·rubberduck·OpenGameArt 작가들, 파일별 meta.author/source), 원본이 없는 성분(호루라기·초읽기 삑·연기 퍼프 등)은 numpy 합성(meta.method). 가공물·합성음은 CC0. 루프는 meta.loopStart/loopEnd(초, 디코딩 기준). 만드는 법: python3 -I tools/audio/build-audio-petparade.py sfx-critters",
   "tags": [
    "sfx",
    "cute",
    "cartoon",
    "pet",
    "animal",
    "puzzle",
    "ui",
    "jingle",
    "kids"
   ],
   "files": [
    {
     "path": "pop-out-1.mp3",
     "meta": {
      "role": "pop-out",
      "description": "관에서 동물이 뽕 튀어나옴",
      "duration": 0.186,
      "loop": false,
      "lufs": -21.9,
      "peak": -2,
      "channels": 1,
      "origin": [
       "synthesized",
       "pop-sounds/pop1.ogg"
      ],
      "method": "몸통 툭: 음정이 떨어지는 사인(220→110Hz)",
      "author": "cogitollc, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/pop-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 3179,
     "sha256": "acb2bd8148b6ca2edb73fccf052261567f770072acaac6289bf3e5a525480f40"
    },
    {
     "path": "pop-out-2.mp3",
     "meta": {
      "role": "pop-out",
      "description": "관에서 동물이 뽕 튀어나옴(높게)",
      "duration": 0.155,
      "loop": false,
      "lufs": -21.5,
      "peak": -2,
      "channels": 1,
      "origin": [
       "synthesized",
       "pop-sounds/pop3.ogg"
      ],
      "method": "몸통 툭: 음정이 떨어지는 사인(220→110Hz)",
      "author": "cogitollc, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/pop-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 2552,
     "sha256": "9ce4eec0f3c8c13ffec0533d560b1a6617d192090f4d3fa1cf65f825c632e9e1"
    },
    {
     "path": "pop-out-3.mp3",
     "meta": {
      "role": "pop-out",
      "description": "관에서 뽕 + 작은 보잉",
      "duration": 0.189,
      "loop": false,
      "lufs": -20.9,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "pop-sounds/pop6.ogg",
       "boings/bung_01.mp3"
      ],
      "method": "몸통 툭: 음정이 떨어지는 사인(220→110Hz)",
      "author": "cogitollc, EZduzziteh, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/pop-sounds",
       "https://opengameart.org/content/boings",
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 3179,
     "sha256": "6dc8237d535453417222d9d26a072c6ffbbfd2c930780d35035247c368ea4496"
    },
    {
     "path": "squeak-1.mp3",
     "meta": {
      "role": "squeak",
      "description": "명령 받은 동물의 귀여운 삑(대답)",
      "duration": 0.212,
      "loop": false,
      "lufs": -16.7,
      "peak": -2,
      "channels": 1,
      "origin": [
       "rd-creature/cute_07.ogg"
      ],
      "author": "rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/80-cc0-creature-sfx"
      ]
     },
     "bytes": 3493,
     "sha256": "1394562d29e77e121764b751be69e6311a6727646e2ac6710194fd89f290254b"
    },
    {
     "path": "squeak-2.mp3",
     "meta": {
      "role": "squeak",
      "description": "명령 받은 동물의 귀여운 삑(대답)",
      "duration": 0.288,
      "loop": false,
      "lufs": -18.1,
      "peak": -2,
      "channels": 1,
      "origin": [
       "rd-creature/cute_01.ogg"
      ],
      "author": "rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/80-cc0-creature-sfx"
      ]
     },
     "bytes": 4433,
     "sha256": "7de2587f438f1ff82650ad9f64107f40606ad3e53513a28dd5091a2fbb9db46c"
    },
    {
     "path": "squeak-3.mp3",
     "meta": {
      "role": "squeak",
      "description": "명령 받은 동물의 귀여운 삑(올라갔다 내려옴)",
      "duration": 0.288,
      "loop": false,
      "lufs": -17,
      "peak": -2,
      "channels": 1,
      "origin": [
       "rd-creature/cute_08.ogg"
      ],
      "author": "rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/80-cc0-creature-sfx"
      ]
     },
     "bytes": 4433,
     "sha256": "ba65153c547c69342fda1406fa5718af55bfbd72e1644f866d32de0f68c51012"
    },
    {
     "path": "squeak-4.mp3",
     "meta": {
      "role": "squeak",
      "description": "명령 받은 동물의 귀여운 삑(짧게)",
      "duration": 0.3,
      "loop": false,
      "lufs": -15.7,
      "peak": -2,
      "channels": 1,
      "origin": [
       "rd-creature/cute_10.ogg"
      ],
      "author": "rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/80-cc0-creature-sfx"
      ]
     },
     "bytes": 4433,
     "sha256": "6313e104101a212260f6bf27c117dd7a33fb073cffb76e7c5e3d38ab876c78ee"
    },
    {
     "path": "home-1.mp3",
     "meta": {
      "role": "home",
      "description": "동물이 집(출구)에 들어감 — 맑은 딩",
      "duration": 0.7,
      "loop": false,
      "lufs": -20.8,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/glass_001.ogg",
       "bell-dings/bell_ding2.wav"
      ],
      "author": "Kenney, PWL",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "https://opengameart.org/content/bell-dingschimes"
      ]
     },
     "bytes": 9135,
     "sha256": "3150ab5b14304b0000df0969e3450d8eda6db970e642d2c7c435be8b7d02a809"
    },
    {
     "path": "home-2.mp3",
     "meta": {
      "role": "home",
      "description": "동물이 집(출구)에 들어감 — 맑은 딩(한 음 높게)",
      "duration": 0.7,
      "loop": false,
      "lufs": -21.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/glass_001.ogg",
       "bell-dings/bell_ding2.wav"
      ],
      "author": "Kenney, PWL",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "https://opengameart.org/content/bell-dingschimes"
      ]
     },
     "bytes": 9135,
     "sha256": "bb67a57fb01bee11a3fe3e475b8036ea6f69b4cbb90cea4b4215abef6293cdf6"
    },
    {
     "path": "home-3.mp3",
     "meta": {
      "role": "home",
      "description": "동물이 집(출구)에 들어감 — 맑은 딩(장3도 높게)",
      "duration": 0.7,
      "loop": false,
      "lufs": -19.6,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/glass_001.ogg",
       "bell-dings/bell_ding2.wav"
      ],
      "author": "Kenney, PWL",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "https://opengameart.org/content/bell-dingschimes"
      ]
     },
     "bytes": 9135,
     "sha256": "0c26b4457615aedf2b8a25a245438734a72348e6d2d207c75d3c9df98ed49fc5"
    },
    {
     "path": "poof.mp3",
     "meta": {
      "role": "lost",
      "description": "동물이 길을 잃음 — 부드러운 연기 퐁(아이용)",
      "duration": 0.5,
      "loop": false,
      "lufs": -18.9,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "swishes/swishes/swish-7.wav"
      ],
      "method": "연기 퍼프: 분홍 잡음 + 시간 변화 로패스 2.2k→300Hz, 둥근 훅: 사인 170→90Hz, 반짝: 사인 2.6·3.4kHz 작은 삑 둘",
      "author": "artisticdude, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/swishes-sound-pack",
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 6941,
     "sha256": "0b71713a2368aa07f95d4ec60f9d1d805702822e75cd2b948dde63d3fb721bde"
    },
    {
     "path": "splash.mp3",
     "meta": {
      "role": "water",
      "description": "물에 퐁당",
      "duration": 0.85,
      "loop": false,
      "lufs": -21.4,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "rd-sfx100/plop_02.ogg",
       "rd-water/splash_08.ogg"
      ],
      "author": "rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/100-cc0-sfx",
       "https://opengameart.org/content/40-cc0-water-splash-slime-sfx"
      ]
     },
     "bytes": 11016,
     "sha256": "438f2562142c5970a1907a8698d1947f9e0ed53f290a804426b58d409cf51f4f"
    },
    {
     "path": "bonk.mp3",
     "meta": {
      "role": "fall-bonk",
      "description": "너무 높이서 떨어짐 — 만화 통(아프지 않게)",
      "duration": 0.45,
      "loop": false,
      "lufs": -20.7,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-impact/Audio/impactWood_light_000.ogg",
       "kenney-impact/Audio/impactSoft_heavy_001.ogg"
      ],
      "method": "통 소리: 사인 520→300Hz 짧은 감쇠(나무토막 울림)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 6314,
     "sha256": "9f0f703b9bfaeb2eb22167d7b75c96451b835456793300ab20f159f21ba0813e"
    },
    {
     "path": "dig-1.mp3",
     "meta": {
      "role": "dig",
      "description": "삽으로 흙 퍼기",
      "duration": 0.45,
      "loop": false,
      "lufs": -20.7,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_snow_000.ogg",
       "tinysized/sfx-cc0/soil-steps-01.wav",
       "kenney-impact/Audio/footstep_grass_000.ogg"
      ],
      "author": "Kenney, Vehicle",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx"
      ]
     },
     "bytes": 6314,
     "sha256": "8df2109d0afee094b19a68d01a8b072446aa51a3f335c3a8c01e1fa45db57987"
    },
    {
     "path": "dig-2.mp3",
     "meta": {
      "role": "dig",
      "description": "삽으로 흙 퍼기",
      "duration": 0.45,
      "loop": false,
      "lufs": -19.7,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_snow_002.ogg",
       "tinysized/sfx-cc0/soil-steps-01.wav",
       "kenney-impact/Audio/footstep_grass_002.ogg"
      ],
      "author": "Kenney, Vehicle",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx"
      ]
     },
     "bytes": 6314,
     "sha256": "9fead4e27cc487eeb9c88d72f9641361a7fd55d0b2c27421535d6479feb79fc4"
    },
    {
     "path": "dig-3.mp3",
     "meta": {
      "role": "dig",
      "description": "삽으로 흙 퍼기",
      "duration": 0.45,
      "loop": false,
      "lufs": -21.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_snow_004.ogg",
       "tinysized/sfx-cc0/soil-steps-01.wav",
       "kenney-impact/Audio/footstep_grass_004.ogg"
      ],
      "author": "Kenney, Vehicle",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx"
      ]
     },
     "bytes": 6314,
     "sha256": "c1aa95954dd0ed5459caf439d741de1f9a1a373a8d02fcb57deed2e84180afb6"
    },
    {
     "path": "bash-1.mp3",
     "meta": {
      "role": "bash",
      "description": "흙벽을 퍽 뚫음(부드러운 와삭)",
      "duration": 0.5,
      "loop": false,
      "lufs": -19.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/impactPunch_medium_001.ogg",
       "eating-crunch/crunch.4.ogg",
       "kenney-impact/Audio/footstep_snow_001.ogg"
      ],
      "author": "Kenney, StarNinjas",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/7-eating-crunches"
      ]
     },
     "bytes": 6941,
     "sha256": "b2c788765cf17093dec8e43b076fcad7e14f8608862266f9731a04cc21940d90"
    },
    {
     "path": "bash-2.mp3",
     "meta": {
      "role": "bash",
      "description": "흙벽을 퍽 뚫음(부드러운 와삭)",
      "duration": 0.5,
      "loop": false,
      "lufs": -19.5,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/impactPunch_medium_003.ogg",
       "eating-crunch/crunch.6.ogg",
       "kenney-impact/Audio/footstep_snow_001.ogg"
      ],
      "author": "Kenney, StarNinjas",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/7-eating-crunches"
      ]
     },
     "bytes": 6941,
     "sha256": "ed9aa37bb04368bee7aa7270d5a9031229eadd52f1218a1324346dcd3460460b"
    },
    {
     "path": "build-1.mp3",
     "meta": {
      "role": "build",
      "description": "나무 판자 놓기 톡탁",
      "duration": 0.38,
      "loop": false,
      "lufs": -23.7,
      "peak": -2.1,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/impactPlank_medium_000.ogg",
       "rd-woodmetal/wood_hammer_02.ogg"
      ],
      "author": "Kenney, rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/100-cc0-metal-and-wood-sfx"
      ]
     },
     "bytes": 5374,
     "sha256": "bf2422ee8004df4776b76f07d9af9e9d28c696f71e8240da4a29733393f6ff0e"
    },
    {
     "path": "build-2.mp3",
     "meta": {
      "role": "build",
      "description": "나무 판자 놓기 톡탁",
      "duration": 0.38,
      "loop": false,
      "lufs": -22.5,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/impactPlank_medium_002.ogg",
       "rd-woodmetal/wood_hammer_02.ogg"
      ],
      "author": "Kenney, rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/100-cc0-metal-and-wood-sfx"
      ]
     },
     "bytes": 5374,
     "sha256": "befb6c98edf9632f85509114b5289fc8d4359d8fa461634bf8c3d5aa8c6d008c"
    },
    {
     "path": "build-3.mp3",
     "meta": {
      "role": "build",
      "description": "나무 판자 놓기 톡탁",
      "duration": 0.38,
      "loop": false,
      "lufs": -23.3,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/impactPlank_medium_004.ogg",
       "rd-woodmetal/wood_hammer_01.ogg"
      ],
      "author": "Kenney, rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/100-cc0-metal-and-wood-sfx"
      ]
     },
     "bytes": 5374,
     "sha256": "597d7eef4aabbab6838430e0ae64d38fe0da963ea72a2ef599ca8be90c77af7e"
    },
    {
     "path": "build-warn.mp3",
     "meta": {
      "role": "build-warn",
      "description": "판자가 3개 남음 — 짧은 틱",
      "duration": 0.09,
      "loop": false,
      "lufs": -18.4,
      "peak": -3.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/tick_004.ogg"
      ],
      "method": "경고 삑: 사인 1975Hz 50ms",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 1925,
     "sha256": "2a252eb5fdab4c8b00d7d32585fc04cec2ef3b864436736968bb09150f6ab793"
    },
    {
     "path": "fuse-tick.mp3",
     "meta": {
      "role": "fuse-tick",
      "description": "폭탄 초읽기 똑(게임이 1초마다)",
      "duration": 0.12,
      "loop": false,
      "lufs": -25.7,
      "peak": -2.1,
      "channels": 1,
      "origin": [
       "ticks/ticking clock - tick1.wav"
      ],
      "author": "bart",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/ticking-clock"
      ]
     },
     "bytes": 2239,
     "sha256": "7a8cddac7235db274f57e3ca58b752c398a6b7c2d1927224ea7423e12bc56367"
    },
    {
     "path": "boom.mp3",
     "meta": {
      "role": "boom",
      "description": "작고 둥근 만화 폭발(펑 + 연기)",
      "duration": 0.999,
      "loop": false,
      "lufs": -18.4,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "dull-explosion/explosion_dull.flac"
      ],
      "method": "둥근 쿵: 사인 95→40Hz+약한 포화, 연기: 분홍 잡음 로패스 1.8k→300Hz",
      "author": "qubodup, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/dull-explosion",
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 15038,
     "sha256": "5617ecf0cfe98276439d2a3e773677ae438633db4c8e065cf2a414babcf444cc"
    },
    {
     "path": "float-open.mp3",
     "meta": {
      "role": "float",
      "description": "우산·풍선이 훅 펴짐",
      "duration": 0.449,
      "loop": false,
      "lufs": -17.8,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-rpg/Audio/cloth3.ogg",
       "swishes/swishes/swish-9.wav"
      ],
      "method": "공기 훅: 로패스 잡음 + 사인 150→80Hz",
      "author": "Kenney, artisticdude, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/rpg-audio",
       "https://opengameart.org/content/swishes-sound-pack",
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 6314,
     "sha256": "80dd5c851acb808c67c035de2e2f7b54969979867ca0f47d6ed1d8eee5d4417a"
    },
    {
     "path": "climb-1.mp3",
     "meta": {
      "role": "climb",
      "description": "벽 타기 사각사각(발톱)",
      "duration": 0.24,
      "loop": false,
      "lufs": -26.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_carpet_000.ogg",
       "kenney-impact/Audio/footstep_carpet_002.ogg",
       "kenney-impact/Audio/footstep_carpet_004.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 3806,
     "sha256": "8a6c3d3386f25085ce6f8461a7b19c0eaa848f410eae3002e9abfcd943030e88"
    },
    {
     "path": "climb-2.mp3",
     "meta": {
      "role": "climb",
      "description": "벽 타기 사각사각(발톱)",
      "duration": 0.24,
      "loop": false,
      "lufs": -27.1,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/footstep_carpet_001.ogg",
       "kenney-impact/Audio/footstep_carpet_003.ogg",
       "kenney-impact/Audio/footstep_carpet_000.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 3806,
     "sha256": "22a4783f1cf011757cad9df3d1e4711798b77b786842472f134506eea710d20e"
    },
    {
     "path": "whistle-stop.mp3",
     "meta": {
      "role": "blocker",
      "description": "막는 동물의 호루라기 삑(심판·건널목 지킴이)",
      "duration": 0.42,
      "loop": false,
      "lufs": -20.9,
      "peak": -15.9,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "호루라기: 사인 2.9kHz + 구슬 떨림(31Hz FM ±140Hz·AM) + 입김 대역 잡음 2~7kHz",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 6000,
     "sha256": "89e06c5f8797c9ed53e3834fab2c7836c56d4ee867bef25988b7e9d8a3498cba"
    },
    {
     "path": "pipe-open.mp3",
     "meta": {
      "role": "level-start",
      "description": "레벨 시작 — 관 뚜껑 뽁(코르크)",
      "duration": 0.599,
      "loop": false,
      "lufs": -17.6,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "tinysized/sfx-cc0/bottle-glass-uncork-01.wav",
       "kenney-rpg/Audio/metalLatch.ogg"
      ],
      "author": "Vehicle, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx",
       "https://kenney.nl/assets/rpg-audio"
      ]
     },
     "bytes": 7881,
     "sha256": "726df9b6117bfdc661d2ba09d0597f9e49e4da1ea7de139901dee346558c731d"
    },
    {
     "path": "door-chime.mp3",
     "meta": {
      "role": "first-home",
      "description": "출구 문 딩동(첫 동물 도착)",
      "duration": 1.55,
      "loop": false,
      "lufs": -18.6,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "bell-dings/bell_ding2.wav"
      ],
      "author": "PWL",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/bell-dingschimes"
      ]
     },
     "bytes": 19480,
     "sha256": "8605d212728c0f1a9de6c8fe208b14eb8847463e01715dfbe53f729af738acf3"
    },
    {
     "path": "select-skill.mp3",
     "meta": {
      "role": "ui-select",
      "description": "직업(기술) 고름 — 부드러운 뽀",
      "duration": 0.188,
      "loop": false,
      "lufs": -24.3,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/drop_003.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 3179,
     "sha256": "f80b3eea1087d6f15139e9f77a059347c84b34395bfd364c9f9f38904fd8e42b"
    },
    {
     "path": "assign.mp3",
     "meta": {
      "role": "ui-assign",
      "description": "동물에게 직업 줌 — 퉁",
      "duration": 0.1,
      "loop": false,
      "lufs": -27,
      "peak": -2.9,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/pluck_001.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 1925,
     "sha256": "6f783790b8c585342e0beb8ae8def660db188462571f193e81dd7f469b5a90d5"
    },
    {
     "path": "deny.mp3",
     "meta": {
      "role": "ui-deny",
      "description": "안 됨 — 짧은 뚜둥",
      "duration": 0.104,
      "loop": false,
      "lufs": -22.7,
      "peak": -2.2,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/error_004.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 1925,
     "sha256": "f6951dc1a83c48ab74c3b979b8cd357502333a2f34336a5a7bf24f71c53c46b1"
    },
    {
     "path": "countdown-beep.mp3",
     "meta": {
      "role": "countdown",
      "description": "경주 출발 3·2·1",
      "duration": 0.28,
      "loop": false,
      "lufs": -18.9,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "초읽기: 마림바풍 — 사인 880Hz + 4배음 짧은 감쇠",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 4120,
     "sha256": "a7b3ff1aae4c2861e25edf81cb517eccedc34a9fe2f5363eeba73325e46d110e"
    },
    {
     "path": "countdown-go.mp3",
     "meta": {
      "role": "countdown-go",
      "description": "경주 출발 GO",
      "duration": 0.8,
      "loop": false,
      "lufs": -17,
      "peak": -3.3,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "출발: A5·C#6·E6·A6 화음(사인+약한 배음) 0.7초 감쇠",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 10389,
     "sha256": "87721e5bdf723aa1ab51a016b629aae749dc225bd59ae223f634e9c9abd29d9c"
    },
    {
     "path": "clear-jingle.mp3",
     "meta": {
      "role": "level-clear",
      "description": "레벨 완료 징글 — Win Jingle(Vibraphone) by Fupi",
      "duration": 3,
      "loop": false,
      "lufs": -17,
      "peak": -6.3,
      "channels": 2,
      "origin": [
       "win-jingle/WinVibraphone.wav"
      ],
      "author": "Fupi",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/win-jingle"
      ]
     },
     "bytes": 48945,
     "sha256": "ff172b31f09f9b1c1e0e586b0378b6299dff103806e0532a924dba64052a9f16"
    },
    {
     "path": "fail-jingle.mp3",
     "meta": {
      "role": "level-fail",
      "description": "레벨 실패 — 부드럽게 내려가는 피치카토(Kenney Music Jingles)",
      "duration": 2.258,
      "loop": false,
      "lufs": -18,
      "peak": -6.3,
      "channels": 1,
      "origin": [
       "kenney-jingles/Audio/Pizzicato jingles/jingles_PIZZI07.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/music-jingles"
      ]
     },
     "bytes": 32593,
     "sha256": "3bdca23850b5625b508da250ef1f44e7781debf8dcdc2459006eeb8d63c87509"
    },
    {
     "path": "star-1.mp3",
     "meta": {
      "role": "star",
      "description": "별 1개 딩",
      "duration": 1,
      "loop": false,
      "lufs": -20,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "bell-dings/bell_ding3.wav",
       "kenney-ui/Audio/glass_001.ogg"
      ],
      "author": "PWL, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/bell-dingschimes",
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 12897,
     "sha256": "c1978e127fb892917d2d4a9e788b3148288e238132d3d5a1e09a45cf34b151a6"
    },
    {
     "path": "star-2.mp3",
     "meta": {
      "role": "star",
      "description": "별 2개 딩(더 높게)",
      "duration": 1,
      "loop": false,
      "lufs": -20,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "bell-dings/bell_ding3.wav",
       "kenney-ui/Audio/glass_001.ogg"
      ],
      "author": "PWL, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/bell-dingschimes",
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 12897,
     "sha256": "f0574c52ccd4aed9fb82fc671cca7a5e12d1ec4482ad5b61b610f50373f84078"
    },
    {
     "path": "star-3.mp3",
     "meta": {
      "role": "star",
      "description": "별 3개 딩(가장 높게)",
      "duration": 1,
      "loop": false,
      "lufs": -19.5,
      "peak": -2,
      "channels": 1,
      "origin": [
       "bell-dings/bell_ding3.wav",
       "kenney-ui/Audio/glass_001.ogg"
      ],
      "author": "PWL, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/bell-dingschimes",
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 12897,
     "sha256": "5e0baa5364c10179f6c29e3b5239dbed6f730b3a7470aaff6f881c2121e0fad3"
    },
    {
     "path": "race-win.mp3",
     "meta": {
      "role": "race-win",
      "description": "경주 1등 팡파르 — Classic fanfare lick by fvcalderan",
      "duration": 2.895,
      "loop": false,
      "lufs": -16,
      "peak": -4.7,
      "channels": 2,
      "origin": [
       "classic-fanfare/fanfare_3.ogg"
      ],
      "author": "fvcalderan",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/classic-fanfare-lick"
      ]
     },
     "bytes": 47273,
     "sha256": "8ab634ae67a16d51c763699396380a5c4321f4b076ecdf42746924550910dafb"
    },
    {
     "path": "race-lose.mp3",
     "meta": {
      "role": "race-lose",
      "description": "경주 짐 — Race Finish Bad(앞 2초) by MintoDog",
      "duration": 2.1,
      "loop": false,
      "lufs": -17,
      "peak": -8.5,
      "channels": 2,
      "origin": [
       "race-finish/Race Finish Bad/Race Finish Bad (Jingle).ogg"
      ],
      "author": "MintoDog",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/racing-game-finish-jingle"
      ]
     },
     "bytes": 34734,
     "sha256": "ce6dd02c437f2e9795fd1966d8a540256d5f9ef237db74188e70206481fbec37"
    },
    {
     "path": "fast-forward-loop.mp3",
     "meta": {
      "role": "fast-forward",
      "description": "빨리 감기 중 아주 옅은 위잉 루프",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -24,
      "peak": -14.1,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "빨리 감기: 원형 대역 잡음 700~3500Hz × 12Hz 주기 변조 + 사인 330Hz(정수 바퀴)",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-petparade.py"
      ]
     },
     "bytes": 27316,
     "sha256": "53c3eabd2fea7efd7c5ff19a52887a5cbdf4025946395df71e83548be39019c4"
    }
   ],
   "base": "sfx-critters/1/"
  },
  {
   "id": "sfx-curling",
   "version": 1,
   "kind": "audio",
   "title": "Table Curling Impacts",
   "author": "Kenney",
   "license": "CC0-1.0",
   "source": "https://kenney.nl/assets/impact-sounds",
   "notes": "Selected, filtered and level-adjusted samples from Impact Sounds 1.0. Three collision variants, a soft release and an end bell. No synthesized fallback. Listening acceptance pending.",
   "tags": [
    "curling",
    "table",
    "collision",
    "sport"
   ],
   "files": [
    {
     "path": "stone-hit-1.mp3",
     "meta": {
      "role": "collision",
      "duration": 0.161088,
      "origin": "impactGeneric_light_000.ogg",
      "processing": "70 Hz high-pass, 6.5 kHz low-pass; loudnorm target -18 LUFS / -2 dBTP. Listening review pending."
     },
     "bytes": 3805,
     "sha256": "89d3c30e54e7b679f806abf9b8ab557d5b5c3e6c453800b37e32c5a52d4ddcf2"
    },
    {
     "path": "stone-hit-2.mp3",
     "meta": {
      "role": "collision",
      "duration": 0.114603,
      "origin": "impactGeneric_light_001.ogg",
      "processing": "70 Hz high-pass, 6.5 kHz low-pass; loudnorm target -18 LUFS / -2 dBTP. Listening review pending."
     },
     "bytes": 2969,
     "sha256": "c32d3153503d98c504640bd1f9e278be192040ab568d6b47425b0162d1a8b11e"
    },
    {
     "path": "stone-hit-3.mp3",
     "meta": {
      "role": "collision",
      "duration": 0.161088,
      "origin": "impactGeneric_light_002.ogg",
      "processing": "70 Hz high-pass, 6.5 kHz low-pass; loudnorm target -18 LUFS / -2 dBTP. Listening review pending."
     },
     "bytes": 3805,
     "sha256": "db0c02c4b5fa75c4e70242ab0697f412438b07dc3553d881437c072153893d26"
    },
    {
     "path": "stone-release.mp3",
     "meta": {
      "role": "release",
      "duration": 0.115102,
      "origin": "impactSoft_medium_000.ogg",
      "processing": "70 Hz high-pass, 6.5 kHz low-pass; loudnorm target -18 LUFS / -2 dBTP. Listening review pending."
     },
     "bytes": 2969,
     "sha256": "590e2cdc90705e5d54b4c7f3acf071cd73798277eae698913cde3721900bf3d8"
    },
    {
     "path": "end-bell.mp3",
     "meta": {
      "role": "end",
      "duration": 1.480181,
      "origin": "impactBell_heavy_000.ogg",
      "processing": "70 Hz high-pass, 6.5 kHz low-pass; loudnorm target -18 LUFS / -2 dBTP. Listening review pending."
     },
     "bytes": 24703,
     "sha256": "93b68e491f4b0e9350fab63af11eb0f91a8315942d1be10c20ecbac9c69e6221"
    }
   ],
   "base": "sfx-curling/1/"
  },
  {
   "id": "sfx-lab",
   "version": 1,
   "kind": "audio",
   "title": "Science Lab Puzzle SFX",
   "author": "여러 저작자 — 파일별 meta.author (Kenney, cogitollc, CleytonKauffman, BMacZero, rubberduck, Vehicle, AntumDeluge (Freesound CC0 sources: d.n.audio.uk, Gniffelbaf), OO, EZduzziteh, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "EUREKA LAB(과학 퍼즐) 효과음: 부품 놓기·돌리기·빼기, 실행 스위치, 레이저(지속음·닿음·갈라짐·센서), 전기(웅·합선·전구 켜짐/터짐·부저·모터), 구슬(구르기·튀김·부딪힘·스프링·벨·컵), 화학(액체 흐름·보글보글·탄산·풍선·유리·버너), 성공 스팅어·힌트. 모노 mp3 96kbps. 한 번 소리 목표 -16~-19 LUFS(작은 틱·딸깍·힌트는 -19~-20), 0.4초 미만 짧은 소리는 피크 -1.5 dBFS 기준(1.6초로 채워 잰 LUFS 라 -20~-30 으로 낮게 나오지만 들리는 크기는 비슷), 크레스트가 큰 소리(종·유리·거품)는 리미터 한계(4 dB) 때문에 목표보다 1~3 dB 낮다. 지속음 루프는 -20 LUFS(배경으로 깔리게). 피크 -1.5 dBFS 아래, 앞 무음 없음. 루프(*-loop)는 meta.loopStart/loopEnd(초, 디코딩 기준)를 AudioBufferSourceNode.loopStart/loopEnd 에 넣는다. 원본은 전부 CC0(Kenney·rubberduck·BMacZero·CleytonKauffman·OO·AntumDeluge·Vehicle·PWL·EZduzziteh 등 OpenGameArt 작가들, 파일별 meta.author/source). 원본이 없는 성분(레이저·전기 웅, 모터, 부저, 탄산, 아르페지오 등)은 numpy 로 합성(meta.method). 가공물·합성음은 CC0. sfx-ui(ui-click/confirm/back/error)·sfx-critters(pop·splash·countdown·clear/fail 징글·star)와 겹치지 않게 실험실 고유 소리만 담았다. 만드는 법: python3 -I tools/audio/build-audio-eureka.py sfx-lab",
   "tags": [
    "sfx",
    "lab",
    "science",
    "puzzle",
    "laser",
    "electric",
    "circuit",
    "marble",
    "chemistry",
    "liquid",
    "ui",
    "eureka-lab"
   ],
   "files": [
    {
     "path": "part-place.mp3",
     "meta": {
      "role": "part-place",
      "description": "부품 놓기 — 부드러운 톡(나무 쿵 + 딸깍)",
      "duration": 0.099,
      "loop": false,
      "lufs": -27.8,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/impactWood_light_001.ogg",
       "kenney-ui/Audio/click_003.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 1925,
     "sha256": "8b91218924bdb629dee9ec76318a90bff0321a502518a05b20b553dcba942bc3"
    },
    {
     "path": "part-rotate.mp3",
     "meta": {
      "role": "part-rotate",
      "description": "부품 돌리기 — 짧은 틱틱",
      "duration": 0.029,
      "loop": false,
      "lufs": -28.8,
      "peak": -4.1,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/tick_002.ogg",
       "kenney-ui/Audio/tick_001.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 1298,
     "sha256": "d282fda9d37b90cb60f59a56a189053fcb04185d8e4029b216dcceca310c2e22"
    },
    {
     "path": "part-remove.mp3",
     "meta": {
      "role": "part-remove",
      "description": "부품 빼기 — 뽁 + 올라가는 삑",
      "duration": 0.082,
      "loop": false,
      "lufs": -20.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "synthesized",
       "pop-sounds/pop4.ogg"
      ],
      "method": "들어 올림 삑: 사인 520→900Hz 0.07초",
      "author": "cogitollc, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/pop-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 1925,
     "sha256": "8844407e20434a88ba28532eed8f0fb10b8144a42ad785fed4e03d203d32f0ad"
    },
    {
     "path": "run-start.mp3",
     "meta": {
      "role": "run-start",
      "description": "실행 — 전원 스위치 철컥 + 쿵",
      "duration": 0.303,
      "loop": false,
      "lufs": -27.4,
      "peak": -2.2,
      "channels": 1,
      "origin": [
       "synthesized",
       "circuit-breaker/switch on.wav"
      ],
      "method": "전원 쿵: 사인 95→55Hz 짧은 저음",
      "author": "CleytonKauffman, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/sfx-circuit-breaker",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 4433,
     "sha256": "484405fe87a76dd751f3c60fb245ea14aea80a35b03584d5a64d359cc4dac1e3"
    },
    {
     "path": "laser-hum-loop.mp3",
     "meta": {
      "role": "laser-hum",
      "description": "레이저 빔 지속음(웅, 맥놀이·떨림)",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -20,
      "peak": -12.6,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "레이저 빔 웅: 사인 220/221.5/440/660/1320Hz + 6Hz 떨림 + 원형 대역 잡음 2.5~7kHz(2초 정수 주기)",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 27316,
     "sha256": "9c0ed793490cc8ffbb50dd8a37428ca528634f16e433d97684a0c40a84accf63"
    },
    {
     "path": "laser-hit.mp3",
     "meta": {
      "role": "laser-hit",
      "description": "빔이 닿음 — 지직 + 찌잉",
      "duration": 0.152,
      "loop": false,
      "lufs": -27,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "tesla-spark/spark.wav"
      ],
      "method": "찌잉: 하강 사인 2400→700Hz 0.09초",
      "author": "BMacZero, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/electricity-sound-effects-0",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 2552,
     "sha256": "3629b9835d785abf4dabce055302e7ba5e1694fc11957a1088315ccfa7154d73"
    },
    {
     "path": "beam-split.mp3",
     "meta": {
      "role": "beam-split",
      "description": "빔 갈라짐 — 유리 반짝임",
      "duration": 0.673,
      "loop": false,
      "lufs": -18.1,
      "peak": -2,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/glass_004.ogg",
       "kenney-ui/Audio/glass_001.ogg"
      ],
      "method": "반짝 떨림: 사인 2637/3322/3951Hz × 14Hz 떨림, 0.6초 감쇠",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 8822,
     "sha256": "5914c363d2024af727ad8632ba4a9dc38e3ccd80bb4407a96852e1a75418754c"
    },
    {
     "path": "sensor-ok.mp3",
     "meta": {
      "role": "sensor-ok",
      "description": "센서 통과 — 맑은 띵-딩",
      "duration": 0.782,
      "loop": false,
      "lufs": -17.4,
      "peak": -2,
      "channels": 1,
      "origin": [
       "rd-sfx100/bell_01.ogg",
       "kenney-ui/Audio/glass_002.ogg"
      ],
      "author": "rubberduck, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/100-cc0-sfx",
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 10076,
     "sha256": "6c528cef55565fc4cca062c3381f0cb0d5e645a65279bbd9abf00a790de0f497"
    },
    {
     "path": "electric-hum-loop.mp3",
     "meta": {
      "role": "electric-hum",
      "description": "회로 통전 지속음(100Hz 웅 + 지글)",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -20,
      "peak": -14.4,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "전기 웅: 100Hz 배음(포화) + 원형 파열음 120/s(100Hz 위상 동기), 2초 정수 주기",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 27316,
     "sha256": "c50caceafb609939e7d68f8c1a44919822c10f071a10b048c1aae53da00199b6"
    },
    {
     "path": "spark.mp3",
     "meta": {
      "role": "spark",
      "description": "합선 — 파직 지지직",
      "duration": 0.27,
      "loop": false,
      "lufs": -29.9,
      "peak": -2.1,
      "channels": 1,
      "origin": [
       "tesla-spark/spark.wav",
       "tesla-spark/continuousspark.wav",
       "tinysized/sfx-cc0/paralyzer-discharge-01.wav"
      ],
      "author": "BMacZero, Vehicle",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/electricity-sound-effects-0",
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx"
      ]
     },
     "bytes": 4120,
     "sha256": "a488764a7b9a4b010293124ecb055a0e35e04a083c50c83c523bf2b9fa86ea72"
    },
    {
     "path": "bulb-on.mp3",
     "meta": {
      "role": "bulb-on",
      "description": "전구 켜짐 — 틱-팅",
      "duration": 0.247,
      "loop": false,
      "lufs": -21.7,
      "peak": -2,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/tick_001.ogg",
       "kenney-ui/Audio/glass_002.ogg"
      ],
      "method": "필라멘트 웅: 사인 120Hz·240Hz 0.3초(옅게)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 3806,
     "sha256": "ce0c2e9d5492f4c7fabe6097353355d336e8edf8f88de10782d58485e97de96a"
    },
    {
     "path": "bulb-blow.mp3",
     "meta": {
      "role": "bulb-blow",
      "description": "전구 터짐 — 퐁 + 지글",
      "duration": 0.697,
      "loop": false,
      "lufs": -17,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "balloon-sounds/balloon_pop.flac",
       "kenney-impact/Audio/impactGlass_light_000.ogg"
      ],
      "method": "지글 꼬리: 고역 파열음 900/s(감쇠) 0.7초",
      "author": "AntumDeluge (Freesound CC0 sources: d.n.audio.uk, Gniffelbaf), Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/balloon-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 9135,
     "sha256": "56477a52e478ea64f259b3aba42d62f3fe367ae07d813dd25983ebc461774f07"
    },
    {
     "path": "buzzer.mp3",
     "meta": {
      "role": "buzzer",
      "description": "회로 부저 — 부드러운 부-",
      "duration": 0.55,
      "loop": false,
      "lufs": -18.9,
      "peak": -11.7,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "부저: 사각 150Hz + 톱니 300Hz × 50Hz 떨림, 로패스 3.2kHz",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 7568,
     "sha256": "ba9ea811ce8b3dc15ecd0dfd3e548df9269b4c878ec663cf6d340c7f4107fa7a"
    },
    {
     "path": "motor-loop.mp3",
     "meta": {
      "role": "motor",
      "description": "작은 모터 위잉 지속음",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -20,
      "peak": -13.8,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "소형 모터: motor_voice 190Hz(2Hz 미세 흔들림, 정수 바퀴) 톱니 6, 원형 필터",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 27316,
     "sha256": "f0921d65f1017d1b9cc7a0f281b35560c84926075a835bba0a89a1799c413658"
    },
    {
     "path": "ball-roll-loop.mp3",
     "meta": {
      "role": "ball-roll",
      "description": "구슬 구르는 지속음(속도에 맞춰 playbackRate 조절)",
      "duration": 3.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 3.1,
      "lufs": -20,
      "peak": -4.2,
      "channels": 1,
      "origin": [
       "synthesized",
       "rd-loops30/rolling.ogg"
      ],
      "method": "구르기: 녹음 스펙트럼의 원형 잡음 × 주기 요동(6~20Hz) + 원형 파열음 30/s, 3초",
      "author": "rubberduck, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/30-cc0-sfx-loops",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 39228,
     "sha256": "62a13c015c1e3bf8259dbbf4bb34d9cac298e1836d842e1288fd4fd39c61a05b"
    },
    {
     "path": "ball-bounce.mp3",
     "meta": {
      "role": "ball-bounce",
      "description": "구슬 튀김 — 톡",
      "duration": 0.107,
      "loop": false,
      "lufs": -25.6,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/impactGlass_light_002.ogg",
       "kenney-impact/Audio/impactWood_light_001.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2239,
     "sha256": "dd30303ab93543e69c249384abd28799d9f4e6a1306b0708c3d62580942a02f5"
    },
    {
     "path": "ball-clack.mp3",
     "meta": {
      "role": "ball-clack",
      "description": "구슬끼리 부딪힘 — 딱",
      "duration": 0.145,
      "loop": false,
      "lufs": -26.7,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "baoding-balls/Baoding.wav",
       "kenney-impact/Audio/impactGlass_light_000.ogg"
      ],
      "author": "OO, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/baoding-balls",
       "https://kenney.nl/assets/impact-sounds"
      ]
     },
     "bytes": 2552,
     "sha256": "8690f6bc45208d1f7fdb9ab456124dcd6a38c413931f6c38a5b58da460b437bb"
    },
    {
     "path": "spring.mp3",
     "meta": {
      "role": "spring",
      "description": "스프링 — 보잉",
      "duration": 0.431,
      "loop": false,
      "lufs": -22.5,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "boings/bung_01.mp3",
       "rd-sfx100/spring_05.ogg"
      ],
      "author": "EZduzziteh, rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/boings",
       "https://opengameart.org/content/100-cc0-sfx"
      ]
     },
     "bytes": 6000,
     "sha256": "fcbe24dcc11227f95ab26b6975188cb099cd8f5153cb7c50b32a1214ab465dbc"
    },
    {
     "path": "bell-ding.mp3",
     "meta": {
      "role": "bell",
      "description": "탁상 벨 — 딩",
      "duration": 1.151,
      "loop": false,
      "lufs": -17.8,
      "peak": -2,
      "channels": 1,
      "origin": [
       "rd-sfx100/bell_01.ogg"
      ],
      "author": "rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/100-cc0-sfx"
      ]
     },
     "bytes": 14778,
     "sha256": "ff8631d01fd565105878e3719564fb9cce6d6c71b72518e713ae02b6e3ec9d06"
    },
    {
     "path": "cup-in.mp3",
     "meta": {
      "role": "cup-in",
      "description": "구슬이 컵에 쏙 — 통",
      "duration": 0.161,
      "loop": false,
      "lufs": -22.5,
      "peak": -2.1,
      "channels": 1,
      "origin": [
       "kenney-impact/Audio/impactSoft_medium_001.ogg",
       "kenney-impact/Audio/impactGlass_light_002.ogg",
       "rd-sfx100/plop_01.ogg"
      ],
      "author": "Kenney, rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/100-cc0-sfx"
      ]
     },
     "bytes": 2866,
     "sha256": "7e848c0693a006d7c67d10fd883f3143503c181b05b285055eeb7ccd4daa1d0d"
    },
    {
     "path": "liquid-flow-loop.mp3",
     "meta": {
      "role": "liquid-flow",
      "description": "관을 흐르는 액체 지속음",
      "duration": 4.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 4.1,
      "lufs": -20,
      "peak": -6.1,
      "channels": 1,
      "origin": [
       "rd-water/loop_water_02.ogg"
      ],
      "author": "rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/40-cc0-water-splash-slime-sfx"
      ]
     },
     "bytes": 51140,
     "sha256": "4d9d1e06f8008a702bfd23334a780ef48b7e5422dfa2cba8091b9f0499eedb4b"
    },
    {
     "path": "bubbles-loop.mp3",
     "meta": {
      "role": "bubbles",
      "description": "플라스크 보글보글 지속음",
      "duration": 5.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 5.1,
      "lufs": -21,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "rd-water/loop_bubbles_02.ogg"
      ],
      "author": "rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/40-cc0-water-splash-slime-sfx"
      ]
     },
     "bytes": 63365,
     "sha256": "c8f5b282af0f93c6ac29d83109053950ba32f8b78a2c7d8685ec554a51b75941"
    },
    {
     "path": "fizz.mp3",
     "meta": {
      "role": "fizz",
      "description": "탄산·반응 치이익",
      "duration": 1.2,
      "loop": false,
      "lufs": -20.4,
      "peak": -2.5,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "탄산 지글: 고역 파열음 1800/s(감쇠) + 대역 잡음 4~11kHz, 1.2초",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 15091,
     "sha256": "ea1fed732165a4ac8d410e8cea7fa9c5e6765c1eaa00f2bd70ae91305be10705"
    },
    {
     "path": "balloon-inflate.mp3",
     "meta": {
      "role": "balloon-inflate",
      "description": "풍선 부풀기(2초)",
      "duration": 2.144,
      "loop": false,
      "lufs": -17,
      "peak": -3.8,
      "channels": 1,
      "origin": [
       "balloon-sounds/balloon_inflate.flac"
      ],
      "author": "AntumDeluge (Freesound CC0 sources: d.n.audio.uk, Gniffelbaf)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/balloon-sounds"
      ]
     },
     "bytes": 26689,
     "sha256": "7c5d13cee298e3854ce4767b3f70013eb2dd5d3ebef6857c51e7c8f8ca6f0dd9"
    },
    {
     "path": "glass-clink.mp3",
     "meta": {
      "role": "glass-clink",
      "description": "유리 쨍",
      "duration": 0.356,
      "loop": false,
      "lufs": -20.9,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "rd-sfx100/glass_01.ogg",
       "kenney-ui/Audio/glass_001.ogg"
      ],
      "author": "rubberduck, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/100-cc0-sfx",
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 5060,
     "sha256": "5aba8ddb3968a2da772464694874760067dbb288a6e5320e1e5e3cdbc1e8278d"
    },
    {
     "path": "burner-whoosh.mp3",
     "meta": {
      "role": "burner",
      "description": "버너 점화 — 칙-훅",
      "duration": 0.757,
      "loop": false,
      "lufs": -18,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "tinysized/sfx-cc0/lighter-light-01.wav"
      ],
      "method": "불꽃 훅: 분홍 잡음(로패스 2.5k→600Hz) 0.75초 + 사인 90→50Hz 쿵",
      "author": "Vehicle, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/fantasy-sound-effects-tinysized-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 9762,
     "sha256": "a2e2424963fd0587e3e8e3ce1d2286c2c13623bb3d7c9a1880524f09131558cc"
    },
    {
     "path": "success-chime.mp3",
     "meta": {
      "role": "success",
      "description": "퍼즐 성공 \"유레카\" 스팅어(상행 아르페지오 + 종)",
      "duration": 1.732,
      "loop": false,
      "lufs": -16,
      "peak": -2.2,
      "channels": 1,
      "origin": [
       "synthesized",
       "rd-sfx100/bell_01.ogg",
       "kenney-ui/Audio/glass_004.ogg"
      ],
      "method": "첼레스타풍 아르페지오: 사인 + 4배음(빠른 감쇠) G5 C6 E6 G6 C7, 60ms 간격 + 마지막 화음 + 잔향",
      "author": "rubberduck, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/100-cc0-sfx",
       "https://kenney.nl/assets/interface-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 25278,
     "sha256": "bdcfdb06e9340784fce9c00c7dab07fbb14f77ecfdcdb545b435550159f1109b"
    },
    {
     "path": "hint.mp3",
     "meta": {
      "role": "hint",
      "description": "힌트 — 부드러운 반짝",
      "duration": 0.984,
      "loop": false,
      "lufs": -20,
      "peak": -10.5,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "반짝: 사인 핑 6개(C7 D7 E7 G7 A7 C8 중) 55~75ms 간격, 잔향",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio-eureka.py"
      ]
     },
     "bytes": 12583,
     "sha256": "2c9dc2e5f3f61b705cbbf646b495ba365e8c6f313ffd98d1d217b82dc95f2086"
    }
   ],
   "base": "sfx-lab/1/"
  },
  {
   "id": "sfx-mech",
   "version": 1,
   "kind": "audio",
   "title": "Mech Body SFX",
   "author": "여러 저작자 — 파일별 meta.author (hc, Thimras, Kenney, rubberduck, 0new4y, qubodup (sources: Ferdinger, John Sipos, klankbeeld), qubodup, EZduzziteh, Cough-E, Spring Spring, Kresiek The Furry, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "메크 몸 소리(발소리·착지·서보·유압·점프 제트·부스트·경보·셧다운/재기동·록온·부위 파괴). 모노 mp3, -16 LUFS 안팎·피크 -1.5 dBFS, 앞 무음 없음. 루프는 meta.loopStart/loopEnd(초, 디코딩 기준)로 AudioBufferSourceNode 에 넣는다. CC0 원본(Kenney·qubodup·Thimras·hc 등)을 잘라 겹치고, 마땅한 원본이 없는 성분은 numpy 로 합성했다(meta.method). 합성음과 가공물은 이 저장소가 CC0 로 낸다. 만드는 법: python3 -I tools/audio/build-audio.py sfx-mech",
   "tags": [
    "sfx",
    "mech",
    "robot",
    "servo",
    "hydraulic",
    "footstep",
    "alarm",
    "sci-fi"
   ],
   "files": [
    {
     "path": "footstep-heavy-1.mp3",
     "meta": {
      "role": "footstep",
      "description": "무거운 금속 발 쿵 + 땅 울림",
      "duration": 0.75,
      "loop": false,
      "lufs": -17.2,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "synthesized",
       "mech-stomp/stomp.flac",
       "metal-steps/metal_steps_03.wav",
       "kenney-impact/Audio/impactPlate_heavy_001.ogg",
       "kenney-impact/Audio/footstep_concrete_000.ogg"
      ],
      "method": "저역 쿵: 음정이 떨어지는 사인(54~66→30~35Hz)+포화, 유압 쉬익: 대역 잡음",
      "author": "hc, Thimras, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/mech-stomp-step-sound",
       "https://opengameart.org/content/metal-footsteps-on-concrete",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9762,
     "sha256": "60116e10e7d4f3480e574a5febfbe4f04b6b130442daeef609e2c7c2a8d2ad5a"
    },
    {
     "path": "footstep-heavy-2.mp3",
     "meta": {
      "role": "footstep",
      "description": "무거운 금속 발 쿵 + 땅 울림",
      "duration": 0.75,
      "loop": false,
      "lufs": -17,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "mech-stomp/stomp.flac",
       "metal-steps/metal_steps_10.wav",
       "kenney-impact/Audio/impactPlate_heavy_002.ogg",
       "kenney-impact/Audio/footstep_concrete_001.ogg"
      ],
      "method": "저역 쿵: 음정이 떨어지는 사인(54~66→30~35Hz)+포화, 유압 쉬익: 대역 잡음",
      "author": "hc, Thimras, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/mech-stomp-step-sound",
       "https://opengameart.org/content/metal-footsteps-on-concrete",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9762,
     "sha256": "33b2a1fde58d9d3c05abcd3bd0530abb96cbc8542a98aede38791ee90927e3ed"
    },
    {
     "path": "footstep-heavy-3.mp3",
     "meta": {
      "role": "footstep",
      "description": "무거운 금속 발 쿵 + 땅 울림",
      "duration": 0.75,
      "loop": false,
      "lufs": -17,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "mech-stomp/stomp.flac",
       "metal-steps/metal_steps_17.wav",
       "kenney-impact/Audio/impactPlate_heavy_000.ogg",
       "kenney-impact/Audio/footstep_concrete_002.ogg"
      ],
      "method": "저역 쿵: 음정이 떨어지는 사인(54~66→30~35Hz)+포화, 유압 쉬익: 대역 잡음",
      "author": "hc, Thimras, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/mech-stomp-step-sound",
       "https://opengameart.org/content/metal-footsteps-on-concrete",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9762,
     "sha256": "974decbed0cd114275843dc93ff3b703fcef7dbd1590200286c53c2f5f63218f"
    },
    {
     "path": "footstep-heavy-4.mp3",
     "meta": {
      "role": "footstep",
      "description": "무거운 금속 발 쿵 + 땅 울림",
      "duration": 0.75,
      "loop": false,
      "lufs": -18.1,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "mech-stomp/stomp.flac",
       "metal-steps/metal_steps_22.wav",
       "kenney-impact/Audio/impactPlate_heavy_003.ogg",
       "kenney-impact/Audio/footstep_concrete_003.ogg"
      ],
      "method": "저역 쿵: 음정이 떨어지는 사인(54~66→30~35Hz)+포화, 유압 쉬익: 대역 잡음",
      "author": "hc, Thimras, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/mech-stomp-step-sound",
       "https://opengameart.org/content/metal-footsteps-on-concrete",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9762,
     "sha256": "991e5946d35672b4aeb1a5ac037f96e70dd18eb98018cb7f36b8a2ccba026a34"
    },
    {
     "path": "land-heavy.mp3",
     "meta": {
      "role": "land",
      "description": "점프 후 착지 쿵(유압 압축·부스러기)",
      "duration": 2,
      "loop": false,
      "lufs": -16.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "mech-stomp/stomp.flac",
       "kenney-impact/Audio/impactPlate_heavy_001.ogg",
       "kenney-impact/Audio/impactPlate_heavy_000.ogg",
       "kenney-impact/Audio/impactMining_000.ogg",
       "metal-steps/metal_steps_05.wav",
       "rd-breaking/bfh1_rock_falling_01.ogg",
       "gas-leak/compressed_gas_leak_0.ogg"
      ],
      "method": "착지 쿵: 저역 사인(52→27Hz)+포화, 유압 압축 쉬익·서보 정착음: 합성",
      "author": "hc, Kenney, Thimras, rubberduck, 0new4y, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/mech-stomp-step-sound",
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/metal-footsteps-on-concrete",
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://opengameart.org/content/compressed-gas-leak-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 28935,
     "sha256": "128674f9e26842e6de25a4ef934ae3a5f7ea2eee7f21e776193f2508b8624638"
    },
    {
     "path": "servo-1.mp3",
     "meta": {
      "role": "servo",
      "description": "전기 서보 위잉 + 딸깍",
      "duration": 0.6,
      "loop": false,
      "lufs": -16,
      "peak": -6.4,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-rpg/Audio/metalLatch.ogg"
      ],
      "method": "서보 모터: 톱니파 기본음 180→320Hz + 기어 이빨 잡음",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 7881,
     "sha256": "a69005a73c9034e83a0bbfb5a73eaa60dd760cfa5b3d3421179ae180f04201c4"
    },
    {
     "path": "servo-2.mp3",
     "meta": {
      "role": "servo",
      "description": "유압 피스톤 쉬익 + 쿵",
      "duration": 0.85,
      "loop": false,
      "lufs": -16.1,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "rts-war/aircraftfactory/aircraftfactory.select.wav",
       "kenney-impact/Audio/impactMetal_medium_000.ogg"
      ],
      "method": "유압 피스톤: 낮은 모터 신음(95→70Hz) + 끝 쿵(130→80Hz)",
      "author": "qubodup (sources: Ferdinger, John Sipos, klankbeeld), Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/sci-fi-rts-war-unit-sounds",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 11016,
     "sha256": "4fd6acac5fe48a668f8c09c6233a0757be42f18a8843066b3c30aa328bf4fb3f"
    },
    {
     "path": "servo-3.mp3",
     "meta": {
      "role": "servo",
      "description": "서보 내려감 + 철컥",
      "duration": 0.8,
      "loop": false,
      "lufs": -16,
      "peak": -6.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "metal-interactions/metal_interactions/metal_interaction2.wav"
      ],
      "method": "서보 모터: 톱니파 320→140Hz + 기어 이빨 잡음",
      "author": "qubodup, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/metal-interactions",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 10389,
     "sha256": "e5a00e011742d5c7225873f460e956161d350daf5db1f982f68116386e9b51da"
    },
    {
     "path": "servo-loop.mp3",
     "meta": {
      "role": "servo-loop",
      "description": "상체 회전·팔 조준용 서보 지속음",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -18,
      "peak": -9.9,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "서보 지속음 루프: 주기 맞춘 모터 목소리(150Hz 기본음 + x8 기어 휘파람 + 회전 맞춘 기어 잡음) + 75Hz 웅웅",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 27316,
     "sha256": "169bbea0bc9f36a3312a8137d548fbfd25d41b62a0c48cd141e23a0609477adb"
    },
    {
     "path": "jump-jet-loop.mp3",
     "meta": {
      "role": "jet-loop",
      "description": "점프 제트 추진 지속음",
      "duration": 3.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 3.1,
      "lufs": -17.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-scifi/Audio/thrusterFire_001.ogg",
       "thruster/space_ship_0.ogg"
      ],
      "method": "제트 루프: 원본 스펙트럼의 원형 잡음 + 주기 변조 + 파열음(합성 조합)",
      "author": "Kenney, EZduzziteh, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "https://opengameart.org/content/thruster",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 45758,
     "sha256": "e68f2c50bd5388780cfb13cba0679d4a876e85afb15c041c2be45f1b754c6303"
    },
    {
     "path": "boost-burst.mp3",
     "meta": {
      "role": "boost",
      "description": "부스트 대시 점화 터짐",
      "duration": 1.2,
      "loop": false,
      "lufs": -17.3,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "synthesized",
       "boost/boost_0.mp3",
       "kenney-scifi/Audio/thrusterFire_002.ogg"
      ],
      "method": "부스트 점화: 저역 쿵(90→40Hz) + 로패스가 닫히는 분사 잡음",
      "author": "EZduzziteh, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/boost-or-launch-or-thruster-sound-effect",
       "https://kenney.nl/assets/sci-fi-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 17598,
     "sha256": "5ed09e748a658725fb9d3bfff38eab1d71d3d447353836a1af817fa93e4f45ef"
    },
    {
     "path": "boost-loop.mp3",
     "meta": {
      "role": "boost-loop",
      "description": "부스트 지속음(터빈 휘파람)",
      "duration": 2.7,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.6,
      "lufs": -17.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-scifi/Audio/thrusterFire_004.ogg",
       "kenney-scifi/Audio/thrusterFire_002.ogg"
      ],
      "method": "부스트 루프: 원본 스펙트럼의 원형 잡음 + 터빈음 사인(1.85·3.7kHz) + 주기 변조",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 38810,
     "sha256": "411e8a0973ced851281e4ee4d4baa3f9f56f04168f9f86bb567bd13dbf9738f2"
    },
    {
     "path": "overheat-alarm-loop.mp3",
     "meta": {
      "role": "alarm",
      "description": "과열 경보(두 음 교대 경적)",
      "duration": 1.4,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 1.3,
      "lufs": -18,
      "peak": -13.5,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "과열 경보: 880/659Hz 톱니파 교대 경적, 0.3초씩, 대역 통과 + 약한 포화",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 17599,
     "sha256": "2f2a86f944c0addfb096f712debaa68ebf04fce86907e00dae391178af4a93b2"
    },
    {
     "path": "shutdown.mp3",
     "meta": {
      "role": "power-down",
      "description": "전원 내려감(과열 셧다운)",
      "duration": 2.6,
      "loop": false,
      "lufs": -16,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "machine-off/MachinePowerOff.ogg",
       "kenney-rpg/Audio/metalLatch.ogg",
       "kenney-impact/Audio/impactPlate_heavy_002.ogg"
      ],
      "method": "전원 내려감: 화음 톱니파가 220→28Hz 로 떨어지며 로패스가 닫힘 + 50Hz 험 + 계전기·쉬익",
      "author": "Cough-E, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/machine-shutting-down",
       "https://kenney.nl/assets/rpg-audio",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 32018,
     "sha256": "9f567717c9475500c5183fbfcb6c17a68f1fea6aafd0fbbaed7bd108644a4a55"
    },
    {
     "path": "reboot.mp3",
     "meta": {
      "role": "power-up",
      "description": "재기동(계전기·상승음·확인음)",
      "duration": 2.8,
      "loop": false,
      "lufs": -16,
      "peak": -3.4,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-rpg/Audio/metalLatch.ogg"
      ],
      "method": "재기동: 계전기 + 40→520Hz 상승 톱니파(로패스 열림) + 삐 두 번 + 서보 위잉 + 상승 확인음",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/rpg-audio",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 34526,
     "sha256": "05889f296d79137a4bfa3382b308624fc37c128424a7766f0d74a98b590b5119"
    },
    {
     "path": "lock-beep.mp3",
     "meta": {
      "role": "lock-tracking",
      "description": "록온 중 삐(게임이 간격을 줄이며 반복)",
      "duration": 0.07,
      "loop": false,
      "lufs": -16.5,
      "peak": -9,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "록온 삐: 1760Hz 사각파 0.07초",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 1612,
     "sha256": "538e6b3443ddd81eb7103b4fd1ac10a96ca16efbbdda91696df9fa9f63b7fa2c"
    },
    {
     "path": "lock-tracking-loop.mp3",
     "meta": {
      "role": "lock-tracking",
      "description": "록온 중 삐 루프(초당 2.5번)",
      "duration": 0.6,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 0.5,
      "lufs": -18,
      "peak": -10,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "록온 추적 루프: 1760Hz 사각파 삐 0.06초를 0.4초마다",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 7881,
     "sha256": "1957e469c951fe5672a5aca66145c4997dd3d39e84f0683f6601f53c3d93f397"
    },
    {
     "path": "lock-acquired.mp3",
     "meta": {
      "role": "lock-acquired",
      "description": "록온 완료",
      "duration": 0.66,
      "loop": false,
      "lufs": -18,
      "peak": -16.6,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "록온 완료: 2093Hz 빠른 삐 세 번 + 2637Hz 지속음",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 8822,
     "sha256": "cc8e9326c44285dfa888bb25080bfc7d4cd71ef3c72d6cb5d31e526c7920a081"
    },
    {
     "path": "missile-warning-loop.mp3",
     "meta": {
      "role": "missile-warning",
      "description": "미사일 접근 경보",
      "duration": 1,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 0.9,
      "lufs": -18,
      "peak": -16.4,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "미사일 경보 루프: 2400/1800Hz 사각파 교대 삐, 0.08초 간격",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 12897,
     "sha256": "1736b4d1dd8252466436d2a9ee8b4a4309b7f21b4d51dd8b19188f8ea5f6d448"
    },
    {
     "path": "part-destroyed.mp3",
     "meta": {
      "role": "part-break",
      "description": "부위 파괴(팔 떨어짐: 폭발·스파크·쿵)",
      "duration": 2.4,
      "loop": false,
      "lufs": -16.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-scifi/Audio/explosionCrunch_002.ogg",
       "mech-explosion/mechanical_explosion.wav",
       "rd-breaking/bfh1_metal_falling_02.ogg",
       "kenney-impact/Audio/impactPlate_heavy_001.ogg",
       "gas-leak/compressed_gas_leak_0.ogg"
      ],
      "method": "부위 파괴: 전기 스파크(파열음 + 120Hz 윙윙) + 팔이 떨어지는 저역 쿵(70→35Hz)",
      "author": "Kenney, Spring Spring, rubberduck, 0new4y, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "https://opengameart.org/content/mechanical-explosion",
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/compressed-gas-leak-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 34421,
     "sha256": "ae02ebd528b190d4162e8b6ed6752b309f3ed0f13256cfe924562c87e28dfda5"
    },
    {
     "path": "hull-warning.mp3",
     "meta": {
      "role": "hull-warning",
      "description": "기체 피격 경고음",
      "duration": 0.8,
      "loop": false,
      "lufs": -18,
      "peak": -8.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "radio-noise/radio_noise_loop.wav"
      ],
      "method": "기체 피격 경고: 30Hz 로 떨리는 거친 톱니파 두 음(620→465Hz) 두 번 + 지직",
      "author": "Kresiek The Furry, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/radio-noise-1",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 10389,
     "sha256": "265d07132087619c5f16f426f8a40662fdda2a131a78fcc44d6b27de248985b6"
    }
   ],
   "base": "sfx-mech/1/"
  },
  {
   "id": "sfx-ui",
   "version": 1,
   "kind": "audio",
   "title": "Military UI SFX",
   "author": "여러 저작자 — 파일별 meta.author (Kenney, wobbleboxx, NenadSimic, Kresiek The Furry, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "메뉴·HUD 소리(클릭·포커스·확인·뒤로·오류·해금 징글·임무 완수/실패 스팅어·무전). 모노 mp3. 아주 짧은 소리는 피크 -1.5 dBFS 기준, 나머지는 -16~-18 LUFS. 무전 잡음 루프는 실제 무전기 잡음(8kHz 녹음)이라 대역이 좁다. 합성음·가공물은 CC0. 만드는 법: python3 -I tools/audio/build-audio.py sfx-ui",
   "tags": [
    "sfx",
    "ui",
    "menu",
    "radio",
    "jingle",
    "stinger"
   ],
   "files": [
    {
     "path": "ui-click.mp3",
     "meta": {
      "role": "click",
      "duration": 0.04,
      "loop": false,
      "lufs": -25.6,
      "peak": -2,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/select_001.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 1298,
     "sha256": "d2b83aee6954164ce22399e1f0a30ee363d7dc868b32f9f1df15b7398d7b3d06"
    },
    {
     "path": "ui-focus.mp3",
     "meta": {
      "role": "focus",
      "duration": 0.02,
      "loop": false,
      "lufs": -28.8,
      "peak": -2.7,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/tick_002.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 985,
     "sha256": "4c34a89523447f24afd84a0c966f4476ec22155568be9279b59b0bb9fc876626"
    },
    {
     "path": "ui-confirm.mp3",
     "meta": {
      "role": "confirm",
      "duration": 0.285,
      "loop": false,
      "lufs": -16.4,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/confirmation_001.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 4120,
     "sha256": "3e2c9a83f22e1b9d0952f77d13b34d1fa35f2a589e91b048c64f584ad7ca4b9d"
    },
    {
     "path": "ui-back.mp3",
     "meta": {
      "role": "back",
      "duration": 0.075,
      "loop": false,
      "lufs": -25.6,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/back_002.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 1612,
     "sha256": "5f21563bc04bee5c2f5ffe6c11330edd2802e0e828903830cc156d6e1c536e77"
    },
    {
     "path": "ui-error.mp3",
     "meta": {
      "role": "error",
      "duration": 0.243,
      "loop": false,
      "lufs": -21.9,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/error_006.ogg"
      ],
      "author": "Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds"
      ]
     },
     "bytes": 3806,
     "sha256": "df2879ea4569bb47cc733ca75ce5b986ec7c8384b9aaafa2af74b7a6d0e8a630"
    },
    {
     "path": "ui-unlock.mp3",
     "meta": {
      "role": "unlock",
      "description": "해금·레벨업 징글",
      "duration": 2.4,
      "loop": false,
      "lufs": -18,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "jingles/Upper01.aif"
      ],
      "author": "wobbleboxx",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/level-up-power-up-coin-get-13-sounds"
      ]
     },
     "bytes": 29511,
     "sha256": "c5cf9ace77dba74a4affad622821bbab75fdd1d9b7e0688c588bc213cf661afd"
    },
    {
     "path": "stinger-mission-complete.mp3",
     "meta": {
      "role": "mission-complete",
      "duration": 2.8,
      "loop": false,
      "lufs": -17,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "jingles/Rise05.aif"
      ],
      "author": "wobbleboxx",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/level-up-power-up-coin-get-13-sounds"
      ]
     },
     "bytes": 34526,
     "sha256": "591e39c2f31a28c2796fb93a42b7cef1b3dae6847967ac9b59b794194cfebce3"
    },
    {
     "path": "stinger-mission-failed.mp3",
     "meta": {
      "role": "mission-failed",
      "duration": 2.8,
      "loop": false,
      "lufs": -17.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "jingles/Downer01.aif",
       "distant-explosion/NenadSimic - Muffled Distant Explosion.wav"
      ],
      "method": "하강 저음 드론: 톱니파 110→45Hz(로패스)",
      "author": "wobbleboxx, NenadSimic, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/level-up-power-up-coin-get-13-sounds",
       "https://opengameart.org/content/muffled-distant-explosion",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 34526,
     "sha256": "1d5fe299a7759b20b0223cfd9a4d58d7562dd33822b89252144bbc7babcbd949"
    },
    {
     "path": "radio-beep.mp3",
     "meta": {
      "role": "radio-beep",
      "description": "무전 송신 끝 삐",
      "duration": 0.36,
      "loop": false,
      "lufs": -16.4,
      "peak": -6.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-ui/Audio/click_004.ogg",
       "radio-noise/radio_noise_loop.wav"
      ],
      "method": "무전 삐: 1450Hz 사인 0.12초(무전 대역 필터)",
      "author": "Kenney, Kresiek The Furry, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "https://opengameart.org/content/radio-noise-1",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 5060,
     "sha256": "0d4ec06b74dff8f909ec7be682d4e6c645ea57f2659a84b059366ccaad2803b1"
    },
    {
     "path": "radio-squelch.mp3",
     "meta": {
      "role": "radio-open",
      "description": "무전 열림 딸깍·치익",
      "duration": 0.32,
      "loop": false,
      "lufs": -21.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "kenney-ui/Audio/click_004.ogg",
       "radio-noise/radio_noise_loop.wav"
      ],
      "author": "Kenney, Kresiek The Furry",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/interface-sounds",
       "https://opengameart.org/content/radio-noise-1"
      ]
     },
     "bytes": 4747,
     "sha256": "3f9603fe8a27518626a5fc6d4bb64eb2dfd3611834519c32d8751ee6558f6138"
    },
    {
     "path": "radio-static-loop.mp3",
     "meta": {
      "role": "radio-noise",
      "description": "무전 잡음 루프",
      "duration": 4.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 4.1,
      "lufs": -22,
      "peak": -2.3,
      "channels": 1,
      "origin": [
       "radio-noise/radio_noise_loop.wav"
      ],
      "author": "Kresiek The Furry",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/radio-noise-1"
      ]
     },
     "bytes": 51140,
     "sha256": "b69c44539a73d25f6429ca9210ef593f5b1813b06fb074a9bb6d2e87fb2aab0e"
    }
   ],
   "base": "sfx-ui/1/"
  },
  {
   "id": "sfx-weapons",
   "version": 1,
   "kind": "audio",
   "title": "Mech Weapons SFX",
   "author": "여러 저작자 — 파일별 meta.author (Ben Jaszczak, et al. (submitted by bart), qubodup, Kenney, mikeask, rubberduck, EZduzziteh, Thimras, BMacZero, yd, joth, Spring Spring, GameNow 합성)",
   "license": "CC0-1.0",
   "source": "https://opengameart.org",
   "notes": "메크 무기 소리(오토캐논·펄스 레이저·레일건·산탄포·미사일·로켓·박격포·금속 피격·도탄·폭발 소/중/대·파편). 모노 mp3, -16 LUFS 안팎·피크 -1.5 dBFS. 총성은 The Free Firearm Sound Library(CC0)를 느리게(무겁게) 하고 저역 쿵을 합성해 얹었다. 레일건 충전 루프는 끝없이 올라가는 셰퍼드-리셋 음이라 충전 시간과 상관없이 이어 틀 수 있다. 합성음·가공물은 CC0. 만드는 법: python3 -I tools/audio/build-audio.py sfx-weapons",
   "tags": [
    "sfx",
    "weapon",
    "cannon",
    "laser",
    "railgun",
    "missile",
    "explosion",
    "impact"
   ],
   "files": [
    {
     "path": "autocannon-1.mp3",
     "meta": {
      "role": "autocannon",
      "description": "오토캐논 한 발",
      "duration": 0.8,
      "loop": false,
      "lufs": -19.2,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "firearm-lib/Savage 10 .300 Blackout/T_17P.wav",
       "firearm-lib/AK-47/C_28P.wav",
       "naval-battle/qubodup-NavalBattleSoundSet-cc0/GunShot.wav",
       "kenney-impact/Audio/impactMetal_light_000.ogg"
      ],
      "method": "포구 압력파: 저역 쿵(105~125→44~52Hz)+포화",
      "author": "Ben Jaszczak, et al. (submitted by bart), qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://opengameart.org/content/tiny-naval-battle-sounds-set",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 12113,
     "sha256": "82dfb9dc3f967398c76252b7025de41e3cd4b9207819d76eb0cf81a81150bc38"
    },
    {
     "path": "autocannon-2.mp3",
     "meta": {
      "role": "autocannon",
      "description": "오토캐논 한 발",
      "duration": 0.8,
      "loop": false,
      "lufs": -17.1,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "firearm-lib/Savage 10 .300 Blackout/T_27P.wav",
       "firearm-lib/CD/H_16P.wav",
       "naval-battle/qubodup-NavalBattleSoundSet-cc0/GunShot.wav",
       "kenney-impact/Audio/impactMetal_light_002.ogg"
      ],
      "method": "포구 압력파: 저역 쿵(105~125→44~52Hz)+포화",
      "author": "Ben Jaszczak, et al. (submitted by bart), qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://opengameart.org/content/tiny-naval-battle-sounds-set",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 12113,
     "sha256": "8dd45a05af375609815028c41f55189c5d0b8b4eb404b2514bad49bccd7912d5"
    },
    {
     "path": "autocannon-3.mp3",
     "meta": {
      "role": "autocannon",
      "description": "오토캐논 한 발",
      "duration": 0.8,
      "loop": false,
      "lufs": -17.2,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "synthesized",
       "firearm-lib/CD/H_16P.wav",
       "firearm-lib/Savage 10 .300 Blackout/T_17P.wav",
       "naval-battle/qubodup-NavalBattleSoundSet-cc0/GunShot.wav",
       "kenney-impact/Audio/impactMetal_light_004.ogg"
      ],
      "method": "포구 압력파: 저역 쿵(105~125→44~52Hz)+포화",
      "author": "Ben Jaszczak, et al. (submitted by bart), qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://opengameart.org/content/tiny-naval-battle-sounds-set",
       "https://kenney.nl/assets/impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 12113,
     "sha256": "7b40d2e2b0a5a1e41c6a56049750faedd9b48a3bc85a9d4e392faae530a19c4f"
    },
    {
     "path": "pulse-laser.mp3",
     "meta": {
      "role": "laser",
      "description": "펄스 레이저 한 발",
      "duration": 0.7,
      "loop": false,
      "lufs": -18.4,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-scifi/Audio/laserLarge_001.ogg"
      ],
      "method": "펄스 레이저: 1900→280Hz 로 떨어지는 톱니파(FM 떨림) + 짧은 잡음 머리",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9135,
     "sha256": "96d11c7efe3145ca6b5bbda7f6b0b2a76b5514415f815bf5b4b3ee3fd6c2e4e7"
    },
    {
     "path": "railgun-charge.mp3",
     "meta": {
      "role": "railgun-charge",
      "description": "레일건 충전(1.7초 상승)",
      "duration": 1.695,
      "loop": false,
      "lufs": -16,
      "peak": -3.8,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "레일건 충전: 140Hz→1.6kHz 상승 사인·톱니 + 밀도가 오르는 방전 파열음 + 100Hz 험",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 21047,
     "sha256": "810854ae6ea3036fadce293eb3558a4004a98b8928d93f542a52731690b08c6b"
    },
    {
     "path": "railgun-charge-loop.mp3",
     "meta": {
      "role": "railgun-charge",
      "description": "레일건 충전 유지(끝없이 오르는 루프)",
      "duration": 2.2,
      "loop": true,
      "loopStart": 0.1,
      "loopEnd": 2.1,
      "lufs": -16,
      "peak": -9.2,
      "channels": 1,
      "origin": [
       "synthesized"
      ],
      "method": "레일건 충전 루프: 셰퍼드-리셋 상승음(한 바퀴에 1옥타브) + 원형 방전 파열음 + 100Hz 험",
      "author": "GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 27316,
     "sha256": "1a1d384a2879bdd1e0765f5c019aff17b6328078fc1a4d91741b47647afcad85"
    },
    {
     "path": "railgun-fire.mp3",
     "meta": {
      "role": "railgun",
      "description": "레일건 발사",
      "duration": 2.4,
      "loop": false,
      "lufs": -17.8,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-scifi/Audio/lowFrequency_explosion_001.ogg",
       "kenney-scifi/Audio/laserLarge_002.ogg"
      ],
      "method": "레일건 발사: N파 충격음 + 방전 지직 + 2.4k→180Hz 로 떨어지는 방전 톱니파 + 레일 울림(3.2·4.9kHz) + 저역 쿵(80→30Hz)",
      "author": "Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 39332,
     "sha256": "07e984073c0ec5dbad64bc06595a676b31dee592d930719cddfba9613d532a5f"
    },
    {
     "path": "shotgun.mp3",
     "meta": {
      "role": "shotgun",
      "description": "산탄포 + 장전 철컥",
      "duration": 1.1,
      "loop": false,
      "lufs": -18.3,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "firearm-lib/Mossberg/N_26P.wav",
       "firearm-lib/Nova/O_21P.wav",
       "naval-battle/qubodup-NavalBattleSoundSet-cc0/GunShot.wav",
       "kenney-rpg/Audio/metalLatch.ogg",
       "metal-interactions/metal_interactions/metal_interaction2.wav"
      ],
      "method": "산탄포: 저역 쿵(95→40Hz)+포화",
      "author": "Ben Jaszczak, et al. (submitted by bart), qubodup, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/the-free-firearm-sound-library",
       "https://opengameart.org/content/tiny-naval-battle-sounds-set",
       "https://kenney.nl/assets/rpg-audio",
       "https://opengameart.org/content/metal-interactions",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 16501,
     "sha256": "4d963d764dfc9b0ad3066e4d4e51370ea3268ce960359b21ee7f89fb3d7a40c7"
    },
    {
     "path": "missile-launch.mp3",
     "meta": {
      "role": "missile-launch",
      "description": "유도 미사일 발사",
      "duration": 2.5,
      "loop": false,
      "lufs": -16,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "missile/missile.wav",
       "rd-scifi50/rocket_01.ogg",
       "kenney-scifi/Audio/lowFrequency_explosion_001.ogg"
      ],
      "method": "발사 쿵(120→50Hz)",
      "author": "mikeask, rubberduck, Kenney, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/node/83760",
       "https://opengameart.org/content/50-cc0-sci-fi-sfx",
       "https://kenney.nl/assets/sci-fi-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 35884,
     "sha256": "1896cdd0633911a90b44c6156cae773f0de552a0f1d21929e1f30e2385c2ca14"
    },
    {
     "path": "rocket-launch.mp3",
     "meta": {
      "role": "rocket-launch",
      "description": "로켓 발사",
      "duration": 1.4,
      "loop": false,
      "lufs": -16.1,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "boost/boost_0.mp3",
       "kenney-scifi/Audio/thrusterFire_000.ogg",
       "rd-scifi50/rocket_01.ogg"
      ],
      "method": "로켓 발사: 발사 쿵(110→45Hz) + 멀어지며 로패스가 닫히는 분사음",
      "author": "EZduzziteh, Kenney, rubberduck, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/boost-or-launch-or-thruster-sound-effect",
       "https://kenney.nl/assets/sci-fi-sounds",
       "https://opengameart.org/content/50-cc0-sci-fi-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 20524,
     "sha256": "f6e9eeacd7fd6b62659f05e85126fceeb4c916ead755f9f26cca49cc46a18223"
    },
    {
     "path": "mortar.mp3",
     "meta": {
      "role": "mortar",
      "description": "박격포 '퉁'",
      "duration": 1.6,
      "loop": false,
      "lufs": -18.6,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "rd-bang/bang_03.ogg",
       "battle-at-sea/cannon_fire_1.ogg"
      ],
      "method": "박격포 '퉁': 160→60Hz 쿵 + 240Hz 관 공명 잡음 + 가스 푸슉",
      "author": "rubberduck, Thimras, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/25-cc0-bang-firework-sfx",
       "https://opengameart.org/content/battle-at-sea",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 20107,
     "sha256": "15a0f24eefc4c708afd5a81713a24e97086f3a4b21f04a93d0c1bf349909200f"
    },
    {
     "path": "hit-metal-1.mp3",
     "meta": {
      "role": "hit-metal",
      "description": "장갑 피격",
      "duration": 0.7,
      "loop": false,
      "lufs": -17.9,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-impact/Audio/impactMetal_heavy_000.ogg",
       "metal-impact/thud3.wav",
       "metal-impact/clink2.wav"
      ],
      "method": "탄 맞는 금속 딱(짧은 고역 잡음) + 저역 퉁(180→90Hz)",
      "author": "Kenney, BMacZero, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/metal-impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9135,
     "sha256": "d77935fc625b94dd9f8ace7707b0eaab11529df95c1f8db958a8ebd31e9f3b9b"
    },
    {
     "path": "hit-metal-2.mp3",
     "meta": {
      "role": "hit-metal",
      "description": "장갑 피격(울림)",
      "duration": 0.7,
      "loop": false,
      "lufs": -16.5,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-impact/Audio/impactPlate_heavy_000.ogg",
       "metal-impact/bong1.wav",
       "kenney-impact/Audio/impactMetal_medium_000.ogg"
      ],
      "method": "탄 맞는 금속 딱(짧은 고역 잡음) + 저역 퉁(180→90Hz)",
      "author": "Kenney, BMacZero, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/metal-impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9135,
     "sha256": "54006b7e80351b6b8a710a039224ddb7175160a520be2b0ccd285d8a355cc14e"
    },
    {
     "path": "hit-metal-3.mp3",
     "meta": {
      "role": "hit-metal",
      "description": "장갑 피격",
      "duration": 0.7,
      "loop": false,
      "lufs": -20.4,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-impact/Audio/impactMetal_heavy_002.ogg",
       "metal-impact/thud2.wav",
       "kenney-scifi/Audio/impactMetal_003.ogg"
      ],
      "method": "탄 맞는 금속 딱(짧은 고역 잡음) + 저역 퉁(180→90Hz)",
      "author": "Kenney, BMacZero, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/metal-impact-sounds",
       "https://kenney.nl/assets/sci-fi-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9135,
     "sha256": "40bd92485aa5fe4f5c8a6f29d6b722319cb1d61b3f04763b825bfdb8c4e26229"
    },
    {
     "path": "ricochet.mp3",
     "meta": {
      "role": "ricochet",
      "description": "도탄",
      "duration": 0.749,
      "loop": false,
      "lufs": -17.4,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "metal-impact/clink1_0.wav"
      ],
      "method": "도탄 휘파람: 3.4→1.6kHz 로 내려가는 사인(빠른 떨림) + 바람 잡음",
      "author": "BMacZero, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/metal-impact-sounds",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 9762,
     "sha256": "b3c134b95341b3e024ee876a95b1283497daa33f9d840f989929f9fda543bf46"
    },
    {
     "path": "explosion-small-1.mp3",
     "meta": {
      "role": "explosion-small",
      "duration": 1.5,
      "loop": false,
      "lufs": -16,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "kenney-scifi/Audio/explosionCrunch_000.ogg",
       "war-on-water/Ships/shipexplode.ogg",
       "rd-breaking/bfh1_rock_falling_02.ogg"
      ],
      "author": "Kenney, yd, rubberduck",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "https://opengameart.org/content/war-on-water-sndfx",
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx"
      ]
     },
     "bytes": 21987,
     "sha256": "bd06ec5a43bab3c523abca16f29abc80c02ed5a097d731a0b1ffff1868ec07df"
    },
    {
     "path": "explosion-small-2.mp3",
     "meta": {
      "role": "explosion-small",
      "duration": 1.6,
      "loop": false,
      "lufs": -16.3,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-scifi/Audio/explosionCrunch_002.ogg",
       "explosions/explosion3.ogg"
      ],
      "method": "저역 쿵(90→40Hz)",
      "author": "Kenney, EZduzziteh, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/sci-fi-sounds",
       "https://opengameart.org/content/explosions-4",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 23450,
     "sha256": "9ca5fe896bd4c08ad71e475844fdcd5e27f3bec29773cfee2087da18e5410e99"
    },
    {
     "path": "explosion-medium-1.mp3",
     "meta": {
      "role": "explosion-medium",
      "description": "금속성 폭발",
      "duration": 2.4,
      "loop": false,
      "lufs": -16.1,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "naval-battle/qubodup-NavalBattleSoundSet-cc0/ExplosionMetal.wav",
       "kenney-scifi/Audio/explosionCrunch_001.ogg",
       "kenney-scifi/Audio/lowFrequency_explosion_001.ogg"
      ],
      "author": "qubodup, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/tiny-naval-battle-sounds-set",
       "https://kenney.nl/assets/sci-fi-sounds"
      ]
     },
     "bytes": 39332,
     "sha256": "44a0837c0a7dee789a7d9b63127a842d00e388348f3fefed28813b408d17fe35"
    },
    {
     "path": "explosion-medium-2.mp3",
     "meta": {
      "role": "explosion-medium",
      "description": "폭발 + 무너짐",
      "duration": 2.4,
      "loop": false,
      "lufs": -16.1,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "war-on-water/Pirates/boatexplode.ogg",
       "synth-explosion/synthetic_explosion_1.flac",
       "battle-at-sea/cannon_hit_wall_no_splash.ogg"
      ],
      "author": "yd, qubodup, Thimras",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/war-on-water-sndfx",
       "https://opengameart.org/content/synthesized-explosion",
       "https://opengameart.org/content/battle-at-sea"
      ]
     },
     "bytes": 39332,
     "sha256": "1a5c22aea4093154295733e3eb8f4ecaba4dd2558dfc37acdc1c10125ee4d31e"
    },
    {
     "path": "explosion-large-1.mp3",
     "meta": {
      "role": "explosion-large",
      "duration": 3.8,
      "loop": false,
      "lufs": -16.1,
      "peak": -1.9,
      "channels": 1,
      "origin": [
       "battle-at-sea/cannon_hit_1.ogg",
       "kenney-scifi/Audio/explosionCrunch_004.ogg",
       "kenney-scifi/Audio/lowFrequency_explosion_000.ogg",
       "chunky-explosion/Chunky Explosion.mp3"
      ],
      "author": "Thimras, Kenney, joth",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/battle-at-sea",
       "https://kenney.nl/assets/sci-fi-sounds",
       "https://opengameart.org/content/chunky-explosion"
      ]
     },
     "bytes": 61902,
     "sha256": "038f7a27b8389adf953e3b0987db18ac6908563eb8620b4be31e66355df53748"
    },
    {
     "path": "explosion-large-2.mp3",
     "meta": {
      "role": "explosion-large",
      "description": "폭발 + 금속 쨍그랑",
      "duration": 3.8,
      "loop": false,
      "lufs": -16.8,
      "peak": -1.8,
      "channels": 1,
      "origin": [
       "chunky-explosion/Chunky Explosion.mp3",
       "explosions/explosion3.ogg",
       "mech-explosion/mechanical_explosion.wav",
       "kenney-scifi/Audio/explosionCrunch_003.ogg",
       "kenney-scifi/Audio/lowFrequency_explosion_000.ogg"
      ],
      "author": "joth, EZduzziteh, Spring Spring, Kenney",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/chunky-explosion",
       "https://opengameart.org/content/explosions-4",
       "https://opengameart.org/content/mechanical-explosion",
       "https://kenney.nl/assets/sci-fi-sounds"
      ]
     },
     "bytes": 61902,
     "sha256": "d4463663e1637e11dfeb9db7e623227cba049137e907cbfc337691231929c360"
    },
    {
     "path": "debris-metal.mp3",
     "meta": {
      "role": "debris",
      "description": "금속 파편이 튀며 떨어짐",
      "duration": 1.8,
      "loop": false,
      "lufs": -16.9,
      "peak": -1.6,
      "channels": 1,
      "origin": [
       "synthesized",
       "kenney-impact/Audio/impactMetal_light_000.ogg",
       "kenney-impact/Audio/impactMetal_light_001.ogg",
       "kenney-impact/Audio/impactMetal_light_002.ogg",
       "kenney-impact/Audio/impactMetal_light_003.ogg",
       "kenney-impact/Audio/impactMetal_light_004.ogg",
       "kenney-impact/Audio/impactMetal_medium_001.ogg",
       "kenney-impact/Audio/impactMetal_medium_003.ogg",
       "rd-breaking/bfh1_metal_falling_01.ogg"
      ],
      "method": "금속 파편 흩뿌리기: 가벼운 금속 타격음을 무작위 시각·음높이로 배치(튐 간격이 줄어듦)",
      "author": "Kenney, rubberduck, GameNow (synthesized)",
      "license": "CC0-1.0",
      "source": [
       "https://kenney.nl/assets/impact-sounds",
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "synthesized: gamenow-assets/tools/audio/build-audio.py"
      ]
     },
     "bytes": 22301,
     "sha256": "cd0dfd5dbd6750567fea2660f52ee0bc6dbb6b4266feaed3f40a747176c6fbad"
    },
    {
     "path": "debris-rock.mp3",
     "meta": {
      "role": "debris",
      "description": "흙·돌 부스러기 떨어짐",
      "duration": 1.8,
      "loop": false,
      "lufs": -17.1,
      "peak": -1.7,
      "channels": 1,
      "origin": [
       "rd-breaking/bfh1_rock_falling_01.ogg",
       "rd-sfx100b/sfx100v2_stones_02.ogg",
       "battle-at-sea/cannon_hit_wall_no_splash.ogg",
       "rd-breaking/bfh1_rock_falling_03.ogg"
      ],
      "author": "rubberduck, Thimras",
      "license": "CC0-1.0",
      "source": [
       "https://opengameart.org/content/75-cc0-breaking-falling-hit-sfx",
       "https://opengameart.org/content/100-cc0-sfx-2",
       "https://opengameart.org/content/battle-at-sea"
      ]
     },
     "bytes": 22301,
     "sha256": "75a171a571c504e4b5fb611bd0f3bcc1026efa6a593e5c090a80e948f2022498"
    }
   ],
   "base": "sfx-weapons/1/"
  },
  {
   "id": "skf-aircraft",
   "version": 1,
   "kind": "model",
   "title": "Fighter jets & missiles (Sketchfab, via DOGFIGHT)",
   "author": "dwsd, Usman Zia, andertan, AIRMAN Magazine, NETRUNNER_pl, Savy, rickslash, Mustafa Garip",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com (파일마다 meta.source)",
   "sources": [
    "https://sketchfab.com/3d-models/f-14-tomcat-top-gun-gear-up-downloadable-9d2d0c87539046aa8c2198fcc47cdcf8",
    "https://sketchfab.com/3d-models/f-15-250efd1d8a004228a10737967beddcf5",
    "https://sketchfab.com/3d-models/lockheed-martin-f-16ef-fighting-falcon-d54c72e055a647ad9173e01548e50db3",
    "https://sketchfab.com/3d-models/boeing-fa-18ef-super-hornet-f71e9fea01e24fea9b1b380161d21d38",
    "https://sketchfab.com/3d-models/lockheed-martin-f-22-raptor-7e7b3c372e374dda98e70208d09cfdcf",
    "https://sketchfab.com/3d-models/a-10-thunderbolt-ii-9521ff6ba5d448958ea45a89e94ab23d",
    "https://sketchfab.com/3d-models/mig-21-fishbed-cold-war-era-fighter-free-18927e007c3b47ed9e676f88b4adb578",
    "https://sketchfab.com/3d-models/mig-29-f04c8e99765c4d7e875476998ec5c2f3",
    "https://sketchfab.com/3d-models/mig-31-soviet-interceptor-jet-066545c4eddb49fc923ebe160396af38",
    "https://sketchfab.com/3d-models/sukhoi-su-27-flanker-2541c1dbc6c1499cb7b38b5bf1314750",
    "https://sketchfab.com/3d-models/sukhoi-su-35-flanker-e-35-c98cf9b3b3e04017a04732798a31888a",
    "https://sketchfab.com/3d-models/sukhoi-su-57-felon-09d546b4355c4fa6882ca46e05069bee",
    "https://sketchfab.com/3d-models/aim-9-missile-caaf15b49bac4144b6c6be577c2b872a",
    "https://sketchfab.com/3d-models/aim-54-phoenix-low-poly-0f93756f393d498f95c4364244f8bda0"
   ],
   "notes": "전투기 12종(F-14·F-15·F-16·F/A-18·F-22·A-10·MiG-21·MiG-29·MiG-31·Su-27·Su-35·Su-57)과 미사일 2종(AIM-9·AIM-54). dogfight 의 build-models.mjs 가 규격화: 기수 −Z(주의: 다른 팩은 +Z), 위 +Y, 오른쪽 날개 +X, 원점 = 경계 상자 중심, 실제 전장(m). 전투기는 <id>.lod1.glb(먼 거리용 2~3천 삼각형·64px 텍스처)가 따로 있다. 실제 기종 모양 — 게임 안 이름 표기는 각 게임이 정한다. 원본: Sketchfab(CC Attribution 4.0 — 파일마다 meta.author·source 를 크레딧에 표시). 만드는 법: ../dogfight 에서 node tools/build-models.mjs 한 뒤 node tools/models/dogfight-aircraft.mjs",
   "tags": [
    "aircraft",
    "jet",
    "fighter",
    "missile",
    "military",
    "lod",
    "sketchfab"
   ],
   "files": [
    {
     "path": "f14.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 12540,
      "size": [
       11.66,
       4.54,
       19.1
      ],
      "length": 19.1,
      "forward": "-Z",
      "origin": "center",
      "title": "F-14 Tomcat Top Gun (Gear UP) Downloadable",
      "author": "dwsd",
      "authorUrl": "https://sketchfab.com/dwsd",
      "source": "https://sketchfab.com/3d-models/f-14-tomcat-top-gun-gear-up-downloadable-9d2d0c87539046aa8c2198fcc47cdcf8"
     },
     "bytes": 418000,
     "sha256": "8d130db02682116bb8b48b7cef2cfbbbc484c138c52a22521c3d4ab2c0989a67"
    },
    {
     "path": "f14.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 2180,
      "size": [
       11.63,
       4.53,
       19.08
      ],
      "length": 19.1,
      "forward": "-Z",
      "origin": "center",
      "title": "F-14 Tomcat Top Gun (Gear UP) Downloadable",
      "author": "dwsd",
      "authorUrl": "https://sketchfab.com/dwsd",
      "source": "https://sketchfab.com/3d-models/f-14-tomcat-top-gun-gear-up-downloadable-9d2d0c87539046aa8c2198fcc47cdcf8"
     },
     "bytes": 62292,
     "sha256": "9dc036effd544c3eaf84e769b356dd7e55a8685db698136c4209c89df8ef8392"
    },
    {
     "path": "f15.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 4086,
      "size": [
       12.48,
       7.11,
       19.4
      ],
      "length": 19.4,
      "forward": "-Z",
      "origin": "center",
      "title": "F-15",
      "author": "Usman Zia",
      "authorUrl": "https://sketchfab.com/Uxxman",
      "source": "https://sketchfab.com/3d-models/f-15-250efd1d8a004228a10737967beddcf5"
     },
     "bytes": 303128,
     "sha256": "e311783db1fd1e0870d885080e336a2d35fc05640ab3a8f8bc708095f09d5d25"
    },
    {
     "path": "f15.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 2461,
      "size": [
       12.48,
       7.11,
       19.4
      ],
      "length": 19.4,
      "forward": "-Z",
      "origin": "center",
      "title": "F-15",
      "author": "Usman Zia",
      "authorUrl": "https://sketchfab.com/Uxxman",
      "source": "https://sketchfab.com/3d-models/f-15-250efd1d8a004228a10737967beddcf5"
     },
     "bytes": 66324,
     "sha256": "d9df7f37aaf3a41e780e012d1a3900b923c78eb69b7370e9a5904f5bde8a2d87"
    },
    {
     "path": "f16.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 13230,
      "size": [
       10.51,
       4.38,
       15.1
      ],
      "length": 15.1,
      "forward": "-Z",
      "origin": "center",
      "title": "Lockheed Martin F-16e/f \"Fighting Falcon\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/lockheed-martin-f-16ef-fighting-falcon-d54c72e055a647ad9173e01548e50db3"
     },
     "bytes": 352748,
     "sha256": "7e776962a4e2a6b47baf9f5a263df63ab5935a0fa258a2b09b39268fde227772"
    },
    {
     "path": "f16.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 2368,
      "size": [
       10.51,
       4.27,
       13.99
      ],
      "length": 15.1,
      "forward": "-Z",
      "origin": "center",
      "title": "Lockheed Martin F-16e/f \"Fighting Falcon\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/lockheed-martin-f-16ef-fighting-falcon-d54c72e055a647ad9173e01548e50db3"
     },
     "bytes": 67492,
     "sha256": "f79fe18679a3a3de1196042f3e44cf7f238fa032b7cf09edab12d99a122f6ef8"
    },
    {
     "path": "f18.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 12852,
      "size": [
       13.79,
       3.91,
       18.3
      ],
      "length": 18.3,
      "forward": "-Z",
      "origin": "center",
      "title": "Boeing F/A-18E/F \"Super Hornet\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/boeing-fa-18ef-super-hornet-f71e9fea01e24fea9b1b380161d21d38"
     },
     "bytes": 418812,
     "sha256": "7ca739e57337fa947b3a9ed7c079e219a1916a0bed6332d8970f0eb932650c7e"
    },
    {
     "path": "f18.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 2168,
      "size": [
       13.59,
       3.87,
       18.3
      ],
      "length": 18.3,
      "forward": "-Z",
      "origin": "center",
      "title": "Boeing F/A-18E/F \"Super Hornet\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/boeing-fa-18ef-super-hornet-f71e9fea01e24fea9b1b380161d21d38"
     },
     "bytes": 67192,
     "sha256": "79f6e5cc2fd3991c485c85ce15308453c58dc98914f214063f745b71d182db07"
    },
    {
     "path": "f22.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 10953,
      "size": [
       13.72,
       4.04,
       18.9
      ],
      "length": 18.9,
      "forward": "-Z",
      "origin": "center",
      "title": "Lockheed Martin F-22 \"Raptor\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/lockheed-martin-f-22-raptor-7e7b3c372e374dda98e70208d09cfdcf"
     },
     "bytes": 450260,
     "sha256": "758272bbfdd2d3750e4804a15399ac4b6903eabf81486c12d84f2768cb74c6fd"
    },
    {
     "path": "f22.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 2553,
      "size": [
       13.72,
       4.04,
       18.56
      ],
      "length": 18.9,
      "forward": "-Z",
      "origin": "center",
      "title": "Lockheed Martin F-22 \"Raptor\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/lockheed-martin-f-22-raptor-7e7b3c372e374dda98e70208d09cfdcf"
     },
     "bytes": 78644,
     "sha256": "48b3f15480424e5037e35bfbe9e3b7cfee7500360442b2ffe71a762f73ed480a"
    },
    {
     "path": "a10.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 49785,
      "size": [
       18.03,
       3.57,
       16.3
      ],
      "length": 16.3,
      "forward": "-Z",
      "origin": "center",
      "title": "A-10 Thunderbolt II",
      "author": "AIRMAN Magazine",
      "authorUrl": "https://sketchfab.com/AIRMANMagazine",
      "source": "https://sketchfab.com/3d-models/a-10-thunderbolt-ii-9521ff6ba5d448958ea45a89e94ab23d"
     },
     "bytes": 1761840,
     "sha256": "b1b86455f8fe285c0bfb5dc2ffa343efebf385a2dcc627ae45f44772f0a79bd7"
    },
    {
     "path": "a10.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 3495,
      "size": [
       17.92,
       3.54,
       16.15
      ],
      "length": 16.3,
      "forward": "-Z",
      "origin": "center",
      "title": "A-10 Thunderbolt II",
      "author": "AIRMAN Magazine",
      "authorUrl": "https://sketchfab.com/AIRMANMagazine",
      "source": "https://sketchfab.com/3d-models/a-10-thunderbolt-ii-9521ff6ba5d448958ea45a89e94ab23d"
     },
     "bytes": 99500,
     "sha256": "b286fcebe9c2cb0a624896588dc037bea731060ff0e03ff7f98c42c94336a046"
    },
    {
     "path": "mig21.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 3040,
      "size": [
       6.99,
       3.93,
       14.5
      ],
      "length": 14.5,
      "forward": "-Z",
      "origin": "center",
      "title": "MIG-21 Fishbed - cold war era fighter - free",
      "author": "NETRUNNER_pl",
      "authorUrl": "https://sketchfab.com/NETRUNNER_pl",
      "source": "https://sketchfab.com/3d-models/mig-21-fishbed-cold-war-era-fighter-free-18927e007c3b47ed9e676f88b4adb578"
     },
     "bytes": 155556,
     "sha256": "084f9f76c833720fc6ba12e428746b0c881cb1692c77d62eb4862c6516e405ec"
    },
    {
     "path": "mig21.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 1969,
      "size": [
       6.99,
       3.93,
       14.02
      ],
      "length": 14.5,
      "forward": "-Z",
      "origin": "center",
      "title": "MIG-21 Fishbed - cold war era fighter - free",
      "author": "NETRUNNER_pl",
      "authorUrl": "https://sketchfab.com/NETRUNNER_pl",
      "source": "https://sketchfab.com/3d-models/mig-21-fishbed-cold-war-era-fighter-free-18927e007c3b47ed9e676f88b4adb578"
     },
     "bytes": 51276,
     "sha256": "287850def7450b857e6bb34157ad33815f59bbb992776e7cd3c7c9d0c2d05f64"
    },
    {
     "path": "mig29.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 3261,
      "size": [
       11.32,
       3.86,
       17.3
      ],
      "length": 17.3,
      "forward": "-Z",
      "origin": "center",
      "title": "MiG 29",
      "author": "Usman Zia",
      "authorUrl": "https://sketchfab.com/Uxxman",
      "source": "https://sketchfab.com/3d-models/mig-29-f04c8e99765c4d7e875476998ec5c2f3"
     },
     "bytes": 583708,
     "sha256": "e3aa11f1a85a10a1c85eec0acdda62ffb94ac55173cfc35906e82cfe5bc24625"
    },
    {
     "path": "mig29.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 1943,
      "size": [
       11.32,
       3.86,
       16.19
      ],
      "length": 17.3,
      "forward": "-Z",
      "origin": "center",
      "title": "MiG 29",
      "author": "Usman Zia",
      "authorUrl": "https://sketchfab.com/Uxxman",
      "source": "https://sketchfab.com/3d-models/mig-29-f04c8e99765c4d7e875476998ec5c2f3"
     },
     "bytes": 55216,
     "sha256": "e2a79aa935a3a2de852f0d02724827493c48458933e72c19ee38f022ace6400c"
    },
    {
     "path": "mig31.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 6296,
      "size": [
       13.05,
       4.71,
       22.7
      ],
      "length": 22.7,
      "forward": "-Z",
      "origin": "center",
      "title": "MiG-31 Soviet Interceptor Jet",
      "author": "Savy",
      "authorUrl": "https://sketchfab.com/SavyTheCreator",
      "source": "https://sketchfab.com/3d-models/mig-31-soviet-interceptor-jet-066545c4eddb49fc923ebe160396af38"
     },
     "bytes": 406908,
     "sha256": "80eba03a4f7787e7940eb70ba2cdf5d3aaf9774027fca6d9322a00500ad8a6de"
    },
    {
     "path": "mig31.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 1973,
      "size": [
       12.96,
       4.71,
       22.7
      ],
      "length": 22.7,
      "forward": "-Z",
      "origin": "center",
      "title": "MiG-31 Soviet Interceptor Jet",
      "author": "Savy",
      "authorUrl": "https://sketchfab.com/SavyTheCreator",
      "source": "https://sketchfab.com/3d-models/mig-31-soviet-interceptor-jet-066545c4eddb49fc923ebe160396af38"
     },
     "bytes": 52660,
     "sha256": "34c84102067cb9700f63899de4c6086a8ff431ea444e19129e0e7735f3d44a40"
    },
    {
     "path": "su27.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 11199,
      "size": [
       14.46,
       4.63,
       21.9
      ],
      "length": 21.9,
      "forward": "-Z",
      "origin": "center",
      "title": "Sukhoi Su-27 \"Flanker\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/sukhoi-su-27-flanker-2541c1dbc6c1499cb7b38b5bf1314750"
     },
     "bytes": 283900,
     "sha256": "77367ba103660f112e0cb7cd903b8b351ca1bb6becbd8c76525667b9a03d7b10"
    },
    {
     "path": "su27.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 1929,
      "size": [
       14.46,
       4.63,
       21.39
      ],
      "length": 21.9,
      "forward": "-Z",
      "origin": "center",
      "title": "Sukhoi Su-27 \"Flanker\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/sukhoi-su-27-flanker-2541c1dbc6c1499cb7b38b5bf1314750"
     },
     "bytes": 60904,
     "sha256": "4e6fb376aa75a12876e4499b32cc512d09e8c0d9df67454e6f19584537d84e0d"
    },
    {
     "path": "su35.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 11996,
      "size": [
       15.07,
       4.98,
       21.9
      ],
      "length": 21.9,
      "forward": "-Z",
      "origin": "center",
      "title": "Sukhoi Su-35 Flanker-E (Сухой Су-35)",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/sukhoi-su-35-flanker-e-35-c98cf9b3b3e04017a04732798a31888a"
     },
     "bytes": 577480,
     "sha256": "05a8f452a498e234c50a88328da2211e485cf75972eabbddc8c78fa7664df285"
    },
    {
     "path": "su35.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 2414,
      "size": [
       15.07,
       4.98,
       21.9
      ],
      "length": 21.9,
      "forward": "-Z",
      "origin": "center",
      "title": "Sukhoi Su-35 Flanker-E (Сухой Су-35)",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/sukhoi-su-35-flanker-e-35-c98cf9b3b3e04017a04732798a31888a"
     },
     "bytes": 74184,
     "sha256": "d436f9c934bc17e5388ee466d07c8b4ec88e8ceed18d1e2e370c5c7c0d7fba98"
    },
    {
     "path": "su57.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 0,
      "tris": 16096,
      "size": [
       14.01,
       3.38,
       20.1
      ],
      "length": 20.1,
      "forward": "-Z",
      "origin": "center",
      "title": "Sukhoi Su-57 \"Felon\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/sukhoi-su-57-felon-09d546b4355c4fa6882ca46e05069bee"
     },
     "bytes": 1060440,
     "sha256": "64efe12f7a17e8515210d8bf70f25e27e156de81730d43bea03834f94297fcbc"
    },
    {
     "path": "su57.lod1.glb",
     "meta": {
      "kind": "aircraft",
      "lod": 1,
      "tris": 3021,
      "size": [
       14.01,
       3.34,
       20.1
      ],
      "length": 20.1,
      "forward": "-Z",
      "origin": "center",
      "title": "Sukhoi Su-57 \"Felon\"",
      "author": "andertan",
      "authorUrl": "https://sketchfab.com/andertan",
      "source": "https://sketchfab.com/3d-models/sukhoi-su-57-felon-09d546b4355c4fa6882ca46e05069bee"
     },
     "bytes": 93256,
     "sha256": "01ca9ee804ac35f53e56366b10dfde58fbe505df8f43d227ca7cce6f67ba5b50"
    },
    {
     "path": "aim9.glb",
     "meta": {
      "kind": "missile",
      "lod": 0,
      "tris": 900,
      "size": [
       0.48,
       0.48,
       3
      ],
      "length": 3,
      "forward": "-Z",
      "origin": "center",
      "title": "AIM-9 missile",
      "author": "rickslash",
      "authorUrl": "https://sketchfab.com/rickslash",
      "source": "https://sketchfab.com/3d-models/aim-9-missile-caaf15b49bac4144b6c6be577c2b872a"
     },
     "bytes": 24508,
     "sha256": "12abe2dd40b34aa9176adcbc50511eee07555f9b8a41587b8c9d17fbebceab80"
    },
    {
     "path": "aim54.glb",
     "meta": {
      "kind": "missile",
      "lod": 0,
      "tris": 1198,
      "size": [
       0.66,
       0.66,
       4
      ],
      "length": 4,
      "forward": "-Z",
      "origin": "center",
      "title": "AIM-54 Phoenix (Low Poly)",
      "author": "Mustafa Garip",
      "authorUrl": "https://sketchfab.com/MustafaGarip",
      "source": "https://sketchfab.com/3d-models/aim-54-phoenix-low-poly-0f93756f393d498f95c4364244f8bda0"
     },
     "bytes": 44872,
     "sha256": "90168873651dda1356e007c6061635395712acd8ca0b81e9fd14fc283a55250f"
    }
   ],
   "base": "skf-aircraft/1/"
  },
  {
   "id": "skf-asian-night-towers",
   "version": 1,
   "kind": "model",
   "title": "Asian Themed Low Poly Night City Buildings",
   "author": "99.Miles",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/asian-themed-low-poly-night-city-buildings-9f0343aff4814b758dc6e905aba5b5e0",
   "sources": [
    "https://sketchfab.com/3d-models/asian-themed-low-poly-night-city-buildings-9f0343aff4814b758dc6e905aba5b5e0"
   ],
   "notes": "아시아 야경 고층 건물 23채(창 발광 텍스처 — 밤 지도용). 원본 단위 m, 24~90 m 폭, 55~300 m 높이. 플레어 노드는 뺐다. 높이순 tower-NN. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-asian-night-towers",
   "tags": [
    "city",
    "skyscraper",
    "night",
    "neon",
    "emissive",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "asian-night-towers.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "tower-01",
        "role": "tower",
        "size": [
         61.512,
         300.51,
         46.533
        ],
        "tris": 256
       },
       {
        "node": "tower-02",
        "role": "tower",
        "size": [
         42.791,
         260.205,
         42.831
        ],
        "tris": 337
       },
       {
        "node": "tower-03",
        "role": "tower",
        "size": [
         64.952,
         235.642,
         92.605
        ],
        "tris": 539
       },
       {
        "node": "tower-04",
        "role": "tower",
        "size": [
         56.081,
         192.516,
         52.066
        ],
        "tris": 39
       },
       {
        "node": "tower-05",
        "role": "tower",
        "size": [
         89.903,
         182.361,
         37.701
        ],
        "tris": 1551
       },
       {
        "node": "tower-06",
        "role": "tower",
        "size": [
         44.913,
         180.556,
         44.831
        ],
        "tris": 295
       },
       {
        "node": "tower-07",
        "role": "tower",
        "size": [
         36.565,
         163.252,
         27.396
        ],
        "tris": 182
       },
       {
        "node": "tower-08",
        "role": "tower",
        "size": [
         55.977,
         150.486,
         44.414
        ],
        "tris": 46
       },
       {
        "node": "tower-09",
        "role": "tower",
        "size": [
         38.37,
         132.572,
         38.07
        ],
        "tris": 156
       },
       {
        "node": "tower-10",
        "role": "tower",
        "size": [
         49.718,
         127.869,
         49.709
        ],
        "tris": 10
       },
       {
        "node": "tower-11",
        "role": "tower",
        "size": [
         63.756,
         123.727,
         25.545
        ],
        "tris": 270
       },
       {
        "node": "tower-12",
        "role": "tower",
        "size": [
         42.515,
         103.412,
         51.317
        ],
        "tris": 830
       },
       {
        "node": "tower-13",
        "role": "tower",
        "size": [
         44.646,
         97.416,
         38.049
        ],
        "tris": 236
       },
       {
        "node": "tower-14",
        "role": "tower",
        "size": [
         74.54,
         95,
         25.362
        ],
        "tris": 317
       },
       {
        "node": "tower-15",
        "role": "tower",
        "size": [
         27.233,
         90.072,
         29.569
        ],
        "tris": 110
       },
       {
        "node": "tower-16",
        "role": "tower",
        "size": [
         38.655,
         75.924,
         20.713
        ],
        "tris": 20
       },
       {
        "node": "tower-17",
        "role": "tower",
        "size": [
         80.529,
         71.947,
         25.251
        ],
        "tris": 52
       },
       {
        "node": "tower-18",
        "role": "tower",
        "size": [
         38.011,
         66.33,
         78.04
        ],
        "tris": 258
       },
       {
        "node": "tower-19",
        "role": "tower",
        "size": [
         23.71,
         55.668,
         27.695
        ],
        "tris": 745
       }
      ]
     },
     "bytes": 2966220,
     "sha256": "5dacb35ed6e88695fab2ac3a91509e48b6134b49d68489f1683306e9948ea702"
    }
   ],
   "base": "skf-asian-night-towers/1/"
  },
  {
   "id": "skf-asian-shops",
   "version": 1,
   "kind": "model",
   "title": "Asian Shop Pack (game ready)",
   "author": "abhayexe",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/asian-shop-pack-free-gameready-2f603ad8d5c640f7b9794f6916f9fbdd",
   "sources": [
    "https://sketchfab.com/3d-models/asian-shop-pack-free-gameready-2f603ad8d5c640f7b9794f6916f9fbdd"
   ],
   "notes": "아시아 골목 상점 정면 13칸(간판 발광, 폭 2.4~7.2 m, 높이 3.6 m, 깊이 1.3 m)과 노점 3개. 밤 지도(네온 야시장)용. 원본 3 m 높이를 1.2 배. 정면 +Z(preview 로 확인). 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-asian-shops",
   "tags": [
    "city",
    "shop",
    "asian",
    "neon",
    "market",
    "stall",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "asian-shops.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "shop-01",
        "role": "commercial",
        "size": [
         7.2,
         3.6,
         0.444
        ],
        "tris": 2382
       },
       {
        "node": "shop-02",
        "role": "commercial",
        "size": [
         3.6,
         3.6,
         1.356
        ],
        "tris": 2074
       },
       {
        "node": "shop-03",
        "role": "commercial",
        "size": [
         3.6,
         3.6,
         1.416
        ],
        "tris": 4508
       },
       {
        "node": "shop-04",
        "role": "commercial",
        "size": [
         2.88,
         3.6,
         1.461
        ],
        "tris": 418
       },
       {
        "node": "shop-05",
        "role": "commercial",
        "size": [
         7.2,
         3.6,
         1.32
        ],
        "tris": 3948
       },
       {
        "node": "shop-06",
        "role": "commercial",
        "size": [
         1.907,
         3.6,
         1.321
        ],
        "tris": 2308
       },
       {
        "node": "shop-07",
        "role": "commercial",
        "size": [
         2.562,
         3.6,
         1.321
        ],
        "tris": 2334
       },
       {
        "node": "shop-08",
        "role": "commercial",
        "size": [
         7.2,
         3.6,
         1.55
        ],
        "tris": 5960
       },
       {
        "node": "shop-09",
        "role": "commercial",
        "size": [
         2.88,
         3.6,
         1.461
        ],
        "tris": 418
       },
       {
        "node": "shop-10",
        "role": "commercial",
        "size": [
         2.88,
         3.6,
         1.461
        ],
        "tris": 418
       },
       {
        "node": "shop-11",
        "role": "commercial",
        "size": [
         2.88,
         3.6,
         1.38
        ],
        "tris": 4342
       },
       {
        "node": "shop-12",
        "role": "commercial",
        "size": [
         2.731,
         3.6,
         1.321
        ],
        "tris": 2636
       },
       {
        "node": "shop-13",
        "role": "commercial",
        "size": [
         3.6,
         3.6,
         1.41
        ],
        "tris": 4304
       },
       {
        "node": "stall-1",
        "role": "stall",
        "size": [
         1.979,
         1.325,
         2.218
        ],
        "tris": 224
       },
       {
        "node": "stall-2",
        "role": "stall",
        "size": [
         2.4,
         1.325,
         2.218
        ],
        "tris": 224
       },
       {
        "node": "stall-3",
        "role": "stall",
        "size": [
         3.259,
         1.325,
         2.218
        ],
        "tris": 224
       }
      ]
     },
     "bytes": 5165112,
     "sha256": "e8eb64c67e7702859e5877036b833207dc4d38edee25f82ee9555e4c9b40b0c9"
    }
   ],
   "base": "skf-asian-shops/1/"
  },
  {
   "id": "skf-atlanta-tower",
   "version": 1,
   "kind": "model",
   "title": "Atlanta Corporate Office Building",
   "author": "99.Miles",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/free-atlanta-corperate-office-building-d96380fb001345cca9a9be121f3e43d5",
   "sources": [
    "https://sketchfab.com/3d-models/free-atlanta-corperate-office-building-d96380fb001345cca9a9be121f3e43d5"
   ],
   "notes": "유리 외벽 사무 타워 1채(로비 내부·광고판 발광). 원본 단위 m, 61×212×97 — 필지에는 0.45~0.55 배로. 37k 삼각형이라 지도당 한두 채만. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-atlanta-tower",
   "tags": [
    "city",
    "skyscraper",
    "office",
    "glass",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "atlanta-tower.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "glass-tower",
        "role": "tower",
        "size": [
         60.831,
         211.999,
         96.851
        ],
        "tris": 32881
       }
      ]
     },
     "bytes": 1873208,
     "sha256": "031a7717acc0d1954611d95c6567fcb9d6e9bd83bf400bcbefa1bfc088fbfca5"
    }
   ],
   "base": "skf-atlanta-tower/1/"
  },
  {
   "id": "skf-brownstone-fronts",
   "version": 1,
   "kind": "model",
   "title": "Buildings Front (brownstone facades)",
   "author": "Zambur",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/buildings-front-75876ad5f6bf4a30baa71673c303213d",
   "sources": [
    "https://sketchfab.com/3d-models/buildings-front-75876ad5f6bf4a30baa71673c303213d"
   ],
   "notes": "정면만 있는 브라운스톤 외벽 4장(PBR, 18~28 m 폭, 20~28 m 높이, 2~10 m 깊이). 절차 건물 앞면에 붙이는 용도. 원본은 폭이 z 축이라 90° 돌려 폭을 x 로 맞췄다(정면 +Z — preview 로 확인). 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-brownstone-fronts",
   "tags": [
    "city",
    "facade",
    "brownstone",
    "pbr",
    "sketchfab"
   ],
   "files": [
    {
     "path": "brownstone-fronts.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "front-1",
        "role": "facade",
        "size": [
         18.052,
         27.655,
         1.884
        ],
        "tris": 1930
       },
       {
        "node": "front-2",
        "role": "facade",
        "size": [
         27.84,
         19.813,
         2.855
        ],
        "tris": 2615
       },
       {
        "node": "front-3",
        "role": "facade",
        "size": [
         16.729,
         21.344,
         9.626
        ],
        "tris": 2388
       },
       {
        "node": "front-4",
        "role": "facade",
        "size": [
         17.692,
         25.577,
         3.723
        ],
        "tris": 1388
       }
      ]
     },
     "bytes": 1828168,
     "sha256": "c358a3fda3e947d80e5457d8badebe6716b16ae5edd09190963c89eac733b787"
    }
   ],
   "base": "skf-brownstone-fronts/1/"
  },
  {
   "id": "skf-ccity-set",
   "version": 1,
   "kind": "model",
   "title": "CCity Building Set 1",
   "author": "neberkenezer",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/ccity-building-set-1-a2d5c7bfcc2148fb8994864c43dfcc97",
   "sources": [
    "https://sketchfab.com/3d-models/ccity-building-set-1-a2d5c7bfcc2148fb8994864c43dfcc97"
   ],
   "notes": "범죄 도시 느낌의 저층 상가·주택(극장·주류점·클리닉·빨래방·총포상·전당포·생선 공장·임대 아파트·주택·농구장·가로등·신호등). 원본 cm → 0.01. 18~54 m 폭, 9~32 m 높이. 창 발광 텍스처. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-ccity-set",
   "tags": [
    "city",
    "building",
    "shop",
    "crime",
    "street",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "ccity-set.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "paramount-theater",
        "role": "commercial",
        "size": [
         18.538,
         20.592,
         21.356
        ],
        "tris": 545
       },
       {
        "node": "liquor-store",
        "role": "commercial",
        "size": [
         18.899,
         15.901,
         20.775
        ],
        "tris": 592
       },
       {
        "node": "clinic",
        "role": "commercial",
        "size": [
         37.581,
         19.509,
         18.57
        ],
        "tris": 668
       },
       {
        "node": "laundrette",
        "role": "commercial",
        "size": [
         18,
         9.086,
         18
        ],
        "tris": 498
       },
       {
        "node": "gun-shop",
        "role": "commercial",
        "size": [
         36.208,
         17.489,
         20.187
        ],
        "tris": 494
       },
       {
        "node": "pawn-shop",
        "role": "commercial",
        "size": [
         18,
         15.383,
         18.514
        ],
        "tris": 212
       },
       {
        "node": "fish-factory",
        "role": "industrial",
        "size": [
         54,
         17.762,
         18
        ],
        "tris": 513
       },
       {
        "node": "projects",
        "role": "commercial",
        "size": [
         54,
         31.657,
         18
        ],
        "tris": 305,
        "note": "임대 아파트 54×18×32"
       },
       {
        "node": "housing",
        "role": "house",
        "size": [
         18.523,
         17.489,
         18.596
        ],
        "tris": 506
       },
       {
        "node": "basketball-court",
        "role": "prop",
        "size": [
         18,
         5.177,
         36
        ],
        "tris": 380
       },
       {
        "node": "street-lamp",
        "role": "lamp",
        "size": [
         0.488,
         11.085,
         3.536
        ],
        "tris": 104
       },
       {
        "node": "traffic-light",
        "role": "prop",
        "size": [
         16.233,
         11.085,
         16.233
        ],
        "tris": 1304
       }
      ]
     },
     "bytes": 1280948,
     "sha256": "cf74e65d3bccbd6f4c13553bf457cb8ca7729d616dc5579f64c797d182f8d4b3"
    }
   ],
   "base": "skf-ccity-set/1/"
  },
  {
   "id": "skf-chicago-buildings",
   "version": 1,
   "kind": "model",
   "title": "Realistic Chicago Buildings",
   "author": "99.Miles",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/realistic-chicago-buildings-c4a3993ef1e84e6d9d5a15c78da88aae",
   "sources": [
    "https://sketchfab.com/3d-models/realistic-chicago-buildings-c4a3993ef1e84e6d9d5a15c78da88aae"
   ],
   "notes": "시카고풍 블록 건물 2채(검은 극장 건물 + 전광 마키, 벽돌 사무 건물). 원본 단위 m — 78×71×55, 90×62×53 로 커서 필지(58 m)에 맞추려면 0.6~0.7 배로 줄인다(창이 조금 작아 보여도 괜찮다). 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-chicago-buildings",
   "tags": [
    "city",
    "building",
    "commercial",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "chicago-buildings.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "theater-black",
        "role": "commercial",
        "size": [
         77.811,
         71.377,
         55.157
        ],
        "tris": 9842,
        "note": "검은 극장 건물(전광 마키 전구 포함)"
       },
       {
        "node": "brick-office",
        "role": "commercial",
        "size": [
         89.719,
         62.033,
         52.867
        ],
        "tris": 1565,
        "note": "벽돌 사무 건물"
       }
      ]
     },
     "bytes": 1023884,
     "sha256": "4cd05959de5a5899104e168d24b4ac332295d868da223e21461ffa38b3ae4776"
    }
   ],
   "base": "skf-chicago-buildings/1/"
  },
  {
   "id": "skf-city-props",
   "version": 1,
   "kind": "model",
   "title": "City Props (warehouse, light pole, trash)",
   "author": "Lucas Presoto (LucasPresoto)",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/city-props-4d3a3cc4cb41493f9a584ea3e6c998be",
   "sources": [
    "https://sketchfab.com/3d-models/city-props-4d3a3cc4cb41493f9a584ea3e6c998be"
   ],
   "notes": "창고 건물(15×8×16.5 m, 공업 지구용)·가로등·펜던트 등·쓰레기통·쓰레기봉투·상자·철창·문 달린 벽·벽. 원본 단위 m. 바닥 노드는 뺐다. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-city-props",
   "tags": [
    "city",
    "industrial",
    "warehouse",
    "prop",
    "pbr",
    "sketchfab"
   ],
   "files": [
    {
     "path": "city-props.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "warehouse",
        "role": "industrial",
        "size": [
         15,
         7.852,
         16.496
        ],
        "tris": 4406
       },
       {
        "node": "light-pole",
        "role": "lamp",
        "size": [
         0.375,
         4.8,
         1.978
        ],
        "tris": 2180
       },
       {
        "node": "pendant-light",
        "role": "prop",
        "size": [
         0.959,
         1.035,
         0.965
        ],
        "tris": 1408
       },
       {
        "node": "trash",
        "role": "prop",
        "size": [
         0.618,
         0.858,
         0.535
        ],
        "tris": 1312
       },
       {
        "node": "trash-2",
        "role": "prop",
        "size": [
         2.466,
         1.656,
         1.321
        ],
        "tris": 516
       },
       {
        "node": "trash-bag",
        "role": "prop",
        "size": [
         0.7,
         0.546,
         0.65
        ],
        "tris": 1476
       },
       {
        "node": "box",
        "role": "prop",
        "size": [
         0.491,
         0.491,
         0.491
        ],
        "tris": 180
       },
       {
        "node": "iron-bar",
        "role": "prop",
        "size": [
         1.494,
         0.38,
         0.095
        ],
        "tris": 128
       },
       {
        "node": "door-wall",
        "role": "prop",
        "size": [
         8.05,
         3.816,
         1.32
        ],
        "tris": 1332
       },
       {
        "node": "wall",
        "role": "prop",
        "size": [
         5.118,
         3.816,
         0.2
        ],
        "tris": 12
       }
      ]
     },
     "bytes": 1369892,
     "sha256": "307b3228f6e3e98d01fd80c583c5a83fa363e89fc26089bde4b1811c292d04d7"
    }
   ],
   "base": "skf-city-props/1/"
  },
  {
   "id": "skf-civil-aircraft",
   "version": 1,
   "kind": "model",
   "title": "Civil & trainer aircraft (A320neo, P-51, low-poly F-16) — via flightEarth",
   "author": "dursoalfio, James Jackaman, bohmerang (파일마다 meta.author)",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com · https://opengameart.org (파일마다 meta.source)",
   "sources": [
    "https://sketchfab.com/3d-models/airbus-a320-neo-low-poly-scale-116-193cb2025be2455f83d1c73741c7f2ac",
    "https://sketchfab.com/3d-models/free-fighter-jet-collection-low-poly-cb5966c988d9403895be89b364c2252f",
    "https://opengameart.org/content/p51-mustang"
   ],
   "notes": "여객기 A320neo(37.6 m)·P-51 머스탱(9.8 m, 프로펠러 노드)·저폴리 F-16(15.1 m). flightEarth 가 쓰던 모델을 공용으로. 규격은 skf-aircraft 와 같다: 기수 −Z, 위 +Y, 원점 = 경계 상자 중심(p51 은 원본 무게중심), 실제 전장 m. 노드 이름 유지(랜딩기어·프로펠러·도장 부위). P-51 은 CC-BY-3.0(저자 표기). Cessna 172 는 CC-BY-ND 라 넣지 않았다. 만드는 법: node tools/models/flightearth-aircraft.mjs",
   "tags": [
    "aircraft",
    "airliner",
    "warbird",
    "fighter",
    "propeller",
    "sketchfab",
    "opengameart"
   ],
   "files": [
    {
     "path": "a320.glb",
     "meta": {
      "kind": "aircraft",
      "tris": 49689,
      "size": [
       35.553,
       11.781,
       37.57
      ],
      "length": 37.57,
      "forward": "-Z",
      "origin": "center",
      "scale": 0.871,
      "author": "dursoalfio",
      "authorUrl": "https://sketchfab.com/dursoalfio",
      "source": "https://sketchfab.com/3d-models/airbus-a320-neo-low-poly-scale-116-193cb2025be2455f83d1c73741c7f2ac",
      "license": "CC-BY-4.0",
      "title": "Airbus A320-Neo Low poly [Scale 1:16]",
      "note": "Airbus A320neo 저폴리(텍스처 없음 — 흰색·회색 재질. *_Colorable 메시에 도장색을 칠한다). 랜딩기어 노드 Rear_gears/Front_gear"
     },
     "bytes": 397940,
     "sha256": "1ab4280acc77af2375139614ecbcdb71c75d70f5fae8f29793d365b4198c46b3"
    },
    {
     "path": "f16-lowpoly.glb",
     "meta": {
      "kind": "aircraft",
      "tris": 30244,
      "size": [
       9.373,
       5.169,
       15.06
      ],
      "length": 15.06,
      "forward": "-Z",
      "origin": "center",
      "scale": 0.08,
      "author": "bohmerang",
      "authorUrl": "https://sketchfab.com/bohmerang",
      "source": "https://sketchfab.com/3d-models/free-fighter-jet-collection-low-poly-cb5966c988d9403895be89b364c2252f",
      "license": "CC-BY-4.0",
      "title": "FREE - Fighter Jet Collection - Low Poly (F-16)",
      "note": "F-16 저폴리(Fighter Jet Collection 중 하나, 단일 재질 — 도장은 게임이 칠한다). 랜딩기어 LandingOn/LandingOff, Canopy·Airframe 부위 이름"
     },
     "bytes": 673076,
     "sha256": "d7c47b5dcf98cb8affc5ce0d1fbd9dbf9bafb0cb03c92fe6e46ba7448d8eb8be"
    },
    {
     "path": "p51.glb",
     "meta": {
      "kind": "aircraft",
      "tris": 5139,
      "size": [
       11.323,
       3.064,
       9.83
      ],
      "length": 9.83,
      "forward": "-Z",
      "origin": "cg",
      "scale": 1,
      "author": "James Jackaman",
      "authorUrl": "https://opengameart.org/content/p51-mustang",
      "source": "https://opengameart.org/content/p51-mustang",
      "license": "CC-BY-3.0",
      "title": "P51 Mustang",
      "note": "P-51 머스탱(텍스처 있음, Propeller 노드 — 게임이 돌린다). 원본 m 단위·무게중심 원점 그대로"
     },
     "bytes": 150396,
     "sha256": "d573c1e22da9bbe7980114f2a96bd1954ce5c9180da4f9a16f60d956b006d8bc"
    }
   ],
   "base": "skf-civil-aircraft/1/"
  },
  {
   "id": "skf-downtown-buildings",
   "version": 1,
   "kind": "model",
   "title": "Downtown Buildings Set (Low Poly)",
   "author": "Daniel Zhabotinsky (DanielZhabotinsky)",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/downtown-buildings-set-low-poly-model-7378e7fb9c914c39880d9913a6f4e1d6",
   "sources": [
    "https://sketchfab.com/3d-models/downtown-buildings-set-low-poly-model-7378e7fb9c914c39880d9913a6f4e1d6"
   ],
   "notes": "텍스처가 입혀진 도심 건물 18채(플랫아이언·아르데코·브루탈리즘·현대 오피스·브라운스톤·주택·쇼핑몰·관공서). 원본 단위 m, 10~57 m 폭, 18~102 m 높이. 한 glb 안에 부품 노드(meta.parts). 역할: 높이 50 m 이상 tower, 나머지 commercial. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-downtown-buildings",
   "tags": [
    "city",
    "building",
    "skyscraper",
    "office",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "downtown-buildings.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "brownstone-office-1",
        "role": "commercial",
        "size": [
         52.976,
         24.715,
         19.351
        ],
        "tris": 3086
       },
       {
        "node": "brownstone-office-2",
        "role": "commercial",
        "size": [
         14.724,
         26.247,
         39.828
        ],
        "tris": 3261
       },
       {
        "node": "classic-office-1",
        "role": "commercial",
        "size": [
         38.806,
         44.863,
         31.56
        ],
        "tris": 2758
       },
       {
        "node": "flatiron-1",
        "role": "tower",
        "size": [
         56.532,
         85.886,
         40.586
        ],
        "tris": 15328
       },
       {
        "node": "mall-1",
        "role": "commercial",
        "size": [
         31.668,
         17.737,
         31.588
        ],
        "tris": 1437
       },
       {
        "node": "modern-office-2",
        "role": "commercial",
        "size": [
         10,
         21.243,
         21.447
        ],
        "tris": 825
       },
       {
        "node": "modern-office-3",
        "role": "commercial",
        "size": [
         13.305,
         18.394,
         23.035
        ],
        "tris": 466
       },
       {
        "node": "modern-office-4",
        "role": "tower",
        "size": [
         38.716,
         80.735,
         38.856
        ],
        "tris": 1900
       },
       {
        "node": "modern-office-5",
        "role": "tower",
        "size": [
         35.705,
         102.264,
         35.705
        ],
        "tris": 2080
       },
       {
        "node": "modern-office-5-b",
        "role": "tower",
        "size": [
         35.705,
         55.855,
         35.705
        ],
        "tris": 1376
       },
       {
        "node": "public-building-1",
        "role": "commercial",
        "size": [
         35.184,
         25.777,
         35.184
        ],
        "tris": 838
       },
       {
        "node": "residential-2",
        "role": "commercial",
        "size": [
         31.618,
         29.876,
         31.618
        ],
        "tris": 1369
       },
       {
        "node": "residential-3",
        "role": "commercial",
        "size": [
         36.946,
         27.881,
         36.946
        ],
        "tris": 1682
       },
       {
        "node": "residential-4",
        "role": "commercial",
        "size": [
         36.946,
         27.881,
         36.946
        ],
        "tris": 1698
       },
       {
        "node": "brutal-1",
        "role": "commercial",
        "size": [
         39.225,
         21.885,
         38.692
        ],
        "tris": 3216
       },
       {
        "node": "modern-office-1",
        "role": "commercial",
        "size": [
         26.175,
         37.072,
         23.51
        ],
        "tris": 689
       },
       {
        "node": "modern-office-1-b",
        "role": "tower",
        "size": [
         26.175,
         64.437,
         23.51
        ],
        "tris": 1133
       },
       {
        "node": "art-deco-1",
        "role": "commercial",
        "size": [
         18.022,
         45.072,
         31.35
        ],
        "tris": 2418
       }
      ]
     },
     "bytes": 6319728,
     "sha256": "526c09a4241ac28686aca961f4a490c814defad16f2354bfd6a76565684c61af"
    }
   ],
   "base": "skf-downtown-buildings/1/"
  },
  {
   "id": "skf-guns",
   "version": 1,
   "kind": "model",
   "title": "Sketchfab game-ready guns (silenced pistol, sniper rifles)",
   "author": "matthall (pistol), AlexFinsher (SV-98M), D.Acee (LRX-24)",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/cyberpunk-pistol-with-silencer-free-b08c33f6d67e446fa54ad443e01c7cdd , https://sketchfab.com/3d-models/sv-98m-sniper-rifle-bf79b7f1d4304123823bb345848de80f , https://sketchfab.com/3d-models/lrx-24-tactical-sniper-rifle-game-ready-4k-pbr-286c006a312d46d29bf26374cc441d2c",
   "sources": [
    "https://sketchfab.com/3d-models/cyberpunk-pistol-with-silencer-free-b08c33f6d67e446fa54ad443e01c7cdd",
    "https://sketchfab.com/3d-models/sv-98m-sniper-rifle-bf79b7f1d4304123823bb345848de80f",
    "https://sketchfab.com/3d-models/lrx-24-tactical-sniper-rifle-game-ready-4k-pbr-286c006a312d46d29bf26374cc441d2c"
   ],
   "notes": "소음기 권총(사이버펑크, 0.4 m)·SV-98M 저격총(1.2 m)·LRX-24 저격총(1.06 m). PBR 텍스처. 원점 = 경계 상자 가운데, 총구 +Z(meta.muzzle = 총구 위치 m). 게임은 손목 위치에 두고 몸 방향으로 돌린다. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-guns",
   "tags": [
    "weapon",
    "gun",
    "pistol",
    "sniper",
    "pbr",
    "sketchfab"
   ],
   "files": [
    {
     "path": "pistol-silenced.glb",
     "meta": {
      "role": "pistol",
      "size": [
       0.041,
       0.151,
       0.4
      ],
      "tris": 7478,
      "forward": "+Z",
      "source": "b08c33f6d67e446fa54ad443e01c7cdd",
      "scale": 0.001,
      "muzzle": [
       0,
       0,
       0.2
      ]
     },
     "bytes": 550304,
     "sha256": "e9b491fbf89500bdfc13f860ff66543430f7b2e312dd50629dc3abdcdcac01d2"
    },
    {
     "path": "sniper-sv98.glb",
     "meta": {
      "role": "rifle",
      "size": [
       0.098,
       0.261,
       1.2
      ],
      "tris": 21032,
      "forward": "+Z",
      "source": "bf79b7f1d4304123823bb345848de80f",
      "scale": 0.01,
      "muzzle": [
       0,
       0,
       0.6
      ]
     },
     "bytes": 963204,
     "sha256": "d73893374f531934fa3151177a21ae494e9c987d83c295f59ba8e0fece7f96b8"
    },
    {
     "path": "sniper-lrx24.glb",
     "meta": {
      "role": "rifle",
      "size": [
       0.262,
       0.318,
       1.06
      ],
      "tris": 5341,
      "forward": "+Z",
      "source": "286c006a312d46d29bf26374cc441d2c",
      "scale": 1.002,
      "muzzle": [
       0,
       0,
       0.53
      ]
     },
     "bytes": 360640,
     "sha256": "9c5302a91d72dcbb0d92bd324268f52aa2b844877a5244a1bddefd9719969ea5"
    }
   ],
   "base": "skf-guns/1/"
  },
  {
   "id": "skf-lowpoly-towers",
   "version": 1,
   "kind": "model",
   "title": "Low-poly City Buildings (textured towers)",
   "author": "smooth998",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/low-poly-city-buildings-e0209ac5bb684d2d85e5ade96c92d2ff",
   "sources": [
    "https://sketchfab.com/3d-models/low-poly-city-buildings-e0209ac5bb684d2d85e5ade96c92d2ff"
   ],
   "notes": "맨해튼풍 고층 건물 21채(엠파이어·크라이슬러 느낌 포함), 한 아틀라스. 원본은 작은 디오라마(가장 높은 건물 2.7 단위)라 40배 해 56~107 m 로 맞췄다. 폭 6~21 m 로 좁아 필지 한 칸에 두세 채가 들어간다. 노드 이름이 깨져 있어 높이순 tower-NN 으로 이름 지었다. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-lowpoly-towers",
   "tags": [
    "city",
    "skyscraper",
    "tower",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "lowpoly-towers.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "tower-01",
        "role": "tower",
        "size": [
         21.161,
         107.449,
         18.848
        ],
        "tris": 916
       },
       {
        "node": "tower-02",
        "role": "tower",
        "size": [
         15.022,
         72.003,
         15.022
        ],
        "tris": 476
       },
       {
        "node": "tower-03",
        "role": "tower",
        "size": [
         17.385,
         66.483,
         9.556
        ],
        "tris": 424
       },
       {
        "node": "tower-04",
        "role": "tower",
        "size": [
         18.773,
         58.419,
         9.991
        ],
        "tris": 292
       },
       {
        "node": "tower-05",
        "role": "tower",
        "size": [
         16.012,
         56.943,
         11.552
        ],
        "tris": 444
       },
       {
        "node": "tower-06",
        "role": "tower",
        "size": [
         15.377,
         50.914,
         13.167
        ],
        "tris": 384
       },
       {
        "node": "tower-07",
        "role": "commercial",
        "size": [
         13.121,
         42.395,
         13.121
        ],
        "tris": 176
       },
       {
        "node": "tower-08",
        "role": "commercial",
        "size": [
         17.715,
         36.361,
         9.466
        ],
        "tris": 540
       },
       {
        "node": "tower-09",
        "role": "commercial",
        "size": [
         15.608,
         33.858,
         8.673
        ],
        "tris": 412
       },
       {
        "node": "tower-10",
        "role": "commercial",
        "size": [
         13.917,
         30.437,
         8.823
        ],
        "tris": 238
       },
       {
        "node": "tower-11",
        "role": "commercial",
        "size": [
         7.682,
         29.371,
         12.947
        ],
        "tris": 174
       },
       {
        "node": "tower-12",
        "role": "commercial",
        "size": [
         10.067,
         25.56,
         10.067
        ],
        "tris": 232
       },
       {
        "node": "tower-13",
        "role": "commercial",
        "size": [
         10.067,
         25.56,
         10.067
        ],
        "tris": 232
       },
       {
        "node": "tower-14",
        "role": "commercial",
        "size": [
         9.431,
         19.975,
         14.018
        ],
        "tris": 484
       },
       {
        "node": "tower-15",
        "role": "commercial",
        "size": [
         10.228,
         18.153,
         11.589
        ],
        "tris": 248
       },
       {
        "node": "tower-16",
        "role": "commercial",
        "size": [
         11.589,
         18.153,
         10.228
        ],
        "tris": 248
       },
       {
        "node": "tower-17",
        "role": "commercial",
        "size": [
         9.578,
         15.961,
         5.985
        ],
        "tris": 256
       },
       {
        "node": "tower-18",
        "role": "commercial",
        "size": [
         9.578,
         15.961,
         5.985
        ],
        "tris": 256
       },
       {
        "node": "tower-19",
        "role": "commercial",
        "size": [
         5.79,
         15.11,
         12.251
        ],
        "tris": 216
       },
       {
        "node": "tower-20",
        "role": "commercial",
        "size": [
         9.022,
         8.205,
         9.085
        ],
        "tris": 292
       }
      ]
     },
     "bytes": 941284,
     "sha256": "5aa10acb0d1d0295d02b84cac7803ada43d121e1a784bd40cb9d7cc82721623c"
    }
   ],
   "base": "skf-lowpoly-towers/1/"
  },
  {
   "id": "skf-lowpoly-vehicles",
   "version": 1,
   "kind": "model",
   "title": "Free Low Poly Vehicles Pack",
   "author": "rgsdev",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/free-low-poly-vehicles-pack-cb7640039e7a40679a53be705ebff50e",
   "sources": [
    "https://sketchfab.com/3d-models/free-low-poly-vehicles-pack-cb7640039e7a40679a53be705ebff50e"
   ],
   "notes": "차 21종(세단·해치백·SUV·픽업·밴·택시·스포츠·로드스터·머슬 2종·리무진·경찰 4종·구급차·버스·트럭·트레일러 트럭·소방차·몬스터 트럭). 단색 재질(텍스처 없음), 바퀴 노드 분리(wheel-front-left …, 원점이 바퀴 중심이라 돌릴 수 있다). 원본 단위 m, 앞쪽 +Z 로 맞췄다. 길이 5~14 m. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-lowpoly-vehicles",
   "tags": [
    "vehicle",
    "car",
    "police",
    "bus",
    "truck",
    "low-poly",
    "sketchfab"
   ],
   "files": [
    {
     "path": "sedan.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.011,
       5.233
      ],
      "tris": 1466,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 37964,
     "sha256": "4c5cce70a7ab91012337ffb46b68ec83d1888c53c75d752551cee6b393cde68d"
    },
    {
     "path": "hatchback.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.011,
       5.106
      ],
      "tris": 1378,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 36624,
     "sha256": "182a6c76d62d7fccc15f0bae8669a35e5582e361223678a5be3036f520cd0b2f"
    },
    {
     "path": "suv.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.298,
       5.039
      ],
      "tris": 1748,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 41520,
     "sha256": "5df1f131b544584e9e653cadd8ea6e4169f55f088f51ecb726d543eebe04bde2"
    },
    {
     "path": "pickup.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.211,
       5.039
      ],
      "tris": 1658,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 40228,
     "sha256": "2c5ffc191c60f5da5c06def70dcda50fed4927143f0b2291b51f40c0a1f5dd1e"
    },
    {
     "path": "van.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.711,
       5.906
      ],
      "tris": 1392,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 37284,
     "sha256": "dc4e1ed08cbaa1e23f0209cf40bb7c16e2e435d5c4cf113e3257b2120e615e34"
    },
    {
     "path": "taxi.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.319,
       5.233
      ],
      "tris": 1514,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 38648,
     "sha256": "a44be6883529f0eee80a2208590d055475c2cf4b98c396ad6850a12a4b9c645c"
    },
    {
     "path": "sports.glb",
     "meta": {
      "role": "car",
      "size": [
       2.634,
       1.842,
       5.728
      ],
      "tris": 1378,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 32288,
     "sha256": "957c05531532f63a089db31234f8a94eaee74a5ce66aa988da3b7f0590657886"
    },
    {
     "path": "roadster.glb",
     "meta": {
      "role": "car",
      "size": [
       2.634,
       1.842,
       5.728
      ],
      "tris": 1770,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 39488,
     "sha256": "f5b94e095d040c6655cc1fb6a58cc99d73ae5f8a49a48a74ff31094831b4f7f1"
    },
    {
     "path": "muscle.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       1.911,
       6.055
      ],
      "tris": 1732,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 43464,
     "sha256": "14edfecaaa9e82f8387cf7fa60dc10cd0bfc61c31e6d270043af4b6947af66e8"
    },
    {
     "path": "muscle-2.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       1.911,
       6.055
      ],
      "tris": 1936,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 47172,
     "sha256": "7f6f2c686d7c7150aa5cbc158faf45510319218aa300575df2d8d086cfa5f24b"
    },
    {
     "path": "limousine.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.011,
       10.242
      ],
      "tris": 1674,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 40352,
     "sha256": "78b377863ac6e8b48601708e730cbef1865666d10ada70ddcbc846ef5d4e7977"
    },
    {
     "path": "police-sedan.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.19,
       5.233
      ],
      "tris": 1506,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 39964,
     "sha256": "8a2560c84d8cbb0f7b34ef8c53dfffdaf274a0328e694b62c254af823e046cd9"
    },
    {
     "path": "police-suv.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.264,
       5.039
      ],
      "tris": 1700,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 42624,
     "sha256": "9ace270f0f90bef78e172b2ca8a1bee74bea856aea729fa267e40dfdf7bd2a08"
    },
    {
     "path": "police-muscle.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.089,
       6.055
      ],
      "tris": 1772,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 45288,
     "sha256": "eea6e842563d19fd94a936d5c6628bdeff55bc62b6d884f39cd677fa38a16379"
    },
    {
     "path": "police-sports.glb",
     "meta": {
      "role": "car",
      "size": [
       2.634,
       1.951,
       5.728
      ],
      "tris": 1418,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 34260,
     "sha256": "94f6267c90a3e190d04b6fd168f554623016ef3a22b21104afeb589c14eb9264"
    },
    {
     "path": "ambulance.glb",
     "meta": {
      "role": "car",
      "size": [
       2.814,
       2.849,
       5.906
      ],
      "tris": 1576,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 41300,
     "sha256": "4de446bd2ac2113b93b6ee1d5a21c493139f0962ca9879a153a30b8efafa68f7"
    },
    {
     "path": "bus.glb",
     "meta": {
      "role": "car",
      "size": [
       3.814,
       4.274,
       13.699
      ],
      "tris": 1701,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 37648,
     "sha256": "dd95f214b02321ce4e646dc4f06ca521f25e794a2a7e868ece2aa9a087e048c1"
    },
    {
     "path": "truck.glb",
     "meta": {
      "role": "car",
      "size": [
       3.414,
       3.211,
       5.383
      ],
      "tris": 1498,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 38644,
     "sha256": "7e316276b1d50209ff7daa1fd3e57981f10c2e130cced7c837b7f6051d312c6e"
    },
    {
     "path": "truck-with-trailer.glb",
     "meta": {
      "role": "car",
      "size": [
       3.414,
       4.046,
       13.421
      ],
      "tris": 2066,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 48124,
     "sha256": "782e6f265c92b852ac3ab3f24a2bc9cd56fac46ce09ae133e8496b7efaa985a7"
    },
    {
     "path": "firetruck.glb",
     "meta": {
      "role": "car",
      "size": [
       3.414,
       3.934,
       9.599
      ],
      "tris": 3544,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 72708,
     "sha256": "ed8b17cff7fb10e5f626dbd11e36eccd5c511f2b8e7cf76efe7611c6c014a196"
    },
    {
     "path": "monster-truck.glb",
     "meta": {
      "role": "car",
      "size": [
       4.468,
       3.731,
       5.486
      ],
      "tris": 3588,
      "forward": "+Z",
      "source": "cb7640039e7a40679a53be705ebff50e",
      "scale": 1,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 56964,
     "sha256": "d93deb2caa8bd7cbbed90e5181db4b5777b2872ef091fb93244fb3ac83f57f8c"
    }
   ],
   "base": "skf-lowpoly-vehicles/1/"
  },
  {
   "id": "skf-military-ground",
   "version": 1,
   "kind": "model",
   "title": "Military ground & naval (Sketchfab, via DOGFIGHT)",
   "author": "Mr. The Rich, Muhamad Mirza Arrafi, 42manako",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com (파일마다 meta.source)",
   "sources": [
    "https://sketchfab.com/3d-models/low-poly-t-72-tank-game-ready-8c9d0d6640a244e39082cd9fdf565cef",
    "https://sketchfab.com/3d-models/uralvagonzavod-t-90am-main-battle-tank-619de9f0908e4c8395fe036ffe6e3884",
    "https://sketchfab.com/3d-models/iranian-sevom-khordad-sam-ca18f97aeb6a4aaf992a973d513de306",
    "https://sketchfab.com/3d-models/uss-dwight-deisenhower-cvn-69-aircraft-carrier-f22c344e834f4c3781f676b372a94b2d"
   ],
   "notes": "전차 2(T-72 저폴리·T-90AM)·지대공 미사일 차량(Sevom Khordad)·항공모함(CVN-69, 333 m). 규격은 skf-aircraft 와 같다(앞 −Z, 원점 가운데, 실제 크기 m). 원본: Sketchfab(CC Attribution 4.0 — 파일마다 meta.author·source 를 크레딧에 표시). 만드는 법: ../dogfight 에서 node tools/build-models.mjs 한 뒤 node tools/models/dogfight-aircraft.mjs",
   "tags": [
    "tank",
    "sam",
    "carrier",
    "military",
    "sketchfab"
   ],
   "files": [
    {
     "path": "t72.glb",
     "meta": {
      "kind": "ground",
      "lod": 0,
      "tris": 1488,
      "size": [
       3.33,
       2.02,
       9.5
      ],
      "length": 9.5,
      "forward": "-Z",
      "origin": "center",
      "title": "Low Poly T-72 Tank - Game Ready",
      "author": "Mr. The Rich",
      "authorUrl": "https://sketchfab.com/MrTheRich",
      "source": "https://sketchfab.com/3d-models/low-poly-t-72-tank-game-ready-8c9d0d6640a244e39082cd9fdf565cef"
     },
     "bytes": 216892,
     "sha256": "b8e371206bc338b898f2dc0595107dd54060cce92561f7ec19f44f3205bea9ef"
    },
    {
     "path": "t90.glb",
     "meta": {
      "kind": "ground",
      "lod": 0,
      "tris": 18882,
      "size": [
       3.72,
       2.81,
       9.6
      ],
      "length": 9.6,
      "forward": "-Z",
      "origin": "center",
      "title": "Uralvagonzavod T-90AM Main Battle Tank",
      "author": "Muhamad Mirza Arrafi",
      "authorUrl": "https://sketchfab.com/MirzaArrafiERV_45",
      "source": "https://sketchfab.com/3d-models/uralvagonzavod-t-90am-main-battle-tank-619de9f0908e4c8395fe036ffe6e3884"
     },
     "bytes": 593136,
     "sha256": "bf206feaa5148ee4f4e4c929622a60c2349b01ee6cc9b75d35a3afd01f15f1cc"
    },
    {
     "path": "sam.glb",
     "meta": {
      "kind": "ground",
      "lod": 0,
      "tris": 4004,
      "size": [
       3.33,
       5,
       9
      ],
      "length": 9,
      "forward": "-Z",
      "origin": "center",
      "title": "Iranian Sevom Khordad SAM",
      "author": "42manako",
      "authorUrl": "https://sketchfab.com/42manako",
      "source": "https://sketchfab.com/3d-models/iranian-sevom-khordad-sam-ca18f97aeb6a4aaf992a973d513de306"
     },
     "bytes": 90888,
     "sha256": "2a94f7c6c21fc0ff5ac0ee07dc443cdaf264fa16ace7e77fcfc43110e8c263f2"
    },
    {
     "path": "carrier.glb",
     "meta": {
      "kind": "ground",
      "lod": 0,
      "tris": 7996,
      "size": [
       92.17,
       75.81,
       333
      ],
      "length": 333,
      "forward": "-Z",
      "origin": "center",
      "title": "USS DWIGHT D.EISENHOWER CVN-69 AIRCRAFT CARRIER",
      "author": "Muhamad Mirza Arrafi",
      "authorUrl": "https://sketchfab.com/MirzaArrafiERV_45",
      "source": "https://sketchfab.com/3d-models/uss-dwight-deisenhower-cvn-69-aircraft-carrier-f22c344e834f4c3781f676b372a94b2d"
     },
     "bytes": 231212,
     "sha256": "0ea737a5b57e3d3be6d3e8a69a99a50f0f1aa584e400a327bbacde9959a737d6"
    }
   ],
   "base": "skf-military-ground/1/"
  },
  {
   "id": "skf-pbr-street-props",
   "version": 1,
   "kind": "model",
   "title": "PBR Street Props Pack (Game Ready)",
   "author": "MadeByYeshe",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/pbr-street-props-pack-game-ready-8013d8e6af4645d1a7c3d5b24054bfc8",
   "sources": [
    "https://sketchfab.com/3d-models/pbr-street-props-pack-game-ready-8013d8e6af4645d1a7c3d5b24054bfc8"
   ],
   "notes": "거리 소품(소화전·대형 쓰레기통·가로등 4 m·쓰레기통·콘·벤치·상자·쓰레기봉투·델리네이터·우체통·볼라드 3종·콘크리트 방벽·바퀴 달린 쓰레기통). 원본 단위 m. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-pbr-street-props",
   "tags": [
    "street",
    "prop",
    "bin",
    "bench",
    "lamp",
    "pbr",
    "sketchfab"
   ],
   "files": [
    {
     "path": "pbr-street-props.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "hydrant",
        "role": "prop",
        "size": [
         0.464,
         0.924,
         0.439
        ],
        "tris": 2423
       },
       {
        "node": "dumpster",
        "role": "prop",
        "size": [
         1.335,
         1.334,
         2.125
        ],
        "tris": 2282
       },
       {
        "node": "street-light",
        "role": "lamp",
        "size": [
         2.067,
         4.078,
         0.39
        ],
        "tris": 720
       },
       {
        "node": "trash-can",
        "role": "prop",
        "size": [
         0.609,
         0.916,
         0.609
        ],
        "tris": 576
       },
       {
        "node": "cone",
        "role": "prop",
        "size": [
         0.261,
         0.327,
         0.261
        ],
        "tris": 464
       },
       {
        "node": "cone-tall",
        "role": "prop",
        "size": [
         0.261,
         0.5,
         0.261
        ],
        "tris": 464
       },
       {
        "node": "bench",
        "role": "prop",
        "size": [
         0.632,
         0.915,
         1.36
        ],
        "tris": 464
       },
       {
        "node": "box-1",
        "role": "prop",
        "size": [
         0.4,
         0.4,
         0.4
        ],
        "tris": 84
       },
       {
        "node": "box-2",
        "role": "prop",
        "size": [
         0.4,
         0.4,
         0.575
        ],
        "tris": 324
       },
       {
        "node": "box-3",
        "role": "prop",
        "size": [
         0.494,
         0.494,
         0.67
        ],
        "tris": 152
       },
       {
        "node": "box-4",
        "role": "prop",
        "size": [
         0.494,
         0.494,
         0.94
        ],
        "tris": 152
       },
       {
        "node": "bag-1",
        "role": "prop",
        "size": [
         0.593,
         0.61,
         0.686
        ],
        "tris": 280
       },
       {
        "node": "bag-2",
        "role": "prop",
        "size": [
         0.49,
         0.406,
         0.484
        ],
        "tris": 280
       },
       {
        "node": "bag-3",
        "role": "prop",
        "size": [
         0.604,
         0.544,
         0.559
        ],
        "tris": 280
       },
       {
        "node": "bag-4",
        "role": "prop",
        "size": [
         0.548,
         0.582,
         0.609
        ],
        "tris": 280
       },
       {
        "node": "bag-5",
        "role": "prop",
        "size": [
         0.544,
         0.479,
         0.543
        ],
        "tris": 324
       },
       {
        "node": "bag-6",
        "role": "prop",
        "size": [
         0.562,
         0.499,
         0.531
        ],
        "tris": 324
       },
       {
        "node": "bag-7",
        "role": "prop",
        "size": [
         0.497,
         0.55,
         0.486
        ],
        "tris": 324
       },
       {
        "node": "delineator",
        "role": "prop",
        "size": [
         0.506,
         1.149,
         0.506
        ],
        "tris": 268
       },
       {
        "node": "post-box",
        "role": "prop",
        "size": [
         0.462,
         1.1,
         0.675
        ],
        "tris": 148
       },
       {
        "node": "bollard-cement",
        "role": "prop",
        "size": [
         0.329,
         0.77,
         0.329
        ],
        "tris": 128
       },
       {
        "node": "bollard-yellow",
        "role": "prop",
        "size": [
         0.305,
         0.621,
         0.305
        ],
        "tris": 80
       },
       {
        "node": "bollard-metal",
        "role": "prop",
        "size": [
         0.125,
         0.799,
         0.125
        ],
        "tris": 64
       },
       {
        "node": "concrete-barrier",
        "role": "prop",
        "size": [
         0.426,
         0.796,
         1.9
        ],
        "tris": 156
       },
       {
        "node": "wheelie-bin",
        "role": "prop",
        "size": [
         0.686,
         1.121,
         0.566
        ],
        "tris": 946
       }
      ]
     },
     "bytes": 3671208,
     "sha256": "412c5d8917de33b15818ba3bcc2997d0f6d0e8703df2a1a481b31477213d5dd3"
    }
   ],
   "base": "skf-pbr-street-props/1/"
  },
  {
   "id": "skf-people",
   "version": 1,
   "kind": "model",
   "title": "Mixamo-rigged people & animation clips (Sketchfab)",
   "author": "gbarzu, ustoopia, qsardor57913, jayb3e, Tim0, 00amza, Agor_, NABEEL619, trevBeat, Loves_Art, enzinogenie, Karthiknaidu97",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com (파일마다 meta.source → sources/skf-people.json)",
   "sources": [
    "https://sketchfab.com/3d-models/game-character-girl-rigged-textured-animated-e304748a4d704299bb1c37bb6f8cf40e",
    "https://sketchfab.com/3d-models/police-man-from-the-usa-t-pose-rig-mixamo-c6d330c59f6c41eea41c71e00e39334b",
    "https://sketchfab.com/3d-models/security-guard-rigged-3d-model-1e3307732bbf4453b30f021bfec5bcaf",
    "https://sketchfab.com/3d-models/game-ready-military-character-8cd04f8d8ca94f7fb911fef2d3802f13",
    "https://sketchfab.com/3d-models/character-with-animation-31ea9ee9c82340bc8fd8da2343f9234d",
    "https://sketchfab.com/3d-models/prisoner-hostage-low-poly-character-dae7e2ff73cd4ece8d7655d1f4fcbb1b",
    "https://sketchfab.com/3d-models/bearded-man-low-poly-animated-5718a53d18a142f686b1d9f02a637773",
    "https://sketchfab.com/3d-models/casual-man-rigged-304bad7d4e9b4addacb68c83e1a322cb",
    "https://sketchfab.com/3d-models/business-man-71abfba65139471dabac10ffeb5bf2bb",
    "https://sketchfab.com/3d-models/maxine-woman-model-fbcb44dd96b9431a9debb5ac2dfb13b9",
    "https://sketchfab.com/3d-models/low-poly-female-07eeb124d210402bbc061e543d0b97a1",
    "https://sketchfab.com/3d-models/low-poly-male-7d601a034c1c45e68151bddf386e48b3",
    "https://sketchfab.com/3d-models/basic-human-male-f1775be7b1b94e4ea40d25287585ee69",
    "https://sketchfab.com/3d-models/basic-human-female-e325ae59a6b642f38cf588a4e7138a4a",
    "https://sketchfab.com/3d-models/stylized-low-poly-animated-character-a011a38d65274acf8008939b7d412cb9"
   ],
   "notes": "Mixamo 리그 사람 14명(주인공 후보·경찰·경비·군인·깡패 2·시민 6·정장·기본 2)과 클립 파일 6개(권총·소총 대기/걷기/뛰기/조준, 주먹·발차기, 점프, 죽음, 앉기, 문 열기·훔치기·줍기·버튼, 근접 공격 등 46개). 뼈 이름은 Mixamo 표준(Hips, Spine, Spine1, Spine2, Neck, Head, Left/RightShoulder·Arm·ForeArm·Hand(+손가락), Left/RightUpLeg·Leg·Foot·ToeBase). 아마추어 변환을 Hips·메시에 구워 Hips 트랙 좌표계를 통일(Y 위, m). 키 meta.height, 발바닥 y=0, 앞 +Z. 클립은 아무 캐릭터에나 건다 — 캐릭터에 없는 뼈의 트랙은 걸러 내고, Hips position 은 hipsY 비율로 곱한다. 텍스처 WebP(주인공 768, 나머지 512 — 군중은 게임이 아틀라스로 묶는다), meshopt. 실제 사람 얼굴·경찰 제복 등은 각 게임이 맥락에 맞게 쓴다.",
   "tags": [
    "character",
    "human",
    "animated",
    "skinned",
    "mixamo",
    "shared-rig",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "girl-suit.glb",
     "meta": {
      "role": "hero",
      "height": 1.72,
      "hipsY": 0.957,
      "size": [
       1.609,
       1.72,
       0.424
      ],
      "tris": 23300,
      "bones": 136,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "e304748a4d704299bb1c37bb6f8cf40e",
      "materials": [
       "Boots",
       "Eyebrows",
       "TeethnTognue",
       "HeadHair",
       "MainSuit",
       "GadgetsnMetal",
       "Eyes"
      ],
      "note": "검은 전신 슈트에 파란 발광 선 — 어두운 영웅 주인공 후보. 얼굴 뼈 포함(136)"
     },
     "bytes": 905360,
     "sha256": "2ceac80ce19c8425d220e268c1ddfd8afab6e87dcd87b33bef5cecae22a3541a"
    },
    {
     "path": "police-man.glb",
     "meta": {
      "role": "guard",
      "height": 1.82,
      "hipsY": 0.921,
      "size": [
       1.823,
       1.82,
       0.479
      ],
      "tris": 27998,
      "bones": 29,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "c6d330c59f6c41eea41c71e00e39334b",
      "materials": [
       "facebuilder",
       "PackedMaterial0"
      ],
      "note": "미국 경찰(손가락 뼈 없음 — 29 뼈)"
     },
     "bytes": 432708,
     "sha256": "7d4716909d36681299c9b2d7ebd414abde68a81ed283e2d49394c865339337bc"
    },
    {
     "path": "security-guard.glb",
     "meta": {
      "role": "guard",
      "height": 1.8,
      "hipsY": 1.034,
      "size": [
       1.793,
       1.8,
       0.38
      ],
      "tris": 13235,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "1e3307732bbf4453b30f021bfec5bcaf",
      "materials": [
       "Material",
       "Material.002",
       "Material.001"
      ],
      "note": "회색 제복 경비원"
     },
     "bytes": 230460,
     "sha256": "fd2faeb98d63cd8402380a654005aa9b86bb1612ccac7a7e59c17db28e436b3e"
    },
    {
     "path": "operator.glb",
     "meta": {
      "role": "soldier",
      "height": 1.8,
      "hipsY": 1.016,
      "size": [
       1.151,
       1.8,
       0.519
      ],
      "tris": 23506,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "8cd04f8d8ca94f7fb911fef2d3802f13",
      "materials": [
       "eyebrow009",
       "harvey_pantsbootsv1",
       "knitted_hat_01",
       "low-poly",
       "player_soldier",
       "tactical_vest_male"
      ],
      "note": "전술 조끼·니트 모자 특수부대(원본 67k → 22k로 줄임). 클립 출처(권총·소총 16개)"
     },
     "bytes": 745528,
     "sha256": "fd03d1326e68f58fe454f55cb5f6a09450bfccc21907396b8585472ce64c7bf2"
    },
    {
     "path": "thug-gasmask.glb",
     "meta": {
      "role": "thug",
      "height": 1.8,
      "hipsY": 0.979,
      "size": [
       1.93,
       1.8,
       0.641
      ],
      "tris": 21846,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "31ea9ee9c82340bc8fd8da2343f9234d",
      "materials": [
       "PackedMaterial0",
       "Crowbar"
      ],
      "note": "방독면·문신 깡패(쇠지렛대 재질 Crowbar — 숨길 수 있다)"
     },
     "bytes": 645076,
     "sha256": "3b9babf47c920e38206ebd0f5f8aa5c8e3613b9f9694a38b5f0cba4e2ac45b9b"
    },
    {
     "path": "prisoner.glb",
     "meta": {
      "role": "thug",
      "height": 1.75,
      "hipsY": 1.066,
      "size": [
       1.732,
       1.75,
       0.282
      ],
      "tris": 2283,
      "bones": 58,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "dae7e2ff73cd4ece8d7655d1f4fcbb1b",
      "materials": [
       "PowerPlantA"
      ],
      "note": "주황 죄수복"
     },
     "bytes": 51296,
     "sha256": "0827f165acbddf9ca37a9a979671c69e7b0c93ee6d3f19f8c60340570517c93c"
    },
    {
     "path": "bearded-man.glb",
     "meta": {
      "role": "civilian",
      "height": 1.78,
      "hipsY": 1.023,
      "size": [
       1.903,
       1.78,
       0.412
      ],
      "tris": 3480,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "5718a53d18a142f686b1d9f02a637773",
      "materials": [
       "toon"
      ],
      "note": "수염 난 툰 남자(클립 10개 — 문 열기·훔치기·줍기·버튼)"
     },
     "bytes": 194608,
     "sha256": "3c0e99709ce8f60e2abdda2bd2056984dd7e4c6984a4c3bf35acc0ece95b8fa0"
    },
    {
     "path": "casual-man.glb",
     "meta": {
      "role": "civilian",
      "height": 1.8,
      "hipsY": 0.985,
      "size": [
       1.035,
       1.8,
       0.356
      ],
      "tris": 12296,
      "bones": 68,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "304bad7d4e9b4addacb68c83e1a322cb",
      "materials": [
       "Wolf3D_Eye",
       "Wolf3D_Skin",
       "Wolf3D_Teeth",
       "Wolf3D_Hair",
       "Wolf3D_Glasses",
       "Wolf3D_Body",
       "Wolf3D_Outfit_Bottom",
       "Wolf3D_Outfit_Footwear",
       "Wolf3D_Outfit_Top"
      ],
      "note": "안경 쓴 캐주얼 남자(Ready Player Me 계열)"
     },
     "bytes": 406644,
     "sha256": "9a528130db6e6a61537e1791f0d5f572f9f0c3493338262349608998e150a8d1"
    },
    {
     "path": "business-man.glb",
     "meta": {
      "role": "suit",
      "height": 1.8,
      "hipsY": 0.967,
      "size": [
       1.162,
       1.8,
       0.412
      ],
      "tris": 10304,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "71abfba65139471dabac10ffeb5bf2bb",
      "materials": [
       "mat_0-color_0.276080-0.451760-0.705920.jpg",
       "mat_4-3d8d832342487a9b504a9390f85b8034.jpg",
       "mat_5-9909366ec2d0f533b6bd0ae272c05247.jpg",
       "mat_7-e125804a3ed2512a7ae7de2a997566a3.jpg",
       "mat_1-4a97b06a01d5c40b7485e724eb8a2c79.jpg",
       "mat_2-a77c270d0a036e26dc3c1b82cc351413.jpg",
       "mat_3-c49ce78e35d6f1b9373e2acf080d67ef.jpg",
       "mat_6-f3f1f34c4e286deee3d29d2206345fc5.jpg"
      ],
      "note": "정장 남자"
     },
     "bytes": 253152,
     "sha256": "bd4877a12f1614d7942746462bbc2fb2d8b412318836f80a183c89aa2117715d"
    },
    {
     "path": "woman-maxine.glb",
     "meta": {
      "role": "civilian-f",
      "height": 1.68,
      "hipsY": 0.956,
      "size": [
       1.536,
       1.68,
       0.306
      ],
      "tris": 24024,
      "bones": 68,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "fbcb44dd96b9431a9debb5ac2dfb13b9",
      "materials": [
       "Bodymat",
       "Glovemat",
       "Hairmat",
       "Topmat"
      ],
      "note": "캐주얼 여자(원본 38k → 22k)"
     },
     "bytes": 440816,
     "sha256": "7f944d9267434df4152fc90f947068a4a11378214d0c47d5bda0f2422d81e87d"
    },
    {
     "path": "lowpoly-woman.glb",
     "meta": {
      "role": "civilian-f",
      "height": 1.68,
      "hipsY": 1.015,
      "size": [
       1.26,
       1.68,
       0.279
      ],
      "tris": 4384,
      "bones": 71,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "07eeb124d210402bbc061e543d0b97a1",
      "materials": [
       "hair",
       "eyes",
       "skin",
       "lips"
      ],
      "note": "단색 저폴리 여자(텍스처 없음)"
     },
     "bytes": 117284,
     "sha256": "27143e90eb3e86a7bc6b1eada84d903dfaf422ba290c10283b2ea2616e06fad0"
    },
    {
     "path": "lowpoly-man.glb",
     "meta": {
      "role": "civilian",
      "height": 1.8,
      "hipsY": 1.015,
      "size": [
       1.608,
       1.8,
       0.295
      ],
      "tris": 4090,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "7d601a034c1c45e68151bddf386e48b3",
      "materials": [
       "hair",
       "eyes",
       "skin",
       "lips"
      ],
      "note": "단색 저폴리 남자(텍스처 없음)"
     },
     "bytes": 102452,
     "sha256": "6f63c3552d4b21a64f67d7345c2ff3663d95f7d4fa6bb4a81d97197cb59bdd99"
    },
    {
     "path": "basic-man.glb",
     "meta": {
      "role": "civilian",
      "height": 1.8,
      "hipsY": 1.009,
      "size": [
       1.974,
       1.8,
       0.326
      ],
      "tris": 3170,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "f1775be7b1b94e4ea40d25287585ee69",
      "materials": [
       "male_base"
      ],
      "note": "단색 기본 남자(클립 출처 — 죽음·앉기)"
     },
     "bytes": 55108,
     "sha256": "796da75ca305fd36f431bb3e86056b4cca7c26fb527fcb9acb0cb6e85ad094b8"
    },
    {
     "path": "basic-woman.glb",
     "meta": {
      "role": "civilian-f",
      "height": 1.68,
      "hipsY": 0.95,
      "size": [
       1.657,
       1.68,
       0.303
      ],
      "tris": 3114,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "e325ae59a6b642f38cf588a4e7138a4a",
      "materials": [
       "female_base"
      ],
      "note": "단색 기본 여자(클립 출처)"
     },
     "bytes": 49500,
     "sha256": "0955509100062cd24e723e0c880385d006cb2a850bbaf81a6db789308eb07d43"
    },
    {
     "path": "clips-operator.glb",
     "meta": {
      "clips": [
       {
        "name": "punch",
        "duration": 1.3
       },
       {
        "name": "pistol-idle",
        "duration": 1.367
       },
       {
        "name": "kick",
        "duration": 2.2
       },
       {
        "name": "idle",
        "duration": 2
       },
       {
        "name": "jump-down",
        "duration": 0.7
       },
       {
        "name": "pistol-jump",
        "duration": 0.833
       },
       {
        "name": "pistol-walk",
        "duration": 0.833
       },
       {
        "name": "rifle-idle",
        "duration": 8.6
       },
       {
        "name": "rifle-run",
        "duration": 0.767
       },
       {
        "name": "rifle-walk",
        "duration": 1.467
       },
       {
        "name": "pistol-run",
        "duration": 0.767
       },
       {
        "name": "walk",
        "duration": 1.067
       },
       {
        "name": "jump",
        "duration": 0.867
       },
       {
        "name": "rifle-aim",
        "duration": 3.133
       },
       {
        "name": "run",
        "duration": 0.667
       }
      ],
      "hipsY": 1.016,
      "bones": 66,
      "source": "8cd04f8d8ca94f7fb911fef2d3802f13",
      "rig": "mixamo"
     },
     "bytes": 470460,
     "sha256": "247540ca4432539523f2162f25b3c8bcdd21fae9fbfea5939c90d9ed6fefcbf8"
    },
    {
     "path": "clips-basic-man.glb",
     "meta": {
      "clips": [
       {
        "name": "idle-2",
        "duration": 3.033
       },
       {
        "name": "walk-2",
        "duration": 1.067
       },
       {
        "name": "run-2",
        "duration": 0.733
       },
       {
        "name": "attack",
        "duration": 2.3
       },
       {
        "name": "death",
        "duration": 2.633
       },
       {
        "name": "sit-idle",
        "duration": 10.9
       },
       {
        "name": "stand-up",
        "duration": 6.1
       },
       {
        "name": "sit-down",
        "duration": 6.1
       }
      ],
      "hipsY": 1.009,
      "bones": 66,
      "source": "f1775be7b1b94e4ea40d25287585ee69",
      "rig": "mixamo"
     },
     "bytes": 458232,
     "sha256": "c7efbf9a0a551003ecd9ca30a57ad2408a992f45ae9c4db18e403d2d22b0104b"
    },
    {
     "path": "clips-basic-woman.glb",
     "meta": {
      "clips": [
       {
        "name": "idle-f",
        "duration": 6.033
       },
       {
        "name": "walk-f",
        "duration": 1.4
       },
       {
        "name": "run-f",
        "duration": 0.733
       },
       {
        "name": "death-f",
        "duration": 2.633
       },
       {
        "name": "sit-idle-f",
        "duration": 10.9
       },
       {
        "name": "stand-up-f",
        "duration": 6.1
       },
       {
        "name": "sit-down-f",
        "duration": 6.1
       }
      ],
      "hipsY": 0.95,
      "bones": 66,
      "source": "e325ae59a6b642f38cf588a4e7138a4a",
      "rig": "mixamo"
     },
     "bytes": 423100,
     "sha256": "d9bad6bdb05ef89bb42695626774f9e508c2877cb55f6518a962f59d422c1198"
    },
    {
     "path": "clips-bearded-man.glb",
     "meta": {
      "clips": [
       {
        "name": "walk-3",
        "duration": 1.067
       },
       {
        "name": "run-3",
        "duration": 0.767
       },
       {
        "name": "idle-3",
        "duration": 8.1
       },
       {
        "name": "fight-idle",
        "duration": 3
       },
       {
        "name": "fight",
        "duration": 1.767
       },
       {
        "name": "death-2",
        "duration": 2.833
       },
       {
        "name": "steal",
        "duration": 1.1
       },
       {
        "name": "open-door",
        "duration": 4.133
       },
       {
        "name": "pick-up",
        "duration": 4.867
       },
       {
        "name": "push-button",
        "duration": 2.133
       }
      ],
      "hipsY": 1.023,
      "bones": 66,
      "source": "5718a53d18a142f686b1d9f02a637773",
      "rig": "mixamo"
     },
     "bytes": 588128,
     "sha256": "61b24909c17a542d1315d6936fee994c15dd42e24f030d5795e5802b5b0e8371"
    },
    {
     "path": "clips-thug-gasmask.glb",
     "meta": {
      "clips": [
       {
        "name": "idle-4",
        "duration": 1.833
       },
       {
        "name": "melee-down",
        "duration": 2.267
       },
       {
        "name": "melee-swing",
        "duration": 2.4
       },
       {
        "name": "run-4",
        "duration": 0.733
       }
      ],
      "hipsY": 0.979,
      "bones": 66,
      "source": "31ea9ee9c82340bc8fd8da2343f9234d",
      "rig": "mixamo"
     },
     "bytes": 165184,
     "sha256": "b35cd04701a8217a84feb2408b72568013aadae1955ce71c36422a71952bab82"
    },
    {
     "path": "clips-stylized.glb",
     "meta": {
      "clips": [
       {
        "name": "idle-5",
        "duration": 10
       },
       {
        "name": "jump-2",
        "duration": 1
       },
       {
        "name": "run-5",
        "duration": 0.708
       },
       {
        "name": "walk-4",
        "duration": 1
       }
      ],
      "hipsY": 0.775,
      "bones": 39,
      "source": "a011a38d65274acf8008939b7d412cb9",
      "rig": "mixamo"
     },
     "bytes": 117668,
     "sha256": "00aa76570f1a602574952650c092167bae15434fff68111cec02fd00ec12f9fd"
    }
   ],
   "base": "skf-people/1/"
  },
  {
   "id": "skf-people",
   "version": 2,
   "kind": "model",
   "title": "Mixamo-rigged people & animation clips (Sketchfab)",
   "author": "gbarzu, sanaullahrais, ustoopia, qsardor57913, jayb3e, Tim0, 00amza, Agor_, NABEEL619, trevBeat, Loves_Art, enzinogenie, Karthiknaidu97",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com (파일마다 meta.source → sources/skf-people.json)",
   "sources": [
    "https://sketchfab.com/3d-models/game-character-girl-rigged-textured-animated-e304748a4d704299bb1c37bb6f8cf40e",
    "https://sketchfab.com/3d-models/emma-stylized-adventure-character-790391aec68649dab097e5b83d0351a4",
    "https://sketchfab.com/3d-models/police-man-from-the-usa-t-pose-rig-mixamo-c6d330c59f6c41eea41c71e00e39334b",
    "https://sketchfab.com/3d-models/security-guard-rigged-3d-model-1e3307732bbf4453b30f021bfec5bcaf",
    "https://sketchfab.com/3d-models/game-ready-military-character-8cd04f8d8ca94f7fb911fef2d3802f13",
    "https://sketchfab.com/3d-models/character-with-animation-31ea9ee9c82340bc8fd8da2343f9234d",
    "https://sketchfab.com/3d-models/prisoner-hostage-low-poly-character-dae7e2ff73cd4ece8d7655d1f4fcbb1b",
    "https://sketchfab.com/3d-models/bearded-man-low-poly-animated-5718a53d18a142f686b1d9f02a637773",
    "https://sketchfab.com/3d-models/casual-man-rigged-304bad7d4e9b4addacb68c83e1a322cb",
    "https://sketchfab.com/3d-models/business-man-71abfba65139471dabac10ffeb5bf2bb",
    "https://sketchfab.com/3d-models/maxine-woman-model-fbcb44dd96b9431a9debb5ac2dfb13b9",
    "https://sketchfab.com/3d-models/low-poly-female-07eeb124d210402bbc061e543d0b97a1",
    "https://sketchfab.com/3d-models/low-poly-male-7d601a034c1c45e68151bddf386e48b3",
    "https://sketchfab.com/3d-models/basic-human-male-f1775be7b1b94e4ea40d25287585ee69",
    "https://sketchfab.com/3d-models/basic-human-female-e325ae59a6b642f38cf588a4e7138a4a",
    "https://sketchfab.com/3d-models/stylized-low-poly-animated-character-a011a38d65274acf8008939b7d412cb9"
   ],
   "notes": "Mixamo 리그 사람 15명(주인공 후보 2(girl-suit·emma)·경찰·경비·군인·깡패 2·시민 6·정장·기본 2)과 클립 파일 6개(권총·소총 대기/걷기/뛰기/조준, 주먹·발차기, 점프, 죽음, 앉기, 문 열기·훔치기·줍기·버튼, 근접 공격 등 46개). 뼈 이름은 Mixamo 표준(Hips, Spine, Spine1, Spine2, Neck, Head, Left/RightShoulder·Arm·ForeArm·Hand(+손가락), Left/RightUpLeg·Leg·Foot·ToeBase). 아마추어 변환을 Hips·메시에 구워 Hips 트랙 좌표계를 통일(Y 위, m). 키 meta.height, 발바닥 y=0, 앞 +Z. 클립은 아무 캐릭터에나 건다 — 캐릭터에 없는 뼈의 트랙은 걸러 내고, Hips position 은 hipsY 비율로 곱한다. 텍스처 WebP(주인공 768, 나머지 512 — 군중은 게임이 아틀라스로 묶는다), meshopt. 실제 사람 얼굴·경찰 제복 등은 각 게임이 맥락에 맞게 쓴다.",
   "tags": [
    "character",
    "human",
    "animated",
    "skinned",
    "mixamo",
    "shared-rig",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "girl-suit.glb",
     "meta": {
      "role": "hero",
      "height": 1.72,
      "hipsY": 0.957,
      "size": [
       1.609,
       1.72,
       0.424
      ],
      "tris": 23300,
      "bones": 136,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "e304748a4d704299bb1c37bb6f8cf40e",
      "materials": [
       "Boots",
       "Eyebrows",
       "TeethnTognue",
       "HeadHair",
       "MainSuit",
       "GadgetsnMetal",
       "Eyes"
      ],
      "note": "검은 전신 슈트에 파란 발광 선 — 어두운 영웅 주인공 후보. 얼굴 뼈 포함(136)"
     },
     "bytes": 905360,
     "sha256": "2ceac80ce19c8425d220e268c1ddfd8afab6e87dcd87b33bef5cecae22a3541a"
    },
    {
     "path": "emma.glb",
     "meta": {
      "role": "hero",
      "height": 1.68,
      "hipsY": 0.993,
      "size": [
       0.885,
       1.68,
       0.303
      ],
      "tris": 15494,
      "bones": 68,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "790391aec68649dab097e5b83d0351a4",
      "materials": [
       "Wolf3D_Eye",
       "Wolf3D_Skin",
       "Wolf3D_Teeth",
       "Wolf3D_Hair",
       "Wolf3D_Body",
       "Wolf3D_Outfit_Bottom",
       "Wolf3D_Outfit_Footwear",
       "Wolf3D_Outfit_Top"
      ],
      "note": "갈색 머리·가죽 재킷·붉은 바지의 모험가 여성(Ready Player Me 계열, Mixamo 뼈) — 2판 추가 주인공 후보. 재질 Wolf3D_Outfit_Top/Bottom/Footwear 색을 곱해 어둡게 칠할 수 있다"
     },
     "bytes": 645264,
     "sha256": "a07d1bbaa3671ff6da4509cfe56f303231a36789bcae20b6246111e038918d42"
    },
    {
     "path": "police-man.glb",
     "meta": {
      "role": "guard",
      "height": 1.82,
      "hipsY": 0.921,
      "size": [
       1.823,
       1.82,
       0.479
      ],
      "tris": 27998,
      "bones": 29,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "c6d330c59f6c41eea41c71e00e39334b",
      "materials": [
       "facebuilder",
       "PackedMaterial0"
      ],
      "note": "미국 경찰(손가락 뼈 없음 — 29 뼈)"
     },
     "bytes": 432708,
     "sha256": "7d4716909d36681299c9b2d7ebd414abde68a81ed283e2d49394c865339337bc"
    },
    {
     "path": "security-guard.glb",
     "meta": {
      "role": "guard",
      "height": 1.8,
      "hipsY": 1.034,
      "size": [
       1.793,
       1.8,
       0.38
      ],
      "tris": 13235,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "1e3307732bbf4453b30f021bfec5bcaf",
      "materials": [
       "Material",
       "Material.002",
       "Material.001"
      ],
      "note": "회색 제복 경비원"
     },
     "bytes": 230460,
     "sha256": "fd2faeb98d63cd8402380a654005aa9b86bb1612ccac7a7e59c17db28e436b3e"
    },
    {
     "path": "operator.glb",
     "meta": {
      "role": "soldier",
      "height": 1.8,
      "hipsY": 1.016,
      "size": [
       1.151,
       1.8,
       0.519
      ],
      "tris": 23506,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "8cd04f8d8ca94f7fb911fef2d3802f13",
      "materials": [
       "eyebrow009",
       "harvey_pantsbootsv1",
       "knitted_hat_01",
       "low-poly",
       "player_soldier",
       "tactical_vest_male"
      ],
      "note": "전술 조끼·니트 모자 특수부대(원본 67k → 22k로 줄임). 클립 출처(권총·소총 16개)"
     },
     "bytes": 745528,
     "sha256": "fd03d1326e68f58fe454f55cb5f6a09450bfccc21907396b8585472ce64c7bf2"
    },
    {
     "path": "thug-gasmask.glb",
     "meta": {
      "role": "thug",
      "height": 1.8,
      "hipsY": 0.979,
      "size": [
       1.93,
       1.8,
       0.641
      ],
      "tris": 21846,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "31ea9ee9c82340bc8fd8da2343f9234d",
      "materials": [
       "PackedMaterial0",
       "Crowbar"
      ],
      "note": "방독면·문신 깡패(쇠지렛대 재질 Crowbar — 숨길 수 있다)"
     },
     "bytes": 645076,
     "sha256": "3b9babf47c920e38206ebd0f5f8aa5c8e3613b9f9694a38b5f0cba4e2ac45b9b"
    },
    {
     "path": "prisoner.glb",
     "meta": {
      "role": "thug",
      "height": 1.75,
      "hipsY": 1.066,
      "size": [
       1.732,
       1.75,
       0.282
      ],
      "tris": 2283,
      "bones": 58,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "dae7e2ff73cd4ece8d7655d1f4fcbb1b",
      "materials": [
       "PowerPlantA"
      ],
      "note": "주황 죄수복"
     },
     "bytes": 51296,
     "sha256": "0827f165acbddf9ca37a9a979671c69e7b0c93ee6d3f19f8c60340570517c93c"
    },
    {
     "path": "bearded-man.glb",
     "meta": {
      "role": "civilian",
      "height": 1.78,
      "hipsY": 1.023,
      "size": [
       1.903,
       1.78,
       0.412
      ],
      "tris": 3480,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "5718a53d18a142f686b1d9f02a637773",
      "materials": [
       "toon"
      ],
      "note": "수염 난 툰 남자(클립 10개 — 문 열기·훔치기·줍기·버튼)"
     },
     "bytes": 194608,
     "sha256": "3c0e99709ce8f60e2abdda2bd2056984dd7e4c6984a4c3bf35acc0ece95b8fa0"
    },
    {
     "path": "casual-man.glb",
     "meta": {
      "role": "civilian",
      "height": 1.8,
      "hipsY": 0.985,
      "size": [
       1.035,
       1.8,
       0.356
      ],
      "tris": 12296,
      "bones": 68,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "304bad7d4e9b4addacb68c83e1a322cb",
      "materials": [
       "Wolf3D_Eye",
       "Wolf3D_Skin",
       "Wolf3D_Teeth",
       "Wolf3D_Hair",
       "Wolf3D_Glasses",
       "Wolf3D_Body",
       "Wolf3D_Outfit_Bottom",
       "Wolf3D_Outfit_Footwear",
       "Wolf3D_Outfit_Top"
      ],
      "note": "안경 쓴 캐주얼 남자(Ready Player Me 계열)"
     },
     "bytes": 406644,
     "sha256": "9a528130db6e6a61537e1791f0d5f572f9f0c3493338262349608998e150a8d1"
    },
    {
     "path": "business-man.glb",
     "meta": {
      "role": "suit",
      "height": 1.8,
      "hipsY": 0.967,
      "size": [
       1.162,
       1.8,
       0.412
      ],
      "tris": 10304,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "71abfba65139471dabac10ffeb5bf2bb",
      "materials": [
       "mat_0-color_0.276080-0.451760-0.705920.jpg",
       "mat_4-3d8d832342487a9b504a9390f85b8034.jpg",
       "mat_5-9909366ec2d0f533b6bd0ae272c05247.jpg",
       "mat_7-e125804a3ed2512a7ae7de2a997566a3.jpg",
       "mat_1-4a97b06a01d5c40b7485e724eb8a2c79.jpg",
       "mat_2-a77c270d0a036e26dc3c1b82cc351413.jpg",
       "mat_3-c49ce78e35d6f1b9373e2acf080d67ef.jpg",
       "mat_6-f3f1f34c4e286deee3d29d2206345fc5.jpg"
      ],
      "note": "정장 남자"
     },
     "bytes": 253152,
     "sha256": "bd4877a12f1614d7942746462bbc2fb2d8b412318836f80a183c89aa2117715d"
    },
    {
     "path": "woman-maxine.glb",
     "meta": {
      "role": "civilian-f",
      "height": 1.68,
      "hipsY": 0.956,
      "size": [
       1.536,
       1.68,
       0.306
      ],
      "tris": 24024,
      "bones": 68,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "fbcb44dd96b9431a9debb5ac2dfb13b9",
      "materials": [
       "Bodymat",
       "Glovemat",
       "Hairmat",
       "Topmat"
      ],
      "note": "캐주얼 여자(원본 38k → 22k)"
     },
     "bytes": 440816,
     "sha256": "7f944d9267434df4152fc90f947068a4a11378214d0c47d5bda0f2422d81e87d"
    },
    {
     "path": "lowpoly-woman.glb",
     "meta": {
      "role": "civilian-f",
      "height": 1.68,
      "hipsY": 1.015,
      "size": [
       1.26,
       1.68,
       0.279
      ],
      "tris": 4384,
      "bones": 71,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "07eeb124d210402bbc061e543d0b97a1",
      "materials": [
       "hair",
       "eyes",
       "skin",
       "lips"
      ],
      "note": "단색 저폴리 여자(텍스처 없음)"
     },
     "bytes": 117284,
     "sha256": "27143e90eb3e86a7bc6b1eada84d903dfaf422ba290c10283b2ea2616e06fad0"
    },
    {
     "path": "lowpoly-man.glb",
     "meta": {
      "role": "civilian",
      "height": 1.8,
      "hipsY": 1.015,
      "size": [
       1.608,
       1.8,
       0.295
      ],
      "tris": 4090,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "7d601a034c1c45e68151bddf386e48b3",
      "materials": [
       "hair",
       "eyes",
       "skin",
       "lips"
      ],
      "note": "단색 저폴리 남자(텍스처 없음)"
     },
     "bytes": 102452,
     "sha256": "6f63c3552d4b21a64f67d7345c2ff3663d95f7d4fa6bb4a81d97197cb59bdd99"
    },
    {
     "path": "basic-man.glb",
     "meta": {
      "role": "civilian",
      "height": 1.8,
      "hipsY": 1.009,
      "size": [
       1.974,
       1.8,
       0.326
      ],
      "tris": 3170,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "f1775be7b1b94e4ea40d25287585ee69",
      "materials": [
       "male_base"
      ],
      "note": "단색 기본 남자(클립 출처 — 죽음·앉기)"
     },
     "bytes": 55108,
     "sha256": "796da75ca305fd36f431bb3e86056b4cca7c26fb527fcb9acb0cb6e85ad094b8"
    },
    {
     "path": "basic-woman.glb",
     "meta": {
      "role": "civilian-f",
      "height": 1.68,
      "hipsY": 0.95,
      "size": [
       1.657,
       1.68,
       0.303
      ],
      "tris": 3114,
      "bones": 66,
      "fingers": true,
      "hand": "RightHand",
      "forward": "+Z",
      "origin": "floor-center",
      "source": "e325ae59a6b642f38cf588a4e7138a4a",
      "materials": [
       "female_base"
      ],
      "note": "단색 기본 여자(클립 출처)"
     },
     "bytes": 49500,
     "sha256": "0955509100062cd24e723e0c880385d006cb2a850bbaf81a6db789308eb07d43"
    },
    {
     "path": "clips-operator.glb",
     "meta": {
      "clips": [
       {
        "name": "punch",
        "duration": 1.3
       },
       {
        "name": "pistol-idle",
        "duration": 1.367
       },
       {
        "name": "kick",
        "duration": 2.2
       },
       {
        "name": "idle",
        "duration": 2
       },
       {
        "name": "jump-down",
        "duration": 0.7
       },
       {
        "name": "pistol-jump",
        "duration": 0.833
       },
       {
        "name": "pistol-walk",
        "duration": 0.833
       },
       {
        "name": "rifle-idle",
        "duration": 8.6
       },
       {
        "name": "rifle-run",
        "duration": 0.767
       },
       {
        "name": "rifle-walk",
        "duration": 1.467
       },
       {
        "name": "pistol-run",
        "duration": 0.767
       },
       {
        "name": "walk",
        "duration": 1.067
       },
       {
        "name": "jump",
        "duration": 0.867
       },
       {
        "name": "rifle-aim",
        "duration": 3.133
       },
       {
        "name": "run",
        "duration": 0.667
       }
      ],
      "hipsY": 1.016,
      "bones": 66,
      "source": "8cd04f8d8ca94f7fb911fef2d3802f13",
      "rig": "mixamo"
     },
     "bytes": 470460,
     "sha256": "247540ca4432539523f2162f25b3c8bcdd21fae9fbfea5939c90d9ed6fefcbf8"
    },
    {
     "path": "clips-basic-man.glb",
     "meta": {
      "clips": [
       {
        "name": "idle-2",
        "duration": 3.033
       },
       {
        "name": "walk-2",
        "duration": 1.067
       },
       {
        "name": "run-2",
        "duration": 0.733
       },
       {
        "name": "attack",
        "duration": 2.3
       },
       {
        "name": "death",
        "duration": 2.633
       },
       {
        "name": "sit-idle",
        "duration": 10.9
       },
       {
        "name": "stand-up",
        "duration": 6.1
       },
       {
        "name": "sit-down",
        "duration": 6.1
       }
      ],
      "hipsY": 1.009,
      "bones": 66,
      "source": "f1775be7b1b94e4ea40d25287585ee69",
      "rig": "mixamo"
     },
     "bytes": 458232,
     "sha256": "c7efbf9a0a551003ecd9ca30a57ad2408a992f45ae9c4db18e403d2d22b0104b"
    },
    {
     "path": "clips-basic-woman.glb",
     "meta": {
      "clips": [
       {
        "name": "idle-f",
        "duration": 6.033
       },
       {
        "name": "walk-f",
        "duration": 1.4
       },
       {
        "name": "run-f",
        "duration": 0.733
       },
       {
        "name": "death-f",
        "duration": 2.633
       },
       {
        "name": "sit-idle-f",
        "duration": 10.9
       },
       {
        "name": "stand-up-f",
        "duration": 6.1
       },
       {
        "name": "sit-down-f",
        "duration": 6.1
       }
      ],
      "hipsY": 0.95,
      "bones": 66,
      "source": "e325ae59a6b642f38cf588a4e7138a4a",
      "rig": "mixamo"
     },
     "bytes": 423100,
     "sha256": "d9bad6bdb05ef89bb42695626774f9e508c2877cb55f6518a962f59d422c1198"
    },
    {
     "path": "clips-bearded-man.glb",
     "meta": {
      "clips": [
       {
        "name": "walk-3",
        "duration": 1.067
       },
       {
        "name": "run-3",
        "duration": 0.767
       },
       {
        "name": "idle-3",
        "duration": 8.1
       },
       {
        "name": "fight-idle",
        "duration": 3
       },
       {
        "name": "fight",
        "duration": 1.767
       },
       {
        "name": "death-2",
        "duration": 2.833
       },
       {
        "name": "steal",
        "duration": 1.1
       },
       {
        "name": "open-door",
        "duration": 4.133
       },
       {
        "name": "pick-up",
        "duration": 4.867
       },
       {
        "name": "push-button",
        "duration": 2.133
       }
      ],
      "hipsY": 1.023,
      "bones": 66,
      "source": "5718a53d18a142f686b1d9f02a637773",
      "rig": "mixamo"
     },
     "bytes": 588128,
     "sha256": "61b24909c17a542d1315d6936fee994c15dd42e24f030d5795e5802b5b0e8371"
    },
    {
     "path": "clips-thug-gasmask.glb",
     "meta": {
      "clips": [
       {
        "name": "idle-4",
        "duration": 1.833
       },
       {
        "name": "melee-down",
        "duration": 2.267
       },
       {
        "name": "melee-swing",
        "duration": 2.4
       },
       {
        "name": "run-4",
        "duration": 0.733
       }
      ],
      "hipsY": 0.979,
      "bones": 66,
      "source": "31ea9ee9c82340bc8fd8da2343f9234d",
      "rig": "mixamo"
     },
     "bytes": 165184,
     "sha256": "b35cd04701a8217a84feb2408b72568013aadae1955ce71c36422a71952bab82"
    },
    {
     "path": "clips-stylized.glb",
     "meta": {
      "clips": [
       {
        "name": "idle-5",
        "duration": 10
       },
       {
        "name": "jump-2",
        "duration": 1
       },
       {
        "name": "run-5",
        "duration": 0.708
       },
       {
        "name": "walk-4",
        "duration": 1
       }
      ],
      "hipsY": 0.775,
      "bones": 39,
      "source": "a011a38d65274acf8008939b7d412cb9",
      "rig": "mixamo"
     },
     "bytes": 117668,
     "sha256": "00aa76570f1a602574952650c092167bae15434fff68111cec02fd00ec12f9fd"
    }
   ],
   "base": "skf-people/2/"
  },
  {
   "id": "skf-slowpoly-cars",
   "version": 1,
   "kind": "model",
   "title": "slowpoly textured cars (BMW E46, Tesla Model S, Lancer Evo)",
   "author": "slowpoly",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/bmw-e46-1998-ecc42a37c7e2409b9fd05665512843ce , https://sketchfab.com/3d-models/tesla-model-s-plaid-2023-aec912ed367b4aebacc8676922f42beb , https://sketchfab.com/3d-models/mitsubishi-lancer-evolution-1997-7558ef08987d4a22bd317ac1fae12c1f",
   "sources": [
    "https://sketchfab.com/3d-models/bmw-e46-1998-ecc42a37c7e2409b9fd05665512843ce",
    "https://sketchfab.com/3d-models/tesla-model-s-plaid-2023-aec912ed367b4aebacc8676922f42beb",
    "https://sketchfab.com/3d-models/mitsubishi-lancer-evolution-1997-7558ef08987d4a22bd317ac1fae12c1f"
   ],
   "notes": "텍스처를 구운 1.4~1.5k 삼각형 승용차 3대(BMW E46 1998, Tesla Model S Plaid 2023, Mitsubishi Lancer Evolution 1997). 메시 하나(바퀴 안 돎) — 주차·배경 차량용. 실제 길이(m)에 맞췄고 길이 축을 z 로, 앞쪽 +Z 로 돌렸다(preview 로 확인). 실제 차 모양이라 상표 주의 — 게임 안 이름은 쓰지 않는다. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-slowpoly-cars",
   "tags": [
    "vehicle",
    "car",
    "sedan",
    "textured",
    "low-poly",
    "sketchfab"
   ],
   "files": [
    {
     "path": "sedan-e46.glb",
     "meta": {
      "role": "car-static",
      "size": [
       1.936,
       1.407,
       4.47
      ],
      "tris": 1420,
      "forward": "+Z",
      "source": "ecc42a37c7e2409b9fd05665512843ce",
      "scale": 0.015,
      "origin": "floor-center"
     },
     "bytes": 77712,
     "sha256": "16d7361132d85dbed9684709917f37fa9f0d2d610eeb95adfe82ec86a4df2db9"
    },
    {
     "path": "sedan-tesla.glb",
     "meta": {
      "role": "car-static",
      "size": [
       2.189,
       1.423,
       4.97
      ],
      "tris": 1500,
      "forward": "+Z",
      "source": "aec912ed367b4aebacc8676922f42beb",
      "scale": 0.021,
      "origin": "floor-center"
     },
     "bytes": 88300,
     "sha256": "317b517418ed859bd9b7b2a399b810f3cfeb75700cd50fc8b30cf71c5618f239"
    },
    {
     "path": "sedan-evo.glb",
     "meta": {
      "role": "car-static",
      "size": [
       1.93,
       1.409,
       4.3
      ],
      "tris": 1372,
      "forward": "+Z",
      "source": "7558ef08987d4a22bd317ac1fae12c1f",
      "scale": 0.01,
      "origin": "floor-center"
     },
     "bytes": 84412,
     "sha256": "cc1dff031ae96b780dbffaa32de1026f7ae42e5281ee41de530fd7e3b8ddbbad"
    }
   ],
   "base": "skf-slowpoly-cars/1/"
  },
  {
   "id": "skf-street-props",
   "version": 1,
   "kind": "model",
   "title": "Street Asset Pack",
   "author": "vmatthew",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/street-asset-pack-f3eb47d02e2e4ab290e66752fa354b48",
   "sources": [
    "https://sketchfab.com/3d-models/street-asset-pack-f3eb47d02e2e4ab290e66752fa354b48"
   ],
   "notes": "거리 소품(철제 바리케이드·콘크리트 방벽·빨간 방벽·콘·쓰레기통·드럼통·쓰레기봉투·상자·표지판 4종·볼라드). 원본이 실물의 약 2.4 배라 0.42 배(콘 0.7 m, 정지 표지 2.5 m). 소화전(9.7k 삼각형)·병·컵은 뺐다. 작은 소품이라 텍스처 512(부품 19개가 각자 PBR 4장을 가져 1024 면 11MB). 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-street-props",
   "tags": [
    "street",
    "prop",
    "barrier",
    "sign",
    "cone",
    "pbr",
    "sketchfab"
   ],
   "files": [
    {
     "path": "street-props.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "metal-barrier-1",
        "role": "prop",
        "size": [
         1.804,
         0.982,
         0.636
        ],
        "tris": 1692
       },
       {
        "node": "metal-barrier-2",
        "role": "prop",
        "size": [
         2.565,
         0.982,
         1.457
        ],
        "tris": 1828
       },
       {
        "node": "metal-barrier-damaged-1",
        "role": "prop",
        "size": [
         1.809,
         0.982,
         0.589
        ],
        "tris": 2804
       },
       {
        "node": "metal-barrier-damaged-2",
        "role": "prop",
        "size": [
         2.587,
         1.022,
         1.367
        ],
        "tris": 5456
       },
       {
        "node": "concrete-barrier",
        "role": "prop",
        "size": [
         1.57,
         0.817,
         0.809
        ],
        "tris": 1220
       },
       {
        "node": "red-barrier",
        "role": "prop",
        "size": [
         1.183,
         0.891,
         0.739
        ],
        "tris": 1172
       },
       {
        "node": "cone",
        "role": "prop",
        "size": [
         0.413,
         0.692,
         0.413
        ],
        "tris": 1204
       },
       {
        "node": "bin",
        "role": "prop",
        "size": [
         0.515,
         0.831,
         0.484
        ],
        "tris": 2760
       },
       {
        "node": "barrel",
        "role": "prop",
        "size": [
         0.659,
         0.828,
         0.666
        ],
        "tris": 1874
       },
       {
        "node": "trash-bag-1",
        "role": "prop",
        "size": [
         0.449,
         0.58,
         0.529
        ],
        "tris": 1536
       },
       {
        "node": "trash-bag-2",
        "role": "prop",
        "size": [
         0.495,
         0.689,
         0.521
        ],
        "tris": 1232
       },
       {
        "node": "cardboard-box",
        "role": "prop",
        "size": [
         0.621,
         0.233,
         0.498
        ],
        "tris": 140
       },
       {
        "node": "crate",
        "role": "prop",
        "size": [
         0.654,
         0.371,
         0.52
        ],
        "tris": 200
       },
       {
        "node": "sign-stop",
        "role": "prop",
        "size": [
         0.562,
         2.525,
         0.07
        ],
        "tris": 426
       },
       {
        "node": "sign-give-way",
        "role": "prop",
        "size": [
         0.625,
         2.55,
         0.07
        ],
        "tris": 438
       },
       {
        "node": "sign-warning",
        "role": "prop",
        "size": [
         0.625,
         2.55,
         0.07
        ],
        "tris": 438
       },
       {
        "node": "sign-no-waiting",
        "role": "prop",
        "size": [
         0.592,
         2.538,
         0.073
        ],
        "tris": 474
       },
       {
        "node": "bollard-1",
        "role": "prop",
        "size": [
         0.047,
         0.694,
         0.047
        ],
        "tris": 284
       },
       {
        "node": "bollard-2",
        "role": "prop",
        "size": [
         0.067,
         0.719,
         0.067
        ],
        "tris": 500
       }
      ]
     },
     "bytes": 3605416,
     "sha256": "24c1097b33bf18e2a9774e79a0753db1a73e84d979798ced1cc5e25a10bc1c90"
    }
   ],
   "base": "skf-street-props/1/"
  },
  {
   "id": "skf-trees",
   "version": 1,
   "kind": "model",
   "title": "Trees & palms (Sketchfab, 4 packs)",
   "author": "99.Miles (forest), evan4129 (palms, snow pines), c3posw01 (Scots pines)",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/low-poly-forest-tree-pack-5ff5a51e74324845a4e4905f182dfb2b , https://sketchfab.com/3d-models/palm-tree-pack-lowpoly-fd439b0f82c34497aabb21c68ad2fb34 , https://sketchfab.com/3d-models/snow-pine-tree-and-bush-pack-lowpoly-7afc4ca23dd84adea90dc0ba8506c500 , https://sketchfab.com/3d-models/scots-pine-trees-set-422b961ff3d14e7baa7e9077572b2247",
   "sources": [
    "https://sketchfab.com/3d-models/low-poly-forest-tree-pack-5ff5a51e74324845a4e4905f182dfb2b",
    "https://sketchfab.com/3d-models/palm-tree-pack-lowpoly-fd439b0f82c34497aabb21c68ad2fb34",
    "https://sketchfab.com/3d-models/snow-pine-tree-and-bush-pack-lowpoly-7afc4ca23dd84adea90dc0ba8506c500",
    "https://sketchfab.com/3d-models/scots-pine-trees-set-422b961ff3d14e7baa7e9077572b2247"
   ],
   "notes": "도시 둘레·공원·현장용 나무: 활엽·침엽 숲 나무 4종 + 배경용 아틀라스 나무 6종(99.Miles Low Poly Forest Tree Pack), 야자 3종(evan4129), 눈 덮인 소나무 3종·마른 덤불(evan4129), 스코틀랜드 소나무 9종(c3posw01, 실제 수관 텍스처). 모두 m 단위·바닥 중심·library 부품. 높이 meta.size[1]. 잎은 alphaMode 가 있는 재질이면 alphaTest 로 쓰는 것이 빠르다. 2026-10-12: 사용자가 \"도시 끝 나무가 이상하다\"(ruins-kit 저폴리 나무를 2배로 키운 것)고 해서 만들었다. 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-trees",
   "tags": [
    "tree",
    "palm",
    "pine",
    "forest",
    "nature",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "trees.glb",
     "meta": {
      "library": true,
      "unit": "m",
      "origin": "floor-center per part",
      "forward": "+Z",
      "parts": [
       {
        "node": "forest-tree-1",
        "role": "tree",
        "kind": "broadleaf",
        "size": [
         7.808,
         25.413,
         7.487
        ],
        "tris": 630,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "forest-tree-2",
        "role": "tree",
        "kind": "broadleaf",
        "size": [
         5.912,
         10.338,
         5.465
        ],
        "tris": 624,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "forest-tree-3",
        "role": "tree",
        "kind": "broadleaf",
        "size": [
         10.063,
         18.458,
         10.069
        ],
        "tris": 624,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "forest-tree-4",
        "role": "tree",
        "kind": "broadleaf",
        "size": [
         6.615,
         11.866,
         7.662
        ],
        "tris": 285,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "bg-tree-1",
        "role": "tree",
        "kind": "background",
        "size": [
         6.966,
         26.013,
         7.049
        ],
        "tris": 108,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "bg-tree-2",
        "role": "tree",
        "kind": "background",
        "size": [
         11.401,
         29.264,
         11.401
        ],
        "tris": 101,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "bg-tree-3",
        "role": "tree",
        "kind": "background",
        "size": [
         6.688,
         26.013,
         7.049
        ],
        "tris": 109,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "bg-tree-4",
        "role": "tree",
        "kind": "background",
        "size": [
         11.401,
         24.545,
         11.401
        ],
        "tris": 109,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "bg-tree-5",
        "role": "tree",
        "kind": "background",
        "size": [
         8.865,
         33.268,
         8.554
        ],
        "tris": 109,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "bg-tree-6",
        "role": "tree",
        "kind": "background",
        "size": [
         6.099,
         25.775,
         6.07
        ],
        "tris": 113,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "bg-tree-7",
        "role": "tree",
        "kind": "background",
        "size": [
         6.498,
         26.013,
         6.516
        ],
        "tris": 109,
        "source": "5ff5a51e74324845a4e4905f182dfb2b"
       },
       {
        "node": "palm-1",
        "role": "tree",
        "kind": "palm",
        "size": [
         3.958,
         9.673,
         3.969
        ],
        "tris": 2995,
        "source": "fd439b0f82c34497aabb21c68ad2fb34"
       },
       {
        "node": "palm-2",
        "role": "tree",
        "kind": "palm",
        "size": [
         3.958,
         9.119,
         3.932
        ],
        "tris": 2931,
        "source": "fd439b0f82c34497aabb21c68ad2fb34"
       },
       {
        "node": "palm-3",
        "role": "tree",
        "kind": "palm",
        "size": [
         3.976,
         11.067,
         4.042
        ],
        "tris": 2995,
        "source": "fd439b0f82c34497aabb21c68ad2fb34"
       },
       {
        "node": "snow-pine-1",
        "role": "tree",
        "kind": "snow-pine",
        "size": [
         6.716,
         8.39,
         6.944
        ],
        "tris": 240,
        "source": "7afc4ca23dd84adea90dc0ba8506c500"
       },
       {
        "node": "snow-pine-2",
        "role": "tree",
        "kind": "snow-pine",
        "size": [
         8.557,
         11.527,
         8.19
        ],
        "tris": 828,
        "source": "7afc4ca23dd84adea90dc0ba8506c500"
       },
       {
        "node": "snow-pine-3",
        "role": "tree",
        "kind": "snow-pine",
        "size": [
         3.588,
         5.175,
         3.681
        ],
        "tris": 144,
        "source": "7afc4ca23dd84adea90dc0ba8506c500"
       },
       {
        "node": "bush-bare",
        "role": "bush",
        "kind": "bush",
        "size": [
         4.957,
         4.138,
         4.837
        ],
        "tris": 32,
        "source": "7afc4ca23dd84adea90dc0ba8506c500"
       },
       {
        "node": "scots-pine-1",
        "role": "tree",
        "kind": "pine",
        "size": [
         18.198,
         26.883,
         13.08
        ],
        "tris": 1445,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       },
       {
        "node": "scots-pine-2",
        "role": "tree",
        "kind": "pine",
        "size": [
         18.659,
         28.04,
         16.588
        ],
        "tris": 1622,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       },
       {
        "node": "scots-pine-3",
        "role": "tree",
        "kind": "pine",
        "size": [
         17.583,
         29.895,
         16.626
        ],
        "tris": 1749,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       },
       {
        "node": "scots-pine-4",
        "role": "tree",
        "kind": "pine",
        "size": [
         10.401,
         26.486,
         10.509
        ],
        "tris": 1970,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       },
       {
        "node": "scots-pine-5",
        "role": "tree",
        "kind": "pine",
        "size": [
         13.214,
         26.691,
         9.99
        ],
        "tris": 1761,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       },
       {
        "node": "scots-pine-6",
        "role": "tree",
        "kind": "pine",
        "size": [
         13.231,
         27.661,
         15.647
        ],
        "tris": 1591,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       },
       {
        "node": "scots-pine-7",
        "role": "tree",
        "kind": "pine",
        "size": [
         15.607,
         30.33,
         17.201
        ],
        "tris": 2508,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       },
       {
        "node": "scots-pine-8",
        "role": "tree",
        "kind": "pine",
        "size": [
         4.077,
         20.706,
         4.026
        ],
        "tris": 1475,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       },
       {
        "node": "scots-pine-9",
        "role": "tree",
        "kind": "pine",
        "size": [
         13.994,
         25.935,
         13.002
        ],
        "tris": 1737,
        "source": "422b961ff3d14e7baa7e9077572b2247"
       }
      ]
     },
     "bytes": 5145448,
     "sha256": "bd4b48465bf9e37870c14ff2783ae93c8c5422066f274565d3db54553658a33a"
    }
   ],
   "base": "skf-trees/1/"
  },
  {
   "id": "skf-vans",
   "version": 1,
   "kind": "model",
   "title": "Truck/Van Pack",
   "author": "Batuhan13",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/truckvan-pack-badbf04a75d6469ebcd5477ad39b0d4e",
   "sources": [
    "https://sketchfab.com/3d-models/truckvan-pack-badbf04a75d6469ebcd5477ad39b0d4e"
   ],
   "notes": "배달 밴 6색(그래피티 포함), 7.6k 삼각형, PBR 텍스처. 바퀴 노드 분리(원점이 바퀴 중심). 길이 5.5 m 로 맞췄고 앞쪽 +Z(앞바퀴가 +Z 쪽). 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-vans",
   "tags": [
    "vehicle",
    "van",
    "truck",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "van-1.glb",
     "meta": {
      "role": "car",
      "size": [
       2.012,
       1.814,
       5.5
      ],
      "tris": 14220,
      "forward": "+Z",
      "source": "badbf04a75d6469ebcd5477ad39b0d4e",
      "scale": 0.055,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 434684,
     "sha256": "1f3e64ede9f98019759907f01c2ce01b64dc4080f1c523461bd9558a88614fe4"
    },
    {
     "path": "van-2.glb",
     "meta": {
      "role": "car",
      "size": [
       2.012,
       1.814,
       5.5
      ],
      "tris": 14220,
      "forward": "+Z",
      "source": "badbf04a75d6469ebcd5477ad39b0d4e",
      "scale": 0.055,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 435860,
     "sha256": "e8eae5d8495e90f934c853d2b564f3edeaefdcbd9de7af516e55bd72a799c828"
    },
    {
     "path": "van-3.glb",
     "meta": {
      "role": "car",
      "size": [
       2.012,
       1.814,
       5.5
      ],
      "tris": 14220,
      "forward": "+Z",
      "source": "badbf04a75d6469ebcd5477ad39b0d4e",
      "scale": 0.055,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 439852,
     "sha256": "fc74a8f404ff08c96827fdacedb69e9b23f21d997e9d46bee50345a507c02b54"
    },
    {
     "path": "van-4.glb",
     "meta": {
      "role": "car",
      "size": [
       2.012,
       1.814,
       5.5
      ],
      "tris": 14220,
      "forward": "+Z",
      "source": "badbf04a75d6469ebcd5477ad39b0d4e",
      "scale": 0.055,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 439560,
     "sha256": "bc0838ee057aa26a1774da7c03d197dac71410a877ffbd4634e2c4421301112b"
    },
    {
     "path": "van-5.glb",
     "meta": {
      "role": "car",
      "size": [
       2.012,
       1.814,
       5.5
      ],
      "tris": 14220,
      "forward": "+Z",
      "source": "badbf04a75d6469ebcd5477ad39b0d4e",
      "scale": 0.055,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 429896,
     "sha256": "2ab436cd848d24ca9cc614f896151eb0940155ecee2f09cd02d531fb1e667a5c"
    },
    {
     "path": "van-6.glb",
     "meta": {
      "role": "car",
      "size": [
       2.012,
       1.814,
       5.5
      ],
      "tris": 14220,
      "forward": "+Z",
      "source": "badbf04a75d6469ebcd5477ad39b0d4e",
      "scale": 0.055,
      "wheels": [
       "wheel-front-left",
       "wheel-front-right",
       "wheel-back-left",
       "wheel-back-right"
      ],
      "origin": "floor-center"
     },
     "bytes": 455096,
     "sha256": "94d32ee45c279397723544706cda17e5202e00d06b0286dd18ed591a6f8a742c"
    }
   ],
   "base": "skf-vans/1/"
  },
  {
   "id": "skf-zhiguli-cars",
   "version": 1,
   "kind": "model",
   "title": "Zhiguli Soviet Cars",
   "author": "spacelynxcanfly",
   "license": "CC-BY-4.0",
   "source": "https://sketchfab.com/3d-models/zhiguli-soviet-cars-7c3f4bee5d37401d853d2206dc7859fc",
   "sources": [
    "https://sketchfab.com/3d-models/zhiguli-soviet-cars-7c3f4bee5d37401d853d2206dc7859fc"
   ],
   "notes": "낡은 소련 세단 4색(회색·파랑·초록·빨강), 약 1천 삼각형, PBR 텍스처 한 장. 바퀴가 몸체와 한 메시라 돌지 않는다 — 주차 차·배경 차량용. 원본 단위 m, 앞쪽 +Z 로 맞췄다(preview 로 확인). 원본: Sketchfab(CC Attribution 4.0 — 크레딧에 저자·주소 표시). 만드는 법: node tools/models/sketchfab.mjs fetch <uid> && node tools/models/sketchfab-packs.mjs build skf-zhiguli-cars",
   "tags": [
    "vehicle",
    "car",
    "sedan",
    "textured",
    "sketchfab"
   ],
   "files": [
    {
     "path": "zhiguli-gray.glb",
     "meta": {
      "role": "car-static",
      "size": [
       1.803,
       1.43,
       4.121
      ],
      "tris": 944,
      "forward": "+Z",
      "source": "7c3f4bee5d37401d853d2206dc7859fc",
      "scale": 1,
      "origin": "floor-center"
     },
     "bytes": 192136,
     "sha256": "eca2404385bac6063e866c485e51fa6bf843a27dac1954eaf38374f440c21be1"
    },
    {
     "path": "zhiguli-blue.glb",
     "meta": {
      "role": "car-static",
      "size": [
       1.805,
       1.428,
       4.246
      ],
      "tris": 1052,
      "forward": "+Z",
      "source": "7c3f4bee5d37401d853d2206dc7859fc",
      "scale": 1,
      "origin": "floor-center"
     },
     "bytes": 185716,
     "sha256": "b5cc8a449db87243ac8ac3f3d7998256dec01b56a22414920364745a5b9c0eec"
    },
    {
     "path": "zhiguli-green.glb",
     "meta": {
      "role": "car-static",
      "size": [
       1.803,
       1.43,
       4.177
      ],
      "tris": 1024,
      "forward": "+Z",
      "source": "7c3f4bee5d37401d853d2206dc7859fc",
      "scale": 1,
      "origin": "floor-center"
     },
     "bytes": 172296,
     "sha256": "85daf4d134feca519902fd4a26d940b4c67ad250e19ca0d11a0784026cc66fe0"
    },
    {
     "path": "zhiguli-red.glb",
     "meta": {
      "role": "car-static",
      "size": [
       1.803,
       1.43,
       4.177
      ],
      "tris": 1024,
      "forward": "+Z",
      "source": "7c3f4bee5d37401d853d2206dc7859fc",
      "scale": 1,
      "origin": "floor-center"
     },
     "bytes": 177028,
     "sha256": "907ad2dc0aedddd134edd81024b099347fdb7c949d1c691806b6f462828c1684"
    }
   ],
   "base": "skf-zhiguli-cars/1/"
  }
 ]
}
