Jeremy Stribling
cs184-cf, Fall 2000
Final Project
Apple Animation - Second deliverable
12/4/00
The goals of this project are:
-
To create a realistic model of an apple core using Renderman Interface Bytestream (RIB) files generated by hand with the aid of C++ programs written specifically for the purpose.
-
To design an implement a crude animation tool allowing for the creation of
limited animations of supplied RIB files. The animation should consist of
translations created by linearly interpolating positions of the RIB file world
in keyframes, and rotations created by linearly interpolating the rotations
of RIB file world about a set axis.
-
Use this tool to create an animation of the apple core.
At the time of this second deliverable, I have completed the model of the apple, and have rendered it in several positions using the BMRT version of Renderman. These renderings are supplied as TIFF files below:
apple1.tiff
apple2.tiff
apple3.tiff
apple4.tiff
Some notes about this model:
-
The surfaces were obtained by using surface of rotation functions written in C++, which, given an array of points in 2 dimensions, creates a bicubic mesh of the points rotated about an axis in 3 dimensions. To model the randomness of bite marks at the intersection of the core and skin, the surface of rotation was randomly perturbed in the vertical direction at those edges, giving it a jagged appearance.
-
To model the bitemarks on the apple core, the surface of rotation was slightly randomly perturbed in three directions, creating peaks and valleys in the core.
-
The skin of the apple is a basically a single color speckled with noise of a darker color. This noise is generated as a function of the surface parameters, applied to various sinusoid and BMRT random number functions. I also had to use several splining tricks to make the noise uniform over the curved surfaces, since the surface parameters are not uniformly distributed.
-
The core of the apple actually uses the same shader as the skin to generate faint noise along its surface, but it takes it a little further. In order to model the oxidation of the apple as it's being eaten, the core is slightly browner at the peaks. This is because the peaks of the apple core tend to have been exposed to the air longer than the valleys. This was accomplished by testing to see if the radius of the core was within a certain range at a point, and then computing the color at that point to be somewhere in between the color of the core and the darker color (supplied as a parameter to the shader), as a function of its radius.
-
The displacement of the skin and the core was created by the BMRT standard displacement shader, "dented". Different parameters were passed to the shader for the skin and the core, to model a different size and frequency of the dents for the different surfaces.
Here are the C++ files used to generate the apple core surface:
apple.cpp
rendcomp.cpp
rendcomp.h
Here is the generated RIB file:
apple.rib
Here are the surface shaders used:
appleskin.sl
applecore.sl
I am currently designing a user interface for the animation tool, and researching how to implement it. I am planning to use the crystal ball interface from the homework assignments, to display a cube that the user can rotate and translate to specify an animation on whatever RIB file they wish to input. I plan to implement this by writing C++ and MFC programs that create RIB files containing frames of simple rotations and translations applied to the RIB file provided by the user.
Jeremy Stribling, cs184-cf