Technical Art Reel
A reel of my shading and real-time VFX work created with Unity, Unreal, Houdini and Substance Designer
Unreal | Procedural Landscape Material (2023)
The procedural landscape material is designed to help automate the creation of new landscapes in a game or scene. It consists of 5 modular layers: cliff, dirt, gravel, grass, and snow. Each layer is comprised of the following 2k maps: Albedo, Normal, and a packed texture containing maps for Ambient Occlusion (AO), Roughness, Metallic and Displacement. The layers are additively blended using an angular slope value derived by remapping the Z-value (with Unreal using a Z-Up coordinate system) of the landscape’s pixel normals from [0, 1] to [0, 90]. Triplanar Mapping and Texture Bombing is used on cliff faces to reduce stretching and repetition artifacts respectively, giving the cliffs a more naturalistic appearance.
The landscape can be painted either manually or procedurally to simulate wetness after rainy weather conditions. This additional pass takes the landscape’s incoming Base Color, Roughness, Normal and AO values and outputs the final values based off a shader from Naughty Dog’s 2016 SIGGRAPH paper, Technical Art of Uncharted 4, pg. 59-64. Shader complexity for the material is dramatically reduced by storing the final output values as a runtime virtual texture, reducing the shader instruction count from 800 to 490. The material is applied to a 1k (1024 x 1024) vertices) sized landscape.
Unreal | Waterfall Tool (2023)
A method to instance procedural waterfalls in any level using a Blueprint with modular Materials and particle systems.
Starting with a mesh lofted along a Spline, the waterfall Material is primarily comprised of two scrolling Normal Maps that are weight blended by a Sine Wave. White foam is added via the Material’s Base Color via a single Texture with various foam densities packed into the Red, Green and Blue channels. Foam can be vertex painted onto each instance of a waterfall.
The Material has a global Opacity value to determine the translucency of the water, but this value can be painted via vertex colors as well to create variable (or no) opacity at artist defined areas.
A scrolling noise mask is applied to the edges of the Material via a gradient, and fed into the Material’s Opacity output to create organic edges at the side.
Unity | PCache Bake Tool (2022)
Extended Unity’s built-in pCache (Point Cloud Cache) tool to accept a grayscale image as an input to mask out only the relevant points a user desires for their point cloud.
Unreal | Azul (2020)
The environment used in the Azul demo was comprised from a set of twelve procedurally generated rock assets ranging anywhere from 500 to 5,000 polygons. The ocean surface utilizes two Gerstner Waves (essentially sine waves with sharp peaks and flat valleys) to simulate its underlying motion, and procedurally animated 1k Normal Maps to give texture to its surface.
A pair of two 512x512 textures formed the basis for the caustics in the scene. The pair had their UVs distorted via a Normal Map to emulate the warping motion of light as it refracts underwater. These pairs were then panned at different offsets and appear at alternate intervals via a sine wave. The scene is lit via an atmospheric fog volume and a dynamic spotlight projecting these caustics via a light material function.
I created the school of fish via a Niagara particle system. The frequency and amplitude of their swim animation is determined via world position offsets in their material which are dynamically modulated in the Niagara particle system. On an older Nvidia GeForce GTX 1060 this scene runs at a consistent 60FPS.
