Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Reyes rendering
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Architecture == The architecture was designed with a number of goals in mind: *'''Model complexity/diversity''': In order to generate visually complex and rich images, users of a rendering system need to be free to model large numbers (100,000s) of complex geometric structures possibly generated using [[procedural modeling|procedural model]]s such as fractals and [[particle system]]s. *'''Shading complexity''': Much of the visual complexity in a scene is generated by the way in which light rays interact with solid object surfaces. Generally, in computer graphics, this is modelled using textures. Textures can be colored arrays of pixels, describe surface displacements or transparency or surface reflectivity. Reyes allows users to incorporate procedural shaders whereby surface structure and optical interaction is achieved using computer programs implementing procedural algorithms rather than simple look-up tables. A good portion of the algorithm is aimed at minimising the time spent by processors fetching textures from data stores. *'''Minimal ray tracing''': At the time that Reyes was proposed, computer systems were significantly less capable in terms of processing power and storage. This meant that [[Ray tracing (graphics)|ray tracing]] a photo-realistic scene would take tens or hundreds of hours per frame. Algorithms such as Reyes which didn't generally ray trace run much faster with almost photo-realistic results. *'''Speed''': Rendering a two-hour movie at 24 frames per second in one year allows 3 minutes rendering time per frame, on average. *'''Image quality''': Any image containing unwanted, algorithm-related artifacts is considered unacceptable. *'''Flexibility''': The architecture should be flexible enough to incorporate new techniques as they become available, without the need for a complete reimplementation of the algorithm. Reyes efficiently achieves several effects that were deemed necessary for film-quality rendering: Smooth, curved surfaces; surface texturing; [[motion blur]]; and [[depth of field]]. Reyes renders curved surfaces, such as those represented by [[parametric patch]]es, by dividing them into ''[[micropolygon]]s'', small quadrilaterals each less than one pixel in size. Although many micropolygons are necessary to approximate curved surfaces accurately, they can be processed with simple, [[parallel computing|parallelizable]] operations. A Reyes renderer [[Tessellation (computer graphics)|tessellate]]s 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 vertex of a 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 [[vector processing|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]]''. === Pipeline === The basic Reyes [[Graphics pipeline|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 and the high-level descriptions of all geometric primitives must be maintained in memory. For typical scenes, this leads to a significant reduction in memory usage compared to the unmodified Reyes algorithm.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)