图文详解Unity3D中Material的Tiling和Offset是怎么回事
来源:互联网 发布:淘宝促销水印怎么设置 编辑:程序博客网 时间:2024/04/29 08:29
from:
http://www.cnblogs.com/bitzhuwei/p/explain-offset-and-tiling-with-Unity-and-3ds.html
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分析来的。
1 <_MainChunk Length="8386"> 2 <_CVersion Length="10">3</_CVersion> 3 <__3DEditorChunk Length="8370"> 4 <_ObjectBlock Length="8364"> 5 <String Length="16">Tank_PlayerMesh</String> 6 <_TriangularMesh Length="8342"> 7 <_VerticesList Length="3776"> 8 <numVerts Length="2">314</numVerts> 9 <Vector X="0.7707" Y="52.527" Z="104.4209" Length="12" />10 <Vector X="6.2672" Y="58.6059" Z="104.4909" Length="12" />11 …12 <Vector X="-0.4168" Y="65.2885" Z="104.4949" Length="12" />13 </_VerticesList>14 <_MappingCoordinatesList Length="2520">15 <TexCoordCount Length="2">314</TexCoordCount>16 <TexCoord u="0.7052" v="0.9314" Length="8" />17 <TexCoord u="0.7434" v="0.9053" Length="8" />18 …19 <TexCoord u="0.7701" v="0.9442" Length="8" />20 </_MappingCoordinatesList>21 <_FacesDescription Length="2040">22 <numIndices Length="2">254</numIndices>23 <triIndex v1="0" v2="1" v3="2" Length="8" />24 <triIndex v1="0" v2="2" v3="3" Length="8" />25 …26 <triIndex v1="4" v2="5" v3="6" Length="8" />27 </_FacesDescription>28 </_TriangularMesh>29 </_ObjectBlock>30 </__3DEditorChunk>31 </_MainChunk>
这里面的_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画出来是这样的:
此模型的贴图如下。
Offset这个概念就从这个贴图上开始说。
如下图所示,贴图左下角为原点(0, 0),右上角为(1, 1),画直角坐标系,横轴为X方向的Offset,纵轴为Y方向的Offset。
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了。所以最后的模型就会是这样:
总结
Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置。
综合利用Offset和Tiling,就可以做一点有趣的事了。
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
- Unity3D中Material的Tiling和Offset是怎么回事
- Material 的 Tiling 和 Offset
- unity material之tiling和offset属性
- unity material之tiling和offset属性
- unity material之tiling和offset属性
- material之UV,offset,tiling
- Unity Tiling和offset的使用
- [UnityShader]material中的tiling与offset
- UnityShader中Tiling和Offset参数设置时贴图异常问题
- Material的Tilling跟Offset
- unity Material之tilling和offset属性
- unity offset tiling
- 数据库中LIMIT和 OFFSET的理解
- jquery中position 和offset的区别
- Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说
- shell排序
- PHP $_GET 变量
- 企业员工流动率
- 利用Unity实现Vuforia SmartTerrain的简易应用
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
- PHP $_POST 变量
- 关于文件系统编程
- 基于嵌入式Linux/Qt 开发RFID智能仓储指纹管理系统
- 关于缓冲区覆盖问题
- 让你薪资翻10倍的网站 大学生与职场人请收藏
- 循环
- git安装注意事项
- Window 10将内置眼球追踪技术