使用凹凸貼圖(Bump Mapping)
凹凸貼圖是什么?
????????我們首先來看low-poly(多邊形數(shù)較少)mesh和high-poly(多邊形數(shù)量較多)mesh之間的不同。首先,最明顯的不同就是high-poly能夠表現(xiàn)出更多細(xì)節(jié),但high-poly有比較大的性能開銷。有沒有一種比較折中的辦法使得我們既能夠讓mesh看起來細(xì)節(jié)更加豐富,同時(shí)多邊形數(shù)量盡可能少呢?
????????這種方法就是bump mapping,使用了凹凸貼圖,可以在多邊形數(shù)量較少的情況下,也能表項(xiàng)出較多的表面細(xì)節(jié),性能上根更具優(yōu)勢(shì)。
????????在凹凸貼圖中,有兩種主要使用的貼圖類型:法線貼圖和高度貼圖(視差貼圖)。
????????法線貼圖(normal map)會(huì)在整個(gè)表面上設(shè)置法線的值,這些值會(huì)在shader中使用,最終呈現(xiàn)出一種效果是這個(gè)表面的片元(像素)是朝向了不同的方向,計(jì)算結(jié)果可以使得表面呈現(xiàn)出凹凸的樣子。

????????高度貼圖(height maps)中的數(shù)據(jù)表達(dá)的是mesh的每個(gè)像素的相對(duì)高度。
????????法線貼圖和高度貼圖能夠在不消耗過多算力的情況下,使得物體表面的細(xì)節(jié)更加真實(shí)豐富。
使用法線貼圖
????????在Unity中,點(diǎn)擊模型,在Inspector中選則對(duì)應(yīng)材質(zhì),進(jìn)入材質(zhì)的Inspector面板,可以看到一個(gè)Normal Map的屬性。

????????在這個(gè)例子中,這個(gè)模型的Normal Map已經(jīng)有設(shè)置了法線貼圖文件了。我們將Normal Map設(shè)置為None,對(duì)比看看效果。

使用高度貼圖
????????高度貼圖中的數(shù)據(jù)表示了每個(gè)像素相對(duì)于mesh的高度。通常它是一個(gè)單通道(灰度)貼圖,其中每個(gè)像素值表示了從mesh表面算起的相對(duì)距離。如果我們使用RGB圖像作為高度貼圖,shader只會(huì)讀取G通道值作為相對(duì)高度值。

????????這里以一個(gè)例子來看高度貼圖的效果。在場(chǎng)景中,新增了一個(gè)立方體,在例子中我們創(chuàng)建了一個(gè)Pavement的材質(zhì),設(shè)置了對(duì)應(yīng)的Base Map,Metallic Map,Normal Map等。然后我們應(yīng)用材質(zhì)到這個(gè)立方體上,效果如下:

????????????調(diào)節(jié)一下Height Map,對(duì)比看看效果:

