Revision as of 01:47, 25 May 2005 editT-tus (talk | contribs)153 edits adding reyes pipeline image← Previous edit | Revision as of 13:28, 4 June 2005 edit undoDmaas (talk | contribs)51 edits elaborationNext edit → | ||
Line 2: | Line 2: | ||
'''Reyes rendering''' is a method used in ] to ] an image. It was developed in the mid-1980s by ]'s Computer Graphics Research Group, which is now ]. It was first used to render images for a ] in 1985. Pixar's ] is an implementation of the Reyes algorithm. | '''Reyes rendering''' is a method used in ] to ] an image. It was developed in the mid-1980s by ]'s Computer Graphics Research Group, which is now ]. It was first used to render images for a ] in 1985. Pixar's ] is an implementation of the Reyes algorithm. | ||
The algorithm was designed to overcome the speed and memory limitations of photorealistic algorithms, such as ], in use at the time |
''Reyes'' stands for ''Renders Everything You Ever Saw''. (the name is also a pun on ], California, near which Lucasfilm was located). The algorithm was designed to overcome the speed and memory limitations of photorealistic algorithms, such as ], in use at the time. | ||
Reyes efficiently achieves several effects that were deemed necessary for film-quality rendering: smooth curved surfaces, motion blur, and depth of field blur. | |||
The Reyes algorithm introduced the concept of a '']'', which is a polygon that is at least as small as a pixel in the output image. These micropolygons are directly scan converted to produce the output image. | |||
Reyes renders curved surfaces, such as those represented by ]es, by dividing them into '']s'', small quadrilaterals each about one pixel in size. Although many micropolygons are necessary to approximate curved surfaces accurately, they can be processed with simple, parallelizable operations. A Reyes renderer tessellates high-level primitives into micropolygons on demand, dividing each primitive only as finely as necessary to appear smooth in the final image. | |||
This method provides a fast, natural way of rendering curved surfaces, such as those represented by ]es. With methods like ], the patches would have to be ] into polygons. Tessellation causes the surface to appear ]. The only way to counter this effect is to introduce more polygons. By the time the surface appeared completely smooth, the number of polygons would drastically slow down the renderer and require a great deal of memory. On the other hand, ] parametric surfaces is slow because calculating the intersection of a ray with a patch is difficult. | |||
Next, a shader system assigns a color and opacity to each micropolygon. Most Reyes renderers allow users to supply arbitrary lighting and texturing functions written in a ]. Micropolygons are processed in large grids which allow computations to be vectorized. | |||
] and ] are effects that increase the visual realism of an image. The Reyes renderer was designed to make these effects easy to achieve. For motion blur, relevant micropolygons simply have a start and end position during a single ], and micropolygon is rendering using a ] called '']''. Depth of field is also handled using stochastic sampling. | |||
Shaded micropolygons are sampled in screen space to produce the output image. Reyes employs an innovative hidden-surface algorithm or ''hider'' which performs the necessary integrations for motion blur and depth of field without requiring more geometry or shading samples than an unblurred render would need. The hider accumulates micropolygon colors at each pixel across time and lens position using a ] called '']''. | |||
The basic Reyes ] has the following steps: | The basic Reyes ] has the following steps: | ||
# ''Bound.'' Calculate the ] of each |
# ''Bound.'' Calculate the ] of each geometric primitive. | ||
# ''Split.'' Split large |
# ''Split.'' Split large primitives into smaller, diceable primitives. | ||
# ''Dice.'' Convert the |
# ''Dice.'' Convert the primitive into a grid of micropolygons, each approximately the size of a pixel. | ||
# ''Shade.'' Calculate lighting and shading at each vertex of the micropolygon grid. | # ''Shade.'' Calculate lighting and shading at each vertex of the micropolygon grid. | ||
# |
# ''Bust'' the grid into individual micropolygons, each of which is bounded and checked for visibility. | ||
# '' |
# ''Hide.'' Sample the micropolygons, producing the final 2D image. | ||
A common memory optimization introduces a step called ''bucketing'' prior to the dicing step. The output image is divided into a coarse grid |
In this design, the renderer must store the entire frame buffer in memory since the final image cannot be output until all primitives have been processed. A common memory optimization introduces a step called ''bucketing'' prior to the dicing step. The output image is divided into a coarse grid of "buckets," each typically 16 by 16 pixels in size. The objects are then split roughly along the bucket boundaries and placed into buckets based on their location. Each bucket is diced and drawn individually, and the data from the previous bucket is discarded before the next bucket is processed. In this way only a frame buffer for the current bucket must be maintained in memory. | ||
== References == | == References == |
Revision as of 13:28, 4 June 2005
Reyes rendering is a method used in 3D computer graphics to render an image. It was developed in the mid-1980s by Lucasfilm's Computer Graphics Research Group, which is now Pixar. It was first used to render images for a film in 1985. Pixar's PhotoRealistic RenderMan is an implementation of the Reyes algorithm.
Reyes stands for Renders Everything You Ever Saw. (the name is also a pun on Point Reyes, California, near which Lucasfilm was located). The algorithm was designed to overcome the speed and memory limitations of photorealistic algorithms, such as ray tracing, in use at the time.
Reyes efficiently achieves several effects that were deemed necessary for film-quality rendering: smooth curved surfaces, motion blur, and depth of field blur.
Reyes renders curved surfaces, such as those represented by parametric patches, by dividing them into micropolygons, small quadrilaterals each about one pixel in size. Although many micropolygons are necessary to approximate curved surfaces accurately, they can be processed with simple, parallelizable operations. A Reyes renderer tessellates high-level primitives into micropolygons on demand, dividing each primitive only as finely as necessary to appear smooth in the final image.
Next, a shader system assigns a color and opacity to each micropolygon. Most Reyes renderers allow users to supply arbitrary lighting and texturing functions written in a shading language. Micropolygons are processed in large grids which allow computations to be vectorized.
Shaded micropolygons are sampled in screen space to produce the output image. Reyes employs an innovative hidden-surface algorithm or hider which performs the necessary integrations for motion blur and depth of field without requiring more geometry or shading samples than an unblurred render would need. The hider accumulates micropolygon colors at each pixel across time and lens position using a Monte Carlo method called stochastic sampling.
The basic Reyes pipeline has the following steps:
- Bound. Calculate the bounding volume of each geometric primitive.
- Split. Split large primitives into smaller, diceable primitives.
- Dice. Convert the primitive into a grid of micropolygons, each approximately the size of a pixel.
- Shade. Calculate lighting and shading at each vertex of the micropolygon grid.
- Bust the grid into individual micropolygons, each of which is bounded and checked for visibility.
- Hide. Sample the micropolygons, producing the final 2D image.
In this design, the renderer must store the entire frame buffer in memory since the final image cannot be output until all primitives have been processed. A common memory optimization introduces a step called bucketing prior to the dicing step. The output image is divided into a coarse grid of "buckets," each typically 16 by 16 pixels in size. The objects are then split roughly along the bucket boundaries and placed into buckets based on their location. Each bucket is diced and drawn individually, and the data from the previous bucket is discarded before the next bucket is processed. In this way only a frame buffer for the current bucket must be maintained in memory.
References
- Robert L. Cook., Loren Carpenter, and Edwin Catmull. "The Reyes image rendering architecture." Computer Graphics (SIGGRAPH '87 Proceedings), pp. 95–102.
- Anthony A. Apodaca and Larry Gritz. Advanced RenderMan: Creating CGI for Motion Pictures. Morgan Kaufmann Publishers. ISBN 1-55860-618-1