n a t u r e    m o r t


This page shows the results of applying a custom surface shader, written in the RenderMan Shading Language, to a Maya/Houdini scene in order to create the illusion of decay and rotting.




Link to high res video


The reference animation vs the completed project. Note: the plate of peaches were for different possible
shaders. I decided on the bottom right peach for this assignment.

			
			





This was our final project of this class. I choose a peach, in the hopes that it was a bit different than
what others had done. I dont think anyone prior had done one before. I was also curious myself as to how they rotted.
Here are two reference images of healthy peaches.

			
			






Here are two that are well on their way through the decay. For my time lapse reference
images I did 2 peaches that were cut opena dn two that were whole. This will allow me more
to work with if I decide to do either the outside whole peach or do one that was cut open.
I choose to do the bottom right peach, the one with the moldy hole growing from a spot on the left.

			
			






Nurbs model on the left. Through a simple slim network I tried out the skin shader over the peach and with
a color ramp I was able to get a fairly decent texture. I probably wont use this, but it did give me some
ideas on using parts of the skin shader to do things like peach fuzz using the sheen attribute of the shader
and combining that with some noise. We'll see how that comes out later.

			
			






The color ramp wasnt working well, so I decided to use a texture map as the base color scheme. I then used some mix
nodes in slim as some other appearances to create the shader. I used Worley to bring in small dimple like variations
to the surface. After mixing those I used Brownian in a mix node to be used later in turning parts of the peach from
light to dark. On top of all this I used the noiseout function we built in class to further add tiny speckles.

			
			






I decided to build this shader mostly using SLIM because I am not very good at simply writing up my own from scratch. I
got as far as I could with that and Prof. Keeson helped write a color and displacement function that we could throw on
top of what I had done. This feature has several abilities, as you can see in the image. You can create a spot (which
can be altered with noise or whatever to alter its shape, you can move its position, change the radius, set a blur
to soften the edges, and give it a color. Further more, this same spot has a displacement built in that you can use to set
to expand out or inside of the original geometry to get whatever desired result you need.

All of this together gives some really interesting features.

The use of the second circle displacement node was added due to a rather curious accident. Somehow, when I lerped the blur
attribute, my entire model shrank slightly over the course of the animation. While this is exactly what I needed to do down
the line, it wasnt what I wanted then. So I ended up copying the node and using that lerped blur to help give my rotting peach
a little bit of shrinkage without the use of keyframing the model itself in Maya. The result is not bad. However I did want
to shrink the peach some more, and have it shrivel up a little bit like a raisin (as the rotting peach did after letting it sit
for another 2 weeks, but wasnt captured in the first reference animation.



At the last minute I was able to learn how to do an occlusion pass so I threw that overtop and the result was much better. HOWEVER...
The occlusion layer did not scale down with the shader, so it was useless in compositing over it... Ill have tof ind out if there is
a way to fix that... it looked so good too...



Overall the project went well, but there was a lot more I wanted to do with it but didnt have the time or the experience to get it
done quick enough. At least this is a good start in the right direction.

// CIRCLE VERSION 4___________________________________
color circleDisp(float locx, locy, radius, blur,Km;
			color background, foreground)
{
color result = 0;
float d = distance(point(locx,locy,0), point(s,t,0));
float mask = 1 - smoothstep(radius - blur, radius + blur, d);

normal n = normalize(N);
P = P - n * mask * Km;
N = calculatenormal(P);

result = mix(background, foreground, mask);
return result;
}