Destructive Time-lapse Project

The project currently is focused on the material deterioration, although it has a lot of other interesting things going on as well. The concept was an idea I decided to undertake as part of my graduation work as a game graphics student. I’ve always had a strong interest in visual storytelling through interesting environment design in both games and film. As a student, my graduation work was the perfect opportunity to combine my love for weathered environments with a strong interest in Unreal Engine blueprints and Substance Designer materials.

The unique aspect of this tech showcase is giving the user the possibility to completely transform the environment during runtime. Right now it’s based on a set of open parameters, but the gameplay possibilities using this type of workflow are endless.

The scene has a bunch of various materials, which are changing in realtime depending on the surrounding circumstances. Could you talk about how is the whole thing organised in Unreal Engine 4?

Everything in the scene is done using UE4 blueprints and materials. Both been absolutely fantastic to work with, giving me as an artist the tools to create awesome things, even without a coding background. This combination of visual beauty and backend ease of use is why I chose for Unreal Engine 4 over other popular game engines.

The framework I’ve built creates a link between the UI, the level blueprint, and the actual materials/shaders, in order to pass on input information to the materials.

One of the challenges I faced early on was finding a way for materials to be editable in runtime, and to control them without having a hardcoded sequence of material changes over time. The issue was that regular materials or material instances could not be edited once the game starts running, which was quite problematic at first. The solution came in the Shape of Unreal’s Dynamic Material Instances. Even though they can only be created and assigned during runtime, they have the major advantage of being editable on the go. Once I got them integrated in the system, I could create material instance as normal, and use the UI input as parameters.

The materials themselves use a custom home-grown greyscale map I’ll be referring to as a decay map. As pictured in the accompanying image, a decay-map is a greyscale map that defines different grungemasks, depending on an input parameter. This input parameter is a scalar input value, calculated using the UI values defined by the user. Using some clever shader tricks a certain area of the decay map will be converted to a greyscale mask, which can be used to grunge up areas. The input parameter defines the lower limit in the range of brightness that should be interpreted as masked. When the input parameter is 0, all values between 1 (255,255,255) and 1 are masked. The more time progresses, the larger the mask range becomes. This newly created mask is then passed on, and the masked areas that were once clean materials, become totally grunged up. This process repeats a few times for each different effect, as to prevent obvious tiling and repetitive damage.