skin is very fun! sss layers- indigo 07 test 2

Get feedback from others on your works in progress
User avatar
oodmb
Posts: 271
Joined: Thu Oct 26, 2006 5:39 am
Location: USA
Contact:

skin is very fun! sss layers- indigo 07 test 2

Post by oodmb » Sat Jan 20, 2007 6:51 pm

both of these are modeled with layers with slightly different data. i tried making the skin have an ior of 1 to reduce the specularities, but this made the skin not look like how i intended it to look. data is taken from sugested data in gelato documentation and data from the papers.
first render was 3 hours on 3 computers and 5 cores, second render was 6 hours on one computer and 2 cores. the head should look reder with more detail, but i was forced to use the low poly model when modeling layers and ten accidentaly modeled the layers in cm instead of mm. i will update the image in a couple of days or hours.

Image
(this one got the 3 hours and papers indigo 07 test 2)


Image
(6 hour gelato indigo 07 test 1)
a shiny monkey is a happy monkey

User avatar
OnoSendai
Developer
Posts: 6180
Joined: Sat May 20, 2006 6:16 pm
Location: Newcastle upon Tyne, UK
Contact:

Post by OnoSendai » Sat Jan 20, 2007 10:28 pm

The first one looks promising.
What parameters did u use?
what coefficients?
How many and how thick were the layers?

User avatar
oodmb
Posts: 271
Joined: Thu Oct 26, 2006 5:39 am
Location: USA
Contact:

more recent

Post by oodmb » Sun Jan 21, 2007 5:43 am

i did a higher poly version with correct size layers. the results were quite pleasing. i might have mixed up two of the layers causing the inside to be yellow and one of the layers to be red. but the results were still how i wanted them
the layers were respectivly to the size of the model, .03 mm, and .05 mm
the way i modeled them allows for some areas to be made thinner than others very easily, like in the bending of an elbow where the skin gets redder or whiter and stuff like that
Image

Code: Select all

  <medium> 
	<name>BLOODY</name> 
       
	<ior>1.4</ior> 
	<cauchy_b_coeff>0.0</cauchy_b_coeff> 
	<precedence>80</precedence> 
	<absorption_coefficient_spectrum> 
		<rgb> 
			<rgb>0.85 10.0 250.00</rgb> 
		</rgb> 
	</absorption_coefficient_spectrum> 
       
	<subsurface_scattering> 
		<scattering_coefficient_spectrum> 
			<rgb> 
				<rgb>45 47 48</rgb> 
			</rgb> 
		</scattering_coefficient_spectrum> 

		<phase_function> 
			<henyey_greenstein> 
				<g_spectrum> 
					<uniform> 
						<value>0.8</value> 
					</uniform> 
				</g_spectrum> 
			</henyey_greenstein> 
		</phase_function> 
	</subsurface_scattering> 
   </medium> 

	<material>
		<name>BLOODY DERMIS</name>
		
		<specular>
			<transparent>true</transparent>
			<internal_medium_name>BLOODY</internal_medium_name>
		</specular>
	</material>







   <medium> 
      <name>uepiderm</name> 
       
	<ior>1.34</ior> 
	<cauchy_b_coeff>0.0</cauchy_b_coeff> 
	<precedence>60</precedence> 
	<absorption_coefficient_spectrum> 
		<rgb> 
			<rgb>01.6 1.9 3</rgb> 
		</rgb> 
	</absorption_coefficient_spectrum> 
       
	<subsurface_scattering> 
		<scattering_coefficient_spectrum> 
			<rgb>
				<rgb>320 400 460</rgb>
			</rgb> 
		</scattering_coefficient_spectrum> 

		<phase_function> 
			<henyey_greenstein> 
				<g_spectrum> 
					<uniform> 
						<value>0.25</value> 
					</uniform> 
				</g_spectrum> 
			</henyey_greenstein> 
		</phase_function> 
	</subsurface_scattering> 
   </medium> 

	<material>
		<name>UPPER DERMIS</name>
		
		<specular>
			<transparent>true</transparent>
			<internal_medium_name>uepiderm</internal_medium_name>
		</specular>
	</material>








   <medium> 
      <name>epiderm</name> 
       
       
	<ior>1.4</ior> 
	<cauchy_b_coeff>0.0</cauchy_b_coeff> 
	<precedence>40</precedence> 
	<absorption_coefficient_spectrum> 
		<rgb> 
			<rgb>21 21 50</rgb> 
		</rgb> 
	</absorption_coefficient_spectrum> 
       
	<subsurface_scattering> 
		<scattering_coefficient_spectrum> 
			<rgb>
				<rgb>480 600 650</rgb>
			</rgb> 
		</scattering_coefficient_spectrum> 

		<phase_function> 
			<henyey_greenstein> 
				<g_spectrum> 
					<uniform> 
						<value>0.000</value> 
					</uniform> 
				</g_spectrum> 
			</henyey_greenstein> 
		</phase_function> 
	</subsurface_scattering>  
   </medium> 

	<material>
		<name>EPPIDERMIS</name>
		
		<specular>
			<transparent>true</transparent>
			<internal_medium_name>epiderm</internal_medium_name>
		</specular>
	</material>
a shiny monkey is a happy monkey

User avatar
DaveC
Posts: 596
Joined: Mon Sep 11, 2006 12:20 am
Location: The Tottenham, London, UK
Contact:

Post by DaveC » Sun Jan 21, 2007 5:53 am

Apart from the yellow blood medium, that is disgustingly real. If you can lower the specularity, it'll look incredible (and make the blood red of course :wink: )
The hardest part of BEING yourself is FINDING yourself in the first place...
http://thebigdavec.googlepages.com

User avatar
fused
Developer
Posts: 3558
Joined: Fri Sep 22, 2006 7:19 am
Location: Berlin, Germany
3D Software: Cinema 4D

Post by fused » Sun Jan 21, 2007 5:54 am

looks pretty realistic (exept the ear).


im not sure but probably you should use <glossy_transparent> instead of <specular>

User avatar
oodmb
Posts: 271
Joined: Thu Oct 26, 2006 5:39 am
Location: USA
Contact:

glossy transparency

Post by oodmb » Sun Jan 21, 2007 6:07 am

oh, i tried glossy transparency, its alot worse.
i did just about every combination of glossy transparency you can imagine on every layer. the problem with glossy transparency is that its not just reflecting the specularities, but it reflects everything. skin is actualy perfectly specular due to the oil on it and its index of refraction, only reason we dont see it this way is because the cells act to diffuse the specularities. it might be true that ono's way of having all transparency with an IOR be perfectly specular is the real way, but its impractical to render materials with ior and diffused specularities with a mesh that includes the bumps, or even a bump map. think frosted glass
a shiny monkey is a happy monkey

User avatar
domparis
Posts: 37
Joined: Sun Nov 26, 2006 8:55 am

Post by domparis » Sun Jan 21, 2007 7:56 am

The second one is pretty close to the "real" thing execpt for the spec, glossy transparent alter the settings in a strange way don't now if it's correct or a bug ??

So good tests and thanks for details oodmb !!

Dom

User avatar
Zom-B
1st Place 100
Posts: 4655
Joined: Tue Jul 04, 2006 4:18 pm
Location: ´'`\_(ò_Ó)_/´'`
Contact:

Post by Zom-B » Sun Jan 21, 2007 7:58 am

nice results dude... 8)

My thoughts for this Topic are, that at layer & thickness material system coded by Ono would be much more interesting...

The possibility to define thickness for the layers, going inside the model, following (back) the normals would be great...

not only real skin could be archived by this very fast & easy, but also Car Paint for example too

feel free to cc, perhaps this is even not possible just an idea!
polygonmanufaktur.de

User avatar
oodmb
Posts: 271
Joined: Thu Oct 26, 2006 5:39 am
Location: USA
Contact:

Post by oodmb » Sun Jan 21, 2007 8:50 am

well, yes that would obviously be a better solution.
now that i think about it, you could in theory set up a medium which includes an automatic layers using the new instancing system.

i tried programing my own multilayered sss shader in gelato but it failed because i did not know how gelato handled sss well enough and i did not know the api well enough. (and i dont know much if any calculus yet, maybe by the end of the year)

btw, there is a hole in the mesh that i can not fix due to multier(the ear canal). could that possibly be the cause of Panic: tryed to exit from medium when not inside it. its odd because its only the ear that has turned yellow, the thin part of the neck and nose turned red.
could this also be cause of the yellowness at the ear. possibly the light in back of the model was way to powerfull.

The method used in this model to create layers was to use the dispaint script in blender. to make a layer i first set all the vertex colors to white, which controls the amount of change so in theory i could use grey in some areas to make the layers thiner. then i duplicate the object, and set the dispaint value to negative one so that the inner layers have less detail rather than the outer layers loosing detail. click action and then scale the model till the difference caused by -1 and action is one cm respectivly to the size that the model should be (scale the model larger in edit mode and scale it smaller in object mode). this model is supposed to be 20 cm across, based on measurments i took from actual heads. then, delete the 1 cm inner layer, and repeat the process except using values corrosponding to the cm size. i used -.003 for the first layer and -.005 for the second layer.
a shiny monkey is a happy monkey

User avatar
Zom-B
1st Place 100
Posts: 4655
Joined: Tue Jul 04, 2006 4:18 pm
Location: ´'`\_(ò_Ó)_/´'`
Contact:

Post by Zom-B » Sun Jan 21, 2007 9:34 am

oodmb wrote:well, yes that would obviously be a better solution.
now that i think about it, you could in theory set up a medium which includes an automatic layers using the new instancing system
nice idea, but this would not work perfect, because resizing a high but thin object lets say x = 10 and Y = 200 units by 10% would result in x = 9.9 and y=180
so the distance to the epidermis mesh would be not even... I hope you understand what I'm talking about.... my english lacks in geometric terminology :roll:

You need to Extrude your model (at least in C4D its called so)!
This makes instancing impossible, but perhapes something you can code/script too

Good luck!

** EDIT **
I'm very very very new to blender so I read your discription about the whole dispaint stuff and realized that I maybe don't understand it the right way... so perhapes you are doing fine without the issues I tried to explain by "normal" resizing!
polygonmanufaktur.de

User avatar
oodmb
Posts: 271
Joined: Thu Oct 26, 2006 5:39 am
Location: USA
Contact:

extrude

Post by oodmb » Sun Jan 21, 2007 10:04 am

well, if ono was to program the material layers using instancing, i am sure he would modify it specificaly for the purpose and deffinitly not 200 units.

blender has an extrude, the only problem with extrude is that it doesnt move each vertex in respect to its normal, rather it scales the whole extruded model. also, extruding doesnt create whole new objects. the goal is to create a layer that is not attached to the first layer, and where each vertex is the same distance from its partner vertex in the first layer in respect to the first layers vertex's normal. just scaling an object down will cause cavities to have the scalled down layer on the outside. plus, by simply scaling the model down, you cant actualy edit each layer's size proportionaly with as much accuracy. here is an example:

the blue is what should be the outside of the "model"
the black is the "mesh"
the red is the normal facing the inside
and the green is the layer after the action

the original "mesh"
Image

the layer after a simple scale down. notice how parts of the layer end up where the outside should be:
Image

the layer after a dispaint/deflate:
Image
a shiny monkey is a happy monkey

User avatar
oodmb
Posts: 271
Joined: Thu Oct 26, 2006 5:39 am
Location: USA
Contact:

Post by oodmb » Sun Jan 21, 2007 2:42 pm

higher mutation scene (18 hours 3 computers 5 cores. about 2919427000 mutations total, 18000 mutations per pixel)



Image
a shiny monkey is a happy monkey

User avatar
OnoSendai
Developer
Posts: 6180
Joined: Sat May 20, 2006 6:16 pm
Location: Newcastle upon Tyne, UK
Contact:

Post by OnoSendai » Sun Jan 21, 2007 3:24 pm

oodmb:
I'm gonna have a crack at doing a full implementation of the absorption and scattering spectra in Jenson's paper 'A Spectral BSSRDF for Shading Human Skin'

This should give some more accurate results.
I'll code it in as a new medium type.

In the mean time, you could work on the geometry.
To match the paper, you should have two media, the epidermis and dermis.
You mesh should have two layers, the outmost layer, with internal_medium = epidermis, and the inner layer, with internal_medium = dermis.
There should be a 0.25mm distance between the layers.

The head should have a correct height of ~= 20cm, or 0.2m (Indigo units are metres of course)

You either need to use the glossy_transmitter material, or use a bump map, for the outermost layer/material, becuase otherwise the skin surface looks way too smooth. Probably a combination of the two would be optimal.

nik

User avatar
oodmb
Posts: 271
Joined: Thu Oct 26, 2006 5:39 am
Location: USA
Contact:

sizes

Post by oodmb » Sun Jan 21, 2007 3:49 pm

this model is based on that exact paper. the head is already about 20 cm, both hight and width, i realy dont think a variability matters that much as long as the width of the layers is correct. however, from the paper i understand that the eppidermis was supposed to be .03 mm thick in respect to the headsize of 20 cm and the upper dermis was supposed to be .05 mm thick respectivly. having indigo assume layers inbetween the top layer and the inner layer would be much more efficient in terms of modeling, however from what i understand in jenson's paper, the bloody dermis is infinitly thick. why would the inner most layer be .25 mm in rather than .07 mm inwards? is this layer not actualy used as an sss layer and rather as a layer to use as a reference for the distance below the eppidermis that the other layers should be? if this is the case, will altering the geometry of the inner layer so that bent areas are thinner than non bent areas cause the same change as my method would?

if the inner layer is used as a reference mesh for the distance of the programmed layers, would it not make more sense to add a two points to the scene called scales and have it coded so that the scale of the layers on the skin would be made respectivly to the distance appart between thoes points. say, one could model a mesh, decide what distance of it is 20 cm, then add a two point mesh, and whatever distance appart the two points were, would be 20 cm. Maybe this is something more that should go into the exporter, i'll run that idea past wedge.

as for glossy_transmitter materials, i have about 30 renders using them on different layers with different exponents and different lighting. they all reflect the light way to much and destroy the sss effects. i would do a bump map, but my model is way to high poly to unwrap anymore, and i suck at that. plus i am too woried that one layer might intersect another layer. also, a bump map to diffuse light in the same way of skin would have to be several thousand pixels. ok, maybe i'm just lazy.
a shiny monkey is a happy monkey

User avatar
OnoSendai
Developer
Posts: 6180
Joined: Sat May 20, 2006 6:16 pm
Location: Newcastle upon Tyne, UK
Contact:

Post by OnoSendai » Sun Jan 21, 2007 4:16 pm

Oodmb:
I think you're reading an old paper; in Jensen's newer paper, he only has two layers, the dermis and epidermis.
The new paper is from the Eurographics 2006.

There does seem to be a problem with the glossy_transmitter material, I think it's some kind of energy loss problem. It's not exactly well tested code so I'll have to have another look at it at some point.

Post Reply
35 posts

Who is online

Users browsing this forum: No registered users and 1 guest