凹凸貼圖(Bump Mapping)

凹凸貼圖(Bump Mapping)

目錄

概述

  • 說明, 下文由網絡蒐集, 找不到原來的翻譯者, 只有一些轉載連接附在參考裏

凹凸貼圖1

凹凸映射和紋理映射很是類似。然而,紋理映射是把顏色加到多邊形上,而凹凸映射是把表面的凹凸信息加到多邊形上。這會在多邊形對象的視覺上會產生很吸引人的效果。咱們只須要添加一點信息到原本須要使用大量多邊形的物體上。須要注意的是這個物體是平的,可是它看起來倒是粗糙不平的。讓咱們來看看上邊的那個立方體。若是你很近地觀察它時,你會發現它上面的不少細節。它看起來好像是由成千上萬個多邊形構成的,其實它只是由6個矩形構成。你或許會問:「這和紋理映射有什麼不一樣?」 它們的不一樣之處在於——凹凸映射是一種根據光線方向作出響應的紋理映射。html

凹凸映射背後的原理

讓咱們來看看一個粗糙的表面。網絡

凹凸貼圖2

從遠處看,你判斷這個物體是粗糙的的惟一證據是在它表面上下的亮度有改變。你的大腦可以得到這些亮暗不一的圖案信息,而後判斷出它們是表面中有凹凸的部位。上邊的一幅圖就說明了這一點。你能夠發現它是一個浮雕式的表面。一些矩型和字母被印入表面,可是它們摸上去就像是一個隱藏的監控器的玻璃。若是這個圖 像是在適當的位置上,那麼它除了改變亮度,不須要再作任何其餘的工做。app

那麼你也許會問:我是怎麼知道哪些點要亮,哪些點要暗呢?這不難。絕大多數人生活在這樣一種環境下——這個環境的大多數光源來自上方(譯者注:好比白天主 要的光來自太陽,夜晚主要的光來自天花板上的日光燈)。因此向上傾的地方就會更亮,而向下傾的地方就會更暗。因此這種現象使你的眼睛看到一個物體上亮暗區域時,能夠判斷出它的凹凸狀況。相對亮的塊被判斷是面向上的,相對暗的塊被判斷是面向下的。因此我只須要給物體上的線條簡單得上色。spa

若是你想要更多的證據,這裏還有一幅幾乎相同的圖,不一樣於前的是它旋轉了180度。因此它是前一幅圖倒轉的圖像。那些先前看起來是凹進去的區域,如今看起來是凸出來的了。.net

凹凸貼圖3

這時候你的大腦並無被徹底欺騙,你腦中存留的視覺印象使你仍有能力判斷出這是前一幅圖,只是它的光源變了,是從下往上照的,你的大腦可能強迫性地判斷出它是第一幅圖。事實上,你只要始終盯着它,而且努力地想像着光是從右下方向照射的,你就會理解它是凹的(譯者注:由於平常生活的習慣,你會很容易把這些圖 形判斷成凸出的圖形,可是由於有了上一幅對照圖的印象,你可能纔會特別注意到這些圖塊其實仍是凹入的,只是判斷方法不符合咱們平常生活習慣,由於這時大多數光不是從上方照射,而是從下往上照射)。翻譯

什麼是凹凸圖(Bump Map)

凹凸圖和紋理圖很類似。可是不一樣的是,凹凸圖包含的不是顏色信息,而是凹凸信息。最一般的方法是經過存儲高度值實現。咱們要用到一個灰色的紋理圖,灰色的亮度體現出每一個點分別凸出多少(見上圖)。這就是一個很是方便的保存凹凸圖的方法,並且這種圖很容易製做。這副圖具體又是怎樣被着色器使用的呢?你接着往 下看就會明白了。code

凹凸貼圖5

固然,你並不必定要把本身侷限於這些簡單的圖形,你能夠擴展,用它來作木材,作石頭,作脫了漆的牆面,作任何你想作的物體。orm

凹凸貼圖是怎麼工做的

凹凸映射是補色渲染技術(Phong Shading Technique)的一項擴展,只是在補色渲染裏,多邊形表面上的法線將被改變,這個向量用來計算該點的亮度。當你加入了凹凸映射,法線向量會略微地改變,怎麼改變則基於凹凸圖。改變法線向量就會改變多邊形的點的顏色值。就這麼簡單。htm

如今,有幾種方法來達到這個目的(譯者注:這個目的指改變法線向量)。我並無實際編寫補色渲染和凹凸映射的程序,可是我在這裏將介紹一種我喜歡的方法來實現!對象

如今咱們須要將凹凸圖中的高度信息轉換成補色渲染用到的法線的調節信息。這個作起來不難,可是解釋起來比較費勁。

好的,咱們如今將凹凸位圖的信息轉換成一些小向量——一個向量對應於一個點。請看下邊一副放大的凹凸圖。相對亮的點比相對暗的點更爲凸出。看清楚了嗎?

凹凸貼圖6

如今計算每一個點的向量,這些向量表徵了每一個點的傾斜狀況,請看下圖的描繪,圖中紅色小圓點表示向量是向下的。

凹凸貼圖7

有不少計算向量的方法,不一樣的方法精確度不一樣,可是選擇什麼方法要取決於你所要求的精確度是個什麼層次。最一般的方法是分別計算每一個點上X和Y的傾斜度:

x_gradient = pixel(x-1, y) - pixel(x+1, y)
  y_gradient = pixel(x, y-1) - pixel(x, y+1)

在得出了這兩個傾斜度後,你就能夠計算多邊形點的法線了。

這裏有一個多邊形,圖上繪出了它的一條法線向量——n。除此,還有兩條向量,它們將用來調節該點法線向量。

凹凸貼圖8 凹凸貼圖9

這兩條向量必須與當前被渲染的多邊形的凹凸圖對齊,換句話說,它們要與凹凸圖使用同一種座標軸。下邊的圖分別是凹凸圖和多邊形,兩副圖都顯示了U、V兩條向量(譯者注:也就是平面2D座標的兩條軸):

凹凸貼圖11 凹凸貼圖10

如今你能夠看到被調節後的新法線向量了。這個調節公式很簡單:

New_Normal = Normal + (U * x_gradient) + (V * y_gradient)

有了新法線向量後,你就能夠經過補色渲染技術計算出多邊形每一個點的亮度了。

參考

Bump Mapping [翻譯]瞭解凹凸映射(BUMP MAPPING)技術 凹凸貼圖(Bump Map)實現原理以及與法線貼圖(Normal Map)的區別

相關文章
相關標籤/搜索