从未由着色器处理的位置光照基元

Lighting Primitives From Positions That Aren't Processed By Shaders

本文关键字:位置 处理      更新时间:2023-10-16

我有一个用于计算漫射照明值的着色器。它由一个顶点和一个片段着色器组成,用于计算每个顶点的照明强度。但是,正如预期的那样,如果我有一个具有光源位置的大GL_TRIANGLE,例如,就在三角形的中心上方,则不会出现应该照亮它的光,因为光值是根据顶点计算在三角形表面上平滑插值的。

所以我的问题是 - 基元如何被光源在其顶点以外的位置照亮?

当您在顶点进行照明时,您正在执行 Phong 照明,即在顶点处计算颜色,然后仅将顶点计算的颜色(即 Gouraud 着色)插值到基元中的所有像素。 如果要计算每个像素的照明颜色,则会得到Phong阴影。 根据您的方案,如果将光照计算从顶点着色器移动到片段着色器,并在基元中插值法线,则应获得更好的结果。

如果使顶点法线成为可变变量并在片段着色器中对其进行规范化,然后进行光照计算,则应获得更好的结果。