Who's Online
There currently are 44 guests online.
|
Home ::
Exploring Poser Skin Nodes - A WIP
Exploring Poser Skin Nodes - A WIP
|
An Exploration of Poser Skin Nodes
These nodes - in their original form - were developed by BagginsBill of RuntimeDNA. Please note: this is *NOT* a tutorial... it is an exploration. I'm not an expert or even understand much about this. I just desperately want to understand. The purpose of this is to put my ignorance out there for all to see so that perhaps some extremely motivated or irritated knowledgeable person will set me right or point me in the right direction. So, that is the spirit of this undertaking: it is not an authorative work but a bit of a publishing the results of my little material room lab.
|
|
You can find the original discussion here.
There is no question that Poser's ability to produce life-like images is due to the skill of people like BagginsBill and Semidieu and Face_Off to manipulate nodes to produce shaders for materials as well as develop lights that take advantage of those shaders. It is very important to understand the relationship of lights to materials.
This discussion will start with a basic light setup (set up by Bill to be simple yet optimal) with one IBL and one Infinite.
For the IBL Light: (settings image on the right)
Light Intensity is .45 (45% when you're dialing it in the parameter's dialogue)
Contrast is 1.0000
The ImageMap Texture_Strength is .40000
For the Infinite Light: (settings image below)
Red, Green and Blue should all be 1.000
Intensity is 65%
|

|
|
Bill said about his light texture map:
That last one - the texture map I called MainNodeMask for some inexplicable reason - is interesting and useful. The image I gave you is actually black and white. But by adjusting the Texture_Strength, you shift the colors of the image upward toward white. So the white part stays the same and the black part becomes gray. What I'm doing here is adjusting the overal gradient from top to bottom in the scene. The white part contributes to overhead light - the rest is all around and below. Later, you can play with these values, but set them up like this for now.
The second light is just an infinite light. It should be rotated so that it is mostly straight on, but slightly shifted upward and to one side. I made mine come in from the left a bit. Set the infinite light strength to 65% and make sure it is white.
|
|
Before I start using terms that everyone is going to find really foreign and weird, let's just all adjourn to the Material Room and familiarize ourselves with a few names and concepts.
Westerners are used to reading from left to right, so our instinct is to follow our connections out from the big, root node on the left (for most Poser materials called "PoserSurface"), but as a matter of fact, nodes and connections should be read the other way around. Things all end up at the root node, since that is where materials derive all their elements from. A root node won't have an output point - an output point looks like the plug for a powerpoint in the upper left-hand corner of the node - but all nodes (that I've encountered so far) have input points, some with colour boxes, some with numbers that turn into dials.
[ please consider this topic as yet incompletely covered ]
Now, for our first go at setting up skin materials for our character in the material room. When we first set up a character, we usually start with the main textureMap. The way we set this up is: from the Diffuse_Color channel of the PoserSurface node we drag out a connection and create a node:
New Node >
2D Textures >
image_map
For this part of the discussion, we will limit our experiment to the facial region: the materials 1_SkinFace, 1_Lip and 1_Nostril. For our first render, we will set things up as in the illustration on the right:
On PoserSurface:
Diffuse_Color and Specular_Color is white
Diffuse_Value is 1.000
Specular_Value is 0.000
Highlight_Size is 0.100
All other values are at the default.
|
|
|
Since we're not going to take advantage of brilliant tools like VSS during this exercise, we'll have to do this the long, hard way... well, to a point. Once you have things set up for your 1_SkinFace material, you can actually copy and paste all the nodes and values and connections to another material quite easily.
Right-click on any node and from the pop-up menu choose "Select All"
This will cause all your nodes to light up (be selected).
Right-click again and this time choose "Copy"
Select your next material (i.e., 1_Lip)
Right-click anywhere and from the pop-up menu choose "Select All"
Right-click again and this time choose "Delete" - the PoserSurface will remain, the others will disappear
Right-click again and this time choose "Paste"
All your connections and setting will have been faithfully copied.
Now, for our render settings. We're going to be doing a lot of renders, so we don't want to wait for ages... we'll be too keen to get on with it. BagginsBill had selected the following render settings, so we'll go with that for the purpose of this exercise:
No shadows
No raytracing
Min Shading Rate to 3 (I set mine to 1.5 for the renders below)
Pixel Samples to 1 (I set mine to 2)
No smoothing (left smoothing on)
Okay, let's do our first render.
Scary, isn't it? probably because of a make-up scheme that worked well in a more advanced shader of Bill's, since the shader actually toned the underlying texture down a fair bit and because I somehow got the light settings wrong, somewhere, because this render looks nothing like the one on the RuntimeDNA site. Notice the skin-tone of the rest of the body compared to our shader-less face material. Clearly makes a case for shaders, doesn't it?
|
|
|
The skin looks a bit too white, so we're going to change that a bit. In the Diffuse_Color channel of the PoserSurface node, click on the coloured box: a colour-picker dialogue will appear. Click on the Red-Green-Blue box on the upper-righthand corner, and our familiar colour selection dialogue pops up. In the lower right-hand corner are 3 vertically-aligned boxes. In the space provided, enter these values:
Red: 248
Green: 209
Blue: 177
Click on "Add to custom colors"... so you have it available for the other two materials.
We make no changes to any of the channels. Click OK.
Be sure to modify 1_Lip and 1_Nostril... you can select the color from your custom color box instead of having to type it in again.
And render. Vast improvement, right? Um, no. Not really. Yes, the skin tone is warmer, more lifelike, but you still have to like the skin over the neck better, hey?
|
|
|
Besides our colour being a bit too warm, the skin seems flat, no glow to it at all. We're going to add a bit of shine to it: probably more than she needs, but now her face has contours and she reflects light a bit more realistically.
You make changes to only two channels in the PoserSurface node:
Specular_Value to 0.6000
Highlight_Size to 0.7000
Do this for all three. Seems pointless for the nostril at this point (pointless at this point, what's your point?) but you'll see the point at some point in the not too distant future. Ever heard of nostril glow?
And Render. Then, break out your face-powder... she's glowing!
Here's where Bill said:
There are an infinite number of ways to implement the Diffuse + Specular = 1 rule. I've chosen to do something completely trivial. I change the specular color, so that it is WHITE - texture. This is a really simple trick. When a photon specularly reflects, it should NOT be included in the Diffuse calculation. But it already was. So I'm sort of just subtracting that out of the equation, to get the Specular to produce the INCREMENTAL amount of light over what the Diffuse has contributed.
The "Diffuse + Reflect = 1 rule" is - in my opinion - best explained in the material manual for the Kerkythea renderer, available here. In that guide the author talks about a Physical Law of Energy Conservation, which states that:
All light is Reflected Light
Diffuse color is Reflectd light
Specular color is also Reflected Light
Since an object can only reflect the light it receives, we have to make sure that our object's combined diffuse color and specular color values don't exceed 1.000.
Otherwise, things look weird, like the picture on the right.
|
|
|
Here's where we're going to start toning things down a bit.
From your Specular_Color channel, click on the input plug and with your left mouse-button depressed drag away from the PoserSurface node. You'll see what looks like a white string kinda come out of the input plug. When you let up your mouse button, that menu I mentioned earlier will come up. What you want is:
New Node >
Math >
color_math
Voila... a new node pops up, connected to that Specular_Color plug in. It is important to mention here that this node will affect that Specular_Color channel: that's why we've created it. We want to subract some of that diffuse value (for the Energy Conservation reasons we gave above), so select "Subtract" from the Math_Argument dropdown. Change the colour in the Value 2 colour box to match the colour in the Diffuse_Color box - you know how to do that quickly now, don't you?? - and then connect the Value 2 input plug into the TextureMap output plug, like the image on the right.
|
|
|
So, what are we doing here? How does this math node work? From Castle Poser we get this answer:
The simplest use of the color maths node is to perform what might be seen as 'real' colour maths - adding together two colours. Well, we're subtracting, aren't we? For the math_functions subtract they said that As you would expect, the subtract node subtracts Value_2 from Value_1 so I'm going to assume that the same behaviour would exist for color_math subtract. So, now we're doing maths on colours?? Yep, pretty much.
See why I refuse to call this a tutorial? I'm exploring concepts, here, right along with all of you. Anyway, let's copy those nodes down to the Lip and nostril materials and render, shall we? If you add the nodes manually - which is a good way to do it, as it'll give you practice adding nodes - don't forget to change the default add math_argument to subtract.
|
|
Better. A long ways from perfect, but definitely better. What with the underlying texture map being so good - patting myself on the back here - I could almost be tempted to leave things this way, but something about that texture still looks mannequin-like, not alive, artificial. As Bill put it:
...the specular reflection off the epidermis isn't really supposed to be white. It should be a really pale yellow. So here I changed from WHITE - texture, to Color(1, 1, .85) - texture. Problem solved, as the target color is now more real.
Where he made his change from white to pale yellow was in that Value 1 colour box in the color_math node. His 1,1,.85 translates to 255,255,216... so, let's do that and render.
|
|
|
Heather keeps looking better and better, and I keep getting pickier and pickier. Unfortunately, here's kinda where my understanding of what he's doing greys out a bit. It has something to do with how light is reflected from an object into the lens of a camera.
... this node is concerned with the angle between a surface and the current camera. Inner color is used for surfaces that are facing towards the camera, outer color is used for surfaces that are not directly facing towards the camera and attenuation defines how quickly that Inner color fades into the Outer Color attribute, 0 being no fade, 100 behing a fast fade.
So, let's have a go. What we're going to do is affect how shiny an area of skin appears, depending how much that area of skin faces (or doesn't face) the camera.
From the Specular_Value input plug on PoserSurface, drag out a new node:
New Node >
Math >
edge_blend
For the Inner_Color value, enter 114,114,114
For the Outer_Color value, enter 204,204,204
For the Attenuation value, enter .7
Increase the Specular_Value on the PoserSurface node to 1.00000
Do this for the other two materials as well. At this point, it will be easier and quicker to select the node and copy it, then form the connection from that node to the Specular_Value input plug on the PoserSurface node for each material.
Bill put it this way:
The amount of Specular reflection needs to follow something like the Fresnel rule. So all I'm doing here is connecting EdgeBlend(.45, .8, .7) to the Specular_Value. As a result, I get Specular amount .45 when facing the camera, and .8 when facing to the side.
|
|
|
Skin so smooth... too smooth. But hang on, you've got a bump Map. Let's use it, shall we? But use it creatively.
From the Bump input plug on PoserSurface, drag out a new node:
New Node >
Math >
color_math
Set the Math_Argument to subtract, and value 2 color to 127,127,127. Then, connect it to the output plug on your bump TextureMap (if you've got it set up, otherwise you can simply set it up now). Bill suggested setting the bump value on the PoserSurface node to .001 - I set it to .0025 so you actually see some bump...
|
|
|
...all except for the lips, since poor Heather looked like winter had been particularly rough on her, and Suzy had stolen her chapstick.
My objective, at the outset of this exercise, was to bring into focus the shader that produced the image on the right by studying Bill's Basic Skin Shader to see what did what. Bill's tutorial ended with nodes to do spots and freckles, as well as everything else we've covered so far. However, what wasn't covered was: what did how and why. Castle Poser attempts to address this, but it is sketchy and isn't specific to skin, which is what I'm interested in. When it talks about the math_function Add, it uses as an example a brick texture, which has its own complex properties.
So, I've decided to take each and every node and do experiments on them until I fully understand their behaviour. The first of those lab tests involve those freckles and spots.
|
|
|
COFFEE BREAK
|
|
What we need to get our heads around is how math nodes in Poser affect other nodes... and what they are used for. Given the lack of general user learning material, I guess we'll just have to do a bit of exploring on our own.
Which is what we're going to do here. When I get this flippin' NON-tutorial done, you and I will have explored each and every one of these nodes to death. We will know what they do, and then we will have a place to point other Dummies to - believe me, the world is filled with Dummies like US!
On the right is the shader I hope to completely understand and be able to manipulate by the end of this exercise.
|
|
|
And here is our starting point: pretty much (gave or take a bit) where the Basic Skin Shader exercise left us. So, we're going to continue our exploration by picking this one apart, group by group, node by node. If we run into a major issue with a particular node, we'll stay there until the details have been completely sorted out.
Up until now, the pictures (screen captures) were just for illustration. Now, they are going to have a bit more information in them, and detail would be lost (as you can see in the image on the right) if I didn't give you access to the full-sized image. Which, I do... just click on the picture, and a new window will open with - hopefully - a much more readable image.
I have tried to group the nodes to the left by what I understood were their function: to improve the existing texture with freckles (hopefully just over a mapped area), an enhanced bump map and moles that actually stick out a bit.
|
|
|
First, let's look at the fine skin spots, almost a bit like freckles, but softer... more just the variation of skin tone we all have. Heather shows it nicely on her skin:
|
|
|
So, how are we meant to looking at this mess of boxes in the material room?
Well, following just what's been highlighted in pink, we start right the way on the right with the textureMap, which outputs to both the Base_color and Spot_Color input channels of the Spots node. The Image_Map_3 node feeds the Base_ and Spot_color channels of the Spots_3 node, which in turn feeds the Base_ and Spot_color channels of the Spots_2 node, which outputs to both the Input_1 channel of the Blender_2 node and the Value_1 channel of the Color_Math_3 node, which multiplies the value it receives from the Spots_4 node to output to the Input_2 channel of the Blender_2 node. The Blender_2 node outputs to both the Input_1 and Input_2 channels of the Blender node, which blends in some more spots from the Spots node before outputting to both a color_math node Value_2 channel as well as the the Diffuse_color channel on the PoserSurface node.
Huh?
From what I can tell from previous discussion, when a colour value is white, it can mean either white or the default colour being fed into that channel. Not having a manual right now makes it hard to tell whether I'm right on this. "White" seems to mean: whatever colour you're currently dealing with... or white. Please correct me if I'm wrong... that's why I have the link to my email at the bottom! And why I call this an Exploration.
|
If you have a clue about all this, or an opinion, please write me at: robynsveil@poserfordummies.com.
|