關於unity的各種貼圖

2021-02-16 Imagination Tech

貼圖的英語 Map 其實包含了另一層含義就是「映射」。其功能就是把紋理通過 UV 坐標映射到3D 物體表面。貼圖包含了除了紋理以外其他很多信息,比方說 UV 坐標、貼圖輸入輸出控制等等。材質是一個數據集,主要功能就是給渲染器提供數據和光照算法。

漫反射貼圖在遊戲中表現出物體表面的反射和表面顏色。換句話說,它可以表現出物體被光照射到而顯出的顏色和強度。我們通過顏色和明暗來繪製一幅漫反射貼圖,在這張貼圖中,吸收了比較多的光線的部分比較暗,而表面反射比較強的部分,吸收的光線比較少。

列舉一下,物體的固有色以及紋理,貼圖上的光影。前面的固有色和紋理我們很容易理解,至於後面的光影,我們再繪製漫反射貼圖的時候需要區別對待,比如我們做一堵牆,每一塊磚都是用模型做出來的,那麼我們就沒有必要繪製磚縫,因為這個可以通過打燈光來實現。可是我們如果用模型只做了一面牆,上面的磚塊是用貼圖來實現,那麼就得繪製出磚縫了。從美術的角度,磚縫出了事一條單獨的材質帶外,還有就是磚縫也是承接投影的,所以在漫反射圖上,繪製出投影也是很有必要的。沒有什麼物體能夠反射出跟照到它身上相同強度的光。因此,讓你的漫反射貼圖暗一些是一個不錯的想法。通常,光滑的面只有很少的光會散射,所以你的漫反射貼圖可以亮一些。漫反射貼圖應用到材質中去是直接通過DiffuseMap的。再命名規範上它通常是再文件的末尾加上「_d」來標記它是漫反射貼圖。

所謂高度圖實際上就是一個2D數組。創建地形為什麼需要高度圖呢?可以這樣考慮,地形實際上就是一系列高度不同的網格而已,這樣數組中每個元素的索引值剛好可以用來定位不同的網格(x,y),而所儲存的值就是網格的高度(z)。

我們在這裡敘述高度圖,其實也是為了更好的繪製法線貼圖,很多情況下我們的法線貼圖只能在已有的漫反射貼圖作為素材進行繪製,這樣就是需要由一個HeightMap轉換成法線貼圖的一個過程,明白了這個原理,做起來也就可以更好的駕馭其效果。

高度貼圖是一種黑白的圖像,它通過像素來定義模型表面的高度。越亮的地方它的高度就越高,畫面越白的地方越高,越黑的地方越低,灰色的在中間,從而表現不同的地形。使用高度貼圖僅僅是為了適應簡單的工作流程。高度貼圖通常通過「Heightmap」函數來調用到3D軟體中去的,我們通常再文件名後面加一個"_h"來標示它。

高光貼圖是用來表現當光線照射到模型表面時,其表面屬性的.(如金屬和皮膚、布、塑料反射不同量的光)從而區分不同材質。高光貼圖在引擎中表現為鏡面反射和物體表面的高光顏色。

材質的反光程度就越強。(強弱度是指,如果將這張Specularmap去色成為黑白圖,圖上越偏向RGB0,0,0,的部分高光越弱,越偏向RGB255,255,255的部分高光越強。)

我們建立高光貼圖的時候,我們使用solid value來表現普通表面的反射,而暗的地方則會給人一種侵蝕風化的反射效果。

顏色在高光貼圖中將會用來定義高光的顏色,組成磚的材料應該是一些沙子,他們將會反射出一些微小的具有質感的光。(為了豐富高光貼圖,我們有很多方法:做局部高光的細微變化,添加紋理(這個紋理要和材質本身的紋理區分開),疊加彩色圖層(謹慎用))。高光貼圖是通過Specularmap函數調用到引擎中的,通常我們再貼圖的後面加一個"_s"來區別它。要記住的是,單單憑藉高光貼圖是無法充分的表現材質特性的,只有Didffuse,Normal,和Specular三張配合才能充分的表現材質特性。

中文一般叫做環境阻塞貼圖,是一種目前次時代遊戲中常用的貼圖技術,AO貼圖的計算是不受任何光線影響的,僅僅計算物體間的距離,並根據距離產生一個8位的通道。計算物體的AO貼圖的時候,程序使每個像素,根據物體的法線,發射出一條光,這個光碰觸到物體的時候,就會產生反饋,標記這裡附近有物體,就呈現黑色。而球上方的像素所發射的光,沒有碰觸到任何物體,因此標記為白色。簡單了解算法後,大家就明白,全局光的烘焙師模擬GI(全局光)所呈現的陰影效果,而AO貼圖時模擬模型的各個面之間的距離。二者性質是完全不一樣的。

在unity中,我們有兩個地方可以調整AO,一個是在光照貼圖渲染器中,有一個調整AO的參數,這個是確實渲染了一層AO。還有一個就是通過攝影機特效,有一個屏幕空間環境阻塞的特效screen speace ambient occlusion(SSAO).這兩個都可以實現部分的AO效果。

Cube map技術說到底就是用一個虛擬的立方體(cube)包圍住物體,眼睛到物體某處的向量eyevec經過反射(以該處的法線為對稱軸),反射向量reflectvec射到立方體上,就在該立方體上獲得一個紋素了(見下圖)。明顯,我們需要一個類似天空盒般的6張紋理貼在這個虛擬的立方體上。按CUBE MAPPING原意,就是一種enviroment map,因此把周圍場景渲染到這6張紋理裡是「正統」的。也就是每次渲染時,都作一次離線渲染,分別在每個矩形中心放置相機「拍下」場景,用FBO渲染到紋理,然後把這張紋理作為一個cube map對象的六紋理之一。這樣即使是動態之物也能被映射到物體表面了(雖然缺點是不能映射物體自身的任何部分)。

把物體光照的明暗信息保存到紋理上,實時繪製時不再進行光照計算,而是採用預先生成的光照紋理(lightmap)來表示明暗效果。

好處:由於省去了光照計算,可以提高繪製速度 。對於一些過度複雜的光照(如光線追蹤,輻射度,AO等算法),實時計算不太現實。如果預先計算好保存到紋理上,這樣無疑可以大大提高模型的光影效果,保存下來的lightmap還可以進行二次處理,如做一下模糊,讓陰影邊緣更加柔和。

缺點:模型額外多了一層紋理,這樣相當於增加了資源的管理成本(異步裝載,版本控制,文件體積等)。 當然,也可以選擇把明暗信息寫回原紋理,但這樣限制比較多,如紋理坐標範圍,物體實例個數。靜態的光影效果與對動態的光影沒法很好的結合。如果光照方向改變了的話,靜態光影效果是無法進行變換的。而且對於靜態的陰影,沒法直接影響到動態的模型。這一點,反而影響了真實度。

把一張貼圖按照2的倍數進行縮小。直到1X1。把縮小的圖都存儲起來。在渲染時,根據一個像素離眼睛為之的距離,來判斷從一個合適的圖層中取出texel顏色賦值給像素。

透過它的工作原理我們可以發現,硬體總是根據眼睛到目標的距離,來選擇最適合當前屏幕像素解析度的圖層。假設一張256x256的mipmap貼圖,當前屏幕解析度為1024*1024。眼睛距離物體比較近時,mipmap最大也只可能從1024*1024的Mipmap圖層選取texel。再次,當使用三線性過濾(trilinear)時,最大也只能訪問2048*2048的圖層選取texel,來和1024*1024圖層中的像素進行線性插值。

顧名思義,就是細節的貼圖,其實就是圖層的疊加與混合。在這裡有幾個關鍵詞,一個是Detail的Tiling值,一個是這個Detailmap需要在導入的時候設置為Mipmap。

法線貼圖是凸凹貼圖(Bump mapping)的一種常見應用,簡單說就是在不增加模型多邊形數量的前提下,通過渲染暗部和亮部的不同顏色深度,來為原來的貼圖和模型增加視覺細節和真實效果。簡單原理是在普通的貼圖的基礎上,再另外提供一張對應原來貼圖的,可以表示渲染濃淡的貼圖。通過將這張附加的表示表面凸凹的貼圖的因素於實際的原貼圖進行運算後,可以得到新的細節更加豐富富有立體感的渲染效果。法線貼圖多用在CG動畫的渲染以及遊戲畫面的製作上,將具有高細節的模型通過映射烘焙出法線貼圖,貼在低端模型的法線貼圖通道上,使之擁有法線貼圖的渲染效果,卻可以大大降低渲染時需要的面數和計算內容,從而達到優化動畫渲染和遊戲渲染的效果。法線貼圖就是記錄了一個需要進行光影變換的貼圖上的各個點的凹凸情況的貼圖,顯示晶片根據這個貼圖的內容,來實時的生成新的有過光影變化的貼圖,從而實現立體效果。

法線貼圖其實並不是真正的貼圖,所以也不會直接貼到物體的表面,它所起的作用就是記錄每個點上的法線的方向。所以這個貼圖如果看起來也會比較詭異,經常呈現一種偏藍紫色的樣子。

大多數法線圖一般都和下面的圖類似,是一張以藍紫色為主的圖。這張法線圖其實是一張RGB貼圖,其中紅,綠,藍三個通道分別表示由高度圖轉換而來的該點的法線指向:Nx、Ny、Nz。在其中絕大部分點的法線都指向z方向,因此圖更偏向於藍色。在shader進行處理時,我們將光照與該點的法線值進行點積後即可得到在該光線下應有的明暗特性,再將其應用到原圖上,即可反應在一定光照環境下物體的凹凸關係了。

來源:柯騰_wjf(http://www.cnblogs.com/wang-jin-fu/p/8279505.html)

關於 Imagination微信號

權威發布有關Imagination公司GPU、人工智慧以及連接IP、無線IP最新資訊,提供有關物聯網、可穿戴、通信、汽車電子、醫療電子等應用信息,每日更新大量信息,讓你緊跟技術發展,歡迎關注!伸出小手按一下二維碼我們就是好朋友!

相關焦點

  • 程序丨Unity 渲染系列教程(三):使用多張紋理貼圖
    這是關於渲染基礎的系列教程的第三部分。前面兩個部分介紹了著色器和紋理。我們已經看到了如何使用單個紋理來讓平坦表面看起來更複雜。現在我們繼續向前進,試下同時使用多個紋理。這個系列教程是使用Unity 5.4.0開發的,這個版本目前還是開放測試版本。我使用的是build5.4.0b10版本。同時使用多個紋理。
  • Unity Shader技巧七則!
    ,是的,光變了,天空盒怎麼能不變,所以我用了四張天空盒的貼圖來做過度,聽著內存有點吃緊是吧?如果想節約的話,可以用一張貼圖來做顏色變化就可以了,但是效果可能沒有這樣好一點,美術同學可以把四張圖都給你畫的很美吆。至於天空盒的shader,也很簡單,我使用了一個float屬性來融合四張貼圖,重點代碼如下。 //重點是這個變量,通過全局修改這個變量的參數來對四個時段的貼圖採樣,並融合。
  • 程序丨Unity渲染教程(十七):混合光照
    首先,Unity會再次烘焙光照貼圖。這一次光照貼圖只會存儲間接光,所以它會比之前的暗很多。它使用光照貼圖坐標對陰影蒙版取樣,然後選擇適當的通道。unity_OcclusionMaskSelector變量是一個含有一個分量的向量,該分量被設置為1以匹配當前正在被著色的光源。
  • Unity通用渲染管線(URP)系列(六)——陰影遮罩(Shadow Masks)
    在這兩種情況下,光照貼圖最終都包含間接光照,與「Baked Indirect mixed lighting 」模式完全相同。所不同的是,現在還有一個烘焙的陰影遮罩貼圖,你可以通過烘焙的光照貼圖預覽窗口進行檢查。
  • AO貼圖與其他的貼圖介紹
    今天分享的是AO貼圖與其他貼圖的小知識。 Ambient Occlusion Ambient Occlusion(環境遮擋貼圖)簡稱AO貼圖,模擬物體之間所產生的陰影,在不打光的時候增加體積感。
  • Unity熱擾動(熱扭曲)特效
    Properties { _DistortStrength("熱擾動強度",Range(0,1)) = 0.5 _DistortVelocity("熱擾動速率",Range(0,1)) = 0.5 _XDensity("噪聲密度(水平)",float) = 1 _YDensity("噪聲密度(豎直)",float) = 1 _NoiseTex("噪聲貼圖
  • VR丨手把手教你用Unity開發HTC vive:拾取和觸碰
    系列回顧用Unity開發HTC Vive(一):手柄按鈕用Unity開發HTC Vive(二):操作GUI用Unity開發HTC Vive(三):遠處拖動3D物體用Unity開發HTC Vive(四):傳送下面的內容是在以下環境完成的unity5.4.4SteamVR1.2.0
  • Unity中可以讓工作變得更輕鬆的技巧
    另外一個工具是unity自帶的工具叫Unity Cloud Builds。它的集成穩定行更高一些,在它的編輯欄中你基本上可以設置任何你需要的功能。像jenkins,它同樣也是免費的,不過unity訂閱你的builds可以更好地優化同時運行速度也會更快。另外,unity會關聯到你的build用來下載你的文件或者分享給其他人。
  • Unity3d-C#入門基礎
    ://www.jetbrains.com/resharper/Visual studio開發插件[連接Unity調試]:http://unityvs.comMono編譯器支持什麼:http://www.mono-project.com/docs/about-mono/languages/csharp/你能在unity裡使用的.Net庫:http://docs.unity3d.com/410/Documentation/ScriptReference
  • Unity中BVH骨骼動畫驅動的可視化理論與實現
    中驅動角色,而 unity 中的角色大部分是基於 Tpose 的,因而可以利用 Tpose 作為中間轉換姿態,將 BVH 中的所有動畫幀全部遷移到 unity 中。「unity 動作模型必須有與 BVH 一致的動作,否則不適用此博客的理論,如果 unity 角色與 BVH 角色的一致動作非 Tpose,也可以按照博客理論去轉換。」
  • unity完整項目之滾球小遊戲(完整)
    今天來寫一篇unity開發一個滾小球小遊戲的整體流程。新手操作,大佬莫笑(文章中的代碼可能會因為手誤等原因敲錯,一切以最後截圖為準)。首先打開U3D,創建一個3D新項目。創建之後先保存一下項目,然後新建一個plane,作為遊戲的地板。
  • unity期末--3d卡牌(一)
    unity課程期末作業,要求是製作一款3d遊戲
  • unity 實現物體破碎效果
    現在很多遊戲的效果做的很逼真,那麼如何使用unity相信很多做遊戲開發的想知道,為此下面就給大家介紹下unity 實現物體破碎效果的方法,一起來看看吧。    使用maya等3D工具製作碎塊組成的物體,遊戲中在物體被打碎的時候,首先銷毀原先的物體,然後再用碎片組成的pretab替換,形成的效果則是每個碎塊的加力方式不同,需要通過調整來實現。
  • Unity 實用技巧 - 從實踐中總結經驗
    當你在 Unity3D 中編輯場景,突然死機時,可以在項目文件目錄中找到 Temp 文件夾,雙擊文件夾,找到_Backupscenes 文件夾,把後綴為 .backup 的文件後綴改為 .unity ,然後拖進 Unity3D 的 Project 界面裡面,這樣就可以還原死機前場景最後情況。
  • 學Unity的貓之規範Unity的工程目錄結構(五)
    生肉就是未加工的意思,比如一隻老鼠模型,它依賴了骨骼、動畫、貼圖、材質等資源文件,老鼠模型我們會包裝成預設,預設是熟肉資源,相對應的,骨骼、動畫、貼圖、材質等是生肉資源。這裡的生肉資源和熟肉資源概念是我自己創造的,僅做方便理解。GameAssets熟肉資源目錄,這個目錄是我自定義的,用來存放熟肉資源。熟肉資源就是已加工過的資源,一般我們會把遊戲資源包裝成預設,這些預設就是熟肉資源。
  • 貼圖、紋理、材質的區別是什麼?
    答|百度派 @冰冰的小琦琦在一般的實踐中,大致上的層級關係是:材質 Material包含貼圖 Map,貼圖包含紋理 Texture。紋理是最基本的數據輸入單位,遊戲領域基本上都用的是位圖。貼圖的英語 Map 其實包含了另一層含義就是「映射」。其功能就是把紋理通過 UV 坐標映射到3D 物體表面。貼圖包含了除了紋理以外其他很多信息,比方說 UV 坐標、貼圖輸入輸出控制等等。材質是一個數據集,主要功能就是給渲染器提供數據和光照算法。
  • 3D建模烘焙貼圖介紹(一)——貼圖的基礎知識
    烘焙貼圖,其實就是將模型與模型之間的光影關係通過圖片的形式轉換出來,這樣就形成了一種貼圖,將這種貼圖控制在模型上,可以得到一種假的但很真實的效果。烘焙的貼圖有:法線貼圖,OCC或ao貼圖,轉換貼圖,高光貼圖,固色貼圖等什麼是貼圖?
  • 地磚貼圖及六大地磚品牌
    地磚是家庭裝修中運用多的材質之一,它不僅有很強的實用性,而且還有很強的裝飾效果,地磚貼圖能讓每一位戶主享受到視覺所帶來的美感,同時它也可以運用於每一種裝修風格中,幾乎是每一位業主裝修選材的首選,那麼地磚貼圖的分類有哪些呢,中國地磚品牌排行榜又是怎麼樣呢
  • Guangxi’s ethnic unity and progress work makes marked effects
    Recently, it was learned from the news conference of ethnic unity and progress work in Guangxi that much progress has been made in the work.