[comp.graphics] Motion Blur in Ray Tracing

work@forum.SUBLINK.ORG (Forum SuperUser) (02/23/91)

I'm currently investigating ways to create motion blurred-ray traced images.
I have read most of the "Distributed" approaches to this problem and i found
the basic ideas explained very well (see An Intro To RT by Glassner & C.).

There is still, though, a thing that i miss: we have to sample objects
in different times of the same window and integrate the results, right?

BIG PROBLEM: how do you move objects while time-sampling? Should we store
several complete (huge) databases of objs at different times? Should we
transform objs every time we want to sample in time (very expensive!)?

From what i understand, storing several obj databases is too inaccurate
and could lead to time-aliasing (we just can't have 300 different slots into
the time window, since it would need 300 different obj databases).
But the other solution is almost suicide: perhaps suitable if we only use
linear transforms on obj for every single image. The famous "1984" from Pixar
showed a non-linear transform in one of the balls. If what we are rendering
is 4 balls, we can still move things around linearly or not, otherwise i think
the overhead involved kills the practical feasibility of this approach.

What i'm missing?

Andrea Gozzi.
-- 
///////////////////////////////////////////////////////////////////////////
/  Andrea Gozzi - Via Campagnola 21/A - 42015 Correggio (RE) ITALY        /
/  UUCP: ....!rutgers!sublink!forum!work INTERNET: work@forum.sublink.org /
/  Voice ++39 522 692830 - Fax ++39 522 692916 Ints:3D Graphics - Telecom /
///////////////////////////////////////////////////////////////////////////

jk87377@korppi.tut.fi (Kouhia Juhana Krister) (02/25/91)

In article <471@forum.SUBLINK.ORG> work@forum.SUBLINK.ORG (Forum SuperUser) writes:
>
>BIG PROBLEM: how do you move objects while time-sampling? Should we store
>several complete (huge) databases of objs at different times? Should we
>transform objs every time we want to sample in time (very expensive!)?
>
>What i'm missing?

Probably nothing more than others do...

I have heard that others store all moving objects to the different
place than static objects... guess, they calculate them at the each
time for the each ray. Or they calculate several keyframes and then
interpolate.

I make a motion blur in my system this way...
It's easier to show and draw this; here's a data structure for a
circle moving ball:

(root) - (transform matrix) - (object: table)
       |
       - (procedural matrix) - (object: ball)

A procedural transformation is a program code which is executed once
per ray if there's no speeding up methods used.
For example:
   t = jitter(t);
   Rotz(t*maxangle);

This calculates a transformation matrix on the fly.
You don't have to calculate all datas - just that matrix.

I have designed my program so that it's possible to move objects in
data structures while motion blur.
I mean when you drop a class from your hand it's not anymore in your
hand structure.

Ummm... how you others do motion blur?


Juhana Kouhia
jk87377@tut.fi

chrisg@cbmvax.commodore.com (Chris Green) (02/26/91)

In article <471@forum.SUBLINK.ORG> work@forum.SUBLINK.ORG (Forum SuperUser) writes:
>There is still, though, a thing that i miss: we have to sample objects
>in different times of the same window and integrate the results, right?
>
>BIG PROBLEM: how do you move objects while time-sampling? Should we store
>several complete (huge) databases of objs at different times? Should we
>transform objs every time we want to sample in time (very expensive!)?
>

	What you should do is this: At each frame, take each object in your world,
and make its bounding volume large enough to contain the entire volume of space
that the object passes through in the time that the "shutter" is open. This is
relatively simple for linear motion, and spline based motion with the
convex hull property. It may be much harder or not solvable for things like
deformations, etc.
	Then, for each ray, stochatically pick a time value for it. Then, intersect
it with the world. When the ray intersects an object's bounding box, move the object
to its proper position for that time, and intersect it normally.
	What you save by this is that for objects moving at reasonable speeds, their
bounding boxes shouldn't be that much larger than they would be if the objects
were not moving.
	This should be integrated into whatever ray optimization scheme you are using.
	Also note that you should account for the motion of the viewer when generating
your rays!

brian@nds.com (Brian Dockter) (02/27/91)

In article <471@forum.SUBLINK.ORG> work@forum.SUBLINK.ORG (Forum SuperUser)
writes:
>I'm currently investigating ways to create motion blurred-ray traced images.

An article which might be of some help is 'Spacetime Ray Tracing for Animation'
by Andrew S. Glassner from the March 1988 issue of 'IEEE Computer Graphics and
Applications'.
-- 
Brian Dockter                    | Northwest Digital Systems
UUCP: uunet!nds!brian            | Voice: 206-524-0014
Internet: brian@nds.com          | FAX: 206-524-0018