Rendering

You mention shadow mapping in the feature list - any insight in the technique you're using there by default? And also, is there any other shadowing trick that ships with the engine, or that you are excited about?

Dan Amerson: Gamebryo is designed to be very flexible, so we're not limited to a single technique for shadowing. Gamebryo ships with samples that show how to integrate shadowing using high-resolution shadow maps and 4 sample percentage closest filtering. Our shader and material system currently allows developers to implement any technique that they wish-and they can even mix those techniques at run time.

Gamebryo 2.3 will go even further toward integrating shadowing techniques with our standard material. We've designed the system with a number of techniques in mind, including variance shadow maps and cascading shadow maps. In Gamebryo 2.3, we hope to provide an implementation for standard shadow maps using percentage closest filtering with variable sized kernels as well as an implementation for variance shadow maps. Other techniques will be added to the system as the product evolves.

How's blurring achieved? You say it's a full-screen shader effect; is it a velocity buffer? There are a variety of techniques out there; it would be interesting to know about the one(s) you've implemented, including its tradeoffs and advantages.

DA: Again, since Gamebryo is so flexible you can implement any technique available. For our GDC 2005 demo, we implemented two Gaussian blurring techniques. These techniques weren't velocity-based-they were image-based and were used in conjunction with the HDR rendering pipeline. For example, the blooming used the HDR scene as rendered to texture and isolated the highest intensity pixels. Those results were blurred in two full-screen passes using a 5x5 separable Gaussian blur to generate the soft blooms from high-intensity lights.

For velocity based blurring, there are a number of techniques easily achieved with Gamebryo. One of the simplest and most efficient techniques renders each frame to texture and uses the alpha blending hardware to blend the current frame with the previous frame. Since the previous frame only contributes a fraction of its color to the current rendered frame, the contributions from blurred objects asymptotically approach zero. In practice, their contribution is lost after just a few frames. This technique was actually widely used on previous generation consoles because you need very little extra information, and it can even be achieved without pixel shading hardware.

HDR: In Oblivion, this is done via a FP16 frame buffer as far as we can see - any specific trick people might not know about? With DX10 cards coming and supporting more exotic formats such as RGBE and FP10, are you excited about those? Do you think they'll improve visual quality, or at least performance?

DA: Sorry, we can't comment directly on our clients' work. But I can say that we are very excited about D3D10. Our lead DirectX rendering engineer, Tim Preston, is hard at work developing a Gamebryo renderer utilizing D3D10, and we plan on showing this renderer at GDC The design for the renderer includes support for the new D3D10 formats. We hope to use these new formats to improve both performance and quality. Beyond that, we aren't prepared to say anything specific about what we're doing with these formats.

We've certainly seen improvements on other platforms. For example, Xbox 360 has a 32-bit format that stores a condensed floating point representation of color. We were able to convert rendering paths to use this specialized format as opposed to a standard FP16 format. This conversion resulted in a virtually identical image using half of the bandwidth and provided an excellent boost to our frame rates.

Batching/Culling: Is there anything you can say about the techniques used that'd be worth explaining, both in terms of technology and effective results? I'd imagine it's a scene graph and some further packing if things are similar, and that culling is frustum + portal-based? Is there anything specific to be said about the portals? Does it also help for outdoor environments?

DA: The default culling behavior of Gamebryo uses hierarchical frustum culling, and we also support portal based rendering. The portal system provides excellent performance boosts primarily for indoor scenes.

The interesting feature in the Gamebryo culling system is that culling is entirely driven by a culling process object that can be replaced to provide custom culling implementations. Users are not limited to the behavior that ships with the engine. They can customize their own behaviors based off their usage or even integrate third party solutions if they want. As an example, we modified the culling process in one of our sample applications to use occlusion planes for the determination of visible objects. It was a very easy change to make to the system because of the flexibility provided within Gamebryo. For customers with extra-special requirements, Gamebryo is so flexible they can use a very focused tool such as Umbra's visibility system.

Level of Detail: One of the things that many people think is quite inefficient in Oblivion is that some objects don't even have LODs, or at least not sufficiently low polygon counts there. Obviously that's artist-dependant and not engine-dependant, but is there anything specific about the engine that might still make it easier?

DA: Gamebryo supports mesh LOD and bone LOD in the engine. Artists can set these features up in 3d Studio Max and Maya and preview them in our tool chain.