我正在写一个延迟渲染器,我正在尝试打包我的gbuffer。
将漫反射和镜面反射存储在一起会更好吗?
vec4 difSpec = (diffuse.xyz, specular) // FORMAT_RGBA
gl_FragData[0] = difSpc;
或使用2个渲染目标
vec3 diffuse
float specular
gl_FragData[0] = diffuse // FORMAT_RGB
gl_FragData[1] = specular // FORMAT_RED
问题是一个比另一个更好,为什么。
答案 0 :(得分:4)
您使用的较小缓冲区绑定/重新绑定操作 - 越多越好。
更重要的是,在你的情况下你只有4个浮点数很好:RGB +高光。因此,使用完整的128位rendertarget并打包(r,g,b,specular)值。它必须更好,因为访问不同的内存位置(rgb为96位,镜面反射为32位)对缓存不利。
对于较旧的视频卡,一个渲染目标也更好。无论如何,当你只使用96位时,你就会浪费内存。 g-buffer总是必须紧密包装。