Reefbound — Procedural Voxel Ocean Survival • Final-Year Project
Engine: Unity • Language: C# • Role: Solo Developer • Focus: Procedural generation, voxel systems, water, survival mechanics, mobs
Overview
Reefbound is my final-year Unity project: a voxel ocean survival prototype built around procedural island generation, underwater exploration, custom chunk meshing, block-based water, crafting, smelting, tools, inventory systems, mobs, and environmental feedback.
The aim of the project was to explore how a voxel game could feel distinct from Minecraft by shifting the focus away from land-based mining and towards a deeper ocean survival experience. Instead of using Unity terrain or prebuilt voxel tools, I built the world pipeline myself, including chunk data, terrain generation, mesh construction, water simulation, foliage, item handling, mob behaviour, and player-facing survival systems.
Gameplay overview showing the island, ocean setting, and transition into underwater exploration.
Links
Technical Snapshot
- Chunk size: 16×128×16 voxel chunks, split into 16-block-high sub-chunks.
- World generation: Seeded procedural terrain using layered Perlin noise, ridge noise, erosion-style noise, biome weights, underwater caves, ravines, air pockets, reefs, ores, and foliage passes.
- Rendering: Custom mesh generation for solid blocks, water, foliage, block items, and voxelised held items.
- Water: Block-based water with source, falling, and flowing states, controlled through a queued frontier update system.
- Gameplay systems: Inventory, hotbar, chests, crafting, tool crafting, smelting, drops, gear slots, mobs, damage feedback, and underwater UI feedback.
What I Built
Procedural Voxel World Generation
Reefbound uses a custom Worlds manager to create, stream, update, and store chunks around the player. Each chunk owns its own block, water, foliage, cave, biome, and landmark data. Generation is split into stages so the world can prepare terrain, caves, reefs, ores, and foliage in a controlled order.
- Built a 16×128×16 chunk structure with separate block, water, foliage, and cave-mask arrays.
- Generated terrain using island shaping, domain-style warping, fractal noise, ridge noise, erosion noise, and biome weighting.
- Added underwater cave systems, ravines, air pockets, reef landmarks, and biome-specific ore placement.
- Created terrain layers including grass, dirt, stone, sand, limestone, dark sand, gravel, basalt, slate, coral blocks, and ore blocks.
- Built an island debug exporter to help inspect generated terrain and tune world shape visually.
Chunk Meshing, Colliders, and Streaming
The world is rendered through custom mesh builders rather than individual block GameObjects. Chunks generate visible faces only where needed, then separate their solid, water, and foliage meshes so each system can be rebuilt independently.
- Created face-culling mesh generation for solid blocks, water surfaces, and foliage.
- Split chunk meshes into sub-chunks to reduce rebuild cost when only part of a chunk changes.
- Added collider refresh logic so chunks can keep collision active near the player and demote distant chunks to data-only states.
- Used dirty flags to rebuild only the systems that changed, such as solid mesh, water mesh, foliage mesh, or collider data.
- Handled atlas UVs for a 5×10 block atlas using 32×32 pixel block textures.
Block Mining and Building
The terrain is editable during play. Blocks can be mined with visual crack feedback, converted into item drops, collected, and later placed back into the voxel world through the hotbar.
Block-Based Water System
Water was one of the main technical focuses of the project. Reefbound uses block-based water states instead of a shader-only ocean, allowing water to exist inside the voxel world and respond to terrain edits.
- Implemented source, falling, and flowing water states.
- Used a queued frontier system so water updates are processed over time instead of recalculating the whole world instantly.
- Limited water processing using a tick budget to keep updates controlled.
- Generated water mesh heights from water levels, including sloped water surfaces for flowing cells.
- Marked touched chunks as visually dirty so water mesh updates are rebuilt only where needed.
Underwater Atmosphere and Lighting
Because Reefbound is focused on underwater exploration, I built visual systems that change the feel of the world when the player dives below sea level.
- Created an underwater fog controller with depth-based tint, vignette, fog colour, and fog density blending.
- Added underwater particle support for visual depth and atmosphere.
- Built a day-night lighting controller with sunrise, day, sunset, night, and underwater lighting states.
- Added coral glow lighting to make underwater areas feel more alive and readable.
- Linked darkness checks into mob spawning so certain enemies can spawn only at night or in darker areas.
Inventory, Hotbar, Crafting, and Smelting
Reefbound includes a survival-style item loop built around gathering materials, storing items, crafting stations, smelting, and creating tools.
Crafting and smelting footage showing the survival progression loop in use.
- Built an inventory system with stack merging, cursor splitting, right-click transfer, hotbar slots, gear slots, and chest storage.
- Created hotbar and inventory UI systems for selecting items, displaying icons, and interacting with storage containers.
- Implemented crafting databases for normal recipes and tool-specific recipes.
- Built a smeltery system that accepts fuel, smelts raw tin, raw manganese, and sand, stores molten output, and pours materials from taps.
- Added placed crafting items and block item meshes so crafted blocks can exist in the voxel world and inventory loop.
Dynamic Tool Crafting
Rather than treating every tool as a completely separate fixed recipe, I built a dynamic tool system that combines heads, rods, and bindings into different tool types.
- Supported dynamic tool shapes including knives, pickaxes, drills, spears, and harpoons.
- Validated tool parts based on tool kind, material, rod type, and binding type.
- Calculated durability from the parts used to create the tool.
- Generated held item meshes from item textures so tools and items appear voxelised in the player’s hand.
- Added different held-item poses and actions for mining, lunging, drills, spears, and harpoons.
Mobs and Ocean Life
Reefbound includes both peaceful and hostile mobs, with different movement systems for land and water creatures. Each mob has its own behaviour script rather than sharing one generic brain.
- Created a mob spawn manager with distance checks, chunk checks, depth bands, group spawning, despawning, night spawning, and darkness requirements.
- Built shared mob systems for health, drops, physics, animation parameters, attack hitboxes, and world queries.
- Implemented land movement for crabs and pirate skeletons, including terrain stepping and simple target following.
- Implemented swimming movement for reef fish, stingrays, turtles, plesiosaurs, megalodons, piraugunhas, and giant squids.
- Added creature-specific behaviours such as clam shell closing, crab chasing, stingray poison jabs, reef fish fleeing, turtle taming/riding, and predator chase/attack states.
Survival Feedback and Player Interaction
I added several feedback systems to make the prototype feel more playable and less like a static terrain demo.
- Built block breaking feedback using a crack overlay renderer.
- Added player HUD feedback for health, oxygen, pressure, gear, selected items, and status effects.
- Implemented player damage feedback so hits are communicated visually.
- Created death drop caching so dropped items can persist through death flow logic.
- Added item pickups, drop tables, pickup spawning, and debug tools for testing item flow quickly.
Technical Challenges
Keeping voxel updates manageable
A major challenge was avoiding full chunk rebuilds every time something changed. To solve this, I separated chunk systems into solid, water, foliage, and collider rebuild paths, then used dirty flags and sub-chunk masks so only the required data is refreshed.
Making water work inside a voxel world
Early water experiments focused more on visuals, but Reefbound needed water that could exist as part of the block world. I moved towards block-based water states and a queued update system so water could flow after terrain edits without causing huge frame spikes.
Building a survival loop around generated terrain
Once the world generation was working, the next challenge was giving the player reasons to interact with it. The inventory, crafting, smelting, tools, mob drops, gear, chests, and item placement systems were built to turn the generated world into something closer to a playable survival prototype.
What I Learned
- How to design a voxel world as data first, then generate meshes, colliders, water, foliage, and gameplay systems from that data.
- How to split large gameplay systems into smaller rebuildable parts to reduce unnecessary work.
- How to use procedural generation for more than terrain height, including caves, ores, reefs, foliage, landmarks, and mob spawn rules.
- How to connect technical systems to player-facing survival mechanics such as tools, crafting, smelting, gear, and combat.
- How important debugging tools and visual feedback are when working with procedural worlds.
Current Status
Reefbound currently has a functioning procedural voxel world, chunk streaming, meshing, water flow, underwater atmosphere, inventory, hotbar, crafting, smelting, tool creation, mobs, drops, lighting, and player feedback systems. The project is still a prototype, but it now represents a broad technical vertical slice of the ocean survival game idea.
Next Steps
- Polish the player progression loop so tools, oxygen gear, mobs, and resources guide the player more clearly.
- Improve optimisation with further profiling, mesh rebuild tuning, and possible greedy meshing experiments.
- Expand underwater cave structure and biome identity.
- Improve mob balancing, animations, and combat readability.
- Replace placeholder presentation areas with stronger gameplay footage and clearer screenshots.