Visual Development
A Fateful Night
A Fateful Night, Concept Style A - Procreate, 2023
Ethan Richards
A Fateful Night, Concept Shot
A Fateful Night, Style A
A Fateful Night, Style A Development Videos
A Fateful Night, Concept Style B - Procreate, 2023
Ethan Richards
A Fateful Night, Style B
A Fateful Night, Style B Development Videos
Programs Used:
Maya: Modeling
Substance Painter: Color maps, shader masks, and baking Normal/AO maps.
Unreal Engine 5: Shader Development, Post Processing Development, Rendering
Creating Custom Shaders
Shader Stills
Integrates Mathematical Systems including:
Fractional Brownian Motion
Random Noise
Cellular Noise
Trigonometry
Shadertoy Adaptions for Visualization
Main Code
vec2 st = gl_FragCoord.xy/u_resolution.xy;
st.x *= u_resolution.x/u_resolution.y;
vec3 color = vec3(0.0);
vec2 q = vec2(0.);
q.x = fbm( st - 0.03*(u_time));
q.y = fbm( st + 0.05*(u_time));
vec2 r = vec2(0.);
r.x = fbm(st*6.008 + 4. * noise(st) + q + vec2(8.3,2.8)
+ .1 * sin(u_time));
r.y = fbm(st*10.0 + 4. * noise(st) + q + vec2(8.3,2.8)
+ .1 * cos(u_time));
color += vec3(fbm(5.0 * st*fbm(r)), fbm(5.0 * st*fbm(q)),
fbm(5.0 * st*fbm(r + q)));
color -= vec3( 1.0 - distance(vec2(0,1), vec2(st.x, st.y)))
* .1;
color -= vec3( 1.0 - distance(vec2(1,0), vec2(st.x, st.y)))
* .2;
gl_FragColor = vec4(color,1.0);
Main Code
vec2 st = gl_FragCoord.xy/u_resolution;
float stripes = .2 + sin(st.x * 3.14 * smoothstep(-5., 1.,
sin(st.x * 4.0 + fbm(st.xx * vec2(1000., 20.)) * 6.)));
vec3 color = vec3(fbm(stripes * st.yy - .07), fbm(stripes * st.yy + .01),
fbm(stripes * st.yy + .03));
st *= 5.0;
float v = cellular(st) * .2;
color += vec3(v) * vec3(.8,.8,1.0);
gl_FragColor = vec4(color,1.0);
Real Time VFX and Shaders in Unreal Engine
Developing VFX in Unreal Engine using Niagara systems and in engine material shaders.
Methods include writing custom HLSL shaders, procedural randomness, and dynamic material parameters
Gravitational Explosion
Uses seven unique materials to provide layer and depth across the length of the explosion.
Divided into the 3 stages:
The Buildup
The Anticipation
The Explosion
Combination of 20 different Niagara FXs Layered across the 3 stages
Combines Radial, Fractal, and Refraction manipulations of noise to create unique visual interest and accentuate chaos and intensity
Integrates Dynamic Parameters on multiple shaders
Three Stages
Materials
Niagara FXs
Stylized Explosion
Uses Dynamic Parameters on a material to dissolve the explosion
Implements Parameters and parameters over time to adjust sizes, colors, and dissolving
Layers Smaller particle effects for debris coming off of explosion
Custom HLSL Shader
float result = 0;
for (int i = 0; i < nSides; i++) {
for (int j = 0; j < nCopies; j++){
float angle = (i / nSides) * (time) * 3.14159;
float2 pos = center + ((j/nCopies) * radius
* float2(cos(angle), sin(angle)));
result += length(pos - uv) < size; // Draw Circle
}
}
return(result);
Toon Building in Unreal Engine 5
Tools Used:
Unreal Engine 5.1
Houdini
Adobe Substance Designer
Modeling:
Modeled in Houdini
Allows for size/shape manipulation while preserving the UV
Roof Model and UV
Column Model and UV
Base Model and UV
Rendering Shader Development:
Creating the Toon Lighting:
Light Buffer Extraction
Defining a lighting threshold
Implementing Color manipulation
Integrating Scene Color
Creating Toon Outliner:
Get Pixel Info
Compare Normal and Scene Depth
Used as an Alpha and using Linear Interpolation applied over the Toon Lighting
Stages of Toon Lighting Shader
Visualization of the Toon Outliner