考虑延迟照明。简而言之,延迟照明是一种使用简化版本的延迟阴影来计算屏幕空间光照贴图的技术。在第二遍中,使用屏幕空间光照贴图作为光照信息再次渲染几何体。
由于需要较少的属性,因此该技术用于减小G缓冲区的大小。它还为您带来了好处,即G缓冲区和屏幕空间光照贴图的分辨率可能低于屏幕。
我实现了一个严格的基于GLES 2.0的渲染器(尽管是实验性渲染器),并且设法将G-Buffer简化为一个RGBA纹理(是的,我使用了Texture2D而不是renderbuffer)。它包含屏幕空间法线贴图+ alpha通道中的深度缓冲区(据我所知,它是使用对数压缩的)。
可以使用以下事实计算位置属性(在此处称为“ 世界”),即在透视投影中,.xy由.z表示,因此:
X ÿFř ü 小号吨ù 米= x y瓦特ø ř 升d/ z瓦特ø ř 升d
我通过以下方法估算了位置属性的xy:
X ÿ瓦特ø ř 升d= x yFř ü 小号吨ù 米* ž瓦特ø ř 升d
注意:我必须根据投影矩阵的设置进行进一步的调整。
另外值得注意的是,我能够省略法线向量的.z分量,因为由于法线向量已标准化,所以我可以从.xy重建.z:
X2+ y2+ z2----------√= 1X2+ y2+ z2= 1ž2= 1 − (x2+ y2)ž= 1 − (x2+ y2)-----------√
使用这种技术,我能够释放RGBA G缓冲区中的另一个通道,并用它来存储屏幕空间的镜面贴图(或光泽度,如果可以的话)。