我正在编写一个延迟的渲染器,并试图打包我的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问题是,其中一个会比另一个更好吗?为什么?
发布于 2012-06-30 20:08:07
使用的缓冲区绑定/重新绑定操作越少越好。
更重要的是,在你的例子中,你只需要4个浮点数就行了: RGB+Specular。所以使用完整的128位rendertarget并打包(r,g,b,specular)值。它必须更好,因为对不同内存位置的访问(96位用于rgb,32位用于镜面反射)不利于缓存。
对于较旧的显卡,一个渲染目标也更好。无论如何,当你只使用96位时,你就是在浪费内存。g-buffer总是必须被紧密地打包。
https://stackoverflow.com/questions/11273136
复制相似问题