Interactive Graphics Course · Sapienza University of Rome Academic Year: 2025/2026 · Professor: Marco Schaerf
A browser-playable, third-person 3D platformer built with Three.js and the cannon-es physics engine, inspired by the classic Super Mario 3D games.
The game features a fully explorable open island, a five-stage quest system, two boss encounters, a rideable companion (Yoshi), procedural skeletal animation, and a Mario-Galaxy-style spherical planet with custom gravity.
- Open world exploration — A fully explorable main island populated with coins, Power Stars, NPCs and dynamic decorations (trees, flowers, rocks), placed by a procedural scattering algorithm that respects buildings, hills and points of interest.
- Mario Galaxy-style spherical gravity — A walkable "sky planet" with a custom additive gravity field: the player falls toward and walks around its curved surface from any direction, with movement and camera orientation adapting automatically.
- Procedural skeletal animation — 100% procedural, rig-agnostic animation for every character (Mario, Luigi, Yoshi, Bowser). No animation clips were imported: idle, walk, run, jump and fall cycles are all synthesized at runtime from hand-authored pose parameters.
- Rigid-body physics — Full physics simulation powered by
cannon-es, including collision filtering, contact materials and the custom planetary gravity layered on top. - Advanced graphics & shaders — A hand-written GLSL skybox shader with luminance-based cloud contrast, procedurally generated tileable arena textures (Python/PIL), and dynamic lighting with a tight, high-resolution shadow map that follows the player.
- Boss fights & obstacle courses — Two distinct boss encounters (Kamek and Bowser), each with its own hazard-filled arena, a wind-up ranged attack, and a live health bar.
- Rideable companion (Yoshi) — Find and hatch Yoshi's egg, mount him for a boosted jump, and reach otherwise unreachable collectibles.
- Dynamic HUD & quest system — A five-phase objective panel guides the player through the game's content, alongside contextual "Press E" prompts, dialogue bubbles, and a live boss health bar.
- Adaptive audio — Independent music/SFX volume channels, a mute toggle, contextual sound-effect voices (e.g. while riding Yoshi), and music that switches automatically between the overworld and each boss zone.
| Input | Action |
|---|---|
| W / A / S / D | Move (forward / left / back / right) |
| Shift | Sprint |
| Space | Jump |
| I / J / K / L | Free camera orbit (pitch/yaw) — disabled on the sky planet |
| E | Interact: talk to an NPC, mount/dismount Yoshi, advance dialogue |
| Esc / Pause button | Pause menu (volume sliders, mute, controls reference, restart) |
| F3 | Toggle physics collider wireframe overlay (debug mode) |
| F4 | Toggle performance (FPS) wireframe overlay |
- Rendering engine: Three.js (r160)
- Physics engine: cannon-es (v0.20.0)
- Data-driven levels: the main island and both boss arenas are defined as JSON files (
level1.json,kamek_zone.json,bowser_zone.json) parsed by a customLevelLoader - Deployment: fully static, client-side only — no backend, no bundler, optimized for GitHub Pages
For the full breakdown of the animation pipeline, the gravity/physics system, lighting and shaders, and every implemented interaction, see the technical report.
final-project-fedezteam/
├── index.html # Entry point
├── CSS/ # UI/HUD styling
├── js/
│ ├── core/ # Renderer, camera, input, audio, asset loading
│ ├── physics/ # cannon-es setup + planetary gravity fields
│ ├── entities/ # Player, Yoshi, enemies/bosses, level & buildings
│ │ ├── animation/ # Procedural rig-agnostic animation system
│ │ └── Level/ # Level loading, decorations, collectibles
│ ├── interactions/ # Quest manager, NPC interactions, dialogue
│ └── ui/ # HUD and menu management
├── assets/ # Models, textures and levels (JSON)
└── docs/ # Technical report (PDF + LaTeX source)
Built on Three.js and cannon-es. Character and prop 3D models were sourced from public asset repositories and are not original team work; all game logic, physics tuning, procedural animation, shaders, level design and UI were developed by the team.
- Alessandro Brighenti
- Lorenzo Francescotti