Optimized g-buffer structure

Optimized the g-buffer into 2 textures instead of 4.
- Color is assumed to be rgb only.
- Normal.x and .y are split into postion.w and color.a, respectively,
and then reconstructed in the diffuse shader.
- Depth is calculated directly from position.z.