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