簡體   English   中英

沒有光照計算時,我應該忽略頂點法線嗎?

[英]Should I omit vertex normals when there is no lighting calculations?

我有一個openGL程序,它不使用任何照明或陰影。 陰影的錯覺完全通過紋理完成,因為網格是低多邊形的。 臉部不是反面的,我當然不會使用法線貼圖。

我的問題是,我是否仍應定義頂點法線? 排除它們會使用更少的資源和更快的渲染速度,還是排除它們會對性能/視覺效果產生某種負面影響?

我的問題是,我是否仍應定義頂點法線?

如果不使用它們,則沒有必要。

排除它們會使用更少的資源和更快的渲染速度,還是排除它們會對性能/視覺效果產生某種負面影響?

如果不使用它,絕對不會影響視覺效果。

您沒有提到使用舊的固定功能管道還是現代的可編程管道。 在舊的固定功能管道中,法線用於照明計算。 與臉部剔除無關 正面/背面僅由屏幕空間中的原始繞線順序確定。

如果您使用可編程管線,則無論使用哪種法線,都將使用它們。 GL本身根本不會在乎。

因此,排除它們會導致存儲對象所需的內存減少。 如果渲染實際上變得更快,則很難預測。 如果不使用法線,則無論是否提供法線都不應獲取。 但是緩存也會在這里產生影響,因此完全不注意不獲取它們的改進。

僅當您使用即時模式( glBegin() / glEnd() )指定幾何形狀(您實際上永遠不應該這樣做)時,排除法線將為您節省每個頂點一次gl函數調用,這將帶來顯着的改進(但仍會比使用頂點陣列慢幾個數量級)。

如果法線不用於照明,則不需要它們(它們也不用於背面剔除)。

性能的影響更多地是關於這如何改變您的頂點布局以及對轉換前緩存的影響(假設您具有交錯的頂點格式)。 像在CPU上一樣,GPU在高速緩存行中獲取數據,如果不使用(或不使用)法線,則可以更好地與高速緩存行對齊,這可能會對性能產生影響。 例如,如果您的頂點大小為32字節,而移除法線則將其減小為20字節,這將導致GPU為某些頂點獲取2條緩存行,而對於32字節的頂點格式,它始終僅獲取一條緩存行。 但是,如果您的頂點大小為44字節,而移除法線則將其減少到32字節,那么可以肯定這是一種改進(更好的對齊方式和更少的數據)。

但是,這最終是一個很好的級別優化,除非您使用非常輕量級的頂點/像素着色器(例如,陰影遍歷)通過管道真正推動大量幾何圖形,否則這兩種方法都不會產生任何重大影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM