Model and groom the feathers on a Somali ostrich with Maya & Yeti
In this article I will show you how I created the Somali ostrich. You will see my typical workflow for such projects, and some technical methods for grooming and shading of feathers. Also, how to create a photorealistic model suitable for animation from scratch in one month.
At this stage, I try to prepare and collect the maximum amount of material for further work in the shortest possible time, usually a day. But first, I need to identify a specific animal. At this stage I can learn many interesting facts about the animal itself. The material itself is photo and video reference, macro photos, documentaries, photographs of feathers, and an anatomical atlas. In general, all this will be useful. I also set up the project, creating a typical folder structure and layout of the necessary material in the right places. I also bring the project to Google table with theoretical calculations of the timing of the various stages. This allows you to get statistics in the future and improve the result at a particular stage. Next begins the routine...
This stage is almost typical for all my projects except for projects where there are very few anatomy references and you need to experiment at the grooming stage. Usually, I start in ZBrush with a sphere in Dynamesh mode, or in Maya I create a blocking object from primitives, limiting the volume and then continue in ZBrush. At this stage, I sculpt to a rough volume of external muscles, i.e. not super detailed. I decide a T-pose will make it easy for me to fold the wing and at the same time I should have control of the primary feathers with the open wing. Further, when the volume and proportions suit me, I do retopology in TopoGun and then UV mapping.
I always use UDIM and their number depends on the complexity of the model itself.
Next, I returned the model with the working topology and UVs to ZBrush and re-projected the necessary parts and brought the necessary details with my hands. I want to note that I do not do high-detailed sculpting on body parts that are hidden under the feathers.
To save time, I bought a scan of an ostrich leg skin from texturing.xyz and extracted the necessary parts into alpha textures. The rest of the details, large skin folds, parts of the head and pores were brought in by hand, and the Surface Noise generator was used for the beak and claws. From the result of my sculpting I extracted from ZBrush a 32-bit float EXR vector displacement texture. Also, I exported the grayscale displacement maps for different subdiv levels, and a cavity map for future texturing.
And now we come to the most fun and painstaking part of the work process, grooming, for which I use Yeti. Coming to this stage, I already knew a lot of technical nuances regarding the look and length of the ostrich feathers, the approximate density, structure of the feathers, and their type. For the ostrich, I applied the simplified method of grooming and scattering of feathers, because there is no need for super-control of each feather individually, and the structure of the feathers (the fact that all feathers do not have a clear outline) of the ostrich allows for simplified grooming. This greatly affects the speed of grooming itself.
I used my iterative method to create strands – this is when the simplified Groom (strands) gives a more detailed Groom using fibers from Yeti node, which you then convert to the groom. And so on until you get the desired result. Usually I stop at 3-4 iterations. In the process of grooming, I decide how many Yeti nodes I will split the model and how many Groom nodes I will create. The result of the decision only affects the usability, simulation, and speed of cache unloading. As a result, the ostrich has 8 Groom Nodes and 5 Yeti Nodes.
In all of my feather characters, I don’t use polygonal planes with alpha, but I try to imitate real feathers based on fibers. For generating feathers, I use the jcFeather free plugin for Maya and the standard Yeti feather. I generated the desired set of feathers and converted them to curves, which I used in Yeti. The number of fibers and their thickness I select based on photos and a constant render of the base yeti tree.
The heart of all grooming is the contents of the Yeti tree. For an ostrich, I used multi-layer scattering with 3 layers on the body with different densities for certain areas. Due to the written expressions, there is an automatic selection of the required Feather set depending on the length of strands and its position on the body. The picture below shows different sets of feathers in different colors.
Each set consists of 6-8 feathers and they are randomly sorted by expression. Also for the ostrich, I developed a 2-axis model for changing attributes (such as scraggle, bend, and so on) along the feather and on each individual fiber in the feather by painting the necessary attributes in the Groom node.
This feature can also be used in animation. In fact, this brings even more chaos and realism to the model. The tree is completed by the displacement node, where I placed the vector displacement texture. For simplicity, in the viewport I use a shader node, and you can find how to use it in the video below:
There is nothing special here and after all the possible corrections on the model during the final grooming (yes this also happens) I create an animation rig. For this, I used Advanced Skeleton. I am not a super rigger (Character TD), but the rig for my work I need is mainly for posing. At this stage, I separate the project into reference scenes: scenes with rig, with groom and shaders. And "communication" between the scenes takes place through the means of Alembic and Yeti cache.
Texturing & shading
Nothing special here; for the whole process I used Mari, and all the painting was done by hand. I also mixed displace and cavity textures and projected various marble textures for the skin and beak and claws with different noise procedural textures. I also created technical textures and masks for SSS.
Texturing of feathers
Thanks to the power of Yeti, I can create texture co-ordinates for any object based on fibers with custom UVs and use them with any render engine in the future. In work on the ostrich, this feature was also used. Below are shown what textures were drawn for melanin, and additionally what was used for Arnold's procedural noise. A total of 24 textures were drawn for 11 sets of feathers.
In my workflow, I do preliminary shading at the grooming stage with or without a basic texture, because the result in the viewport is often very different from what we see on the render. I use Arnold aiStandardHair material with a melanin centric model. I draw monochrome textures that are used in the melanin parameter and slightly adjust the color in the base color parameter. For realism, I slightly changed the shade both in melanin and in the color of each individual hair by its ID in the feather and using the Maya ramp – I adjusted the shade of the fiber from the root to the tip. I added a central line along each fiber in feather. Such complex shading gave me the result bellow. Each feather layer has its own ID, and each individual feather has its own ID as well. I transfer all this information from Yeti and use it in a massive shading system.
Rendering & post
Initially, I wanted to render the ostrich in a dark studio so that the focus was only on the model itself. Therefore, the studio is completely taken from the owl project. I just added pieces of dirt on the floor from the paws and made folds of fabric from the paws. I created an individual Light Rig for each pose. The final render scene is assembled from reference scenes with a groom + shader, with a pose, lighting + studio.
I always try to achieve a good result on the render to do minimal post-processing. And I render basically the necessary RGB masks, Position, sometimes Normal and always Z Depth passes. For post-processing and color grading I used Fusion.