凹凸貼圖、法線貼圖、置換貼圖_第1頁(yè)
凹凸貼圖、法線貼圖、置換貼圖_第2頁(yè)
凹凸貼圖、法線貼圖、置換貼圖_第3頁(yè)
凹凸貼圖、法線貼圖、置換貼圖_第4頁(yè)
凹凸貼圖、法線貼圖、置換貼圖_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

凹凸貼圖、法線貼圖、置換貼圖而原先我們只能在墻壁、樹皮上看到一點(diǎn)法線貼圖的效果....所以下一輪的模型設(shè)計(jì),這個(gè)元素是熱點(diǎn)..... 先轉(zhuǎn)這篇文章過來(lái)談?wù)劯拍?,二樓講如何制作。其實(shí)我本人對(duì)模型制作3D之類完全外行轉(zhuǎn)這個(gè)只是想拋磚引玉歡送大家爭(zhēng)論灌水頂貼就不必了首先我想說,對(duì)于凹凸貼圖在計(jì)算機(jī)圖形領(lǐng)域中的爭(zhēng)論,最早開頭于70年月末,至今已經(jīng)有接近30年歷史了。NormalMap只是一種目前很流行的凹凸貼圖技術(shù),而這里將會(huì)介紹一些目XBOX360和PlayStation3BumpMapping凹凸貼圖CG的朋友肯定比FXCarlBumpMap。這種貼圖是一種灰度圖,用外表上灰度的變化來(lái)描述目標(biāo)外表的凹凸,因此這種貼圖是黑白的,假設(shè)節(jié)約空間的畫,甚至可以把貼圖的Alpha通道征用來(lái)用作Bump。值得留意的是,這種貼圖外表上存儲(chǔ)的東西是高度域--即每個(gè)點(diǎn)和原始外表的高度差,記住,每個(gè)點(diǎn)的顏色不是顏色,是高度,一個(gè)數(shù)值!因此,對(duì)3D在玩耍中,所使用的算法精準(zhǔn)的說應(yīng)當(dāng)叫做fakebumpmapping,假凹凸貼圖。由于在玩耍中BumpMap把BumpMap疊加在已經(jīng)渲染好的外表上,造成亮度上的擾動(dòng),從而讓人以為是凹凸的--這個(gè)很簡(jiǎn)潔理解,把一面白色的墻面有技巧的局部劃成灰色就會(huì)變成蝕痕,這些諸位會(huì)比小的更擅長(zhǎng)。而計(jì)算簡(jiǎn)單度是根本加減法。這個(gè)所謂的FakeBumpMappingGeforce2就開頭硬件支持,但是從來(lái)沒有大范圍的應(yīng)用過。不過好玩的是,BumpMap這個(gè)東西卻從未過時(shí),在后來(lái)的渲染算法中,其儲(chǔ)存外表高度域的特性仍舊發(fā)揮著巨大的作用。我們后文再提NormalMapping 法線貼圖NormalMapping在玩耍領(lǐng)域中的實(shí)踐是一個(gè)格外值得記住的時(shí)期--Geforce3上市,GPU概念消滅,硬件可編程流水線的消滅〔Shaders〕,NormalMapping是一種凹凸貼圖技術(shù),它的另Dot3bumpmapping。用于實(shí)現(xiàn)它的掌握紋理是一張叫做NormalMap的紋理,也是目前大家在爭(zhēng)論如何之作的那種。我們先說說這張叫做NormalMap的圖。這張圖中存儲(chǔ)的東西是每個(gè)原始外表法線的迭代,說起來(lái)有點(diǎn)簡(jiǎn)單,但是不難理解。舉例說我們的說面,一般在玩耍的3D模型上,外表法線就像是一根站立于桌面的鋼筆,垂直向上。而NormalMap中存儲(chǔ)的東西就是我們這支表示外表法線方向15NormalMap有兩種主要形式,一種叫做世界空間的NormalMap,一種叫做切空間的NormalMap。第一種在玩耍中沒有有用價(jià)值,我們說其次種,也就是大家最常見的一種。NormalMap會(huì)有這么驚異的顏色呢?其實(shí)NormalMap和BumpMap一樣,了。在NormalMap的定義中,有一個(gè)事先的商定,這個(gè)商定就是--原本外表的垂直方向,我們ZUVXY〔精準(zhǔn)的說,應(yīng)當(dāng)是稱作切線和負(fù)法線,但是這兩個(gè)東西和大家生疏的UV坐標(biāo)剛好重疊,所以就用大家更習(xí)慣的說法了〕我們知道假設(shè)我們?cè)赬YZ軸上各取一個(gè)點(diǎn),這個(gè)點(diǎn)的取值位置在-1到1之間,那么我們就可以得到一個(gè)指向任何方向的法線方向〔不用多解釋,大家知道法線是一個(gè)向量,向量有方向和長(zhǎng)度兩個(gè)概念,但是對(duì)法線來(lái)說,長(zhǎng)度是不需要的〕。但是,請(qǐng)大家留意,我們?cè)诿枋鲱伾臅r(shí)候,RGB三個(gè)通道的取值范圍都是從零開頭的??墒钱?dāng)我們嘗試把一個(gè)任意的法線保存在一張紋理中的時(shí)候,會(huì)面臨取負(fù)值的問題。因此我們要把法線做壓縮。方法很簡(jiǎn)潔,把XYZ每個(gè)軸上的法線投影長(zhǎng)度進(jìn)展N+1/20和1的范圍里。然后我們把XYZ的方向分別存儲(chǔ)在RGBNormalMap會(huì)是藍(lán)兮兮的緣由是吧。那么現(xiàn)在就是公布結(jié)果的時(shí)候了!首先,我們知道假設(shè)在一個(gè)物體外表,法線垂直向上,那么它的XYZ坐標(biāo)是多少?是0,0,1對(duì)不對(duì)?然后我們把這個(gè)數(shù)字依據(jù)我們前面所說的壓縮方法進(jìn)展壓縮,每個(gè)數(shù)字加1然后再除以2,那么我們得到的是0.5,0.5,1對(duì)不對(duì)?好我們把它代入到RGB中,那么我們會(huì)得到128,128,255對(duì)不對(duì)?好了,試試看在調(diào)色板里的顏色吧!P.SFXCarl和你猜個(gè)謎,看看FXCarl說的對(duì)不對(duì)?,F(xiàn)在我們?cè)贜ormalMap上觀察一個(gè)顏色,這個(gè)顏色是219,128,219。那么這個(gè)外表的法線方向是垂直向右偏45度。大家用MAX做NormalMapFXCarl假設(shè)你還沒有理解NormalMap的意思,或者說你有興趣再深入了解一些,那么FXCarl再和你說的深入一些。不知道大家對(duì)于切空間的理解是什么?我們來(lái)個(gè)試驗(yàn),找三支筆。然后其中兩只筆在桌面放成相互成90度,筆尾接筆尾。最終我們把第三支筆,筆尖向上,筆尾和那兩只桌面上的筆的筆尾疊在一個(gè)點(diǎn)上。留意看我們的三支筆!這三支筆就是這張桌面上這個(gè)點(diǎn)的切NormalMap中存儲(chǔ)的外表法線方向原來(lái)就是一個(gè)切空間向量啊,恩沒錯(cuò),就是切空間向量。但是似乎看起來(lái)切空間沒什么作用是不是?呵呵,我們不妨把桌面換成一個(gè)籃球。記住,保持三支筆的相互關(guān)系,然后用三支筆并在一起的筆尾去接觸籃球的外表。呵呵,覺察了沒有?切空間的優(yōu)勢(shì)在于,在任意外表上,切空間中的坐標(biāo)都是有效的!也就是說始用切空間中的數(shù)據(jù)就可以做到和3D模型的簡(jiǎn)單度無(wú)關(guān)!你可以用在任意的外表,甚至這個(gè)外表始終在動(dòng)也不會(huì)影響到NormalMap發(fā)揮作用,你說這個(gè)切空間是不是很有用呢?讓我們回到開頭,大家就會(huì)覺察,假設(shè)使用世界空間的NormalMap會(huì)有什么樣的結(jié)果呢?嘿嘿中有兩個(gè)一樣的人物,但是他們的姿勢(shì)和面對(duì)的角度都不一樣。那么……MyGod~確定有一個(gè)人物的NormalMap是沒法適用的!而用切空間的NormalMap就沒有問題了。恩,不過這個(gè)大家可以放心,MAX或者M(jìn)aya做出來(lái)的NormalMap都是切空間的NormalMap,證明的方法很簡(jiǎn)潔……看看這張貼圖是不是主要由藍(lán)色構(gòu)成的……OK,下面是重頭戲,告知大家NormalMap是如何發(fā)生作用的。使用NormalMap的先決條件--逐像素著色。先來(lái)說一下傳統(tǒng)著色,傳統(tǒng)玩耍使用的是一個(gè)Phong光照模型的簡(jiǎn)化版,甚至有玩耍使用Ground模型。這兩種算法的方式都是只對(duì)物體3D模型的3DShaders后才有的,因此NormalMapping也是一個(gè)Shaders必需的算法。計(jì)算一個(gè)物體外表漫反射光照的公式是很簡(jiǎn)潔的NdotL--什么是NdotL,就是物體外表的法線和光照方向的點(diǎn)積。點(diǎn)積是一個(gè)線性代數(shù)的問題,美術(shù)朋友們可以不用深究,寫成程序也很簡(jiǎn)潔:Diffuse=saturate(Mul(Normal,Light))影,然后這個(gè)投影的結(jié)果變成黑白中間的一個(gè)值。我們同樣舉個(gè)簡(jiǎn)潔的例子,用兩支筆放在桌面上,然后一支筆不動(dòng),令一支筆筆尾和第一支筆的筆尾相連,不動(dòng),然后以共同的筆尾做為圓心,移動(dòng)筆。這時(shí)假設(shè)我們從一支筆尖往另外一支筆的筆桿上垂直拉一條線〔一條垂線〕就〔就是一支筆的筆尖連垂線到另一支筆的筆桿上的位置,這個(gè)位置沿著筆桿到共同筆尾的長(zhǎng)度〕會(huì)越來(lái)越短,當(dāng)兩支筆垂直的時(shí)候,投影的結(jié)果就是零--沒有光照奉獻(xiàn)了。這個(gè)簡(jiǎn)潔理解,當(dāng)光線的方向和一個(gè)外表確定平行的時(shí)候,這個(gè)外表就會(huì)再也承受不到光線了?,F(xiàn)在我們引入NormalMap。這時(shí)我們的光照計(jì)算和以往有點(diǎn)不同,我們把外表的法線用NormalMap中存儲(chǔ)的法線來(lái)替代。這樣當(dāng)我們?cè)谟?jì)算外表光照狀況的時(shí)候,就會(huì)由于法線不斷的變化而產(chǎn)生比原來(lái)豐富的多的明暗變化。至于為什么會(huì)感覺出凹凸來(lái)這個(gè)就是人的眼睛自己騙自己了……其實(shí)那里本沒有凹凸的,但是我們?nèi)搜劬μ喙荛e事了。就像Windows的按鈕哪個(gè)純平面的東西我們還以為是凸出來(lái)的呢。NormalMap-NormalMap視角問題。由于NormalMap只是轉(zhuǎn)變的外表上的光照結(jié)果,并沒有轉(zhuǎn)變外表上的外形。因此,外表上看來(lái),似乎只要是不接近水平,NormalMap就不會(huì)有視角問題。其實(shí)不然,NormalMap桌面上突出一塊,然后在突出的這塊東西邊上放一支牙簽。假設(shè)用NormalMap表現(xiàn),會(huì)覺察。依據(jù)閱歷,這個(gè)凸起會(huì)很輕易的擋住我們的視線,讓我們看不見那支牙簽??墒荖ormalMap卻直于平面的時(shí)候NormalMap才會(huì)發(fā)揮最好的作用。這樣一來(lái),NormalMap只能用在大家對(duì)遮擋關(guān)系不敏感的場(chǎng)合,比方場(chǎng)景等,不是不能用于人物,而是用NormalMap的人物不太經(jīng)得起特寫,放大了,角度刁鉆了都簡(jiǎn)潔穿幫。雖然NormalMap有個(gè)不能平視的巨大問題,但是照舊是好處遠(yuǎn)大于小障礙,因此還是格外值得推廣的。后面的幾種興算法其實(shí)都是由NormalMapping也還是最有理解價(jià)值的。P.S.關(guān)于NormalMap的一點(diǎn)秘籍。留意理解……NormalMap其實(shí)并不是從低模的外表凸出高模的細(xì)節(jié)的,而是把高模中比最高點(diǎn)的位置低的地方凹進(jìn)去的!因此低模要比高模大一點(diǎn)點(diǎn)才出來(lái)的。P.S.2.關(guān)于NormalMap的做法,其實(shí)早期制造NormalMapMAX這種這么便利生NormalMap的方法,NormalMap都是從BumpMap計(jì)算得到的,因此其實(shí)通過很簡(jiǎn)潔的算法就BumpMapNormalMapOnTheFly〔就是讓玩耍引擎直接讀BumpMap然后轉(zhuǎn)換成NormalMap〕。因此對(duì)于一些建起模來(lái)效率很低,但是又能明顯增加外表細(xì)節(jié)的東西,例如水泥外表的顆粒,用畫Bump的方式來(lái)做是個(gè)更好的方法,然后交給技術(shù)美工去搞定好了--固然你會(huì)用Z-Bursh那就當(dāng)我什么都沒說了,呵呵。說來(lái)FXCarlMAX線圖的方式也是比較凹凸模上每個(gè)點(diǎn)的高度偏移,然后生成每個(gè)UV圖素上的高度差來(lái)得到一BumpMap,然后再?gòu)腂umpMapNormalMap。Parallaxmapping視差貼圖〔由于后面的算法都是基于NormalMap的應(yīng)用,可能看上去沒有NormalMapping那么長(zhǎng)了,但內(nèi)容確定一樣精彩的!〕視差貼圖是一種NormalMapping算法的增加算法,其本質(zhì)上和NormalMapping沒有區(qū)分。優(yōu)勢(shì)是只需要增加3個(gè)HLSL語(yǔ)句和一個(gè)掌握紋理通道〔只需要幾個(gè)GPU指令,代價(jià)小到可以無(wú)視〕就可以顯著的增加物體外表的深度感。但是NormalMap中消滅的問題,Parallaxmapping根本使用NormalMapFXCarl個(gè)人的說法--ParallaxmappingNormalMapping。目前實(shí)踐證明,這種技術(shù)格外適合XBOX360和PS3這樣的世代玩耍主機(jī)〔都上市一年了還用次世代……我真受不了現(xiàn)在有些人〕。例如360SEGAPCFEARMonolithParallaxmapping。Parallaxmapping使用的還是單張的掌握紋理。一張NormalMap。假設(shè)我們用AcdSee來(lái)看這張NormalMap,我們會(huì)覺察似乎和NormalMapping用的掌握紋理是一樣的。而假設(shè)我們翻開這張NormalMap的Alpha通道,就會(huì)覺察其中的玄機(jī)所在。原來(lái)Alpha通道里存儲(chǔ)的是對(duì)應(yīng)這張NormalMapBumpMap!〔就是HeightMap,就是用飽和度記錄外表高度〕現(xiàn)在插入一點(diǎn)理論課程。大家留心讀上面的文字,會(huì)觀察一個(gè)掌握紋理的詞匯。這個(gè)詞匯是這里要重點(diǎn)解釋的。由于理解掌握紋理,在成為世代美工的需求中是相當(dāng)重要的。依據(jù)大家這么多年美術(shù)做下來(lái)的閱歷,對(duì)于圖素(Texel,紋理上的一點(diǎn))的理解確定是RBG3個(gè)顏色帶一個(gè)表示透亮度的Alpha通道。但是在我們的渲染器和程序員的眼里,它可不是我們美術(shù)朋友們觀察的東西。他們觀察的是一個(gè)4通道的矢量〔其實(shí)可以理解成四個(gè)數(shù)的組合〕。這4個(gè)數(shù)字的取值范圍分別是0到255。通過這個(gè)空間,其實(shí)可以用來(lái)做更多別的事情--最常用的就是記錄外表的物理細(xì)節(jié)。至于為什么要用掌握紋理呢?FXCarl前兩天聽一個(gè)朋友有這么個(gè)說法:我覺得NormalMap的效果也沒什么,直接畫也畫的出來(lái)的。其實(shí)這個(gè)說法一點(diǎn)都沒錯(cuò),但是要知道,這個(gè)想法是過時(shí)的。由于NormalMap并非用于著色,而是用于更真實(shí)的生成顏色。重所周知,用畫的方式,做靜幀固然可以做到無(wú)限好??墒莿?dòng)起來(lái)怎么辦?如何才能保證在不同的光照關(guān)系下照舊保證最終著色的結(jié)果正確?唯一的做法,就是每幀重畫一遍。如何才能做到最有效的重畫?那就要把重畫的參考告知我們的渲染器,讓它來(lái)幫你做一些簡(jiǎn)潔的工作,這就是掌握紋理的作用--把你想要實(shí)時(shí)轉(zhuǎn)變的東西告知渲染器。其實(shí)掌握紋理的范圍很大,除了NormalMap還有很多,比方說Nvidia的DEMO曾經(jīng)用紋理存儲(chǔ)物體外表在陽(yáng)光下的顏色變化規(guī)律。把藝術(shù)家想要實(shí)時(shí)轉(zhuǎn)變的東西壓縮在紋理中告知渲染器是一件相當(dāng)有挑戰(zhàn)性的工作,固然普遍適用的著色的利器!ParallaxmappingNormalMap的效果的呢。我們要從NormalMap的特性說起。我們假設(shè)在NormalMap外表制作一個(gè)凸起。然后我們轉(zhuǎn)轉(zhuǎn)角度看看。我們會(huì)覺察,其實(shí)這個(gè)凸起的背對(duì)我們視線的面~道背后的東西應(yīng)當(dāng)是看不見的才對(duì)。因此Parallaxmapping就是來(lái)緩解這個(gè)問題的,具體的代碼這里不提。我來(lái)試著白話解釋一下原理。其實(shí)為了不讓我們觀察“不該看的東西”應(yīng)當(dāng)試著挪動(dòng)紋理坐標(biāo)……把那個(gè)不該給玩家觀察的圖素〔Texel〕跳過去。也就是說依據(jù)高度圖供給的數(shù)據(jù),把那個(gè)位置較低那個(gè)紋理的后面的紋理向前拉。相當(dāng)于在圖素采樣的時(shí)候刻意的把那個(gè)圖素跳過去。這樣那個(gè)不該被玩家觀察的像素就會(huì)由于圖素的消逝而不見了--很明顯,這個(gè)算法是不太站得住腳的,雖然計(jì)算的時(shí)候會(huì)參考玩家視線的角度。但仍舊是一種來(lái)自于經(jīng)驗(yàn)的估算。值得欣慰的是,對(duì)于本身NormalMap所需要表現(xiàn)的微小細(xì)節(jié)來(lái)說,這樣的改進(jìn)已經(jīng)看上去不錯(cuò)。因此開頭有大量的玩耍打算承受。特別是它的優(yōu)點(diǎn)是所消耗的代價(jià)極為有限,而需要Alpha但是對(duì)于技術(shù)爭(zhēng)論者來(lái)說,這樣的表現(xiàn)明顯還是不夠令人滿足的。因此,順著視差貼圖的思路向下進(jìn)展,借助ShaderModel3.0的消滅。消滅了一個(gè)真正從物理上轉(zhuǎn)變物體外表的算法,這就DisplacementMappingDisplacementmapping位移貼圖(置換貼圖)和前面說的幾種方式不同,DisplacementMapping是一種真正轉(zhuǎn)變物體外表的方式。通過一種稱為micropolygons〔微多邊形〕tessellate〔鑲嵌〕的技巧來(lái)實(shí)現(xiàn)真正的轉(zhuǎn)變物體外表的細(xì)節(jié)。具體流程是這樣的。首先,依據(jù)屏幕的區(qū)分率,在模型的可見面上鑲嵌和最終象素尺寸一樣的微多邊形。這個(gè)過程叫做鑲嵌。然后讀取一張Bump

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論