Sprint 6 Contributions
1. Character Material Update
Updated the character material and worked with the other lighting artists on the scene lighting.
1. Character Material Update
Updated the character material and worked with the other lighting artists on the scene lighting.
1. Book Rig
For this sprint, I made a book rig for the animators!
2. Shader and Lighting
I updated the shader in the direction we wanted to move and created a material function that uses a material's normals to fake the cell-shading look for the character, so we can control it more. Along with it, I worked with Jordyn on the lighting.
1. Fixed up the yarn rig for animators
For this sprint, I addressed animator feedback by adding more controls and making the yarn easier to animate as it rolls. After a lot of trial and error with set-driven keys, I opted to create an expression-based setup that automatically drives the yarn's rotation from the roll control's translation. The final result feels much more intuitive to animate.
2. Created the first-pass shader
I also worked on getting the dispatch cell shader to work by creating a post-processing material. The scene will have 2 shaders: a toon shader that makes everything flat and creates bands for shadows and highlights, and an outline shader. Based on what I have right now, my plan is to add more bands to the toon shader to get it working properly, but I'm happy with how the outline shader turned out.
We also discussed that if I can't get the toon shader working right, we might pivot our art direction.
1. Interfacing with a 3D artist on model likeness
For this sprint contribution, I spoke with the 3D character artist about the model's likeness and design to better match the concept sheet. We discussed how the character should look to better fit the concept, as well as the topology for each character for rigging.
2. Updating Luna's rig
Per the animator's feedback, I implemented all requested changes to the current rig for Luna. In particular, adding helper bones for arm twists and giving the option to animate the upper body controls together with the hips, or separately. Because the model proxy has not been updated, the facial and hair rig have not been added.
3. Yarn character rig and tool creation
Created a first pass rig of the yarn character with the 3D proxy given. I made two tools to quickly create ribbon-rig systems for the character's string and a bone-driven squash-and-stretch tool for the ball. This is so I can quickly iterate on changes to the rig based on animator feedback later on, as well as additional changes to the mesh.
Currently trying to figure out how to create a tool that will easily snap the controls for the strings in place for complicated shapes the yarn might make, such as the heart loop. The concept is to allow the animators to draw the shape they want freely with a curve, then turn every point of that curve into points they can snap the controls to.
Perforce submission
1. Finished First Pass Rig for animator stress test
For this sprint contribution, I handed off the first-pass rig to animators to stress-test it and gather feedback on which control systems they need.
The rig has:
- Stretch and Squash hybrid FK/ IK spline matrix. The stretch and squash are matrix-based and distribute the joint volume evenly when it is stretched or squashed
- Auto Foot controls for foot rolls, heel twist, toe twist, side bank, and toe tap
- IK/FK Limb Switch
- Matrix Limb Stretch
- All main control joints, minus the hair and facial joints, due to needing to wait for an updated topology/structure to the first pass model
-Basic skinned weights
- Auto Finger Controls
- Hair Rig
- Facial Rig
- Better skin weights pass
2. Tested out ribbon-based controls for the yarn
I did a test for the yarn rig using a technique called ribbon-based controls in rigging using Maya's nHair. In my test, for the loose-string part of the yarn that will primarily serve as its "limbs," I created a long plane that matches the entire string geometry. Through this, I learned that for the actual yarn rig, I will probably have to split the plane into two so the string has higher-fidelity movement -- a plane for the string closer to the yarn ball, and a plane for the string that is actually loose. From the test, I also concluded that the loose-string geometry needs many more edge loops than initially thought, so that the deformation used to create shapes from the string would look better, and that having more control joints would also serve the rig better. This information has been passed to the 3D artist who will model the yarn character.
1. Research and Development for Yarn Character Rig
Our cinematic, "In Plain Sight", has a character that is a ball of yarn with a loose string. Since it has no facial features, arms, or legs, it needs to be able to move and emote the way we want it to. As such, figuring out how to rig the character has proved challenging, as there is little to no reference for this type of character.
The yarn character will move by rolling itself, simple enough. However, due to the loose string it has, I need to figure out how the yarn needs to be modeled and consequently rigged so that the loose string, which will act as its limbs and means of expressing itself, needs to move with the rest of the yarn "body" (the ball part).
In this sprint, I created an iteration of the yarn character 3D model and identified the requirements for the yarn rig. The yarn character is scaled to its proper size according to our reference sheet and in the engine.
The plan moving forward is to start testing different kinds of control rigs using this proxy model; however, I expect to use a ribbon-based control rig for the yarn character, so I want to write a script that makes ribbon-based controls faster to iterate.
2. Shader Research
I will also be doing the shader for this cinematic. Our team settled on an outlined, cell-shader, inspired by the game "Dispatch."
Here is what I learned so far from my research:
Cell/Toon Shading
Banded shadows
Outlines
Western mixed with anime look
Reduce polygon noise. Remove minute details and surface complexity that would fight the stylized shader
Flat UVs. The texture should be large, flat color zones. Preferably non-photorealistic materials, using hand-painted textures,
Normal map. Either bake very minimal normals (subtle, stylized) or skip normal maps entirely on characters (probably not the best idea though). No complex normals.
Toon Shading.
Using the banded diffuse lighting method:
Get the dot product of world normal vs. the main light vector
3 main bands: Shadows, Midtones, Highlights
Using the “posterize” node
Should be able to customize band amount, light amount,
Outline post-processing material.
Using inverted backface culling
Samples the scene's depth buffer and normal buffer, detects edges, and draws black lines
(depth edges = silhouettes, normal edges = folds and details in the character)
(Fake) Rim Light. Dispatch doesn’t necessarily have a fake rim light but we might as well explore this just in case we need to separate the characters from the background more
Controlled, bright (highlight) outlining the character based on light direction
Handrawn Background. Dispatch’s backgrounds are all entirely hand-drawn then composited with the 3D characters. If we want to get closer to their style as much as we can we need to:
Render out the 3D model with the cell shader via the Movie Render Queue in UE
Composite the hand-drawn background and 3D movie render in After Effects
Add a texture overlay
Color Grade both of them together
Full UE Pipeline.
Banded lighting (per material)
Edge detection outline pass
Screen space noise/grain texture
Color grade to flatten and desaturate (low contrast, muted mid-tones)
Use Unreal's Render Targets to composite hand-painted background images as flat plane behind the scene instead
Apply chromatic aberration and film grain in the post-process volume.
Conclusion:
3D models will need a cell-shaded material on them. The material should be affected by the cell shader based on the scene depth node, replacing the PBR lighting to create a more flat-shaded look.
A post-processing material will need to be layered on top of the scene that extracts the scene’s depth and normals to create the outline effect
We can add another post-processing volume to create a more film-grain effect or go crazier with the color grading to avoid needing to composite outside of UE.
More Resources:
3 banded Cell shader: https://www.youtube.com/watch?v=lOOs74MLxec
Cell shader with outlines: https://www.youtube.com/watch?v=YwZH4jCO4ZM&pp=ygUZY2VsbCBzaGFkZXIgdW5yZWFsIGVuZ2luZQ%3D%3D
Advanced Material cell shader: https://www.youtube.com/watch?v=HDyswSWIdY0&t=1768s&pp=ygUZY2VsbCBzaGFkZXIgdW5yZWFsIGVuZ2luZQ%3D%3D
HLSL Custom Nodes: https://www.youtube.com/watch?v=TqZKf8tMphU&t=11s
Anime Shader: https://www.youtube.com/watch?v=xf21CBx8rYs&t=1192s
SDF Toon Mapping for the face (It’s in Korean): https://www.youtube.com/watch?v=T-bfBUhjCVc