优化片段和顶点着色器之间的操作



我正在学习制作带有OpenGL的图形引擎。我想知道,是否应该将重复的操作从顶点着色器移动到片段着色器,因为我从我所理解的顶点着色器中只运行一次?

例如,当将向量归一化的光方向时,因为在整个顶点中,该灯是相同的,应该将其移动到顶点着色器,而不是为每个像素计算它吗?是否有特殊原因将其保存在片段着色器中?

如果计算完全相同:是的,在顶点着色器中进行比碎片着色器通常应该更有效。某些情况可能不会更有效:

  • 绘制几何形状会导致阴影像素少于可转换的顶点 - 由于密集的几何形状或极端的丢弃/遮挡。如果是这种情况,通常您需要通过切换到较低级别的几何形状或更智能的几何形状来解决它。

  • 在顶点着色器中进行计算时,您需要将更多数据发送到片段着色器,以便使用计算结果。发送更多数据可以较慢,因为它需要更多的内存操作,并且由于rasterizer需要在每个多边形上插值更多的"变化"值。

对于光计算,具体来说,请注意,将计算从碎片着色器转移到顶点着色器可能会影响渲染的质量。特别是,在"变化"插值之后,每个顶点的归一化方向向量可能会变短,如果直接使用而无需重新归一化,则可能会稍微使三角内部变暗。当然,将整个照明计算移至顶点着色器都具有更大的效果。

但是,这些效果的可见程度取决于纹理的频率,分辨率的分辨率,屏幕上的大小,灯光多远等等 - 在某些情况下,质量/性能折衷可能是有道理的。

相关内容

  • 没有找到相关文章

最新更新