logo80lv
Articlesclick_arrow
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_login
Log in
0
Save
Copy Link
Share

Inside a Custom Facial Animation Pipeline for an Indie Horror Short

Jev Belyaev broke down the workflow behind his animated horror shorts, explaining how he combines a custom facial animation system with reusable FACS shapes to handle everything from facial shapes to eyes and jaw tracking.

Introduction

Hello everyone, I'm Jev Belyaev, a CG Generalist and Filmmaker currently working as Lead Character FX at Netflix Animation Studios. I'm originally from Latvia, studied in the UK, and am currently based in Vancouver, Canada. I've been interested in film, animation, and CGI since childhood. Over the years, I've had the chance to work across VFX and animation pipelines on projects for clients such as Warner Bros., Paramount, Disney, Marvel Studios, Netflix, Apple TV, and Amazon Prime through studios like MPC, Rodeo FX, Spin VFX, and Tangent Animation.

Outside of studio work, I create my own animated shorts and use them as a way to explore character animation, mood, cinematography, technical aspects, and visual language. In this article, I want to share the third and final breakdown of my recent horror animation. This part focuses on the Adaptive FACS Pipeline I've been developing over the past few years, along with some other custom-made tools used for the project.

The main goal of this pipeline is to combine reusable FACS shapes, 4D cache retargeting, and procedural correction passes into one flexible facial setup that allows more easily adapting facial animation and skin detail across different characters. The system is still evolving, and future iterations will focus on optimization, consistency, better visual quality, and a cleaner workflow.

Project Context

Beyond this specific facial system, the horror animation itself also became a small pipeline prototype for larger independent animated work. Projects like this give me a chance to test new tools, improve the workflow, and explore different genres and visual ideas on a smaller scale. I'm already applying many of these ideas to my next animated short, which is planned as a bridge towards a larger festival-focused film.

If you'd like to see the final animation and a broader overview of the production before diving into the facial pipeline, both can be viewed below:

Adaptive FACS Pipeline Breakdown

The workflow starts with the Custom Character Generation System introduced in Part II of the breakdown. It is a blendshape-based biped system that generates varied characters while keeping the same topology. By preserving topology and point count across all generated characters, the system makes assets and downstream pipeline work highly reusable, simplifying rigging, texturing, grooming, and facial setup.

The blendshapes driving body and facial generation support meshes of up to 16 million points, making the system suitable for high-resolution characters. The system also positions and aligns the eyeballs, teeth, and tear ducts to the body shapes, which later becomes useful for the FACS pipeline.

The core of this facial pipeline, as you can already tell, is FACS, the Facial Action Coding System. My base biped model uses a generated median shape built from scan data across different ethnicities, ages, and gender groups, which is a good starting point for the future character shapes.

Basic facial expressions are then created either from scan data or by sculpting them manually — closed eyes, open mouth, different lip shapes, eyebrow shapes, and other core expressions. Once these facial shapes are ready, they are saved as .bgeo files and brought into the setup as a long list of blendshapes.

Later, all of these blendshapes are connected to corresponding UI controls. The UI controls themselves are procedurally generated with a basic UI system I made. Controls can be created in the desired hierarchy and labeled directly in SOPs. By selecting the corresponding points on the facial mesh in the 3D viewport, the controls are placed in the correct positions.

In theory, this UI system can be used on any facial mesh, but in my case, I set it up once on the base mesh mentioned earlier. If further adjustments are needed, they can be handled procedurally later without major rework.

Facial Animation

Facial animation in this system can be driven in a few different ways: triggering facial blendshapes and eye movement with UI controls, retargeting mesh deformation from other DCCs such as Unreal Engine and MetaHuman, or from 4D caches, or using a mix of both — retargeted mesh deformation combined with FACS animation.

MetaHuman and 4D caches are transferred using proximity capture or UV interpolation, where base and source meshes are matched by proximity or UVs.

Facial Shape Adaptation

Another step in the system is facial shape adaptation. Since the facial shapes are different but share the same topology, it is easy to linearly apply the delta between the base shape and a new shape to the animated mesh. However, simple linear delta blending can create artifacts in more extreme static shapes or animation poses, such as intersections, volume loss, pinching, or exaggerated forms.

To minimize this, I combine linear delta blending with inverted proximity wraps around the eyes and lips to maintain better contact areas. For more organic mouth and nose shapes, I also mix linear delta blending with UV interpolation using tangents and normals.

The Jaw

Instead of fully rigging the jaw with bones, I decided to track its position from the mesh deformation itself, whether it comes from FACS shapes or a retargeted cache. Alongside the jaw tracking, I also built a WIP lip collision system. If the lips fall too deep into the mouth cavity and start intersecting with the gums, they are pushed out and placed back on top of the surface. Tongue tracking, overlap, and possible simulation properties are still planned for future implementation.

The Eyes

The eye solver is one of the most important parts of the system. Since the eyes carry so much of the character's emotion, I spent extra time trying to make them move and behave as naturally and smoothly as possible. At the moment, the eye solver uses bone deformation for the eyelids, eyelid curve projection onto the eyeballs for better shape and contact preservation, and an additional skin pass where the eyeballs push the eyelid skin outward.

This helps mimic friction and realistic eyeball movement beneath the skin with both open and closed eyes. There are still some caveats in the current approach, where eyelids in some facial shapes might look unnatural, but improvements are planned to be made.

The final step transfers the facial motion to the teeth and other meshes such as waterlines and tear ducts. Nothing too complex happens here — it is mostly based on proximity and UV wrapping, with some simple automatic de-intersection passes.

After that, the facial animation in rest pose is interpolated and applied to the full body motion in space. This is done by extracting deltas from the FACS animation and orienting that data to the animated body mesh using quaternions.

The final assembly of a character, lookdev, compression, stretch, and blood flow masks is tested and rendered in Blender with Cycles.

The custom pore generation system covered in the Part II breakdown is planned to be combined with the Adaptive FACS pipeline for better dynamic wrinkle- and tension-based detail. The future goal is to extend the skin detail with directional stretch maps and generated wrinkle masks, allowing fine skin detail, such as pore compression and small wrinkles, to react dynamically to facial tension and shape changes.

Vellus hair growth is driven by the pore generation system.

Another facial animation test:

Conclusion

This project started as a horror animation, but it gradually became a much bigger test for my character and facial pipeline. The Adaptive FACS pipeline is still evolving, but it already helped me build a more flexible way to combine facial performance, 4D cache motion retargeting, procedural corrections, and render-side skin detail.

The next step is to keep improving the system — especially its optimization, consistency, skin detail, and tension-based wrinkle response — while applying these ideas, along with new ones, to my next animated short and eventually a larger festival-focused film. Thanks for reading, and thank you to 80 Level for giving me the chance to share a deeper look at the process.

You can find more of my work and the previous parts of this horror animation breakdown on my ArtStation, YouTube, and other social pages. Check out these projects:

Jev Belyaev, Lead Character FX

Built for the Game & Digital Art Industry
Get Our Media Kit

Comments

0

arrow
Type your comment here
Leave Comment
Built for the Game & Digital Art Industry
Get Our Media Kit