This is probably API independent (more dependent on hardware implementation), but just in case, I'm using OpenGL.
The question is restricted to PC hardware.
I have a couple of questions concerning the output textures that are being rendered to (e.g. in gbuffer geometry pass)
- Is there a (noticeable, measurable) performance penalty of using different formats for the different output textures? e.g. RGB8 (unsigned byte) (8 bits for each component) for diffuse color, RGBA8 (unsigned byte) for specular color + roughness, RGB16F for normals?
- Is it worth it to pack smaller component data into larger types just so I can have equal render targets (and fewer of them in number)? E.g. just having two RGBA16F render targets, packing diffuse + specular + roughness into the first, and normals and other stuff into the second render target using bitmasking?
- Are there output texture data types/formats that I should avoid entirely?