Website powered by

Ghosts of Tabor - Real-time destruction & Custom HLODs C++

This is the second part of Ghosts of Tabor:

Note all the tools listed on this post were made in C++ directly for optimization, except the dev tools that are a combo.

Tools for renaming and automatic material instances creation.
Some of the headers and files created needed a custom calls, so did a batching tool process to help the artist and switch platforms automatically.

- The Physics & Destruction:
At some point in the game we needed of breakable glass, as our artist nor programmers found a solution for this, decided to implement a modular system that allows to have any kind of breakable element in the game, say a glass bottle, glass, wall or a red barrel.
And yeah this class were totally replicated.

This came with a system prior I developed for my games but ended in a mutation that have layers/steps lets say, where you can define of step affects the world, can cause damage in area, play sounds and effects, you can have as much states as you want, for events like degradation of a wall or glass, made some example effects for the artist for break bottles and glass using Niagara and specific materials for particles for lower cost.

By the end of the day this were the system used for all the destruction glass in the Island and other elements like barrels etc.

- The Level Creation & HLODs:
Due engine limitations the HLODs by default don't work well with the baker and was a tedious task for the artist, so made the custom HLODs, this implementation support different meshes individually plus particles.
Getting the local player location we can know at all time were the player is, this is done on super low frequency to don't affect the game at all, once the player is close, the system start to process the parts assigned to be rendered, once the whole models are load will remove the hull one or ones as more than one were possible to be set, plus the load times can be personalized plus the render load order.

All the load is batched so it don't affect the game or created freezes.

- The Instances:
The auto instancing didn't worked as we expected on Quest 2, so the solution from my side were to include my instances system that provides smooth material changes also, it were used to create trash on the floor and other elements, like a complete boat containers collection with variations.

Breakable glass cross platform destruction example

Breakable glass cross platform destruction example

Glass destruction example two

Glass destruction example two

You can notice that you can define per layer health for display, it included fade in and out effects plus effects in each state.

You can notice that you can define per layer health for display, it included fade in and out effects plus effects in each state.

The island of Tabor is a big level and we needed to occlude elements for each area, aside from the engine occlude due the need of the artists developed a custom HLOD system as the engine core one don't work well with baked light.

The island of Tabor is a big level and we needed to occlude elements for each area, aside from the engine occlude due the need of the artists developed a custom HLOD system as the engine core one don't work well with baked light.

On this case for example the lighthouse is composed of many meshes, the new HLOD system support not only meshes but particles in order to render them or not.

On this case for example the lighthouse is composed of many meshes, the new HLOD system support not only meshes but particles in order to render them or not.

The HLODs and instances were able to be created across a single button once all is selected

The HLODs and instances were able to be created across a single button once all is selected