CS 395T - Advanced Image Synthesis
Proposal Due: November 1, 2011
Demos Due: December 1, 2011, in class
Write-up Due: December 9, 11:59 pm, 2011
Your final project is to produce a realistic image of a real object or
scene. The scene or object should be challenging enough to require you
to design and implement an advanced rendering algorithm. The final
project is your chance to investigate an area that interests you in
more depth, and to showcase your creativity. To get an idea of what is
expectated, check out the
produced by similar classes at Stanford.
Think about the following when choosing a project:
- What are your goals? Try and phrase this as specific questions
that you would like to know the answers to, e.g. ``How do I model
reflection from surfaces with fine geometric structure, such as fur?''
- What unique imagery would convincingly demonstrate that you have
accomplished your goals? Try and keep this in mind throughout your
project, since in computer graphics our work is often judged by the
images we make.
- What has already been done in this area? You probably won't have
time to completely investigate this, but you should definitely spend
some time reading research papers. When you read a paper, look for
what has not been done as well as what is already understood; think
about new things that you could try.
- Depending on the scope of your goals, you may want to work in a
group. We encourage two person groups; larger groups will only be
allowed to very, very challenging projects. Does your project split
naturally into several pieces? Look for projects where each person's
work is separable, and yet everyone contributes toward a shared goal
that could not be accomplished individually.
Here are some examples of challenging projects:
- Fancy primitives. Implement a class of more complicated
primitives from Hanrahan's chapter in Glassner's book. Choose wisely.
Quadrics are too simple; deformed surfaces are much more challenging.
Recommended are bicubic patches (display directly or by meshing), CSG
models, or fractals. Fractals are relatively easy to implement and fun
to use. For extra fun, map textures onto your patches or fractals. For
lots of fun, try fur modeled as geometry (as opposed to as a volume).
- Exotic wavelength-dependent effects such as dispersion and
thin film effects.
- Adaptive stochastic supersampling. Use any sample
distribution, subdivision criteria, and reconstruction method you
like. Allow interactive control over key parameters of your sampling
scheme. In a separate window alongside your rendered image, display a
visualization of how many rays were cast per pixel.
- Subsurface scattering. Look at Hanrahan and Krueger's
Siggraph '93 paper for examples of applying subsurface scattering to
plants and faces. For the more ambitious, model the microgeometry of
the surface. For example, consider an explicit geometric model of the
warp and the weft of cloth, the pits in plaster, the scratches in
metal, and the structure of velvet or satin. Ray trace the
microgeometry in order to compute the brdf. Look at Westin et al. in
SIGGRAPH '92; they describe methods for modeling carpet and velvet.
- Shading language. Develop a language for programmable
shading formulas akin to (but simpler than) RenderMan's language
(Hanrahan and Lawson, Siggraph '90). At a minimum, your language
should allow the specification of a shade tree that includes mix nodes
driven by textures as in Cook's Siggraph '84 paper on shade
trees. Don't spend a lot of time on the interpreter - a simple syntax
will do. For extra fun, implement (in conjunction with texture
mapping) a nontrivial 2D or 3D texture synthesis method. Examples are
spot-noise or reaction-diffusion equations (see the two papers on this
subject in Siggraph '91).
- Volume rendering. Start by implementing spatially
inhomogeneous atmospheric attenuation. Divide each ray into
intervals. For each interval, interpolate between the ray's color and
some constant fog color based on a procedurally computed opacity for
that location in space. Experiment with opacity functions. Once you
get this working, try defining a solid texture (probably procedurally)
that gives color and opacity for each interval. See Perlin and
Hoffert's Siggraph '89 paper on solid texture synthesis and Kajiya and
Kay's teddy bear paper for ideas. If you want to make your volume
renderer fast, use hierarchical spatial subdivision.
Your main task should be to implement cool rendering algorithms,
rather than spending all of your time modeling a complex scene.
However, you do need to provide pbrt with a scene to render! Check
resources page for info about the RIB file format. You can
convert this file form to a pbrt scene file using the utility
rib2pbrt. Unfortunately the Blue Moon tools listed there are no longer
As a first step you should write a one page project proposal.
Make it a web page and email me the URL.
See due dates at top of this page.
The proposal should contain a picture of a real object or scene
that you intend to reproduce. I suggest that you first pick
something that you would like to simulate, and then investigate what
techniques need to be used. A real object that you can carry around
with you is best, but a good photograph or painting is almost as good.
The proposal should state the goal of your project, motivate why it is
interesting, identify the key technical challenges you will face, and
outline briefly your approach. If you are implementing an algorithm
described in a particular paper, provide the reference to the
paper. If you plan on collaborating with others, briefly describe how
each person's piece relates to the others.
I will provide feedback as to whether I think your idea is reasonable,
and also try to offer some technical guidance, e.g. papers you might
be interested in reading.
Turning it in
When you are finished with your project you should email me the URL of
a web page containg: the source for your system, any test scenes and
images that you have created, your original project proposal, and an
updated version that reads as a two to three page project summary,
more or less of the same format as the project proposal, but with a
brief results section and any conclusions or comments you have based
on your experience.
The final project will count 1/2 (or more, if based on my judgement,
the project is truly outstanding) towards your final grade in the
course. I will consider strongly the novelty of the idea (if it's
never been done before, you get lots of credit), your technical skill
in implementing the idea, and the quality of the pictures you
produce. Mega-lines of code does not make a project good.