It's been a while since I've posted here, too much work... but I thought I'd share this idea I had the other night
I have not had the time to test this out, but at least in my head it works.
The last time I implemented deferred rendering, I had three render targets using MRT, one for normals, one for material colour, one for position. Because of the hardware limits and position requirements, they were all FP16 render targets. AFAIK this is the 'standard' way to do DR.
Now, I was thinking, if you don't need the position then you don't need to use FP16. Both normals and colours don't need high precision.
I was also thinking that to get around not having position is actually much easier than I thought it would be. Simply use a depth surface texture for the zbuffer. Then when you need the position, use the pixel on screen position + read back the depth, multiply by the inverse of the original projection/view matrix and you'd get the original position.
Does this make sense? At least in my mind you would go from 3 FP16 render targets to 2 int8 targets without any significant side effects...?
As I say I have yet to actually implement it yet. Anyone see any major problems with this?
I have not had the time to test this out, but at least in my head it works.
The last time I implemented deferred rendering, I had three render targets using MRT, one for normals, one for material colour, one for position. Because of the hardware limits and position requirements, they were all FP16 render targets. AFAIK this is the 'standard' way to do DR.
Now, I was thinking, if you don't need the position then you don't need to use FP16. Both normals and colours don't need high precision.
I was also thinking that to get around not having position is actually much easier than I thought it would be. Simply use a depth surface texture for the zbuffer. Then when you need the position, use the pixel on screen position + read back the depth, multiply by the inverse of the original projection/view matrix and you'd get the original position.
Does this make sense? At least in my mind you would go from 3 FP16 render targets to 2 int8 targets without any significant side effects...?
As I say I have yet to actually implement it yet. Anyone see any major problems with this?