G-Warp
Hi All,
After doing the ray tracing demo, I wondered if any of the optimisation I used there could be applied to rasterization. In the ray tracer, I warped the rays I shot out, avoiding the need to do an oversized image and a post process warp.
This worked very well. In fact I'd be inclined to do a whole engine on RT at some point in the future (possibly based on a hybrid Rasterisation / RT thing, much like the recently announced Wizard GFX design from imagination tech).
This lead me to thinking on how I could avoid losing the 'warp the rays' advantage.
So my idea is to warp the G-Buffer instead. The theory goes like this, the oversized buffer is to accommodate the greater resolution in the middle of the warp, but ends up throwing away a lot of the extra detail around the edges. Since most of the processing power goes into shading, you warp, then shade, i.e:
1. Render to oversized G-Buffer
2. Warp to target sized G-Buffer
3. Shade the smaller target (ignoring the black borders outside the distortion).
4. Do image correction such as Chromatic, Fading etc.
If it works it should avoid some of the performance issues with rendering to the Rift, which will only get worse with higher framerates and higher resolutions.
Possible problems:
1. Screen space techniques may not work properly once warped. (That said, it wouldn't impact the hybrid RT solution since it doesn't use SS).
2. Warping the G-Buffer may take more steps than warping the final image would.
Any thoughts?
After doing the ray tracing demo, I wondered if any of the optimisation I used there could be applied to rasterization. In the ray tracer, I warped the rays I shot out, avoiding the need to do an oversized image and a post process warp.
This worked very well. In fact I'd be inclined to do a whole engine on RT at some point in the future (possibly based on a hybrid Rasterisation / RT thing, much like the recently announced Wizard GFX design from imagination tech).
This lead me to thinking on how I could avoid losing the 'warp the rays' advantage.
So my idea is to warp the G-Buffer instead. The theory goes like this, the oversized buffer is to accommodate the greater resolution in the middle of the warp, but ends up throwing away a lot of the extra detail around the edges. Since most of the processing power goes into shading, you warp, then shade, i.e:
1. Render to oversized G-Buffer
2. Warp to target sized G-Buffer
3. Shade the smaller target (ignoring the black borders outside the distortion).
4. Do image correction such as Chromatic, Fading etc.
If it works it should avoid some of the performance issues with rendering to the Rift, which will only get worse with higher framerates and higher resolutions.
Possible problems:
1. Screen space techniques may not work properly once warped. (That said, it wouldn't impact the hybrid RT solution since it doesn't use SS).
2. Warping the G-Buffer may take more steps than warping the final image would.
Any thoughts?
