BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
PLAYBOUND는 회색 상자를 증명하고, AI(Hyper3D Rodin)가 디자인 잠금 레벨을 게임 흐름을 깨지 않게 입히는 솔루션입니다
PLAYBOUND — Prove the greybox. Then dress it. AI (Hyper3D Rodin) dresses designer-locked greybox levels without breaking gameplay. Tencent x Arcade AI Hackathon, Game Tech track.
게임TypeScript · CSSGitHub @francescococcia온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Prove the greybox. Then dress it.
AI that cannot break your level design.
Live: https://playbound-eta.vercel.app · Built for the Tencent × Arcade AI Hackathon (Cambridge, Oct 2026), Game Tech track.
Level designers block out levels with grey boxes to test gameplay, then wait weeks for art. Text-to-3D tools make one object at a time with no idea of the level. World generators invent a layout the designer never approved.
PLAYBOUND keeps the designer's layout as a contract, and puts AI at every step, always as a proposal the designer accepts or rejects:README 전문 보기 ↗Prove the greybox. Then dress it. AI that cannot break your level design.
Live: https://playbound-eta.vercel.app · Built for the Tencent × Arcade AI Hackathon (Cambridge, Oct 2026), Game Tech track.
Level designers block out levels with grey boxes to test gameplay, then wait weeks for art. Text-to-3D tools make one object at a time with no idea of the level. World generators invent a layout the designer never approved.
PLAYBOUND keeps the designer's layout as a contract, and puts AI at every step, always as a proposal the designer accepts or rejects:
level.json + GLB models) for Unity, Unreal or Godot.src/core/prove/constants.ts.fitToVolume scales each one uniformly (plus at most 25% sideways stretch) to sit inside its box. Odd-shaped models leave some empty space in the box (fill 37–100% on the hero level).Requires Node 22+.
npm install
npm run dev # http://localhost:5173
npm test # Prove, line of sight, fit, dress, store, share and export tests (no network, no credits)
npm run build # typecheck + production build
Create a free key at https://aistudio.google.com and put it in .env (copy .env.example):
GEMINI_API_KEY=...
The dev server exposes /api/ai/* (sketch, style, command, fix). On Vercel the same handler runs as a function (api/ai/[action].ts); set GEMINI_API_KEY in the project's environment variables. The key never reaches the browser.
npm install --global @hyper3d/cli
hyper3d auth login # browser login; uses your account credits (~0.5 per model)
npm run dev # the dev server now exposes /api/rodin
With the dev server running, Dress generates any box that isn't prebaked (about 2 minutes each, 3 at a time), and Regenerate makes a new variant. Each model is downloaded, shrunk (~28 MB → ~1 MB with meshopt and WebP) and cached in public/assets/gen/ by a hash of (prompt, size, variant). The same request never spends credits twice.
npm run dev
npx tsx scripts/prebake.ts http://localhost:5173 # generate every dressable box of the presets
npx tsx scripts/prebake.ts --prune # remove models no preset uses
Then open /dev-viewer.html to see every model fitted inside its wireframe box.
| Part | Where |
|---|---|
| Level contract (types, coordinates) | src/core/types.ts |
| Market Square presets (fail / pass) | src/presets/marketSquare.ts |
| Prove: A* on a 0.5 m grid, line of sight + exposure heatmap, cover check | src/core/prove/ |
| Editing, AI proposals (accept / reject) | src/core/store.ts |
| AI co-designer: Gemini client, validation, suggest-fix agent loop | server/ai/, src/core/ai/, api/ai/ |
| Share links + local saves | src/core/share.ts |
| Shared collision (player and bot use the same boxes) | src/core/geometry.ts |
| Dress: prompt builder, queue, prebaked → live → error | src/core/dress/ |
| Fit any model inside its box | src/core/dress/fit.ts |
| Hyper3D CLI route, incl. image-to-3D (dev only) | server/rodinDevPlugin.ts |
| Export zip | src/core/export/exportLevel.ts |
| UI: three.js / react-three-fiber scene and panels | src/ui/ |
Stack: Vite, React 19, TypeScript, three.js, @react-three/fiber, drei, zustand, vitest, Gemini (REST), Hyper3D Rodin (CLI). Deployed on Vercel.
This was built by one person with two AI coding agents working in parallel: Claude Code on src/core, the server and deploy, and Cursor on src/ui. They coordinated through PLAN.md (task board and human feedback per milestone) and HANDOFF.md (append-only log).
| Time | Beat |
|---|---|
| 0:00 | A paper sketch of a market square → Sketch → level → ghost greybox → Accept |
| 0:20 | Prove → fails: death corridor, red route, heatmap of what the defenders see |
| 0:35 | Suggest fix → AI proposes a cart, Prove re-checks it → Accept → pass → Lock |
| 0:55 | Style image → AI style notes → Dress → Rodin models fill the boxes (each ~2 min live; prebaked here) |
| 1:25 | FPS walk; Show colliders: collision still matches the greybox; regenerate one prop live |
| 1:45 | Share link + Export zip. "AI that cannot break your level design." |