Tiling和Offset概述
Tiling表示UV坐標(biāo)的縮放倍數(shù),Offset表示UV坐標(biāo)的起始位置。
這樣說(shuō)當(dāng)然是隔靴搔癢。
下面用*.3ds文件作為模型,介紹Tiling和Offset到底是怎么回事。
3DS格式解析
比如我有這樣一個(gè)tank_player.3ds模型。右側(cè)的'select'處的圖片就是貼圖。
*.3ds文件最基本的內(nèi)容包括頂點(diǎn)列表Vertices、貼圖坐標(biāo)列表UVs、面列表Faces。其中Vertices和UVs的數(shù)目相等。下面就是用文本描述的tank_player.3ds文件的內(nèi)容,這是一個(gè)樹(shù)結(jié)構(gòu),用先序遍歷即可將其改寫(xiě)為二進(jìn)制的3ds文件。這個(gè)XML結(jié)構(gòu)就是從二進(jìn)制的tank_player.3ds分析來(lái)的。
這里面的_VerticesList 是頂點(diǎn)坐標(biāo)列表,每個(gè)Vector都是3D模型中的一個(gè)頂點(diǎn);_MappingCoordinatesList是貼圖坐標(biāo)列表UVs,每個(gè)TexCoord都是在貼圖上的一個(gè)坐標(biāo)點(diǎn)。FacesDescription則是面列表,由于Vertices和UVs的數(shù)目相等,每個(gè)triIndex都用索引指定了3個(gè)vertex和3個(gè)UV。3個(gè)vertex就在3D世界畫(huà)了一個(gè)三角形,這些三角形就組成了上圖所示的坦克模型。3個(gè)UV則在貼圖上畫(huà)了一個(gè)三角形。貼圖是這樣的:
而UVs在貼圖上畫(huà)出的三角形則如下圖所示。
可以看到是完全對(duì)應(yīng)的。一個(gè)triIndex指定了3D模型的一個(gè)三角形平面A,也指定了貼圖上的一個(gè)三角形平面B,把B貼到A上,就是我們看到的3D模型了。
這么半天都在講解3DS文件格式,是為了方便下面開(kāi)始說(shuō)明Tiling和Offset的用法。
Offset是什么意思
為了簡(jiǎn)單,我們看下面這個(gè)模型。它就是4個(gè)三角形拼接成的一個(gè)正方形。
此模型的UVs畫(huà)出來(lái)是這樣的:
此模型的貼圖如下。
[圖片上傳中。。。(6)]
Offset這個(gè)概念就從這個(gè)貼圖上開(kāi)始說(shuō)。
如下圖所示,貼圖左下角為原點(diǎn)(0, 0),右上角為(1, 1),畫(huà)直角坐標(biāo)系,橫軸為X方向的Offset,縱軸為Y方向的Offset。
[圖片上傳中。。。(7)]
Offset的作用,就是決定UVs在貼圖上的起始位置。
下圖所示,是Offset在X和Y軸都為0時(shí)的樣子。UVs坐標(biāo)框住了貼圖下半塊左邊的那一部分,那么這部分貼圖就會(huì)被貼在模型上。
所以你會(huì)看到這樣的結(jié)果。
現(xiàn)在我把Y軸的Offset設(shè)置為0.5。意思是UVs的左下角變成了(0, 0.5)。
那么UVs在貼圖上的貼合情形就如下圖所示了,此時(shí)UVs框住了貼圖上半邊左側(cè)的那塊(紅色的半圓)。
可以想象現(xiàn)在的模型是什么樣子了吧?
Tiling是什么意思
說(shuō)完Offset,Tiling就好理解了。Offset控制了UVs的起始位置,Tiling則控制了UVs的縮放比例。默認(rèn)(1, 1)的縮放比例就是原始比例?,F(xiàn)在我把Y軸的Tiling改為2。
那么UVs與貼圖的貼合情況就成了這樣:
貼圖還是那個(gè)貼圖,UVs的縱坐標(biāo)則都乘以2了。所以最后的模型就會(huì)是這樣:
[圖片上傳中。。。(16)]
總結(jié)
Tiling表示UV坐標(biāo)的縮放倍數(shù),Offset表示UV坐標(biāo)的起始位置。
綜合利用Offset和Tiling,就可以做一點(diǎn)有趣的事了。
本文的模型是從坦克艦隊(duì)里分析轉(zhuǎn)化得到的。我將在另一篇文章里說(shuō)明轉(zhuǎn)化方法。
原文地址:http://www.cnblogs.com/bitzhuwei/p/explain-offset-and-tiling-with-Unity-and-3ds.html