It's been a while since the last upload. Especially with regards to some of the C++ experiments i've been doing.
Originally my plan was to release a better edited video to showcase some of the stuff i've been working on (i was hoping to have something more presentable/impressive by that time) but because writing a custom game engine takes a lot of time and research i opted to upload a small demonstration of the current state as-is to at least show that progress is being done. (I'm not entirely happy with how it looks right now. Have to work on the rendering pipeline a bit more and start using more complex PBR materials to further highlight the PBR capabilities.)
I wrote the game engine entirely in C++ and the Vulkan Graphics API. SDL is used as the base framework for Windowing and IO (Keyboard/Mouse). The soundsystem is a custom solution based on the OpenAL API (OpenAL soft) thus is is fairly basic compared to out of the box solutions such as Fmod. (It supports sound streaming though!)
Other notable features of the engine are:
Deferred PBR renderer
IBL (image based lighting)
Supports point and directional lights
cascaded realtime shadowmaps
postprocessing (Bloom, SSAO, HDR tonemapping, LUT color grading)
custom ECS solution
font/sprite rendering
Bullet physics integration
.png and .hdr image filetype support
skeletal animation support
Controller support
custom file formats for meshes/skeletons/animations
Blender python/C++ addon for streamlined exporting of meshes/animations to the engine with the ability to prebake shadows and AO
The given demo probably doesn't demonstrate some of the features properly (like the PBR materials) due to the assets chosen. Some other stuff is still work in progress like Bloom and shadowmaps (the former having flickering issues and the latter missing a softening filter.)
Tonemapping also needs to be adjusted.
The car itself is a physics object with a raycast based suspension system. I attempted to implement vehicle physics with a proper tire friction model based on the pacejka magic formula.
I have to say, vehicle simulation is no joke. IRL vehicle handling is in and of itself really complex. Car manufacturers can spend a lot of time to finetuning vehicle characteristics so that a car drives nicely. Implementing correct physics behaviour on top of that replicating/finetuning the gearbox, suspension, differential, etc... in a somewhat acceptable timeframe as a solo dev is nigh on impossible. (Especially if you write an engine on the side.) Entire companies spend years finetuning their simulation engines for racing games.
So to make things easier i for now try to simplify the simulation. For example, each wheel is simulated individually but i removed the variable tireload (which would affect the handling) from the tire friction calculation so that the suspension doesn't affect the handling at all.
For me i would be happy enough with an arcadey vehicle handling model as long as the handling still resembles that of a car.
There are still issues though. (For example the differential is still very basic and doesn't behave properly like IRL. There are also issues with the tire friction model on edge cases like the slipratio calculation at lower speeds.)
The windmills in the scene are implemented with a skeletal animation system. (The wings are attached to a bone which is being rotated.)
The car engine sound is a looping soundeffect of a vehicle at a fixed RPM which is constantly played back in a loop. I then adjust the pitch of the soundeffect depending on the vehicles ingame RPM in realtime.
The car model is taken from a car pack i purchased a license for online. The vehicles were made for mobile games (they have a relatively low poly count) but they are great for testing purposes. (it was easy for me to reapply my custom engine materials on them and their lower polycount allows me to load those assets quickly while testing the code.)
On the games side i'm not entirely sure where this will go. There are a couple of ideas i've but we will see how this will pan out on the tech side first.
The idea for now is to specialse the custom game engine for first-person and racing games (for either first-person movement like FPSs, racing games with vehicles or games which combine both genres like my previously released project Celaria.)
I have to admit though, there are times where i'm questioning my decision of writing a custom codebase. (Even though there are legitimate reasons for it like the availability to fix stuff without relying on a third party. Plus i really like to go in-depth tech wise.)
I'll continue to work on it. I hope to be able to share more soon.
Maybe i'll start posting more frequent updates about all that stuff here. We will see.