bagginsbill opened this issue on Sep 19, 2005 ยท 24 posts
bagginsbill posted Mon, 19 September 2005 at 1:21 PM
(Note: This is kind of long - sorry - hope some of you find this interesting.)
First a little theory. Lots of folks have correctly talked of the importance of subsurface scattering for realism. More than a few (including me) have tried to use the FastScatter node to accomplish it. I did a lot of very intricate tests with it to see what it's actually doing. My conclusion is the FastScatter node is mostly useless, except for synthesizing the glow of a backlit ear. And I don't have a clue what the Wacro "Add Subsurface Scattering" is trying to do. All I ever get from it is a wierd sunburn effect. So I started thinking about how skin really works and how to model it.
A very simplistic model of the skin is that there are two layers. The outer layer (epidermis) is mostly dead skin cells. They form a thin, flaky, translucent, yellow-white layer on top of the living skin. (Think of what dandruff looks like.) Underneath are living skin cells with lots of capillaries bringing blood everywhere.
Figure 1 shows a torus I rendered in Poser with a procedural texture I made to model the two skin layers. For the lower layer I just used a solid blood red. For the epidermis I used a displacement map made from the Granite node. I gave the flakes a slightly yellow color and made them about 30% transparent, with a very slight specular reflection. Note that Firefly is lying about the texture in this render - it shows big red dots at this scale which is totally incorrect. The red parts are much smaller than a single pixel in this render.
Figure 2 shows a closeup of the middle of the torus - the part that points straight at the camera. Now you can better see the structure of my skin model. Gaps between the flakes reveal the blood. The flakes are pink because they are so thin the blood colors them somewhat.
Figure 3 shows a closeup of the edge of the torus. You should notice two things. The flakes are now slightly sticking out in front of each other, so when you look through one, you get the color of others behind it. So they are much less pink. Also, from this angle the 3-dimensional flakes are almost completely obscuring the blood layer. Another effect of this angle is that the specular reflections from individual flakes are adding up to a lot more white.
In figure 4 I used a trick to get the overall macro effect that this produces. It is showing a section of the right side of the torus. I rendered this at 3200 by 3200 pixels (10 minutes!). I then loaded the render into photoshop, blurred it (to get the effect of these things being microscopic) and shrank the image to the size you see here. You might disagree with me, but that sure looks a lot like skin to me!!! Notice that the center is much redder than the edge, there is a generally mottled appearance to it, and that the edges are showing a bit more specular reflection, even without the presence of a backlight at the right angle.
To my mind, figure 4 demonstrates that the model is a reasonable simulation of skin. But if you try this texture on a figure, the poser renderer does a terrible job - it looks like Figure 1. The problem is that it is sampling individual microscopic points and then coloring an entire pixel based on the sample. However, the macro level is actually very simple to model with Poser.
On the right I show three renders with and without my material nodes. I inserted two lo-res Jessi figures. The one on the left is stock - untouched. The one on the right has the material room changes I describe below that hopefully model the skin better. I used three lights, an IBL, a fill light on the front, and a back light from behind and a little riight. I then just moved the camera and my fill light around to show you three examples.
(Please note: I have 3 monitors and these look different on each. The subtle red-shift produced here may look too weak or too strong on your monitor. Hopefully, now that you know how I'm doing this, you should be able to make your own adjustments for your scenes.)
The Edge Blend node basically chooses a color based on interpolating between two specified colors using the angle between the viewer and the surface normal as the input. So I added an Edge Blend going from Black to RGB 20,0,0 to the Alternate_Diffuse channel. This gives the figure the realistic ruddy tone on the skin that faces the camera. You can play with the Inner_Color and attenuation to adjust the affect. Higher attenuation will make the red drop faster as you get to the edge.
The Blinn node is a specular reflection model that is strongest when the camera AND a light source form a shallow angle to the surface AND the light source points toward the camera. I set the Blinn specular color to RGB 255,255,240 - just slightly yellow.
Finally, because there is a tiny bit of shine on skin that faces the camera, I set the regular Specular_Color value to RGB 31,31,31. You don't want a sharp highlight so I set the size to 0.1 - I often play with this to make the skin look more/less wet. Experiment.
I'm not showing it here, but I also used a TINY bit of Spot node on the skin texture to get some of the color mottling that I see in Figure 4. Just a tiny bit. In an extreme closeup, you can really see it.
Did this post help you? Two much detail or not enough? Let me know. I've learned a lot from the community and want to give back so don't be shy.
Renderosity forum reply notifications are wonky. If I read a follow-up in a thread, but I don't myself reply, then notifications no longer happen AT ALL on that thread. So if I seem to be ignoring a question, that's why. (Updated September 23, 2019)