Disclaimer: I am by no means an expert on the topic of rendering, I am simply posting what I understand and basic topics related to rendering. Feel free to correct me if I’m wrong below in the comments!
What is “Rendering?”
Rendering is the process of producing an image from a scene, object or model. Scenes, objects, and models are data structures that contain a ton of information on what they are supposed to represent. This includes geometry, viewpoint, lighting, shading, textures and all sorts of descriptive data on the scene. This data is used to create an image of what it is intended to be. This information is often passed through a computer’s GPU which creates an output of the object.
Rendering is used in any case that requires 3D computer graphics.
Cool, well that sounds pretty easy. Guess there isn’t much on this topic. Can we move onto something else?
False. There is plenty to know when it comes to rendering. Rendering can also take a variety of times depending on what is being rendered. Different techniques and application are used for rendering.
Rendering in Video Games vs. Movies
In 3D graphics, people often think of 3D animated films or video games. 3D animated films use pre-rendering which renders every single frame of the movie and saves it for later where it it stitched into the movie itself. This is very computer intensive process, which is why animating firms such as Pixar have what we call, “rendering farms” or “server farms” which are giant buildings that contain several high end computers/servers that crunch down on rendering processes. Even having such large resources to do the rendering, it can still take a significant time to render an entire movie.
A good example is in an article in Wired.com, it said it took 7 hours to render a single frame in Toy Story 3. 7 hours! PER FRAME! According to the article it took 1084 days to make the movie. No wonder why it takes so long when rendering is such an time consuming activity.
Video games on the other hand use real-time rendering, but if we’re doing it in “real-time” wouldn’t we need super duper intense computers to render each frame in real time?
No. Real time rendering uses simplified approximations in the data (approximations) to keep things simple and render quicker on the screen. Movie scenes each have very exact values that need to be rendered to look “perfect” on the big screen.
Real time rendering screenshot of Final Fantasy XIII. Notice the flat grass texture, simplified scenes to render quicker! Not every blade of grass is rendered, only important objects.
Pre-rendered scene from Final Fantasy XIII. Notice that this is way more detailed, every hair on Lightning is rendered. These types of scenes are often cutscenes and not times where players can interact.
Techniques of Rendering:
Ray Casting
Ray casting parses the information in scene files pixel by pixel, line by line from the point of view outward. Imagine rays are being cast from the point of view. Ray casting uses rough simulations for things such as optical properties, lighting etc. In addition color of scenes can be based on using texture maps. This type of rendering is often used for real time simulations such as games or any application where extreme detail is not priority/important. This technique is not as computationally costly as ray tracing.
Ray Tracing
This technique aims to use the natural flow of light on the scene. Light is interpreted as particles when a scene is being rendered. This technique has several other topics within it that I will not discuss such as path tracgin, Monte Carlo methods, Bidirectional path tracing and much more. This method is very costly because of how much needs to be calculated to create a photo realistic image. This technique is too slow to be used in real time applications for the average consumer (we don’t all own super computers!)
Scanline rendering and rasterization
Sort of like ray casting, but instead of a pixel by pixel approach to rendering, this uses a primitive to primitive rendering approach. This would mean it would render triangles to triangles as an example. By going through each primitive, the computer will decide how this affects pixels on the screen and will modify the pixel accordingly to the primitive. This approximation is called rasterization and is used by all current GPUs. This technique is faster than going pixel to pixel because primitives can take up a large area of pixels and rasterization ignores all empty areas so it does not need to render those pixels. This is a quick technique, though it provides a lesser-quality image versus ray casting (pixel by pixel).
Other info:
There are so many other topics for rendering such as radiosity, sampling and filtering (anti-aliasing). This will be all I will be going over this blog post though. Stay tuned for more though!