[轉]圖文詳解Unity3D中Material的Tiling和Offset是怎么回事

Tiling和Offset概述

Tiling表示UV坐標的縮放倍數,Offset表示UV坐標的起始位置。
這樣說當然是隔靴搔癢。
下面用*.3ds文件作為模型,介紹Tiling和Offset到底是怎么回事。
3DS格式解析
比如我有這樣一個tank_player.3ds模型。右側的'select'處的圖片就是貼圖。



*.3ds文件最基本的內容包括頂點列表Vertices、貼圖坐標列表UVs、面列表Faces。其中Vertices和UVs的數目相等。下面就是用文本描述的tank_player.3ds文件的內容,這是一個樹結構,用先序遍歷即可將其改寫為二進制的3ds文件。這個XML結構就是從二進制的tank_player.3ds分析來的。

這里面的_VerticesList 是頂點坐標列表,每個Vector都是3D模型中的一個頂點;_MappingCoordinatesList是貼圖坐標列表UVs,每個TexCoord都是在貼圖上的一個坐標點。FacesDescription則是面列表,由于Vertices和UVs的數目相等,每個triIndex都用索引指定了3個vertex和3個UV。3個vertex就在3D世界畫了一個三角形,這些三角形就組成了上圖所示的坦克模型。3個UV則在貼圖上畫了一個三角形。貼圖是這樣的:


而UVs在貼圖上畫出的三角形則如下圖所示。



可以看到是完全對應的。一個triIndex指定了3D模型的一個三角形平面A,也指定了貼圖上的一個三角形平面B,把B貼到A上,就是我們看到的3D模型了。
這么半天都在講解3DS文件格式,是為了方便下面開始說明Tiling和Offset的用法。

Offset是什么意思
為了簡單,我們看下面這個模型。它就是4個三角形拼接成的一個正方形。



此模型的UVs畫出來是這樣的:



此模型的貼圖如下。
[圖片上傳中。。。(6)]
Offset這個概念就從這個貼圖上開始說。

如下圖所示,貼圖左下角為原點(0, 0),右上角為(1, 1),畫直角坐標系,橫軸為X方向的Offset,縱軸為Y方向的Offset。
[圖片上傳中。。。(7)]
Offset的作用,就是決定UVs在貼圖上的起始位置。
下圖所示,是Offset在X和Y軸都為0時的樣子。UVs坐標框住了貼圖下半塊左邊的那一部分,那么這部分貼圖就會被貼在模型上。



所以你會看到這樣的結果。

現在我把Y軸的Offset設置為0.5。意思是UVs的左下角變成了(0, 0.5)。

那么UVs在貼圖上的貼合情形就如下圖所示了,此時UVs框住了貼圖上半邊左側的那塊(紅色的半圓)。

可以想象現在的模型是什么樣子了吧?

Tiling是什么意思
說完Offset,Tiling就好理解了。Offset控制了UVs的起始位置,Tiling則控制了UVs的縮放比例。默認(1, 1)的縮放比例就是原始比例。現在我把Y軸的Tiling改為2。



那么UVs與貼圖的貼合情況就成了這樣:



貼圖還是那個貼圖,UVs的縱坐標則都乘以2了。所以最后的模型就會是這樣:
[圖片上傳中。。。(16)]

總結
Tiling表示UV坐標的縮放倍數,Offset表示UV坐標的起始位置。
綜合利用Offset和Tiling,就可以做一點有趣的事了。
本文的模型是從坦克艦隊里分析轉化得到的。我將在另一篇文章里說明轉化方法。
原文地址:http://www.cnblogs.com/bitzhuwei/p/explain-offset-and-tiling-with-Unity-and-3ds.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容