Wednesday, June 3, 2026

In Plain Sight - Sprint 2

 

Sprint 2 Contributions

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






My next goal for the rig is to implement animator feedback, but regardless of that, I will need to add:

- 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. 


Plane, with hair follicles in each edge loop:



Perforce Submission:


//CLASSES/Cohort22/Classes/Art/CommonArt/Semester_03/InPlainSightSource/Characters/Luna/Rig/Luna_Rig.ma

//CLASSES/Cohort22/Classes/Art/CommonArt/Semester_03/InPlainSightSource/Characters/Yarn/Rig/Yarn_Rig_Test.ma



Wednesday, May 20, 2026

In Plain Sight - Sprint 1

 

Sprint 1 Contributions

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:

Shader Initial Observation:

  1. Cell/Toon Shading

    1. Banded shadows

  2. Outlines

  3. Western mixed with anime look

Requirements

3D models:

  1. Reduce polygon noise. Remove minute details and surface complexity that would fight the stylized shader

  2. Flat UVs. The texture should be large, flat color zones. Preferably non-photorealistic materials, using hand-painted textures,

  3. 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.

Shader:

  1. Toon Shading. 

    1. Using the banded diffuse lighting method:

      1. Get the dot product of world normal vs. the main light vector 

      2. 3 main bands: Shadows, Midtones, Highlights

        1. Using the “posterize” node

      3. Should be able to customize band amount, light amount,

  2. Outline post-processing material. 

    1.  Using inverted backface culling 

    2. Samples the scene's depth buffer and normal buffer, detects edges, and draws black lines 

    3. (depth edges = silhouettes, normal edges = folds and details in the character) 

  3. (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

    1. Controlled, bright (highlight) outlining the character based on light direction

Compositing:

  1. 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:

    1. Render out the 3D model with the cell shader via the Movie Render Queue in UE

    2. Composite the hand-drawn background and 3D movie render in After Effects 

    3. Add a texture overlay

    4. Color Grade both of them together 

  2. Full UE Pipeline.

    1. Banded lighting (per material)

    2. Edge detection outline pass

    3. Screen space noise/grain texture

    4. 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:

  1. 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.

  2. 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

  3. 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:

  1. 3 banded Cell shader: https://www.youtube.com/watch?v=lOOs74MLxec 

  2. Cell shader with outlines: https://www.youtube.com/watch?v=YwZH4jCO4ZM&pp=ygUZY2VsbCBzaGFkZXIgdW5yZWFsIGVuZ2luZQ%3D%3D

  3. Advanced Material cell shader: https://www.youtube.com/watch?v=HDyswSWIdY0&t=1768s&pp=ygUZY2VsbCBzaGFkZXIgdW5yZWFsIGVuZ2luZQ%3D%3D

  4. HLSL Custom Nodes: https://www.youtube.com/watch?v=TqZKf8tMphU&t=11s

  5. 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


Monday, December 1, 2025

Interactive Experience - Stage A

1. Implemented anim montage for interactions
2. Made sure that the flask and interaction animation won't play when character is moving or jumping / finishes the montage first

<Showcases better in game playthrough>

Thursday, November 13, 2025

Interactive Experience - Stage B

 1. Updated the weights on the new mesh!



































2. Replaced the new skeleton mesh in the engine and made sure movement works with the controller. Also added gamepad controller input!:






















3. Cell Shade Update: Testing with a non-realistic textured model as suggested!


With Cell Shade:
























































Without Cell Shade:
































    Player character with cell-shading:



Inheritance

Script Objective:

1. I would run the import script first to get the geometry, csg, box, and tube module I created, then my code to get the desired output I wanted:














2. Final Shape:





























Perforce Proof:



Thursday, November 6, 2025

Interactive Experience - Stage C

 

Shaders and Post-Processing Effects

1. Updated Post-Process Shader Material

  • 4 bands
  • Bands are each affected by the lights
  • Shadow contrast
  • Ability to tint shadow and highlight
























































2. Updated Wine shader
  •     Surface distortion when moved


























3. Material Research:

Using the Substance Painter Stylization filter to create a hand-painted brush stroke effect:

  • Affects all maps, including normal maps
  • Added on top after the mesh is painted
  • Easily integrate the maps into the engine's material instances.


4. Fixed foot sliding!





Start of FIEA Portfolio