我在查看源引擎时遇到了Phong Shading 。描述听起来很像Tessellation。但是当我查找它时,我并没有发现任何直接将两者进行比较的东西。现在 DirectX Tessellation 不像 HLSL 中的 Phong 着色那样使用。有什么不同?我应该使用哪一个?
2 回答
Phong 着色与 DX11 曲面细分没有直接关系,但因为它们都可以平滑照明细节,所以我知道你会感到困惑。
Tessellation 根据一些参数(通常是相机距离)动态增加几何细节。这可以提高照明质量(也许这是与 phong 的关系?)以及轮廓细节。着色优势(不是轮廓细节)实际上可以完全在像素着色器中模拟而无需细分。
Phong 着色是一种像素着色技术。它不影响几何细节。它类似于标准的 OpenGL Gouraud 着色,除了不是在表面的像素上插值光照值,而是在表面上插值法线并在每个像素处重新归一化。这提供了更准确的光照结果,通常称为“每像素光照”,而不是“每顶点光照”
您可以合理地(并且可能通常)在管道的不同部分同时使用这两种效果。
正如 Justin 提到的那样,Phong Shading 是一种着色例程,用于更准确地为每个像素提供照明。Tessellation 用于通过动态生成更多三角形来改变网格中的几何细节,以实现更高的表面细节和更平滑的结果。它可以成功地用于动态细节级别,具体取决于到相机的距离或屏幕上的大小。
为了补充这个主题,我想我应该提到有一种称为 Phong Tessellation 的 Tessellation 算法,它从 Phong Shading 中汲取灵感并将该算法应用于 Tessellation。这意味着使用类似的法线插值修改顶点,并获得高细节轮廓以及更好的表面细节。Phong Tessellation 比常见的其他局部曲面细分算法 PN-Triangles 具有更简单的着色器,我使用它在我参与的一款游戏中实现更高细节的头部。