我们正在尝试优化填充率的照明。集成的图形芯片的内存访问速度非常慢。

有两个光缓冲区:一个用于漫反射,另一个用于镜面反射。两者都使用格式R11G11B10F。有什么办法可以将两个缓冲区打包在一起吗?例如,使用颜色模型Y'CbCr:

评论

这是用于延迟照明的管道,对吗?您是否正在使用平铺实现来减少带宽?另外,您是否考虑过平铺延迟阴影或平铺向前阴影?

#1 楼

您可能需要查看Compact YCoCg帧缓冲区。它使用一个2通道缓冲区来存储每个像素的亮度,并将两个色度分量分别存储在一半像素中,从而形成棋盘格。它还在帧的末尾使用了边缘感知的上采样滤波器,以重建丢失的色度分量并转换回RGB。

您可以将其扩展到单个3通道缓冲区以存储漫反射亮度,镜面亮度和棋盘色度(假设根据问题图中的图表仅存储一对色度值即可)。

您也可以考虑使用R10G10B10A2格式,除非您确实需要浮点格式的范围。带宽是相同的,但是会给您带来更高的精度(R11G11B10F每个组件只给您5–6位尾数)。此外,您可以使用alpha的2位来存储几个标志,例如您的漫反射/镜面标志。

#2 楼

如果您对镜面反射仅是白色没问题,则可以将漫反射和镜面反射放入RGBA。

这似乎是统一处理延迟渲染的原因。
有人发现此问题:
http://forum.unity3d.com/threads/specular-color-based-on-light-color.134412/

文档中提到的问题:
https://docs.unity3d.com/Manual/RenderTech-DeferredLighting.html

评论


$ \ begingroup $
仍然要对“漫反射”和“镜面反射”进行着色
$ \ endgroup $
–skif_engineer
16-09-20在17:15