Amplify Beta 2 (final) is up

The second major, and final, public beta of Amplify is finally out. This time we add variable bit rate texture compression, a bunch of performance and memory optimizations, but most importantly the rock solid stability we needed for a commercial release.

The showcase demo is also coming along nicely. Only a couple more weeks to go.

More details regarding the release can be found in the Amplify thread at the Unity Community Forums.

More info soon.

Windows 8, .NET and XNA

Around a month ago Microsoft announced that Windows 8 would be a cross platform operating system. It will end up supporting x86 and ARM SoC, the two current major architectures in personal computing.

How exactly will Microsoft will handle deployment for such different platforms is up for speculation. Personally, I’m expecting a combination of immediate legacy x86 translation, short-term Mac style fat binary bundles and a big push towards pure .NET applications. I believe the latter is inevitable and a good bet for game development as a long term solution.

This is happening at a time where high performing 3D graphics are becoming ubiquitous in netbooks, tablets and even smartphones. Not only will these games run on every device and reach a wider and expanding market, they will also look amazing. This is where XNA comes in.

I’ve got a copy of “3D Graphics with XNA Game Studio 4.0” by Sean James (Packt Publishing) on the way:

According to the description, the book is “a step-by-step guide to adding the 3D graphics effects used by professionals to your XNA games”. I’ll be posting a review of this book soon for to those of you interested in learning a bit, or a bit more about XNA.

Amplify Beta is up

The public beta of Amplify, the virtual texturing plugin for Unity Pro, is now open.

Learn more at:
http://diogo.codingcorner.net/amplify

Virtual Texturing in Unity

After a year or so of on/off development, this project finally reached a reasonably mature alpha state. What I’ve been working on is a Sparse Virtual Texturing extension for Unity.


Workflow Overview (Full HD)


Scale Demo (Full HD)

Current features:
- Virtual textures up to 512K x 512K.
- Seamless integration with Unity Editor.
- Real-time WYSIWYG editing.
- Per-material diffuse+coverage, normal and glossiness textures.
- Per-material textures larger than 4K x 4K.
- Texture repeat / tiling.
- Trilinear filtering.

Q&A at Unity Community Forums

Public beta sign up will start towards the end of this month, Dec. 2010. The first beta build is planned for Q1 2011.

This project is built in partnership with Zona Paradoxal, Lda.

Fluid Simulation

Just came across a very cool looking fluid simulation using DX11/DirectCompute, by Jan Vlietinck. It solves solves the Navier- Stokes differential equations to simulate an incompressible fluid, using either a Semi-Lagrangian scheme or the second order MacCormack technique.

On the rendering side, ray marching on the 200x200x200 volume shows the amplitude of the maximum speed vectors:

A demo, including source code, can be found at the author’s website:
http://users.skynet.be/fquake/

CryEngine 3 – Global Illumination

Crytek finally revealed details about their diffuse global illumination technique. Papers and videos can be found here.

It seems to be loosely based on irradiance volumes, instant radiosity and photon mapping. Part of this clever approach was presented by Alex Evans back at Siggraph 2006, where he discussed fast lighting approximations using irradiance slices. Anton Kaplanyan, who developed this technique at Crytek, went even further by improving quality and tackling scalability issues.

Instant radiosity works by using virtual point lights to approximate global illumination. To get decent quality out of IR, hundreds (if not thousands) of virtual point lights need to be generated. Kaplanyan opted for reflective shadow maps, a GPU friendly way of generating VPLs. Due to high fillrate demands, however, even deferred lighting wasn’t fast enough for the huge number of VPLs required. This is where light propagation volumes (or radiance volumes) came in very handy.

VPL SH-based radiance info is injected into the radiance volumes using point based rendering. Light is then propagated in the volume using the computed outgoing radiance flux. During the lighting pass the volume textures can be sampled directly, anywhere in the scene, in order to generate the lighting contribution, at each point, from the SH coefficients. Check the paper for a detailed explanation of the process.

Normal mapped surfaces, and even glossy reflections, are supported. Cascaded volumes are used when dealing with larger scenes. To improve the quality for local, more high frequency details, this approach is combined with screen space global illumination.

The performance, even on consoles, is very good and fairly stable due to the nature of the technique. Quality should scale very well with memory/hardware.

All in all, a very fast, current-gen, console-friendly approach to diffuse GI for dynamic scenes.

Last day at Splash Damage

Yesterday was my last day at Splash Damage. It’s been a great ride but it’s time for me to move on. I miss my girlfriend, my family, the warmth of the motherland and an infinite urge to dedicate my peak productive years to personal endeavours. I’ve learned a lot over the past year and I would like to personally thank everyone at SD: I’m sure Brink will become a kick ass game, thanks to all your effort.

That said, I am currently “on holiday”, arranging my move back to Portugal. My personal work is on hold; I’ll get back to it as soon as I have some stability.

Feel free to contact me if you’re interested in discussing business opportunities.

Raytracing

In the last couple of weeks I began researching into high quality global illumination rendering. I finally started reading “Physically Based Rendering” by Pharr et al., which was kindly donated by Luis Alvarado. A few months ago I devoured “Realistic Image Synthesis Using Photon Mapping” by Jensen; it’s an excellent book. I’ve been wanting to do this for a while now because GI is growing more relevant to real-time rendering at an accelerated rate.

The first step was to build a framework to read and process scene information. I decided to go for FBX; turns out the sdk is a bit dodgy but functional. The next step was to build an acceleration structure and a raytracing core and this is what I’m working on right now. Here’s the first image with basic diffuse lighting and shadows from a point light:

cornellbox_basic

It took around 3.8 seconds at 140K rays/second (including shading). I have my Centrino Duo mobile CPU down clocked to 1GHz because of overheating; this will force me to optimize the raytracing core before I can start investing time on something like path tracing. The next step is to replace the Octree with a KdTree or BVH with both mono and packed ray traversal. My goal is to achieve a minimum of 2 million rays/second per-core on the same scene.

Real-time photorealistic rendering

Randomcontrol, the makers of fryrender, recently announced “fryrenderRT” the first commercial unbiased render engine with real-time visualization capabilities. They provide a player app that allows you to move the camera freely within a pre-computed scene and still have view-dependent glossy surfaces behaving accurately; pre-computing scenes with unbiased lighting may take up to hours or even days.

Here’s a sneak peek showing off glossy materials:

From what I’ve gathered it seems to work by storing global lighting information at each point (vertex/texel), much like the Precomputed Radiance Transfer techniques currently used in games. These tend to focus on Spherical Harmonic encoding due to efficient representation of low frequency lighting; it’s possible that RC’s technique is similar but instead based on encoding of nonlinear wavelets or gaussians which have been shown to work well for all-frequency relighting.

What does this mean for games?
- The video above runs on a mid-range ATI 4850 at 20 frames per second which is VERY promising.
- Static geometry is also a limitation for light maps.
- The high offline rendering times already exist when developing games that rely on high-quality directional or SH-based lightmaps. However, a biased version of the offline renderer could help reduce the hardware costs and generate good enough results for most games.
- Local memory requirements are certainly much higher than lightmaps. However, more compact representations trading quality for memory footprint could be used. e.g. partial wavelet coefficients.
- Local memory on GPUs will eventually outpace or be merged with system ram. A virtual page-based approach could also be used to help keep most of the data in disk.

I believe this technique has potential for use in games in the near future. These could very well be the next generation light maps.

Instant Radiosity

I’ve been following the state of real-time Instant Radiosity for a while now. I see it as one of the best options for a gpu-friendly transition to more complex global illumination techniques like photon mapping. Unfortunately I never got around to implement it myself in order to verify it’s feasibility. Today I stumbled upon one of the best examples so far:

Flavien Brebion, aka Ysaneya, is the guy behind Infinity. He is also the guy behind the bold attempt at Instant Radiosity in the shots above. In his journal he talks about the technique and provides some statistics on its effectiveness when combined with deferred lighting. Follow this link to read all about it.

←Older