3D引擎為什么使用三角形繪制曲面


這個問題是我第一次接觸3D開發就有的疑問,最近在看《游戲引擎架構》(Game Engine Architecture),在書中找到了答案。

 

三角網格(Triangle Mesh),游戲開發者會使用三角形網格來建模。三角形是表面的分段線性逼近,如果用多條相連的線段分段逼近一個函數或曲線。

實時渲染之所以選用三角形,是因為三角形有以下的優點:

  • 三角形是最簡單的多邊形,少於3個頂點就不能成為一個表面;
  • 三角形必然是平坦的,含4個或以上的頂點的多邊形,不一定平坦,三個點確定一個平面,多余的點可能在這個面之上或者之下;
  • 三角形經多種轉換之后,仍然是三角形,這對於仿射轉換和透視轉換也成立。最壞的情況下,從三角形的邊去看,三角形會退化為線段。在其它角度觀察,仍能維持是三角形;
  • 幾乎所有商用圖形加速硬件都是為三角形光柵化而設計的。

 

三個點才能構成一個平面,而且僅有三個面才能保證面是平的,多一個點不能保證面是平的,少一個點不能構成一個平面,所以不多不少正好是三個。

 

通常會使用“三角形/秒”作為CPU性能的一項重要指標。如果你有興趣,不妨讀一讀知乎專欄上的這篇文章《GPU原理解密(一)畫個三角形居然這么難》

https://zhuanlan.zhihu.com/p/20918974

 

在3D模型中,通常面數越多(也就是三角形的數量),模型越精細,反之則越粗糙(根據面數多少也就有了高模與低模之分)  ——(如下圖所示)

image

(圖片來源:http://www.atangeo.com/examples/horse

 

所以從視覺和美術的角度來看,面數當然是多多益善,但是從程序和性能的角度來看,面數是越少越好,少即意味着運算量變小,渲染速度會更快、耗電量都降低不少,所以需要平衡。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM