데브허브 | DEVHUB | I Played DuckDB Doom And It's ACTUALLY GoodI Played DuckDB Doom And It's ACTUALLY Good
- DuckDB WASM과 SQL 쿼리를 활용하여 3D 그래픽(레이캐스팅, 원근법, 렌더링)을 처리하는 완전한 둠(Doom) 스타일 게임이 구현되었습니다. 🎮
- DuckDB는 게임 데이터 저장용이 아닌, 3D 렌더링을 위해 사용된 분석용 임베디드 데이터베이스로, 애플리케이션과 동일한 프로세스에서 실행됩니다. 🦆
- 게임은 CDN에서 로드된 DuckDB WASM을 사용하며, 약 654줄의 비교적 적은 코드로 구성되어 있습니다. 💻
- 화면 렌더링은 5개의 테이블(Map, Player, Enemies, Bullets, Settings)과 2개의 뷰(Render 3D Frame, Column Distances)에서 SQL
SELECT 문을 통해 프레임버퍼를 생성하는 방식으로 이루어집니다. 📊
- 미니맵은
Map 테이블(16x16 그리드)에서 생성되며, #은 벽, .은 빈 공간을 나타냅니다. 🗺️
- 3D 렌더링의 핵심은
Render 3D Frame 뷰에 있는 재귀적 CTE(Common Table Expression)를 활용한 레이 트레이싱입니다. 👁️🗨️
- 레이 트레이싱은 플레이어 위치에서 광선을 발사하여 벽에 닿기까지의 거리에 따라 픽셀을 결정, 거리와 원근감을 시뮬레이션합니다. 🚀
- 하늘, 바닥, 벽의 거리에 따라 다른 문자(예:
, ., ▄, █, ▓, ▒, ░)를 사용하여 픽셀을 렌더링합니다. 🧱
- 게임의 메인 렌더링 쿼리는 150밀리초마다 실행되며, 플레이어 움직임과 상호작용 또한 SQL 쿼리로 처리됩니다. ⏱️
- WASD 이동 및 스페이스바 발사로 게임 플레이가 가능하며, SQL 렌더링임에도 불구하고 놀랍도록 잘 작동합니다. 👾
- 이 프로젝트는 실제 게임 플레이용이라기보다는 DuckDB의 한계를 시험하고 그 가능성을 보여주는 인상적인 실험입니다. ✨