Andrew Krivulya (Charly Tutors) talked about the differences between CGI and Real-Time workflows for hair and shared useful tutorials for Ornatrix & XGen.
Andrew Krivulya, also known as CharlyTutors, talked about his personal project Ornatrix Grooming for Josephine, the differences between CGI and Real-Time workflows for hair production and useful materials for learning Ornatrix and XGen.
It’s been a while since our last talk. During this time, I have reconsidered many of my ideas about The Forester and realized that I don’t want to limit myself with one world. The creation of different worlds is much more interesting. Now I am concentrating my efforts on the hair creation and hand-painted models for CGTrader. I have also been recording new tutorials for my Youtube channel and rescheduled my content completely for it: now, the topics are separated by certain days and their variety started attracting more subscribers.
Concerning the projects I worked on:
- I created one more environment for The Forester, the Mysterious Forest, and its breakdown:
- I made a hand-painted flying island which is actually one more world for The Forester. It was a kind of an inner battle of ideas I mentioned before: I could not choose between hyperrealistic, fantasy or stylized settings.
- I also completed collaborative artworks with Olya Anufrieva (B&S Lyn), and Maria Panfilova (Bear Rider).
Yet, it occurred to me that collaborations are not my cup of tea, and I prefer to work alone. During my free time I have been creating hair, here’s my portfolio.
During this time, I also got a lot of job offers that implied moving to other countries. Among the most significant companies for me were Scanline VFX, Illumination Entertainment, Plastic Wax, and Axis Animation, but I refused all of them. All these opportunities were full-time, while I didn’t want to leave outsourcing. At the moment, I am working with several clients on some cool projects, but I can’t tell more until they are under NDA.
Besides, I had an interview with ChaosGroup. It was a big day for me! Among other perks, it attracted new commissions.
Approach to Ornatrix Grooming for Josephine
In case of the Ornatrix Grooming for Josephine project, the journey, as usual, started from the idea to raise the bar and try something I haven’t done before. Truth be told, I am an old fan of the Game of Thrones, and Khaleesi became one of my main references. Let alone my old dream to create a fully-fledged character, dressed and with a complicated hairstyle.
The process became even more thrilling when I bought a cool script Braid Maker by Abhishek Karmakar. The pretty simple workflow inspired me to experiment with braids and create advanced haircuts.
My aim was to level up in braid creation and get a realistic render of the whole character, without a stylized or cartoonish look. But my main priority was the hair creation since that is both my favorite part and the majority of my incoming orders. Before that, I tried to do everything I could and to cover all possible aspects. It did me a favor when I started preparing tutorials and created the projects focused on the hair, but now I spend my time only on haircuts and CGTrader models.
My main references were Khaleesi and the video below that helped me to understand how to fasten the braids:
However, I was not going to make an exact copy of the reference. When I was working on that project, two other artists uploaded similar artworks on ArtStation which made me think that our ideas can mysteriously correlate with others’. It is a pretty common thing in my practice. Sometimes the day an idea comes to my mind, someone uploads it on ArtStation! Besides, I don’t enjoy following someone else’s concepts, that’s what I often do at work. So, I deliberately modified the concept based on the references I collected. For instance, I didn’t like the original temple area and some of the hair parts which I moved down a bit. I slightly modified the way the braids interlace, made them more distinct on the temples and in the back. Plus, the curls are a bit different.
Differences Between CGI and Real-Time Hair Workflows
There are a few differences between the Real-Time and CGI workflows. Real-Time brings in some restrictions and lowers the output quality. I still don’t like how the results look, so I take only CGI commissions.
CGI allows doing many things easier than in Real-Time, where hair is made of special planes with the baked textures on them. With the latter, you’ll waste a lot of time and get a worse result. Certainly, the Unreal Engine and Unity teams revolutionize the industry, hair looks better and better. Still, I personally don’t like the quality and their approach to the Real-Time workflow. I hate playing with technical stuff. What I like is creativity, and hair guides help here a lot.
When I get down to any hairstyle I create guides and I am absolutely sure that I’ll get a perfect result after the rendering. Hair will follow guides and I don’t have to think about vertex normals, how the plane will cross the texture, etc.
The baked plane doesn’t always give the desired result, plus I don’t like the opacity anti-aliasing. I feel like I waste a lot of time on technical troubles, there is not that much space for creativity, especially if the engine imposes some limits, like 5000-10000 triangles. That polycount doesn’t give enough freedom, especially for complicated curls.
Here is a quick example of how to create simple locks of hair with guides:
If I were trying to get the same volume and softness with the plane, I would need to think of a more complicated way since in CGI, I create more hairs, adjust the volume, guides’ smoothness, etc. for more realism.
Planes require rendering a good texture. In this case, if the hair is too thin it will look ugly with Unreal’s anti-aliasing. If the polycount is too small the hairline will look rough and ribbed. Even if you create tubes and assign the textures, the result will be far from a CGI render.
This is a CGI lock of hair in Maya Viewport 2.0:
For the comparison, look at the best possible Real-Time version with a strict polygon limit:
For sure, all I have done is reduced the number of points in the same hair from Maya viewport. But I hope you’ve got my message.
When polygons are limited and you can’t make a lot of planes to increase density, that is the root of the trouble. It is even worse if you are creating braids.
Why does Aloy’s hair look perfect in Real-Time Horizon? Because the limit was 100 000 triangles. This quantity allows you to get satisfying results, and yet, it fails to keep pace with CGI-renders (at least, to my mind). Personally, I love the hair quality in-game cinematics and movies.
All in all, the main difference between Real-Time and CGI is polycount inside different engines and projects.
There are no other limits in CGI but the power of your graphics card. The resources are needed to support a lot of hair in Maya Viewport 2.0 via HairTube Shader and in renderers like V-Ray, Corona, Redshift, etc.
The second difference is the workflow itself.
In CGI where hair is made with guides, you rather think of settings, the quantity of hair, shader and modifiers.
Real-Time hair is made from the plane and a baked texture, and there are a lot of aspects you need to think of to get a good haircut. Sure, it can be done with guides there, too, but in Real-Time you can’t control the interpolation between the hair and parting.
What is more, you will need to render the right textures, watch the polycount, set up a right shader with an anisotropic highlight and a special texture for it. Frankly, it is not even close to the joy I get from CGI hair creation. I don’t like all of that mess with low poly, baking, etc. That is why these days I don’t create Real-Time hair. Actually, the last time I tried was a year ago. Possibly, something has changed for the better, but according to the latest artworks on ArtStation, there are no improvements I am looking forward to.
The trick here is to give the right shape to the guide, which we will use for the braid with BraidMaker. Easy-peasy! I have just got down to recording a few tutorials, one of them is about the creation of this particular hairstyle. Since I don’t want to keep you waiting, I am going to share a small video I have recorded specially for that interview (see below). That was my workflow for all the braids I made.
I started with the creation of guides, then assigned the braids with BraidMaker, then turned polygonal braids into the real ones with the help of Ornatrix’s modifier HairFromMeshStrips.
As for other steps, the secret is to divide the hair into groups and work with them separately. This approach is much easier than to deal with the whole hairstyle at one go.
Materials for Learning
I should say that there is a lack of Ornatrix tutorials on the internet. I learned this software solution from the official documentation and tutorials on Ephere’s youtube channel. Plus, I had a chance to consult with Marcel, the founder of Ephere and creator of Ornatrix, when he was available.
All in all, the rest was a trial-and-error approach: I launched Ornatrix and played with the settings. I always learn things this way. However, those who are starting their exploration today are luckier.
On my channel, I have an introductory course to Ornatrix 3ds Max. Right now, I am working on the new episodes for Ornatrix Maya. Anyway, if you watch available episodes you will understand any version of the plugin better as it works similarly in Max and Maya: the same modifiers, settings, etc. That is all I can say about Ornatrix.
If your choice is XGen, Jesus FC has an awesome free course Introduction to XGen and a lot of useful tutorials on his Patreon. Tarkan Sarim has a great Patreon page as well. Finally, there’s this outstanding workshop from Gnomon.
Well, I suppose these materials will be enough for you to study the hair creation in XGen and Ornatrix and craft your own masterpieces! Practice a lot and never give up if something goes wrong.
Andrew Krivulya, 3D Artist
Interview conducted by Kirill Tokarev
If you found this article interesting, below we are listing a couple of related Unity Store Assets that may be useful for you: