关于透明对象的顺序无关渲染的几个问题

时间:2019-05-24 17:57:43

标签: graphics 3d

目前,我正在实现透明3D对象的顺序无关的渲染,并且越来越多的问题浮现在我的脑海。

以下是我的渲染工作方式: 首先,我渲染所有不透明的对象。然后,我要渲染所有透明的对象,在这里我不想输出颜色,而是将片段数据写入到链表中。在第三次渲染过程中,我渲染了一个屏幕大小的四边形,在其中对一个像素的片段进行排序,然后将它们与某些功能混合。

我的第一个问题是:如果我不想在第二次渲染过程中输出颜色,则需要两个不同的着色器,一个用于不透明的着色器,一个用于透明对象的着色器,对吗?这似乎很费劲,尤其是当对象的不透明度可以在运行时更改时。这样,我必须检查每一帧要使用的着色器。这真的是要走的路吗?

第二个问题:如果我在第三遍计算带有透明对象的像素的最终颜色,则需要读取当前帧缓冲区以将颜色中不透明对象的值混合在一起。这意味着我必须将所有内容渲染到一个帧缓冲对象(至少在OpenGL中就是这样),然后将整个帧缓冲复制到系统提供的帧缓冲中。那不是很大的性能损失吗?

第三个问题:这与我的第二个问题有关。与简单的两遍方法相比,整个过程似乎非常昂贵。这真的值得透明物体看起来稍微好点吗?

0 个答案:

没有答案