Rendering (computer graphics)
Template:Short description Lua error in package.lua at line 80: module 'Module:Hatnote list' not found. Script error: No such module "Redirect-distinguish". Script error: No such module "about".
Rendering is the process of generating an image from input data such as 3D models. The word "rendering" (in one of its senses) originally meant the task performed by an artist when depicting a real or imaginary thing (the finished artwork is also called a "rendering"). Today, to "render" commonly means to use a computer to generate an image from a precise specification, often created by an artist (or multiple artists) via interactive 3D modeling software. Types of images rendered include both still images and frames for films and video games.[1][2][3][4]
In a computer graphics context, in standard usage, the word "rendering" by itself means rendering 3D scenes,[a] but it is sometimes used with a broader meaning. A modifier such as "2D" or "3D" is used when there is potential ambiguity (e.g. 3D rendering).[6]Template:R/superscript[7]Template:R/superscript[8]Template:R/superscript
A software application or component that performs rendering is called a rendering engine,[9] render engine, rendering system, graphics engine, or simply a renderer.
A distinction is made between real-time rendering, in which images are generated and displayed immediately (ideally fast enough to give the impression of motion or animation), and offline rendering (sometimes called pre-rendering) in which images or film frames, are generated for later viewing. Offline rendering can use a slower and higher-quality renderer. Interactive applications such as games must primarily use real-time rendering, although they may incorporate pre-rendered content.
Rendering produces images of scenes or objects defined using coordinates in 3D space, seen from a particular viewpoint. It uses knowledge and ideas from optics, the study of visual perception, mathematics, and software engineering, and it has applications such as video games, simulators, visual effects for films and television, design visualization, and medical diagnosis. Realistic rendering requires modeling the propagation of light in an environment, e.g. by applying the rendering equation.
Real-time rendering uses high-performance rasterization algorithms that process a list of shapes and determine which pixels are covered by each shape. When more realism is required (e.g. for architectural visualization or visual effects) slower pixel-by-pixel algorithms such as ray tracing are used instead. (Ray tracing can also be used selectively during rasterized rendering to improve the realism of lighting and reflections.) A type of ray tracing called path tracing is currently the most common technique for photorealistic rendering. Path tracing is also popular for generating high-quality non-photorealistic images, such as frames for 3D animated films. Both rasterization and ray tracing can be sped up ("accelerated") by specially designed microprocessors called GPUs.
Rasterization algorithms are also used to produce images containing only 2D shapes such as polygons and text. This type of rendering is sometimes called 2D rendering,[7]Template:R/superscript and its applications include digital illustration, graphic design, 2D animation, desktop publishing and the display of user interfaces.
Historically, rendering was called image synthesis[10]Template:R/superscript but today this term is likely to mean AI image generation.[11] The term "neural rendering" is sometimes used when a neural network is the primary means of generating an image but some degree of control over the output image is provided.[12] Neural networks can also assist rendering without replacing traditional algorithms, e.g. by removing noise from path traced images.
- Notes
Page Template:Reflist/styles.css has no content.
- ^ "Rendering is the process of producing an image from the description of a 3D scene." Pharr et al., Physically Based Rendering, The MIT Press, 2023, Introduction[5]Template:R/superscript
Features
Photorealistic rendering
A large proportion of computer graphics research has worked towards producing images that resemble photographs. Fundamental techniques that make this possible were invented in the 1980s, but at the end of the decade, photorealism for complex scenes was still considered a distant goal.[13]Template:R/superscript Today, photorealism is routinely achievable for offline rendering, but remains difficult for real-time rendering.[14]Template:R/superscript
In order to produce realistic images, rendering must simulate how light travels from light sources, is reflected, refracted, and scattered (often many times) by objects in the scene, passes through a camera lens, and finally reaches the film or sensor of the camera. The physics used in these simulations is primarily geometrical optics, in which particles of light follow (usually straight) lines called rays, but in some situations (such as when rendering thin films, like the surface of soap bubbles) the wave nature of light must be taken into account.[15]Template:R/superscript[16]Template:R/superscript
Effects that may need to be simulated include:
- Shadows, including both shadows with sharp edges and soft shadows with umbra and penumbra
- Reflections in mirrors and smooth surfaces, as well as rough or rippled reflective surfaces
- Refraction – the bending of light when it crosses a boundary between two transparent materials such as air and glass. The amount of bending varies with the wavelength of the light, which may cause colored fringes or "rainbows" to appear.
- Volumetric effects – absorption and scattering when light travels through partially transparent or translucent substances (called participating media because they modify the light rather than simply allow rays to pass through)[17]Template:R/superscript[15]Template:R/superscript
- Caustics – bright patches, sometimes with distinct filaments and a folded or twisted appearance, resulting when light is reflected or refracted before illuminating an object.[17]Template:R/superscript
In realistic scenes, objects are illuminated both by light that arrives directly from a light source (after passing mostly unimpeded through air), and light that has bounced off other objects in the scene. The simulation of this complex lighting is called global illumination. In the past, indirect lighting was often faked (especially when rendering animated films) by placing additional hidden lights in the scene, but today path tracing is used to render it accurately.[18]Template:R/superscript[17]Template:R/superscript
For true photorealism, the camera used to take the photograph must be simulated. The thin lens approximation allows combining perspective projection with depth of field (and bokeh) emulation. Camera lens simulations can be made more realistic by modeling the way light is refracted by the components of the lens. Motion blur is often simulated if film or video frames are being rendered.[15]Template:R/superscript[19]Template:R/superscript Simulated lens flare and bloom are sometimes added to make the image appear subjectively brighter (although the design of real cameras tries to reduce these effects).[8]Template:R/superscript
Realistic rendering uses mathematical descriptions of how different surface materials reflect light, called reflectance models or (when physically plausible) bidirectional reflectance distribution functions (BRDFs).[15]Template:R/superscript Rendering materials such as marble, plant leaves, and human skin requires simulating an effect called subsurface scattering, in which a portion of the light travels into the material, is scattered, and then travels back out again.[17]Template:R/superscript The way color, and properties such as roughness, vary over a surface can be represented efficiently using texture mapping.[8]Template:R/superscript
Other styles of 3D rendering
For some applications (including early stages of 3D modeling), simplified rendering styles such as wireframe rendering may be appropriate, particularly when the material and surface details have not been defined and only the shape of an object is known.[20]Template:R/superscript Games and other real-time applications may use simpler and less realistic rendering techniques as an artistic or design choice, or to allow higher frame rates on lower-end hardware.
Orthographic and isometric projections can be used for a stylized effect or to ensure that parallel lines are depicted as parallel in CAD rendering.[8]Template:R/superscript[20]Template:R/superscript
Non-photorealistic rendering (NPR) uses techniques like edge detection and posterization to produce 3D images that resemble technical illustrations, cartoons, or other styles of drawing or painting.[8]Template:R/superscript
2D rendering
In 2D computer graphics the positions and sizes of shapes are specified using 2D coordinates (x and y) instead of 3D coordinates (x, y, and z). 2D rendering APIs often use a resolution-independent coordinate system, with a viewport determining how to convert coordinates to pixel indexes called device coordinates.[21]Template:R/superscript Transformations such as scaling, translation, and rotation may be applied before rendering the shapes. These affine transformations are often represented by 3 × 3 matrices, allowing easier composition of transformations.[21]Template:R/superscript
Higher-quality 2D rendering engines such as SVG renderers usually implement anti-aliasing to reduce the jagged appearance of rasterized lines and shape edges.[22]Template:R/superscript When rendering overlapping shapes, renderers commonly use a "painter's model" in which the shapes are drawn in some determined order, or their contributions to each pixel are composited using blending operations that may depend on the order of the inputs.[22]Template:R/superscript Renderers may allow giving shapes a "z index" or "stacking order" to specify the rendering or blending order (unlike the z coordinate used in 3D rendering, this third coordinate only indicates an order, not a distance, and cannot be meaningfully rotated together with the x and y coordinates).[22]Template:R/superscript
2D rendering typically does not simulate light propagation (which would likely require specifying 3D positions or thickness for the shapes). Effects such as drop shadows and transparency are defined by mathematical functions with no physical basis.[23]Template:R/superscript[24]Template:R/superscript
2D rendering for print output may need to support very high resolutions, e.g. 600 or 1200 DPI for a typical laser printer, or 2400 DPI or higher for an imagesetter or platesetter. Grayscale and color images require halftones (or some form of dithering or stochastic screening) and color separations. A rendering engine called a raster image processor (RIP) converts input data such as PDF files into the high-resolution bitmap images used by the printer.[25]Template:R/superscript
Inputs
Before a 3D scene or 2D image can be rendered, it must be described in a way that the rendering software can understand. Historically, inputs for both 2D and 3D rendering were usually text files, which are easier than binary files for humans to edit and debug. For 3D graphics, text formats have largely been supplanted by more efficient binary formats, and by APIs which allow interactive applications to communicate directly with a rendering component without generating a file on disk (although a scene description is usually still created in memory prior to rendering).[6]Template:R/superscript
Traditional rendering algorithms use geometric descriptions of 3D scenes or 2D images. Applications and algorithms that render visualizations of data scanned from the real world, or scientific simulations, may require different types of input data.
The PostScript format (which is often credited with the rise of desktop publishing) provides a standardized, interoperable way to describe 2D graphics and page layout. The Scalable Vector Graphics (SVG) format is also text-based, and the PDF format uses the PostScript language internally. In contrast, although many 3D graphics file formats have been standardized (including text-based formats such as VRML and X3D), different rendering applications typically use formats tailored to their needs, and this has led to a proliferation of proprietary and open formats, with binary files being more common.[6]Template:R/superscript[26]Template:R/superscript[27]Template:R/superscript[7]Template:R/superscript[28]Template:R/superscript
2D vector graphics
A vector graphics image description may include:[26]Template:R/superscript[27]Template:R/superscript
- Coordinates and curvature information for line segments, arcs, and Bézier curves (which may be used as boundaries of filled shapes)
- Center coordinates, width, and height (or bounding rectangle coordinates) of basic shapes such as rectangles, circles and ellipses
- Color, width and pattern (such as dashed or dotted) for rendering lines
- Colors, patterns, and gradients for filling shapes
- Bitmap image data (either embedded or in an external file) along with scale and position information
- Text to be rendered (along with size, position, orientation, color, and font)
- Clipping information, if only part of a shape or bitmap image should be rendered
- Transparency and compositing information for rendering overlapping shapes
- Color space information, allowing the image to be rendered consistently on different displays and printers
3D geometry
A geometric scene description may include:[6]Template:R/superscript[29]Template:R/superscript
- Size, position, and orientation of geometric primitives such as spheres and cones (which may be combined in various ways to create more complex objects)
- Vertex coordinates and surface normal vectors for meshes of triangles or polygons (often rendered as smooth surfaces by subdividing the mesh)
- Transformations for positioning, rotating, and scaling objects within a scene (allowing parts of the scene to use different local coordinate systems).
- "Camera" information describing how the scene is being viewed (position, direction, focal length, and field of view)
- Light information (location, type, brightness, and color)
- Optical properties of surfaces, such as albedo, roughness, and refractive index,
- Optical properties of media through which light passes (transparent solids, liquids, clouds, smoke), e.g. absorption and scattering cross sections
- Bitmap image data used as texture maps for surfaces
- Small scripts or programs for generating complex 3D shapes or scenes procedurally
- Description of how object and camera locations and other information change over time, for rendering an animation
Many file formats exist for storing individual 3D objects or "models". These can be imported into a larger scene, or loaded on-demand by rendering software or games. A realistic scene may require hundreds of items like household objects, vehicles, and trees, and 3D artists often utilize large libraries of models. In game production, these models (along with other data such as textures, audio files, and animations) are referred to as "assets".[28]Template:R/superscript[30]Template:R/superscript
Volumetric data
Scientific and engineering visualization often requires rendering volumetric data generated by 3D scans or simulations. Perhaps the most common source of such data is medical CT and MRI scans, which need to be rendered for diagnosis. Volumetric data can be extremely large, and requires specialized data formats to store it efficiently, particularly if the volume is sparse (with empty regions that do not contain data).[8]Template:R/superscript[31]Template:R/superscript[32]Template:R/superscript
Before rendering, level sets for volumetric data can be extracted and converted into a mesh of triangles, e.g. by using the marching cubes algorithm. Algorithms have also been developed that work directly with volumetric data, for example to render realistic depictions of the way light is scattered and absorbed by clouds and smoke, and this type of volumetric rendering is used extensively in visual effects for movies. When rendering lower-resolution volumetric data without interpolation, the individual cubes or "voxels" may be visible, an effect sometimes used deliberately for game graphics.[33]Template:R/superscript[8]Template:R/superscript
Photogrammetry and scanning
Photographs of real world objects can be incorporated into a rendered scene by using them as textures for 3D objects. Photos of a scene can also be stitched together to create panoramic images or environment maps, which allow the scene to be rendered very efficiently but only from a single viewpoint. Scanning of real objects and scenes using structured light or lidar produces point clouds consisting of the coordinates of millions of individual points in space, sometimes along with color information. These point clouds may either be rendered directly or converted into meshes before rendering. (Note: "point cloud" sometimes also refers to a minimalist rendering style that can be used for any 3D geometry, similar to wireframe rendering.)[8]Template:R/superscript[6]Template:R/superscript
Neural approximations and light fields
A more recent, experimental approach is description of scenes using radiance fields which define the color, intensity, and direction of incoming light at each point in space. (This is conceptually similar to, but not identical to, the light field recorded by a hologram.) For any useful resolution, the amount of data in a radiance field is so large that it is impractical to represent it directly as volumetric data, and an approximation function must be found. Neural networks are typically used to generate and evaluate these approximations, sometimes using video frames, or a collection of photographs of a scene taken at different angles, as "training data".[34]Template:R/superscript[35]Template:R/superscript
Algorithms related to neural networks have recently been used to find approximations of a scene as 3D Gaussians. The resulting representation is similar to a point cloud, except that it uses fuzzy, partially-transparent blobs of varying dimensions and orientations instead of points. As with neural radiance fields, these approximations are often generated from photographs or video frames.[36]Template:R/superscript
Outputs
The output of rendering may be displayed immediately on the screen (many times a second, in the case of real-time rendering such as games) or saved in a raster graphics file format such as JPEG or PNG. High-end rendering applications commonly use the OpenEXR file format, which can represent finer gradations of colors and high dynamic range lighting, allowing tone mapping or other adjustments to be applied afterwards without loss of quality.[37]Template:R/superscript[38]Template:R/superscript
Quickly rendered animations can be saved directly as video files, but for high-quality rendering, individual frames (which may be rendered by different computers in a cluster or render farm and may take hours or even days to render) are output as separate files and combined later into a video clip.[39]Template:R/superscript[30]Template:R/superscript
The output of a renderer sometimes includes more than just RGB color values. For example, the spectrum can be sampled using multiple wavelengths of light, or additional information such as depth (distance from camera) or the material of each point in the image can be included (this data can be used during compositing or when generating texture maps for real-time rendering, or used to assist in removing noise from a path-traced image). Transparency information can be included, allowing rendered foreground objects to be composited with photographs or video. It is also sometimes useful to store the contributions of different lights, or of specular and diffuse lighting, as separate channels, so lighting can be adjusted after rendering. The OpenEXR format allows storing many channels of data in a single file. Renderers such as Blender and Pixar RenderMan support a large variety of configurable values called Arbitrary Output Variables (AOVs).[37]Template:R/superscript[38]Template:R/superscript[40]Template:R/superscript
Techniques
Choosing how to render a 3D scene usually involves trade-offs between speed, memory usage, and realism (although realism is not always desired). The Page Template:Visible anchor/styles.css has no content.algorithms developed over the years follow a loose progression, with more advanced methods becoming practical as computing power and memory capacity increased. Multiple techniques may be used for a single final image.
An important distinction is between image order algorithms, which iterate over pixels in the image, and object order algorithms, which iterate over objects in the scene. For simple scenes, object order is usually more efficient, as there are fewer objects than pixels.[41]Template:R/superscript
- 2D vector graphics
- The vector displays of the 1960s-1970s used deflection of an electron beam to draw line segments directly on the screen. Nowadays, vector graphics are rendered by rasterization algorithms that also support filled shapes. In principle, any 2D vector graphics renderer can be used to render 3D objects by first projecting them onto a 2D image plane. [21]Template:R/superscript
- 3D rasterization
- Adapts 2D rasterization algorithms so they can be used more efficiently for 3D rendering, handling hidden surface removal via scanline or z-buffer techniques. Different realistic or stylized effects can be obtained by coloring the pixels covered by the objects in different ways. Surfaces are typically divided into meshes of triangles before being rasterized. Rasterization is usually synonymous with "object order" rendering (as described above).[21]Template:R/superscript[6]Template:R/superscript[41]Template:R/superscript
- Ray casting
- Uses geometric formulas to compute the first object that a ray intersects.[42]Template:R/superscript It can be used to implement "image order" rendering by casting a ray for each pixel, and finding a corresponding point in the scene. Ray casting is a fundamental operation used for both graphical and non-graphical purposes,[14]Template:R/superscript e.g. determining whether a point is in shadow, or checking what an enemy can see in a game.
- Ray tracing
- Simulates the bouncing paths of light caused by specular reflection and refraction, requiring a varying number of ray casting operations for each path. Advanced forms use Monte Carlo techniques to render effects such as area lights, depth of field, blurry reflections, and soft shadows, but computing global illumination is usually in the domain of path tracing.[42]Template:R/superscript[43]Template:R/superscript
- Radiosity
- A finite element analysis approach that breaks surfaces in the scene into pieces, and estimates the amount of light that each piece receives from light sources, or indirectly from other surfaces. Once the irradiance of each surface is known, the scene can be rendered using rasterization or ray tracing.[10]Template:R/superscript
- Path tracing
- Uses Monte Carlo integration with a simplified form of ray tracing, computing the average brightness of a sample of the possible paths that a photon could take when traveling from a light source to the camera (for some images, thousands of paths need to be sampled per pixel[14]Template:R/superscript). It was introduced as a statistically unbiased way to solve the rendering equation, giving ray tracing a rigorous mathematical foundation.[44]Template:R/superscript[42]Template:R/superscript
Each of the above approaches has many variations, and there is some overlap. Path tracing may be considered either a distinct technique or a particular type of ray tracing.[10]Template:R/superscript Note that the usage of terminology related to ray tracing and path tracing has changed significantly over time.[42]Template:R/superscript
Ray marching is a family of algorithms, used by ray casting, for finding intersections between a ray and a complex object, such as a volumetric dataset or a surface defined by a signed distance function. It is not, by itself, a rendering method, but it can be incorporated into ray tracing and path tracing, and is used by rasterization to implement screen-space reflection and other effects.[42]Template:R/superscript
A technique called photon mapping traces paths of photons from a light source to an object, accumulating data about irradiance which is then used during conventional ray tracing or path tracing.[10]Template:R/superscript Rendering a scene using only rays traced from the light source to the camera is impractical, even though it corresponds more closely to reality, because a huge number of photons would need to be simulated, only a tiny fraction of which actually hit the camera.[45]Template:R/superscript[21]Template:R/superscript
Some authors call conventional ray tracing "backward" ray tracing because it traces the paths of photons backwards from the camera to the light source, and call following paths from the light source (as in photon mapping) "forward" ray tracing.[45]Template:R/superscript However, sometimes the meaning of these terms is reversed.[46]Template:R/superscript Tracing rays starting at the light source can also be called particle tracing or light tracing, which avoids this ambiguity.[18]Template:R/superscript[47]Template:R/superscript
Real-time rendering, including video game graphics, typically uses rasterization, but increasingly combines it with ray tracing and path tracing.[14]Template:R/superscript To enable realistic global illumination, real-time rendering often relies on pre-rendered ("baked") lighting for stationary objects. For moving objects, it may use a technique called light probes, in which lighting is recorded by rendering omnidirectional views of the scene at chosen points in space (often points on a grid to allow easier interpolation). These are similar to environment maps, but typically use a very low resolution or an approximation such as spherical harmonics.[48]Template:R/superscript (Note: Blender uses the term 'light probes' for a more general class of pre-recorded lighting data, including reflection maps.[49]Template:R/superscript)
Lua error in package.lua at line 80: module 'Module:Plain text' not found.
Rasterization
Script error: No such module "Labelled list hatnote".
The term rasterization (in a broad sense) encompasses many techniques used for 2D rendering and real-time 3D rendering. 3D animated films were rendered by rasterization before ray tracing and path tracing became practical.
A renderer combines rasterization with geometry processing (which is not specific to rasterization) and pixel processing which computes the RGB color values to be placed in the framebuffer for display.[8]Template:R/superscript[41]Template:R/superscript
The main tasks of rasterization (including pixel processing) are:[8]Template:R/superscript
- Determining which pixels are covered by each geometric shape in the 3D scene or 2D image (this is the actual rasterization step, in the strictest sense)
- Blending between colors and depths defined at the vertices of shapes, e.g. using barycentric coordinates (interpolation)
- Determining if parts of shapes are hidden by other shapes, due to 2D layering or 3D depth (hidden surface removal)
- Evaluating a function for each pixel covered by a shape (shading)
- Smoothing edges of shapes so pixels are less visible (anti-aliasing)
- Blending overlapping transparent shapes (compositing)
3D rasterization is typically part of a graphics pipeline in which an application provides lists of triangles to be rendered, and the rendering system transforms and projects their coordinates, determines which triangles are potentially visible in the viewport, and performs the above rasterization and pixel processing tasks before displaying the final result on the screen.[8]Template:R/superscript[41]Template:R/superscript
Historically, 3D rasterization used algorithms like the Warnock algorithm and scanline rendering (also called "scan-conversion"), which can handle arbitrary polygons and can rasterize many shapes simultaneously. Although such algorithms are still important for 2D rendering, 3D rendering now usually divides shapes into triangles and rasterizes them individually using simpler methods.[50]Template:R/superscript[51]Template:R/superscript[21]Template:R/superscript
High-performance algorithms exist for rasterizing 2D lines, including anti-aliased lines, as well as ellipses and filled triangles. An important special case of 2D rasterization is text rendering, which requires careful anti-aliasing and rounding of coordinates to avoid distorting the letterforms and preserve spacing, density, and sharpness.[41]Template:R/superscript[52]Template:R/superscript
After 3D coordinates have been projected onto the image plane, rasterization is primarily a 2D problem, but the 3rd dimension necessitates hidden surface removal. Early computer graphics used geometric algorithms or ray casting to remove the hidden portions of shapes, or used the painter's algorithm, which sorts shapes by depth (distance from camera) and renders them from back to front. Depth sorting was later avoided by incorporating depth comparison into the scanline rendering algorithm. The z-buffer algorithm performs the comparisons indirectly by including a depth or "z" value in the framebuffer. A pixel is only covered by a shape if that shape's z value is lower (indicating closer to the camera) than the z value currently in the buffer. The z-buffer requires additional memory (an expensive resource at the time it was invented) but simplifies the rasterization code and permits multiple passes. Memory is now faster and more plentiful, and a z-buffer is almost always used for real-time rendering.[53]Template:R/superscript[54]Template:R/superscript[21]Template:R/superscript[8]Template:R/superscript
A drawback of the basic z-buffer algorithm is that each pixel ends up either entirely covered by a single object or filled with the background color, causing jagged edges in the final image. Early anti-aliasing approaches addressed this by detecting when a pixel is partially covered by a shape, and calculating the covered area. The A-buffer (and other supersampling and multi-sampling techniques) solve the problem less precisely but with higher performance. For real-time 3D graphics, it has become common to use complicated heuristics (and even neural-networks) to perform anti-aliasing.[54]Template:R/superscript[55]Template:R/superscript[41]Template:R/superscript[8]Template:R/superscript
In 3D rasterization, color is usually determined by a pixel shader or fragment shader, a small program that is run for each pixel. The shader does not (or cannot) directly access 3D data for the entire scene (this would be very slow, and would result in an algorithm similar to ray tracing) and a variety of techniques have been developed to render effects like shadows and reflections using only texture mapping and multiple passes.[41]Template:R/superscript
Older and more basic 3D rasterization implementations did not support shaders, and used simple shading techniques such as flat shading (lighting is computed once for each triangle, which is then rendered entirely in one color), Gouraud shading (lighting is computed using normal vectors defined at vertices and then colors are interpolated across each triangle), or Phong shading (normal vectors are interpolated across each triangle and lighting is computed for each pixel).[41]Template:R/superscript
Until relatively recently, Pixar used rasterization for rendering its animated films. Unlike the renderers commonly used for real-time graphics, the Reyes rendering system in Pixar's RenderMan software was optimized for rendering very small (pixel-sized) polygons, and incorporated stochastic sampling techniques more typically associated with ray tracing.[6]Template:R/superscript[56]Template:R/superscript
Ray casting
Script error: No such module "Labelled list hatnote".
One of the simplest ways to render a 3D scene is to test if a ray starting at the viewpoint (the "eye" or "camera") intersects any of the geometric shapes in the scene, repeating this test using a different ray direction for each pixel. This method, called ray casting, was important in early computer graphics, and is a fundamental building block for more advanced algorithms. Ray casting can be used to render shapes defined by constructive solid geometry (CSG) operations.[42]Template:R/superscript[57]Template:R/superscript
Early ray casting experiments include the work of Arthur Appel in the 1960s. Appel rendered shadows by casting an additional ray from each visible surface point towards a light source. He also tried rendering the density of illumination by casting random rays from the light source towards the object and plotting the intersection points (similar to the later technique called photon mapping).[58]Template:R/superscript
When rendering scenes containing many objects, testing the intersection of a ray with every object becomes very expensive. Special data structures are used to speed up this process by allowing large numbers of objects to be excluded quickly (such as objects behind the camera). These structures are analogous to database indexes for finding the relevant objects. The most common are the bounding volume hierarchy (BVH), which stores a pre-computed bounding box or sphere for each branch of a tree of objects, and the k-d tree which recursively divides space into two parts. Recent GPUs include hardware acceleration for BVH intersection tests. K-d trees are a special case of binary space partitioning, which was frequently used in early computer graphics (it can also generate a rasterization order for the painter's algorithm). Octrees, another historically popular technique, are still often used for volumetric data.[14]Template:R/superscript[59]Template:R/superscript[57]Template:R/superscript[7]Template:R/superscript
Geometric formulas are sufficient for finding the intersection of a ray with shapes like spheres, polygons, and polyhedra, but for most curved surfaces there is no analytic solution, or the intersection is difficult to compute accurately using limited precision floating point numbers. Root-finding algorithms such as Newton's method can sometimes be used. To avoid these complications, curved surfaces are often approximated as meshes of triangles. Volume rendering (e.g. rendering clouds and smoke), and some surfaces such as fractals, may require ray marching instead of basic ray casting.[60]Template:R/superscript[42]Template:R/superscript[8]Template:R/superscript
Ray tracing
Script error: No such module "Labelled list hatnote".
Ray casting can be used to render an image by tracing light rays backwards from a simulated camera. After finding a point on a surface where a ray originated, another ray is traced towards the light source to determine if anything is casting a shadow on that point. If not, a reflectance model (such as Lambertian reflectance for matte surfaces, or the Phong reflection model for glossy surfaces) is used to compute the probability that a photon arriving from the light would be reflected towards the camera, and this is multiplied by the brightness of the light to determine the pixel brightness. If there are multiple light sources, brightness contributions of the lights are added together. For color images, calculations are repeated for multiple wavelengths of light (e.g. red, green, and blue).[8]Template:R/superscript[42]Template:R/superscript
Classical ray tracing (also called Whitted-style or recursive ray tracing) extends this method so it can render mirrors and transparent objects. If a ray traced backwards from the camera originates at a point on a mirror, the reflection formula from geometric optics is used to calculate the direction the reflected ray came from, and another ray is cast backwards in that direction. If a ray originates at a transparent surface, rays are cast backwards for both reflected and refracted rays (using Snell's law to compute the refracted direction), and so ray tracing needs to support a branching "tree" of rays. In simple implementations, a recursive function is called to trace each ray.[8]Template:R/superscript[42]Template:R/superscript
Ray tracing usually performs anti-aliasing by taking the average of multiple samples for each pixel. It may also use multiple samples for effects like depth of field and motion blur. If evenly spaced ray directions or times are used for each of these features, many rays are required, and some aliasing will remain. Cook-style, stochastic, or Monte Carlo ray tracing avoids this problem by using random sampling instead of evenly spaced samples. This type of ray tracing is commonly called distributed ray tracing, or distribution ray tracing because it samples rays from probability distributions. Distribution ray tracing can also render realistic "soft" shadows from large lights by using a random sample of points on the light when testing for shadowing, and it can simulate chromatic aberration by sampling multiple wavelengths from the spectrum of light.[42]Template:R/superscript[45]Template:R/superscript
Real surface materials reflect small amounts of light in almost every direction because they have small (or microscopic) bumps and grooves. A distribution ray tracer can simulate this by sampling possible ray directions, which allows rendering blurry reflections from glossy and metallic surfaces. However, if this procedure is repeated recursively to simulate realistic indirect lighting, and if more than one sample is taken at each surface point, the tree of rays quickly becomes huge. Another kind of ray tracing, called path tracing, handles indirect light more efficiently, avoiding branching, and ensures that the distribution of all possible paths from a light source to the camera is sampled in an unbiased way.[45]Template:R/superscript[44]Template:R/superscript
Ray tracing was often used for rendering reflections in animated films, until path tracing became standard for film rendering. Films such as Shrek 2 and Monsters University also used distribution ray tracing or path tracing to precompute indirect illumination for a scene or frame prior to rendering it using rasterization.[17]Template:R/superscript
Advances in GPU technology have made real-time ray tracing possible in games, although it is currently almost always used in combination with rasterization.[14]Template:R/superscript This enables visual effects that are difficult with only rasterization, including reflection from curved surfaces and interreflective objects,[61]Template:R/superscript and shadows that are accurate over a wide range of distances and surface orientations.[62]Template:R/superscript Ray tracing support is included in recent versions of the graphics APIs used by games, such as DirectX, Metal, and Vulkan.[63]Template:R/superscript
Ray tracing has been used to render simulated black holes, and the appearance of objects moving at close to the speed of light, by taking spacetime curvature and relativistic effects into account during light ray simulation.[64]Template:R/superscript[65]Template:R/superscript
Radiosity
Script error: No such module "Labelled list hatnote".
Radiosity (named after the radiometric quantity of the same name) is a method for rendering objects illuminated by light bouncing off rough or matte surfaces. This type of illumination is called indirect light, environment lighting, diffuse lighting, or diffuse interreflection, and the problem of rendering it realistically is called global illumination. Rasterization and basic forms of ray tracing (other than distribution ray tracing and path tracing) can only roughly approximate indirect light, e.g. by adding a uniform "ambient" lighting amount chosen by the artist. Radiosity techniques are also suited to rendering scenes with area lights such as rectangular fluorescent lighting panels, which are difficult for rasterization and traditional ray tracing. Radiosity is considered a physically-based method, meaning that it aims to simulate the flow of light in an environment using equations and experimental data from physics, however it often assumes that all surfaces are opaque and perfectly Lambertian, which reduces realism and limits its applicability.[8]Template:R/superscript[10]Template:R/superscript[66]Template:R/superscript[67]Template:R/superscript
In the original radiosity method (first proposed in 1984) now called classical radiosity, surfaces and lights in the scene are split into pieces called patches, a process called meshing (this step makes it a finite element method). The rendering code must then determine what fraction of the light being emitted or diffusely reflected (scattered) by each patch is received by each other patch. These fractions are called form factors or view factors (first used in engineering to model radiative heat transfer). The form factors are multiplied by the albedo of the receiving surface and put in a matrix. The lighting in the scene can then be expressed as a matrix equation (or equivalently a system of linear equations) that can be solved by methods from linear algebra.[66]Template:R/superscript[68]Template:R/superscript[10]Template:R/superscript
Solving the radiosity equation gives the total amount of light emitted and reflected by each patch, which is divided by area to get a value called radiosity that can be used when rasterizing or ray tracing to determine the color of pixels corresponding to visible parts of the patch. For real-time rendering, this value (or more commonly the irradiance, which does not depend on local surface albedo) can be pre-computed and stored in a texture (called an irradiance map) or stored as vertex data for 3D models. This feature was used in architectural visualization software to allow real-time walk-throughs of a building interior after computing the lighting.[10]Template:R/superscript[8]Template:R/superscript[67]Template:R/superscript
The large size of the matrices used in classical radiosity (the square of the number of patches) causes problems for realistic scenes. Practical implementations may use Jacobi or Gauss-Seidel iterations, which is equivalent (at least in the Jacobi case) to simulating the propagation of light one bounce at a time until the amount of light remaining (not yet absorbed by surfaces) is insignificant. The number of iterations (bounces) required is dependent on the scene, not the number of patches, so the total work is proportional to the square of the number of patches (in contrast, solving the matrix equation using Gaussian elimination requires work proportional to the cube of the number of patches). Form factors may be recomputed when they are needed, to avoid storing a complete matrix in memory.[10]Template:R/superscript
The quality of rendering is often determined by the size of the patches, e.g. very fine meshes are needed to depict the edges of shadows accurately. An important improvement is hierarchical radiosity, which uses a coarser mesh (larger patches) for simulating the transfer of light between surfaces that are far away from one another, and adaptively sub-divides the patches as needed. This allows radiosity to be used for much larger and more complex scenes.[10]Template:R/superscript
Alternative and extended versions of the radiosity method support non-Lambertian surfaces, such as glossy surfaces and mirrors, and sometimes use volumes or "clusters" of objects as well as surface patches. Stochastic or Monte Carlo radiosity uses random sampling in various ways, e.g. taking samples of incident light instead of integrating over all patches, which can improve performance but adds noise (this noise can be reduced by using deterministic iterations as a final step, unlike path tracing noise). Simplified and partially precomputed versions of radiosity are widely used for real-time rendering, combined with techniques such as octree radiosity that store approximations of the light field.[10]Template:R/superscript[68]Template:R/superscript[69]Template:R/superscript[8]Template:R/superscript
Path tracing
Script error: No such module "Labelled list hatnote". As part of the approach known as physically based rendering, path tracing has become the dominant technique for rendering realistic scenes, including effects for movies.[70]Template:R/superscript For example, the popular open source 3D software Blender uses path tracing in its Cycles renderer.[71]Template:R/superscript Images produced using path tracing for global illumination are generally noisier than when using radiosity (the main competing algorithm for realistic lighting), but radiosity can be difficult to apply to complex scenes and is prone to artifacts that arise from using a tessellated representation of irradiance.[70]Template:R/superscript[10]Template:R/superscript
Like distributed ray tracing, path tracing is a kind of stochastic or randomized ray tracing that uses Monte Carlo or Quasi-Monte Carlo integration. It was proposed and named in 1986 by Jim Kajiya in the same paper as the rendering equation. Kajiya observed that much of the complexity of distributed ray tracing could be avoided by only tracing a single path from the camera at a time (in Kajiya's implementation, this "no branching" rule was broken by tracing additional rays from each surface intersection point to randomly chosen points on each light source). Kajiya suggested reducing the noise present in the output images by using stratified sampling and importance sampling for making random decisions such as choosing which ray to follow at each step of a path. Even with these techniques, path tracing would not have been practical for film rendering, using computers available at the time, because the computational cost of generating enough samples to reduce variance to an acceptable level was too high. Monster House, the first feature film rendered entirely using path tracing, was not released until 20 years later.[44]Template:R/superscript[70]Template:R/superscript[72]Template:R/superscript
In its basic form, path tracing is inefficient (requiring too many samples) for rendering caustics and scenes where light enters indirectly through narrow spaces. Attempts were made to address these weaknesses in the 1990s. Bidirectional path tracing has similarities to photon mapping, tracing rays from the light source and the camera separately, and then finding ways to connect these paths (but unlike photon mapping it usually samples new light paths for each pixel rather than using the same cached data for all pixels). Metropolis light transport samples paths by modifying paths that were previously traced, spending more time exploring paths that are similar to other "bright" paths, which increases the chance of discovering even brighter paths. Multiple importance sampling provides a way to reduce variance when combining samples from more than one sampling method, particularly when some samples are much noisier than the others.[70]Template:R/superscript[18]Template:R/superscript
This later work was summarized and expanded upon in Eric Veach's 1997 PhD thesis, which helped raise interest in path tracing in the computer graphics community. The Arnold renderer, first released in 1998, proved that path tracing was practical for rendering frames for films, and that there was a demand for unbiased and physically based rendering in the film industry; other commercial and open source path tracing renderers began appearing. Computational cost was addressed by rapid advances in CPU and cluster performance.[70]Template:R/superscript
Path tracing's relative simplicity and its nature as a Monte Carlo method (sampling hundreds or thousands of paths per pixel) have made it attractive to implement on a GPU, especially on recent GPUs that support ray tracing acceleration technology such as Nvidia's RTX and OptiX.[73]Template:R/superscript However bidirectional path tracing and Metropolis light transport are more difficult to implement efficiently on a GPU.[74]Template:R/superscript[75]Template:R/superscript
Techniques have been developed to denoise the output of path tracing, reducing the number of paths required to achieve acceptable quality, at the risk of losing some detail or introducing small-scale artifacts that are more objectionable than noise.[76]Template:R/superscript[77]Template:R/superscript Neural networks are now widely used for this purpose.[78]Template:R/superscript[79]Template:R/superscript[80]Template:R/superscript
Research into improving path tracing continues. Many variations of bidirectional path tracing and Metropolis light transport have been explored, and ways of combining path tracing with photon mapping.[81]Template:R/superscript[82]Template:R/superscript Recent path guiding approaches construct approximations of the light field probability distribution in each volume of space, so paths can be sampled more effectively.[82]Template:R/superscript
By combining denoising and hardware ray tracing acceleration, it is now practical to use path tracing for real-time rendering. Due to performance constraints, biased techniques such as a radiance cache may be incorporated. Spatiotemporal reservoir resampling (ReSTIR) aims to improve the quality of real-time path tracing and allow more complex lighting by reusing samples (paths) from previous frames and adjacent pixels.[83]Template:R/superscript[84]Template:R/superscript
Machine learning
As of 2003, machine learning (ML) techniques were being used in other areas of computer graphics, such as texture synthesis, fitting surfaces to point clouds, and fitting curves to motion capture data.[85]Template:R/superscript The use of ML for rendering expanded with the availability of GPUs that can evaluate neural networks (especially convolutional neural networks) quickly.
Neural networks and Gaussian mixture models have been used in conjunction with rendering techniques such as path tracing to encode bidirectional reflectance distribution functions (BRDFs), or to encode cached radiance at points in space (for biased acceleration of rendering or for path guiding). Neural radiance fields (NeRFs) take the latter approach to an extreme, encoding radiance at all points in a volume, and using evaluation of this approximation as the primary rendering method.[86]Template:R/superscript
One of the most widely used applications of machine learning in rendering is denoising of path traced images (in practice, most path tracing now likely uses such a denoiser). Neural networks trained on pairs of noisy and low-noise images (or sometimes pairs of images with uncorrelated noise) can use data such as surface normal and albedo in addition to the rendered image, to reduce blurring or artifacts and preserve textures, and are effective at removing the scattered bright pixels called "fireflies" that frequently occur in path tracing. Denoisers specialized for real-time rendering can work with very low sample counts and improve temporal coherence to reduce flickering.[86]Template:R/superscript[14]Template:R/superscript
Hardware acceleration
Rendering is usually limited by available computing power and memory bandwidth, and so specialized hardware has been developed to speed it up ("accelerate" it), particularly for real-time rendering. Hardware features such as a framebuffer for raster graphics are required to display the output of rendering smoothly in real time.
Hardware acceleration does not replace the use of software for rendering, rather it speeds up selected operations or calculations using dedicated circuits, or runs portions of the software's code on a different type of processor.
History
In the era of vector monitors (also called calligraphic displays), a display processing unit (DPU) was a dedicated CPU or coprocessor that maintained a list of visual elements and redrew them continuously on the screen by controlling an electron beam. Advanced DPUs such as Evans & Sutherland's Line Drawing System-1 (and later models produced into the 1980s) incorporated 3D coordinate transformation features to accelerate rendering of wire-frame images.[21]Template:R/superscript[87]Template:R/superscript Evans & Sutherland also made the Digistar planetarium projection system, which was a vector display that could render both stars and wire-frame graphics (the vector-based Digistar and Digistar II were used in many planetariums, and a few may still be in operation).[88]Template:R/superscript[89]Template:R/superscript[90]Template:R/superscript A Digistar prototype was used for rendering 3D star fields for the film Star Trek II: The Wrath of Khan – some of the first 3D computer graphics sequences ever seen in a feature film.[91]Template:R/superscript
Shaded 3D graphics rendering in the 1970s and early 1980s was usually implemented on general-purpose computers, such as the PDP-10 used by researchers at the University of Utah[92]Template:R/superscript[54]Template:R/superscript. It was difficult to speed up using specialized hardware because it involves a pipeline of complex steps, requiring data addressing, decision-making, and computation capabilities typically only provided by CPUs (although dedicated circuits for speeding up particular operations were proposed [92]Template:R/superscript). Supercomputers or specially designed multi-CPU computers or clusters were sometimes used for ray tracing.[57]Template:R/superscript In 1981, James H. Clark and Marc Hannah designed the Geometry Engine, a VLSI chip for performing some of the steps of the 3D rasterization pipeline, and started the company Silicon Graphics (SGI) to commercialize this technology.[93]Template:R/superscript[94]Template:R/superscript
Home computers and game consoles in the 1980s contained graphics coprocessors that were capable of scrolling and filling areas of the display, and drawing sprites and lines, though they were not useful for rendering realistic images.[95]Template:R/superscript[96]Template:R/superscript Towards the end of the 1980s PC graphics cards and arcade games with 3D rendering acceleration began to appear, and in the 1990s such technology became commonplace. Today, even low-power mobile processors typically incorporate 3D graphics acceleration features.[93]Template:R/superscript[97]Template:R/superscript
GPUs
Script error: No such module "Labelled list hatnote". The 3D graphics accelerators of the 1990s evolved into modern GPUs. GPUs are general-purpose processors, like CPUs, but they are designed for tasks that can be broken into many small, similar, mostly independent sub-tasks (such as rendering individual pixels) and performed in parallel. This means that a GPU can speed up any rendering algorithm that can be split into subtasks in this way, in contrast to 1990s 3D accelerators which were only designed to speed up specific rasterization algorithms and simple shading and lighting effects (although tricks could be used to perform more general computations).[8]Template:R/superscript[98]Template:R/superscript
Due to their origins, GPUs typically still provide specialized hardware acceleration for some steps of a traditional 3D rasterization pipeline, including hidden surface removal using a z-buffer, and texture mapping with mipmaps, but these features are no longer always used.[8]Template:R/superscript Recent GPUs have features to accelerate finding the intersections of rays with a bounding volume hierarchy, to help speed up all variants of ray tracing and path tracing,[59]Template:R/superscript as well as neural network acceleration features sometimes useful for rendering.[99]Template:R/superscript
GPUs are usually integrated with high-bandwidth memory systems to support the read and write bandwidth requirements of high-resolution, real-time rendering, particularly when multiple passes are required to render a frame, however memory latency may be higher than on a CPU, which can be a problem if the critical path in an algorithm involves many memory accesses. GPU design accepts high latency as inevitable (in part because a large number of threads are sharing the memory bus) and attempts to "hide" it by efficiently switching between threads, so a different thread can be performing computations while the first thread is waiting for a read or write to complete.[8]Template:R/superscript[100]Template:R/superscript[101]Template:R/superscript
Rendering algorithms will run efficiently on a GPU only if they can be implemented using small groups of threads that perform mostly the same operations. As an example of code that meets this requirement: when rendering a small square of pixels in a simple ray-traced image, all threads will likely be intersecting rays with the same object and performing the same lighting computations. For performance and architectural reasons, GPUs run groups of around 16-64 threads called warps or wavefronts in lock-step (all threads in the group are executing the same instructions at the same time). If not all threads in the group need to run particular blocks of code (due to conditions) then some threads will be idle, or the results of their computations will be discarded, causing degraded performance.[8]Template:R/superscript[101]Template:R/superscript
Hardware and software rendering
Historically, the term hardware rendering (possibly an abbreviation of "hardware accelerated rendering" or "hardware-assisted rendering") was sometimes used to mean rendering using a hardware-accelerated rasterization pipeline (typically for real-time rendering).[67]Template:R/superscript In contrast, software rendering meant offline rendering using software that was not limited by the capabilities of graphics hardware, and could use more realistic and higher quality techniques.[6]Template:R/superscript Both hardware and software have evolved, and although these terms are still used, their meaning may now be context-dependent.
When OpenGL and Direct3D were introduced in the 1990s, there was a need to use these APIs on computers that did not have hardware acceleration for 3D graphics. "Fallback" rendering implementations were provided that did not require special hardware, and these are sometimes called "software renderers" (today hardware acceleration is almost always available, and these CPU-only implementations are used primarily for testing).[102]Template:R/superscript More recently, "software rendering" may also mean rendering that does not use graphics APIs such as OpenGL, Metal, Direct3D, or Vulkan.[103]Template:R/superscript
Types of renderers that in the past might have been called "software renderers" (e.g. path tracing renderers used for offline rendering for movies) now commonly use GPU acceleration, often via APIs such as CUDA or OpenCL, which are not graphics-specific. Since these latter APIs allow running C++ code on a GPU, it is now possible to run the same rendering code on either a CPU or GPU.[73]Template:R/superscript
Chronology of algorithms and techniques
The following is a rough timeline of frequently mentioned rendering techniques, including areas of current research. Note that even in cases where an idea was named in a specific paper, there were almost always multiple researchers or teams working in the same area (including earlier related work). When a method is first proposed it is often very inefficient, and it takes additional research and practical efforts to turn it into a useful technique.[10]Template:R/superscript
The list focuses on academic research and does not include hardware. (For more history see #External links, as well as Computer graphics#History and Golden age of arcade video games#Technology.)
Page Template:Div col/styles.css has no content.
- 1760 – Lambertian reflectance model[8]Template:R/superscript
- 1931 – Standardized RGB representation of color
- 1967 – Torrance-Sparrow reflectance model[104]
- 1968 – Ray casting[58]Template:R/superscript
- 1968 – Warnock hidden surface removal[105]Template:R/superscript[50]Template:R/superscript
- 1970 – Scanline rendering[51]Template:R/superscript[53]Template:R/superscript
- 1971 – Gouraud shading[106]
- 1973 – Phong shading[107][108]
- 1973 – Phong reflectance model[107][108]
- 1974 – Texture mapping[54]Template:R/superscript
- 1974 – Z-buffering[54]Template:R/superscript
- 1976 – Environment mapping[109]
- 1977 – Blinn–Phong reflectance model[110]
- 1977 – Shadow volumes[111]
- 1978 – Shadow mapping[112]
- 1978 – Bump mapping[113]
- 1980 – BSP trees[114]
- 1980 – Ray tracing[115]
- 1981 – Cook-Torrance reflectance model[116]
- 1983 – MIP maps[117]
- 1984 – Octree ray tracing[118]
- 1984 – Alpha compositing[119]
- 1984 – Distributed ray tracing[120]
- 1984 – Radiosity (method for non-trivial scenes in 1985)[121][122]
- 1984 – A-buffer[55]Template:R/superscript
- 1985 – Hemicube radiosity[123]
- 1986 – Light source tracing[46]
- 1986 – Rendering equation[44]Template:R/superscript
- 1986 – Path tracing[44]Template:R/superscript
- 1987 – Reyes rendering[56]Template:R/superscript
- 1988 – Irradiance caching[124][125][82]Template:R/superscript
- 1991 – Xiaolin Wu line anti-aliasing[126][127]
- 1991 – Hierarchical radiosity[128]
- 1993 – Oren–Nayar reflectance model[129]
- 1993 – Tone mapping[130]
- 1993 – Subsurface scattering[131]
- 1993 – Bidirectional path tracing (Lafortune & Willems formulation)[132]
- 1994 – Ambient occlusion[133]
- 1995 – Photon mapping[134]
- 1995 – Multiple importance sampling[135]
- 1997 – Bidirectional path tracing (Veach & Guibas formulation)[136]
- 1997 – Metropolis light transport[136]
- 1997 – Instant Radiosity[137]
- 2002 – Precomputed Radiance Transfer[138]
- 2002 – Primary sample space Metropolis light transport[139][82]Template:R/superscript
- 2003 – MERL BRDF database[140]
- 2005 – Lightcuts[141][82]Template:R/superscript
- 2005 – Radiance caching[142][82]Template:R/superscript
- 2009 – Stochastic progressive photon mapping (SPPM)[143][82]Template:R/superscript
- 2012 – Vertex connection and merging (VCM) (also called unified path sampling)[144][145][82]Template:R/superscript[146]
- 2012 – Manifold exploration[147][82]Template:R/superscript
- 2013 – Gradient-domain rendering[148][82]Template:R/superscript
- 2014 – Multiplexed Metropolis light transport[149][82]Template:R/superscript
- 2014 – Differentiable rendering[150]
- 2015 – Manifold next event estimation (MNEE)[151][82]Template:R/superscript[152]
- 2017 – Path guiding (using adaptive SD-tree)[153][152]
- 2020 – Spatiotemporal reservoir resampling (ReSTIR)[154]
- 2020 – Neural radiance fields[35]Template:R/superscript
- 2023 – 3D Gaussian splatting[36]Template:R/superscript
See also
Page Template:Div col/styles.css has no content.
- 2D computer graphics
- 3D computer graphics
- 3D modeling
- Architectural rendering
- Augmented reality
- Template:Annotated link
- Computer animation
- Computer-generated imagery (CGI) – General term for images rendered by a computer (e.g. when used for visual effects in a film)
- Computer graphics
- Computer graphics (computer science)
- Digital compositing
- Font rasterization – Rendering text
- Global illumination – Rendering light that bounces between surfaces in a scene (in addition to direct light)
- Glossary of computer graphics
- Graphics library – A software component that performs rendering and/or other graphics-related functions, usable by multiple applications, or an interface between a rendering component or graphics pipeline and the applications that use it (in the latter case called an API)
- Graphics pipeline – Sequence of steps for real-time 3D rendering, usually accelerated by special-purpose hardware (e.g. a GPU)
- High-dynamic-range rendering – Rendering that uses a larger range of light intensities than typically displayed on a computer screen
- History of computer animation
- List of 3D graphics libraries
- List of 3D rendering software
- List of computer graphics and descriptive geometry topics
- List of rendering APIs
- Non-photorealistic rendering
- On-set virtual production – Use of LED panels to display a rendered background on a film or TV set
- Physically based rendering – Rendering techniques that aim to realistically simulate the physics of light and the optical properties of materials
- Pre-rendering – Rendering for later viewing (in contrast to real-time rendering). Also called offline rendering.
- Projection mapping – Projection of moving or static images (including rendered images) onto objects in the real world other than conventional screens
- Raster graphics – Type of data that rendering usually outputs, consisting of a 2D grid of (pixel) values
- Raster image processor – Rendering component in a printer or printing system
- Real-time rendering
- Scientific visualization
- SIGGRAPH – Computer graphics conference held annually since 1974.
- Software rendering – 3D rendering using a general-purpose CPU (instead of a hardware-accelerated graphics pipeline). Distinction is less clear in the era of GPUs that can run arbitrary code.
- Technical drawing
- Timeline of computer animation in film and television
- Unbiased rendering – Rendering techniques that avoid statistical bias (usually a refinement of physically based rendering)
- Template:Annotated link
- Virtual reality
- Visual effects (VFX) – Rendered images (or manipulated footage, shots of physical models, etc.) combined with live-action film footage
- Volume rendering – Visualization of a 3D data set (data set that assigns values to points or cells (voxels) in a 3D grid)
References
Page Template:Reflist/styles.css has no content.
- ^ Page Module:Citation/CS1/styles.css has no content."Rendering, N., Sense IV.9.a". Oxford English Dictionary. March 2024. doi:10.1093/OED/1142023199.
- ^ Page Module:Citation/CS1/styles.css has no content."Render, V., Sense I.3.b". Oxford English Dictionary. June 2024. doi:10.1093/OED/1095944705.
- ^ Page Module:Citation/CS1/styles.css has no content."Rendering, N., Sense III.5.a". Oxford English Dictionary. March 2024. doi:10.1093/OED/1143106586.
- ^ Page Module:Citation/CS1/styles.css has no content."Render, V., Sense IV.22.a". Oxford English Dictionary. June 2024. doi:10.1093/OED/1039673413.
- ^ Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "1 Introduction". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Retrieved March 29, 2026.
- ^ a b c d e f g h Page Module:Citation/CS1/styles.css has no content.Raghavachary, Saty (2005). Rendering for Beginners. Focal Press. ISBN 0-240-51935-3.
- ^ a b c d Page Module:Citation/CS1/styles.css has no content.Hughes, John F.; Van Dam, Andries; McGuire, Morgan; Sklar, David F.; Foley, James D.; Feiner, Steven K.; Akeley, Kurt (2014). Computer graphics: principles and practice (3rd ed.). Addison-Wesley. ISBN 978-0-321-39952-6.
- ^ a b c d e f g h i j k l m n o p q r s t u v w x Page Module:Citation/CS1/styles.css has no content.Akenine-Möller, Tomas; Haines, Eric; Hoffman, Naty; Pesce, Angelo; Iwanicki, Michał; Hillaire, Sébastien (2018). Real-Time Rendering (4th ed.). Boca Raton, FL: A K Peters/CRC Press. ISBN 978-1138627000.
- ^ Page Module:Citation/CS1/styles.css has no content."What is a Rendering Engine? | Dictionary". Archived from the original on 2024-02-21. Retrieved 2024-02-21.
- ^ a b c d e f g h i j k l Page Module:Citation/CS1/styles.css has no content.Glassner, Andrew S. (2011) [1995]. Principles of digital image synthesis (PDF). 1.0.1. Morgan Kaufmann Publishers, Inc. ISBN 978-1-55860-276-2. Archived (PDF) from the original on 2024-01-27. Retrieved 2024-01-27.
- ^ Page Module:Citation/CS1/styles.css has no content.Rombach, Robin; Blattmann, Andreas; Lorenz, Dominik; Esser; Ommer, Björn (June 2022). High-Resolution Image Synthesis with Latent Diffusion Models. 2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). pp. 10674–10685. arXiv:2112.10752. doi:10.1109/CVPR52688.2022.01042.
- ^ Page Module:Citation/CS1/styles.css has no content.Tewari, A.; Fried, O.; Thies, J.; Sitzmann, V.; Lombardi, S.; Sunkavalli, K.; Martin-Brualla, R.; Simon, T.; Saragih, J.; Nießner, M.; Pandey, R.; Fanello, S.; Wetzstein, G.; Zhu, J.-Y.; Theobalt, C.; Agrawala, M.; Shechtman, E.; Goldman, D.B.; Zollhöfer, M. (May 2020). "State of the Art on Neural Rendering". Computer Graphics Forum. 39 (2): 701–727. arXiv:2004.03805. doi:10.1111/cgf.14022.
- ^ Page Module:Citation/CS1/styles.css has no content.Glassner, Andrew S. (April 11, 2019) [1989]. "Preface". An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Archived (PDF) from the original on January 27, 2024. Retrieved January 27, 2024.
- ^ a b c d e f g Page Module:Citation/CS1/styles.css has no content.Akenine-Möller, Tomas; Haines, Eric; Hoffman, Naty; Pesce, Angelo; Iwanicki, Michał; Hillaire, Sébastien (August 6, 2018). "Online chapter 26. Real-Time Ray Tracing" (PDF). Real-Time Rendering (4th ed.). Boca Raton, FL: A K Peters/CRC Press. ISBN 978-1138627000. Archived (PDF) from the original on January 27, 2024. Retrieved January 27, 2024.
- ^ a b c d Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "1.2 Photorealistic Rendering and the Ray-Tracing Algorithm". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Retrieved January 16, 2025.
- ^ Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "9. Further Reading: Wave Optics". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Retrieved January 16, 2024.
- ^ a b c d e Page Module:Citation/CS1/styles.css has no content.Jarosz, Wojciech; Christensen, Per H. (2016). "The Path to Path-Traced Movies". Foundations and Trends in Computer Graphics and Vision. 10 (2): 103–175. arXiv:1611.02145. doi:10.1561/0600000073.
- ^ a b c Page Module:Citation/CS1/styles.css has no content.Veach, Eric (1997). Robust Monte Carlo methods for light transport simulation (PDF) (PhD thesis). Stanford University.
- ^ Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "5.2. Projective Camera Models". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Retrieved January 16, 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Giesecke, Frederick E.; Lockhart, Shawna; Goodman, Marla; Johnson, Cindy (2023). Technical Drawing with Engineering Graphics, 16th Edition. Pearson Education, Inc. ISBN 978-0-13-806572-0.
- ^ a b c d e f g h Page Module:Citation/CS1/styles.css has no content.Foley, James D.; Van Dam, Andries (1982). Fundamentals of Interactive Computer Graphics. Addison-Wesley Publishing Company, Inc. ISBN 0-201-14468-9.
- ^ a b c Page Module:Citation/CS1/styles.css has no content."Scalable Vector Graphics (SVG) 2". W3C. 4 October 2018. Retrieved 20 August 2025.
- ^ Page Module:Citation/CS1/styles.css has no content."Filter Effects Module Level 1". W3C. 18 December 2018. Retrieved 20 August 2025.
- ^ Page Module:Citation/CS1/styles.css has no content."Compositing and Blending Level 1". W3C. 21 March 2024. Retrieved 20 August 2025.
- ^ Page Module:Citation/CS1/styles.css has no content.McCue, Claudia (2006). Real World Print Production. Peachpit Press. ISBN 978-0321410184.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Adobe Systems Incorporated (1990). PostScript Language Reference Manual (2nd ed.). Addison-Wesley Publishing Company. ISBN 0-201-18127-4.
- ^ a b Page Module:Citation/CS1/styles.css has no content."SVG: Scalable Vector Graphics". Mozilla Corporation. 7 August 2024. Archived from the original on 24 August 2024. Retrieved 31 August 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content."Blender 4.2 Manual: Importing & Exporting Files". docs.blender.org. The Blender Foundation. Archived from the original on 31 August 2024. Retrieved 31 August 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (2023). "pbrt-v4 Input File Format". Retrieved 31 August 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Dunlop, Renee (2014). Production Pipeline Fundamentals for Film and Games. Focal Press. ISBN 978-1-315-85827-2.
- ^ Page Module:Citation/CS1/styles.css has no content."About OpenVDB". www.openvdb.org. Academy Software Foundation. Archived from the original on 3 September 2024. Retrieved 31 August 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Museth, Ken (June 2013). "VDB: High-resolution sparse volumes with dynamic topology". ACM Transactions on Graphics. 32 (3): 1–22. doi:10.1145/2487228.2487235.
- ^ Page Module:Citation/CS1/styles.css has no content.Bridson, Robert (2015). Fluid Simulation for Computer Graphics (2nd ed.). A K Peters/CRC Press. ISBN 978-1-482-23283-7.
- ^ Page Module:Citation/CS1/styles.css has no content.Schmid, Katrin (March 2, 2023). "A short 170 year history of Neural Radiance Fields (NeRF), Holograms, and Light Fields". radiancefields.com. Archived from the original on 31 August 2024. Retrieved 31 August 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Mildenhall, Ben; Srinivasan, Pratul P.; Tancik, Matthew; Barron, Jonathan T.; Ramamoorthi, Ravi; Ng, Ren (2020). "NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis". Retrieved 31 August 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Kerbl, Bernhard; Kopanas, Georgios; Leimkuehler, Thomas; Drettakis, George (2023). "3D Gaussian Splatting for Real-Time Radiance Field Rendering". ACM Transactions on Graphics. 42 (4): 1–14. doi:10.1145/3592433.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (2023). "pbrt-v4 User's Guide". Archived from the original on 3 September 2024. Retrieved 31 August 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Brinkmann, Ron (2008). The Art and Science of Digital Compositing (2nd ed.). Morgan Kaufmann. ISBN 978-0-12-370638-6.
- ^ Page Module:Citation/CS1/styles.css has no content."Blender 4.2 Manual: Rendering: Render Output: Rendering Animations". docs.blender.org. The Blender Foundation. Archived from the original on 31 August 2024. Retrieved 31 August 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."RenderMan 26 Documentation: Arbitrary Output Variables". pixar.com. Pixar. 5 September 2023. Retrieved 15 February 2025.
- ^ a b c d e f g h Page Module:Citation/CS1/styles.css has no content.Marschner, Steve; Shirley, Peter (2022). Fundamentals of Computer Graphics (5th ed.). CRC Press. ISBN 978-1-003-05033-9.
- ^ a b c d e f g h i j Page Module:Citation/CS1/styles.css has no content.Haines, Eric; Shirley, Peter (February 25, 2019). "Ray Tracing Terminology". Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs. Berkeley, CA: Apress. doi:10.1007/978-1-4842-4427-2. ISBN 978-1-4842-4427-2.
- ^ Page Module:Citation/CS1/styles.css has no content.Cook, Robert L. (April 11, 2019) [1989]. "5. Stochastic Sampling and Distributed Ray Tracing". In Glassner, Andrew S. (ed.). An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Archived (PDF) from the original on January 27, 2024. Retrieved January 27, 2024.
- ^ a b c d e Page Module:Citation/CS1/styles.css has no content.Kajiya, James T. (1986). "The rendering equation". ACM SIGGRAPH Computer Graphics. 20 (4): 143–150. doi:10.1145/15886.15902.
- ^ a b c d Page Module:Citation/CS1/styles.css has no content.Glassner, Andrew S. (April 11, 2019) [1989]. "1. An Overview of Ray Tracing". An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Archived (PDF) from the original on January 27, 2024. Retrieved January 27, 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Arvo, James (August 1986). Backward ray tracing (course notes) (PDF). SIGGRAPH 1986 Developments in Ray Tracing. Vol. 12. Retrieved 5 October 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Dutré, Philip; Bala, Kavita; Bekaert, Philippe (2015). Advanced Global Illumination (2nd ed.). A K Peters/CRC Press. ISBN 978-1-4987-8562-4.
- ^ Page Module:Citation/CS1/styles.css has no content."Unity Manual:Light Probes: Introduction". docs.unity3d.com. Archived from the original on 3 September 2024. Retrieved 27 January 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."Blender Manual: Rendering: EEVEE: Light Probes: Introduction". docs.blender.org. The Blender Foundation. Archived from the original on 24 March 2024. Retrieved 27 January 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Warnock, John (June 1969). A hidden surface algorithm for computer generated halftone pictures (Report). University of Utah. Template:DTIC.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Bouknight, W. J. (1970). "A procedure for generation of three-dimensional half-tone computer graphics presentations". Communications of the ACM. 13 (9): 527–536. doi:10.1145/362736.362739.
- ^ Page Module:Citation/CS1/styles.css has no content.Stamm, Beat (21 June 2018). "The Raster Tragedy at Low-Resolution Revisited: Opportunities and Challenges beyond "Delta-Hinting"". rastertragedy.com. Retrieved 19 September 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Watkins, Gary Scott (June 1970), A Real Time Visible Surface Algorithm, University of Utah, retrieved 19 September 2024
- ^ a b c d e Page Module:Citation/CS1/styles.css has no content.Catmull, Edwin (December 1974). A Subdivision Algorithm for Computer Display of Curved Surfaces (PDF) (PhD thesis). University of Utah. Retrieved 19 September 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Carpenter, Loren (July 1984). "The A-buffer, an antialiased hidden surface method". Computer Graphics. 18 (3): 103–108. doi:10.1145/964965.808585.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Cook, Robert L.; Carpenter, Loren; Catmull, Edwin (August 1987). "The Reyes image rendering architecture". ACM SIGGRAPH Computer Graphics. 21 (4): 95–102. doi:10.1145/37402.37414.
- ^ a b c Page Module:Citation/CS1/styles.css has no content.Arvo, James; Kirk, David (April 11, 2019) [1989]. "6. A Survey of Ray Tracing Acceleration Techniques". In Glassner, Andrew S. (ed.). An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Retrieved 13 September 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Appel, Arthur (1968). "Some techniques for shading machine renderings of solids". Proceedings of the April 30--May 2, 1968, spring joint computer conference on - AFIPS '68 (Spring). p. 37. doi:10.1145/1468075.1468082.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Stich, Martin (February 25, 2019). "Foreword". In Haines, Eric; Akenine-Möller, Tomas (eds.). Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs. Berkeley, CA: Apress. doi:10.1007/978-1-4842-4427-2. ISBN 978-1-4842-4427-2.
- ^ Page Module:Citation/CS1/styles.css has no content.Hanrahan, Pat (April 11, 2019) [1989]. "2. A Survey of Ray-Surface Intersection Algorithms". In Glassner, Andrew S. (ed.). An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Archived (PDF) from the original on January 27, 2024. Retrieved 22 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Liu, Edward; Llamas, Ignacio; Cañada, Juan; Kelly, Patrick (February 25, 2019). "Cinematic Rendering in UE4 with Real-Time Ray Tracing and Denoising". Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs. Berkeley, CA: Apress. doi:10.1007/978-1-4842-4427-2. ISBN 978-1-4842-4427-2.
- ^ Page Module:Citation/CS1/styles.css has no content.Boksansky, Jakub; Wimmer, Michael; Bittner, Jiri (February 25, 2019). "Ray Traced Shadows: Maintaining Real-Time Frame Rates". Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs. Berkeley, CA: Apress. doi:10.1007/978-1-4842-4427-2. ISBN 978-1-4842-4427-2.
- ^ Page Module:Citation/CS1/styles.css has no content."Khronos Blog: Ray Tracing In Vulkan". www.khronos.org. The Khronos Group Inc. December 15, 2020. Retrieved 27 January 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Alain, Riazuelo (March 2019). "Seeing relativity-I: Ray tracing in a Schwarzschild metric to explore the maximal analytic extension of the metric and making a proper rendering of the stars". International Journal of Modern Physics D. 28 (2). arXiv:1511.06025. Bibcode:2019IJMPD..2850042R. doi:10.1142/S0218271819500421.
- ^ Page Module:Citation/CS1/styles.css has no content.Howard, Andrew; Dance, Sandy; Kitchen, Les (1995). Relativistic ray-tracing: simulating the visual appearance of rapidly moving objects. University of Melbourne, Department of Computer Science. OCLC 38400480.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Goral, Cindy M.; Torrance, Kenneth E.; Greenberg, Donald P.; Battaile, Bennett (1984). "Modeling the interaction of light between diffuse surfaces". Proceedings of the 11th annual conference on Computer graphics and interactive techniques. pp. 213–222. doi:10.1145/800031.808601. ISBN 0-89791-138-5.
- ^ a b c Page Module:Citation/CS1/styles.css has no content.Cohen, Michael F.; Wallace, John R. (1993). Radiosity and Realistic Image Synthesis (PDF). Academic Press. ISBN 0-12-178270-0. Retrieved 17 January 2025.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Dutré, Philip (29 September 2003), Global Illumination Compendium: The Concise Guide to Global Illumination Algorithms, retrieved 6 October 2024
- ^ Page Module:Citation/CS1/styles.css has no content.Bekaert, Philippe (1999). Hierarchical and stochastic algorithms for radiosity (Thesis). Department of Computer Science, KU Leuven.
- ^ a b c d e Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "1.6". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Archived from the original on January 27, 2024. Retrieved January 27, 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."Blender Manual: Rendering: Cycles: Introduction". docs.blender.org. The Blender Foundation. Archived from the original on 3 September 2024. Retrieved 27 January 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Kulla, Christopher (30 July 2017), Arnold at Sony Pictures Imageworks: From Monster House to Smurfs: The Lost Village (course slides) (PDF), SIGGRAPH, Los Angeles
{{citation}}: CS1 maint: location missing publisher (link) - ^ a b Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "15. Wavefront Rendering on GPUs". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Archived from the original on January 27, 2024. Retrieved January 27, 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Otte, Vilém (2015). Bi-directional Path Tracing on GPU (PDF) (Master thesis). Masaryk University, Brno.
- ^ Page Module:Citation/CS1/styles.css has no content.Schmidt, Martin; Lobachev, Oleg; Guthe, Michael (2016). "Coherent metropolis light transport on the GPU using speculative mutations". Journal of WSCG. 24 (1): 1–8. hdl:11025/21640.
- ^ Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "5. Further Reading: Denoising". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Archived from the original on January 27, 2024. Retrieved January 27, 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."Blender Manual: Rendering: Cycles: Optimizing Renders: Reducing Noise". docs.blender.org. The Blender Foundation. Archived from the original on 27 January 2024. Retrieved 27 January 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."Blender Manual: Rendering: Cycles: Render Settings: Sampling". docs.blender.org. The Blender Foundation. Archived from the original on 27 January 2024. Retrieved 27 January 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."Intel Open Image Denoise: High-Performance Denoising Library for Ray Tracing". www.openimagedenoise.org. Intel Corporation. Archived from the original on 6 January 2024. Retrieved 27 January 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."NVIDIA OptiX™ AI-Accelerated Denoiser". developer.nvidia.com. NVIDIA Corporation. Archived from the original on 18 January 2024. Retrieved 27 January 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (November 25, 2016). "16. Light Transport III: Bidirectional Methods". Physically Based Rendering: From Theory to Implementation (3rd ed.). Morgan Kaufmann. ISBN 978-0128006450. Retrieved February 9, 2025.
- ^ a b c d e f g h i j k l Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "13. Further Reading". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Retrieved 8 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "16.2 Design Alternatives". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Retrieved December 8, 2025.
- ^ Page Module:Citation/CS1/styles.css has no content.Knapik, Jakub; De Francesco, Giovanni; Zhdan, Dmitrii; Liu, Edward; Makarov, Evgeny; Kennedy, Jon; Marttila, Juho; Murphy, Michael; Hoobler, Nathan; Cheblokov, Tim; Kozlowski, Pawel (2024). "The Evolution of the Real-Time Lighting Pipeline in Cyberpunk 2077". GPU Zen 3: Advanced Rendering Techniques. Black Cat Publishing Inc. pp. 151–245. ISBN 979-8344236797.
- ^ Page Module:Citation/CS1/styles.css has no content.Hertzmann, Aaron (October 8, 2003). Machine Learning for Computer Graphics: A Manifesto and Tutorial (PDF). 11th Pacific Conference on Computer Graphics and Applications. Retrieved May 27, 2026.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "16.3 Emerging Topics". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Retrieved May 27, 2026.
- ^ Page Module:Citation/CS1/styles.css has no content.Evans & Sutherland Multi-Picture System (brochure), Evans & Sutherland Corporation., 1979
- ^ Page Module:Citation/CS1/styles.css has no content."Nagoya City Science Museum - Exhibition Guide - Digistar II". www.ncsm.city.nagoya.jp. Nagoya City Science Museum. Retrieved 13 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."Evans_and_Sutherland Digistar-II". planetariums-database.org. Worldwide Planetariums Database. Retrieved 13 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content."Listing of Planetariums using a Evans_and_Sutherland Digistar-II". planetariums-database.org. Worldwide Planetariums Database. Retrieved 13 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Smith, Alvy Ray (October 1982). "Special Effects for Star Trek II: The Genesis Demo" (PDF). American Cinematographer: 1038. Retrieved 13 September 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Bùi, Tường-Phong (1973). Illumination for Computer-Generated Images (PDF) (PhD thesis). University of Utah.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Peddie, Jon (24 September 2020). "Famous Graphics Chips: Geometry Engine". www.computer.org. Institute of Electrical and Electronics Engineers (IEEE). Retrieved 13 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Clark, James H. (1980). "Structuring a VLSI System Architecture" (PDF). Lambda (2nd Quarter): 25–30.
- ^ Page Module:Citation/CS1/styles.css has no content.Fox, Charles (2024). "11. RETRO ARCHITECTURES: 16-Bit Computer Design with the Commodore Amiga: Understanding the Architecture". Computer Architecture. No Starch Press. ISBN 978-1-7185-0287-1.
- ^ Page Module:Citation/CS1/styles.css has no content."NES Dev Wiki: PPU". www.nesdev.org. nesdev wiki. Retrieved 13 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Harold, David (11 August 2017). "PowerVR at 25: The story of a graphics revolution". blog.imaginationtech.com. Imagination Technologies Limited. Retrieved 13 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Peercy, Mark S.; Olano, Marc; Airey, John; Ungar, P. Jeffrey (2000). "Interactive multi-pass programmable shading". Proceedings of the 27th annual conference on Computer graphics and interactive techniques - SIGGRAPH '00. pp. 425–432. doi:10.1145/344779.344976. ISBN 1-58113-208-5.
- ^ Page Module:Citation/CS1/styles.css has no content."NVIDIA DLSS 3". nvidia.com. NVIDIA Corporation. Retrieved 13 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Lam, Chester (16 April 2021). "Measuring GPU Memory Latency". chipsandcheese.com. Chips and Cheese. Retrieved 13 September 2024.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Gong, Xun; Gong, Xiang; Yu, Leiming; Kaeli, David (2019). "HAWS: Accelerating GPU Wavefront Execution through Selective Out-of-order Execution". ACM Transactions on Architecture and Code Optimization. 16 (2): 1–22. doi:10.1145/3291050.
- ^ Page Module:Citation/CS1/styles.css has no content.Wright, Richard S.; Lipchak, Benjamin (2004). OpenGL SuperBible (3rd ed.). Sams Publishing. ISBN 978-0672326011.
- ^ Page Module:Citation/CS1/styles.css has no content.Gambetta, Gabriel (2021). Computer Graphics from Scratch. No Starch Press. ISBN 978-1-7185-0077-8.
- ^ Page Module:Citation/CS1/styles.css has no content.Torrance, K. E.; Sparrow, E. M. (September 1967). "Theory for Off-Specular Reflection from Roughened Surfaces". Journal of the Optical Society of America. 57 (9): 1105–1114. Bibcode:1967JOSA...57.1105T. doi:10.1364/JOSA.57.001105.
- ^ Page Module:Citation/CS1/styles.css has no content.Warnock, John E. (20 May 1968). A hidden line algorithm for halftone picture representation (Report). Template:CORE output Template:DTIC.
- ^ Page Module:Citation/CS1/styles.css has no content.Gouraud, H. (June 1971). "Continuous Shading of Curved Surfaces". IEEE Transactions on Computers. C-20 (6): 623–629. Bibcode:1971ITCmp.100..623G. doi:10.1109/t-c.1971.223313.
- ^ a b Page Module:Citation/CS1/styles.css has no content."History | School of Computing". Archived from the original on 2013-12-03. Retrieved 2021-11-22.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Phong, Bui Tuong (June 1975). "Illumination for computer generated pictures". Communications of the ACM. 18 (6): 311–317. doi:10.1145/360825.360839.
- ^ Page Module:Citation/CS1/styles.css has no content.Blinn, J.F.; Newell, M.E. (1976). "Texture and reflection in computer generated images". Communications of the ACM. 19 (10): 542–546. doi:10.1145/360349.360353.
- ^ Page Module:Citation/CS1/styles.css has no content.Blinn, James F. (20 July 1977). "Models of light reflection for computer synthesized pictures". ACM SIGGRAPH Computer Graphics. 11 (2): 192–198. doi:10.1145/965141.563893 – via dl.acm.org.
- ^ Page Module:Citation/CS1/styles.css has no content.Crow, Franklin C. (1977). "Shadow algorithms for computer graphics". ACM SIGGRAPH Computer Graphics. 11 (2): 242–248. doi:10.1145/965141.563901.
- ^ Page Module:Citation/CS1/styles.css has no content.Williams, Lance (1978). "Casting curved shadows on curved surfaces". Proceedings of the 5th annual conference on Computer graphics and interactive techniques. pp. 270–274. doi:10.1145/800248.807402. ISBN 978-1-4503-7908-3.
- ^ Page Module:Citation/CS1/styles.css has no content.Blinn, James F. (1978). "Simulation of wrinkled surfaces". ACM SIGGRAPH Computer Graphics. 12 (3): 286–292. doi:10.1145/965139.507101.
- ^ Page Module:Citation/CS1/styles.css has no content.Fuchs, Henry; Kedem, Zvi M.; Naylor, Bruce F. (1980). "On visible surface generation by a priori tree structures". Proceedings of the 7th annual conference on Computer graphics and interactive techniques - SIGGRAPH '80. pp. 124–133. doi:10.1145/800250.807481. ISBN 0-89791-021-4.
- ^ Page Module:Citation/CS1/styles.css has no content.Whitted, T. (1980). "An improved illumination model for shaded display". Communications of the ACM. 23 (6): 343–349. doi:10.1145/358876.358882.
- ^ Page Module:Citation/CS1/styles.css has no content.Cook, Robert L.; Torrance, Kenneth E. (1981). "A reflectance model for computer graphics". ACM SIGGRAPH Computer Graphics. 15 (3): 307–316. doi:10.1145/965161.806819.
- ^ Page Module:Citation/CS1/styles.css has no content.Williams, Lance (1983). "Pyramidal parametrics". Proceedings of the 10th annual conference on Computer graphics and interactive techniques. pp. 1–11. doi:10.1145/800059.801126. ISBN 0-89791-109-1.
- ^ Page Module:Citation/CS1/styles.css has no content.Glassner, A.S. (1984). "Space subdivision for fast ray tracing". IEEE Computer Graphics & Applications. 4 (10): 15–22. Bibcode:1984ICGA....4j..15G. doi:10.1109/mcg.1984.6429331.
- ^ Page Module:Citation/CS1/styles.css has no content.Porter, Thomas; Duff, Tom (1984). "Compositing digital images". Proceedings of the 11th annual conference on Computer graphics and interactive techniques. pp. 253–259. doi:10.1145/800031.808606. ISBN 0-89791-138-5.
- ^ Page Module:Citation/CS1/styles.css has no content.Cook, Robert L.; Porter, Thomas; Carpenter, Loren (1984). "Distributed ray tracing". Proceedings of the 11th annual conference on Computer graphics and interactive techniques. pp. 137–145. doi:10.1145/800031.808590. ISBN 0-89791-138-5.
- ^ Page Module:Citation/CS1/styles.css has no content.Goral, Cindy M.; Torrance, Kenneth E.; Greenberg, Donald P.; Battaile, Bennett (1984). "Modeling the interaction of light between diffuse surfaces". ACM SIGGRAPH Computer Graphics. 18 (3): 213–222. doi:10.1145/964965.808601.
- ^ Page Module:Citation/CS1/styles.css has no content.Nishita, Tomoyuki; Nakamae, Eihachiro (1985). "Continuous tone representation of three-dimensional objects taking account of shadows and interreflection". Proceedings of the 12th annual conference on Computer graphics and interactive techniques - SIGGRAPH '85. pp. 23–30. doi:10.1145/325334.325169. ISBN 0-89791-166-0.
- ^ Page Module:Citation/CS1/styles.css has no content.Cohen, Michael F.; Greenberg, Donald P. (1985). "The hemi-cube: A radiosity solution for complex environments". ACM SIGGRAPH Computer Graphics. 19 (3): 31–40. doi:10.1145/325165.325171.
- ^ Page Module:Citation/CS1/styles.css has no content.Ward, Gregory J.; Rubinstein, Francis M.; Clear, Robert D. (1988). "A ray tracing solution for diffuse interreflection". ACM SIGGRAPH Computer Graphics. 22 (4): 85–92. doi:10.1145/378456.378490.
- ^ Page Module:Citation/CS1/styles.css has no content.Ward, Gregory J. (1994). "The RADIANCE lighting simulation and rendering system". Proceedings of the 21st annual conference on Computer graphics and interactive techniques - SIGGRAPH '94. pp. 459–472. doi:10.1145/192161.192286. ISBN 0-89791-667-0.
- ^ Page Module:Citation/CS1/styles.css has no content.Wu, Xiaolin (1991). "An efficient antialiasing technique". ACM SIGGRAPH Computer Graphics. 25 (4): 143–152. doi:10.1145/127719.122734.
- ^ Page Module:Citation/CS1/styles.css has no content.Wu, Xiaolin (1991). "Fast Anti-Aliased Circle Generation". In James Arvo (ed.). Graphics Gems II. San Francisco: Morgan Kaufmann. pp. 446–450. ISBN 978-0-12-064480-3.
- ^ Page Module:Citation/CS1/styles.css has no content.Hanrahan, Pat; Salzman, David; Aupperle, Larry (1991). "A rapid hierarchical radiosity algorithm". Proceedings of the 18th annual conference on Computer graphics and interactive techniques. pp. 197–206. doi:10.1145/122718.122740. ISBN 0-89791-436-8.
- ^ Page Module:Citation/CS1/styles.css has no content.Oren, Michael; Nayar, Shree K. (1994). "Generalization of Lambert's reflectance model". Proceedings of the 21st annual conference on Computer graphics and interactive techniques - SIGGRAPH '94. pp. 239–246. doi:10.1145/192161.192213. ISBN 0-89791-667-0.
- ^ Page Module:Citation/CS1/styles.css has no content.Tumblin, J.; Rushmeier, H. (November 1993). "Tone reproduction for realistic images". IEEE Computer Graphics and Applications. 13 (6): 42–48. Bibcode:1993ICGA...13f..42T. doi:10.1109/38.252554.
- ^ Page Module:Citation/CS1/styles.css has no content.Hanrahan, Pat; Krueger, Wolfgang (1993). "Reflection from layered surfaces due to subsurface scattering". Proceedings of the 20th annual conference on Computer graphics and interactive techniques. pp. 165–174. doi:10.1145/166117.166139. ISBN 0-89791-601-8.
- ^ Page Module:Citation/CS1/styles.css has no content.Lafortune, Eric; Willems, Yves (December 1993). "Bi-directional path tracing" (PDF). Proceedings of Third International Conference on Computational Graphics and Visualization Techniques (CompuGraphics). pp. 145–153. Archived (PDF) from the original on 21 May 2022. Retrieved 2 September 2024.
- ^ Page Module:Citation/CS1/styles.css has no content.Miller, Gavin (1994). "Efficient algorithms for local and global accessibility shading". Proceedings of the 21st annual conference on Computer graphics and interactive techniques - SIGGRAPH '94. pp. 319–326. doi:10.1145/192161.192244. ISBN 0-89791-667-0.
- ^ Page Module:Citation/CS1/styles.css has no content.Jensen, Henrik Wann; Christensen, Niels Jørgen (March 1995). "Photon maps in bidirectional Monte Carlo ray tracing of complex objects". Computers & Graphics. 19 (2): 215–224. doi:10.1016/0097-8493(94)00145-O.
- ^ Page Module:Citation/CS1/styles.css has no content.Veach, Eric; Guibas, Leonidas J. (1995). "Optimally combining sampling techniques for Monte Carlo rendering". Proceedings of the 22nd annual conference on Computer graphics and interactive techniques - SIGGRAPH '95. pp. 419–428. doi:10.1145/218380.218498. ISBN 0-89791-701-4.
- ^ a b Page Module:Citation/CS1/styles.css has no content.Veach, Eric; Guibas, Leonidas J. (1997). "Metropolis light transport". Proceedings of the 24th annual conference on Computer graphics and interactive techniques - SIGGRAPH '97. pp. 65–76. doi:10.1145/258734.258775. ISBN 0-89791-896-7.
- ^ Page Module:Citation/CS1/styles.css has no content.Keller, Alexander (1997). "Instant radiosity". Proceedings of the 24th annual conference on Computer graphics and interactive techniques - SIGGRAPH '97. pp. 49–56. doi:10.1145/258734.258769. ISBN 0-89791-896-7.
- ^ Page Module:Citation/CS1/styles.css has no content.Sloan, Peter-Pike; Kautz, Jan; Snyder, John (2002). "Precomputed radiance transfer for real-time rendering in dynamic, low-frequency lighting environments". Proceedings of the 29th annual conference on Computer graphics and interactive techniques. pp. 527–536. doi:10.1145/566570.566612. ISBN 1-58113-521-1.
- ^ Page Module:Citation/CS1/styles.css has no content.Kelemen, Csaba; Szirmay-Kalos, László; Antal, György; Csonka, Ferenc (September 2002). "A Simple and Robust Mutation Strategy for the Metropolis Light Transport Algorithm". Computer Graphics Forum. 21 (3): 531–540. doi:10.1111/1467-8659.t01-1-00703.
- ^ Page Module:Citation/CS1/styles.css has no content.Matusik, Wojciech; Pfister, Hanspeter; Brand, Matt; McMillan, Leonard (2003). "A data-driven reflectance model". ACM Transactions on Graphics. 22 (3): 759–769. doi:10.1145/882262.882343. hdl:1721.1/87454.
- ^ Page Module:Citation/CS1/styles.css has no content.Walter, Bruce; Fernandez, Sebastian; Arbree, Adam; Bala, Kavita; Donikian, Michael; Greenberg, Donald P. (2005). "Lightcuts: A scalable approach to illumination". ACM Transactions on Graphics. 24 (3): 1098–1107. doi:10.1145/1073204.1073318.
- ^ Page Module:Citation/CS1/styles.css has no content.Krivanek, J.; Gautron, P.; Pattanaik, S.; Bouatouch, K. (September 2005). "Radiance Caching for Efficient Global Illumination Computation". IEEE Transactions on Visualization and Computer Graphics. 11 (5): 550–561. Bibcode:2005ITVCG..11..550K. doi:10.1109/TVCG.2005.83. PMID 16144252.
- ^ Page Module:Citation/CS1/styles.css has no content.Hachisuka, Toshiya; Jensen, Henrik Wann (2009). "Stochastic progressive photon mapping". ACM SIGGRAPH Asia 2009 papers. pp. 1–8. doi:10.1145/1661412.1618487. ISBN 978-1-60558-858-2.
- ^ Page Module:Citation/CS1/styles.css has no content.Georgiev, Iliyan; Křivánek, Jaroslav; Davidovič, Tomáš; Slusallek, Philipp (2012). "Light transport simulation with vertex connection and merging". ACM Transactions on Graphics. 31 (6): 1–10. doi:10.1145/2366145.2366211.
- ^ Page Module:Citation/CS1/styles.css has no content.Hachisuka, Toshiya; Pantaleoni, Jacopo; Jensen, Henrik Wann (2012). "A path space extension for robust light transport simulation". ACM Transactions on Graphics. 31 (6): 1–10. doi:10.1145/2366145.2366210.
- ^ Page Module:Citation/CS1/styles.css has no content."RenderMan 26 Documentation: PxrVCM". pixar.com. Pixar. 16 July 2024. Retrieved 11 February 2025.
- ^ Page Module:Citation/CS1/styles.css has no content.Jakob, Wenzel; Marschner, Steve (5 August 2012). "Manifold exploration: a Markov Chain Monte Carlo technique for rendering scenes with difficult specular transport". ACM Transactions on Graphics. 31 (4): 1–13. doi:10.1145/2185520.2185554.
- ^ Page Module:Citation/CS1/styles.css has no content.Lehtinen, Jaakko; Karras, Tero; Laine, Samuli; Aittala, Miika; Durand, Frédo; Aila, Timo (21 July 2013). "Gradient-domain metropolis light transport". ACM Transactions on Graphics. 32 (4): 1–12. doi:10.1145/2461912.2461943.
- ^ Page Module:Citation/CS1/styles.css has no content.Hachisuka, Toshiya; Kaplanyan, Anton S.; Dachsbacher, Carsten (27 July 2014). "Multiplexed metropolis light transport". ACM Transactions on Graphics. 33 (4): 1–10. doi:10.1145/2601097.2601138.
- ^ Page Module:Citation/CS1/styles.css has no content.Loper, Matthew M.; Black, Michael J. (2014). "OpenDR: An Approximate Differentiable Renderer". Computer Vision – ECCV 2014. Lecture Notes in Computer Science. Vol. 8695. pp. 154–169. doi:10.1007/978-3-319-10584-0_11. ISBN 978-3-319-10583-3.
- ^ Page Module:Citation/CS1/styles.css has no content.Hanika, Johannes; Droske, Marc; Fascione, Luca (27 July 2015). "Manifold Next Event Estimation". Computer Graphics Forum (Proceedings of the 2015 Eurographics Symposium on Rendering). 34 (4): 87–97. doi:10.1111/cgf.12681.
- ^ a b Page Module:Citation/CS1/styles.css has no content."RenderMan 26 Documentation: PxrUnified". pixar.com. Pixar. 21 June 2024. Retrieved 11 February 2025.
- ^ Page Module:Citation/CS1/styles.css has no content.Müller, Thomas; Gross, Markus; Novák, Jan (July 2017). "Practical Path Guiding for Efficient Light-Transport Simulation". Computer Graphics Forum. 36 (4): 91–100. doi:10.1111/cgf.13227.
- ^ Page Module:Citation/CS1/styles.css has no content.Bitterli, Benedikt; Wyman, Chris; Pharr, Matt; Shirley, Peter; Lefohn, Aaron; Jarosz, Wojciech (31 August 2020). "Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting". ACM Transactions on Graphics. 39 (4). doi:10.1145/3386569.3392481.
Further reading
Recent books
- Page Module:Citation/CS1/styles.css has no content.Akenine-Möller, Tomas; Haines, Eric; Hoffman, Naty; Pesce, Angelo; Iwanicki, Michał; Hillaire, Sébastien (2018). Real-Time Rendering (4th ed.). Boca Raton, FL: A K Peters/CRC Press. ISBN 978-1138627000.
- Page Module:Citation/CS1/styles.css has no content.Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026.
- Page Module:Citation/CS1/styles.css has no content.Dutré, Philip; Bala, Kavita; Bekaert, Philippe (2015). Advanced Global Illumination (2nd ed.). A K Peters/CRC Press. ISBN 978-1-4987-8562-4.
- Page Module:Citation/CS1/styles.css has no content.Hughes, John F.; Van Dam, Andries; McGuire, Morgan; Sklar, David F.; Foley, James D.; Feiner, Steven K.; Akeley, Kurt (2014). Computer graphics: principles and practice (3rd ed.). Addison-Wesley. ISBN 978-0-321-39952-6.
- Page Module:Citation/CS1/styles.css has no content.Marschner, Steve; Shirley, Peter (2022). Fundamentals of Computer Graphics (5th ed.). CRC Press. ISBN 978-1-003-05033-9.
Older books
- Page Module:Citation/CS1/styles.css has no content.Raghavachary, Saty (2005). Rendering for Beginners. Focal Press. ISBN 0-240-51935-3.
- Page Module:Citation/CS1/styles.css has no content.Glassner, Andrew S. (2011) [1995]. Principles of digital image synthesis (PDF). 1.0.1. Morgan Kaufmann Publishers, Inc. ISBN 978-1-55860-276-2. Archived (PDF) from the original on 2024-01-27. Retrieved 2024-01-27.
- Page Module:Citation/CS1/styles.css has no content.Glassner, Andrew S. (April 11, 2019) [1989]. An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Archived (PDF) from the original on January 27, 2024. Retrieved January 27, 2024.
- Page Module:Citation/CS1/styles.css has no content.Cohen, Michael F.; Wallace, John R. (1993). Radiosity and Realistic Image Synthesis (PDF). Academic Press. ISBN 0-12-178270-0.
Non-photorealistic rendering
- Page Module:Citation/CS1/styles.css has no content.Gooch, Bruce; Gooch, Amy (2001). Non-Photorealistic Rendering. A K Peters. ISBN 978-1-56881-133-8.
- Page Module:Citation/CS1/styles.css has no content.Strothotte, Thomas; Schlechtweg, Stefan (2002). Non-Photorealistic Computer Graphics. Morgan Kaufmann. ISBN 978-1-55860-787-3.
Online tutorials (also available as books)
- Page Module:Citation/CS1/styles.css has no content.de Vries, Joey. "Learn OpenGL". learnopengl.com.
- Page Module:Citation/CS1/styles.css has no content.Shirley, Peter; Black, Trevor D.; Hollasch, Steve. "Ray Tracing in One Weekend (series)". raytracing.github.io.
External links
Page Module:Side box/styles.css has no content.Page Template:Sister project/styles.css has no content.
Page Module:Side box/styles.css has no content.Page Template:Sister project/styles.css has no content.
- vintage3d.org "The way to home 3d" – Extensive history of computer graphics hardware, including research, commercialization, and video games and consoles
Lua error in package.lua at line 80: module 'Module:Navbox/configuration' not found. Lua error in package.lua at line 80: module 'Module:Navbox/configuration' not found. Lua error in package.lua at line 80: module 'Module:Navbox/configuration' not found. Lua error in package.lua at line 80: module 'Module:Authority control/config' not found.