Monday, May 25, 2009

NATURE MORT

The objective is to create the illusion of decay and rotting written in RenderMan Shading Language, to Maya scene.

These are my picture references






First I modeled a base mesh in Maya then unwrap the polygon so that I can export the obj's files
to Mudbox and sculpt it freely since I need to create multiple displacement maps.



Next step is took the obj's file to Mudbox and began sculpting from firm looking strawberry to rotten one.





I created four color maps due the time constrain but if you have extra time you can create more color maps for more subtle transition.





Then I baked 28 different kind of displacement maps, I've got this good tips from Jon Moore.
Here an example:



To create the displacement shader, the displacement shader was compile with the texture channel shader technique from fundza.com




displacement
Strawberry_Displace(float Km = .0001, /* displacement magnitute */
UseShadingNormals = 1, /* [0 or 1] */
time = 1; /* {0 1] */
string map = "";
output varying float hump = 0)

{
vector diff = normalize(N) - normalize(Ng);
normal n = normalize(N);
float tex;

if(map != "")
{

if(time <= 0.20) hump = mix(1, texture(map[0]), smoothstep(0,0.20,time)); else if(time > 0.20 && time <= 0.4) hump = mix(texture(map[0]), texture(map[1]), smoothstep(0.2,0.4,time)); else if(time > 0.4 && time <= 0.6) hump = mix(texture(map[1]), texture(map[2]), smoothstep(0.4,0.6,time)); else if(time > 0.6 && time <= 0.8) hump = mix(texture(map[2]), 1 - texture(map[3]), smoothstep(0.6,0.8,time)); else if(time > 0.8)
hump = mix(texture(map[3]),
1 - texture(map[4]), smoothstep(0.8,1.0,time));
else if(time > 1.0)
hump = mix(texture(map[4]),
1 - texture(map[5]), smoothstep(1.0,1.2,time));
else if(time > 1.2)
hump = mix(texture(map[5]),
1 - texture(map[6]), smoothstep(1.2,1.4,time));
else if(time > 1.4)
hump = mix(texture(map[6]),
1 - texture(map[7]), smoothstep(1.4,1.6,time));
else if(time > 1.6)
hump = mix(texture(map[7]),
1 - texture(map[8]), smoothstep(1.6,1.8,time));
else if(time > 1.8)
hump = mix(texture(map[8]),
1 - texture(map[9]), smoothstep(1.8,2.0,time));
else if(time > 2.0)
hump = mix(texture(map[9]),
1 - texture(map[10]), smoothstep(2.0,2.2,time));
else if(time > 2.2)
hump = mix(texture(map[10]),
1 - texture(map[11]), smoothstep(2.2,2.4,time));
else if(time > 2.4)
hump = mix(texture(map[11]),
1 - texture(map[12]), smoothstep(2.4,2.6,time));
else if(time > 2.6)
hump = mix(texture(map[12]),
1 - texture(map[13]), smoothstep(2.6,2.8,time));
else if(time > 2.8)
hump = mix(texture(map[13]),
1 - texture(map[14]), smoothstep(2.8,3.0,time));
else if(time > 3.0)
hump = mix(texture(map[14]),
1 - texture(map[15]), smoothstep(3.2,3.4,time));
else if(time > 3.2)
hump = mix(texture(map[15]),
1 - texture(map[16]), smoothstep(3.4,3.6,time));
else if(time > 3.4)
hump = mix(texture(map[16]),
1 - texture(map[17]), smoothstep(3.6,3.8,time));
else if(time > 3.6)
hump = mix(texture(map[17]),
1 - texture(map[18]), smoothstep(3.8,4.0,time));
else if(time > 3.8)
hump = mix(texture(map[18]),
1 - texture(map[19]), smoothstep(4.0,4.2,time));
else if(time > 4.0)
hump = mix(texture(map[19]),
1 - texture(map[20]), smoothstep(4.2,4.4,time));
else if(time > 4.2)
hump = mix(texture(map[20]),
1 - texture(map[21]), smoothstep(4.4,4.6,time));
else if(time > 4.4)
hump = mix(texture(map[21]),
1 - texture(map[22]), smoothstep(4.6,4.8,time));
else if(time > 4.6)
hump = mix(texture(map[22]),
1 - texture(map[23]), smoothstep(4.8,5.0,time));
else if(time > 4.8)
hump = mix(texture(map[23]),
1 - texture(map[24]), smoothstep(5.0,5.2,time));
else if(time > 5.0)
hump = mix(texture(map[24]),
1 - texture(map[25]), smoothstep(5.2,5.4,time));
else if(time > 5.2)
hump = mix(texture(map[25]),
1 - texture(map[26]), smoothstep(5.4,5.6,time));
else if(time > 5.4)
hump = mix(texture(map[26]),
1 - texture(map[27]), smoothstep(5.6,5.8,time));
else if(time > 5.6)
hump = mix(texture(map[27]),
1 - texture(map[28]), smoothstep(5.8,6.0,time));
else if(time > 5.8)
hump = mix(texture(map[28]),
1 - texture(map[29]), smoothstep(6.0,6.2,time));
else if(time > 6.0)
hump = mix(texture(map[29]),
1 - texture(map[30]), smoothstep(6.2,6.4,time));

}

P = P - n * (hump - 0.5) * Km;
if(UseShadingNormals)
N = normalize(calculatenormal(P)) + diff;
else
N = calculatenormal(P);
}





surface
Strawberry_Surface(float Ks = 1,
time = 0;
color hilitecolor = color (0,1,0),
specularcolor = (0,0,0);
string map = "";
color blotch_color = 0;)
{
color surfcolor = 1;
normal n = normalize(N);
normal nf = faceforward(n, I);
float tex;

if(map != "")
{
if(time <= 0.20)
tex = mix(1, texture(map[0]), smoothstep(0,0.20,time));
else if(time > 0.20 && time <= 0.4)
tex = mix(texture(map[0]),
texture(map[1]), smoothstep(0.2,0.4,time));
else if(time > 0.4 && time <= 0.6)
tex = mix(texture(map[1]),
texture(map[2]), smoothstep(0.4,0.6,time));
else if(time > 0.6 && time <= 0.8)
tex = mix(texture(map[2]),
1 - texture(map[3]), smoothstep(0.6,0.8,time));
else if(time > 0.8)
tex = mix(texture(map[3]),
1 - texture(map[4]), smoothstep(0.8,1.0,time));
// composite the texture map color over the background
surfcolor = mix(blotch_color, Cs, tex);
}
Oi = Os;
Ci = Oi * Cs * surfcolor * specularcolor * Ka * Kd * Ks * diffuse(nf);
}



http://www.scribd.com/full/15893735?access_key=key-uewll0wn3yugj8cja7r