Francesco Furneri wrote a detailed breakdown of the Crocodile project made in ZBrush, Maya, and Substance Painter, and presented in Marmoset Toolbag.
Hi there, my name is Francesco Furneri and I'm a 3D artist with more than 10 years of experience in 3D Computer Graphics. Currently, I specialize in 3D Modeling and Texturing.
I got a bachelor's degree in Computer Science and a post-graduate degree in Virtual Reality and Multimedia. I then decided to move to the UK and obtained a Master of Science degree in 3D Computer Animation at the University of Kent (UK).
I have worked at 3D companies as a modeler, sometimes in the role of a technical artist. Currently, I'm dealing with modeling, texturing, and rendering at the company I work at.
At the same time, I freelance producing 3D organic modeling for characters and props texturing. I contributed to movies, documentaries, and 3D printing by providing 3D characters and props.
Crocodile Project: Goals
I decided to model a 3D crocodile because I love studying micro details and a crocodile has many features to be considered. I was also inspired by the fact that a crocodile is a curious predator related to dinosaurs.
In particular, I focused on the Crocodylus porosus that is full of tiny details; for instance, the presence of a blobby surface on the head gives it a proper organic look and features of that species. The purpose was also connected with the possibility to practice the entire pipeline: modeling, sculpting, texturing, rigging, and rendering.
I also wanted to model the crocodile from scratch, starting in Maya and creating all the micro details in ZBrush.
The character was then textured and rigged respectively in Substance Painter and Maya.
To whom it may concern, I created a video tutorial where I explain all the rig features which are related to my crocodile:
The first thing that I always do, before starting any project, is to collect a series of photo references.
For the crocodile, there are a bunch of pictures on the Internet and sometimes they represent different species showing many tiny differences (or they are even mixed with alligators which have different features). I decided to gather a big set and then reduced it to a few images that better represent the kind of result that I wanted to obtain. Apart from the color, that I'll be talking about later, in this part I was more concerned about the main shapes and I wanted to create a correct silhouette. The first thing that appears in all the pictures is the nature of the head: crocodiles have longer, V-shaped snouts, whereas alligators have shorter, U-shaped snouts.
My second observation is related to the scales on the body which I studied a lot and tried to replicate by sculpting with different brushes.
Finally, the teeth, which are also shown when the crocodiles have the mouth closed. When I rigged the character I kept that in mind as you can notice in the Maya viewport.
Modeling a crocodile is not a short process as you can imagine. I usually start off inside Maya where I model the main shapes and capture the general features. However, some artists prefer to start in ZBrush. It's up to you to decide what approach is best for you.
At this stage, I use my references to build up my model. I focus on the main shapes and silhouette, not on details. Anatomy is an important aspect from the very beginning. Don't start with details, work with big masses instead.
Once I'm satisfied with my shapes I move to ZBrush where I start to refine and smooth edges, grab some parts, fix the anatomy, and so on. To sum up, it means going back and forth between ZBrush and Maya until you have a clean and precise topology.
At the end of the process you have a clean result:
It's not sufficient to make changes in terms of anatomy, edge flow, etc. For the crocodile, before getting into details, I applied the retopology to refine the result. I used a mix of Zremesher (Curve Strength option) with custom retopo in Maya. This allowed me to sculpt with clean geometry.
To check and refine the anatomy I usually work with the outline shader in ZBrush and observe the model from the different angles, during the sculpting and at the end.
The sculpting was a long process and it involves different techniques. I decided not to apply any procedural method for the scales, as I wanted to spend more time on sculpting with alphas and custom brushes. After all, the creatures have lots of imperfection and variance in the skin, therefore I wanted the details to follow that idea. That required more time but it was good to practice sculpting with it.
Here is an example of the brushes used during the sculpting process:
As you can see, I used the standard brush to model the details on the head. The scales are the result of the clay brush with a very defined shape. Between scales, I used a modified version of the rake brush (strong cuts), and sometimes for more uniform cuts, I applied the dam standard brush. For the big scales on the back, I applied a mix of standard and clay brush and some alphas that I downloaded from the Internet.
In order to create more variation, I finally applied a customized version of the fracture brush, with a very soft effect on some scales; you can see those little imperfections on the neck.
Overall, the main challenge in this part was to create as much differentiation as possible, without replicating parts but working on single scale details.
The retopology was made twice, in order to have a clean result.
The first pass was after applying modifications to the anatomy from the basic mesh – that was necessary to correct some stretching or non-uniform edge flow.
The second pass was applied after creating very basic details in ZBrush. After sculpting the first small masses, I decided to retopo with Zremesher and refine the work in Maya. After that, I was ready to proceed with secondary, tertiary, and micro details on a clean topology.
I generally create UVs inside Maya and I plan to position the seams in hidden areas to ease the texturing process. Nevertheless, you can always hide visible seams in Substance Painter by painting in those areas or, for instance, if you use procedural patterns or noises, remember to apply a triplanar projection.
For texturing, I used Substance Painter as it has a very intuitive interface based on Layers. It also includes lots of brushes, procedural maps and it has a baking system to create useful maps during the texturing process.
This is the main interface I worked with:
In my workflow, I usually start off with a Fill Layer (which is a sort of base color) and I build up a stack of the color variations blended on the layers below. The details are implemented and refined by masks, generators, paint layers, baked maps, etc.
In order to study the crocodile, I took advantage of different photo references by extracting some key colors that I wanted for it. I used a yellow/brown color (with more saturated variants) to paint the lower part of the body, while applying cool hues for the upper part, starting with a grey/dark blue.
Furthermore, I decided to introduce some green shades, especially to add some small details in the concave areas (for instance, algae and dirt around the scales).
Then, I chose a very well defined and basic color palette:
I organized my project in folders:
- Head Details
- Tail Details
- Upper Part
- Lower Part
In every folder, I created a series of layers. Let's have a look at some parts of the process.
Keep in mind that crocodiles live most of their life in swamps and marshy lands, thus it's not difficult to find some residual greeny parts on their bodies like wet leaves, algae, and other natural elements. My goal was to add the effect of those elements on some parts of the model, without exaggeration.
Some artists underestimate those details and simply start by painting one color on top of each other without a proper observation or goal. It's true that with extra work, the project might take a bit longer, but it's also true that you will get subtle but interesting details at the end of the process.
You can easily see green residues and other elements on the scales, as well as in other areas (algae and dirt). On some scales, I decided to create irregular patterns, giving a breakup with a white/creamy color that blends with the dark blue hue (for color breakup).
Furthermore, on other scales, I added a dotted pattern (e.g. the rear paw); it is one of the features, amongst others, that makes crocodiles different from alligators.
Let's see some aspects related to the upper part of the model.
I started from a BaseColor with a dark blue shade and added some details in the cavities little by little. That was achieved by using my baked curvature map as a mask. The same map is then improved by using Levels effect and sharpening.
Afterwards, I added some green parts (e.g. GreenBase. DirtyAlgae) based on custom masks: the white parts of the mask are related to the presence of algae and they are located between scales, in occluded areas, towards the crocodile's belly where the model touches the ground.
In general, you can notice that during the creation of the mask, I used a mix of both procedural maps (grunge, etc.) and paint layers adjustment to manually add or remove some parts.
Examples of masks:
To have more organic details, I used brushes to break up the base color. Bear in mind that texturing is essentially connected with the blending between layers: the use of masks guarantees that one layer is put on top of the other in a smooth and integrated way.
Finally, to add more breakup to the parts (breaking up white layer), I created a mask starting from a procedural pattern (ratio_crystal_1) and blending it with another map (ratio_grunge_map_014). I then modified the histogram and manually painted the mask with a Paint Layer.
As you can see, I blended the dark parts with the yellow ones, by masking some areas out with the result of random vertical stripes. On top of those stripes, I added elements such as dirt, some green color (reminds of the algae) and I generally emphasized the separation between scales by adding a darker color.
If you look at the surface of some scales, you can notice the dirt following a vertical direction, as if it was almost a leaking effect that I observed in some real photos.
A word of advice, apart from collecting photo references, is to think about creatures, as well as objects in the real world, as elements living in an environment. Because of that, they interact with nature; for example, the green elements and the dirt suggest that my crocodile comes from a swampy territory, in strict contact with a dirty terrain, and that makes the creature look more natural and real.
I approach the roughness once I have completed the base color. As explained in the awesome book "PBR Guide" by Wes McDermott (that I strongly recommend reading), the generation of a roughness map is a creative process without too many constraints and it requires the same creativity needed for the rest of the maps.
At first glance, It's not often easy to understand the quality of the reflection without a correct observation: photo references and especially videos come in handy for observing animals as they move.
The crocodile, in addition, is an animal living both in water and on land and the roughness values can be different in some conditions, due to the water droplets and the humidity causing a sort of coating layer on the body.
In my case, I tested out different roughness values considering photo references and short clips.
I'll show you my workflow used for the roughness in Substance Painter.
If you look at real photo references, you can see that in occluded areas (in my case between scales) the roughness has a higher value (imagine that there is dirt and other material there), plus the concave areas also have a dimmer reflection for the presence of self-occlusion in those narrow areas.
With that in mind, we can deduct that the surface on the scale, instead, has the roughness with a lower value (and with a more concentrated reflection beam). The reflection quality varies and, as many of you know, follows different hypotheses based on the Microfacet theory (e.g. Cook-Torrance): masking, shadowing, fresnel factor, etc. serve as elements to describe the appearance of the roughness.
That being said, the first layer that I created, called "no reflection in cavities", uses the curvature map to mask the concave areas and I applied a blur filter to smooth the mask.
Consider the white color of the mask between the scales having less reflection than the area on the scales.
The "Cloud Breakup" layer helps improve the breakup by applying a procedural map (Clouds 3). After that, I applied an adjustment layer and freely painted my roughness.
Note that the reflection is visible on the scales and we practically see small or very low reflection between the scales.
I repeat, the way you approach the roughness map is up to you and it must be created with your own creativity and knowledge and by observing the reality as much as you can.
In my renders, I also tested high roughness levels to get a dry look and appeal.
Filters and Generators
In this project, I took advantage of SP filters and generators to create more variety in my textures. My goal was to create custom masks with procedural patterns mixed with manual painting.
While approaching generators, you rely on your baked maps to ease the texturing process: for instance, if you want to add dirt or dust in occluded areas you can simply apply a smart mask (e.g. dust occlusion) that uses your AO to emphasize those areas. In the end, you have a stack of layers with custom masks of any kind.
In my project I mostly used:
- Mask Editor Generator: very useful tool to create non-destructive masks based on your baked and custom textures. The power of this tool is the possibility to set the influence of every single texture on the final mask.
- Bitmap masks: I applied procedural maps many times (like Cloud 3, ratio crystal 1, etc.) but also specific baked maps (like the curvature map) to isolate part of my model.
- Levels: a very simple and efficient feature to work on luminance histograms, to tweak the procedural maps, to invert your values, and much more.
- Blur filter: while creating some sharp masks (e.g. the roughness), I used this filter to smooth them out.
- Paint Layers: mostly used on masks to add an artistic and a more custom look.
In this particular project, I didn't have the need to use smart masks or smart materials often, and I mainly relied on the previous elements to generate my textures. Below, I'll show you an example with filters, generators, etc.
This crocodile has a visible presence of some irregular scales on the lower part of the mouth (starting from the jaw). On that part, there are also black dots and some green elements: I observed that feature in my species (Crocodylus porosus) but not all the species share the same pattern.
"Mouth Lines" is created from a Fill Layer with my curvature map (bitmap mask).
I added Levels to tweak some values and a blur filter to smooth the mask out. At the end, I used a Paint layer to manually remove some parts of the mask, especially on the scale surface: that's because my curvature map also kept some areas on the surface but in this case, I just needed the part close to the edge.
The white part of the mask has an associated brown color. The goal was to get this mask:
Finally, "Black Dots" adds small dots on the scales. This is achieved by painting dots on the level mask; the white part of the mask reveals the color. With the Black Dots layer, I could have simply used a Paint layer without adding a mask, because they are just brown dots on a surface. The reason behind my approach is quite simple: I wanted to have a non-destructive workflow. If I ever decided to change the color of the dots in a second, with the use of a mask everything would be very easy, whereas with a simple Paint layer that wouldn't be possible unless I decided to repaint the dots from scratch.
As you can see, even for very simple layers, the masks are very powerful.
Another example is the layer that reveals the Inner Mouth Details.
Without going too much into details, I tried to isolate the mouth with a custom mask.
Generally, the crocodile's mouth has colors that go from light brown and yellow to a soft red/orange (created with the Soft Brown and Soft Orange layers). Different from what one may think, the inner mouth doesn't have vivid colors and in some cases, the dominant color is even a very pale yellow.
With a Concave layer, as the name suggests, I wanted to emphasize the concave parts by adding some more organic red.
Finally, a small amount of blue color (Bluish Contrast) at 38%, with a multiply blending mode, was essential to cut some saturated areas and add more contrast to some parts of the mouth.
Around the teeth, there is a dirt layer to make that part more realistic and with a more natural transition to the gums: it's natural that the tooth base has some residues and dirt.
Furthermore, for the teeth and nails (that I won't discuss here), I followed a similar technique with masks, procedural maps, and generators.
Preparing the Renders
Before using the lights in a 3D scene, I always think about what kind of result and mood I want to obtain: the atmosphere is quite important to communicate feelings.
As for lighting schemes, I always have in mind the 3 point lighting approach which serves as a basis in most situations but naturalistic lighting is also good practice; it depends on your purposes.
Furthermore, if I don't have a 3D environment and I want to have nice reflections, I use an HDRI sometimes. There are no strict rules, just guidelines to follow.
I like experimenting with different lighting conditions. I made:
– A white box lighting scheme. Mostly used to present the character features from every angle, it has 3 area lights pointing towards the character – one from the right, one from the left, and one from the top. They produce soft shadows and they are ideal for showcasing the character (e.g with a 360 turntable). The render was made in Arnold for Maya. I used this scheme to show a turntable version of my crocodile.
– A render made in Marmoset Toolbag. Here, I wanted to create a more dramatic look and emphasize the inner mouth. I added a light on the left side of the crocodile, where I wanted to capture the specular reflections of the scales and to make that area brighter (a sort of fill light). I then added another light behind the subject to create the silhouette of the head: it acts as a sort of rim light, cutting the head from the background. Finally, I experimented with direct light towards the lower part of the mouth (key light) to increase the contrast and create nice and soft indirect bounces onto the upper part (the palate). The reflected light is interesting there!
With Marmoset Toolbag, you have a bunch of interesting features involving the camera and post production setting. Generally, when I create a close shot like that, I like adding a depth of field option; that part of the crocodile's back is intentionally out of focus. The depth of field improves the shot, as well as the use of small grains in the image. In fact, I added a bit of noise (almost unnoticeable) related to digital cameras, where the more the ISOs, the more the digital noise.
Marmoset Toolbag also provides the users with some post effects like luminosity, contrast, saturation, curve, tone mapping, etc.
– A close-up render. The idea was to capture some close details with the presence of an intimidating eye and a fierce look. Again, the render is made in Marmoset Toolbag, and here are some interesting details:
- The light shows the albedo on the side in a soft and uniform way, without exaggerating the light intensity.
- The presence of specular reflections improve the render quality.
- A shallow depth of field, for a shot like that, suggests the use of a tele lens where the eye area is in focus and the rest is not.
- The presence of out of focus background, created with a simple image plane, makes the integration better because we know that the crocodile is living in an environment.
- The use of chromatic aberration affects the type of lens (behaving like a prism) and different wavelengths bend at different angles without focusing on the same point of the focal plane. The effect is noticeable on the teeth with the presence of a subtle red fringe.
- The addition of a small grain effect like in the previous render.
It's also interesting to notice the presence of a LUT (look up table) that changes the colors a bit by burning some dark details and creating a more dramatic effect in the scene. For instance, this effect is present on the membrane near the jaw, on the right and on the left sides of the composition.
Finally, to create more realism, I decided to add a lens dirt effect (with some small stains). It happens when a lens is not properly cleaned up and the effect can create hexagons and different shapes here and there.
Challenges and Lessons Learned
During my project, I encountered some challenges. Since there were a lot of stages involved (modeling, sculpting, texturing, rigging, lighting, etc.) I mostly found it helpful to proceed step by step by consolidating and revising one stage before getting to the next one.
The first challenge was the sculpting part; it was long and required lots of time to produce satisfying scales. Of course, I didn't want the crocodile to have an "industrial" look and for that reason, the majority of details were sculpted by hand, without massive use of alphas. Sometimes I had to redo some parts in ZBrush and create variety in the details by observing lots of references. I know that is a time-consuming process but it is worth spending time on that. My suggestion is to find a proper set of brushes (not too many) that suit your needs, then start from the basic shapes and incrementally add details.
Another challenge was connected with the choice of proper colors and their mix for the skin; everything starts from a basic hue and from there you need to blend different layers with masks in order to obtain a proper look. The challenge here is to create continuity from one layer to another. I applied color wash techniques at the end to refine the results.
The rendering was not that challenging but the rigging required a bit of time: most of the work was connected with the skinning of the character because it was important to refine the movements and prepare the setup for the animation. I also added custom bones to give animators the possibility to deform some parts: for instance the belly, the bottom, and the side of the neck. Testing the rig was also a long process because it required getting back to my setup and revise things again and again.
To sum up, I worked on the whole project on and off, alternating it with other work. In total, it took me around 2 months to complete, considering that I worked on it around 3 hours a day.
I learned a lot from this project. It helped me improve my skill to observe details and it also allowed me to experiment with different texturing methods involving filters, generators, custom masks, etc. Also, it was good to practice rigging, test result, and search for the right mood in my renders. On the ZBrush side of things, I learned that sculpting details mostly by hand pays off, despite requiring lots of time.