在電腦圖學中,頂點法向量(英語:Vertex normal,又稱頂點法線[1])是3D模型頂點的一種屬性,指電腦圖學的3D模型中與特定頂點關聯的方向向量,目的是利用這個法向量來替代實際3D模型中物體的真實法向量。[2][3]通常會將其定為包含該頂點之面的法向量平均值,其平均值有時也會根據包含該頂點之面的面積來做加權。[4][5]
![Thumb](http://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Vertex_normals.png/320px-Vertex_normals.png)
頂點法向量也可以透過以多邊形面近似的曲面來計算,例如非均勻有理B樣條曲面;亦可以為了特定藝術目標來指定特定明確向量。頂點法向量經常在各種基於光照模型得著色法中使用,例如古氏著色法與風著色法。使用頂點法向量進行渲染可以獲得較平滑的效果;然而,如果不對其進行一些修改就不容易呈現鋒利的邊緣。[6]
與幾何學的關聯
![Thumb](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Surface_normals.svg/320px-Surface_normals.svg.png)
在幾何學中,頂點的屬性只有位置以及關聯幾何體的頂點圖[7],不存在法向量這個屬性,因為僅有一個頂點無法計算法向量。幾何學中的法向量一般由面定義,即垂直於該面的向量。在電腦圖學中,頂點的法向量可以視為是該頂點位於3D模型曲面上的切平面之法向量。
用途
在電腦圖學中,頂點的法向量主要用於推算物體被光照射後的反射強度。一般物體反射的光線強度會跟光線入射方向與物體表面的法向量相關[8][9],因此在許多基於光照模型的著色法中會使用頂點的法向量來進行計算。而由於僅在頂點上有法向量,因此許多著色法會透過不同的策略來推算物體被光照射後的反射強度,例如逐頂點光照和逐片段光照。其中逐頂點光照僅在頂點上計算光照模型的像素顏色,其餘位置的像素顏色則是透過頂點上計算的結果進行內插,此種做法在遇到在較大的多邊形模型中央有高光曲線區時會產生嚴重的問題,因為這些高光曲線區在多邊形的頂點處會產生缺失,因而發生一定程度的失真,具代表性的逐頂點光照為古氏著色法。逐片段光照則是以多邊形頂點上定義的法向量為基礎,透過內插的方式推算多邊形內部其他位置的法向量,並用內插補完的法向量計算光照模型[10],這種作法產生的效果會比逐頂點光照的效果更逼真,然而運算量也會有所提升。
-
在電腦圖學中,曲面基本上是由多面體近似
-
不使用頂點法向量繪製的曲面會因為曲面在電腦圖學中是由多面體近似而出現稜角感
-
逐頂點光照雖然使用頂點法向量計算光線強度,但其僅在頂點上計算,其餘位置填入基於頂點運算的結果的內插,顯得有些不自然
-
逐片段光照使用的法向量是將多邊形內部透過頂點提供的法向量進行內插,其結果最為平滑。但相對的這種方法不易呈現有稜有角的立體結構
-
不使用頂點法向量繪製的立方體
-
使用逐頂點光照繪製的立方體
-
使用逐片段光照繪製的立方體。可以看到有稜角的立體在使用頂點法向量繪製時反而效果較不自然
![Thumb](http://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/Vertex_normal_%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%9B%E0%B8%A5%E0%B8%B5%E0%B9%88%E0%B8%A2%E0%B8%99%E0%B9%81%E0%B8%9B%E0%B8%A5%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B8%B0%E0%B8%97%E0%B9%89%E0%B8%AD%E0%B8%99%E0%B8%82%E0%B8%AD%E0%B8%87%E0%B8%9E%E0%B8%B7%E0%B9%89%E0%B8%99%E0%B8%9C%E0%B8%B4%E0%B8%A7.png/320px-Vertex_normal_%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%9B%E0%B8%A5%E0%B8%B5%E0%B9%88%E0%B8%A2%E0%B8%99%E0%B9%81%E0%B8%9B%E0%B8%A5%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B8%B0%E0%B8%97%E0%B9%89%E0%B8%AD%E0%B8%99%E0%B8%82%E0%B8%AD%E0%B8%87%E0%B8%9E%E0%B8%B7%E0%B9%89%E0%B8%99%E0%B8%9C%E0%B8%B4%E0%B8%A7.png)
頂點的法向量用於光照模型渲染時,通常一個頂點上只會定義一個法向量,這樣的方式對曲面而言可以繪製出較平滑的結果,然而無法處理銳利的邊角[6]。部分的軟體會將相同頂點在不同面上繪製時給予不同法向量,以讓不同面的公共頂點能呈現不同的光線反射方向,進而實現銳利的邊角的光照模型渲染呈現。例如obj檔案格式就支援這種頂點法向量的表達方式。[11]
頂點法向量也可以用於檢查模型的流形性。若同一個面上具有2個方向完全相反的頂點法向量,代表模型的拓樸結構可能有問題,將會對這個模型的3D列印造成影響。檢查模型中的頂點法向量可以找到模型中部分的非流形結構,但並不能保證模型滿足流形的定義,仍需要搭配其他的方式進行檢查。[12]
頂點切向量
![Thumb](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Vertex_tangent%2C_bitangent_and_normal_vector.svg/320px-Vertex_tangent%2C_bitangent_and_normal_vector.svg.png)
頂點切向量是類似於頂點的法向量的另一種屬性,可用於代表頂點在模型上之正切線的方向向量,其可透過與頂點法向量外積得到頂點的餘切線方向向量(bitangent),這三個向量可以構成一個基於模型表面的空間座標系,可用於法線貼圖實現物體表面的凹凸效果。[13]
參見
參考文獻
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.