15-462 Programming Assignment 4: Procedural Modeling
Due Thursday, Dec 6, 2007, 23:59:59
Updates
- Nov 26, 2007: Add Links section. Add more explanation on how to create a realistic cloud texture.
Description
For this project you will explore various techniques for procedural modeling
and animation. The project will involve generating procedural textures,
terrain, organic structures based on L-systems, and procedural animation
of a flock of birds. Below are some screenshots of examples to give you
an idea of the kinds of scenes you will be creating:
Simple planar fractal L-system tree.
More complex L-system tree with 3-D structure.
Required Features [100 points]
You must implement the following features:
-
Fractal Terrain [25 points] - Create a terrain that is 100x100 units on the x and z axes. Note that this 100x100 units is not a strict requirement. Render whatever makes sense to you. The goal is to generate a height map based on perlin
noise (you may utilize the example functions provided in the starter code
file "noise.h". Note that the example functions are the
implementation of smoothed noise, not Perlin noise. You need to compute
Perlin noise yourselves based on that.
Perlin noise is actually an aggregate of the smoothed noise function in some discrete frequencies. There are many ways to do aggregation. For example, you can make Perlin noise the weighted sum of noise function with respect to the frequency (i.e. Sum[1/f*noise], where f=1,2,4,...2^n.). In the 1-D case, Perlin(p) = 1/1*noise(1p) + 1/2*noise(2p) + 1/4*noise(4p) + 1/8*noise(8p) + ... .
A few links on Perlin noise function is added to the Links section.
) After generating the geometry of the
terrain
procedurally, you should color or texture your terrain using a procedural
technique. Also make sure you appropriate normals and lighting. Be sure to
explain what you did in your "readme.txt" file.
-
Procedural Cloud Textures [25 points] - Texture the skybox with
procedurally-generated cloud textures. Think carefully about how you can
avoid artifacts at the seams of the adjacent walls of the skybox. Your sky
does not need to have lighting effects. Explain what you did in your
"readme.txt" file. Your skybox does not need to be a cube like in the starter code. You can also look up how to create a realistic cloud texture in the link provided in the Links section.
-
L-System Tree [30 points]
You are provided with an example parser for an L-system and are
asked to fill in the rendering functions. Check out
"lsystem.h"
for additional information on the format and algorithm. The starter code
comes with two sample files: "oaky.lsys" and "simple.lsys"
(The two screenshots earlier on this page use them.)
It is recommended to use a simple stack-based system to recursively
render trees with fractal-like structure. The starter code provides an
almost complete implementation of this. However, feel free to implement
an L-system renderer of your own design if you wish.
Once you implement the renderer, you will create your own cool looking
tree file and submit it along with screenshots. (NOTE: please remember
to "add" and "commit" all of the files you create to your subversion
repository, and document them in your "readme.txt" file.
This score for this portion of the lab will be divided into two parts:
your L-system renderer [20 points], and your custom tree file
[10 points].
-
ReadMe [5 points]
Include a readme.txt file using this
template. Make sure to describe any extra features you implemented.
-
Code Quality [10 points]
Use reasonably efficient and well-written code that can easily be
graded.
-
Representative Pictures or animation [5 points]
Save a number of still output pictures from your program to a directory
labeled images, or output frames of an animation to a movie
directory.
Extra Credit Features [maximum assignment score is 110 points]
Starter Code and Submission
You can find the lab 4 starter code
here. To finish the required features, you should
make changes to functions that have
"FIXME" comments. There are 6 of
them in total (4 in lsystem_render.cc and 2 in main.cxx).
The submission guidelines remain the same as the previous labs. Please name
your directory
asst4_lsys. Make sure
your project can be compiled by just going into the
asst4_lsys
directory and typing
make.
Please include a copy of whatever models, textures, or additional
data files you use when handing in your project as it makes life a
lot easier to verify your features.