Rendering in Unity
Verbatim extracts from https://learn.unity.com/tutorial/introduction-to-lighting-and-rendering#5c7f8528edbc2a002053b52c
Choosing a Rendering Path
Unity supports a number of rendering techniques, or ‘paths’.
An important early decision which needs to be made when starting a project is
which path to use. Unity’s default is 'Forward Rendering”.
Forward Rendering
In Forward Rendering, each object is rendered in a ‘pass’
for each light that affects it. Therefore each object might be rendered
multiple times depending upon how many lights are within range.
The advantages of this approach is that it can be very fast
- meaning hardware requirements are lower than alternatives. Additionally,
Forward Rendering offers us a wide range of custom ‘shading models’ and can
handle transparency quickly. It also allows for the use of hardware techniques
like ‘multi-sample anti-aliasing’ (MSAA) which are not available in other
alternatives, such as Deferred Rendering which can have a great impact on image
quality.
However, a significant disadvantage of the forward path is
that we have to pay a render cost on a per-light basis. That is to say, the
more lights affecting each object, the slower rendering performance will
become. For some game types, with lots of lights, this may therefore be
prohibitive. However if it is possible to manage light counts in your game,
Forward Rendering can actually be a very fast solution.
Deferred Rendering
In 'Deferred' rendering, on the other hand, we defer the
shading and blending of light information until after a first pass over the
screen where positions, normals, and materials for each surface are rendered to
a ‘geometry buffer’ (G-buffer) as a series of screen-space textures. We then
composite these results together with the lighting pass. This approach has the
principle advantage that the render cost of lighting is proportional to the
number of pixels that the light illuminates, instead of the number of lights
themselves. As a result you are no longer bound by the number of lights you
wish to render on screen, and for some games this is a critical advantage.
Deferred Rendering gives highly predictable performance
characteristics, but generally requires more powerful hardware. It is also not
supported by certain mobile hardware.
For more information on the Deferred, Forward and the other
available rendering paths, please see the documentation here.
Choosing a Color Space
In addition to selecting a rendering path, it’s important to
choose a ‘Color Space’ before lighting your project. Color Space determines the
maths used by Unity when mixing colors in lighting calculations or reading
values from textures. This can have a drastic effect on the realism of your
game, but in many cases the decision over which Color Space to use will likely
be forced by the hardware limitations of your target platform.
Linear Color Space
The preferred Color Space for realistic rendering is Linear.
This can be selected using the ‘Color Space’ property from (Edit>Project
Settings>Player).
A significant advantage of using Linear space is that the
colors supplied to shaders within your scene will brighten linearly as light
intensities increase. With the alternative, ‘Gamma’ Color Space, brightness
will quickly begin to turn to white as values go up, which is detrimental to
image quality.
Image comparing objects lit using Linear and Gamma Color Space. Notice how colors quickly turn to white as light intensities increase using the Gamma Color Space.
Another main benefit of Linear is that shaders can also
sample textures without Gamma (midtone) compensation. This helps to ensure that
color values remain consistent throughout their journey through the render
pipeline. The result is increased accuracy in color calculations with improved
overall realism in the eventual screen output
Gamma Color Space
Unfortunately Linear Color Space is not supported by some
mobile hardware and even certain games consoles. In these instances, Gamma must
be used instead. Linear is currently supported on PC, newer mobile hardware and
current generation consoles.
It’s important to confirm that your target platform supports
your selected Color Space before proceeding.
Comments
Post a Comment