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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論