用延迟绘制未照明对象的最佳方法是什么?像天窗一样,粒子还是只是发光的物体?
我想到过alpha通道中的蒙版,可以在光通道中对其进行检查并设置漫反射颜色,但是它不能用于光混合。光线通过之后仅通过的缓冲区仅填充不发光的空间。但是仅将pso(dx12)切换为彩色复印听起来不是一个好主意。
当然,仅在光通过后才对未照明的对象进行传递,但我不想为此创建另一个列表再次,我必须切换pso)。

#1 楼

通常,在延迟引擎中,您将直接将未照明的对象渲染到颜色缓冲区,从而完全绕开照明系统。您可能还会将零输出到G缓冲区,以使延迟的灯光不会对这些像素添加任何内容(并且可能还会在模板缓冲区中对其进行标记,以避免在其上运行照明着色器,以提高效率)。 >
不用担心为此而切换PSO。我猜您担心性能,但这没什么大不了的。游戏引擎通常每帧切换PSO(或DX11 / GL中的切换着色器)数百或数千次。切换几次以获得额外的显色效果甚至不会引起人们的注意。只需将颜色缓冲区与您的G缓冲区绑定在一起,并一直渲染它,就好像它是一个额外的G缓冲区一样。普通的延迟着色器将向其输出零,而未照明的对象将向其输出颜色。

评论


$ \ begingroup $
感谢您的答复。直接写入颜色缓冲区的想法听起来很棒。我会试一试。
$ \ endgroup $
–整理
16-4-14在5:13