Character Shaders Best Practice


#1

I have a film (i.e., not game) character that is comprised of several objects (Head, Vest, Utility Belt, Shirt, Pants, Boots, etc.). I am curious how others would approach the shader(s) for such a character? Would you:

  1. Create the required texture maps (diffuse, spec, rough, bump, etc.) for all objects using UDIMs and feed them all into a single shader.
  2. Create all of the required maps and feed each object’s maps into its own shader, with or without UDIMs (i.e., one shader per object)?
  3. Create the maps, feed each object’s maps into its own shader and then feed all of these shaders into a mix/layered shader.
  4. Create the maps as in #1, #2 or #3 and feed them into shaders based on material type (i.e., leather, skin, metal, etc.), rather than by object.

A single shader would allow for better control of parameters that affect all related objects. However, you would have make all object related adjustments in the texture maps (e.g., bump intensity of one of the objects)… This seems to be less flexible when changes need to be made.

One shader per object would allow for better control of changes to object related parameters, but would inflate the number of shaders to manage for the character.

I am not sure about the layered shader. I don’t know if it would offer a combination of both.

Any thoughts would be appreciated.


#2

Use separate materials for meshes of different types. That’s what materials are for.

If you have shared properties, you can connect them together. For example, you can have a single attribute on a helper node with bump intensity, and just connect that to all of the related bump2d nodes so it controls all of them at once. I don’t know how useful this really is, though.

Also, I always make sure transparent objects like eyes have separate materials (and meshes) from opaque objects. It helps the viewport a lot, since if an object has any transparency at all it gets drawn in transparent mode, which is slower and causes artifacts with complex objects.

layeredShader is for when you actually want to mix two different materials together. You wouldn’t want to pipe your entire character through it.


#3

What kind of character is it ? cartoon? Realistic?
can u upload a screenshot ?


#4

Hi damaggio,

My character is similar in style to Flynn Rider (toon-like with semi-realistic clothing and hair). The character has suede leather vest with rugged leather side-panels and belt straps with old brass buckles. The vest also has leather laces and metal lace guards in the neck area. He also has a leather harness that has a decorative leather shield on his chest and holds a weapon scabbard on his back. The harness also has brass rings and metal rivets. He has a large leather utility belt with old brass buckles and rivets. He has rugged cotton/wool pants with leather boots that have leather laces. He also has leather wrist guards with laces. His hair will be done in Ornatrix and will be semi-realistic and partially dynamic.

As you can see, there are a number of objects and each object can have several different materials. If I were to use a different shader per object as well as per material on each object, there would be a lot of shaders to manage. Maybe this is normal. I don’t have much experience with it and would like to learn the appropriate approach to shading complex objects like my character.


#5

I watched a video from the Pluralsight course entitled Crafting Characters from Design To Composite in Zbrush and Maya (a subscription is required to view the video). It walks through the shader implementation on a character with accessories (i.e., character with multiple objects). It uses a shader for each type of material on each object. After watching the video, it makes sense to me that you would do that. This approach is similar to the one gfk suggested (including a form of parameter control nodes). Unless, there are any views that oppose this approach, I will most likely use it.


#6

i would follow only one rule… dont do shader assignment for faces… only objects…
all other is up to you… some like to combine objects with the same material… like metal, wood, plastic…

some do combine objects of different materials…
if you combine it to one object you have to paint reflection, roughness maps and cant work with values…

thats why i do a unique shader for each object… a object is a change in material…
for example a knife containing a metal part, a leather handle and a diamond on the end will get three materials… but could share one set of textures…
the knife is also sepaerated into those three objects…


#7

oglu,

Your comments are particularly relevant to me now. My character has a vest that is comprised of several materials (leather, suede, brass buckles, metal rivets, etc.) When I got deeper into the texturing phase, I realized that managing the spec, roughness and other ancillary maps was rather involved with so many materials per object. It certainly would simplify the process to be able to just set a roughness or specular value for the whole object in the shader (an object representing a single material), rather than masking and painting the relevant sections of spec and roughness maps.

In your experience, would this approach of separating objects based on material have any adverse impact on rigging? Or, does object separation even matter when rigging?


#8

should be no problem for the rigger… most of the time rigger does start with a lowres version for skinning and rigging… and later on they transfer all over to the rendermeshes/alembics…
its not uncommon to have four meshes… a rendermesh, a riggin mesh, a animation mesh and one for simulation… it all depends on your team and the pipeline you are creating… there is no golden rule for everything… if you dont have the people and time to create all those diffrent meshes you have to find a way to work with only one combined mesh…

talk to the team and find a way to finish in time… and dont accept its not possible if you have the feeling the rigger just dont like to work your way…
sometimes it makes sense,… sometimes someone is just to lazy…