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.
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);
}
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