2013-05-21 77 views
0

我在查看源引擎時遇到Phong Shading。描述聽起來很像Tessellation。但是當我查閱它時,我並沒有直接比較兩者。現在在DirectX中,Tessellation並不像HLSL中的Phong Shading。有什麼不同?我應該使用哪一個?Phong底紋vs Tessellation

+1

在wiki文章,存在兩個圖像的多邊形的相同的量。仔細觀察邊緣可以看到相同數量的細分。詭計,呃? :D – user2246674

+0

@ user2246674哈哈,你需要一個用戶名,你讓我困惑了一秒。 + 1,這表明了根本的區別。 –

+0

修復了我的用戶名:)。 –

回答

3

Phong着色與DX11曲面細分沒有直接關係,但是因爲它們都可以平滑照明細節,所以我可以看到你可能會感到困惑。

Tessellation根據一些參數(通常是相機距離)動態增加幾何細節。這可以提高照明質量(也許這是與phong的關係?)以及輪廓細節。陰影優勢(不是輪廓細節)實際上可以在沒有細分的像素着色器中完全模擬。

Phong着色是一種像素着色技術。它不會影響幾何細節。它與標準OpenGL Gouraud shading類似,除了不是在表面的像素上插值光照值,而是將法線插入表面並在每個像素處重新標準化。與「每個頂點照明」相比,這提供了更精確的照明結果,通常稱爲「每像素照明」。您可以合理(也可能通常)在管線的不同部分同時使用這兩種效果。

+0

+1,請記住,有一個Phong着色技術(您所描述的技術;基本上是每個像素的照明)和一個Phong反射模型。 Phong反射模型也可以用於其他着色技術(例如Gouraud着色)。 –

+0

@NicoSchertler真的,你可以使用phong只是爲了鏡面反射,而爲了漫反射,可以使用gong。 –

1

正如賈斯汀提到的,Phong Shading是一個用於更精確地控制每個像素點的陰影程序。鑲嵌細分用於通過動態生成更多三角形來改變網格中的幾何細節,以獲得更高的表面細節和更平滑的結果。它可以成功用於動態細節層次,具體取決於距離相機的距離或屏幕上的大小。

添加到這個話題我想我應該提到有一個名爲Phong Tessellation的Tessellation算法,它從Phong Shading中獲取靈感並將此算法應用於Tessellation。這意味着使用類似的法線插值修改頂點並實現高細節輪廓以及更好的表面細節。 Phong Tessellation比普通的其他局部鑲嵌算法PN-Triangles更簡單,我使用它來在我工作的其中一個遊戲中獲得更高的細節頭部。

Phong Tessellation