2010-03-06 86 views
8

我應該在渲染時總是使用這種方法嗎?它在壞gfx卡上放慢了多少?我應該總是使用GL_CULL_FACE嗎?

如果最終結果不會有很多被淘汰的面孔,那麼我是否應該使用這種方法呢?

+0

如果您不需要在兩側都可見面部,通常應始終啓用面部剔除。它可能會加快速度,因爲它會爲您節省一些填充率。 – falstro 2010-03-06 17:41:51

回答

19

如果所有模型的定義都是正確的(凸形,頂點纏繞一致),則剔除決不會影響性能,並且幾乎總能提高性能。

想象一下,您正在渲染一個立方體,禁用剔除。立方體背面(遠側)的面朝向遠離你,並且無論你選擇的背面材質屬性如何應用。然後,立方體前面的面被渲染:由於剛剛渲染的背面是立方體的內部,它們被正面100%遮擋。

如果多維數據集的方向不同,可能會先對正面進行光柵化處理,但仍會處理背面,然後碎片會被z緩衝區拒絕。

最終結果:根據需要將光柵化了多達兩倍的碎片。這對大量的多邊形或複雜的像素着色器來說是一件大事。面部剔除使您可以完全避免您知道不會出現的光柵化面部。

如果您有一個具有大約100,000個多邊形的角色模型,則面部剔除將像素硬件每幀處理的工作量減半。如果你有大的表面着色器,這是一個很大的節省。

如果您正在使用小型模型並且不使用着色器,那麼挑選這些天確實無關緊要。但無論如何,這是很好的做法。

+0

我不認爲你真的回答了這個問題「如果最終的結果不會有很多被剔除的面孔,那麼我是否應該使用這種方法?」。我也想知道,如果我只渲染面向前的多邊形,性能會變差。 – Tara 2013-04-13 19:07:42

0

這取決於你正在渲染的東西。一般來說,撲殺是可取的。我可以想象不使用它的唯一原因是渲染具有可見背面的模型。另一種可能不需要剔除的場景可能是建模不佳的模型,其頂點按錯誤順序定義。

+0

撲滅比例呢?如果它沒有真正使結果與撲克前的結果不同,我是否應該使用撲殺?換句話說:啓用時是否對速度有很大影響? – Newbie 2010-03-06 17:48:16

6

啓用Face Culling(通常背面)對渲染性能有重大影響。

現在需要回答的問題是「爲什麼不啓用默認啓用或爲什麼不總是使用?」有幾個因素決定了啓用剔除是否可行。一個是正​​在渲染的模型以及它如何被查看。

對於模型中的每個多邊形,如果只有一個正面或背面可見(當從所有可能的角度查看模型時),則我們可以剔除另一面。

例如:「立方體」,無論您是從裏面還是外面看,旋轉時,只能看到構成立方體的每6個多邊形的一面。

另一個例子:「我的海戰(3D)」遊戲中的「船模型的風帆」,船模型的風帆是由多個平面多邊形構建的曲面。當一條船在水中移動時,人們可以看到帆的兩側。在這種情況下,剔除任何一個面是不可取的。

因此,可以爲場景中的所有模型啓用剔除,該場景遵循立方體語義和禁用所有其他模型。

P.S.應儘可能使用面部剔除。