凹凸貼圖騎砍.doc_第1頁
凹凸貼圖騎砍.doc_第2頁
凹凸貼圖騎砍.doc_第3頁
凹凸貼圖騎砍.doc_第4頁
凹凸貼圖騎砍.doc_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Green Normalmaps. 綠色及全色法線貼圖講解【已翻譯】原帖地址: /index.php/topic,177923.0.html討論者: Sunnetci_Dede、 mtarini、 Yoshiboy 等這個(gè)貼提到了很深的3D技術(shù)內(nèi)容, 求專業(yè)人士翻譯,應(yīng)該對制作很有幫助。不是翻譯頂樓而是通篇翻譯Dede:I was not satisfied with the DXT5 compression of normal-map textures . It caused ugly artifacts ingame. So I wanted to try other DDS settings and got the best results with DDS 8.8.8 (not compressed). But the File-Size has increased from 1.33MB to 4MB.For this reason, I wanted to find a better solution, and Ive read in the forum about green normal-maps.How I converted purple normalmap to green normalmap:1st Load to previously created purple normal map with your image-editor (Photoshop for example)2nd Create a Alpha Channel3rd Copy the red channel in to the alpha channel .4th Delete the red channel (= completely fill with black)5th Delete also the blue channel(= completely fill with black)6th Save the image as DDS(DXT5)This is the standard normalmap in Openprf: 下載 (67.15 KB)2011-6-26 00:58This is how my green normal map look like: 下載 (75.31 KB)2011-6-26 00:58And heres the problem with which I am struggling at the moment. 下載 (171.78 KB)2011-6-26 00:58As you can see the green normalmap is not displayed correctly.I have not figured out yet why this is. Maybe someone has an idea?標(biāo)題:綠色法線貼圖1樓(Sunnetci_Dede)嗨!我對于將法線貼圖紋理壓縮為DXT5格式這種壓縮方式并不滿意。這樣制出的圖在游戲里很難看。所以我曾想試試DDS文件的別的設(shè)置并得到了DDS的8.8.8格式(未被壓縮的)的最佳的結(jié)果。但是文件大小從1.33兆字節(jié)升到了4兆字節(jié)。由于這個(gè)理由,我想找到一個(gè)更好的解決方法,并且我已經(jīng)閱讀了論壇上的關(guān)于“綠色法線貼圖”的文章。我是如何轉(zhuǎn)換“紫色法線貼圖”為“綠色法線貼圖”的:第1步 用你的圖像編輯器載入之前創(chuàng)建的紫色法線貼圖(比如用Photoshop)第2步 創(chuàng)建一個(gè)阿爾法通道第3步 將紅色通道復(fù)制到阿爾法通道第4步 刪除紅色通道(=徹底用黑色填充)第5步 同樣刪除藍(lán)色通道(=徹底用黑色填充)第6步 保存圖像為DDS文件(DXT5格式)這便是在OpenBrf里面的標(biāo)準(zhǔn)的法線貼圖:【圖1】而我的綠色法線貼圖看來是這樣的:【圖2】而我此刻費(fèi)力面對的就是這個(gè)問題?!緢D3】如你們所見,綠色法線貼圖沒有正確顯示。我還沒有想出為什么會(huì)這樣。也許有人知道?三樓內(nèi)容,希望對模型組有所幫助 Artizan:做凹凸貼圖你不需要任何阿爾法通道, 以dxt1格式保存紫色貼圖(無阿爾法通道), 它就會(huì)變小. 據(jù)我所知綠色貼圖采用的是不同的陰影, 是原版用的,不是戰(zhàn)團(tuán)的。就像我說過的,壓縮DDS材質(zhì)不適合做法線貼圖。而dtx1壓縮比dtx3或5更差。我想在品質(zhì)和文件大小之間找一個(gè)平衡。所以我才要用綠色法線貼圖,因?yàn)殡m然采用dtx5壓縮,但是圖像品質(zhì)好,而且文件大小跟一般的dtx5一樣 rgcotl:樓主的模型很強(qiáng)大,在論壇上見到這樣的東西真是太酷了關(guān)于紫色貼圖我能給樓主的建議就是:不要為高模使用任何mipmap(若要為低模使用,為它創(chuàng)建一個(gè)新文件)順便一提,如果我沒記錯(cuò),戰(zhàn)團(tuán)引擎只支持壓縮DDS格式,所以模型的很多特效都顯示不出thx,為了頭盔我真的犧牲了很多時(shí)間,不用mipmap的話,貼圖會(huì)閃爍我已經(jīng)通過Photoshop的NVIDIA dds插件測試了所有DDS格式設(shè)定,發(fā)現(xiàn)發(fā)現(xiàn)騎砍除了壓縮格式外,其實(shí)可以支持其他格式的。例如:8.8.8RGB 24bpp | unsigned(是我為高品質(zhì)法線貼圖所用的格式,缺點(diǎn)是文件明顯增大了)8.8 VU 16bpp | signed(可以為法線貼圖實(shí)現(xiàn)閃亮效果).在OpenBrf編輯器中兩種效果都不能顯示,但是會(huì)在游戲中顯示 Rath0s:騎砍中綠色法線貼圖是做場景用的.騎砍中有綠色法線貼圖的材質(zhì)大多來自陰影文件bumpmap_interior(內(nèi)部凹凸貼圖),我在OpenBrf里發(fā)現(xiàn)的。那意思是不是我不能把這些法線貼圖用在模型上。那就真悲催了本帖最后由 dunklerprinz 于 2011-6-27 19:57 編輯 四樓翻譯 xenoargh:戰(zhàn)團(tuán)引擎的標(biāo)準(zhǔn)陰影采用的是RGB DDS DXT1格式,這樣可以減少文件大小,并盡可能在顯存中高效地存儲(chǔ)想要在非靜態(tài)物件(只需要綁骨骼的盔甲等)上使用綠色法線貼圖,你只能使用自定義陰影,這就要求你設(shè)定你的劇本使用戰(zhàn)團(tuán)版的加載器應(yīng)用(不懂),也就強(qiáng)迫一般玩家用這種方式打開劇本實(shí)話實(shí)說,我沒發(fā)現(xiàn)DDS DXT1格式的模型有什么大問題,只要把灰階高度圖調(diào)整好。減少出錯(cuò)率有很多小技巧,比如說轉(zhuǎn)換格式前減少調(diào)色板(色調(diào)?)如果你的模型的壓縮錯(cuò)誤多到在游戲中很丑,你應(yīng)該做一些微調(diào)。用非壓縮的8888對游戲的運(yùn)行非常不利,更不要說文件大??;這些文件在顯卡處理中也是非壓縮的,效率低的可怕rgcotl:藍(lán)色法線貼圖只是一個(gè)3通道貼圖(rgb),所以你選擇什么格式對于品質(zhì)沒有什么影響(不管是dxt1、3還是5)灰色法線貼圖是4通道的(包含阿爾法通道)所以采用dxt5會(huì)改善貼圖品質(zhì)(平滑阿爾法通道的效果)現(xiàn)在我所用的貼圖都沒有mipmap(因?yàn)槲抑老駇ipmap這樣的東西會(huì)被顯卡所用)而就我所知如果你在騎砍中使用mipmap,圖像會(huì)變模糊(原文bloored疑為blurred之誤)而且不同的程序比如gimp或者做DXT壓縮的效果是不同的,但photoshop我說不好因?yàn)槲覜]測試dxt1的壓縮比為8:1,dxt5為4:1在某些情況下品質(zhì)應(yīng)該有所不同關(guān)于DDS格式的比較,請參考下面的鏈接/tutorial/dds_types.html為了展示區(qū)別,我也做了截圖,有8.8.8和dxt5或者dxt1三種格式你會(huì)發(fā)現(xiàn)dxt1和5沒有明顯的區(qū)別,但8.8.8是我想要的效果五樓翻譯 xenoargh藍(lán)色法線貼圖只是一個(gè)3通道貼圖(rgb),所以你選擇什么格式對于品質(zhì)沒有什么影響(不管是dxt1、3還是5)如果我沒記錯(cuò),DXT3和DXT1/DXT5是有區(qū)別的,但我忘了是啥區(qū)別,而且DXT3是DXT1大小的兩倍,所以用哪個(gè)就不言而喻了,呵呵 灰色法線貼圖是4通道的(包含阿爾法通道)所以采用dxt5會(huì)改善貼圖品質(zhì)(平滑阿爾法通道的效果)之所以選擇特定顏色可以得到更好的效果是因?yàn)樗麄冇懈蟮臄?shù)位深度,而且能更好的保留灰度。但他們使用的通道數(shù)相同,除非陰影做了傾斜/視差,用第四通道做深度效果 現(xiàn)在我所用的貼圖都沒有mipmap(因?yàn)槲抑老駇ipmap這樣的東西會(huì)被顯卡所用)而就我所知如果你在騎砍中使用mipmap,圖像會(huì)變模糊mipmap在戰(zhàn)團(tuán)中也能用,原版我不知道,但你說不能用我很驚訝,如果是模糊,應(yīng)該是你的DDS導(dǎo)出設(shè)置不正確;有很多銳化設(shè)置需要調(diào)好。不同的導(dǎo)出插件(如gimp、和The Compressionator等等)都有不同的銳化度的控制;Photoshop的導(dǎo)出插件是目前最好的,它可以精細(xì)地控制每mip應(yīng)用多大的銳化度,采用什么算法,等等等等六樓翻譯 Yoshiboy留言據(jù)我所知綠色法線貼圖只能用于平面,因?yàn)槠矫嫔戏ň€向量的最終分量很容易被重建(求PS高手解釋)。你可以試試但我不推薦非壓縮的.dds材質(zhì)減少貼圖錯(cuò)誤(原文:artefact)的一個(gè)技巧是調(diào)低高光度,我覺得這才是模型區(qū)別加重的原因你也可以試一下更多噪點(diǎn)或更精細(xì)的高光貼圖這樣會(huì)讓貼圖錯(cuò)誤看起來不明顯并且獲得非壓縮貼圖的顆粒效果不管什么方法我覺得在游戲中差別都不是很明顯,大多數(shù)玩家也不管。他們只要運(yùn)行流暢高品質(zhì)的法線貼圖必須有各種自定義的壓縮算法的支持(指游戲引擎)。據(jù)我所知cryengine2代和3代(孤島驚魂系列的3d引擎)都用了更加成熟的壓縮技術(shù)。但騎砍達(dá)不到這個(gè)水平,所以也不是可以mod的。最后,還有個(gè)方法,我看別人做軟表面細(xì)節(jié)的時(shí)候用過的,你可以疊加更多細(xì)節(jié)的,密集的(原文tiled,馬賽克或瓷磚)法線貼圖,它可以把微小的細(xì)節(jié)呈現(xiàn)在打光里,而且跟我上面說過的高光貼圖一樣,可以隱藏平滑表面明顯的帶狀痕跡。樓主回復(fù)你們說的對,最佳化原則是首先要考慮的。就因?yàn)檫@個(gè),我已經(jīng)盡量把四個(gè)頭盔的貼圖都弄進(jìn)一個(gè)文件了我的像素化貼圖的顯示問題只出現(xiàn)在chichak頭盔上。而且在光線較暗的地方才更明顯。其他的頭盔看起來都很完美我改變了素材Spec RGB和Coeff,然后效果有些改善。但我會(huì)給法線貼圖采用5.5.5格式,2.66MB而已,天塌不了。PS:想想吧,有的頭盔有1886個(gè)面,而且沒有低模。在cRPG有100多個(gè)玩家(所以別跟我說系統(tǒng)支持不了神馬的)1 評分次數(shù)7樓mtarini純理論派,膜拜一下,本人數(shù)學(xué)一向很差,希望可以翻好mtarini:回復(fù)哇哦,SD,做的不錯(cuò)啊不僅做了測試而且還放了截圖,我覺得這不僅僅是有用,而且你的嘗試本身就是科學(xué)而有趣的研究,這已經(jīng)超出騎砍這個(gè)平臺(tái)了。萬惡的昏割線我只能貢獻(xiàn)一點(diǎn)理論知識了誰都知道,法線貼圖把法線信息(表現(xiàn)為局部坐標(biāo)系或法線-切線-雙切線)存儲(chǔ)到每個(gè)紋理素(即像素)。一條法線就是一個(gè)3d單位向量。全部可能的法線構(gòu)成的空間可以具象為單位球面的表面:球面上的每一個(gè)點(diǎn)都是一條法線,反之亦然。那么,你肯定愿意表現(xiàn)盡可能多的法線,即那個(gè)球面上盡可能多的點(diǎn),但是,由于壓縮的原因,你只能表現(xiàn)有限的點(diǎn),有的表現(xiàn)不出。你要想讓表面的那個(gè)點(diǎn)有所表現(xiàn),必須在它的位置加一個(gè)其他可表現(xiàn)的點(diǎn)(于是就出現(xiàn)了壓縮圖像錯(cuò)誤artifact另一參考譯文)。在給定的壓縮計(jì)劃下,我理論上可以用鉛筆在計(jì)劃要求的球面區(qū)域的每個(gè)點(diǎn)都點(diǎn)一下?,F(xiàn)在我問你,在這個(gè)球面上我共得到多少點(diǎn)?他們的分布如何?是否集中在我需要的區(qū)域?答案將決定法線貼圖壓縮計(jì)劃的好壞。切記法線是一種單位向量,就是說我只關(guān)心其在單位球面上的分布現(xiàn)在我們從這個(gè)角度討論一下各種壓縮計(jì)劃的表現(xiàn)萬惡昏割線+1存儲(chǔ)為藍(lán)色法線貼圖blue(*)意味著將法線的XYZ三個(gè)分量保存到RGB通道。我不知道游戲是否會(huì)重新定義它們,但我們假設(shè)它定了,這就是DXT1壓縮計(jì)劃,因?yàn)槟銢]有使用阿爾法通道。(*)該貼圖呈現(xiàn)藍(lán)色是因?yàn)橥ǔ7ň€指向外面(帶有細(xì)微變化),也就是說大多數(shù)法線都差不多與網(wǎng)格模型的幾何法線方向重合。在法線、切線、副法線組成的空間里這意味著“法線”這一分量往往是是合一的,因此藍(lán)色分量也往往是合一的。在這一計(jì)劃下,你必須想象一個(gè)內(nèi)部有單位球面的實(shí)心雙面立方體,這些就是你能夠存儲(chǔ)在一個(gè)像素里所有可能的RGB顏色。由于壓縮,你實(shí)際能表現(xiàn)的只是散落在立方體內(nèi)部的由點(diǎn)構(gòu)成的一團(tuán)云,又好像魚缸里的一群魚。這團(tuán)點(diǎn)構(gòu)成的云是相當(dāng)一致的,或多或少地都與一個(gè)隔柵對齊(因?yàn)榱炕耍┠蔷褪钦f,魚列隊(duì)游泳?,F(xiàn)在我們將之標(biāo)準(zhǔn)化,亦即將每個(gè)點(diǎn)投射在球面上(向內(nèi)或向外)。在球面上你將得到哪一組點(diǎn)?問題出現(xiàn)了,浮動(dòng)在立方體內(nèi)的許多點(diǎn)將投射在球面上同樣的點(diǎn)。你將得到一組在球面上分布得很不好的點(diǎn),尤其是在球面的赤道和兩極,在你能夠表現(xiàn)的點(diǎn)之間將存在許多空隙現(xiàn)在我們來試試DXT5 計(jì)劃。法線貼圖看起來是綠色,因?yàn)橹挥芯G色通道和阿爾法通道被啟用(法線的雙切線和切線分量)。這次你應(yīng)該想象一個(gè)平面上的正方形將球面一切兩半,在赤道處與其相交。在這一正方形里,你得到與藍(lán)色貼圖的立方體內(nèi)數(shù)目相同的點(diǎn),實(shí)際上更多,因?yàn)镈XT5每像素的比特率更高?,F(xiàn)在將這些點(diǎn)投射到球面,即將他們抬升到與球面接觸的高度(所以底下的半球不要了?)位于球面以外的有些點(diǎn)將不能投射到球面上。這些點(diǎn)在壓縮中丟失了:他們就是與無法線相關(guān)聯(lián)的顏色(但這才只占全部點(diǎn)的1/4,準(zhǔn)確的說是(4-pi)/4)不過,這是好事,其余點(diǎn)在球面上分布得很完美。所以你發(fā)現(xiàn)DXT5比DXT1多三大好處:首先,你有更多可用的點(diǎn);其次,這些點(diǎn)位于平面而非立方體上,因此在球面上分布的更好;最后,這些點(diǎn)只集中在球面的上半部分,而不是散落四處,這才是你想要的法線表現(xiàn)方式(如果你的法線貼圖提示網(wǎng)格表面上某個(gè)點(diǎn)應(yīng)該指向真實(shí)幾何法線的反方向,說明你的法線貼圖做錯(cuò)了)。我們再來看看(8.8.8)計(jì)劃,它跟DXT1很像,但初始點(diǎn)多得多。這種格式有256*256*256個(gè)點(diǎn)浮動(dòng)在立方體中,它有DXT1所有的壓縮缺陷,但你看不出來,因?yàn)橛刑嗟狞c(diǎn),就算許多點(diǎn)投射在球面上同樣的位置,你還是剩下很多。A(4.4.4)計(jì)劃也有同樣的問題,只不過更加明顯罷了A(8.8)計(jì)劃可能會(huì)創(chuàng)造奇跡,因?yàn)樗猩厦鍰XT5所有的優(yōu)勢,但同樣起始點(diǎn)很多,我估計(jì)它會(huì)出現(xiàn)跟8.8.8相似的結(jié)果,或許更好,且占用空間小。但可是,你要不就得找一個(gè)存儲(chǔ)綠色和阿爾法通道的非壓縮格式的DDS表面,要不你就得用一個(gè)騎砍能識別的自定義陰影。純理論,累屎人收八樓mtarini: 引用Yoshiboy:太受啟發(fā)了,這是個(gè)更直觀展示不同壓縮方法的好辦法。那是不是說DXT5_NM貼圖必須用跟“藍(lán)色”切線空間法線貼圖不同的方式生成?肯定不是就把藍(lán)色通道扔掉那么簡單吧?引用Barf是的,就是把藍(lán)色扔掉,因?yàn)榧t綠通道之間的差別怎么也會(huì)影響到藍(lán)色通道,這個(gè)問題往往是在加載過程中通過陰影解決的,或者同步處理(on the fly)如果游戲采用了虛擬引擎(或其他以流媒體streams?方式運(yùn)行的引擎)z = sqrt( 1 - x*x + y*y );戰(zhàn)團(tuán)用這個(gè)公式計(jì)算所有靜止物件、海面和水面的陰影在蒙皮陰影上包括這一計(jì)算并不難,所以在所有模型上都可以做xGxR貼圖。3Dc應(yīng)該能跟xGxR貼圖交互但會(huì)讓戰(zhàn)團(tuán)崩潰mtarini:回復(fù)你當(dāng)然可以這么做,但是然后你得根據(jù)對結(jié)果的解讀寫自定義像素陰影你知道,Barf也說了,通常標(biāo)準(zhǔn)的讀取“綠色”DXtT_NM法線貼圖的方法是:把綠色-阿爾法像素分別當(dāng)做XY分量,在0,1到 -1, +1之間取函數(shù)f(k)=k*2-1,得到Z值=(1-X²+Y²)的平方根就像Barf說的,在這個(gè)標(biāo)準(zhǔn)案例里,你要給法線貼圖編碼,你就必須扔掉Z通道(把XY編為綠色阿爾法)但你要是想,你也可以用別的設(shè)定,只要你的編/解碼有內(nèi)部一致性(編碼指你創(chuàng)建法線貼圖,解碼指投射到像素陰影)比如我想到另一個(gè)解碼方法,我覺得挺有道理的“如上讀取XY,賦Z值為1,還原XYZ(原文renormalize)”現(xiàn)在來看看輸出的壓縮計(jì)劃表現(xiàn)如何這種情況下,你的色點(diǎn)位于一個(gè)兩面正方形內(nèi),它不穿過球面的赤道,而是平衡放置在其頂端,與球面北極相切。這個(gè)方形不是垂直的投射到球面上(以前都是),而是指向球心。語言難以表達(dá)(不如漢語了吧)但我相信你能想象出來。結(jié)果是什么呢?首先你不會(huì)浪費(fèi)那大約25%的綠色/阿爾法值,在標(biāo)準(zhǔn)計(jì)劃中它們不與任何法線關(guān)聯(lián)(這部分?jǐn)?shù)值在標(biāo)準(zhǔn)公式中得到的是一個(gè)負(fù)數(shù)的平方根,也就是落在圓的外面);這已經(jīng)夠好了,更好的是(從另外的角度看也是不好)你的點(diǎn)都投射在球面的上半部,且都在橫截面以上。在實(shí)踐中這意味著你不可能存儲(chǔ)法線的方向,它們大大地偏離(大于45度角)真實(shí)幾何法線(即不借助法線貼圖你也能看到的那條),但這樣你能專注于法線的微小變化,也就沒有那么多壓縮圖像損耗影響到編碼。你可以較少表達(dá)明顯的法線變化,但卻能減少壓縮圖像損耗注意某種意義上講,標(biāo)準(zhǔn)DXT5計(jì)劃對于DXT1也有相似的優(yōu)勢,但沒有那么極端:在DXT5_NM中,你不能編碼偏離大于90的法線(因?yàn)閦總是0)但這不是唯一可能。比如你可以設(shè)Z=K(K為常量),并還原。最大值K被使用了,你的法線更集中于球面的極點(diǎn),也就是你縮小了可允許的與真實(shí)法線的偏離,但你還可以通過柔和平滑的微調(diào)減少表面的損耗。如當(dāng)K=3時(shí),你的法線偏離不大于30度在某些實(shí)例中這樣比較好。比如我要為為一輛閃亮的跑車外殼做法線貼圖。法線偏離是很小的,正因如此,我需要把注意力集中在壓縮損耗上(甚至是量化損耗)他們可能會(huì)很難看。那么我就要把K值調(diào)高,比如調(diào)到4實(shí)踐中可能遇到的問題是你需要通過自定義的方式給法線貼圖編碼(并在陰影中相應(yīng)地解碼)而我認(rèn)為DXT5_NM的魅力在于它是一種標(biāo)準(zhǔn)編碼,能被生成法線貼圖的程序識別,渲染引擎因此能夠識別,并兼容DXT1格式(藍(lán)色貼圖)也有類似問題,如果你生成貼圖的程序能將法線識別為XYZ,并且能更進(jìn)一步:在編碼時(shí)能拾取RGB顏色并在標(biāo)準(zhǔn)化后生成最接近XYZ的XYZ向量(就是說向量的模也可以用大于或小于單位長度),懂我的意思不?但我還沒聽說過用這種最佳化原則輸出法線貼圖的程序。他們都是把法線的分量量化,并試圖存儲(chǔ)已經(jīng)標(biāo)準(zhǔn)化的法線(因?yàn)榱炕蛪嚎s,這不可能實(shí)現(xiàn))。我覺得吧,這是因?yàn)椋?1)他們太懶/壓縮追求速度;(2)他們不確定陰影其實(shí)可以在讀取法線貼圖后可以還原法線(3)這種最佳化方法對于存儲(chǔ)北極周圍的法線幫助不大,因?yàn)檫@時(shí)候最需要精確(其實(shí)我這方法對精確也有幫助的)Yoshiboy:其實(shí)在孤島3引擎上他們就是這么做的,但是編譯環(huán)境不太一樣。事實(shí)證明存儲(chǔ)標(biāo)準(zhǔn)化法線到G緩沖不太成功。你可能猜到了,因?yàn)檫@連float3能存儲(chǔ)的數(shù)值的5%還不到他們發(fā)明了一種best fit貼圖,它根據(jù)能給到的最準(zhǔn)確的壓縮值縮放法線。道理很難解釋但你可以看看/cryengine/ . -the-speed-of-light明后天翻10樓請收10樓xenoargh:回復(fù)是的,如果有更多數(shù)據(jù)的話,可視化(用圖片)效果更好。眼前的問題很明顯;一直以來DDS很多特征都鎖定了,因?yàn)轱@卡制造商要穩(wěn)定的格式,才能更好的處理芯片上的解壓,等等非壓縮DDS的特性(如果我沒記錯(cuò),為此引擎需要讀取BMP;不知道用在蒙皮上是什么效果)就是在顯存中它們不被壓縮,所以啟動(dòng)很吃內(nèi)存(從硬盤讀取到存儲(chǔ))所以對顯卡顯存非常不利,因?yàn)樗麄儽划?dāng)做TIFF/BMP處理了但是正確使用壓縮工具的話,其實(shí)這也不算什么大問題;大多數(shù)損耗是mip引起的,我個(gè)人經(jīng)驗(yàn)是。如果設(shè)定沒問題,就不會(huì)出現(xiàn)大面積的貼圖錯(cuò)誤。例如這張法線貼圖吧,我用Dejawolf的Valgard頭盔改的(這頭盔太漂亮了,我一直渴望更新,但昨晚才找著機(jī)會(huì)(拿長柄斧的東歐武士、頭盔特寫)這些截圖上開了1024的漫反射(diffuse),但法線貼圖/鏡面反射只有512。我做這個(gè)漫反射是個(gè)特例,因?yàn)榫冗^低的時(shí)候,這些精美的裝飾細(xì)節(jié)看起來有點(diǎn)毛糙,我我也懶得重建那部分的UV圖,懶得把它降低到512然后看起來還一樣再看這個(gè)實(shí)例(希臘風(fēng)盾牌)原始法線貼圖噪點(diǎn)很多,看起來很丑。我大愛原圖,為了這個(gè)漫反射效果,我用噴槍修了很多,把裝飾(?relief)擠進(jìn)擠出??雌饋磉€是很平,沒有傾斜,但很逼真?;旧希龇ň€貼圖,只要漫反射做好了,你的細(xì)節(jié)就夠了,沒有超出模型能有的表現(xiàn)能力。大多人遇到的問題是他們壓根就不去碰壓縮設(shè)定,至少對于photoshop插件,默認(rèn)設(shè)置一團(tuán)糟。11樓完成!狂喜中,就要見曙光了MadocComadrin :我補(bǔ)充一下mtarini說的,一些引擎(不知道騎砍是不是)完全允許法線有小于一的量值(magnitude)。通常這樣反射光的亮度會(huì)減小同時(shí)對于那些看不懂mtarini表述的騎友(其實(shí)很有啟發(fā)的帖子),我把它翻譯成大白話多虧了像素陰影,打光可以在每個(gè)像素上估值。實(shí)現(xiàn)方法是給網(wǎng)格加UV貼圖。大家應(yīng)該知道UV貼圖將2DUV賦值與網(wǎng)格的面關(guān)聯(lián),而面是平的,所以操作變得簡單??墒敲嬷邪瑹o限的點(diǎn),而我們只能用貼圖上有限的點(diǎn)去描繪它。大多數(shù)情況下,一個(gè)貼圖文件上的每個(gè)像素根據(jù)你UV展開方法的不同被分配到特定的UV關(guān)聯(lián)。結(jié)果貼圖上所有沒被像素覆蓋的點(diǎn)也被加載:他們的值(漫反射顏色等)是基于周圍與貼圖像素有關(guān)聯(lián)的UV計(jì)算的想象一個(gè)單面的正方形作為我們的網(wǎng)格,我們的UV貼圖與該面成比例(即它不會(huì)被橫向或縱向的錯(cuò)誤拉長),假設(shè)我們的材質(zhì)貼圖是512*512的。那么這個(gè)面就分別有512個(gè)整齊分布的縱橫列,縱橫列的交叉點(diǎn)就是一個(gè)像素(請注意我們的UV圖可以隨面的大小而縮放;若UV不能縮放,就不能整齊地分配)對于漫反射材質(zhì),每個(gè)像素的顏色被放置到面上相關(guān)聯(lián)的點(diǎn),沒有被覆蓋的點(diǎn)也會(huì)加入進(jìn)來;但對于法線貼圖就不一樣了。法線貼圖能控制一個(gè)模型每個(gè)點(diǎn)的打光。每個(gè)點(diǎn)都有一條法線。法線本質(zhì)上是一種垂直于面的向量,所以完美地垂直于桌面的法線會(huì)正直向上。現(xiàn)在把我們剛才的面想象為桌面,為了便于理解,想象我們垂直向下俯瞰桌面,并垂直向下打光。那意味著該面的法線必將垂直指向我們。我們的光是垂直射出,而法線是垂直向上,所以該面的反射光必將垂直返回來(英語真啰嗦,中國人看到上一句已經(jīng)懂了)繼續(xù)打光部分之前,我們來說一下法線向量。多數(shù)情況下,法線向量是一個(gè)單位向量。就是說它的量值為1。想象一根恰好單位長度的毛發(fā)從面的中心垂直向上。這就是該面的法線?,F(xiàn)在我們抓住這根毛發(fā)的一段并移動(dòng)它,這將改變光反射的路徑對于法線貼圖,想象我前面說過的每個(gè)交叉點(diǎn)都有一根這樣的毛發(fā),這都是我們的法線。移動(dòng)任何一根毛發(fā),這個(gè)交叉點(diǎn)的光反射路徑都將獨(dú)立地被改變。對于面上那些沒有被交叉覆蓋的點(diǎn),發(fā)現(xiàn)也會(huì)被加入(即點(diǎn)一的那根毛發(fā)面向左邊,點(diǎn)二的面向右邊,則他們中間的點(diǎn)首先指向做,然后向上,最后向右)我們?nèi)绾胃嬖V顯卡這些毛發(fā)如何移動(dòng)?騎砍有兩種辦法。藍(lán)色法線貼圖和綠色法線貼圖(看起來像不像石灰漿?lime jello泥子?)在藍(lán)色貼圖上,一個(gè)像素有多紅,決定法線在X軸上的偏轉(zhuǎn)程度;中紅是不偏轉(zhuǎn),沒有紅色說明都指向一個(gè)方向,全紅則是反方向。綠色決定Y軸(中綠還是不偏轉(zhuǎn)),藍(lán)色決定法線的端點(diǎn)距離表面的遠(yuǎn)近,全藍(lán)色是一單位,沒有藍(lán)色是零單位。對這種貼圖而言,法線既然不能超過一單位向量,你的色彩組合是有限的。如0,0,1(RGB從0到1)可以,而1,1,1不行對于綠色-阿爾法貼圖,綠色決定法線的橫向偏離,阿爾法通道決定縱向偏離。其余的(即藍(lán)色(應(yīng)為筆誤)法線貼圖的藍(lán)色部分)在運(yùn)行時(shí)間內(nèi)計(jì)算。取決于DDS壓縮色彩,這種貼圖適合大型平整表面,因?yàn)樗枰芫?xì)的法線貼圖。類似于藍(lán)色貼圖,可用色彩是有限的。你甚至不用管第三種顏色,因?yàn)檫@部分將在稍后計(jì)算12樓Sunnetci_Dede:樓主回復(fù)童鞋們的回復(fù)都很有啟發(fā)啊。非常感謝兩位大大耐心解釋法線的工作原理。 引用MadocComadrin:對于法線貼圖,想象我前面說過的每個(gè)交叉點(diǎn)都有一根這樣的毛發(fā),這都是我們的法線。移動(dòng)任何一根毛發(fā),這個(gè)交叉點(diǎn)的光反射路徑都將獨(dú)立地被改變。對于面上那些沒有被交叉覆蓋的點(diǎn),發(fā)現(xiàn)也會(huì)被加入(即點(diǎn)一的那根毛發(fā)面向左邊,點(diǎn)二的面向右邊,則他們中間的點(diǎn)首先指向做,然后向上,最后向右)所以基本上可以說法線貼圖上的每個(gè)像素代表了面上法線的類別。它依賴于光照射到這些線(法線像素)的角度和法線貼圖的外觀,并將決定面上的光影效果。從而讓我們覺得它是個(gè)多邊形模型的面回復(fù)xenoargh 回復(fù)所有人all : ) 引用xenoargh:想要在非靜態(tài)物件(只需要綁骨骼的盔甲等)上使用綠色法線貼圖,你只能使用自定義陰影,這就要求你設(shè)定你的劇本使用戰(zhàn)團(tuán)版的加載器應(yīng)用(不懂),也就強(qiáng)迫一般玩家用這種方式打開劇本自定義陰影我確實(shí)不懂,也不知道如何創(chuàng)建。如果有誰能教教我我就太感謝了。我需要一個(gè)有高光強(qiáng)調(diào)的陰影(類似于高光_陰影_蒙皮_凹凸_高,估計(jì)是樓主自己起的名字),我可以用這個(gè)做綠色法線貼圖還有,“加載器應(yīng)用”是啥?(翻譯官我也想知道)是不是像那個(gè)以brf格式保存“自定義陰影”到modResources(模型文件夾)一樣(此句比較拗口,希望大家能明白)。把模型添加到module.ini然后運(yùn)行mod?這樣不行嗎?我在這里把標(biāo)準(zhǔn)法線貼圖跟綠色貼圖做了比較,在不同的陰影條件下(圖片我打不開)看見沒,standart_shader_skin_bump_nospec_high和bump_static有很大區(qū)別(分別是標(biāo)準(zhǔn)陰影-凹凸-無高光-高和凹凸-靜態(tài))??雌饋砭G色法線貼圖能夠創(chuàng)造更大的景深。也可能是陰影的作用。PS:英語不是我母語,希望乃們能懂我意思翻譯官PPS:邊翻譯邊吐槽其樂無窮啊mtarini: 回復(fù) 引用Sunnetci_Dede:自定義陰影我確實(shí)不懂,也不知道如何創(chuàng)建。如果有誰能教教我我就太感謝了。我需要一個(gè)有高光強(qiáng)調(diào)的陰影(類似于高光_陰影_蒙皮_凹凸_高,估計(jì)是樓主自己起的名字),我可以用這個(gè)做綠色法線貼圖這個(gè)網(wǎng)上肯定有教程,不過首先樓主需要:1)寫一個(gè)你自己的陰影程序,用HLSL語言(高級陰影語言,屬于Direct3D)HLSL是一種匯編語言。你需要一個(gè)源碼(一個(gè)叫mb.fx的文件),在游戲運(yùn)行前匯編。匯編會(huì)生成一個(gè)叫mb.fxo的文件,跟戰(zhàn)團(tuán)主程序在一個(gè)文件夾游戲會(huì)加載這個(gè)文件,戰(zhàn)團(tuán)運(yùn)行的時(shí)候就是加載這個(gè)文件,而不是源碼所以要寫你自己的陰影文件,你首先要得到源碼,修改并添加,重新匯編后得到你自己的mb.fxo,覆蓋原文件這樣會(huì)導(dǎo)致一個(gè)問題:你的劇本需要的mb.fxo文件不在MOD目錄下,而是游戲根目錄。Swyter大神開發(fā)的Iron Launcher可以幫你和你劇本的玩家覆蓋文件,這對玩家有利在戰(zhàn)團(tuán)的根目錄下沒有你要的源碼,但是你可以在這下,感謝A大及其團(tuán)隊(duì)/mb_warband_shaders.zip我肯定不合適在論壇教你怎么寫陰影。但是網(wǎng)上教程一大把與本站相關(guān)的是這個(gè)源碼是一系列技巧(算法)的合集,就跟C語言,帕斯卡或者Java寫的程序一樣,被分割成幾個(gè)功能(也叫步驟、子程序)每個(gè)算法都有獨(dú)立的名字(這不奇怪,C語言的功能也有)在HLSL里,一個(gè)算法一般是一個(gè)頂點(diǎn)程序(當(dāng)激活算法,你發(fā)送到顯卡的每個(gè)頂點(diǎn)如何演繹)和一個(gè)像素程序(也叫片段陰影:當(dāng)激活算法,顯示在屏幕上的每個(gè)像素如何演繹)的組合如果你要添加新的陰影,你需要添加一個(gè)算法到原來的文件,如復(fù)制已有的算法,重命名然后修改2)改變了陰影的源碼之后,你要匯編它。你需要一個(gè)directX SDK,裝一個(gè)吧。現(xiàn)在你有一個(gè)mb.fxo文件了3)下一步,你要在一個(gè)brf文件中創(chuàng)建一個(gè)陰影物件(object)。這跟創(chuàng)建材質(zhì)貼圖類似。你知道貼圖是獨(dú)立于brf的一個(gè)DDS文件,BRF文件包含的texture物件,只是關(guān)聯(lián)到外部文件的一個(gè)鏈接(當(dāng)然還包括幾個(gè)附加標(biāo)記如flag)。同樣,BRF文件里的陰影物件也是個(gè)關(guān)聯(lián)到外部文件mb.fxo算法的鏈接(也同樣包含一些附加信息這些標(biāo)記超出我理解范圍了。哪位高手懂的話,懇請告訴我?。┨砑有滤惴ㄒ院?,你需要用OpenBrf創(chuàng)建一個(gè)到新陰影的鏈接最保險(xiǎn)的辦法是用OpenBrf復(fù)制一個(gè)已有的陰影,重命名,然后指向你的新算法。完成以后你就可以給你的網(wǎng)格添加用你自己的陰影的新素材。俺的教程到此結(jié)束注意一個(gè)bug:至少1.011有,游戲有時(shí)候不能加載新陰影。如果你先以窗口模式運(yùn)行然后切換到全屏就可以解決。要徹底解決這個(gè)bug,你需要把陰影添加到core_shaders.brf。老問題又來了,你不許把它放在根目錄的CommonRes文件夾,不是劇本里。還是用IronLauncher覆蓋吧測試陰影:在老版808里,有個(gè)不用重新加載游戲就能測試陰影的小技巧,有個(gè)快捷鍵可以重讀陰影(我記得是ctrl+R,記不住了)我覺得很有用但是現(xiàn)在新版本再也找不著了,要是誰知道(有沒有這個(gè)快捷鍵),也要告訴我喲!hr(翻譯官表示不懂,結(jié)合下文應(yīng)該是重新編輯帖子留下的代碼)編輯:我應(yīng)該提醒你還有個(gè)辦法,用ARB語言寫陰影ARB是一種低級陰影語言(就像Assembler對于C語言和Java是一種低級語言)。有些人可能不喜歡,有些人則可能大愛用這個(gè)方法,你可以把自己的陰影寫進(jìn)一個(gè)獨(dú)立文件,比如可以起名叫foo.pp。你不需要匯編它,因?yàn)槟銓懙囊呀?jīng)是一種顯卡匯編程序。在BRF文件中,你需要讓你的新陰影指向該文件,只要把它的算法設(shè)成foo.pp就行(可在OpenBrf中完成)凹凸貼圖、法線貼圖、置換貼圖本帖最后由 alixyang 于 2009-9-9 14:31 編輯 Warband 的模型相對于1.011又前進(jìn)了一步, 現(xiàn)在大多的服裝都加上了法線貼圖,看起來細(xì)膩了很多而原先我們只能在墻壁、樹皮上看到一點(diǎn)法線貼圖的效果.所以下一輪的模型設(shè)計(jì),這個(gè)元素是熱點(diǎn).先轉(zhuǎn)這篇文章過來談?wù)劯拍?,二樓講如何制作。其實(shí)我本人對模型制作、3D之類完全外行,轉(zhuǎn)這個(gè)只是想拋磚引玉,歡迎大家討論,灌水頂貼就不必了。原帖地址:/html/2007-03/2997.htm作者: FXCarl 首先我想說,對于凹凸貼圖在計(jì)算機(jī)圖形領(lǐng)域中的研究,最早開始于70年代末,至今已經(jīng)有接近30年歷史了。NormalMap只是一種目前很流行的凹凸貼圖技術(shù),而這里將會(huì)介紹一些目前游戲和在XBOX360和 PlayStation3這種新世代主機(jī)上將會(huì)運(yùn)用的凹凸貼圖技術(shù)。BumpMapping 凹凸貼圖 做過CG的朋友一定比 FXCarl還要更早的認(rèn)識BumpMap。這種貼圖是一種灰度圖,用表面上灰度的變化來描述目標(biāo)表面的凹凸,因此這種貼圖是黑白的,如果節(jié)省空間的畫,甚至可以把貼圖的Alpha通道征用來用作Bump。值得注意的是,這種貼圖表面上存儲(chǔ)的東西是高度域即每個(gè)點(diǎn)和原始表面的高度差,記住,每個(gè)點(diǎn)的顏色不是色彩,是高度,一個(gè)數(shù)值!因此,對這個(gè)貼圖做任何的操作都會(huì)影響到這個(gè)物體3D的外觀質(zhì)感。不能憑感覺用事。在游戲中,所使用的算法確切的說應(yīng)該叫做fake bump mapping ,假凹凸貼圖。因?yàn)樵谟螒蛑蠦umpMap并沒有改變物體的表面而只是影響光照的結(jié)果,欺騙眼睛而已。最簡單的做法是,直接把BumpMap疊加在已經(jīng)渲染好的表面上,造成亮度上的擾動(dòng),從而讓人以為是凹凸的這個(gè)很容易理解,把一面白色的墻面有技巧的部分劃成灰色就會(huì)變成蝕痕,這些諸位會(huì)比小的更擅長。而計(jì)算復(fù)雜度是基本加減法。這個(gè)所謂的 FakeBumpMapping 從Geforce2就開始硬件支持,但是從來沒有大范圍的應(yīng)用過。不過有趣的是,BumpMap這個(gè)東西卻從未過時(shí),在后來的渲染算法中,其儲(chǔ)存表面高度域的特性仍然發(fā)揮著巨大的作用。我們后文再提NormalMapping法線貼圖NormalMapping在游戲領(lǐng)域中的實(shí)踐是一個(gè)非常值得記住的時(shí)期Geforce3上市,GPU概念出現(xiàn),硬件可編程流水線的出現(xiàn)(Shaders),NormalMapping是一種凹凸貼圖技術(shù),它的另外一個(gè)名字叫做Dot3 bump mapping。用于實(shí)現(xiàn)它的控制紋理是一張叫做NormalMap的紋理,也是目前大家在討論如何之作的那種。我們先說說這張叫做NormalMap的圖。這張圖中存儲(chǔ)的東西是每個(gè)原始表面法線的迭代,說起來有點(diǎn)復(fù)雜,但是不難理解。舉例說我們的說面,一般在游戲的3D模型上,表面法線就像是一根站立于桌面的鋼筆,垂直向上。而NormalMap中存儲(chǔ)的東西就是我們這支表示表面法線方向的鋼筆所“應(yīng)該”指向的方向比如說朝左邊傾斜15度。NormalMap有兩種主要形式,一種叫做世界空間的NormalMap,一種叫做切空間的NormalMap。第一種在游戲中沒有實(shí)用價(jià)值,我們說第二種,也就是大家最常見的一種。那么,為什么我們看到的NormalMap會(huì)有這么奇怪的顏色呢?其實(shí)NormalMap和BumpMap一樣,即它顯示出來的顏色和它所起的作用是沒有直接聯(lián)系的。大家一定對空間坐標(biāo)的概念非常熟悉了。在NormalMap的定義中,有一個(gè)事先的約定,這個(gè)約定就是原本表面的垂直方向,我們稱為Z軸;而表面的UV坐標(biāo)兩個(gè)方向,分別對應(yīng)X軸和Y軸。(確切的說,應(yīng)該是稱作切線和負(fù)法線,但是這兩個(gè)東西和大家熟悉的UV坐標(biāo)剛好重疊,所以就用大家更習(xí)慣的說法了)然后我們知道如果我們在XYZ軸上各取一個(gè)點(diǎn),這個(gè)點(diǎn)的取值位置在-1到1之間,那么我們就可以得到一個(gè)指向任何方向的法線方向(不用多解釋,大家知道法線是一個(gè)向量,向量有方向和長度兩個(gè)概念,但是對法線來說,長度是不需要的)。但是,請大家注意,我們在描述色彩的時(shí)候,RGB三個(gè)通道的取值范圍都是從零開始的??墒钱?dāng)我們嘗試把一個(gè)任意的法線保存在一張紋理中的時(shí)候,會(huì)面臨取負(fù)值的問題。因此我們要把法線做壓縮。方法很簡單,把XYZ每個(gè)軸上的法線投影長度進(jìn)行N1/2的運(yùn)算。這樣就把所有的法線壓縮到了0和1的范圍里。然后我們把XYZ的方向分別存儲(chǔ)在RGB三個(gè)通道中。似乎我們還沒有說到關(guān)于為什么NormalMap會(huì)是藍(lán)兮兮的原因是吧。那么現(xiàn)在就是公布結(jié)果的時(shí)候了!首先,我們知道如果在一個(gè)物體表面,法線垂直向上,那么它的 XYZ坐標(biāo)是多少?是0,0,1對不對?然后我們把這個(gè)數(shù)字按照我們前面所說的壓縮方法進(jìn)行壓縮,每個(gè)數(shù)字加1然后再除以2,那么我們得到的是 0.5,0.5,1對不對?好我們把它代入到RGB中,那么我們會(huì)得到128,128,255對不對?好了,試試看在調(diào)色板里的顏色吧!P.S.現(xiàn)在FXCarl和你猜個(gè)謎,看看FXCarl說的對不對?,F(xiàn)在我們在NormalMap上看見一個(gè)顏色,這個(gè)顏色是219,128,219。那么這個(gè)表面的法線方向是垂直向右偏45度。大家用MAX做一個(gè)NormalMap看看FXCarl說的對不對?如果你還沒有理解NormalMap的意思,或者說你有興趣再深入了解一些,那么FXCarl再和你說的深入一些。不知道大家對于切空間的理解是什么?我們來個(gè)實(shí)驗(yàn),找三支筆。然后其中兩只筆在桌面放成互相成90度,筆尾接筆尾。最后我們把第三支筆,筆尖向上,筆尾和那兩只桌面上的筆的筆尾疊在一個(gè)點(diǎn)上。注意看我們的三支筆!這三支筆就是這張桌面上這個(gè)點(diǎn)的切空間坐標(biāo)了!大家一定想到了原來我們的NormalMap中存儲(chǔ)的表面法線方向原來就是一個(gè)切空間向量啊,恩沒錯(cuò),就是切空間向量。但是似乎看起來切空間沒什么作用是不是?呵呵,我們不妨把桌面換成一個(gè)籃球。記住,保持三支筆的互相關(guān)系,然后用三支筆并在一起的筆尾去接觸籃球的表面。呵呵,發(fā)現(xiàn)了沒有?切空間的優(yōu)勢在于,在任意表面上,切空間中的坐標(biāo)都是有效的!也就是說始用切空間中的數(shù)據(jù)就可以做到和 3D模型的復(fù)雜度無關(guān)!你可以用在任意的表面,甚至這個(gè)表面一直在動(dòng)也不會(huì)影響到NormalMap發(fā)揮作用,你說這個(gè)切空間是不是很有用呢?讓我們回到開頭,大家就會(huì)發(fā)現(xiàn),如果使用世界空間的NormalMap會(huì)有什么樣的結(jié)果呢?嘿嘿那樣會(huì)造成一個(gè)很尷尬的結(jié)果,比如說我們做了一個(gè)人物身上的 NormalMap,可是我們的場景中有兩個(gè)一樣的人物,但是他們的姿勢和面對的角度都不一樣。那么My God 肯定有一個(gè)人物的NormalMap是沒法適用的!而用切空間的NormalMap就沒有問題了。恩,不過這個(gè)大家可以放心,MAX或者M(jìn)aya做出來的NormalMap都是切空間的NormalMap,證明的方法很簡單看看這張貼圖是不是主要由藍(lán)色構(gòu)成的OK,下面是重頭戲,告訴大家NormalMap是如何發(fā)生作用的。使用NormalMap的先決條件逐像素著色。先來說一下傳統(tǒng)著色,傳統(tǒng)游戲使用的是一個(gè)Phong光照模型的簡化版,甚至有游戲使用Ground模型。這兩種算法的方式都是只對物體3D模型的頂點(diǎn)計(jì)算光照,而3D表面上的大面積區(qū)域則使用差值填充。逐像素著色是到了Shaders出現(xiàn)之后才有的,因此NormalMapping也是一個(gè)Shaders必須的算法。計(jì)算一個(gè)物體表面漫反射光照的公式是很簡單的NdotL什么是NdotL,就是物體表面的法線和光照方向的點(diǎn)積。點(diǎn)積是一個(gè)線性代數(shù)的問題,美術(shù)朋友們可以不用深究,寫成程序也很容易:Diffuse = saturate(Mul(Normal,Light);。想要簡單的理解就是光線的方向矢量在法線矢量上的投影,然后這個(gè)投影的結(jié)果變成黑白中間的一個(gè)值。我們同樣舉個(gè)簡單的例子,用兩支筆放在桌面上,然后一支筆不動(dòng),令一支筆筆尾和第一支筆的筆尾相連,不動(dòng),然后以共同的筆尾做為圓心,移動(dòng)筆。這時(shí)如果我們從一支筆尖往另外一支筆的筆桿上垂直拉一條線(一條垂線)就會(huì)看到這時(shí)移動(dòng)后的一支筆在原本的筆桿所投影的長度(就是一支筆的筆尖連垂線到另一支筆的筆桿上的位置,這個(gè)位置沿著筆桿到共同筆尾的長度)會(huì)越來越短,當(dāng)兩支筆垂直的時(shí)候,投影的結(jié)果就是零沒有光照貢獻(xiàn)了。這個(gè)容易理解,當(dāng)光線的方向和一個(gè)表面絕對平行的時(shí)候,這個(gè)表面就會(huì)再也接受不到光線了。現(xiàn)在我們引入NormalMap。這時(shí)我們的光照計(jì)算和以往有點(diǎn)不同,我們把表面的法線用NormalMap中存儲(chǔ)的法線來替代。這樣當(dāng)我們在計(jì)算表面光照情況的時(shí)候,就會(huì)因?yàn)榉ň€不斷的變化而產(chǎn)生比原來豐富的多的明暗變化。至于為什么會(huì)感覺出凹凸來這個(gè)就是人的眼睛自己騙自己了其實(shí)那里本沒有凹凸的,但是我們?nèi)搜劬μ喙荛e事了。就像Windows的按鈕哪個(gè)純平面的東西我們還以為是凸出來的呢。NormalMap 看來可以增加細(xì)節(jié),但是它的缺點(diǎn)也很明顯。不過在說缺點(diǎn)之前,要提前說一句NormalMap帶來的優(yōu)勢是遠(yuǎn)遠(yuǎn)大于它的缺點(diǎn)的。因此仍然是個(gè)極好的東西,不要對它有偏見,特別是在我們后面介紹的更牛的技術(shù)前面,千萬不要。最大的也是最明顯的缺點(diǎn)應(yīng)該就是它的視角問題。因?yàn)镹ormalMap只是改變的表面上的光照結(jié)果,并沒有改變表面上的形狀。因此,表面上看來,似乎只要是不接近水平,NormalMap就不會(huì)有視角問題。其實(shí)不然,NormalMap因?yàn)椴荒軐?shí)現(xiàn)自身內(nèi)部的遮擋,因此不能表現(xiàn)平面上凹凸起伏比較大的場合。比如說我們一個(gè)桌面上突出一塊,然后在突出的這塊東西邊上放一支牙簽。如果用NormalMap表現(xiàn),會(huì)發(fā)現(xiàn)。根據(jù)經(jīng)驗(yàn),這個(gè)凸起會(huì)很輕易的擋住我們的視線,讓我們看不見那支牙簽??墒荖ormalMap卻不會(huì)這么做。因此我們一直能看見障礙物背后的東西,這一點(diǎn)是個(gè)問題也就是說只有在垂直于平面的時(shí)候NormalMap才會(huì)發(fā)揮最好的作用。這樣一來,NormalMap只能用在大家對遮擋關(guān)系不敏感的場合,比如場景等,不是不能用于人物,而是用NormalMap的人物不太經(jīng)得起特寫,放大了,角度刁鉆了都容易穿幫。雖然NormalMap有個(gè)不能平視的巨大問題,但是依然是好處遠(yuǎn)大于小障礙,因此還是非常值得推廣的。后面的幾種新興算法其實(shí)都是由NormalMapping發(fā)展起來的,因此做為基礎(chǔ)的東西,也還是最有理解價(jià)值的。P.S. 關(guān)于NormalMap的一點(diǎn)秘籍。注意理解NormalMap其實(shí)并不是從低模的表面凸出高模的細(xì)節(jié)的,而是把高模中比最高點(diǎn)的位置低的地方凹進(jìn)去的!因此低模要比高模大一點(diǎn)點(diǎn)才會(huì)很準(zhǔn)。大家可以想像成我們是用一個(gè)比高模稍微大一點(diǎn)點(diǎn)尺寸的低模石膏模型來把高模雕刻出來的。P.S.2.關(guān)于 NormalMap的做法,其實(shí)早期發(fā)明NormalMap的時(shí)候還沒有MAX這種這么方便生成NormalMap的方法,NormalMap都是從 BumpMap計(jì)算得到的,因此其實(shí)通過很簡單的算法就可以從BumpMap算出NormalMap的,甚至可以O(shè)n The Fly(就是讓游戲引擎直接讀BumpMap然后轉(zhuǎn)換成NormalMap)。因此對于一些建起模來效率很低,但是又能明顯增加表面細(xì)節(jié)的東西,例如水泥表面的顆粒,用畫Bump的方式來做是個(gè)更好的主意,然后交給技術(shù)美工去搞定好了當(dāng)然你會(huì)用ZBursh那就當(dāng)我什么都沒說了,呵呵。說來 FXCarl估計(jì)MAX生成法線圖的方式也是比較高低模上每個(gè)點(diǎn)的高度偏移,然后生成每個(gè)UV圖素上的高度差來得到一個(gè)BumpMap,然后再從 BumpMap變成NormalMap。Parallax mapping 視差貼圖 (因?yàn)楹竺娴乃惴ǘ际腔贜ormalMap的應(yīng)用,可能看上去沒有NormalMapping那么長了,但內(nèi)容肯定一樣精彩的!)視差貼圖是一種NormalMapping算法的增強(qiáng)算法,其本質(zhì)上和NormalMapping沒有區(qū)別。

溫馨提示

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

評論

0/150

提交評論