最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

聊一聊一些熒幕和現(xiàn)場背后的圖像故事(21)--貼圖

2021-04-10 14:20 作者:盲人號(hào)  | 我要投稿

貼圖是計(jì)算機(jī)建模呈像技術(shù)的一部分


細(xì)分有材質(zhì)貼圖,紋理貼圖,法線貼圖,環(huán)境貼圖


那么我們來整理下吧


我們一直會(huì)聽到大大小小的消息流出所謂“建?!?/p>


那到底啥是建模那,


建模最簡單通俗的解釋就是,用你手邊的3維繪圖工具,在三維角度繪制出一個(gè)角色/物件

這個(gè)過程本身


受制于工具的選擇 主流的有MAYA C4D blender Zbrush

建模的達(dá)成方式不盡相同,但目的非常直觀,就是構(gòu)架3D模型本身,可以是景物的,建筑的,人物的,指示牌的。

3D影視動(dòng)畫以及游戲制作過程中的一個(gè)環(huán)節(jié),即:用ps等平面軟件制作材質(zhì)平面圖,覆于利用Maya、3DMax等3D制作軟件建立的立體模型上的過程,稱為貼圖。

常用格式為pdd\jpg\tif\psd

這么多概念,無非是為了完成一個(gè)共同目標(biāo):用計(jì)算機(jī)表現(xiàn)真實(shí)可信的 Shading

Shading 是真實(shí)世界中的光影效果,它是由物體表面材質(zhì)、燈光、觀察者的視角等多種因素共同決定的。要實(shí)現(xiàn)計(jì)算機(jī)的模擬生成,是一個(gè)非常復(fù)雜的過程。不過它的原理大概可以簡化為一個(gè)函數(shù):Intensity = ?Material (Light, Eye)

也就是說,光影的強(qiáng)度,是由 a.照在材質(zhì)上的光 ?b.視線 共同決定的。

如何制造 Shading 效果?

萬物看起來不盡相同,它們有各自的材質(zhì)和紋理。

紋理(Texture)是什么?

紋理就是一段有規(guī)律、可重復(fù)的圖像。利用紋理,我們可以非常取巧地讓三維物體看起來更真實(shí)。

貼圖可以說是最簡單的材質(zhì)方法:

選定物體表面的某些區(qū)域

更改這個(gè)區(qū)域的一些屬性(如顏色、反光度、透明度等

那么 UV Mapping 又是什么?跟 Texture Mapping 有什么區(qū)別呢?

可以這么理解,Texture Mapping 是目標(biāo),把材質(zhì)用一種規(guī)則映射到物體表面。而 UV Mapping 就是映射的規(guī)則。在這個(gè)規(guī)則中,給三維體每一個(gè)頂點(diǎn)增加兩個(gè)值 U 和 V,它們記錄了三維表面和二維表面的坐標(biāo)對(duì)應(yīng)關(guān)系:


有了映射關(guān)系,我們就可以分門別類地把影響光照的不同參數(shù),都通過圖片映射到三維幾何體上。

貼上皮膚的方法雖好,但是局限也很明顯。如果沒有合適的圖像,或者要?jiǎng)?chuàng)建真實(shí)世界中罕見的材質(zhì),皮膚就不好找了。這個(gè)時(shí)候需要讓程序幫忙「生長」出新的皮膚。

這種程序叫做 Shaders。Shading 是始終如一的終極目標(biāo),那么應(yīng)該就能明白為什么實(shí)現(xiàn)這個(gè)目標(biāo)的程序叫做?Shaders 了。

它實(shí)際上是一個(gè)程序片段、一系列的指令,可以將三維 Mesh(網(wǎng)格)以指定方式與顏色、貼圖等組合,完成復(fù)雜的計(jì)算輸出(渲染器可讀取的點(diǎn)和顏色的對(duì)應(yīng)關(guān)系),會(huì)對(duì)屏幕上的每個(gè)像素同時(shí)下達(dá)命令。也就是說,代碼必須根據(jù)像素在屏幕上的不同位置執(zhí)行不同的操作。就像活字印刷,你的程序就像一個(gè) function(函數(shù)),輸入位置信息,輸出顏色信息,當(dāng)它編譯完之后會(huì)以相當(dāng)快的速度運(yùn)行。

UV貼圖

UV貼圖是用于輕松包裝紋理的3D模型表面的平面表示。創(chuàng)建UV貼圖的過程稱為UV展開。

U和V指的是2D空間的水平軸和垂直軸,因?yàn)閄,Y和Z已在3D空間中使用。

一旦創(chuàng)建了多邊形網(wǎng)格,下一步就是將其“展開”為UV貼圖?,F(xiàn)在要賦予網(wǎng)格生命并使它看起來更逼真(或風(fēng)格化),你想添加紋理。

但是,沒有3D紋理之類的東西,因?yàn)樗鼈兪冀K基于2D圖像。

這就是UV映射的用處,因?yàn)樗菍?D網(wǎng)格轉(zhuǎn)換為2D信息以便可以在其周圍包裹 2D紋理的過程。

起初這似乎是一個(gè)令人困惑的想法,但這確實(shí)非常簡單。如果你以前曾經(jīng)用紙做過一個(gè)立方體,那么你只需完成相反的步驟即可!

但是,立方體是一個(gè)基本示例,并且隨著網(wǎng)格變得越來越復(fù)雜,UV貼圖也是如此。這可能會(huì)變得很繁瑣,但這對(duì)3D工作流程至關(guān)重要。

即使你不打算對(duì)模型進(jìn)行紋理處理,許多現(xiàn)代的實(shí)時(shí)引擎(例如,虛幻引擎4或Unity)也需要對(duì)你的資產(chǎn)進(jìn)行UV解包才能執(zhí)行其一些輕度烘焙。

探索紫外線解纏

既然已經(jīng)概述了UV貼圖的基本概念,我們就可以深入研究UV展開的中間部分,即接縫。

接縫是使任何3D幾何形狀扁平化的不幸和不可避免的副作用。

接縫是網(wǎng)格的一部分,必須進(jìn)行拆分才能將3D網(wǎng)格轉(zhuǎn)換為2D UV貼圖。

UV展開始終是一種折衷方案,可以使線框變形盡可能小,同時(shí)還要使接縫最小。就UV貼圖而言,變形是必須更改多邊形的形狀和大小以適應(yīng)平坦化過程的程度。太多的失真會(huì)影響最終模型上最終效果。

在此圖像中,打開多維數(shù)據(jù)集的方式未引起多邊形變形。

通過應(yīng)用基本的方格紋理可以很容易看出這一點(diǎn)。如果未拉伸棋盤格圖案,則可以避免展開時(shí)變形。

但是,這種僅將所有多邊形分開的方法的缺點(diǎn)是產(chǎn)生的接縫數(shù)量。

左側(cè)的多維數(shù)據(jù)集的UV接縫以綠色突出顯示。你可以看到圖案在邊緣移動(dòng)時(shí)沒有對(duì)齊。在更復(fù)雜的網(wǎng)格中,這可能會(huì)成為問題,這需要你需要練習(xí)并靈活地進(jìn)行接縫放置。

這是一個(gè)示例,如果你在UV解包中嚴(yán)重扭曲多邊形會(huì)發(fā)生什么。此多維數(shù)據(jù)集上的紋理與前面的示例沒有什么不同,但是你可以看到它已被拉伸并變形。但是,缺少接縫確實(shí)意味著圖案排成一行并圍繞立方體的邊緣,但是在這種情況下,付出的代價(jià)是不值得的。

顯而易見的答案是在兩者之間找到平衡。

在這個(gè)圖像中,你可以看到保留了棋盤格圖案,并且我們?cè)诹⒎襟w的正面周圍有一些不錯(cuò)的連續(xù)邊。

在練習(xí)和展開更多內(nèi)容時(shí),你將了解“隱藏”接縫的最佳位置是使它們不那么明顯。

使接縫不那么明顯的良好規(guī)則是:

  • 使它們沿著通常不太明顯的堅(jiān)硬邊緣

  • 將它們隱藏在模型的其他部分后面。例如,如果解開頭部,則將接縫放在頭發(fā)所在的位置。

  • 將它們隱藏在模型焦點(diǎn)下方或后面,這樣人們就不太可能看到它們。

展開3D網(wǎng)格時(shí)要考慮的另一件事是UV重疊。

當(dāng)你的UV貼圖中有兩個(gè)或多個(gè)多邊形彼此重疊時(shí),就是UV重疊。這意味著模型的這兩個(gè)部分將顯示相同的紋理信息,因?yàn)樗鼈兌颊紦?jù)相同的UV空間。

通常要避免重疊UV,這樣可以使紋理保持變化,而不會(huì)偶然導(dǎo)致紋理看起來不正確。也就是說,有時(shí)你可能會(huì)故意使用重疊的UV。如果紋理非?;荆敲茨憧赡軙?huì)在同一UV空間上具有多個(gè)網(wǎng)格部分來重復(fù)該紋理。

這項(xiàng)技術(shù)非常有用,因?yàn)樗梢宰屇銣p小紋理大小,這意味著,如果你使用的是游戲引擎,通常它將運(yùn)行得更流暢。

當(dāng)開發(fā)較弱的機(jī)器(如手機(jī))時(shí),這一點(diǎn)尤為重要。

關(guān)于紫外線貼圖需要了解的最后一件事是紫外線通道。UV通道允許同一對(duì)象具有多個(gè)UV貼圖。對(duì)于游戲引擎而言,這再次非常重要。如本文前面所述,游戲引擎使用UV貼圖烘焙照明信息。

這意味著絕對(duì)不會(huì)有任何重疊的UV,因?yàn)殛幱靶畔⒎胖迷谀P偷腻e(cuò)誤區(qū)域中,并且你通常會(huì)收到某種錯(cuò)誤消息。如前所述,現(xiàn)在重疊的UV有時(shí)在游戲開發(fā)中是個(gè)好主意。

因此,折衷方案是具有2個(gè)UV通道。一種是帶有紫外線信息的紋理,另一種是帶有紫外線信息的照明。您做得越多,越容易,但是UV制圖過程有很多細(xì)節(jié)。希望你現(xiàn)在對(duì)UV映射有了更好的了解。這是一個(gè)足夠簡單的過程,乍一看似乎令人生畏,但很容易掌握實(shí)踐。




法線是什么?


1、法線無處不在,這是圖形學(xué)基礎(chǔ)中的基礎(chǔ)。

2、法線貼圖,凹凸圖,位移圖等等,在圖形學(xué)歷史上有著比較重要的位置,在很多圖形學(xué)的架構(gòu)中都有應(yīng)用,典型的例如延遲渲染架構(gòu)。

法線

法線,英文名normal。首先,要理解點(diǎn)法線和面法線。

現(xiàn)在資料爛大街的年代,去尋找這個(gè)答案是比較容易的,估計(jì)連百度都能找到還不錯(cuò)的答案解釋了。記得當(dāng)初為了搞懂這個(gè)東東,我自己親自寫過很多算法。

第一個(gè)問題:假設(shè)一個(gè)頂點(diǎn)被N個(gè)三角形公用,這個(gè)頂點(diǎn)的法線怎么算?

如圖,點(diǎn)A的法線應(yīng)該怎么算才是合理的?

如果是取的面法線,那么多個(gè)面公用一個(gè)點(diǎn),取哪個(gè)面的才是合理的?這個(gè)問題曾經(jīng)困擾過我好幾天。然后我自己寫算法驗(yàn)證。

第一個(gè)方法:取任意一個(gè)面的法線。但是這種做法效果奇差,可想而知。

第二個(gè)方法:計(jì)算所有相鄰的面的法線,然后取平均值。

這種方案一般情況下,效果還湊合。但是會(huì)有其他一些問題。

1、當(dāng)一個(gè)很大的面和一個(gè)很小的面鄰面,兩個(gè)面加權(quán)求平均,合適嗎?

2、并非所有的應(yīng)用都是需要這種平滑的光照渲染,例如有一些GIS相關(guān)的應(yīng)用,說不定不需要平滑的光照,而是希望得到面與面的清晰邊界的光照。

第三個(gè)方法:每一個(gè)面的法線都要,每個(gè)頂點(diǎn)的法線就是面法線。那么,這種情況下,共面的頂點(diǎn)怎么辦?當(dāng)然是多頂點(diǎn),不適用共享頂點(diǎn)操作模式。例如一個(gè)頂點(diǎn)有N個(gè)共面,那么這個(gè)頂點(diǎn)就不是一個(gè)頂點(diǎn),而是N個(gè)頂點(diǎn),但是坐標(biāo)是一樣的,法線不一樣。這種模式,會(huì)導(dǎo)致共享頂點(diǎn)減少顯存占用的做法失效了。但是,對(duì)現(xiàn)代顯卡來說,其實(shí)頂點(diǎn)數(shù)大多數(shù)情況下不是很大的開銷了,尤其是對(duì)于PC來說。

第四個(gè)方法:根據(jù)相鄰面的權(quán)重來計(jì)算。權(quán)重用面積來算。假設(shè)有三個(gè)面共頂點(diǎn),三個(gè)面的面積分別為A、B、C,法線分別為N1、N2、N3.那么先算A的面積占比p1 = (A / (A + B + C)),法線的占比跟面積的占比一樣的。N1 = p1 * (N1 + N2 + N3)。這個(gè)算法是我自己測(cè)試的,我估計(jì)不會(huì)有人這么干,當(dāng)初我這么做只是為了看看這樣做的效果怎么樣,有沒有操作的可行性。事實(shí)上,這種做法,效果不怎么樣,按道理大概率不會(huì)有軟件這么做?

我估計(jì),現(xiàn)在圖形學(xué)上,采用的方案主要是第二跟第三種。我在網(wǎng)上找了兩張圖,看看第二跟第三種的區(qū)別,一眼可以看到。

這么看來,是不是頂點(diǎn)法線才是最合理的?面法線不靠譜?其實(shí)不是的,這種完全是看你的需要。看圖:

如果是這種box,你用了頂點(diǎn)法線,出來的就是這種不倫不類的效果了。這種情況下,你大概率需要的是各個(gè)面的面法線。所以總結(jié)開來,當(dāng)你需要平滑的時(shí)候,用求平均這類頂點(diǎn)法線;當(dāng)你需要區(qū)分的時(shí)候,不同面用不同的法線。


法線貼圖。

為什么需要法線貼圖?

看看這圖。如果需要在3D里面渲染這樣一個(gè)畫面,首先是很麻煩,其次是頂點(diǎn)太多。做這樣一個(gè)模型,估計(jì)幾萬面都是可能的。一些大場景里,滿屏的懸崖峭壁,都是這樣的效果,面數(shù)太多,導(dǎo)致了渲染效率的低下。

那么,能不能做一個(gè)面,然后直接上圖?當(dāng)然可以。但是,效果較差,并且實(shí)時(shí)渲染光照的時(shí)候,就更加不理想了。這個(gè)時(shí)候,就需要用法線貼圖了。

 光與影,法線貼圖技術(shù)的物理學(xué)基礎(chǔ)

  我們知道,人之所以能夠?qū)拔锟闯隽Ⅲw感的主要原因是因?yàn)槿擞袃芍谎劬?。兩只眼睛看的景象是不同的,所以人們才能分辨出立體感來。但是,由于電腦的屏幕是一個(gè)平面,分辨3D效果就只能靠光影效果來實(shí)現(xiàn)了。

  舉個(gè)簡單的例子,這就像我們畫素描的時(shí)候,為了不讓一個(gè)球體看起來像是一個(gè)圓圈,必須讓球體的一些區(qū)域是亮的,一些區(qū)域是暗的。而且從亮部轉(zhuǎn)向暗部的時(shí)候是一個(gè)均勻的按照物理模型特點(diǎn)的過渡,這樣畫出來的球體才像個(gè)球體,電腦為我們繪制的過程也是一樣。

法線貼圖


因?yàn)橛忻靼担覀儾拍軐⑵矫胬斫獬闪Ⅲw

  基于這個(gè)道理,我們就不難理解可以通過貼圖局部的亮暗變化來實(shí)現(xiàn)假的3D效果。換一種說法就是說我們可以通過在貼圖上的局部做一些亮暗的變化來做到一種假的3D效果。


法線貼圖的意思是:這里還是渲染一個(gè)QUAD,兩個(gè)三角形,但是通過貼圖來描述像素的法線。渲染每一個(gè)像素的時(shí)候,都用的不同的法線,這樣,實(shí)時(shí)光照的時(shí)候,能完美模擬出來光照的效果,而且大大降低了計(jì)算量。下面,我隨手用CPU寫一點(diǎn)偽代碼,來模擬這個(gè)過程,能輕易看出來這個(gè)效率的不同。

這是用法線貼圖的。(注意,以上僅僅是簡單的CPU模擬,GPU不是這樣的。GPU有大量的渲染線程,并且我沒記錯(cuò)的話,還是SIMD指令,復(fù)雜得多。但是不管怎么樣,法線貼圖渲染效率的提升都是實(shí)打?qū)嵉摹?

那么以上可以看出,法線貼圖技術(shù),僅僅是讓三角形渲染的時(shí)候,多了一個(gè)真實(shí)的法線值,用于做光照計(jì)算,而不能增加頂點(diǎn)值。因?yàn)橐话銜r(shí)候,頂點(diǎn)值在計(jì)算光照的時(shí)候都用不到。

那么,是不是所有的復(fù)雜模型都可以用法線貼圖來解決呢?當(dāng)然是不可能的。說穿了,法線貼圖僅僅是簡單的視覺欺騙,一旦凹凸太明顯的模型,使用了法線貼圖,太靠近的時(shí)候,就穿幫了。所以,適用于法線貼圖的場合,主要就是凹凸不太明顯,細(xì)節(jié)很多,需要表現(xiàn)實(shí)時(shí)光照效果,不會(huì)太靠近觀察的物體。

法線貼圖為什么絕大部分都是偏藍(lán)色的?這是一個(gè)好問題。徹底理解了這個(gè)問題,那么法線的理解基本上可以說登堂入室,脫離了菜鳥行列。

先來回顧一些簡單的概念,我應(yīng)該會(huì)在紋理的章節(jié)里面講過,沒講過那就是漏掉了,講過了這里就當(dāng)復(fù)習(xí)。

重點(diǎn)1:紋理的像素值,都是0-1之間!沒有負(fù)數(shù),不能大于1!

這么干有什么好處呢?很簡單,一般的浮點(diǎn)數(shù),就是32位,精度有限,還有大量的精度用于描述整數(shù)部分,必然導(dǎo)致了小數(shù)部分精度的缺失。全部用于描述小數(shù),精度更好。我沒有仔細(xì)查看過GPU這塊用的是哪個(gè)浮點(diǎn)數(shù)標(biāo)準(zhǔn),我只隱約記得Nvidia的文檔里提過一般浮點(diǎn)數(shù)是IEEE754標(biāo)準(zhǔn),而紋理的就不知道了,但是我相信不會(huì)跟一般浮點(diǎn)數(shù)一樣的,畢竟不需要使用大量的資源來描述整數(shù)位了。

所以,法線值儲(chǔ)存在貼圖里,首先就要normalize,轉(zhuǎn)化為-1到1之間。然后再因?yàn)椴荒苡胸?fù)數(shù),需要再轉(zhuǎn)換到0-1之間,一般有大概這樣的函數(shù):

Float3 DecodeNormal(float3 n)

{

Return (n * 2 - 1.0f);

}

Float3 EncodeNormal(float3 n)

{

Return (n + 1.0f) * 0.5;

}

據(jù)說這個(gè)函數(shù)有人玩出花來的,例如什么壓縮到16位貼圖減少顯存占用,這個(gè)其實(shí)比較簡單,因?yàn)閚ormalize之后的法線值,其實(shí)是x ^2 + y^2 + z^2 = 1;那么你保存了x跟y豈不是可以反過來算出z了嘛。但是這種做法雖然降低了顯存占用,同時(shí)也降低了效率啊,需要開方一次。其他據(jù)說還有一大堆亂七八糟的優(yōu)化,我只是耳聞,反正我沒有干過。有興趣的也可以自己試試看。

重點(diǎn) 2:模型有本地坐標(biāo)系,世界坐標(biāo)系。渲染的時(shí)候,必須變換到世界坐標(biāo)系才能正確渲染。這個(gè)變換一般都很簡單,就是一行代碼:

Float4 WorldPos = WorldMatrix * LocalPos;

那么問題來了,法線怎么弄呢?當(dāng)你沒有用到法線貼圖的時(shí)候,其實(shí)也是一樣的:

Float4 WorldNormal = WorldMatrix * LocalNormal;

那么,你使用了法線貼圖呢?

我們需要這么干:

Float4 Normal = tex2D(NormalTexture, UV);

Float4 RealNormal = DecodeNormal(Normal); // 0,1轉(zhuǎn)換到-1,1

Float4 WorldNormal = WorldMatrix * RealNormal;

Float4 Col = CalcLighting(WorldNormal, Light);// 法線和光照計(jì)算顏色。

上面代碼有什么問題嗎?其實(shí),如果就一般的程序來說,一點(diǎn)問題都沒有。甚至更糟糕的垃圾代碼,都沒有問題。我見過無數(shù)比這糟糕得到的代碼,照樣跑得666.

圖形學(xué)為什么相對(duì)比較難?因?yàn)閳D形學(xué)對(duì)性能有極致的需求。以上代碼,對(duì)性能上有一定的損耗。主要表現(xiàn)在哪里?

首先,這里的UV是需要三角形插值得到的,這就導(dǎo)致了這部分代碼必須只能運(yùn)行在PS(像素著色器)上。也就是說,每個(gè)像素都需要執(zhí)行一遍。

其實(shí)這也不是什么大問題。但是,有更好的優(yōu)化方式啊。我可以把Light的坐標(biāo),轉(zhuǎn)換到法線貼圖的本地坐標(biāo)系,然后進(jìn)行光照,結(jié)果是一樣的啊,只要在同一個(gè)坐標(biāo)系即可。而Light的坐標(biāo)轉(zhuǎn)換,只需要在VS里面算一次即可,不需要在PS里面反復(fù)算。

以上這個(gè)坐標(biāo)系,叫做切線坐標(biāo)系。首先,任意一個(gè)三角形,先計(jì)算一個(gè)Normal,然后再計(jì)算一個(gè)切線。根據(jù)法線跟切線的兩兩垂直關(guān)系,叉乘(crossProduct),得到副法線,構(gòu)建坐標(biāo)系。三角形的法線好計(jì)算,已知三個(gè)頂點(diǎn),根據(jù)面的方向,兩兩叉乘可以得到法線,這點(diǎn)代碼到處都能找到。那么切線是怎么算的呢?我沒記錯(cuò)的話,我記得是用偏微分方程,以U坐標(biāo)方向?yàn)榍芯€方向來算的,那么V方向就是副法線方向(這部分不保證絕對(duì)正確,懶得去查資料了,大概理解一下原理即可,想知道的自己去查一下)。

除了效率原因,還有另外一個(gè)原因,據(jù)說是形變。假設(shè)是模型,使用了形變,如果法線貼圖儲(chǔ)存的是本地坐標(biāo)系,這個(gè)世界變換并不能體現(xiàn)這個(gè)形變,而且法線貼圖的計(jì)算一般都是再M(fèi)AX,瑪雅之類的軟件里,引擎一般不提供,修改法線貼圖就很麻煩了。而使用了切線坐標(biāo)系,是可以實(shí)現(xiàn)形變的。形變之后,重新計(jì)算Normal跟Tangent即可。但是,這其實(shí)也是挺麻煩的事,一般來說,使用到法線貼圖的模型,都是一些大平面的細(xì)節(jié)模型,形變這個(gè)因素我沒碰到過。

回到主題,為什么法線貼圖是偏藍(lán)色?很明顯了,在切線坐標(biāo)系里,定義順序是Tangent、Binormal、Normal,也就是說,Normal處于z這個(gè)方向。而對(duì)于一個(gè)三角形而言,絕大多數(shù)時(shí)候,法線值都是垂直于這個(gè)面的。顯而易見,法線貼圖的法線值大多數(shù)時(shí)候是接近于(0,0,1)的,當(dāng)然是接近于藍(lán)色了。

對(duì)法線編碼和解碼

我們的表面法線是單位向量, 通常位于范圍?-1.0?到?1.0?之間. 我們可以通過把法線范圍轉(zhuǎn)換為?0.0?到?1.0之間來把法線向量(x, y, z)存儲(chǔ)到一個(gè)?RGB?紋理貼圖中. 下面是偽碼:


  1. Color.rgb = Normal.xyz / 2.0 + 0.5;


例如, 一個(gè)法線?(-1, 0, 1)?會(huì)被作為?RGB?編碼為?(0, 0.5, 1).?x?軸(左/右)被保存到紅色通道,?y?軸(上/下)被保存到綠色通道,?z?軸(前/后)被保存到藍(lán)色通道.

最終的法線圖(normal map)看起來就是下面這個(gè)樣子:

翻譯:非常詳細(xì)易懂的法線貼圖(Normal Mapping) - R站|學(xué)習(xí)使我快樂! - 8

典型地, 我們使用程序來生成法線圖, 而不是手動(dòng)繪制.

理解法線圖, 把每個(gè)通道獨(dú)立出來查看會(huì)更清楚:

翻譯:非常詳細(xì)易懂的法線貼圖(Normal Mapping) - R站|學(xué)習(xí)使我快樂! - 9

看著,綠色通道,我們看到更亮的部分(值更接近于?1.0) 定義了法線指向上方的區(qū)域,而更暗的區(qū)域(值更接近為?0.0) 定義了法線指向下方的區(qū)域. 大多數(shù)的法線圖會(huì)是藍(lán)色,因?yàn)?code>Z軸(藍(lán)色通道)通常指向我們(即值為?1.0).

在我們游戲的片段著色器中, 我們可以把法線解碼, 通過執(zhí)行跟之前編碼時(shí)相反的操作, 把顏色值展開為范圍?-1.0?到?1.0之間:


  1. //sample the normal map

  2. NormalMap = texture2D(NormalMapTex, TexCoord);


  3. //convert to range -1.0 to 1.0

  4. Normal.xyz = NormalMap.rgb * 2.0 - 1.0;


注意: 要記住不同的引擎和軟件會(huì)使用不同的坐標(biāo)系, 綠色通道可能需要翻轉(zhuǎn).


什么是HDR環(huán)境貼圖?



1、打開模型文件,切換至頂視圖。


2、在創(chuàng)建面板中選擇圖形-->弧。


3、在可以看到窗戶的一側(cè)的外面繪制一條大弧線,如下圖:


4、切換至前視圖,在修改面板里添加擠出修改器,并在參數(shù)面板中數(shù)量設(shè)為5000,調(diào)整位置,不要遮住目標(biāo)平行光。


5、按m快捷鍵,為弧添加發(fā)光材質(zhì),然后賦予外景圖片jpg


6、綁定到弧線上。


7、然后在修改器面板中添加殼命令,這是為了做雙面或者厚度時(shí)所用,最后選擇UVW貼圖,在參數(shù)中選擇長方體,調(diào)整長寬高的參數(shù)。


8、最后,渲染接果如圖,窗外有一片樹林。

環(huán)境貼圖就是通過圖片的形式體現(xiàn)3維環(huán)境背景視感的做法,至于成立的形式


不同軟件也不經(jīng)相同,所以這只是一個(gè)通量

聊一聊一些熒幕和現(xiàn)場背后的圖像故事(21)--貼圖的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
连平县| 雷波县| 襄城县| 化德县| 西城区| 广西| 多伦县| 池州市| 安义县| 普兰店市| 郴州市| 清新县| 北碚区| 水城县| 施秉县| 上高县| 泸州市| 肇庆市| 凤山县| 兴安县| 田东县| 江门市| 文登市| 虎林市| 扶沟县| 分宜县| 肇庆市| 九龙城区| 贵定县| 清丰县| 尉氏县| 合肥市| 西峡县| 阿拉善盟| 睢宁县| 嵊泗县| 清流县| 靖安县| 富阳市| 盐山县| 冷水江市|