Work in progress · UE5 · Survival prototype
Unreal Engine 5 — environments & systems
I am building a high-detail, ARK-inspired survival prototype in Unreal Engine 5.7: a large open-world island, satellite biomes, harvestable resources, and a first/third-person hybrid — prioritising scalable systems, honest performance work, and the same iteration mindset I bring to web frontend projects.
01 · Vision
Project overview
The goal is not to ship a full commercial title tomorrow — it is to prove I can grow a large-scale survival game foundation with ARK Ascended–style visuals and mechanics, built cleanly from scratch with systems that can scale. I am targeting an open-world island map, multiple biomes (main, desert, snow, volcano planned), harvestable resources (trees, stone, oil, and room for more), and first- / third-person hybrid gameplay with realistic lighting and foliage where performance allows.
I am leaning on Lumen, Nanite, and high-detail foliage where it makes sense, but I am not treating fidelity as a free pass: large environments only work if I keep profiling, culling, and shadow cost under control. That tension — visual ambition versus frame time — is most of what this project has taught me so far.
02 · Terrain
Main island & landscape material
I started from a main island built on imported heightmap data (Duke54 pack), brought in as a UE5 Landscape. Over that I use an Auto Landscape Material from Fab: slope- and height-based blending instead of hand-painting every layer. That choice fits the ARK-style realism I want — it scales faster than manual painting — but it has a real downside: fine control over specific zones is harder, and it later complicated some of my PCG experiments because I do not have the same manual layer masks I would on a fully painted terrain.
The island covers grassland, forest, beaches, and mountains. I am prioritising readable terrain variation and traversal over a stylised low-poly look; the art direction is deliberately closer to a modern survival sandbox than a minimal aesthetic prototype.
03 · Biomes
Satellite islands & biome planning
Rather than one monolithic map, I split the world into a central main island and separate satellite islands. I have a desert island at roughly 2000×2000 units, with snow / iceberg and volcano islands planned. This mirrors how ARK-style games scope content: streaming, performance, and biome identity are easier to manage when each major theme has its own space instead of fighting for the same landscape shader everywhere.
On the snow / iceberg side I experimented with a separate landscape, custom heightmaps, and layouts that read as cliffs, interior snow fields, and smaller connected landmass. I learned that multiple landscapes can coexist in one level if I manage transforms and materials carefully — they do not simply overwrite each other. The hard parts were finding usable heightmaps, placing the landscape convincingly in the world, and matching materials so the biome does not look like a pasted-on kit compared to the main island.
Volcano is still on the roadmap: lava flows, volcanic rock, and emissive, material-driven lava (not full fluid simulation — I expect it to stay shader-led with masks and motion). I have already explored heightmaps and material effects enough to know the look I am aiming for when I commit serious time to that island.
04 · Water
WaterBodyOcean & map edges
I use Epic’s WaterBodyOcean with the UE5 water system. Early on I fought issues where water did not cover the map edges, the ocean felt “locked” in size, and landscape interaction made behaviour unpredictable. The fixes that actually stuck were adjusting Ocean Extents (size is driven by extents, not by scaling the actor like a generic mesh) and toggling Affects Landscape when the landscape was fighting the water volume.
The key lesson I took away: ocean scale is controlled by extents, not transform scale — once I treated the water component as its own system with its own rules, iteration got much faster.
05 · Environment
Foliage, shadows, and the performance crisis
I rely heavily on the Foliage tool for trees, bushes, rocks, and ground clutter — tuning instance density, culling distances, and wind via materials. That part felt productive until shadow cost exploded: GPU time for shadows jumped from roughly 0.8ms to 9–15ms. The culprit was tree leaves casting dynamic shadows at scales the scene could not sustain.
I addressed it with a combination of Virtual Shadow Maps settings, shadow distance limits, foliage-specific shadow behaviour, and a console tweak that made a noticeable difference in my tests: r.Shadow.Virtual.ResolutionLodBiasDirectional 0.5. After those passes, the frame returned to something I could iterate on without constantly fighting the GPU.
For wind / world position offset (WPO), I implemented foliage motion in materials — but WPO everywhere is expensive. I added a WPO disable distance (around 5000 units): trees close to the camera animate; distant trees go static. That trade saves a lot of work on large vistas.
06 · Systems
PCG experiments and the hybrid harvesting approach
I spent time in UE5 PCG — sampling landscape data, filtering by slope, driving density, and testing runtime generation. In my setup, PCG fought me: with an auto landscape material I lacked the manual paint layers that make distribution control straightforward, and runtime complexity was hard to justify for the gameplay I actually need right now.
I stepped back and chose a hybrid that matches how heavy survival games tend to behave: keep the world filled with foliage instances for performance, then on interaction line trace → hit foliage → remove instance → spawn a real actor that runs gameplay logic (health, drops, animation). That keeps the open world cheap to render while still giving me proper actors when it matters. It is the same class of idea as instance-based worlds with actor-backed harvesting — performance first, gameplay where the player is looking.
07 · Gameplay
Harvesting system design
I am working toward trees you chop until they shake and fall, bushes you pick up, stones you harvest at different scales, and oil nodes with their own interaction rules. For trees, the direction is the instance-to-actor swap: the actor handles animation, health, and drops once the player commits to the interaction.
Small stones map cleanly to pickup-style interactions (for example, a key press); larger rocks are scoped as longer interactions — harvest over time rather than a single instant grant. For oil, I worked with oil rock meshes and material-driven motion: noise, masks, and multipliers to suggest flow without running a full physics simulation.
08 · Player
Character, camera, and first / third person
I imported and extended the UE5 third-person template, then customised movement, camera, and controls to suit the project. I hit a classic input bug: vertical look did not work until I corrected the mapping so X drives yaw and Y drives pitch — a small mistake that wastes hours if you do not sanity-check axes early.
I built a scroll-wheel zoom that moves between first- and third-person: scroll in for first person, out for third. Instead of snapping, I used a timeline with lerp so the transition stays smooth. That polish matters for a survival feel where players constantly shift between navigation and inspection.
I already know harvesting will need a credible first-person presence — if I want arms visible while chopping, I will need a proper FPS-style mesh setup (separate arms / weapon mesh) rather than only a camera offset on the third-person body. That is queued as pipeline work, not a one-line fix.
09 · Characters
Metahumans, skeletons, and animation direction
I explored Metahumans, the Manny / Quinn skeleton, and Lyra-style animation setups. The important realisation for me: Manny / Quinn share a skeleton with Metahumans, which means animation compatibility and reuse across those pipelines is actually plausible — if I standardise on that rig, I am not trapping myself in a one-off character tech dead end.
I also hit the usual import pain: broken animations, twisted skeletons, axis confusion. I weighed Mixamo, paid packs, Lyra-based setups, and ALS-style locomotion. My current direction is pragmatic: lean on an existing system and adapt it rather than reinventing locomotion from scratch — animation is one of the hardest layers to get right, and I would rather spend time on world and systems than fight every retarget edge case alone.
10 · Materials
Rocks, ORM packing, oil, and landscape
On rocks I work with base colour, normals, and ORM (occlusion, roughness, metallic). I had to learn the packing discipline the hard way: in a typical ORM setup, R = ambient occlusion, G = roughness, B = metallic. Once that clicked, authoring and debugging materials became much less guesswork.
The oil material leans on procedural motion: noise and masks rather than simulated fluid. The landscape stays on the Fab auto material — slope blending, height blending, and multi-texture terrain that keeps the main island readable at distance.
11 · Performance
Profiling, Lumen, clouds, and world streaming
In the editor I have seen VRAM usage sit around 11.4GB of 12GB with Lumen, Nanite, and heavy content loaded — painful but not surprising for UE5 at this fidelity. The biggest bottlenecks I keep returning to are shadows, volumetric clouds (random spikes), and Lumen cost — necessary for the look, but not free.
Alongside foliage fixes, I have applied Lumen downsampling via r.Lumen.ScreenProbeGather.DownsampleFactor 32, shadow bias tweaks, WPO distance cutoffs, and aggressive foliage culling. I also explored HLOD and World Partition: streaming regions versus merged distant meshes, and why trees can still “appear” via HLOD even when you expect unloading — it clarified the difference between streaming (what loads) and HLOD (what simplifies) in my head.
12 · Workflow
Tools & how I work
My core stack is Unreal 5.7.x, assets and materials from Fab, textures via Quixel, and heightmaps (including Duke54) for terrain starts. I prototype quickly, profile when something feels wrong, and prefer practical fixes over building custom engine-scale systems before I have gameplay worth scaling.
13 · Status
Current state & what comes next
Working today: main island, foliage pipeline, a performance baseline I can iterate on, player movement, camera / perspective transition, and the water setup.
In progress: harvesting logic end-to-end, snow island polish, and material pass on key assets.
Not started or early: a full animation/locomotion stack locked in, ARK-style inventory, multiplayer (if I commit to it), creatures / AI, and crafting loops. The order I am aiming for is deliberate: finish harvesting → inventory grid / stacking / drag-drop → lock character pipeline via Lyra or a pack → finish remaining biomes → defer creatures until the survival loop feels solid.
14 · Principles
What I am optimising for
- Performance first — I chase spikes early; a beautiful level nobody can run is not a milestone.
- Use the engine — foliage, water, landscape materials: leverage Epic’s systems before I write bespoke replacements.
- Hybrid where it counts — instances for scale, actors for gameplay.
- Do not over-engineer pre-gameplay — I parked heavy PCG until the content model demands it.
15 · Honest take
Where I have actually got to
A lot of solo UE projects never get past greyboxed terrain, or they look pretty until the first performance profile, or they die where animation and rigging get hard. I am not claiming a finished game — but I have moved from an empty map to a functioning survival foundation: a navigable world, water, foliage with a tuned cost profile, movement and camera systems I can iterate on, and a harvesting architecture that scales the way I need it to.
The decisions I am proud of are the boring ones: fixing shadow spikes early, refusing to let PCG own the project before gameplay exists, and committing to engine-native systems (foliage, water, landscape materials) instead of reinventing them. Those choices are what make this project feel like something I can still work on in six months without rewriting everything from scratch.
16 · Parallel
How this connects to my web work
On the surface, UE5 and Nuxt could not look more different. In practice I use the same habits: break work into systems with clear boundaries, measure instead of guessing, keep the player (or site visitor) path honest, and refuse to hide bad performance behind buzzwords. If you want web work that benefits from that mindset — structured builds, performance awareness, clear scope — see Paul Petruzzi or SEO & content architecture, or reach out on the contact page.
17 · Stack
Tech stack
Representative of what this prototype actually touches week to week.
Technologies & practice areas
- Unreal Engine 5.7
- Blueprints
- Landscape & foliage
- Lumen / Nanite (where appropriate)
Also involved

