電腦圖學中,頂點法向量(英語:Vertex normal,又稱頂點法線[1])是3D模型頂點的一種屬性,指電腦圖學的3D模型中與特定頂點關聯的方向向量,目的是利用這個法向量來替代實際3D模型中物體的真實法向量。[2][3]通常會將其定為包含該頂點之面的法向量平均值,其平均值有時也會根據包含該頂點之面的面積來做加權。[4][5]

正十二面體模型的頂點法向量

頂點法向量也可以透過以多邊形面近似的曲面來計算,例如非均勻有理B樣條曲面;亦可以為了特定藝術目標來指定特定明確向量。頂點法向量經常在各種基於光照模型得著色法中使用,例如古氏著色法風著色法。使用頂點法向量進行彩現可以獲得較平滑的效果;然而,如果不對其進行一些修改就不容易呈現鋒利的邊緣。[6]

與幾何學的關聯

編輯
 
曲面在特定點上的法向量可透過該點之切面計算

在幾何學中,頂點的屬性只有位置以及關聯幾何體的頂點圖[7],不存在法向量這個屬性,因為僅有一個頂點無法計算法向量。幾何學中的法向量一般由面定義,即垂直於該面的向量。在電腦圖學中,頂點的法向量可以視為是該頂點位於3D模型曲面上的切平面之法向量。

用途

編輯

在電腦圖學中,頂點的法向量主要用於推算物體被照射後的反射強度。一般物體反射的光線強度會跟光線入射方向與物體表面的法向量相關[8][9],因此在許多基於光照模型的著色法中會使用頂點的法向量來進行計算。而由於僅在頂點上有法向量,因此許多著色法會透過不同的策略來推算物體被光照射後的反射強度,例如逐頂點光照和逐片段光照。其中逐頂點光照僅在頂點上計算光照模型的像素顏色,其餘位置的像素顏色則是透過頂點上計算的結果進行內插,此種做法在遇到在較大的多邊形模型中央有高光曲線區時會產生嚴重的問題,因為這些高光曲線區在多邊形的頂點處會產生缺失,因而發生一定程度的失真,具代表性的逐頂點光照為古氏著色法。逐片段光照則是以多邊形頂點上定義的法向量為基礎,透過內插的方式推算多邊形內部其他位置的法向量,並用內插補完的法向量計算光照模型[10],這種作法產生的效果會比逐頂點光照的效果更逼真,然而運算量也會有所提升。

 
如要讓頂點法向量能呈現稜角結構就需要讓頂點在不同平面上時給予不同法向量,如(a)所示;若直接使用法向量則稜角會被平滑化而無法看出,如(b)所示

頂點的法向量用於光照模型彩現時,通常一個頂點上只會定義一個法向量,這樣的方式對曲面而言可以繪製出較平滑的結果,然而無法處理銳利的邊角[6]。部分的軟體會將相同頂點在不同面上繪製時給予不同法向量,以讓不同面的公共頂點能呈現不同的光線反射方向,進而實現銳利的邊角的光照模型彩現呈現。例如obj檔案格式就支援這種頂點法向量的表達方式。[11]

頂點法向量也可以用於檢查模型的流形性。若同一個面上具有2個方向完全相反的頂點法向量,代表模型的拓樸結構可能有問題,將會對這個模型的3D列印造成影響。檢查模型中的頂點法向量可以找到模型中部分的非流形結構,但並不能保證模型滿足流形的定義,仍需要搭配其他的方式進行檢查。[12]

頂點切向量

編輯
 
在電腦圖學中,頂點的切向量(T)、餘切向量(B)、法向量(N)共同構成一個模型表面坐標系,可用於法線貼圖

頂點切向量是類似於頂點的法向量的另一種屬性,可用於代表頂點在模型上之正切線的方向向量,其可透過與頂點法向量外積得到頂點的餘切線方向向量(bitangent),這三個向量可以構成一個基於模型表面的空間座標系,可用於法線貼圖實現物體表面的凹凸效果。[13]

參見

編輯

參考文獻

編輯
  1. ^ 基本着色. www.opengl-tutorial.org. [2021-07-18]. (原始內容存檔於2022-05-31). 
  2. ^ Henri Gouraud. "Continuous Shading of Curved Surfaces." IEEE Transactions on Computers, C-20(6) : 623--629 (June 1971).
  3. ^ Andrew Glassner, I.6 Building vertex normals from a unstructured polygon list, in Graphics Gems IV, edited by Paul S. Heckbert, Morgan Kaufmann, 1994. pp. 60--74
  4. ^ Nelson Max, Weights for Computing Vertex Normals from Facet Normals, Journal of Graphics Tools, Volume 4, Issue 2, 1999 p. 1-6
  5. ^ Grit Thürrner and Charles A. Wüthrich, Computing Vertex Normals from Polygonal Facets. Journal of Graphics Tools, Volume 3, Issue 1, 1998. pp. 43-46
  6. ^ 6.0 6.1 Max Wagner. Generating Vertex Normals (PDF). emeyex.com. (原始內容 (PDF)存檔於2013-05-31). 
  7. ^ Weisstein, Eric W. (編). Vertex. at MathWorld--A Wolfram Web Resource. Wolfram Research, Inc. (英語). 
  8. ^ RCA Corporation. RCA Electro-optics Handbook. RCA solid State. RCA/Commercial Engineering. 1974: p.18 ff [2021-07-16]. LCCN 75318901. (原始內容存檔於2022-05-31). 
  9. ^ Warren J. Smith. Modern optical engineering. McGraw-Hill. 1966: p.228, 256. 
  10. ^ Phong, Bui Tuong, Illumination for Computer-Generated Images., The University of Utah, 1973 
  11. ^ Object Files (.obj) (PDF). Advanced Visualizer Manual, Appendix B1. [2021-07-16]. (原始內容存檔 (PDF)於2021-11-27). 
  12. ^ How to fix non-manifold geometry issues on 3D models. sculpteo.com. [2021-07-16]. (原始內容存檔於2022-06-25). 
  13. ^ Normal Mapping. opengl-tutorial.org. [2021-07-16]. (原始內容存檔於2022-12-06).