Website powered by

Vikings Valhalla - Tech Art

This is a compilation of tools and shaders I made for the project Vikings Valhalla, developed by Emerald City Games and published by Netflix. In this project I worked as the Tech Art Lead, working together with Alexandre Soria (https://sorialexandre.tech/).

Most of those videos have outdated assets and don't reflect the final look of the game.

Water shader as seen in the final game

Demonstration of the fake Subsurface Scattering. Its opacity is controlled by vertex colors, so we could add variation to its intensity and to avoid it close to the shore

Demonstration of the fake bottom parallax. The water shader is opaque, so I used parallax to make it look like it's transparent. Distortion the height map also helps with the illusion

The waves use a separate shader, and they are the element that helps blending the water and the land, making it look like one single transparent effect. I made a spline tool to test its placement

The shadow map is sampled manually so I could use the parallax of the fake flor to project shadows on it, also allowing the shader to distort the shadows

The ripples on the water are done using a volume texture. I had to make a script that calculates a 3D Worley noise and saves it as an asset. The texture is very low res, and the shader samples it 3 times for variation

The waves are done by remapping 3 gradients at different speeds and distortions and adding them together

I also worked on a shader for the rivers crossing the stage

Environment artists had the freedom to paint the rivers with vertex colors inside the engine. The meshes would them be saved as assets

Lookdev of fire, smoke and blood

Tests with vertex animations for buildings collapsing and taking damage

Experimental Vignette shader that, as long as its visible in front of the camera, fits itself on the corners of the screen, and uses vertex offset to avoid overdraw. Its settings are controlled by a script

Comparison between a PBR shader (left) and the custom character shader (right). It adds anisotropic reflections and a discrete tint of red on the face close to its shadows. Also metals don't rely on cubemaps, using a matcap texture instead.

This is the texture used as a matcap in the shader. Red and Alpha represents the anisotropic reflections, green is the specular gradient and Blue is used as a metallic reflection. There's no diffuse gradient in the Matcap

The Matcap is sampled by multiplying the World Normals by a Light Matrix. Conveniently it results in a vector where Z works as the diffuse reflection. By merging all specs into a vector we end up with anisotropic specs for free pretty much

The Matcap is sampled by multiplying the World Normals by a Light Matrix. Conveniently it results in a vector where Z works as the diffuse reflection. By merging all specs into a vector we end up with anisotropic specs for free pretty much

The light Matrix is generated by a script attached to the main directional light, and it consists of the 3 vectors that form the light Transform

The light Matrix is generated by a script attached to the main directional light, and it consists of the 3 vectors that form the light Transform

Shadows and highlights trick to make the grass feel more volumetric

The ground has a shader that samples 4 different tilable textures in a single atlas, where the grass and rocks have a special blend formula, with the 2 other slots reserved for dirt/snow and sand

Early version of the floor shader, testing how to sample tileable pieces of an atlas. A second shader "fuses" 4 sets of textures into one atlas, and the lighting is calculated there already using all necessary textures. The actual floor shader is unlit

The floor shader also supports vertex colors to add tint variations as needed

I made a Worldmap shader that allows designer to paint their own maps with little artistic skills. It uses vertex colors to paint itself. You can paint stains, landmasses and rivers on the map

A render-texture was used to hide/reveal parts of the map. It creates an effect where it looks as if the map is being drawn and painted, all controlled by animating the scale and opacity of sprites invisible to the game camera

This wind controller can change the direction of the flags and also rotates all the animated grass so it also moves in the right direction