Project Description:
For this project, I set out to create a historically accurate 3D model of a Tang Dynasty cavalry soldier and his horse, optimized for real-time rendering in Unreal Engine. I’ve always had a deep love of ancient Chinese armor — the craftsmanship, the functionality, and the stories behind each design really inspire me. This project was a way for me to combine that passion with my skills as a 3D artist. The end goal was to produce a game-ready asset that could fit seamlessly into a game or cinematic experience, while also showcasing my skills in sculpting, modeling, retopology, texturing, and real-time rendering.
This project served as my M.A. final project, spanning from January to mid-March — less than three months in total. The tight timeline was a real challenge, pushing me to manage my time effectively and plan out each phase of the process carefully. This project also challenged me to stay focused and composed under pressure.

Concept Development:
One of the biggest challenges I faced at the start was the lack of well-preserved examples of Tang Dynasty armor. Unlike later periods, there aren’t many surviving physical artifacts to study directly. So I had to look into paintings, murals, and sculptures of that era to piece together how the armors might have actually looked. A big part of the process was comparing those references to find shared details and trying to separate realistic designs from the more stylized ones influenced by Buddhist art. I also looked at how other artists and historians interpreted the armor, and even pulled ideas from period-based TV shows and films. With all these references, I came up with the design of my own version.



Anatomy Blocking:
Once I had a clear design direction, I jumped into ZBrush to start blocking out the high-poly models for both the soldier and the horse. I began with basic anatomy. For the human figure, I focused on clean proportions and muscle structure. I wanted him to have a high muscle mass but also higher body fat, since this body type was seen as a symbol of strength during that era. I kept it simple at this stage, just enough to support the armor later on.
For the horse, I took extra care to study its anatomy in detail. I studied Animal Anatomy for Artists by Eliot Goldfinger for detailed skeletal and muscular anatomy references, and looked at Gael Kerchenbaum’s horse écorché to understand muscle form. Real photos helped me refine muscle definition and surface forms. Laying down this anatomical foundation early on was key to making the final model feel grounded and believable.



Highpoly:
With the anatomy blocked in, I moved on to the armor. I sculpted everything mainly in ZBrush, with Maya assisting. An important factor in ancient Chinese armor is the lamellar armor. To recreate it, I started by modeling a single base scale in Maya, including the ropes, then in used Nanomesh in ZBrush to duplicate it across each polygon.
I adjusted the polygon density to ensure the scales overlapped naturally without clipping, preserving an authentic layered look. Then, I manually tweaked intersecting geometry and added slight variations to avoid a too-perfect, uniform feel. It was a patient process but essential to capture that handcrafted quality.
I also hand-sculpted every decorative detail in the model, such as the "fu tun" (the creature-like armor piece worn on the abdomen), the belt, the weapons, the "xing ye" (decorative pieces attached on the horse's belt), and the saddle.


Tertiary Details:
Once the armor was done, I went back to refine the tertiary details on both the human and the horse. For the soldier, I wanted him to look realistic and believable, not overly heroic, but like someone who’s actually seen battle. My professor provided a scanned face with pore detail, which I used as a base to wrap onto my model using ZWrap. After that, I layered in additional skin pore detail using alphas from FlippedNormals, blending the scanned data and alphas together with morph target and layers. This gave me more control to fine-tune the surface and create a natural, believable skin texture.
For the horse, I wanted to stay optimized, so instead of using a ton of hair cards across the body, I found close-up photos of horse fur and turned them into alphas. I then applied those alphas across the body to simulate short fur without sacrificing performance. I also sculpted finer details around the muzzle, eyes, and hooves to bring out realism and character in the creature.



Retopology & UV Mapping:
Retopology was done in Maya using Quad Draw, following game industry standards. I used triangles strategically on non-deforming areas to preserve curvature while keeping the polycount under control — it also helped simplify edge flow where multiple edges could converge into one.
Extra attention went into maintaining clean edge loops in areas that needed smooth deformation, like the character’s joints, face, and the horse’s legs. For the armor and accessories, I focused on balancing detail with efficiency. I also deleted hidden faces that wouldn’t be visible in the final renders to avoid wasting geometry.

The soldier, including weapons -- 153k tris.
The horse -- 106k tris.
Once the low-poly meshes were complete, I laid out the UVs by hand, aiming to optimize texel density and minimize distortion. I also straightened UV wherever possible to make the UV space more efficient.


Baking, Material, Texture:
I combined all the scale armor pieces, ropes, and leather pieces into a single mesh in ZBrush, assigning each part a unique polygroup. After that, I decimated the mesh to make it manageable for baking, then brought it into Substance Painter to bake onto the low-poly version.
Using the polygroup IDs as mesh IDs in Substance allowed me to isolate and texture each component — armor, cloth, leather, rope — individually, without any bleeding.

Lighting & Rendering in Unreal Engine:
For the final presentation, I brought everything into Unreal Engine 5. For the A-pose shots, I set up a three-point lighting system to emphasize the character’s form and materials — a directional light from the side, a fill light at the front, and a rim light to enhance the silhouette. I also used a very dim HDRI backdrop to subtly fill in the shadows and reflect sky tones onto the surfaces, which added a nice touch of realism.
I used Lumen for the real-time global illumination, raytracing, and reflections, which helped bring out the material details, especially in the face, metals and fabrics. For the eyes, I used eyeballs from Unreal Engine’s MetaHuman assets to get more realistic shaders and refraction.
These are some screenshots from the viewport.


Posing:
I imported all the low-poly assets back into ZBrush for posing. Using Transpose Master, I combined everything into one mesh with separate polygroups, then masked and rotated parts using the gizmo tool. I constantly checked the pose from different angles, making sure the silhouette felt strong and believable from every perspective.


Posed Rendering in Unreal Engine:
After the posing was finalized in ZBrush, I exported the mesh back into Unreal Engine 5 and re-applied all the textures and materials. From there, I focused on creating more cinematic and narrative-driven lighting for the posed renders. I used a variety of HDRIs from Poly Haven to simulate different daylight conditions, like overcast and warm sunset, each giving the character and horse a different mood and context.
I didn't just rely on the HDRIs, I added directional lights that matched the light direction of the HDRI to sharpen shadows and add more depth. I also fine-tuned the exposure settings, post-processing effects, and added some subtle color grading to better match the emotional tone of each scene.














