Gavin Clayton
@gavinclayton
Hello! I'm the creator and lead developer behind Daggerfall Unity. Now working part-time on another game. Devlog: Location: Australia
Snow is the weakest setup so far, as my basic particle system can't produce nice flutter yet. Still looks OK with a little distance fog and a cloudy sky.
Rain and mist particle systems, volume fog. The mist particles and fog interact with directional lights and a spot light from above.
GPU driven particles. Started work on this last year around the same time as foliage imposters. Still very much WIP but it's good enough for a lot of basic effects.
GPU driven foliage and hemi-octahedron imposters for select objects like the trees. Terrain shown is 512x512 metres. Uses GPU scattering for foliage with gather and frustum cull. Draw instanced indirect means the buffers never touch the CPU once setup.
Mixed deferred and forward materials all lit by the same renderer and clustered lighting. There's IBL, directional, and two spot lights in scene with transparency on a few objects. Sorting transparent objects is still a problem to solve, but this is good enough for standalone objects for now.
Buoyancy physics for dynamic objects. Uses four probes around the middle height of each object sampling the Gerstner waves with same math as GPU. Lowering buoyancy causes objects to sink until they settle on underwater terrain surface.
The UI system in my engine is basically the same used in DFU, even if it has come a long way in the last few years. I cut the first code for this UI in 2012. Almost 14 years later it finally has a visual editor haha. Feels great just dragging around layouts with undo/redo, etc.
My engine now has a fully lit forward path consuming the same light clusters deferred path uses. This allows me to setup things like semi-transparent windows and other forward objects that still interact with scene lighting. Volume fog and area GI also came out of the same work.
Pushing more enemies at higher frame rates after some optimisations. Every mob is individually skinned, holding a weapon that tracks with their hand node, running a Lua script for flocking behaviour, and interacting with physics / navmesh. The fights won't be this large, but I always test at scale.
Working on grouping behaviours for enemy combatants. Uses boids-styled flocking where they aim to encircle the player without getting too close (for now).
Player character holding a weapon with attachment socket driven by animation tracks. Root motion and blending based on facing. This is all driven by a Lua script consuming a state machine controller and action input system. Next rung of the ladder will be more states in the controller.
Working on nodes linked to animations so that characters can hold weapons, and realised I was most of the way to root motion. I can now drive any animation state with motion so they play as authored. Engine uses Ozz Animation in back end, anim shown is by Quaternius.
It's really just soft directional ambient in a box, but it reads pretty well against the other scene lighting and shadows. I can even use it to subtract light from a scene so there's sunlight outside and pitch dark inside. Same building warm and cozy vs dark and foreboding.
Working on a local GI volume. No bounces, but it can gather local, directional, and environment lights into a few sliders and carry illumination into underlit areas, e.g. the recess on the right and under the furniture. It's cheap and useful for interior spaces that need a little pop.
Over the last couple of weeks, I've revived the terrain and foliage systems I was working on in 2024/2025 with some fixes and added a Gerstner wave water plane to tie it all together. Art aside, all the tech I needed to build in my engine for outdoor environments is finally in.
After all the work on point lights, spot lights came together easy.
Point light shadows now functional in my engine. I've been trying to solve various problems with these for ages now. There's always more refinement to do later, but they look good in action and remain stable.
Engine now has a mobile character state machine with behaviours driven by Lua script. Each of these angry little guys is running on a Lua "brain", following me around a navmesh in a simple test kit.
I've wired up the Kit > Sandbox instantiation flow. Now I can instantly test and replay kits with full physics simulation at the press of a button. Here, I've built a quick tower of blocks in Kit editor surface than Ctrl+P to run in Sandbox and smash them.
Added start/pause/stop controls and a time acceleration button in sandbox. Time acceleration only applies to game time, but pausing will also pause physics simulation.
Sandbox is linked to gametime, which animates a procedural sky with day/night cycles. Later it will handle timed events for quests and so forth. Wiring all this up so that I can playtest kits instantly in sandbox with start/pause/stop and time controls.
Reworked editor UI from everything docked into a single frame and feeling cramped to tabbed layouts where each tab is responsible for a single workflow. This feels much nicer and everything has more room to breathe.
I've added a Commands component that lets me stick console-like commands directly to an entity. This will help me start testing script behaviours, events, vars, and so on without needing to build full editor UI for them right away (I'm tired boss).
Model import now has settings to determine if importing visual nodes or full hierarchy, assign and create default materials assets, and set default collider and physics deployed. Great for getting tests up and running quickly.
Added popup context menus and some basic "create thing" tools. Cut/copy/paste works, and can convert a nested kit back to local scene objects if needed.
The log reader can now show log/sublog data for nested processes and I fixed search.
I can now build array textures directly in editor and use these elsewhere, e.g. in terrain shader.
Added some material thumbnail icons in asset browser, creating when saving material. Needs some work so this can be produced during asset build and not just when saving.
Upgraded text edit box control with copy/paste, undo/redo, double-click selection and more tiny improvements.