vkgs-sim / docs /roadmap.md
kimjunhan's picture
vkgs-sim ์†Œ์Šค (nusim hub upload code)
9a28212 verified
|
Raw History Blame Contribute Delete
41.7 kB
# ๋กœ๋“œ๋งต
๊ฐ ๋‹จ๊ณ„๋Š” **๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ์‚ฐ์ถœ๋ฌผ** ๋กœ ๋๋‚œ๋‹ค. "๋๋‹ค" ๋ฅผ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์—†์œผ๋ฉด
๊ทธ ๋‹จ๊ณ„๋Š” ๋๋‚œ ๊ฒŒ ์•„๋‹ˆ๋‹ค.
---
## 0๋‹จ๊ณ„ โ€” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ยท ๋ฐ์ดํ„ฐ ๊ณ„์ธต โœ… ์™„๋ฃŒ
| | |
|---|---|
| ์‚ฐ์ถœ๋ฌผ | `vkgs-doctor` ๊ฐ€ ์ „๋ถ€ ์ดˆ๋ก, `nusim scene show` ๊ฐ€ ์”ฌ์„ ์ถœ๋ ฅ |
| ์ƒํƒœ | **์™„๋ฃŒ.** Docker ๋Œ€์‹  ๋กœ์ปฌ micromamba ํ™˜๊ฒฝ (`scripts/local_setup.sh`) |
- [x] ์”ฌ ์ธ๋ฑ์Šค โ€” 383 ์‹ฑ๊ฐ€ํฌ๋ฅด ์”ฌ / 532,157 ์žฅ / ํ”ผํฌ 0.5 GB
- [x] ์ธ๋ฑ์Šค v2 โ€” LIDAR_TOP ํ‚คํ”„๋ ˆ์ž„ ์ถ”๊ฐ€ (์”ฌ๋‹น ์•ฝ 40์žฅ)
- [x] ์ŠคํŠธ๋ฆฌ๋ฐ JSON ํŒŒ์„œ โ€” 1.35 GB ๋ฅผ ํ”ผํฌ 30 MB ๋กœ ์ˆœํšŒ
- [x] ์นด๋ฉ”๋ผ ๋ฆฌ๊ทธ ์ˆ˜ํ•™ โ€” 6์บ  ๋ฐฐ์น˜๋ฅผ ์‹ค์ธก์œผ๋กœ ํ™•์ธ. Vulkan ํˆฌ์˜ํ–‰๋ ฌ y/์ฃผ์  ๋ถ€ํ˜ธ ๋ฒ„๊ทธ ์ˆ˜์ •
- [x] ๋กœ์ปฌ ํ™˜๊ฒฝ (CUDA 12.1 + PyTorch 2.4.1 + gsplat 1.4.0 + Vulkan 1.4 ๋กœ๋”, sudo ๋ถˆํ•„์š”)
- [x] `vkgs-doctor` ์ „ํ•ญ๋ชฉ ํ†ต๊ณผ
- [x] `vkgs_probe` ๋ฅผ ์‹ค์ œ GPU ์—์„œ ์‹คํ–‰ โ€” ์ปดํ“จํŠธ ๋””์ŠคํŒจ์น˜ ๊ฒ€์ฆ ํ†ต๊ณผ
---
## 1๋‹จ๊ณ„ โ€” 3DGS ์žฌ๊ตฌ์„ฑ ๐Ÿšง ์ง„ํ–‰ ์ค‘
| | |
|---|---|
| ์‚ฐ์ถœ๋ฌผ | ์”ฌ ํ•˜๋‚˜์˜ `.ply` + ์›๋ณธ ๋Œ€๋น„ PSNR/SSIM ๋ฆฌํฌํŠธ |
| ๊ธฐ์ค€์„  | ์ •์  ์”ฌ(์ฃผ์ฐจ์žฅ ๋“ฑ)์—์„œ hold-out ๋ทฐ PSNR โ‰ฅ 25 dB |
- [x] `recon/init.py` โ€” LIDAR_TOP ๋ˆ„์  โ†’ ์ดˆ๊ธฐ ๊ฐ€์šฐ์‹œ์•ˆ. ์ž์ฐจ ์ /๋ฐ˜์‚ฌ ํ—ˆ์ƒ ์ œ๊ฑฐ,
์”ฌ ์›์  ์ด๋™(float32 ์ •๋ฐ€๋„), ํ•˜๋Š˜ ๊ตฌ, ์นด๋ฉ”๋ผ ํˆฌ์˜์œผ๋กœ ์ƒ‰ ์ดˆ๊ธฐํ™”. **COLMAP ์—†์Œ.**
- [x] `recon/dataset.py` โ€” 800ร—450, ์”ฌ ์ „์ฒด RAM ์ ์žฌ(1.4 GB, 5์ดˆ), ์นด๋ฉ”๋ผ๋ณ„ hold-out 1/8.
- [x] `recon/train.py` โ€” gsplat + DefaultStrategy, ๊ฐ€์šฐ์‹œ์•ˆ ์ƒํ•œ, ์นด๋ฉ”๋ผ๋ณ„ ์•„ํ•€ + ํ”„๋ ˆ์ž„๋ณ„ ๊ฒŒ์ธ ์ƒ‰ ๋ณด์ •.
- [x] `io/ply.py` โ€” ํ‘œ์ค€ 3DGS ply (์›์ ์€ ํ—ค๋” comment ์— float64).
- [x] ์ธ๋ฑ์Šค v3 โ€” 3D ๋ฐ•์Šค ์–ด๋…ธํ…Œ์ด์…˜ (์‹ฑ๊ฐ€ํฌ๋ฅด 364,833๊ฐœ)
- [x] `recon/dynamic.py` โ€” ์›€์ง์ด๋Š” ๊ฐ์ฒด ํŒ์ •(์‚ฌ๋žŒ ์ „๋ถ€ + ๋์  ๋ณ€์œ„ > 2 m + moving ์†์„ฑ ๊ณผ๋ฐ˜),
ํ‚คํ”„๋ ˆ์ž„ ๊ฐ„ ๋ฐ•์Šค ๋ณด๊ฐ„, ๊ทผํ‰๋ฉด ํด๋ฆฌํ•‘ ํˆฌ์˜ ๋งˆ์Šคํฌ. ๋ผ์ด๋‹ค ์ดˆ๊ธฐํ™”์™€ ํ•™์Šต ์†์‹ค์—์„œ ์ œ์™ธ.
- [x] ์ƒ‰ ๊ตฝ๊ธฐ โ€” ํ‰๊ท  ์นด๋ฉ”๋ผ ์ƒ‰ ๋ณ€ํ™˜์„ SH ์— ๊ตฌ์›Œ ply ๋งŒ์œผ๋กœ nuScenes ์ƒ‰์ด ๋‚˜์˜ค๊ฒŒ.
- [x] ์ •์  PSNR 25 dB ๋‹ฌ์„ฑ โ€” 60k ์Šคํ… 25.26 dB
- [x] ์นด๋ฉ”๋ผ๋ณ„ ์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ • (camera_adjust.json)
- [x] ์ƒ‰ ๋ณด์ • ์ค‘์‹ฌํ™” (SH ๊ตฝ๊ธฐ ๋Œ€์ฒด) + ์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ • L2 ์‚ฌ์ „๋ถ„ํฌ
- [x] ์”ฌ 3๊ฐœ๋กœ ๊ฒ€์ฆ โ€” ์•„๋ž˜ ํ‘œ. **์ฃผ๊ฐ„ยทํ™ฉํ˜ผ์€ ํ†ต๊ณผ, ์•ผ๊ฐ„+์šฐ์ฒœ์€ ์‹คํŒจ** (์‹ฑ๊ฐ€ํฌ๋ฅด ์šฐ์ฒœ ์”ฌ์€ ์ „๋ถ€ ์•ผ๊ฐ„)
- [ ] ์•ผ๊ฐ„+์šฐ์ฒœ ์žฌ๊ตฌ์„ฑ โ€” ์ •์  3DGS ๊ฐ€์ •์ด ๊นจ์ง€๋Š” ์กฐ๊ฑด์ด๋ผ ๋ณ„๋„ ์ ‘๊ทผ ํ•„์š” (์•„๋ž˜ ์ฐธ๊ณ )
- [ ] ์ฐจ๋Ÿ‰๋ณ„ ๊ณ ์ • ์บ˜๋ฆฌ๋ธŒ โ€” ์ฃผ๊ฐ„ ์”ฌ ์—ฌ๋Ÿฟ์˜ ์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ •์„ ํ‰๊ท ๋‚ด n015 ๋“ฑ ์ฐจ๋Ÿ‰๋ณ„๋กœ ๊ณ ์ •
**์”ฌ 3๊ฐœ ๊ฒ€์ฆ (60k ์Šคํ…, ์ตœ์ข… ์ฝ”๋“œ, 2026-10-01):**
| ์”ฌ | ์กฐ๊ฑด | ํ‰๊ท  ๋ฐ๊ธฐ | ์ •์  PSNR | SSIM | ply ๊ทธ๋Œ€๋กœ | ๊ฐ€์šฐ์‹œ์•ˆ | ์‹œ๊ฐ„ | ํŒ์ • |
|---|---|---:|---:|---:|---:|---:|---:|---|
| scene-0003 | ์ฃผ๊ฐ„ ์ฃผ์ฐจ์žฅ | 0.41 | **25.62** | 0.804 | 19.5 | 200๋งŒ | 64๋ถ„ | ํ†ต๊ณผ |
| scene-0992 | ํ™ฉํ˜ผ ("Night") | 0.14 | **25.64** | 0.582 | 24.0 | 27๋งŒ | 20๋ถ„ | ํ†ต๊ณผ (๋‚˜๋ฌด๊ฐ€ ํ๋ฆผ) |
| scene-1060 | ์•ผ๊ฐ„ + ์šฐ์ฒœ | 0.05 | 29.29 | 0.646 | 27.8 | 5.6๋งŒ | 15๋ถ„ | **์‹คํŒจ** โ€” ์ˆ˜์น˜๋งŒ ๋†’๋‹ค |
**์–ด๋‘์šด ์”ฌ์—์„œ PSNR ์€ ๋ฏฟ์„ ์ˆ˜ ์—†๋‹ค.** scene-1060 ์€ ์ด๋ฏธ์ง€๊ฐ€ ๊ฑฐ์˜ ๊ฒ€์–ด์„œ(ํ‰๊ท  0.05)
๋ญ‰๊ฐœ์ง„ ๋ Œ๋”๋„ 29 dB ๊ฐ€ ๋‚˜์˜จ๋‹ค. ์‹ค์ œ ๋ Œ๋”๋Š” ๊ฐ€๋กœ๋“ฑยท์ฐจ์„ ยทํ—ค๋“œ๋ผ์ดํŠธ๋งŒ ํ๋ฆฟํ•˜๊ฒŒ ๋‚จ๋Š”๋‹ค.
์•ผ๊ฐ„ ํŒ์ •์€ SSIM ๊ณผ ์œก์•ˆ์œผ๋กœ ํ•œ๋‹ค. (LPIPS ๋ฅผ ์ง€ํ‘œ์— ๋„ฃ๋Š” ๊ฒƒ๋„ ๊ณ ๋ ค.)
์•ผ๊ฐ„+์šฐ์ฒœ์ด ์–ด๋ ค์šด ์ด์œ : ์„ผ์„œ ๋…ธ์ด์ฆˆ, ์ –์€ ๋…ธ๋ฉด์˜ ์‹œ์  ์˜์กด ๋ฐ˜์‚ฌ, ํ—ค๋“œ๋ผ์ดํŠธ ๊ธ€๋ ˆ์–ด,
๋ Œ์ฆˆ์˜ ๋น—๋ฐฉ์šธ โ€” ์ „๋ถ€ '์ •์  ์žฅ๋ฉด + ์‹œ์  ๋ฌด๊ด€ ์ƒ‰' ๊ฐ€์ •์„ ๊นฌ๋‹ค. ์†์‹ค์„ ๋ฐ๊ธฐ๋กœ ์ •๊ทœํ™”ํ•ด
densify ๋ฅผ ์‚ด๋ ค ๋ดค์ง€๋งŒ(๊ฐ€์šฐ์‹œ์•ˆ 5.6๋งŒโ†’48๋งŒ) ๋…ธ์ด์ฆˆ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š” ์ค„๋ฌด๋Šฌ๋งŒ ๋Š˜์—ˆ๋‹ค
(PSNR 24.9, SSIM 0.50). ๊ธฐ๋ณธ์€ ๋„๊ณ  `max_loss_scale` ์˜ต์…˜์œผ๋กœ๋งŒ ๋‚จ๊ฒผ๋‹ค.
**scene-0003 (์ฃผ์ฐจ์žฅ ์ถœ๊ตฌ) ์‹คํ—˜ ์ด๋ ฅ:**
| ๋ฒ„์ „ | ์Šคํ… | ์ •์  PSNR | ์ „์ฒด PSNR | ply ๊ทธ๋Œ€๋กœ | ๋น„๊ณ  |
|---|---:|---:|---:|---:|---|
| v1 ๊ธฐ๋ณธ | 30k | 24.54 | 23.98 | 18.05 | ์›€์ง์ด๋Š” ์ฐจ๊ฐ€ ํ๋ฆฐ ์ž”์ƒ์œผ๋กœ ๊ตฌ์›Œ์ง |
| v2 ๋™์  ๋งˆ์Šคํ‚น + ์ƒ‰ ๊ตฝ๊ธฐ | 30k | 24.63 | 22.84 | 19.07 | ์ž”์ƒ ์ œ๊ฑฐ |
| v2 + ๊ฐ€์šฐ์‹œ์•ˆ ์ƒํ•œ 350๋งŒ | 30k | 24.64 | 22.86 | โ€” | ์ƒํ•œ์ด ๋ณ‘๋ชฉ ์•„๋‹˜ (์ž์—ฐ ์ฆ๊ฐ€ 213๋งŒ์—์„œ ๋ฉˆ์ถค) |
| v2 + absgrad | 30k | 24.36 | 22.73 | โ€” | ์˜คํžˆ๋ ค ๋‚˜์จ (๊ฐ€์šฐ์‹œ์•ˆ 119๋งŒ) |
| v2 + ์นด๋ฉ”๋ผ ์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ • | 30k | 24.72 | 23.01 | โ€” | ์บ ๋งˆ๋‹ค 0.3~0.44ยฐ / 2~8 cm ๋ณด์ •๋จ |
| v2 | **60k** | **25.26** | 23.33 | โ€” | **๋œ ํ•™์Šต์ด ์ฃผ์›์ธ.** ๊ธฐ์ค€์„  ํ†ต๊ณผ |
| **์ตœ์ข…** v2 + ์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ • | 60k | **25.42** | 23.49 | โ€” | SSIM 0.803. ๋ณด์ •๊ฐ’์ด ๋ฐ˜๋ณต ์‹คํ–‰์—์„œ ์žฌํ˜„๋จ (0.29~0.44ยฐ) |
'์ •์  PSNR' ์€ ๋™์  ๋งˆ์Šคํฌ ๋ฐ– ํ”ฝ์…€๋งŒ (๋ฐฐ๊ฒฝ ๋ชจ๋ธ์˜ ํ’ˆ์งˆ, 1๋‹จ๊ณ„ ๊ธฐ์ค€์„ ).
'์ „์ฒด' ๊ฐ€ v2 ์—์„œ ๋‚ด๋ ค๊ฐ„ ๊ฒƒ์€ ์˜๋„๋œ ๊ฒƒ์ด๋‹ค โ€” ์›€์ง์ด๋Š” ์ฐจ ์ž๋ฆฌ์— ์ด์ œ ๋ฐฐ๊ฒฝ์„ ๊ทธ๋ฆฐ๋‹ค.
์ง„๋‹จ์—์„œ ์•Œ๊ฒŒ ๋œ ๊ฒƒ:
- ํ•™์Šต ๋ทฐ PSNR ๋„ 25.2 ์—์„œ ๋ฉˆ์ถฐ ์žˆ์—ˆ๋‹ค โ†’ ๊ณผ์ ํ•ฉ์ด ์•„๋‹ˆ๋ผ **๋ฏธ์ ํ•ฉ**. ์”ฌ๋‹น ๋ทฐ 1,200์žฅ์—
3๋งŒ ์Šคํ…์€ ๋ทฐ๋‹น 25ํšŒ๋ฟ์ด๋‹ค (์›๋ณธ 3DGS ๋Š” 200์žฅ ร— 3๋งŒ = 150ํšŒ).
- ํ‰๊ฐ€ ๋ทฐ ๋…ธ์ถœ ๊ฒŒ์ธ์„ ์ด์›ƒ ํ”„๋ ˆ์ž„์—์„œ ๋นŒ๋ฆฌ๋Š” ์†์‹ค์€ 0.13 dB ๋ฟ (oracle ๋น„๊ต).
- ํ•˜๋Š˜ ๊ตฌ๋งŒ ๋ณด์ด๋Š” ํ”ฝ์…€์€ ์˜ค์ฐจ์˜ 2%. ๋ฐ์€ ํ”ฝ์…€(๋‚˜๋ญ‡์žŽ ์‚ฌ์ด ํ•˜๋Š˜)์ด ํ”ฝ์…€ 9% ๋กœ ์˜ค์ฐจ 29%.
- ์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ •์˜ view ํ–‰๋ ฌ gradient ๋Š” gsplat ์ด 4x4 ํ•˜๋‚˜๋กœ atomic ํ•ฉ์‚ฐํ•ด ์Šคํ…์ด
2.2๋ฐฐ ๋А๋ ค์ง„๋‹ค. 4์Šคํ…์— ํ•œ ๋ฒˆ, 3๋งŒ ์Šคํ…๊นŒ์ง€๋งŒ ์ผ ๋‹ค (`camera_every`, `camera_until`).
- ์ƒ‰ ๊ตฝ๊ธฐ๊ฐ€ ์•ฝ 0.1 dB ์žƒ๋Š”๋‹ค โ€” gsplat ์ด SH ์ƒ‰์— `clamp_min(0)` ์„ ๊ฑธ์–ด ์™„์ „ํ•œ ์„ ํ˜•์ด ์•„๋‹ˆ๋‹ค.
**์ฃผ์˜ํ•  ์ .** ๋…ธ์ถœ/ํ™”์ดํŠธ๋ฐธ๋Ÿฐ์Šค๊ฐ€ ์นด๋ฉ”๋ผ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค. ๋ณด์ • ์—†์ด ํ•™์Šตํ•˜๋ฉด
์นด๋ฉ”๋ผ ๊ฒฝ๊ณ„์— ์ด์Œ๋งค๊ฐ€ ์ƒ๊ธด๋‹ค. ์นด๋ฉ”๋ผ๋ณ„ ์ƒ‰ ๋ณด์ • ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ™์ด ์ตœ์ ํ™”ํ•œ๋‹ค.
---
### 1๋‹จ๊ณ„ ๋ณด๊ฐ• โ€” ์ƒˆ ์‹œ์  ํ’ˆ์งˆ (์นด๋ฉ”๋ผ-๋ผ์ด๋‹ค ์œตํ•ฉ, Difix) ยท 2026-10-01
closed-loop ์—์„œ ์ฐจ์„ ์„ ๋ฐ”๊พธ๋ฉด(์›๋ž˜ ๊ฒฝ๋กœ์—์„œ ์˜†์œผ๋กœ 1.5~3 m) ๋…ธ๋ฉด์ด ํŒŒํŽธ์ฒ˜๋Ÿผ ๋ญ‰๊ฐœ์กŒ๋‹ค.
์›์ธ์€ ์ƒ‰์ด ์•„๋‹ˆ๋ผ ๊ธฐํ•˜ โ€” ๊ธฐ๋ณธ ๋ชจ๋ธ์˜ ๋ Œ๋” ๊นŠ์ด๊ฐ€ ๋ผ์ด๋‹ค์™€ 20% ์–ด๊ธ‹๋‚˜ ์žˆ์—ˆ๋‹ค.
| ๋ชจ๋ธ (scene-0003) | ์›๋ž˜ ๊ถค์  ์ •์  PSNR | ๊นŠ์ด ์˜ค์ฐจ (๋ผ์ด๋‹ค ๋Œ€๋น„) | ์ฐจ์„  ๋ณ€๊ฒฝ ์‹œ์  |
|---|---:|---:|---|
| ๊ธฐ๋ณธ (๋ผ์ด๋‹ค๋Š” ์ดˆ๊ธฐํ™”๋งŒ) | **25.62** | 22.0% | ๋…ธ๋ฉด ๋ญ‰๊ฐœ์ง |
| + Difix ์˜์‚ฌ ์ •๋‹ต ๋ฏธ์„ธ์กฐ์ • | 24.80 | 23.8% | ๋งค๋ˆํ•˜์ง€๋งŒ ํ๋ฆผ |
| **+ ๋ผ์ด๋‹ค ๊นŠ์ด ๊ฐ๋…** (`--depth-lambda 0.1`) | 24.83 | 2.3% | **์—ฐ์„ยท์ฐจ์„ ยท๋…ธ๋ฉด ํ‘œ์‹œ ์œ ์ง€** โ† ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ธฐ๋ณธ |
| ๊นŠ์ด ๊ฐ๋… + Difix | 24.18 | 2.4% | 3 m ์—์„œ ์•ฝ๊ฐ„ ๋” ๊นจ๋—, ๋Œ€์‹  โˆ’0.65 dB |
| ๊นŠ์ด ๊ฐ๋… + sweep ์œตํ•ฉ (20 Hz ๋ผ์ด๋‹ค 384์žฅ) | 24.69 | **2.0%** | ๊นŠ์ด ๊ฐ๋…๊ณผ ๋น„์Šท, ํ•˜๋Š˜์— ์ค„๋ฌด๋Šฌ |
- ๋ผ์ด๋‹ค ๊นŠ์ด ๊ฐ๋… = ์ •์  ๋ผ์ด๋‹ค ๋ˆ„์ ์ (๋™์  ๊ฐ์ฒด ์ œ๊ฑฐ)์„ ๋ทฐ๋งˆ๋‹ค z-buffer ๊นŠ์ด ์ง€๋„๋กœ ๋งŒ๋“ค์–ด
๋ Œ๋” ๊ธฐ๋Œ€ ๊นŠ์ด์™€ ์ƒ๋Œ€ L1 (`nusim/recon/depth.py`). ๊ธฐํ•˜ ์˜ค์ฐจ๊ฐ€ 10๋ฐฐ ์ค€๋‹ค.
- sweep ์€ ๊นŠ์ด ์ง€๋„๋ฅผ ์ด˜์ด˜ํ•˜๊ฒŒ ํ•˜์ง€๋งŒ(1/2 ํ•ด์ƒ๋„ ์ฑ„์›€ 51% โ†’ 79%) ๊ฒฐ๊ณผ ์ฐจ์ด๋Š” ์ž‘์•˜๋‹ค.
๋ผ์ด๋‹ค ์ˆ˜์ง ์‹œ์•ผ ์œ„(ํ•˜๋Š˜)๋Š” ์—ฌ์ „ํžˆ ๊ตฌ์†์ด ์—†์–ด floater ๊ฐ€ ๋‚จ๋Š”๋‹ค.
- Difix(NVIDIA, SD-Turbo ๋‹จ์ผ ์Šคํ… ํ™•์‚ฐ, ์—ฐ๊ตฌ์šฉ ๋ผ์ด์„ ์Šค)๋Š” ๋ Œ๋” ํ›„์ฒ˜๋ฆฌ๋กœ๋Š” ๊ฐ€์žฅ ์ข‹์ง€๋งŒ
์žฅ๋‹น 1์ดˆ๋ผ closed-loop ์— ๋ชป ์“ฐ๊ณ , ์ฐธ์กฐ ์‚ฌ์ง„์˜ ์›€์ง์ด๋Š” ์ฐจ๋ฅผ ๋˜์‚ด๋ฆฌ๋Š” ํ™˜๊ฐ์ด ์žˆ๋‹ค.
OneFixer(arXiv 2609.32175) ๋Š” ์ฝ”๋“œ ๋ฏธ๊ณต๊ฐœ, NVIDIA Fixer ๋Š” cosmos ์ปจํ…Œ์ด๋„ˆ ์Šคํƒ์ด ํ•„์š”ํ•ด ๋ณด๋ฅ˜.
- ๋‚จ์€ ํ•œ๊ณ„: ์›๋ž˜ ์นด๋ฉ”๋ผ๊ฐ€ ํ•œ ๋ฒˆ๋„ ๋ชป ๋ณธ ๋ฉด(์ฐจ๋‹จ๊ธฐยท์ฝ˜์˜ ์˜†๋ฉด)์€ 3 m ์ด๋™์—์„œ ์—ฌ์ „ํžˆ ๊นจ์ง„๋‹ค.
### ํ™˜๊ฒฝ ์ „์šฉ ์žฌ๊ตฌ์„ฑ (2026-10-02 ๊ฒฐ์ •)
๋ Œ๋”๋ง์€ **์ฃผํ–‰ ๋งต(ํ™˜๊ฒฝ)๋งŒ** ๊ตฌ์„ฑํ•œ๋‹ค. ์ฐจ๋Ÿ‰ยท์‚ฌ๋žŒ ๊ฐ™์€ ๊ตํ†ต ์ฐธ๊ฐ€์ž๋Š” 3๋‹จ๊ณ„์—์„œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ๋”ฐ๋กœ ๋„ฃ๋Š”๋‹ค.
- `nusim recon train --objects agents`: ์›€์ง์ด๋Š” ๊ฐ์ฒด๋ฟ ์•„๋‹ˆ๋ผ **์ฃผ์ฐจ ์ฐจ๋Ÿ‰ยท์„œ ์žˆ๋Š” ์‚ฌ๋žŒยท์ž์ „๊ฑฐ๊นŒ์ง€**
ํ•™์Šต ๋งˆ์Šคํฌ์™€ ๋ผ์ด๋‹ค ๋ˆ„์ ์—์„œ ๋บ€๋‹ค (`nusim.recon.dynamic.masked_instances`). ์ฝ˜ยท๋ฐฉํ˜ธ๋ฒฝ(movable_object)์€ ๋งต์œผ๋กœ ๋‚จ๊ธด๋‹ค.
scene-0003: ๊ธฐ๋ณธ 24๊ฐœ โ†’ 54๊ฐœ (์Šน์šฉ์ฐจ 35, ๋ณดํ–‰์ž 15, ์ž์ „๊ฑฐ 4).
- ์ฐจ๊ฐ€ ์„œ ์žˆ๋˜ ๋…ธ๋ฉด์€ ๋‹ค๋ฅธ ์‹œ๊ฐยท๋‹ค๋ฅธ ์นด๋ฉ”๋ผ์—์„œ ๋ณธ ํ”ฝ์…€๊ณผ ๋ผ์ด๋‹ค ๊นŠ์ด ๊ฐ๋…์œผ๋กœ ์ฑ„์šด๋‹ค.
- ๊ฒฐ๊ณผ๋Š” `outputs/gs/<scene>_env`. `render view` ๋Š” ์ด ๋ชจ๋ธ์ด ์žˆ์œผ๋ฉด ๊ธฐ๋ณธ์œผ๋กœ ์“ด๋‹ค.
๋‹ค๋ฅธ ์ฐจ๋Ÿ‰(glTF)์€ ๊ธฐ๋ณธ์œผ๋กœ ๊ทธ๋ฆฌ์ง€ ์•Š๊ณ  `--agents` ๋กœ๋งŒ ์ผ ๋‹ค. ์ž์ฐจ๋Š” ๊ณ„์† ํ‘œ์‹œํ•œ๋‹ค.
## 2๋‹จ๊ณ„ โ€” Vulkan ๋ Œ๋”๋Ÿฌ ๐Ÿšง 2a ์™„๋ฃŒ
| | |
|---|---|
| ์‚ฐ์ถœ๋ฌผ | ๊ฐ™์€ ์นด๋ฉ”๋ผ ์ž์„ธ์—์„œ ํ•™์Šต๊ธฐ ๋ Œ๋”์™€ Vulkan ๋ Œ๋”์˜ ํ”ฝ์…€ ์ฐจ์ด < 2% |
### 2a. ๋นŒ๋ณด๋“œ ๊ฒฝ๋กœ โœ… (2026-10-01)
- [x] `.ply` ๋กœ๋”, ๊ฐ€์šฐ์‹œ์•ˆ SSBO ์—…๋กœ๋“œ (3D ๊ณต๋ถ„์‚ฐ์€ CPU ์—์„œ ๋ฏธ๋ฆฌ, 240 B/๊ฐ€์šฐ์‹œ์•ˆ)
- [x] ๊นŠ์ด ์ •๋ ฌ (GPU bitonic โ†’ 2026-10-05 ๋ณด์ด๋Š” ๊ฒƒ๋งŒ GPU radix, ์—”์ง„ ๊ฒฝ๋Ÿ‰ํ™” ์ฐธ๊ณ )
- [x] ํ™”๋ฉด์ •๋ ฌ ์ฟผ๋“œ + ์•ŒํŒŒ ๋ธ”๋ Œ๋”ฉ (RGBA32F ๋ˆ„์ , gsplat ๊ณผ ๊ฐ™์€ ์ˆ˜์‹ยท์ƒ์ˆ˜)
- [x] GLFW ์ฐฝ, ์ž์œ  ์นด๋ฉ”๋ผ / 6์บ  ์ถ”์ข… / ๊ถค์  ์žฌ์ƒ / BEV(๋†’์ด ํด๋ฆฝ) โ†’ **ํ™”๋ฉด์— ๋œฌ๋‹ค**
- [x] nuScenes map expansion ์˜ค๋ฒ„๋ ˆ์ด (์ฃผํ–‰๊ฐ€๋Šฅ์˜์—ญ, ์ฐจ์„  ์ค‘์‹ฌ์„ , ๊ตฌ๋ถ„์„ , ์ •์ง€์„ , ๋ณด๋„, ์ž์ฐจ ๊ถค์ ยท๋ฐ•์Šค)
- [x] `nusim render compare` โ€” **Vulkan vs gsplat PSNR 55.95 dB, ํ‰๊ท  ์ฐจ์ด 0.10%** (๊ธฐ์ค€ < 2%, ํ•ฉ๊ฒฉ)
- [x] `nusim render video` โ€” 6์บ  + BEV ์žฌ์ƒ ์˜์ƒ
์„ฑ๋Šฅ (scene-0003, ๊ฐ€์šฐ์‹œ์•ˆ 200๋งŒ / ๋ณด์ด๋Š” 33๋งŒ, 800x450): ์ „์ฒ˜๋ฆฌ 0.5 + ์ •๋ ฌ 10.8 + ๋ž˜์Šคํ„ฐ 5.0 = **16.3 ms/์žฅ**.
์ •๋ ฌ์ด 2/3 โ€” bitonic 231 ํŒจ์Šค. 6์บ  ร— 1600x900 ์„ 100 ms ์•ˆ์— ๋„ฃ์œผ๋ ค๋ฉด 2b ์˜ radix ์ •๋ ฌยทํƒ€์ผ ๋ž˜์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
BEV ์˜ ํ•œ๊ณ„: ํ•™์Šต ์นด๋ฉ”๋ผ๊ฐ€ 1.5 m ๋†’์ด์—์„œ ์ˆ˜ํ‰์œผ๋กœ๋งŒ ๋ด์„œ, ์œ„์—์„œ ๋ณด๋ฉด ๋‚˜๋ฌด ์บ๋…ธํ”ผ๊ฐ€ ์ง€๋ฉด์„
๋ฎ๊ณ  ์ง€๋ฉด ๊ฐ€์šฐ์‹œ์•ˆ์ด ๋ฐ”๋Š˜์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ๋†’์ด ํด๋ฆฝ(๊ธฐ๋ณธ ์ง€๋ฉด +2.5 m)์œผ๋กœ ์บ๋…ธํ”ผ๋Š” ๊ฑท์–ด ๋‚ด์ง€๋งŒ
๋ฐ”๋Š˜์€ ๋‚จ๋Š”๋‹ค โ€” 3DGS ์˜ ๋ณธ์งˆ์  ํ•œ๊ณ„์ด๊ณ  BEV ๋Š” ๋งตยท๊ถค์  ํ™•์ธ์šฉ์œผ๋กœ ๋ณธ๋‹ค.
### 2a+. IBL ํ™˜๊ฒฝ ์กฐ๋ช… โœ… (2026-10-02)
- [x] 6์บ  ํŒŒ๋…ธ๋ผ๋งˆ (์ƒ‰ ๋ณด์ • ์—ญ์ ์šฉ, 3DGS ์•ŒํŒŒ ํ•ฉ์„ฑ + ์™ธ์‚ฝ ์ฑ„์›€)
- [x] HDR ๊ทผ์‚ฌ โ†’ ํ๋ธŒ๋งต โ†’ prefiltered specular (GGX) / irradiance (SH9) / BRDF LUT
- [x] BC6H ์••์ถ• + KTX2 (Khronos `ktx validate` ํ†ต๊ณผ)
- [x] Vulkan: KTX2 ๋กœ๋”, ํ™˜๊ฒฝ ๋ฐฐ๊ฒฝ, PBR ๊ตฌ ๊ฒ€์ฆ, ๋ฉ”์‹œโ€“์Šคํ”Œ๋žซ ๊นŠ์ด ํ•ฉ์„ฑ
- [x] glTF ์ฐจ๋Ÿ‰ ๋กœ๋” + PBR (IBL ์กฐ๋ช…, clearcoat, ์œ ๋ฆฌ ๊ทผ์‚ฌ, texture_transform) โ€” nuScenes ์˜ ์›€์ง์ด๋Š” ์Šน์šฉ์ฐจ ๋ฐ•์Šค
๊ถค์ ๋งˆ๋‹ค CarConcept(CC-BY 4.0)๋ฅผ ๋†“๋Š”๋‹ค. ์žฌ์ƒยท์šด์ „ยท6์บ  ๊ด€์ธก ๋ชจ๋‘์— ๋‚˜์˜จ๋‹ค (์šด์ „ ์ค‘์—” ๋กœ๊ทธ ์‹œ๊ณ„๋กœ, ์•„์ง ๋ฐ˜์‘ ์—†์Œ)
- [x] ์ฐจ๋Ÿ‰ ์ ‘์ง€ ๊ทธ๋ฆผ์ž โ€” ์ฐจ์ฒด ํญ(๋ชจ๋ธ ํญ ร—0.85)ยท๊ธธ์ด์˜ ๋ถ€๋“œ๋Ÿฌ์šด ๋‘ฅ๊ทผ ์‚ฌ๊ฐํ˜•, ์ฐจ์ฒด ๊นŠ์ด์— ๊ฐ€๋ ค์ง„๋‹ค
- [x] ์ž์ฐจ๋„ glTF ๋ฉ”์‹œ (`assets/gltf/ego_car.glb` โ†’ ์ง€๊ธˆ์€ CarConcept, Renault Zoe ๊ธธ์ด 4.1 m ๋กœ).
nuScenes ์ฃผ์ฐจ ์ฐจ๋Ÿ‰ 3DGS ์—์…‹์€ ๋’ท๋ฉด์ด ํ๋ ค ๋Œ€์ฒด. ์ž์ฐจ ์นด๋ฉ”๋ผ ์‹œ์ ยท๊ด€์ธก์—์„œ๋Š” ์ˆจ๊ธด๋‹ค
- [ ] ์›€์ง์ด๋˜ ์ฐจ๊ฐ€ ์ง€์›Œ์ง„ ์ž๋ฆฌ์˜ 3DGS ํ’ˆ์งˆ (ํ•™์Šต ๋•Œ ๊ฐ€๋ ค์ ธ ํฐ ์•ˆ๊ฐœ์ฒ˜๋Ÿผ ๋‚จ๋Š”๋‹ค)
- [ ] ์ž์ฐจ ์œ„์น˜์— ๋”ฐ๋ฅธ ํ™˜๊ฒฝ๋งต ๊ฐฑ์‹  (์—ฌ๋Ÿฌ ์ง€์  ๊ตฝ๊ธฐ, ๋ณด๊ฐ„)
### 2b. ์ปดํ“จํŠธ ํƒ€์ผ ๊ฒฝ๋กœ
- [x] GPU radix ์ •๋ ฌ (๋ณด์ด๋Š” ๊ฒƒ๋งŒ, 2026-10-05 โ€” ์—”์ง„ ๊ฒฝ๋Ÿ‰ํ™” ์ฐธ๊ณ )
- [ ] ๊ฐ€์šฐ์‹œ์•ˆ ํˆฌ์˜ + ํ™”๋ฉด๊ณต๊ฐ„ ๊ณต๋ถ„์‚ฐ (์ปดํ“จํŠธ)
- [ ] 16ร—16 ํƒ€์ผ binning, ํƒ€์ผ๋ณ„ ํ‚ค ์ƒ์„ฑ
- [ ] ํƒ€์ผ๋ณ„ ์ •๋ ฌ + ์ „ํ›„ ๋ธ”๋ Œ๋”ฉ
- [ ] ๋นŒ๋ณด๋“œ ๊ฒฝ๋กœ์™€ ์ˆ˜์น˜ ๋น„๊ต
### 2c. ๋ฉ€ํ‹ฐ๋ทฐ
- [ ] 6๊ฐœ ์นด๋ฉ”๋ผ ๋™์‹œ ๋ Œ๋”๋ง (๋ทฐ๋ณ„ ๋ทฐํฌํŠธ, ํ ์˜ค๋ฒ„๋žฉ)
- [ ] ์˜คํ”„์Šคํฌ๋ฆฐ โ†’ PNG/JPEG ๋คํ”„
- [ ] `nusim render` โ€” ego ๊ถค์  ์ž…๋ ฅ โ†’ nuScenes ๋””๋ ‰ํ„ฐ๋ฆฌ ํฌ๋งท ์ถœ๋ ฅ
**์„ฑ๋Šฅ ๋ชฉํ‘œ.** 6 ร— 1600ร—900 = 8.6 Mpixel/ํ”„๋ ˆ์ž„. closed-loop 10 Hz ๋ฅผ ์œ„ํ•ด
ํ”„๋ ˆ์ž„๋‹น 100 ms ์•ˆ์— ๋“ค์–ด์™€์•ผ ํ•œ๋‹ค.
---
## ํ™”์งˆ ๊ฐœ์„  ๋‹ค์Œ ๋‹จ๊ณ„ โ€” ์กฐ์‚ฌ ๊ฒฐ๊ณผ (docs/research_gs_2026-10.md)
1. MCMCStrategy + opacity/scale ์ •๊ทœํ™” 2. ํ•˜๋Š˜ ๋ถ„๋ฆฌ (ํ๋ธŒ๋งต + ํ•˜๋Š˜ ๋งˆ์Šคํฌ) 3. antialiased ๋ชจ๋“œ
4. ๋ฐ”๋Š˜ ์–ต์ œ ์ •๊ทœํ™” + ๋‹จ์•ˆ ๋ฒ•์„  5. gsplat ์—…๊ทธ๋ ˆ์ด๋“œ 6. PPISP ์ƒ‰ ๋ณด์ •
## ์ „์ฒด ๋งต + ํ•ฉ์„ฑ ๋‚ ์”จ (2026-10-02 ๊ฒฐ์ •)
- ์‹ฑ๊ฐ€ํฌ๋ฅด **์ฃผ๊ฐ„ ์”ฌ๋งŒ**(383์”ฌ ์ค‘ ์•ผ๊ฐ„ ์•ฝ 99ยท์šฐ์ฒœ ์•ฝ 16 ์ œ์™ธ)์œผ๋กœ ์ „์ฒด ๋งต์„ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค. ์•ผ๊ฐ„ยท์šฐ์ฒœ ์žฌ๊ตฌ์„ฑ์€
ํ’ˆ์งˆ์ด ๋‚ฎ๋‹ค (scene-1060 ์‹คํŒจ).
- ๋‚ ์”จยท์กฐ๋„๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ **ํ•ฉ์„ฑ**ํ•œ๋‹ค: ํ๋ฆผ, ๋น„(๋น—์ค„๊ธฐยท์ –์€ ๋…ธ๋ฉดยท๋ Œ์ฆˆ ๋ฌผ๋ฐฉ์šธ), ์•ˆ๊ฐœ, ์–ด๋‘์›€(์ €๋…ยท๋ฐค, ์ „์กฐ๋“ฑ).
๋ทฐ์–ด ์•ˆ **์Šฌ๋ผ์ด๋” UI** ๋กœ ์‹ค์‹œ๊ฐ„ ์กฐ์ ˆํ•˜๊ณ , ๊ฐ™์€ ๊ฐ’์„ ๋ช…๋ น์ค„ยท์Šคํฌ๋ฆฝํŠธ๋กœ๋„ ์ค˜์„œ VLA ์‹œํ—˜์„ ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
6์บ  ๊ด€์ธก์—๋„ ๊ฐ™์€ ๋‚ ์”จ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
- ์ˆœ์„œ: ์ผ๊ด„ ํ•™์Šต ์ „ ๋ฒ„๊ทธ ์ˆ˜์ • โ†’ ์ฃผ๊ฐ„ ์”ฌ ์ผ๊ด„ ํ•™์Šต(GPU) โ†’ ๊ทธ๋™์•ˆ ๋‚ ์”จ ๋ Œ๋”๋งยทUI ๊ฐœ๋ฐœ โ†’ ๋งต ๋‹จ์œ„ ๋กœ๋”.
### ๊ตฌํ˜„ (2026-10-05)
- **์ผ๊ด„ ์žฌ๊ตฌ์„ฑ** `nusim recon batch` โ†’ `outputs/gs_day/<scene>` (์”ฌ๋งˆ๋‹ค ๋ณ„๋„ ํ”„๋กœ์„ธ์Šค, `batch_status.json` ์œผ๋กœ
์ด์–ด ํ•˜๊ธฐ). ์ฃผ๊ฐ„ ์”ฌ 284๊ฐœ(์„ค๋ช…์— night/rain ๋‚ฑ๋ง์ด ์—†๋Š” ์”ฌ โ€” ์‹ฑ๊ฐ€ํฌ๋ฅด ์šฐ์ฒœ ์”ฌ์€ ์ „๋ถ€ ์•ผ๊ฐ„), ์ง€์—ญ ์ˆœ.
์„ค์ •: 15k ์Šคํ…, MCMC, ๋ผ์ด๋‹ค ๊นŠ์ด 0.1, ํ™˜๊ฒฝ ์ „์šฉ, **ํ•˜๋Š˜ ๋ถ„๋ฆฌ**. ํ•˜๋Š˜์„ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ํ•˜๋Š˜ ์ผ๋ถ€๊ฐ€ ๊ฐ€๊นŒ์šด
๋ถˆํˆฌ๋ช… ๊ฐ€์šฐ์‹œ์•ˆ์œผ๋กœ ๊ตฌ์›Œ์ ธ(scene-0003: 9 m ๊ฑฐ๋ฆฌ์˜ ๋ฐ์€ ๋ฉ์–ด๋ฆฌ) ํ•ฉ์„ฑ ๋‚ ์”จ์—์„œ ํ•˜๋Š˜์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.
- **ํ•ฉ์„ฑ ๋‚ ์”จ** `shaders/weather.comp` โ€” ๋ Œ๋” ํŒจ์Šค์— ๊ฑฐ๋ฆฌ ๋ˆ„์  ์ฒจ๋ถ€(์ง€๊ธˆ์€ RG32F (ฮฃzฮฑ, ฮฃฮฑ), docs/architecture.md)๋ฅผ ๋”ํ•˜๊ณ ,
์ƒ‰ + ๊ฑฐ๋ฆฌ๋กœ ํ›„์ฒ˜๋ฆฌ: ์‹œ๊ฐ„๋Œ€(๋…ธ์ถœยท์ƒ‰์˜จ๋„ยท๋ฐคํ•˜๋Š˜), ๊ตฌ๋ฆ„(์ฑ„๋„ยท๋Œ€๋น„ยทํšŒ์ƒ‰ ํ•˜๋Š˜), ์ „์กฐ๋“ฑ(์ž์ฐจ ์•ž ์›๋ฟ”, ๋ฐ˜์‚ฌ์œจ = ๋‚ฎ ์ƒ‰),
๋น„(์ –์€ ๋…ธ๋ฉด ์–ด๋‘ก๊ฒŒ + ํ™”๋ฉด ๊ณต๊ฐ„ ๋ฐ˜์‚ฌ + ๋น—์ค„๊ธฐ + ๋ฌผ์•ˆ๊ฐœ), ์•ˆ๊ฐœ(๊ฑฐ๋ฆฌ ์ง€์ˆ˜ ๊ฐ์‡ ). ๋„๋ฉด ์ž…๋ ฅ์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ โ€”
์ด์ „ ๋ Œ๋”์™€ ๋น„ํŠธ ๋‹จ์œ„๋กœ ๊ฐ™๋‹ค. `--weather night` ๊ฐ™์€ ํ”„๋ฆฌ์…‹ ๋˜๋Š” `daylight=,cloud=,rain=,fog=,wet=,headlights=`.
- **์Šฌ๋ผ์ด๋” UI** Dear ImGui 1.91.9 (MIT, third_party/imgui) โ€” ์ฐฝ ์™ผ์ชฝ ์œ„ ํŒจ๋„(F1 ์ˆจ๊ธฐ๊ธฐ), ํ”„๋ฆฌ์…‹ 8๊ฐœ,
์Šฌ๋ผ์ด๋” 5๊ฐœ, ์ „์กฐ๋“ฑ ์ž๋™/๋”/์ผฌ. ํŒจ๋„์€ ํ™”๋ฉด์—๋งŒ ๊ทธ๋ฆฌ๊ณ , 6์บ  ๊ด€์ธกยทPNG ์—๋Š” ๋‚ ์”จ๋งŒ ๋“ค์–ด๊ฐ„๋‹ค.
- ํ•œ๊ณ„: 3DGS ์ƒ‰์€ ๋‚ฎ์˜ ์กฐ๋ช…์ด ๊ตฌ์›Œ์ง„ ์ƒ‰์ด๋ผ ๋ฐคยท์ „์กฐ๋“ฑ์€ ๊ทธ ์ƒ‰์„ ๋ฐ˜์‚ฌ์œจ ๋Œ€์‹  ์“ด๋‹ค. ๊ตฌ์›Œ์ง„ ๊ทธ๋ฆผ์ž๋Š” ํ๋ฆผ์—์„œ๋„
๋‚จ๋Š”๋‹ค. ์ –์€ ๋…ธ๋ฉด ๋ฐ˜์‚ฌ๋Š” ํ™”๋ฉด ๊ณต๊ฐ„์ด๋ผ ํ™”๋ฉด ๋ฐ–ยท๊ฐ€๋ ค์ง„ ๊ฒƒ์€ ๋น„์น˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ€๋กœ๋“ฑ ๊ฐ™์€ ๋ฐค ๊ด‘์›์€ ์•„์ง ์—†๋‹ค.
### ์‹œ๋ฒ” ์”ฌ ์‹คํŒจ ์›์ธ: ๋น ๋ฅธ ์ฃผํ–‰ (2026-10-05)
| ์”ฌ | ํ‰๊ท  ์†๋„ | ๊ฒฝ๋กœ | 15k PSNR |
|---|---|---|---|
| scene-0003 | 1.5 m/s | 29 m | 23.66 |
| scene-0184 | 5.6 m/s | 108 m | 17.54 |
| scene-0402 | 11.9 m/s | 235 m | 16.23 |
scene-0402 ๋ฅผ `--time-window` ๋กœ ์ž˜๋ผ 2k ์Šคํ… ํ•™์Šต: 2.5์ดˆ 21.75 dB, 5์ดˆ 20.88 dB (default ์ „๋žต 20.45), ์ „์ฒด 20์ดˆ๋Š” 15.5~16.3 dB.
์ „๋žต(MCMC/default)ยท๊นŠ์ด ๊ฐ๋…ยท์นด๋ฉ”๋ผ ๋ณด์ •์€ ์›์ธ์ด ์•„๋‹ˆ๊ณ , ์žฅ๋ฉด ๊ธธ์ด๊ฐ€ ์›์ธ์ด๋‹ค. ํ•™์Šต ์†์‹ค๋ถ€ํ„ฐ ๋†’์œผ๋‹ˆ(L1 0.135 vs 0.05)
์ผ๋ฐ˜ํ™”๊ฐ€ ์•„๋‹ˆ๋ผ ์ ํ•ฉ ์‹คํŒจ๋‹ค. **๋Œ€์‘: ๋น ๋ฅธ ์”ฌ์€ ์‹œ๊ฐ„ ๊ตฌ๊ฐ„(์•ฝ 5์ดˆ, 60 m)๋ณ„๋กœ ๋‚˜๋ˆ  ์žฌ๊ตฌ์„ฑํ•œ๋‹ค.** ๋งต ๋‹จ์œ„ ๋กœ๋”๊ฐ€
๊ตฌ๊ฐ„์„ ์ด์–ด ๋ถ™์ธ๋‹ค. ์ผ๊ด„ ํ•™์Šต(`recon batch`)์— ๊ตฌ๊ฐ„ ๋ถ„ํ• ์„ ๋„ฃ์€ ๋’ค ๋ณธ ๋ฐฐ์น˜๋ฅผ ๋Œ๋ฆฐ๋‹ค.
### ์ฐจ๋Ÿ‰ ๋™์‹œ ํ•™์Šต + ์žฅ๋ฉด ๊ฐ์ฒด ์—์…‹ (2026-10-06)
๋ฐฉํ–ฅ ์ „ํ™˜: ์ฐจ๋Ÿ‰์„ ์ง€์šฐ์ง€ ์•Š๊ณ  **๊ฐ์ฒด ๊ฐ€์šฐ์‹œ์•ˆ์œผ๋กœ ๋ฐฐ๊ฒฝ๊ณผ ํ•จ๊ป˜ ํ•™์Šต**ํ•œ๋‹ค (`nusim recon train --objects vehicles`,
`nusim/recon/objects.py`). ์ฐจ๋Ÿ‰ instance ๋งˆ๋‹ค ๋ฐ•์Šค ๋กœ์ปฌ ๊ฐ€์šฐ์‹œ์•ˆ, ๋ทฐ ์‹œ๊ฐ์˜ ๋ฐ•์Šค ์ž์„ธ(์ฃผ์ฐจ = ๋Œ€ํ‘œ ์ž์„ธ, ์›€์ง์ž„ = ํ‚คํ”„๋ ˆ์ž„ ๋ณด๊ฐ„)๋กœ
์˜ฎ๊ฒจ ๋ฐฐ๊ฒฝ๊ณผ ํ•œ ๋ฒˆ์— ๋ž˜์Šคํ„ฐํ™”. ๊ฐ€์šฐ์‹œ์•ˆ์˜ ๊ฐ์ฒด ๋ฒˆํ˜ธ๋Š” ํ•™์Šต๋ฅ  0 ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ gsplat ์ „๋žต(๋ณต์ œยท๋ถ„ํ• ยท์žฌ๋ฐฐ์น˜)์ด ๊ฐ™์ด ์˜ฎ๊ธด๋‹ค.
์‚ฌ๋žŒยท์ž์ „๊ฑฐ๋Š” ์•„์ง ๊ฐ€๋ฆฐ๋‹ค. ์ฐจ๋Ÿ‰ ํ”ฝ์…€์€ ๊นŠ์ด ์†์‹ค์—์„œ ๋บ€๋‹ค (์ •์  ๋ผ์ด๋‹ค ๊นŠ์ด๋Š” ์ฐจ ๋’ค ๋ฐฐ๊ฒฝ).
| scene-0003, 15k, MCMC + ๊นŠ์ด | ์ „์ฒด ์˜์ƒ PSNR | ์ •์  PSNR | SSIM |
|---|---|---|---|
| ํ™˜๊ฒฝ ์ „์šฉ (์ฐจ๋Ÿ‰ ์ง€์›€) | 21.82 | 23.66 (์ฐจ๋Ÿ‰ ๊ฐ€๋ฆผ) | 0.764 |
| **์ฐจ๋Ÿ‰ ๋™์‹œ ํ•™์Šต** | **23.51** | 23.62 (์ฐจ๋Ÿ‰ ํฌํ•จ, ์‚ฌ๋žŒ๋งŒ ๊ฐ€๋ฆผ) | 0.763 |
60k (`_env` ์™€ ๊ฐ™์€ ๋ ˆ์‹œํ”ผ, `outputs/gs/scene-0003_veh60`, 93๋ถ„): ์ „์ฒด ์˜์ƒ **24.78** / ์ •์  24.97 / SSIM 0.789 โ€” `_env` 60k ๋Š” ์ „์ฒด
22.81 / ์ •์ (์ฐจ๋Ÿ‰ ๊ฐ€๋ฆผ) 25.03. ์ฐจ๋Ÿ‰์„ ๋„ฃ๊ณ ๋„ ๋ฐฐ๊ฒฝ ํ’ˆ์งˆ์€ ๊ฐ™๊ณ  ์ „์ฒด ์˜์ƒ์€ +2.0 dB. (`recon eval` ์ด ๋ฐฐ๊ฒฝ ply ๋งŒ ๊ทธ๋ ค 21.99 ๋กœ
๋‚˜์˜ค๋˜ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์นจ โ€” `recon.objects.load_objects` ๋กœ ์—์…‹์„ ๋‹ค์‹œ ๋ถ™์ธ๋‹ค.)
๋‹จ, ์ด 60k ๋ชจ๋ธ์€ ์ฐจ๋Ÿ‰ 35๋Œ€ ์ค‘ 17๋Œ€๋งŒ ๋‚จ์•˜๋‹ค โ€” MCMC ์žฌ๋ฐฐ์น˜๊ฐ€ ๋ถˆํˆฌ๋ช…๋„ โ‰ค 0.005 ์ธ ๊ฐ€์šฐ์‹œ์•ˆ์„ ๋‹ค๋ฅธ ์ž๋ฆฌ๋กœ ์˜ฎ๊ธฐ๋ฉฐ ๊ฐ์ฒด ๋ฒˆํ˜ธ๋„
๊ฐ™์ด ์˜ฎ๊ฒจ, ์ž ๊น ๋ณด์ธ ์ฐจ๊ฐ€ ๊ฐ€์šฐ์‹œ์•ˆ์„ ๋‹ค ์žƒ์—ˆ๋‹ค. ๊ฐ์ฒด ๊ฐ€์šฐ์‹œ์•ˆ์„ ์ „๋ถ€ ์ง€ํ‚ค๋ฉด(v2, `_veh60p`) ๋ฐ˜๋Œ€๋กœ ์ฐจ๋Ÿ‰์ด 200๋งŒ ์ค‘ 178๋งŒ ๊ฐœ
(๋Œ€๋ถ€๋ถ„ ฮฑ<0.01)๋ฅผ ๋นจ์•„๋“ค์ด๊ณ  ๋ฐฐ๊ฒฝ์ด 22๋งŒ ๊ฐœ๋กœ ์ค„์—ˆ๋‹ค โ€” ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ (1) ์‚ด์•„ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ตœ์†Œ์น˜(์ดˆ๊ธฐ์˜ ์ ˆ๋ฐ˜, ์ตœ์†Œ 200) ์•„๋ž˜์ธ
์ฐจ๋Ÿ‰๋งŒ ์žฌ๋ฐฐ์น˜์—์„œ ์ง€ํ‚ค๊ณ , (2) ๊ฐ์ฒด ๊ฐ€์šฐ์‹œ์•ˆ์„ ๋ฐ•์Šค(+0.15 m) ์•ˆ์— ๋ฌถ๋Š”๋‹ค (MCMC ์žก์Œยท์žฌ๋ฐฐ์น˜ ๋’ค). 3k ์ ๊ฒ€: 35๋Œ€, ํ•ฉ๊ณ„ 4.5๋งŒ,
๋ฐ•์Šค ๋ฐ– ์ตœ๋Œ€ 0.15 m. ์žฌํ•™์Šต `nusim run veh_60k_v3` โ†’ `outputs/gs/scene-0003_veh60c`.
์ž์ฐจ โ†” ์žฅ๋ฉด ๊ฐ์ฒด ์ถฉ๋Œ: `drive.hpp` `vehicle_contact(..., others)` โ€” ๊ฐ์ฒด ๋ฐ•์Šค์˜ ๋ฐ”๋‹ฅ ์‚ฌ๊ฐํ˜•(`Footprint`)์„ ์ฐจ์ฒด ์ƒ˜ํ”Œ๋กœ ๋ณธ๋‹ค
(์žฅ์• ๋ฌผ ์ง€๋„๋Š” ์ฐจ๋Ÿ‰์„ ์ง€์šด ๋ฐฐ๊ฒฝ์ด๋ผ ๋”ฐ๋กœ). ๊ธฐ๋ก ๊ถค์ ์„ ์žฌ์ƒํ•˜๋Š” ์ฐจ๋Š” ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์ž๋ฆฌ๋ฅผ ๊ฐฑ์‹ . ์ง€์šด ๊ฐ์ฒด๋Š” ๋น ์ง„๋‹ค. ์•„์ง ์ƒ๋Œ€ ์ฐจ๋Š”
๋ฐ˜์‘ํ•˜์ง€ ์•Š๋Š”๋‹ค (์ž์ฐจ๊ฐ€ ๋ฉˆ์ถœ ๋ฟ, ๋ฐ€๊ฑฐ๋‚˜ ํ”ผํ•˜์ง€ ์•Š์Œ).
์ฐจ๋Ÿ‰ ์˜์—ญ๋„ ๋ฐฐ๊ฒฝ๋งŒํผ ํ•™์Šต๋œ๋‹ค (์ •์  PSNR ์ด ์ฐจ๋Ÿ‰์„ ํฌํ•จํ•ด๋„ ๊ฐ™๋‹ค). ๊ฒฐ๊ณผ: ๋ฐฐ๊ฒฝ `point_cloud.ply` + `objects/<instance>_<์ข…๋ฅ˜>.ply`
(๋ฐ•์Šค ๋กœ์ปฌ, ๋ฐ”๋‹ฅ ์ค‘์•™ ์›์ ) + `objects/objects.json` (๋ฒ”์ฃผยทํฌ๊ธฐยท๊ถค์ ) โ€” 31๋Œ€.
๋ทฐ์–ด `--objects DIR`: ๊ฐ์ฒด ๊ฐ€์šฐ์‹œ์•ˆ์€ ๋ฐฐ๊ฒฝ๊ณผ ๋‹ค๋ฅธ ๋ฒ„ํผ, ๊ฐ์ฒด ํ‘œ(SSBO)๋กœ ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์ž์„ธ โ€” ์ถ”๊ฐ€ยท์‚ญ์ œ ๋•Œ ๋ฐฐ๊ฒฝ์„ ๋‹ค์‹œ ์˜ฌ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค
(`src/vkgs/src/scene_objects.hpp`). **K** ๊ฐ์ฒด ์ฐฝ โ†’ ํŽธ์ง‘ ๋ชจ๋“œ: ํด๋ฆญ ์„ ํƒ(๋…ธ๋ž€ ๋ฐ•์Šค), ๋“œ๋ž˜๊ทธ ์ด๋™, ํœ  ํšŒ์ „, Delete ์‚ญ์ œ,
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—์…‹ ์ถ”๊ฐ€(ํด๋ฆญํ•œ ์ง€๋ฉด), ์ €์žฅ(`objects.json`, ์›๋ณธ์€ `objects.orig.json`). `render view`ยท`aug rig` ๋Š” ๋ชจ๋ธ์— `objects/`
๊ฐ€ ์žˆ์œผ๋ฉด ์ž๋™์œผ๋กœ ๋„˜๊ธด๋‹ค. ์‹œ์  ์ฆ๊ฐ•(`outputs/aug/rig_veh`)์— ์ฐจ๋Ÿ‰์ด ์ œ์ž๋ฆฌ์— ๋‚˜์˜จ๋‹ค.
๋‚จ์€ ๊ฒƒ: ์ž์ฐจ์™€ ๊ฐ์ฒด ๋ฐ•์Šค ์ถฉ๋Œ, ๊ฐ์ฒด๋ฅผ ์ฐจ์„  ๋”ฐ๋ผ ์›€์ง์ด๊ธฐ(์ง€๊ธˆ์€ ๊ธฐ๋ก ๊ถค์ ยท๊ณ ์ •), ์‚ฌ๋žŒ(๋น„๊ฐ•์ฒด), ๊ฐ์ฒด ํฌ์ฆˆ ๋ณด์ • ํ•™์Šต.
### ๋ฉ€ํ‹ฐ ์ฃผํ–‰ ํƒ€์ผ (2026-10-06)
๊ฐ™์€ ๊ณณ์„ ์—ฌ๋Ÿฌ ๋‚  ์—ฌ๋Ÿฌ ์ฐจ์„ ์œผ๋กœ ์ง€๋‚˜๊ฐ„ ์ฃผํ–‰์„ ํ•œ ๋ชจ๋ธ๋กœ ํ•™์Šตํ•œ๋‹ค (`nusim recon train <anchor> --tile <์ด๋ฆ„>`,
`nusim/recon/tile.py`, ํƒ€์ผ ์ •์˜ `configs/tiles/*.json`). ์ž์ฐจ๊ฐ€ 80 m ์ •์‚ฌ๊ฐํ˜• ์•ˆ์— ์žˆ๋˜ ์‹œ๊ฐ„ ๊ตฌ๊ฐ„๋งŒ ์“ฐ๊ณ , ์›์ ์€ anchor ์”ฌ
๊ฒƒ์ด๋ผ ๋‹จ์ผ ์”ฌ ๋ชจ๋ธ๊ณผ ๊ฐ™์€ ์ขŒํ‘œ๋‹ค. ๊ธฐํ•˜๋Š” ๊ณต์œ , ์ƒ‰ ๋ณด์ •ยท์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ •์€ ์ฃผํ–‰๋ณ„ (cam_id = ์ฃผํ–‰ ร— 6 + ์นด๋ฉ”๋ผ;
`camera_adjust.pt` ๋Š” ๊ธฐ์ค€ ์ฃผํ–‰ 6๋Œ€๋งŒ โ€” ๋ทฐ์–ด ํ˜ธํ™˜, ์ „์ฒด๋Š” `camera_adjust_tile.pt`). ๋‹ค๋ฅธ ๋‚ ์˜ ์ฃผ์ฐจ ์ฐจ๋Ÿ‰์ด ๋‹ฌ๋ผ `--objects agents`
๋งŒ ์ง€์›ํ•œ๋‹ค.
ํ‰๊ฐ€ `nusim recon tile-eval <ํƒ€์ผ> --dir A --dir B`: ํ•™์Šต์—์„œ ํ†ต์งธ๋กœ ๋บ€ ์ฃผํ–‰์˜ ์‹ค์ œ ์‚ฌ์ง„ = ์‹ค์ œ ์ฐจ์„  ๋ณ€๊ฒฝ ์‹œ์ ์˜ ์ •๋‹ต.
์™ธ๊ด€(๋‚ ยท์‹œ๊ฐ)์ด ๋‹ค๋ฅด๋ฏ€๋กœ ์ด๋ฏธ์ง€๋งˆ๋‹ค 3ร—4 ์ƒ‰ ์•„ํ•€์„ ๋งž์ถ˜ ๋’ค PSNRยทSSIM (์‚ฌ๋žŒยท์ฐจ๋Ÿ‰ ๊ฐ€๋ฆผ, 30% ๋ฏธ๋งŒ๋งŒ ๋‚จ์€ ๋ทฐ๋Š” ์ œ์™ธ โ€” ์˜† 2~4 m ์˜
์ฃผ์ฐจ ์Šนํ•ฉ์ฐจ๊ฐ€ ์ธก๋ฉด ์นด๋ฉ”๋ผ๋ฅผ ๋‹ค ๊ฐ€๋ฆฐ๋‹ค). ํ•™์Šต ์นด๋ฉ”๋ผ์—์„œ์˜ ๊ฑฐ๋ฆฌ๋ณ„๋กœ๋„ ๋‚˜๋ˆˆ๋‹ค.
scene-0003 ํƒ€์ผ (`onenorth_0003`): ๋‚ฎ ์ฃผํ–‰ 17๊ฐœ๊ฐ€ ์ง€๋‚˜๊ฐ„๋‹ค. ํ•™์Šต 6๊ฐœ(0003ยท0120ยท0045ยท0134ยท0968ยท0133, 6,551๋ทฐ), ํ‰๊ฐ€ 2๊ฐœ
(0127 3.9 m ์˜†, 0969 4.1 m ์˜†). ์ ๊ฒ€(2์ฃผํ–‰ 300์Šคํ…, 0127): ํƒ€์ผ 16.79 dB vs ๋‹จ์ผ ์”ฌ `_env` 60k 15.95 dB โ€” ์ฝ”๋“œ ์ ๊ฒ€์ผ ๋ฟ.
๋ณธ ์‹คํ—˜ `nusim run tile_0003` (150k).
**๊ฒฐ๊ณผ (2026-10-07): ์‹คํŒจ, ์›์ธ ๋ฏธํ™•์ • โ€” ๋ณด๋ฅ˜.** 150k ํƒ€์ผ ๋ชจ๋ธ์€ ์ž๊ธฐ ์ฃผํ–‰ ํ‰๊ฐ€ ๋ทฐ์—์„œ๋„ 16.9 dB (์ƒ‰ ๋ณด์ • ์—†์ด 6.9 dB โ€”
์ƒ‰ ๋ณด์ •์ด ๊ธฐํ•˜ ๋Œ€์‹  ๋งž์ถ”๊ณ  ์žˆ์—ˆ๋‹ค), ์ฐจ์„  ๋ณ€๊ฒฝ ์‹œ์  376๋ทฐ์—์„œ 15.86 dB ๋กœ ๋‹จ์ผ ์”ฌ(`_env` 16.46, `_veh60c` 16.52)๋ณด๋‹ค ๋‚ฎ๋‹ค.
๋ Œ๋”๋Š” ๋‹จ์ƒ‰ ๋ง‰์ด๋‚˜ ์‹ฌํ•œ ๋ฒˆ์ง. ํ™•์ธํ•œ ๊ฒƒ:
- ๊ธฐ์ค€ ์”ฌ 0003 ์ž์„ธ๊ฐ€ ๋‹ค๋ฅธ ์ฃผํ–‰ ๋Œ€๋น„ yaw 1.3ยฐยทroll 1ยฐ ์–ด๊ธ‹๋‚จ โ†’ ์ฃผํ–‰๋ณ„ ๋ผ์ด๋‹ค ICP ์ •ํ•ฉ(`align.json`, 17โ€“27 cm โ†’ 9โ€“12 cm)์œผ๋กœ ๊ณ ์นจ. ๊ฒฐ๊ณผ๋Š” ๊ทธ๋Œ€๋กœ.
- ์ฃผํ–‰ 1๊ฐœ ํƒ€์ผ = ์ผ๋ฐ˜ ํ•™์Šต (3k: 19.8 vs 19.6), ์ฃผํ–‰ 2๊ฐœ ์ •์ƒ (18.2/18.9). 6๊ฐœ๋ฉด 3k ์Šคํ… ์ดํ›„ ๊ณ„์† ๋ฌด๋„ˆ์ง„๋‹ค.
- 10 m ๋„˜๋Š” ๊ฑฐ๋Œ€ ๊ฐ€์šฐ์‹œ์•ˆ์ด ํ•˜๋Š˜์„ ํก์ˆ˜ โ†’ ํ•˜๋Š˜ ๋ถ„๋ฆฌ๋ฅผ ํƒ€์ผ์— ์—ฐ๊ฒฐ. ์—ฌ์ „ํžˆ ๋ฌด๋„ˆ์ง.
- ์ •๊ทœํ™” ๋ฒŒ์ ์„ ๋ชจ๋“  ๊ฐ€์šฐ์‹œ์•ˆ์— ๊ฑธ๋ฉด ๋„“์€ ํƒ€์ผ์—์„œ 63% ๊ฐ€ ์ฃฝ๋Š”๋‹ค โ†’ ๋ณด์ด๋Š” ๊ฒƒ๋งŒ ๋ฒŒ์  (2k 19.2 dB ๋กœ ๊ฐœ์„ ). ๊ทธ๋ž˜๋„ 3k ์ดํ›„ ํ•˜๋ฝ.
- ์žฅ๋ฉด ํฌ๊ธฐยทSH ์ฐจ์ˆ˜ยท์นด๋ฉ”๋ผ ๋ณด์ •ยท๊นŠ์ด ์žฌํˆฌ์˜์€ ์›์ธ ์•„๋‹˜. ๋‚จ์€ ์˜์‹ฌ: ์ƒ‰ ๋ณด์ •์˜ ๋ทฐ๋ณ„ ๋ฐ๊ธฐ ํ•ญ, ๊นŠ์ด ๊ฐ๋….
### ๋งต ์ „์ฒด ์‹œ์  ๋ณ€ํ˜• ์ฆ๊ฐ• (2026-10-08)
๋ฐฉํ–ฅ: ํƒ€์ผ์„ ๋ณด๋ฅ˜ํ•˜๊ณ  ๋‚ฎ 284์”ฌ ์ „์ฒด๋ฅผ ์‹œ์  ๋ณ€ํ˜•์œผ๋กœ ์ฆ๊ฐ•ํ•ด ์‹ฑ๊ฐ€ํฌ๋ฅด ๋‚ฎ ๋งต ์ „์ฒด๋ฅผ ๋ฎ๋Š”๋‹ค. `nusim run day_map`:
1. `recon batch` โ€” ์ด๋™ ๊ฑฐ๋ฆฌ 60 m ๋„˜๋Š” ์”ฌ์€ ๊ฐ™์€ ๊ธธ์ด ๊ตฌ๊ฐ„(๊ฒน์นจ 10 m)์œผ๋กœ ๋‚˜๋ˆ  `--time-window` ํ•™์Šต
(`plan_segments`, ๊ฒฐ๊ณผ `outputs/gs_day/<scene>/seg<k>/` + `segment.json`). 284์”ฌ โ†’ 696 ํ•™์Šต ๋‹จ์œ„. init.ply ๋Š” ํ•™์Šต ๋’ค ์ง€์šด๋‹ค.
2. ์”ฌ์˜ ๊ตฌ๊ฐ„์ด ๋‹ค ๋๋‚˜๋ฉด `aug map <scene>` โ€” CAM_FRONT ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๊ทธ ์‹œ๊ฐ์„ '๋งก๋Š”' ๊ตฌ๊ฐ„(๊ฒน์นจ ๊ฐ€์šด๋ฐ์—์„œ ์ž๋ฅธ, ๊ฒน์น˜์ง€ ์•Š๋Š”
๊ตฌ๊ฐ„)์˜ ๋ชจ๋ธ๋กœ ๋ Œ๋”. ๋‚ ์”จ ์—†๋Š” ๋ณ€ํ˜• 9์ข…, ํ‚คํ”„๋ ˆ์ž„ 2 Hz, ์ง€์šด ์ฐจ๋Ÿ‰์€ glTF ๋กœ ๋‹ค์‹œ (IBL ์—†์œผ๋ฉด ๊ตฝ๋Š”๋‹ค) โ†’ `outputs/aug/map/<scene>/<variant>/`.
๋ณ€ํ˜• 1๊ฐœ = ์•ฝ 6.8๋งŒ ์žฅ, 9์ข… ์•ฝ 135 GB. scene-0003 ๋ณ€ํ˜• ํ•˜๋‚˜ 20์ดˆ.
- ์‹œ๋ฒ” scene-0402 (11.9 m/s, 235 m โ†’ 5๊ตฌ๊ฐ„): ์ •์  PSNR 23.78 / 22.76 / 23.04 / 23.02 / 22.70 dB (์”ฌ ํ†ต์งธ 16.23), ๊ตฌ๊ฐ„๋‹น ์•ฝ 20๋ถ„.
์ฆ๊ฐ• left_1m ์˜ ๊ตฌ๊ฐ„ ๊ฒฝ๊ณ„ ํ”„๋ ˆ์ž„ 4์Œ์— ์ƒ‰ยท๊ธฐํ•˜ ์ด์Œ๋งค๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. ๊ตฌ๊ฐ„ ๋ชจ๋ธ์˜ IBL ์€ ๊ทธ ํ•™์Šต ๊ตฌ๊ฐ„์œผ๋กœ ์ž๋ฅธ ์”ฌ์œผ๋กœ ๊ตฝ๋Š”๋‹ค
(์ƒ‰ ๋ณด์ • ํฌ๊ธฐ๊ฐ€ ๊ตฌ๊ฐ„ ๋ทฐ ์ˆ˜).
- 2026-10-09 23:19 ์ˆœ์„œ๋ฅผ ๋„๋กœ ์ปค๋ฒ„๋ฆฌ์ง€ ์šฐ์„ ์œผ๋กœ ๋ฐ”๊ฟ” ๋‹ค์‹œ ์‹œ์ž‘ (`--order coverage`, `coverage_order`): ๊ทธ๋•Œ๊นŒ์ง€ ํ•™์Šต ๋‹จ์œ„ 83/696,
๋„๋กœ 10 m ์นธ 2,432๊ฐœ ์ค‘ 17%. ๋‚จ์€ ์”ฌ์„ ์ƒˆ ๋„๋กœ๋ฅผ ๋งŽ์ด ๋ฎ๋Š” ์ˆœ์œผ๋กœ ํ•˜๋ฉด ํ•™์Šต ๋‹จ์œ„ ์•ฝ 317๊ฐœ(์•ฝ 5์ผ)์— 90%, 470๊ฐœ(์•ฝ 7.5์ผ)์— 100%.
๋ผ์ด๋‹คยท๋ ˆ์ด๋” ํ•ฉ์„ฑ์€ ์‚ฌ์šฉ์ž ๊ฒฐ์ •์œผ๋กœ ๋ณด๋ฅ˜ (์นด๋ฉ”๋ผ๋งŒ ์œ ์ง€).
- 2026-10-10 18:44 ๋ถ€ํ„ฐ ์•ฝ 40๋ถ„ ๋ฐ์ดํ„ฐ์…‹ NAS ๊ฐ€ Input/output error โ€” ๋‹จ์œ„๋งˆ๋‹ค 13์ดˆ ๋งŒ์— ์‹คํŒจํ•˜๊ณ  ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€ 178 ๋‹จ์œ„(์•ฝ 55์”ฌ)๊ฐ€
์‹คํŒจ๋กœ ๋‚จ์•˜๋‹ค (scene-0378 seg0 ์€ ํ•™์Šต์€ ๋๋Š”๋ฐ ํ‰๊ฐ€๊ฐ€ nan). `recon batch` ๋ฅผ ๊ณ ์ณค๋‹ค: ๋‹จ์œ„ ์‹œ์ž‘ ์ „ ๋ฐ์ดํ„ฐ์…‹์ด ์ฝํžˆ๋Š”์ง€ ๋ณด๊ณ  ์•ˆ ์ฝํžˆ๋ฉด
๊ธฐ๋‹ค๋ฆฌ๊ณ , I/O ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•œ ๋‹จ์œ„๋Š” ๊ธฐ๋‹ค๋ ธ๋‹ค ์ตœ๋Œ€ 3๋ฒˆ, ํ‰๊ฐ€๊ฐ€ ๋นˆ ๋‹จ์œ„๋Š” ํ‰๊ฐ€๋งŒ ๋‹ค์‹œ, ํ•œ ๋ฐ”ํ€ด ๋’ค ์‹คํŒจ๊ฐ€ ๋‚จ์œผ๋ฉด ๊ทธ๊ฒƒ๋งŒ ๋‹ค์‹œ ๋ˆ๋‹ค.
- ๋ณธ ๋ฐฐ์น˜ ์‹œ์ž‘ 2026-10-08 15:12 (`setsid nohup nusim run day_map`, ๋กœ๊ทธ `outputs/gs_day/batch.log`).
- **๋ณธ ๋ฐฐ์น˜ ์™„๋ฃŒ 2026-10-27 02:44** (์žฌ๊ฐœ๋ถ„ ํฌํ•จ 242์‹œ๊ฐ„): ๋‚ฎ 284์”ฌ ์ „๋ถ€ ยท ๊ตฌ๊ฐ„ 696๊ฐœ ์‹คํŒจ 0 ยท ๋„๋กœ ์ปค๋ฒ„๋ฆฌ์ง€ 100% (10 m ์นธ 2446/2446)
ยท ์ •์  PSNR ํ‰๊ท  25.0 dB, 22 dB ๋ฏธ๋งŒ 43๊ตฌ๊ฐ„. ArtiFixer ์ฆ๊ฐ• 284์”ฌ (์ฐฝ ๋ทฐ์–ด๊ฐ€ VRAM ์„ ์žก์€ ๋™์•ˆ 13์”ฌ์ด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ โ†’ ๋ฐฐ์น˜ ๋’ค ์žฌ์‹คํ–‰).
์‚ฐ์ถœ๋ฌผ `outputs/gs_day` 333 GB ยท `outputs/aug` 132 GB. ๊ทธ๋ฆผ `outputs/coverage/map_coverage_20261029.png` (`scripts/map_coverage.py`).
- **๊ตฌ๊ฐ„ ์ด์–ด ๋‹ฌ๋ฆฌ๊ธฐ (๋งต ๋กœ๋” 1์ฐจ, 2026-10-09):** `nusim render view <scene>` ์ด ๊ตฌ๊ฐ„์œผ๋กœ ๋‚˜๋‰œ ์”ฌ(`outputs/gs_day/<scene>/seg*`)์„
์•Œ์•„๋ณด๊ณ  `<scene>/` ์— ๊ณตํ†ต ์›์ (๊ตฌ๊ฐ„ 0) ๊ธฐ์ค€ ๋ฆฌ๊ทธยท๋งต ์„ ยท์ฃผํ–‰๊ฐ€๋Šฅ์˜์—ญยท์žฅ์• ๋ฌผ ์ง€๋„์™€ `segments.txt`(๊ตฌ๊ฐ„๋ณ„ ์›์  ์ฐจ์ดยท๋งก๋Š” ๊ถค์  ์ )๋ฅผ
์“ด๋‹ค (`nusim/render/segmap.py`). ๋ทฐ์–ด `--segments` (`src/vkgs/src/segment_map.hpp`, viewer.cpp `SegmentStreamer`)๋Š” ์ž์ฐจ ์œ„์น˜์—์„œ
๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ตฌ๊ฐ„ ํ•˜๋‚˜๋ฅผ ๊ทธ๋ฆฌ๊ณ (3 m ํžˆ์Šคํ…Œ๋ฆฌ์‹œ์Šค), ์ด์›ƒ ๊ตฌ๊ฐ„ ply ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฏธ๋ฆฌ ์ฝ์–ด ๋‘์—ˆ๋‹ค๊ฐ€ ๊ฒฝ๊ณ„์—์„œ GPU ๋ฒ„ํผ ๋‚ด์šฉ๋งŒ
๋ฐ”๊พผ๋‹ค (๋ฒ„ํผ๋Š” ๊ฐ€์žฅ ํฐ ๊ตฌ๊ฐ„ ํฌ๊ธฐ๋กœ ํ•œ ๋ฒˆ ์žก์Œ). ๋‘ ๊ตฌ๊ฐ„์„ ๊ฐ™์ด ๊ทธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค โ€” 10 m ๊ฒน์นจ์ด ๊ฒฝ๊ณ„ ์–‘์ชฝ์„ ๋ฎ๋Š”๋‹ค.
scene-0402 ์ „์ฒด 238ํ”„๋ ˆ์ž„ ์˜คํ”„์Šคํฌ๋ฆฐ: ๊ตฌ๊ฐ„ 4๋ฒˆ ๋ฐ”๋€œ, ๊ฒฝ๊ณ„ ์•ž๋’ค ํ”„๋ ˆ์ž„ ์ด์Œ๋งค ์—†์Œ. ๋ฐ”๊ฟ€ ๋•Œ 0.19์ดˆ ๋ฉˆ์นซ (480 MB ์—…๋กœ๋“œ + ์žฅ์น˜ ๋Œ€๊ธฐ),
ply ์ฝ๊ธฐ ์•ฝ 2.7์ดˆ (12 m/s ๋กœ ํ•œ ๊ตฌ๊ฐ„ ์•ฝ 4์ดˆ๋ผ ๋ฏธ๋ฆฌ ์ฝ๊ธฐ๊ฐ€ ๋”ฐ๋ผ๊ฐ„๋‹ค). ์˜คํ”„์Šคํฌ๋ฆฐ ๋ฆฌ๊ทธ ๋ Œ๋”๋„ ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๊ทธ ๊ตฌ๊ฐ„์œผ๋กœ ๊ทธ๋ฆฐ๋‹ค.
๋‹ค์Œ: ๋‘ ๋ฒ„ํผ๋กœ ๋ฉˆ์นซ ์—†์• ๊ธฐ, ์”ฌ ์‚ฌ์ด(๋‹ค๋ฅธ ์ฃผํ–‰) ์ž‡๊ธฐ โ€” ์—ฌ๋Ÿฌ ์”ฌ์„ ๊ฐ™์€ ๋ฐฉ์‹์˜ ๋ชฉ๋ก ํ•˜๋‚˜๋กœ.
- **์ง€์—ญ ๋งต (๋งต ๋กœ๋” 2์ฐจ, 2026-10-10):** `nusim render map <location>` (`nusim/render/regionmap.py`) โ€” ๊ทธ ์ง€์—ญ์—์„œ ํ•™์Šต๋œ ๋ชจ๋“  ์”ฌ์˜
๊ตฌ๊ฐ„์„ ๊ณตํ†ต ์›์ (์ถœ๋ฐœ ์”ฌ ์ฒซ ๊ตฌ๊ฐ„) ๊ธฐ์ค€ segments.txt ํ•˜๋‚˜๋กœ ์ž‡๋Š”๋‹ค. ๋ทฐ์–ด๋Š” ๊ฐ€๊นŒ์šด ๊ตฌ๊ฐ„ 3๊ฐœ๋ฅผ ์œ„์น˜๋กœ ๋ฏธ๋ฆฌ ์ฝ๋Š”๋‹ค (๋ชฉ๋ก ์ˆœ์„œ๊ฐ€ ๊ธธ ์œ„์˜
์ด์›ƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ). ๋งต ์„ ์€ ์ง€์—ญ ์ „์ฒด + ์”ฌ๋งˆ๋‹ค ์ž์ฐจ ๊ถค์ (= ๋งต์ด ์žˆ๋Š” ๊ณณ). ์ฒซ ์‹คํ–‰: one-north 38์”ฌ ยท 99๊ตฌ๊ฐ„. ์žฅ์• ๋ฌผ ์ง€๋„ ยท ๋ณต์…€ ์›”๋“œ๋Š” ์•„์ง
์ง€์—ญ ๋‹จ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฐ์„ ์ถฉ๋Œ๋งŒ, ์„ผ์„œ ์—†์Œ.
- ์ด์ „ ์‹œ๋ฒ” ๋ชจ๋ธ(๊ตฌ๊ฐ„ ๋ถ„ํ•  ์—†์Œ, ํ•˜๋Š˜ ๋ถ„๋ฆฌ ์—†์Œ)์€ `outputs/gs_day_pilot_2026-10-05/` ๋กœ ์˜ฎ๊ฒผ๋‹ค.
- ํ•œ๊ณ„: glTF ์ฐจ๋Ÿ‰์€ ๋ชจ๋‘ ๊ฐ™์€ ๋ชจ๋ธ(CarConcept). ์˜† 1 m ๋ณ€ํ˜•์€ ๋…ธ๋ฉด ๋ฒˆ์ง์ด ์žˆ๋‹ค (์‚ฌ์ดํด ๋ฒค์น˜๋กœ ํ’ˆ์งˆ ํ‘œ์‹œ ์˜ˆ์ •).
### ๋ฐ์ดํ„ฐ์…‹ ๋‹ค์–‘์„ฑ ์ฆ๊ฐ• (2026-10-05)
**B. 6์บ  ์‹œ์  ๋ณ€๊ฒฝ** โ€” `nusim aug rig <scene> [--only a,b] [--agents]`. ๋ณ€ํ˜•์€ `configs/aug/rig_variants.json` ์— ์žˆ๋‹ค
(์˜† ์ด๋™ยท๋†’์ดยทํ”ผ์น˜ยท์š”, ๋‚ ์”จ ์กฐํ•ฉ). ์”ฌ ์ธ๋ฑ์Šค์˜ camโ†’ego ์บ˜๋ฆฌ๋ธŒ๋งŒ ๋ฐ”๊พผ ์‚ฌ๋ณธ์œผ๋กœ `write_rig` โ†’ ์˜คํ”„์Šคํฌ๋ฆฐ ๋ Œ๋” โ†’
`outputs/aug/rig/<scene>/<variant>/<CAM>/<์›๋ณธ ํŒŒ์ผ๋ช…>.jpg` + `meta.json`(๋ฐ”๋€ calibrated_sensor, ์žฅ๋งˆ๋‹ค ์›๋ณธ ํŒŒ์ผยท์‹œ๊ฐยท์ž์ฐจ ํฌ์ฆˆ).
scene-0003: ๋ณ€ํ˜•๋‹น 1,356์žฅ, ์•ฝ 75์ดˆ. ์•„๋ž˜๋กœ 3ยฐ ๋Š” ๊นจ๋—ํ•˜๋‹ค. ์˜† 1 mยท๋†’์ด +0.4 m ๋Š” ๋…ธ๋ฉด ๋ฒˆ์ง๊ณผ floater ๊ฐ€ ์ƒ๊ธด๋‹ค
(์ƒˆ ์‹œ์  ํ’ˆ์งˆ ํ•œ๊ณ„ โ€” Difix ์ ์ง„ ์ฆ๋ฅ˜๋กœ ๊ฐœ์„ ํ•  ๊ฒƒ). ํ™˜๊ฒฝ ์ „์šฉ ๋ชจ๋ธ์€ ์ฐจ๋Ÿ‰์ด ์—†์œผ๋‹ˆ `--agents` ๋กœ glTF ์ฐจ๋Ÿ‰์„ ๋„ฃ๋Š”๋‹ค.
**A. ๋ฐคยท๋น„ โ†’ ๋‚ฎ ๋ณ€ํ™˜** โ€” `nusim aug translate` (CycleGAN-Turbo, BDD100K ์‚ฌ์ „ํ•™์Šต night_to_dayยทrainy_to_clear,
`cache/models/img2img-turbo/fetch.sh`). 8 GB GPU ์—์„œ ํ•™์Šต๊ณผ ๊ฐ™์ด ๋Œ๊ฒŒ ๋ชจ๋ธ์„ CPU ์—์„œ ๋งŒ๋“ค์–ด fp16 ์œผ๋กœ ์˜ฌ๋ฆฌ๊ณ , ํ•œ ๋ฒˆ์— ํ•˜๋‚˜๋งŒ ์“ด๋‹ค.
768ร—432 ์—์„œ ์žฅ๋‹น 0.8์ดˆ. **scene-1060 ์—์„œ ์‹คํŒจํ–ˆ๋‹ค**: nuScenes ์‹ฑ๊ฐ€ํฌ๋ฅด ๋ฐค ์˜์ƒ์€ BDD ๋ณด๋‹ค ํ›จ์”ฌ ์–ด๋‘์›Œ์„œ, ๋ชจ๋ธ์ด ์„ผ์„œ
์žก์Œ์„ ์ฆํญํ•ด ํŒŒ๋ž€ ์ ๋ฐ•์ด ์˜์ƒ์„ ๋งŒ๋“ ๋‹ค. ๋น„โ†’๋ง‘์Œ์€ ๋ฐค ์˜์ƒ์„ ๋” ์–ด๋‘ก๊ฒŒ๋งŒ ํ•œ๋‹ค. ์žฌ๊ตฌ์„ฑ ์ž…๋ ฅ์œผ๋กœ ์“ธ ์ˆ˜ ์—†๋‹ค.
`recon train --image-root` ๋Š” ๋ณ€ํ™˜ ์˜์ƒ์œผ๋กœ ํ•™์Šตํ•˜๋Š” ๊ฒฝ๋กœ๋กœ ๋‚จ๊ฒจ ๋‘”๋‹ค.
๋ฐค ๊ฒฝ๋กœ๊ฐ€ ๋‚ฎ ๊ฒฝ๋กœ์™€ ๊ฒน์น˜๋Š” ์ •๋„ (15 m ์•ˆ): ๋ฐค 99์”ฌ ์ค‘ 90% ์ด์ƒ ๊ฒน์นจ 32, 50% ๋ฏธ๋งŒ 60. one-north ๋Š” ๋ฐค 0, queenstown 33,
holland village 66 (๋‚ฎ์€ 19๋ฟ). ๋”ฐ๋ผ์„œ ๋‚ฎ ๋งต๋งŒ์œผ๋กœ๋Š” ํ™€๋žœ๋“œ ๋นŒ๋ฆฌ์ง€ ๋Œ€๋ถ€๋ถ„์ด ๋น ์ง„๋‹ค.
### ๋‚ ์”จ v2 (2026-10-05)
- **์›”๋“œ ๊ณต๊ฐ„ ๊ฐ•์ˆ˜ ์ž…์ž** (`shaders/precip.vert/frag`, ๋ Œ๋” ๊ทธ๋ž˜ํ”„ `precip` ํŒจ์Šค): ํ™”๋ฉด ๊ณต๊ฐ„ ๋ฌด๋Šฌ๋ฅผ ๋Œ€์‹ ํ•œ๋‹ค.
์ž…์ž๋Š” ์ƒํƒœ ์—†์ด (๋ฒˆํ˜ธ, ์‹œ๊ฐ) ํ•ด์‹œ๋กœ ์œ„์น˜๊ฐ€ ์ •ํ•ด์ง€๊ณ , ์”ฌ ์ขŒํ‘œ์— ๊ณ ์ •๋œ ์ƒ์ž๋ฅผ ์นด๋ฉ”๋ผ ์ฃผ๋ณ€์—์„œ ๊ฐ์•„ ๋Œ๋ฆฐ๋‹ค.
๊ทธ๋ž˜์„œ 6์บ ์ด ๊ฐ™์€ ๋น—๋ฐฉ์šธ์„ ๋ณด๊ณ , ์‹œ์ฐจ๊ฐ€ ์ƒ๊ธด๋‹ค. ๋น—์ค„๊ธฐ๋Š” ๋…ธ์ถœ ๋™์•ˆ์˜ (๋‚™ํ•˜ + ๋ฐ”๋žŒ โˆ’ ์ž์ฐจ ์†๋„) ์ƒ๋Œ€ ์ด๋™์ด๋ผ
๋‹ฌ๋ฆฌ๋ฉด ๊ธฐ์šด๋‹ค. ๊ฐ€๊นŒ์šด ์ž…์ž๋Š” ์ดˆ์ ์ด ํ๋ฆฌ๋‹ค. ๊ฑฐ๋ฆฌ ๋ฒ„ํผ๋กœ ์žฅ๋ฉด์— ๊ฐ€๋ ค์ง€๊ณ , ์ „์กฐ๋“ฑยทํ•˜๋Š˜๋น›์„ ๋ฐ›๊ณ , ์•ˆ๊ฐœ๋กœ ๊ฐ์‡ ํ•œ๋‹ค.
๋น„ 8๋งŒยท๋ˆˆ 12๋งŒ ๊ฐœ์— 0.05 ms.
- **์ –์€ ๋…ธ๋ฉด**: ์–ด๋‘์›Œ์ง๊ณผ ์ฑ„๋„ ์ƒ์Šน(Leknerโ€“Dorf ๊ทผ์‚ฌ), ๊ฐ’ ์žก์Œ ๋ฌผ์›…๋ฉ์ด(๊ฑฐ์šธ ๋ฐ˜์‚ฌ), ๋น—๋ฐฉ์šธ ํŒŒ๋ฌธ(๋ฒ•์„  ๊ต๋ž€),
์ „์กฐ๋“ฑ ์ •๋ฐ˜์‚ฌ ๊ผฌ๋ฆฌ.
- **๋†’์ด ์•ˆ๊ฐœ**(ํ•ด์„์  ๊ด‘ํ•™ ๊นŠ์ด) + ํ•ด ์ชฝ ์ „๋ฐฉ ์‚ฐ๋ž€(HG) + **๋ณผ๋ฅ˜๋ฉ”ํŠธ๋ฆญ ์ „์กฐ๋“ฑ**(์‹œ์„  12๊ฑธ์Œ ์ ๋ถ„).
- **๋ Œ์ฆˆ ๋ฌผ๋ฐฉ์šธ**: ๋’ค์ง‘ํžŒ ์ƒ์„ ๊ตด์ ˆํ•ด ๋ณด์—ฌ ์ฃผ๊ณ , ๋ฐ๊ธฐ๋Š” ์ฃผ๋ณ€์— ๋งž์ถ˜๋‹ค.
- ์กฐ์ •๊ฐ’์€ `configs/sim.json` `weather.fx` ์— ์žˆ๋‹ค. ๋Œ€์กฐํ‘œ๋Š” `cache/weather_sheet.sh <๋ชจ๋ธ> <out.jpg>` ๋กœ ๋งŒ๋“ ๋‹ค.
- ๋‚จ์€ ๊ฒƒ: ํ•˜๋Š˜์„ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์€ ๋ชจ๋ธ(`_depth`)์€ ํ•˜๋Š˜์ด 3DGS ํฐ ๋ฉ์–ด๋ฆฌ๋ผ ๋ฐค์—๋„ ๋ฐ๋‹ค. ํ•˜๋Š˜ ๋ถ„๋ฆฌ ๋ชจ๋ธ
(`day_map` ํ”„๋ฆฌ์…‹)์ด๋ฉด ์‹œ๋ฎฌ ํ•˜๋Š˜๋กœ ๋ฐ”๋€๋‹ค. ๋ˆˆ ์Œ“์ž„์€ 3DGS ๊นŠ์ด ์žก์Œ ๋•Œ๋ฌธ์— ๋…ธ๋ฉด์— ์–ผ๋ฃฉ์ด ์ƒ๊ธด๋‹ค.
๊ฐ€๋กœ๋“ฑ ๊ฐ™์€ ๋ฐค ๊ด‘์›์€ ์•„์ง ์—†๋‹ค.
### ์—”์ง„ ๊ฒฝ๋Ÿ‰ํ™” (2026-10-05)
ํŒจ์Šค๋ณ„ GPU ์‹œ๊ฐ„(`--offscreen` ๋์— ์ถœ๋ ฅ, F2 ์ฐฝ)์„ ์žฌ ๋ณด๋‹ˆ bitonic ์ •๋ ฌ์ด ํ”„๋ ˆ์ž„์˜ 58% ์˜€๋‹ค.
| | ์ „ | ํ›„ |
|---|---|---|
| ์ •๋ ฌ | bitonic, ๊ฐ€์šฐ์‹œ์•ˆ ์ „์ฒด 2^21, 231 ๋””์ŠคํŒจ์น˜ โ€” 31~35 ms | ๋ณด์ด๋Š” ๊ฒƒ๋งŒ ์••์ถ• + GPU radix (8๋น„ํŠธ ร— 4ํŒจ์Šค, subgroup ballot ์•ˆ์ • scatter) โ€” 2.7 ms |
| ๋ž˜์Šคํ„ฐ | RGBA32F ๋ธ”๋ Œ๋”ฉ 21.6 ms | RGBA16F 15.9 ms (32๋น„ํŠธ ๋Œ€๋น„ PSNR 64 dB). ๊ฑฐ๋ฆฌ ๋ˆ„์ ์€ r32f ์œ ์ง€ (r16f ๋Š” ์ –์€ ๋…ธ๋ฉด ๋ฐ˜์‚ฌ์—์„œ ์ตœ๋Œ€ 80/255 ์ฐจ์ด) |
| AA | ์—†์Œ | FXAA ์ปดํ“จํŠธ 0.08 ms + ๋ณต์‚ฌ 0.06 ms (๋ฉ”์‹œยท์„  ๊ฐ€์žฅ์ž๋ฆฌ). MSAA ๋Š” ์Šคํ”Œ๋žซ ๋ธ”๋ Œ๋”ฉ์„ ์ƒ˜ํ”Œ ์ˆ˜๋ฐฐ๋กœ ๋Š˜๋ ค ์“ฐ์ง€ ์•Š๋Š”๋‹ค |
(GPU ๋ฅผ ํ•™์Šต๊ณผ ๋‚˜๋ˆ  ์“ด ์ƒํƒœ์˜ ์ธก์ •์ด๋ผ ์ ˆ๋Œ€๊ฐ’์€ ํฌ๋‹ค.) Deferred shading ์€ ๋„์ž…ํ•˜์ง€ ์•Š์•˜๋‹ค. ์กฐ๋ช… ํŒจ์Šค(๋‚ ์”จ,
๊นŠ์ด ๋ฒ„ํผ ๊ธฐ๋ฐ˜ ํ™”๋ฉด ๊ณต๊ฐ„ ์กฐ๋ช… โ€” ์‚ฌ์‹ค์ƒ deferred)๊ฐ€ 0.1~0.5 ms ๋ผ ์„ฑ๋Šฅ ์ด๋“์ด ์—†๋‹ค. ๊ด‘์›์ด ๋งŽ์•„์ง€๋ฉด(๊ฐ€๋กœ๋“ฑยท๋‹ค๋ฅธ
์ฐจ ์ „์กฐ๋“ฑ) G-๋ฒ„ํผ ๋ฒ•์„ (๋ฉ”์‹œ)๊ณผ ํด๋Ÿฌ์Šคํ„ฐ ์กฐ๋ช…์œผ๋กœ ํ™•์žฅํ•œ๋‹ค.
### ์‚ฌ์ดํด ๋ Œ๋” ๋ฒค์น˜๋งˆํฌ (OneFixer ๋ถ€๋ก A.1 ๋ฐฉ์‹)
`nusim recon cycle <scene>`: ๋ชจ๋ธ B ๋ฅผ ํ•™์Šต ์‹œ์ ์—์„œ ์˜†์œผ๋กœ 1 m ์˜ฎ๊ฒจ ๋ Œ๋” โ†’ ๊ทธ ๋ Œ๋”๋กœ ๋ชจ๋ธ C ํ•™์Šต โ†’ C ๋ฅผ ์›๋ž˜
๊ธฐ๋ก ์‹œ์ ์—์„œ ๋ Œ๋”ํ•˜๋ฉด '1 m ๋ฒ—์–ด๋‚œ ์ƒˆ ์‹œ์ ' ์ด๊ณ  ๊ทธ ์ž๋ฆฌ ์‹ค์ œ ์‚ฌ์ง„์ด ์ •๋‹ต์ด๋‹ค. `bench/` ์— ๋ Œ๋”ยท์ •๋‹ตยท๋ˆ„์ 
๋ถˆํˆฌ๋ช…๋„ยท๊ฐ€๋ฆฐ ๊ฐ์ฒด ๋งˆ์Šคํฌยท์ด์›ƒ ํ”„๋ ˆ์ž„ ์ฐธ์กฐ ์‚ฌ์ง„. `nusim recon bench` ๋กœ PSNRยทSSIMยทLPIPSยทDISTS (๊ฐ€๋ฆฐ ๊ฐ์ฒด ์˜์—ญ์€
์ •๋‹ต์œผ๋กœ ์ฑ„์šด ๋’ค). `--run-difix` ๋Š” Difix ์ „์ฒด ๋ณด์ •๊ณผ ์‹ ๋ขฐ๋„ ๋งˆ์Šคํฌ(๋ˆ„์  ๋ถˆํˆฌ๋ช…๋„) ๋ธ”๋ Œ๋”ฉ์„ ๋น„๊ตํ•œ๋‹ค.
**์ˆ˜์ • (2026-10-06 ๊ฒ€ํ† ):** ์ฒซ ๋ฒค์น˜(scene-0003)์—์„œ +Difix ๊ฐ€ LPIPS 0.391 โ†’ 0.162 ๋กœ ์‹ค์ œ ์‚ฌ์ง„ ํ•™์Šต ๋ชจ๋ธ(0.338)๋ณด๋‹ค๋„ ์ข‹๊ฒŒ ๋‚˜์™”๋‹ค.
์›์ธ์€ ์ฐธ์กฐ ์‚ฌ์ง„์ด '๊ฐ™์€ ์นด๋ฉ”๋ผ์—์„œ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ•™์Šต ํ”„๋ ˆ์ž„' ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋А๋ฆฐ ์”ฌ์—์„œ๋Š” ์ •๋‹ต ์œ„์น˜์—์„œ 0.13 m ๋–จ์–ด์ง„, ์ •๋‹ต๊ณผ ๊ฑฐ์˜ ๊ฐ™์€
์‚ฌ์ง„์ด๋ผ Difix ๊ฐ€ ์ •๋‹ต์„ ๋ฒ ๊ผˆ๋‹ค โ€” **๊ทธ ์ˆ˜์น˜๋Š” ๋ฌดํšจ**. ์ด์ œ ์ฐธ์กฐ๋Š” ์ด๋™ ๊ฑฐ๋ฆฌ(1 m) ์ด์ƒ ๋–จ์–ด์ง„ ํ•™์Šต ํ”„๋ ˆ์ž„ ๊ฐ€์šด๋ฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์ด๋‹ค
(์‹ค์ œ ์‚ฌ์šฉ: ์ฐจ์„ ์„ ์˜ฎ๊ธด ์‹œ์ ์—์„œ ์ฐธ์กฐ๋Š” 1 m ๋–จ์–ด์ง„ ๊ธฐ๋ก ์‚ฌ์ง„). ๋‹ค์‹œ ์žด ๊ฒƒ.
### ๋ ˆ์ด์บ์ŠคํŠธ ์„ผ์„œ โ€” ๋ผ์ด๋‹คยท๋ ˆ์ด๋” (2026-10-09)
์‚ฌ์šฉ์ž ์š”์ฒญ: ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ '๋ Œ๋”๋ง' ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์นด๋ฉ”๋ผ์ฒ˜๋Ÿผ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ์„ผ์„œ๋ฅผ ๋ถ™์ธ๋‹ค (CARLA ray-cast ์„ผ์„œ ๋ฐฉ์‹).
- ์„ค์ • `configs/sim.json` `sensors`: LIDAR_TOP (HDL-32E ๊ทผ์‚ฌ: 32์ฑ„๋„, โˆ’30.67~10.67ยฐ, 0.33ยฐ, 70 m) + RADAR_* 5๋Œ€ (ARS 408 ๊ทผ์‚ฌ:
120ยฐร—10ยฐ, 1ยฐ, 120 m, ์ตœ๋Œ€ 125์ , ๋…ธ๋ฉด ๋ฐ˜์‚ฌ ๋ฒ„๋ฆผ, ๋„ํ”Œ๋Ÿฌ vrยท์ž์ฐจ ์šด๋™ ๋ณด์ • ์†๋„). ์žฅ์ฐฉ ์œ„์น˜๋Š” nuScenes ๋ฐฐ์น˜ ๊ทผ์‚ฌ.
- ๊ธฐํ•˜ = **๋ณต์…€ ์›”๋“œ** `world.vox` (`nusim/sim/voxels.py`): ์ •์  ๋ผ์ด๋‹ค ๋ˆ„์ , ์ง€๋ฉด์€ 0.5 m ๋†’์ด ์ง€๋„(์ฒซ ๋นฝ๋นฝํ•œ ์ธต, ์ด์ค‘ ์„ ํ˜• ๊ต์ฐจ),
์ง€๋ฉด ์œ„ ๊ฒƒ์€ 0.2 m ๋ณต์…€. **๋นˆ ๊ณต๊ฐ„ ๊นŽ๊ธฐ**(`src/vkgs/src/voxcarve.cpp`, ๋น”์ด ์ง€๋‚˜๊ฐ„ ํšŸ์ˆ˜ ๋Œ€๋น„ ๋ถ€๋”ชํžŒ ๋น„์œจ < 0.2 ์ธ ์นธ ์ œ๊ฑฐ) โ€”
์ง€์šด ์ฐจ๋Ÿ‰์˜ ์–ด๊ธ‹๋‚œ ์กฐ๊ฐ์ด ์ฐจ์„ ์„ ๋”ฐ๋ผ ์ง€๋ฉด ์œ„ 0.3~1 m ์— ์Œ“์—ฌ ์žˆ์—ˆ๋‹ค. + ์žฅ๋ฉด ๊ฐ์ฒด ์ƒ์ž (์ฐจ๋Ÿ‰, ์†๋„).
- ์ž์ฐจ๋ฅผ ๋…ธ๋ฉด์— ์•‰ํ˜€(zยทpitchยทroll, ๋„ค ๋ฐ”ํ€ด ์ž๋ฆฌ ์ง€๋ฉด ๋†’์ด) ์œ๋‹ค.
- ์‹ค์ œ nuScenes ๋ผ์ด๋‹ค์™€ ๊ฐ™์€ ๋ฐฉํ–ฅ(๊ณ ๋„ 0.67ยฐยท๋ฐฉ์œ„ 0.5ยฐ ์นธ)์˜ ๊ฑฐ๋ฆฌ ๋น„๊ต (6 sweep):
| | ์‹ค์ธก ์„ผ์„œ ์ž์„ธ | ์‹œ๋ฎฌ ์ž์„ธ (๋…ธ๋ฉด์— ์•‰ํž˜) |
|---|---|---|
| scene-0402, ์ฒ˜์Œ (๋ณต์…€ ์ง€๋ฉด, ๊นŽ๊ธฐ ์—†์Œ) | โˆ’1.24 m, 24% | โ€” |
| scene-0402, ๋†’์ด ์ง€๋„ + ๊นŽ๊ธฐ 0.2 | โˆ’0.12 m, 5.9% | โˆ’0.18 m, 5.9% |
| scene-0003 | โˆ’0.07 m, 3.6% | +0.02 m, 3.9% |
(๊ฑฐ๋ฆฌ ์ฐจ ์ค‘์•™๊ฐ’, ์ƒ๋Œ€ ์˜ค์ฐจ ์ค‘์•™๊ฐ’.) ๋‚จ์€ ์˜ค์ฐจ: ๋‚˜๋ฌด ๊ฐ™์€ ์„ฑ๊ธด ๋ฌผ์ฒด, 0.2 m ๋ณต์…€ ๋ฉด, ๋ผ์ด๋‹ค ์„ธ๊ธฐ๋Š” ์—†๋‹ค(๊ฑฐ๋ฆฌ๋กœ ๊ทผ์‚ฌ).
- ๋ทฐ์–ด: `--voxels` (render view ๊ฐ€ ์ž๋™), ์ฐฝ์˜ '์„ผ์„œ' ํŒจ๋„์—์„œ ๋ผ์ด๋‹ค(๋†’์ด ์ƒ‰)ยท๋ ˆ์ด๋”(๋นจ๊ฐ• ๋‹ค๊ฐ€์˜ดยทํŒŒ๋ž‘ ๋ฉ€์–ด์งยท๋…ธ๋ž‘ ์ •์ง€) ๋ณด๊ธฐ,
O(6์บ  ๊ด€์ธก ์ €์žฅ)์— `LIDAR_TOP.bin` (nuScenes .pcd.bin ํ˜•์‹, ์„ผ์„œ ์ขŒํ‘œ x ์•žยทy ์™ผ์ชฝยทz ์œ„) + `RADAR_*.txt`. ๋ผ์ด๋‹ค ํ•œ ๋ฐ”ํ€ด ์•ฝ 4 ms.
- ๋‹ค์Œ: ์žฅ๋ฉด ๊ฐ์ฒด์˜ ์‹ค์ œ ๋†’์ดยท์†๋„ (์ง€๊ธˆ 1.6 mยท์ •์ง€), ์žฅ์• ๋ฌผ ์ง€๋„์—๋„ ๋นˆ ๊ณต๊ฐ„ ๊นŽ๊ธฐ ์ ์šฉ (๋ณด์ด์ง€ ์•Š๋Š” ์žฅ์• ๋ฌผ์˜ ๊ฐ™์€ ์›์ธ).
### 3์ธ์นญ ๋…ธ์ด์ฆˆ โ†’ ์ž์ฐจ ๋†’์ด ๋ณต์› ยท ArtiFixer ๋˜๋จน์ž„ ยท EMA (2026-11-05)
์‚ฌ์šฉ์ž ๋ณด๊ณ : ๋ทฐ์–ด์—์„œ ๋„๋กœยท๊ฑด๋ฌผ์ด ๊ฐ€์šฐ์‹œ์•ˆ ๋…ธ์ด์ฆˆ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ์›์ธ ์…‹.
1. **nuScenes ego_pose ์˜ z ๋Š” ํ•ญ์ƒ 0** (ํ”ผ์น˜ยท๋กค์€ ์žˆ๋‹ค). ์˜ค๋ฅด๋ง‰์—์„œ ์ฐจ๊ฐ€ ๊ธฐ์šด ์ฑ„ ๊ฐ™์€ ๋†’์ด์— ๋จธ๋ฌด๋Š” ์…ˆ์ด๋ผ ํ”„๋ ˆ์ž„๋ผ๋ฆฌ
๊ธฐํ•˜๊ฐ€ ์–ด๊ธ‹๋‚œ๋‹ค. `SceneIndex.with_ego_heights` (`nusim/data/rig.py ego_heights` โ€” ์•ž ๋ฐฉํ–ฅ ๊ธฐ์šธ๊ธฐ dz/ds ๋ฅผ ์ˆ˜ํ‰ ์ด๋™์œผ๋กœ
์ ๋ถ„, ์นด๋ฉ”๋ผยท๋ผ์ด๋‹คยท๋ฐ•์Šค๋ฅผ ๊ฐ™์€ ์‹œ๊ฐ ๋†’์ด๋งŒํผ ์˜ฌ๋ฆผ). ํ•™์Šต ์˜ต์…˜ `--ego-z pitch` (report `ego_z`, `_model_data` ๊ฐ€ ๋”ฐ๋ฅธ๋‹ค).
- ๋‚ฎ ๋งต 628๊ตฌ๊ฐ„: ๊ตฌ๊ฐ„ ๋†’์ด ๋ณ€ํ™” 0โ€“1 m ํ‰๊ท  25.40 dB, 2โ€“4 m 22.34 dB, 4 m+ 21.28 dB (์ƒ๊ด€ โˆ’0.59). 22 dB ๋ฏธ๋งŒ 42๊ฐœ ์ค‘ 26๊ฐœ๊ฐ€ 2 m+.
- ๋ผ์ด๋‹ค ์ง€๋ฉด ์ผ๊ด€์„ฑ (1 m ์นธ ๋†’์ด์˜ ํ”„๋ ˆ์ž„ ๊ฐ„ ํ‘œ์ค€ํŽธ์ฐจ ์ค‘์•™๊ฐ’): scene-0416 0.446 โ†’ 0.050 m, scene-0042 0.264 โ†’ 0.046 m,
scene-0049 0.230 โ†’ 0.070 m โ€” ํ‰ํ‰ํ•ด ๋ณด์ด๋Š” ๊ตฌ๊ฐ„๋„ ์ข‹์•„์ง„๋‹ค.
- ์žฌํ•™์Šต (day_map ํ”„๋ฆฌ์…‹ 15k ๊ทธ๋Œ€๋กœ): scene-0042 seg1 **21.52 โ†’ 26.71 dB** (SSIM 0.653 โ†’ 0.821), scene-0416 seg1 17.96 โ†’ 18.99 dB
(๋‚˜๋ฌด ํ„ฐ๋„ ์ข์€ ๊ธธ โ€” ์—ฌ์ „ํžˆ ์–ด๋ ต๋‹ค). `outputs/gs_day_v2/`.
- ๋ทฐ์–ด๋Š” ์šด์ „ ์ค‘ ์ž์ฐจ z ๋ฅผ ์ถœ๋ฐœ ๋†’์ด๋กœ ๊ณ ์ •ํ•˜๊ณ  ํ”ผ์น˜๊ฐ€ ์—†๋‹ค โ€” ๋†’์ด ๋ณต์› ๋ชจ๋ธ์„ ์ง€์—ญ ๋งต์— ๋„ฃ์œผ๋ ค๋ฉด segments.txt ๊ถค์  ์ ์— z,
์ž์ฐจ ๋†’์ดยทํ”ผ์น˜ ๋”ฐ๋ผ๊ฐ€๊ธฐ, ์”ฌ ์‚ฌ์ด ๋†’์ด ๋งž์ถค์ด ํ•„์š”ํ•˜๋‹ค (์•„์ง).
2. **3์ธ์นญ ์นด๋ฉ”๋ผ๊ฐ€ ํ•™์Šต ์‹œ์  ๋ฐ–** (์ฐจ ๋’ค 6.5 m ยท ๋†’์ด 1.9 m). sim.json chase_camera 5.5 m ยท 1.7 m ๋กœ, ์ถœ๋ฐœ์€ ๊ธฐ๋ก ๊ถค์ ์„
`drive.start_offset_m` (8 m) ๋“ค์–ด๊ฐ„ ํ”„๋ ˆ์ž„์—์„œ (0 ๋ฒˆ ํ”„๋ ˆ์ž„์ด๋ฉด ์นด๋ฉ”๋ผ๊ฐ€ ์•„๋ฌด ์นด๋ฉ”๋ผ๋„ ์ง€๋‚˜๊ฐ€์ง€ ์•Š์€ ๊ณณ์— ์žˆ๋‹ค).
3. **ํ•™์Šต ์‹œ์  ๋ฐ– ํ™”์งˆ** โ€” `nusim recon augfix <์”ฌ> --seg <๊ตฌ๊ฐ„>` (`nusim/recon/augfix.py`, `configs/train/augfix.json`):
ArtiFixer ์ฆ๊ฐ•(๋ฆฌ๊ทธ ๋ณ€ํ˜• 9์ข…, ์ด๋ฏธ 284์”ฌ)์„ ๊ทธ ๋ณ€ํ˜• ์ž์„ธ์˜ ์˜์‚ฌ ์ •๋‹ต์œผ๋กœ ๊ตฌ๊ฐ„ ๋ชจ๋ธ 6k ๋ฏธ์„ธ์กฐ์ • + ๊ฐ€์šฐ์‹œ์•ˆ EMA 0.999
(`TrainConfig.ema_decay`). ์˜์‚ฌ ๋ทฐ์˜ ํ•˜๋Š˜ ํ”ฝ์…€(์› ๋ชจ๋ธ ฮฑ < 0.5)์€ ์†์‹ค์—์„œ ๋นผ๊ณ  ํ•˜๋Š˜ ํ๋ธŒ๋งต์€ ์‹ค์ œ ์‚ฌ์ง„์œผ๋กœ๋งŒ โ€”
์•ˆ ๊ทธ๋Ÿฌ๋ฉด ArtiFixer ์˜ ๋ฐ”๋žœ ํ•˜๋Š˜์„ ๋ฐฐ์›Œ ๊ตฌ๋ฆ„์ด ์‚ฌ๋ผ์กŒ๋‹ค. scene-0042 seg0 (ํ•˜๋Š˜ ์ œ์™ธ ํ‰๊ฐ€):
| | ์›๋ž˜ ๊ฒฝ๋กœ PSNR / LPIPS | ๋นผ ๋‘” ์ฆ๊ฐ• 18์žฅ PSNR / LPIPS |
|---|---|---|
| ์› ๋ชจ๋ธ | 24.73 / 0.321 | 25.60 / 0.152 |
| augfix + EMA | **24.91 / 0.310** | **26.57 / 0.135** |
| augfix, EMA ์—†์ด | 24.66 / 0.310 | 26.35 / 0.139 |
EMA ๋Š” ์ˆ˜๋ ดํ•œ ๋ชจ๋ธ์˜ ๋ฏธ์„ธ์กฐ์ •์—์„œ +0.2 dB. ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•™์Šต(15k)์—์„œ๋Š” ๋งˆ์ง€๋ง‰ 3k ๋™์•ˆ PSNR ์ด ๋น ๋ฅด๊ฒŒ ์˜ค๋ฅด๋Š” ์ค‘์ด๋ผ EMA ๊ฐ€
๋’ค์ฒ˜์ ธ โˆ’0.5 dB (scene-0416) โ€” ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•™์Šต์—๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
## 3๋‹จ๊ณ„ โ€” closed-loop ํ™˜๊ฒฝ
| | |
|---|---|
| ์‚ฐ์ถœ๋ฌผ | VLA ๋ชจ๋ธ์ด ์”ฌ ํ•˜๋‚˜๋ฅผ ์™„์ฃผํ•˜๊ณ  ๊ฒฝ๋กœ ์ดํƒˆ/์ถฉ๋Œ ์ง€ํ‘œ๊ฐ€ ๋‚˜์˜ด |
- [ ] `maps/graph.py` โ€” map expansion โ†’ ์ฐจ์„  ๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„
- [ ] `sim/ego.py` โ€” ์ž์ „๊ฑฐ ๋ชจ๋ธ (์กฐํ–ฅ๊ฐยท๊ฐ€์† โ†’ ๋‹ค์Œ ์ƒํƒœ)
- [x] ์ถฉ๋Œ (2026-10-02) โ€” ์ •์  ๋ผ์ด๋‹ค ์žฅ์• ๋ฌผ ์ง€๋„(`nusim/sim/obstacles.py`, ์ง€๋ฉด +0.25~2.5 m, 0.2 m ์นธ)์™€
์ฃผํ–‰๊ฐ€๋Šฅ์˜์—ญ ๊ฒฝ๊ณ„(์—ฐ์„)์— ์ฐจ์ฒด๊ฐ€ ๋‹ฟ์œผ๋ฉด ์ง์ „ ์ž์„ธ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ์ •์ง€, ์ถฉ๋Œ ํšŸ์ˆ˜ยท์ข…๋ฅ˜๋ฅผ `drive_log.csv` ์— ๊ธฐ๋ก.
๋…ธ๋ฉด(์ฃผํ–‰๊ฐ€๋Šฅ์˜์—ญ ์•ˆ์ชฝ 0.3 m ๋ถ€ํ„ฐ)๊ณผ ์›๋ž˜ ์ฐจ์ฒด๊ฐ€ ์ง€๋‚˜๊ฐ„ ์ž๋ฆฌ๋Š” ๋น„์šด๋‹ค โ€” ๋…ธ๋ฉด ์œ„ ๋ฌผ์ฒด(์ฐจ๋‹จ๊ธฐ ๋ง‰๋Œ€ยท์ฝ˜ ๋“ฑ)๋Š”
๋Œ€๋ถ€๋ถ„ ์ž ๊น ์žˆ๋˜ ๊ฒƒ์ด๊ณ  ๋‚˜์ค‘์— ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋กœ ๋„ฃ๋Š”๋‹ค. scene-0003 ์ฐจ๋‹จ๊ธฐ ๋ง‰๋Œ€ ๋‘ ๊ฐœ๊ฐ€ ๋ฒฝ์œผ๋กœ ๋‚จ์•„ ์ฐจ์„ ์„
๋ง‰์•˜์—ˆ๋‹ค. ์ถฉ๋Œ ํŒ์ •์€ ์ฐจ์ฒด ๋‘˜๋ ˆ๋ฅผ 0.1 m ์ค„์—ฌ์„œ ๋ณธ๋‹ค (์นธ ์–‘์žํ™”ยทํฌ์ฆˆ ์žก์Œ์œผ๋กœ ๋ฌผ์ฒด๊ฐ€ ๋ถ€ํ’€์–ด ๋ณด์ž„).
ํ›„์ง„๋„ ๊ณ ์ณค๋‹ค (์˜ˆ์ „์—” 5์ดˆ ๋ˆŒ๋Ÿฌ 0.35 m).
**2026-10-09 (OBSTACLES_VERSION 4):** ๊ธด ์”ฌ(scene-0402)์—์„œ ์›๋ž˜ ๊ฒฝ๋กœ 0.2~0.4 m ์˜† ๋…ธ๋ฉด์—์„œ '๊ฑด๋ฌผยท๊ตฌ์กฐ๋ฌผ' ์ถฉ๋Œ๋กœ ๋ฉˆ์ท„๋‹ค.
โ‘  ์ง€๋ฉด = ๋‚ฎ์€ 5 ๋ฐฑ๋ถ„์œ„์˜€๋Š”๋ฐ ๋จผ sweep ์˜ ๋…ธ๋ฉด ์ ์ด ์•„๋ž˜๋กœ 0.1~0.45 m ๋ฒˆ์ ธ ์ง€๋ฉด์ด 0.3 m ๋‚ฎ๊ฒŒ ์žกํ˜€ ๋…ธ๋ฉด ์ž์ฒด๊ฐ€ ์žฅ์• ๋ฌผ์ด ๋๋‹ค โ†’
์ง€๋ฉด = ์•„๋ž˜์—์„œ ์ฒ˜์Œ ๋‚˜์˜ค๋Š” ๋นฝ๋นฝํ•œ 10 cm ์ธต(๊ทธ ์นธ ์ตœ๋Œ€ ์ธต์˜ ์ ˆ๋ฐ˜ ์ด์ƒ). โ‘ก ๋…ธ๋ฉด ์•ˆ์—์„œ ๋‚จ๊ธฐ๋Š” '์†Ÿ์€ ๊ตฌ์กฐ๋ฌผ' ์„ ์นธ์˜ ์ตœ๊ณ ์  > 3 m ๋กœ
๋ดค๋”๋‹ˆ ๊ฐ€๋กœ์ˆ˜ ์ˆ˜๊ด€(5~18 m) ์•„๋ž˜ ๋…ธ๋ฉด ์นธ 11,091๊ฐœ๊ฐ€ ๋‚จ์•˜๋‹ค โ†’ ์ง€๋ฉด ์œ„ 2~3 m ์— ์ ์ด 5๊ฐœ ์ด์ƒ์ธ ์นธ๋งŒ (๊ธฐ๋‘ฅยท์ค„๊ธฐยท๋ฒฝ). ๋…ธ๋ฉด์—์„œ
๋‚จ๋Š” ์นธ 11,091 โ†’ 83, ์ถฉ๋Œ ์ง€์  1 m ์•ˆ ์žฅ์• ๋ฌผ 0. scene-0003 ์€ 21,808 โ†’ 20,724์นธ.
๊ฐ™์€ ๋‚  ๋‘ ๋ฒˆ์งธ ์‹œํ—˜: ์›๋ž˜ ๊ฒฝ๋กœ 1.6 m ์™ผ์ชฝ์—์„œ ํ™”๋‹จ ๊ฐ€์žฅ์ž๋ฆฌ์˜ ํ•œ ์นธ ๋Œ์ถœ(0.2 m)์— ์ฐจ์ฒด ์˜†์ด ๊ฑธ๋ ค ์•ž๋’ค๋กœ ๋ชป ์›€์ง์˜€๋‹ค โ€”
๋‹ฟ์€ ์ƒ˜ํ”Œ ์ˆ˜๊ฐ€ 1 ๋งŒ ๋Š˜์–ด๋„ ๋ง‰์•˜๊ธฐ ๋•Œ๋ฌธ. ์ด์ œ `collision.graze_samples`(2) ์ดํ•˜๋Š” ์Šค์นจ์œผ๋กœ ๋ณด๊ณ (`ContactInfo::depth`),
๊นŠ์ด๊ฐ€ ๋Š˜์–ด๋„ ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ 0.3 m ๋” ๊ฐ€ ๋ณธ ์ž์„ธ๊ฐ€ ์ง€๊ธˆ๋ณด๋‹ค ๊นŠ์ง€ ์•Š์œผ๋ฉด ๋น ์ ธ๋‚˜๊ฐ€๋Š” ์ค‘์œผ๋กœ ํ—ˆ์šฉ (`escaping`). ๋ฒฝยท๊ธฐ๋‘ฅ์€
์ฐจ์ฒด ํ•œ ์ค„(์•ฝ 13์ )์ด ๋ฐ”๋กœ ๋‹ฟ์•„ ์—ฌ์ „ํžˆ ๋ง‰ํžŒ๋‹ค. ์šด์ „์€ ์ •์ง€ ์ƒํƒœ๋กœ ์‹œ์ž‘ํ•œ๋‹ค (์˜ˆ์ „์—” ๋กœ๊ทธ ์†๋„๋กœ ์‹œ์ž‘ํ•ด ์ €์ ˆ๋กœ ๋‹ฌ๋ ธ๋‹ค). ์•„์ง ์—†๋Š” ๊ฒƒ: ์ถฉ๊ฒฉยทํŠ•๊น€ ๊ฐ™์€ ๋™์—ญํ•™, ๊ฒฝ์‚ฌยท์š”์ฒ , ๋‹ค๋ฅธ ์ฐจ๋Ÿ‰๊ณผ์˜ ์ถฉ๋Œ.
- [ ] `sim/env.py` โ€” gym ์Šคํƒ€์ผ `reset()` / `step(action) โ†’ 6์žฅ ๊ด€์ธก`
- [ ] `sim/metrics.py` โ€” ๊ฒฝ๋กœ ์ดํƒˆ, ์ฃผํ–‰๊ฐ€๋Šฅ์˜์—ญ ์œ„๋ฐ˜, ์ถฉ๋Œ, ์™„์ฃผ์œจ
- [ ] `sim/bridge.py` โ€” gRPC (๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•˜๋ฉด ROS2) ๋กœ ์™ธ๋ถ€ ๋ชจ๋ธ ์—ฐ๋™
- [ ] ๊ตํ†ต ์ฐธ๊ฐ€์ž ์‚ฝ์ž… โ€” ํ™˜๊ฒฝ ์ „์šฉ ๋งต ์œ„์— ์ฐจ๋Ÿ‰ยท์‚ฌ๋žŒ(glTF ๋˜๋Š” ๊ฐ์ฒด๋ณ„ 3DGS)์„ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ๋ฐฐ์น˜
**ํ•ต์‹ฌ ๋‚œ์ .** ego ๊ฐ€ ์›๋ณธ ๊ถค์ ์„ ๋ฒ—์–ด๋‚˜๋ฉด ๊ทธ ์‹œ์ ์—์„œ ๋ณธ ์  ์—†๋Š” ๊ฐ๋„๊ฐ€ ๋œ๋‹ค.
3DGS ๋Š” ์™ธ์‚ฝ์— ์•ฝํ•ด์„œ ๊ฒฝ๋กœ๋ฅผ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜๋ฉด ํ™”์งˆ์ด ๊ธ‰๊ฒฉํžˆ ๋ฌด๋„ˆ์ง„๋‹ค.
ํ˜„์‹ค์ ์ธ ์™„ํ™”์ฑ…:
- ๋ฒ—์–ด๋‚จ ์ •๋„๋ฅผ ์ง€ํ‘œ๋กœ ๊ธฐ๋กํ•ด "์‹ ๋ขฐ ๊ตฌ๊ฐ„" ์„ ๋ช…์‹œ
- ์›๋ณธ ๊ถค์  ์ฃผ๋ณ€ ยฑ2 m ์ •๋„๋ฅผ ์œ ํšจ ๋ฒ”์œ„๋กœ ๋‘๊ณ  ํ‰๊ฐ€
- ์—ฌ๋Ÿฌ ์”ฌ์˜ ์žฌ๊ตฌ์„ฑ์„ ๋งต ์ขŒํ‘œ๊ณ„์—์„œ ํ•ฉ์ณ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๋„“ํžˆ๋Š” ๊ฒƒ์€ ๊ทธ ๋‹ค์Œ ๋ฌธ์ œ
---
## ๋‹ค๋ฃจ์ง€ ์•Š๊ธฐ๋กœ ํ•œ ๊ฒƒ
- **boston-seaport (467 ์”ฌ)** โ€” ์‹ฑ๊ฐ€ํฌ๋ฅด๋กœ ํ•œ์ •ํ•œ๋‹ค. ๋ฒ”์œ„๋ฅผ ์ขํ˜€์•ผ ๋์ด ๋‚œ๋‹ค.
- ~~**LiDAR/RADAR ํ•ฉ์„ฑ**~~ โ€” ์ฒ˜์Œ์—” ์นด๋ฉ”๋ผ๋งŒ์ด์—ˆ์œผ๋‚˜ 2026-10-09 ์‚ฌ์šฉ์ž ์š”์ฒญ์œผ๋กœ **์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋ ˆ์ด์บ์ŠคํŠธ ์„ผ์„œ**๋กœ ๋„ฃ์—ˆ๋‹ค
('๋ ˆ์ด์บ์ŠคํŠธ ์„ผ์„œ' ์ ˆ). 3DGS ๋กœ ์„ผ์„œ ์˜์ƒ์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ์‹์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
- ~~**๋‚ ์”จ/์‹œ๊ฐ„๋Œ€ ๋ณ€ํ™˜**~~ โ€” ์ฒ˜์Œ์—” ๋‹ค๋ฃจ์ง€ ์•Š๊ธฐ๋กœ ํ–ˆ์œผ๋‚˜ 2026-10-02 ๊ฒฐ์ •์œผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ํ•ฉ์„ฑํ•œ๋‹ค
('์ „์ฒด ๋งต + ํ•ฉ์„ฑ ๋‚ ์”จ', '๋‚ ์”จ v2'). ์˜์ƒ ์ž์ฒด์˜ ๋ฐค โ†’ ๋‚ฎ ๋ณ€ํ™˜์€ '๋ฐ์ดํ„ฐ์…‹ ๋‹ค์–‘์„ฑ ์ฆ๊ฐ•' ์ฐธ๊ณ .
- **์ง์ ‘ ํ•™์Šต๊ธฐ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌํ˜„** โ€” gsplat ์„ ๋ฐฑ์—”๋“œ๋กœ ์“ด๋‹ค.
๋ž˜์Šคํ„ฐ๋ผ์ด์ €๋ฅผ ๋‹ค์‹œ ์“ฐ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์“ธ ์ด์œ ๊ฐ€ ์—†๋‹ค.