FMP

– Character Model

I finished sculpting the high-poly models for all three characters in ZBrush and baked the details onto their corresponding low-poly meshes. These baked normals will be used later in the texturing process.

Mengpo(main character):

Xuan: From the base mesh of the main character, I created the second character by making proportional and facial adjustments.

Yun:

Clothing in Marvelous Designer:

– Texture

I created the character and costume materials in Substance Painter, adding details to enhance realism.

For the clothing, I experimented with two different surface qualities: a light, sheer fabric and metallic embroidered patterns. This combination helped convey a balance between traditional Chinese aesthetics and a futuristic visual style. To reinforce this style, I chose green and purple as the primary color palette. These colors not only supported the “Chinese-inspired yet futuristic” direction but also established the overall tone for the scene’s final visual identity.

Inspiration

However, Unreal Engine does not natively support the type of layered transparency and metallic detail I created in Substance Painter. UE offers two main transparency shading models—Masked and Translucent—but neither can fully reproduce a transparent material with strong metallic properties.

  • Masked materials only support fully opaque or fully cut-out areas, with no semi-transparency. They render efficiently and work well for sharp shapes like lace or leaves, but they cannot display smooth transparency or reflective metallic surfaces.
  • Translucent materials allow smooth transparency and soft opacity, but they do not support true Metallic values or accurate reflections due to how translucency is rendered in UE’s forward shading pipeline. This makes it difficult to achieve a transparent material that also looks convincingly reflective or metal-like.

Because of these limitations, I duplicated the clothing mesh and assigned each copy a different material—one focused on the sheer, transparent layer, and the other dedicated to the metallic embroidered details. By stacking these two versions together, I was able to approximate the layered look I originally previewed in Substance Painter.

– Hair

I planned to create the hairstyle using hair cards. However, after importing them into Unreal Engine for testing, the result looked too thin and lacked volume. Hair cards also required additional manual rigging and animation work, which made the process more time-consuming than expected.

unused hair

Because of this, I switched to using Ahoge to generate the hair strands and then ran the animation through nHair simulations in Maya. Ahoge supports exporting the hair as Alembic, which can be imported into Unreal Engine as a groom cache. With UE’s default groom hair shader, the overall appearance became much more natural and visually rich compared to the hair-card workflow. The groom system provided better density, smoother motion, and more believable highlights, making it a significantly stronger choice for this project.

While working with the Loft function, I ran into an issue where the generated surface twisted unexpectedly. After some troubleshooting, I realized the problem came from the naming order of my curves. Loft relies on a consistent sequential naming convention to correctly match each curve during surface generation. Because my curve names didn’t follow the actual layout order, Maya interpreted them incorrectly and created the twisted geometry. Once the curves were renamed properly, the lofted surface generated cleanly without deformation.

original curves
fault loft surface

– Hair Simulation

While simulating the hair animation with Maya’s nHair system, I encountered several issues that eventually led me to abandon dynamic hair simulation for this project. According to the Ahoge workflow, once the nhair guide curves are generated, the next step is to attach the nurb surfaces with guide curves using a wire deformer.

The testing result is good enough, but my animations require gravity movements.

However, the wire deformer comes with a major drawback: it works best when the character remains largely stationary. Because the wire deformer calculates deformation based on world-space distances rather than joint-based transformations, it does not inherit character movement stably or predictably. As a result, when my character moved through space, the wire deformer did not correctly follow the mesh. The hair curves stretched into long, distorted shapes—as if being pulled into a single line—which made the setup unusable for animation.

Due to these limitations and the instability of the simulation during character locomotion, I ultimately chose not to proceed with nHair dynamics in this project.

– Environment

When I began building the environment, my initial idea was a nighttime setting illuminated by starlight. Since the overall theme combines elements of the underworld, futurism, and traditional Chinese visual language, it was difficult to define a single, coherent style that captured all three. After several tests, I ultimately shifted away from the night scene and chose a daytime environment instead.

place actors from Fab

However, the results still carried a slightly unsettling, almost eerie tone, which didn’t match the emotional atmosphere I wanted for the story. My goal was not horror, but a softer, more poetic interpretation of the afterlife. Because of this, I continued adjusting the lighting, color balance, and material values to steer the mood away from something frightening and closer to something calm, surreal, and dreamlike.

To make the daylight setting feel surreal rather than realistic, I lowered the saturation of almost all materials and adjusted the hue and brightness to push the scene toward a dreamy, otherworldly atmosphere. This approach helped unify the visual style and made the futuristic Chinese underworld concept more cohesive.

final render environment

Later, I added another sequence: a “Memory Corridor”—a completely black, void-like space designed to contrast the main environment and enhance the narrative mood.

– Cloth Simulation

I continued working with Marvelous Designer to simulate the cloth animation, but this part of the process turned out to be particularly challenging. No matter how I adjusted the simulation parameters, the cloth could not handle one specific moment in the animation—a very fast turning motion of the character. During this rotation, the garments consistently collapsed, stretched unnaturally, clipped through the body, or even folded and tangled into themselves.

This happens because Marvelous Designer’s cloth solver is highly sensitive to sudden changes in velocity. Extremely fast body movements can cause the simulated fabric to receive abrupt forces that exceed its stable calculation range. When the solver cannot keep up, the cloth vertices “overshoot,” leading to severe stretching, self-intersections, and other instability issues. Even increasing substeps and collision thickness was not enough to keep the garment stable in this case.

tested almost every relevant setting

My final solution was to simulate the cloth manually, adjusting it frame by frame to preserve the overall silhouette with only subtle, controlled motion. This approach ensured that the garment did not deform or behave unpredictably during the fast turn. Although this method was very time-consuming, it was the most reliable option for achieving clean results at this stage of production.

– Import/Export

Throughout the entire production process, importing and exporting assets ended up being the most time-consuming part of my workflow. My animation, character models, and hair simulations were all created in Maya, while the environment, lighting, and final rendering were completed in Unreal Engine. Because of this constant back-and-forth between software, maintaining clean and compatible exports became a major challenge.

I initially planned to use FBX for transferring my animated characters into UE. However, many of the FBX files encountered issues on import. To avoid problems, I decided to export all character-related assets as Alembic caches, including the body, clothes, and hair.

Alembic worked more reliably for geometry animation, but it comes with its own limitations. Alembic does not carry any material information; every imported mesh arrived in UE completely unshaded. I had to manually reassign all of the materials for each asset, which became especially tedious with multi-layered garments and detailed character surfaces.

At one point, I ran into a more serious issue: a portion of my mesh appeared with inverted normals when imported into Unreal, even though everything looked perfectly correct inside Maya. This mesh had been mirrored using a negative scale value during an earlier stage of modeling. Maya can display mirrored geometry without obvious problems, but when Unreal recalculates normals during import, a negative scale flips the vertex winding order, causing the engine to interpret the front faces as back faces. This resulted in the normals appearing reversed, even though the mesh originally looked fine.

– Render

To achieve a sky color that better matched the visual style I wanted, I used an HDRI Backdrop in Unreal. However, this setup blocked the height fog that would normally create a smooth, natural transition along the horizon. To solve this, I placed several Niagara steam particle systems along the ground. The soft, drifting vapor helped blend the environment back together, creating a more gentle visual transition across the scene.

I gave my second female character, Xuan, a pure white emissive shader. This character represents someone who has already died, the entirely white appearance gives her an ethereal, ghost-like presence while still feeling futuristic.

For me, she became a symbolic figure—an empty vessel, a blank slate waiting to be restarted. Her pure white form suggests a state between endings and beginnings, almost like an untouched page ready to be rewritten. This ties back to the core theme of my story: the idea that when humanity reaches the possibility of digital immortality, nature itself might undergo its own form of reincarnation. The character’s design reflectsthe imagination of rebirth.

Due to the workload and time constraints, I eventually decided not to include the male character and some plots in the final film.

– Final Output

Since my character was inspired by Meng Po from Chinese mythology, I chose to keep the dialogue in Chinese and added English subtitles.

The film is titled Requiem, which aligns closely with the themes I explore. Traditionally, a requiem is a piece of music dedicated to the dead—a farewell, a reflection, and a symbolic release. In the context of my story, the title represents a hopeful transition between life, death, and the possibility of rebirth.

– Aspects to Refine

1. Hair dynamics and simulation workflow
In the future, I hope to further develop the hair dynamics. At this stage, using Ahoge together with Maya’s nHair is more suitable for subtle motion, where the character’s center of gravity doesn’t shift dramatically. For more dynamic animation, I may switch to XGen for generating more stable guides, or avoid relying on Alembic caches entirely and experiment with Unreal Engine’s native Groom physics system. UE’s real-time simulation could provide more flexibility and prevent the issues caused by fast body movements in Maya.

2. Narrative impact from reduced characters
Because of time constraints, one character was removed entirely, which may affected certain parts of the narrative progression. With more time, I would like to bring Yun back into the story and further explore the emotional and thematic connections between them.

3. Rendering and post-production
There is still room for improvement in the rendering and compositing stages. The lighting setup, color grading, and translucent materials required many workarounds, and with more iterations, I believe the final look could be pushed further through more refined render settings or additional post-processing.