This was from a presentation by Antti Hätälä, from
Umbra Software, at MIGS (Montreal International Game Summit) 2013.
Intro
What do many
next gen games have in common? Is the improvements over graphics, such as
better shaders, higher textures and more polygons being pushed? Well yes, but
almost all the next gen games use a powerful software called Umbra 3.
What is Umbra3
Umbra in some languages means shadow, a name similar to its
purpose: occlusion culling. Occlusion culling is simply not rendering objects
which the player does not see.
Umbra3 is a middleware for 3D games, which specifically does
this. Its true purpose is “powering up” level creation/ rendering saving game
developers precious time and resources.
Why use occlusion culling
Using occlusion culling will save on A LOT of memory, memory which you can use for many
things. You can use this memory to stream better detail in the world, such as
textures and models. Physics, and AI can have more leeway, allow for more
enemies/objects. Most importantly is improved game performance, not just for
the higher end PCs, but also for the lower end PCs and consoles.
Ways of doing Occlusion Culling Today(Pros and Cons)
1- Use a set amount of geometry to act as a mask occluding
the view of the player. This mask is easy for the developers to specify, and
provides flexibility. However this can be easily desynchronized from the
player’s view, and will result in many artifacts. A case of this would be when
the user spins the camera too fast, the occlusion isn’t done fast enough, and/or
creates artifacts.
2- Use of algorithms based on what is seen from the user’s perspective
to determine what shouldn’t be draw. This doesn’t really on any 3D assets, and
all on the code of the programmer. The major issue with this is that is non-automatic
and is relies heavily on the CPU.
3- Use the portals and cells method, which involves pre-setting
a bunch of rooms aka cells, and window aka portals. Nothing outside cell the
user is in will be rendered, but only if the user looks through a portal. The
issue with this one is fact this is only good for indoor environments, and
cannot be applied to a large field. Also this involves the time consuming
process of placing Cells and Portals throughout the finished level.
4- Finally there is the PVS method- (potiental visiblitly
set). Basically it involves creating separate software to precompute what
objects will be visible from any spot. Once the software is done, it is
automatic, and generally artifact free. However the major issue is when you put
in a large world, the PVS could take days-weeks to render. In short despite its
flexibility in type of level, this method will limit the scale of the level.
How Umbra 3 does it
Using Umbra, was explained to be a 2 step process
First is the local step of precomputing a visibility map
This is a map of the whole level,
which is done ONLY for non-dynamic objects. This map would be generated offline
from separate software, and would be fed into the game prior to running it. The
reason why this works well is the fact the map, no matter the size, is turned
into voxels. This eliminates the issue of having high poly maps, and even large
scale ones, while maintaining a good quality.
From here the software constructs
the map, using portals and cells, using the following method.
1- group together
empty voxels
2- Collect all the voxels within cells
3-Gerate portals between
cells
4- remove portals not contributing
to the occlusion
5- extract the view location.
After this you have a nice map
which will give you the Tome of the Level.
Second there is run methods
There are many methods which the
software uses at run to improve exsisting methods of Occlusion culling. Breath
first traversal is done of the portals rather than recursive, so we don’t waste
memory. The occlusion resolution isn’t rasterized, rather portals are
rasterized. With this there is a 1-bit visibily maintained per cell when
looking through any portal. The rasterized a depth buffer is used to determine
the details of any object found in this buffer. This way objects can properly
increase and lower in detail with their distance, if wanted from the game
developer. Finally because the world is split into cells, you can stream in
these blocks that are required for visibility queries.
Conclusion
In the end Umbra will reduce run time memory, allowing other
processes to be done for the game. These processes can allow for greater emersion
in the or even better performance. With this, artist can now put in more levels
of detail within the level, while level designers have greater freedom with
tool to create better levels. the target frame rates while enabling a new level
of artistic freedom and rapid content iteration times for these projects
No comments:
Post a Comment