Skin shader

Started by KyL, October 17, 2019, 08:45:53 pm

Previous topic - Next topic

KyL

October 17, 2019, 08:45:53 pm Last Edit: October 17, 2019, 10:20:12 pm by KyL
Okay so here is a new topic to talk about human skin. I am sure there will be some discussion around the subject so let's start with a few pictures:

Here is a pure glass shader I adjusted to mimic skin subsurface:
tgout-001 21m11s v4.4.38.1.jpg
There is no bump or displacement, this is a high resolution model.

Here is a couple of examples with lower resolution models. I mixed the above subsurface shader with a default shader:
tgout-004 34m30s v4.4.38.1.jpgtgout-001 17m41s v4.4.38.1.jpg

And here are the same in another lighting condition:
tgout-010 22m26s v4.4.38.1.jpgtgout-002 19m05s v4.4.38.1.jpg


So it's possible to achieve the subsurface aspect of the skin.
The issue at the moment is how to mix it with texture. Currently it looks like mapping a color image on the object UVs doesn't work with the volume color function. However it does work with the volume density function. Could that be a bug? ???

Anyway, in the above examples, I used a glass shader only for the subsurface effect, with reflection and caustics turned off. I then merged it to a default shader taking care of the diffuse, reflections and bump. Because of the two shaders are merged in ADD, I am pretty sure this breaks energy conservation and it is not physically accurate. But with a bit of work and proper geometry/textures, this should be doable.

Speaking of models, one is the courtesy of Lee Perry Smith, which can be found on the Arnold guide to skin shading. I found the other model here

bobbystahr

October 17, 2019, 11:20:54 pm #1 Last Edit: October 17, 2019, 11:32:29 pm by bobbystahr
Wow Kyl...a major step forward in skin...to this colourblind old pensioner it looks in the last iteration of the models, like you nailed it.
Thanks for the links as well!
something borrowed,
something Blue.
Ring out the Old.
Bring in the New
Bobby Stahr, Paracosmologist

Hannes

Quote from: KyL on October 17, 2019, 08:45:53 pmCurrently it looks like mapping a color image on the object UVs doesn't work with the volume color function.
That's what I noticed as well. Great you found, that it works with the density function. Thanks for your exploration. Looks fantastic!!
And thanks for the links as well!

Dune

Thanks very much, KyL. That answered my question at my thread. Off to explore again. It looks really good!

Hannes

I downloaded the Robert Harris model and tried to recreate your image, but it doesn't look right here. May I ask you about your pure glass shader render? Did you rescale the model, and what are your settings for the glass shader? I tried to apply an image map shader with the texture (Object UV) to the density function slot, but it doesn't seem to fit.

KyL

Thanks for the comments guys.

@Hannes, the glass shader is using a short decay, something like 2cm and density at 1. And yes, I had to adjust the model. It came in the wrong orientation and scale. Also some vertex and UVs were not merged properly. Oh and you need to rotate the texture upside down too. ::)

Hannes

Ah thanks, Kyl!

Quote from: KyL on October 18, 2019, 08:56:45 amOh and you need to rotate the texture upside down too. ::)
Yes, I just realised that. ;)

Hannes

This is weird. No matter what I do, I can't get this smooth and natural look you had in your pure glass shader render. I tried to match your lighting, and I have the same model. I used a density of 1 (a bright fleshy color) and a decay distance of 0.02 (a more reddish color).
At the moment I'm rendering an animation with the decay distance animated from 0.01 to 0.5 just to see, if there's the right value somewhere in between.

KyL

This should help you:

<terragen_clip>
<glass_shader
name = "skin_subsurface_sh"
gui_use_node_pos = "1"
gui_node_pos = "880 1740 0"
gui_group = ""
enable = "1"
input_node = ""
gui_use_preview_patch_size = "0"
gui_preview_patch_size = "1000 1000"
double-sided_surface = "0"
reflectivity = "1 1 1"
reflection_tint = "1 1 1"
transparency = "1 1 1"
index_of_refraction = "1.33"
highlight_intensity = "0"
caustic_intensity = "0"
specular_roughness = "0.4"
specular_roughness_function = ""
decay_distance = "0.02"
decay_tint = "1 0.2158000022 0.2158000022"
volume_1_density = "1"
volume_1_colour = "1 0.8122000098 0.6941000223"
volume_1_density_function = ""
volume_1_colour_function = ""
volume_method_in_path_tracer = "2"
>
</glass_shader>
</terragen_clip>

KyL

Quote from: Hannes on October 18, 2019, 09:17:06 amAt the moment I'm rendering an animation with the decay distance animated from 0.01 to 0.5 just to see, if there's the right value somewhere in between
I'm quite curious to see that actually! Also don't forget to increase detail as Matt mentionned in Dune's post. I rendered my tests at detail 0.5 with a ray detail multiplier of 0.5.

Hannes

Thanks a lot, KyL!!!! :) :) :) :)


Quote from: KyL on October 18, 2019, 09:31:30 amAlso don't forget to increase detail as Matt mentionned in Dune's post. I rendered my tests at detail 0.5 with a ray detail multiplier of 0.5.

Oh, I missed that. That may be the problem. I'll post the animation asap. Probably it's worthless, since I hadn't set detail and RDM to these values.

Hannes

Workiiiiiing!!!!!! Thank you so much!!!!!

j meyer

Yay, cool experiments, keep it up guys.

KyL

Quote from: Hannes on October 18, 2019, 10:32:40 amWorkiiiiiing!!!!!! Thank you so much!!!!!
You're welcome!

Here is an update with a high res mesh and a proper subsurface-only shader.
The color texture works when plugged into the volume color function, thanks to the changes in build .40!

KyL

Here is a first take on Digital Emily

After the early experiments above, I wanted to take things a step further and for this I needed better source data. Some of you might remember of this. This workflow has now been refined and developed by many VFX studios, always pushing the limits in terms of accuracy and fidelity toward realistic digital humans.

Anyway, this project shares its sources files for research purpose, and even though most digital doubles now rely on much better model and textures, this is still a solid base to work on. So here are a couple of renders with the same lighting scenarios as the previous tests.
digitalEmily_lookdev_v01.0001.jpgdigitalEmily_lookdev_v01.0002.jpg

Render times were between 2h30-3h for a 2k frame. What bugs me the most at the moment is that I cannot get a nice clean terminator when the light is a glazing angle. I will have to investigate that. Also  the ray depth is too short to have subsurface in the eyes, so I had to resort on diffuse for the eyeball. Lots of noise in the eyes too, which is sad considering how nice the caustics look! I will have to find a better way to control the specular roughness too.