This is my entry for the Moving Meditation community render challenge held by YouTuber Pwisher during the summer of 2022. He provided the artists with different motion capture data to choose from and the camera setup. The artists were challenged to create a scene with the provided assets. The scene I created was a samurai turning the moon into a blood moon.
I used KineFX to import and clean up the motion capture because there was a lot of clipping and simulated the cloths with vellum. Additionally, I created the buildings and the bridges procedurally, so I quickly create different looks of the buildings by just changing different parameters. Also gave me the flexibility to adjust how the buildings and the bridges look at any point I want. Moreover, I used OSL to create the brick shader for the buildings and the lamp. Finally, the scene was rendered with Redshift and composited in Natron.
Here are my way of creating bricks with OSL:
shader brickwall
(
// create parameters
color brick = 1,
color mortar = 0,
float layer = 20 [[ float min = 0, float max = 100 ]],
float offsetH = 1.5 [[ float min = -10, float max = 10 ]],
float brick_height = 0.9 [[ float min = 0, float max = 1 ]],
float brick_width = 0.9 [[ float min = 0, float max = 1 ]],
float gapH = 0 [[ float min = 0, float max = 1 ]],
float gapV = 0 [[ float min = 0, float max = 1 ]],
float num_bricks = 5 [[ float min = 0, float max = 10 ]],
float layer_offsetO = 0 [[ float min = 0, float max = 10 ]],
float layer_offsetE = 0 [[ float min = 0, float max = 10 ]],
output color dif_color = 0,
output color pattern_mask = 0
)
{
// space
point uv = point(u,v,0);
point obj_pnt = transform("object",P);
// change height and width value for smoothstep
float height = 1 - brick_height;
float width = 1 - brick_width;
// create horizontal pattern
float patternH = sin(obj_pnt[0] * layer + offsetH);
patternH = patternH/2 + 0.5; // normalize
// smoothstep the pattern
patternH = smoothstep(gapH, height, patternH);
// create mask for odd and even vertical layers
float mask = sin((obj_pnt[0] * layer + offsetH)/2 + 1);
if (mask < 0)
mask = 0;
else
mask = 1;
// ------------------------------------------------ //
// create vertical patterns odd and even
float patternVO = sin(obj_pnt[2] * num_bricks + layer_offsetO);
float patternVE = sin(obj_pnt[2] * num_bricks + layer_offsetE);
// normalize the patterns
patternVO = patternVO/2 + 0.5;
patternVE = patternVE/2 + 0.5;
// smoothstep the patterns
patternVO = smoothstep(gapV, width, patternVO);
patternVE = smoothstep(gapV, width, patternVE);
// block out odd and even layers
patternVO = patternVO * mask;
patternVE = patternVE * (1 - mask);
float pattern = (patternVO + patternVE) * patternH;
// ------------------------------------------------ //
// outputs
dif_color = mix(mortar, brick, pattern);
pattern_mask = pattern;
}