回答
如果所有模型的定義都是正確的(凸形,頂點纏繞一致),則剔除決不會影響性能,並且幾乎總能提高性能。
想象一下,您正在渲染一個立方體,禁用剔除。立方體背面(遠側)的面朝向遠離你,並且無論你選擇的背面材質屬性如何應用。然後,立方體前面的面被渲染:由於剛剛渲染的背面是立方體的內部,它們被正面100%遮擋。
如果多維數據集的方向不同,可能會先對正面進行光柵化處理,但仍會處理背面,然後碎片會被z緩衝區拒絕。
最終結果:根據需要將光柵化了多達兩倍的碎片。這對大量的多邊形或複雜的像素着色器來說是一件大事。面部剔除使您可以完全避免您知道不會出現的光柵化面部。
如果您有一個具有大約100,000個多邊形的角色模型,則面部剔除將像素硬件每幀處理的工作量減半。如果你有大的表面着色器,這是一個很大的節省。
如果您正在使用小型模型並且不使用着色器,那麼挑選這些天確實無關緊要。但無論如何,這是很好的做法。
我不認爲你真的回答了這個問題「如果最終的結果不會有很多被剔除的面孔,那麼我是否應該使用這種方法?」。我也想知道,如果我只渲染面向前的多邊形,性能會變差。 – Tara 2013-04-13 19:07:42
這取決於你正在渲染的東西。一般來說,撲殺是可取的。我可以想象不使用它的唯一原因是渲染具有可見背面的模型。另一種可能不需要剔除的場景可能是建模不佳的模型,其頂點按錯誤順序定義。
撲滅比例呢?如果它沒有真正使結果與撲克前的結果不同,我是否應該使用撲殺?換句話說:啓用時是否對速度有很大影響? – Newbie 2010-03-06 17:48:16
啓用Face Culling(通常背面)對渲染性能有重大影響。
現在需要回答的問題是「爲什麼不啓用默認啓用或爲什麼不總是使用?」有幾個因素決定了啓用剔除是否可行。一個是正在渲染的模型以及它如何被查看。
對於模型中的每個多邊形,如果只有一個正面或背面可見(當從所有可能的角度查看模型時),則我們可以剔除另一面。
例如:「立方體」,無論您是從裏面還是外面看,旋轉時,只能看到構成立方體的每6個多邊形的一面。
另一個例子:「我的海戰(3D)」遊戲中的「船模型的風帆」,船模型的風帆是由多個平面多邊形構建的曲面。當一條船在水中移動時,人們可以看到帆的兩側。在這種情況下,剔除任何一個面是不可取的。
因此,可以爲場景中的所有模型啓用剔除,該場景遵循立方體語義和禁用所有其他模型。
P.S.應儘可能使用面部剔除。
- 1. 我應該總是使用HTML Doctypes嗎?
- 2. 我應該總是使用webservice嗎?
- 3. 我們應該總是重寫equals嗎?
- 4. 'ImportDeclaration.moduleSpecifier`應該總是StringLiterial嗎?
- 5. 我應該總是使用connection.close
- 6. 我應該總是使用.off('load');?
- 7. autoconf:我應該總是使用AS_IF over if和m4_if嗎?
- 8. 我應該總是在構造函數中使用std :: move嗎?
- 9. 我應該總是在CookieManager中使用CookieSyncManager嗎?
- 10. 我應該總是使用TryGetValue來訪問.net字典嗎?
- 11. 我應該總是避免使用小寫的類名嗎?
- 12. 我應該在Django中總是使用virtualenvs嗎?
- 13. 當我們在asp.net中使用Gridview時,我們應該總是使用sqldatasource嗎?
- 14. EventHandler應該總是用於事件嗎?
- 15. 我應該總是removeEventListener?
- 16. 我應該使用AJAX嗎?
- 17. 我應該使用document.writeln嗎?
- 18. 我應該使用convertView嗎?
- 19. 我應該使用node.js嗎?
- 20. 我應該使用NHibernate嗎?
- 21. 我應該使用Hadoop嗎?
- 22. 我應該使用Zend_Auth嗎?
- 23. 我應該使用mahout嗎?
- 24. 我應該使用Subversion嗎?
- 25. 我應該使用JAI嗎?
- 26. 我應該使用CRUD嗎?
- 27. 我應該使用AutoreleasePool嗎?
- 28. 我應該使用cflock嗎?
- 29. 我應該使用ExecutorService嗎?
- 30. 我應該使用Zend_Form嗎?
如果您不需要在兩側都可見面部,通常應始終啓用面部剔除。它可能會加快速度,因爲它會爲您節省一些填充率。 – falstro 2010-03-06 17:41:51