Programmer & 3D Artist
Voyager Game Engine
Voyager Game Engine is custom built from the ground up and written in C. Heres some of its notable features
Physics & Ragdoll Editor
Voyager supports boxes, meshes, balls and capsules, restitution, non-uniform friction, continuous collision detection, spring joints, soft forces, bouyency, fixed timesteps, mesh filtering/queries such as plane slice, raycast, spherecast.. and modifiable reference frames. On top of all that it is also 100% determinate.
The reason for the flexibility is because it is code controlled, meaning, there is no clicky-clicky GUI for it, the responsibility is on the programmer.
Ragdoll collision information however can be compiled via the Blender tool.
Large scene lighting
Voyager supports a static lighting system that can render up to 1100 forward lights at once. Its good for large scenes with many lights that can turn on and off. The limitation is that they cant move and only up to 6 can effect any 8x8x8m area.
Blender as content Editor
I am a huge Blender fan, I think its very efficient to work in. So I decided to extend it as the primary content editor for Voyager. It adds logic entities, translates lights and reflection probes, and automatically compiles textures from the blender scene into compressed .mdl files. The compiler is written in one 4k python script.
The benefit: its been a huge comfort cutting out a middleman of a level editor or other program.
The drawback: cannot view the lighting and shaders in their true form, but its close.
Asynchronous resources & community content
Voyager loads all content items in the background smoothly, including community content. There is a full Steam Workshop implementation which has allowed anyone to upload their own content. When you load a new level for example, your character and current world stays in existence while it bakes the new map.
Mixed procedural, IK and FK animation
Voyagers animation system is completely code controlled. This gives you fine control over procedural effects such as weight balancing and IK. Each subsystem (walking, skateboarding, etc) is implemented directly in their own way. So its pretty fast to evaluate too. Skateboarding is the most complicated one and was the reason it required such fine control.
Animators can run as many as you want at the same time, and then just blend them together again after. This is allowed because there isn't really a concept of 'animator'. Its just instructions.
A drawback of this approach: It cannot be used by non-technical artists.
Voyagers DSP uses a hand crafted reverb filter which was designed for fine control over the reflection distances and weights. Skaterift for example controls the filter using 12 raycasts to determine distance.
Some additional features:
- Procedural audio (an example of birds. - it should be notable, that these sounds are stored in less than 200 bytes of memory! thats a 0.00006% compression ratio!)
- LFO modulation (for effects like bricks or tiles)
- 3D spacialization, doppler and resampling rates
- Fade in/out sequencing
Small and Fast
Thanks to it being multithreaded and written in simple C the engine starts and loads as fast as the storage can handle
Server & Custom database
Voyager implements a game server using Valve Networking Sockets. It is used to store highscores in a database and verify users. As with all the voyager tools (except the content compiler), it is written in simple C code. The database is a simple in-memory one which can handle a few million records.