Performance and experience improvement ideas
Hi,
I recently integrated support for OR in my DX9 engine, and after playing around with it for a couple of weeks I have two untested ideas I'd like to share. I'd just like some feedback on the feasibility of them, to see if they're worthwhile.
1. Barrel distortion optimization: Right now, having to apply the barrel distortion post effect means having to render the screen in a lot bigger resolution. Sure, there are things that you can do to alleviate this with shader optimizations, stenciling etc, but when it comes down to it, rendering bigger means eating more GPU bandwidth, and that should be avoided.
So my idea is, instead of applying the distortion as a post effect, on a DX11 GPU you should be able to apply the distortion using a vertex shader and then tessellating the geometry that is close to the camera instead. That way, you can render in the native 1280x800, and the additional triangles required to make the distortion look smooth will be generated on the GPU, which is fast and doesn't require any more memory bandwidth (will scale nicely with future GPUs). This can of course also be LOD:ed, so that stuff farther away is tesselated less. Ideally, it should be the screen size of the triangles that matter, rather that the distance.
Since my engine is DX9 I can't test this right now, but what do you think, does it seem feasible?
2. My other idea is more for the Oculus team than the developers. Personally, I think the screen door effect is pretty annoying. In order to do away with it, couldn't you add a small diffusion filter, like a small piece of transparent but slightly blurry glass or plastic that could just sit in front of the LCD screen. The diffusion should be homogenous and about the size of one pixel, so that the blur doesn't bleed over to neighboring pixels. That way, you can't see the internals of a single pixel because it's blurred out, but you still don't loose the "crispness" of the resolution that the LCD has.
I recently integrated support for OR in my DX9 engine, and after playing around with it for a couple of weeks I have two untested ideas I'd like to share. I'd just like some feedback on the feasibility of them, to see if they're worthwhile.
1. Barrel distortion optimization: Right now, having to apply the barrel distortion post effect means having to render the screen in a lot bigger resolution. Sure, there are things that you can do to alleviate this with shader optimizations, stenciling etc, but when it comes down to it, rendering bigger means eating more GPU bandwidth, and that should be avoided.
So my idea is, instead of applying the distortion as a post effect, on a DX11 GPU you should be able to apply the distortion using a vertex shader and then tessellating the geometry that is close to the camera instead. That way, you can render in the native 1280x800, and the additional triangles required to make the distortion look smooth will be generated on the GPU, which is fast and doesn't require any more memory bandwidth (will scale nicely with future GPUs). This can of course also be LOD:ed, so that stuff farther away is tesselated less. Ideally, it should be the screen size of the triangles that matter, rather that the distance.
Since my engine is DX9 I can't test this right now, but what do you think, does it seem feasible?
2. My other idea is more for the Oculus team than the developers. Personally, I think the screen door effect is pretty annoying. In order to do away with it, couldn't you add a small diffusion filter, like a small piece of transparent but slightly blurry glass or plastic that could just sit in front of the LCD screen. The diffusion should be homogenous and about the size of one pixel, so that the blur doesn't bleed over to neighboring pixels. That way, you can't see the internals of a single pixel because it's blurred out, but you still don't loose the "crispness" of the resolution that the LCD has.
