图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解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分析来的。
<_MainChunk Length="8386">
<_CVersion Length="10">3</_CVersion>
<__3DEditorChunk Length="8370">
<_ObjectBlock Length="8364">
<String Length="16">Tank_PlayerMesh</String>
<_TriangularMesh Length="8342">
<_VerticesList Length="3776">
<numVerts Length="2">314</numVerts>
<Vector X="0.7707" Y="52.527" Z="104.4209" Length="12" />
<Vector X="6.2672" Y="58.6059" Z="104.4909" Length="12" />
…
<Vector X="-0.4168" Y="65.2885" Z="104.4949" Length="12" />
</_VerticesList>
<_MappingCoordinatesList Length="2520">
<TexCoordCount Length="2">314</TexCoordCount>
<TexCoord u="0.7052" v="0.9314" Length="8" />
<TexCoord u="0.7434" v="0.9053" Length="8" />
…
<TexCoord u="0.7701" v="0.9442" Length="8" />
</_MappingCoordinatesList>
<_FacesDescription Length="2040">
<numIndices Length="2">254</numIndices>
<triIndex v1="0" v2="1" v3="2" Length="8" />
<triIndex v1="0" v2="2" v3="3" Length="8" />
…
<triIndex v1="4" v2="5" v3="6" Length="8" />
</_FacesDescription>
</_TriangularMesh>
</_ObjectBlock>
</__3DEditorChunk>
</_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基础教程】给初学者看的Unity教程(五):详解Unity3D中的协程(Coroutine)
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 为什么需要协程 在游戏中有许多过程(Proc ...
- (转)图文详解MyEclipse中新建Maven webapp项目的步骤
转:https://blog.csdn.net/ClementAD/article/details/46592557 MyEclipse中创建新的Maven项目(webapp目录结构)过程如下: ...
- 批处理中的echo命令图文详解
批处理中的echo命令图文详解 1. Echo 显示当前ECHO的状态:ECHO ON 或者ECHO OFF 2. ECHO ON 将ECHO状态设置为ON,将显示命令行,也就是前面的C:\>类 ...
- SpringBoot中使用UEditor基本配置(图文详解)
SpringBoot中使用UEditor基本配置(图文详解) 2018年03月12日 10:52:32 BigPotR 阅读数:4497 最近因工作需要,在自己研究百度的富文本编辑器UEditor ...
- windows系统里Cygwin中如何正确安装wget(图文详解)
具体步骤,见如下: https://ftp.gnu.org/gnu/wget/ 解压到Cygwin的主目录中,一般是 你的Cygwin目录/home/当前用户名/ . 我这是如下 先./c ...
- 如何在Eclipse或者Myeclipse中使用tomcat(配置tomcat,发布web项目)?(图文详解)(很实用)
前期博客 Eclipse里的Java EE视图在哪里?MyEclipse里的Java EE视图在哪里?MyEclipse里的MyEclipse Java Enterprise视图在哪里?(图文详解) ...
- Flume中的flume-env.sh和log4j.properties配置调整建议(图文详解)
GC是内存的回收的意思. Flume中的flume-env.sh配置调整建议 [hadoop@master conf_HostInterceptor]$ pwd /home/hadoop/app/fl ...
- STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) 前面 ...
- CentOS 6.3下Samba服务器的安装与配置方法(图文详解)
这篇文章主要介绍了CentOS 6.3下Samba服务器的安装与配置方法(图文详解),需要的朋友可以参考下 一.简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件, ...
随机推荐
- [11]APUE:(文件)记录锁
[a] 概念 建议锁:在遵循相同记录锁规则的进程间生效,通常用于保证某个程序自身多个进程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后建立同名副本 ...
- ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版
MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...
- 如何让你的UWP应用程序无缝调用几何作图
有时候需要编辑一些几何图形,如三角形,圆锥曲线等,在UWP应用中加入这些几何作图功能是件费时间又很难做好的事.其实Windows 10 应用商店中已有一些专业的几何作图工具了,那么能借来一用吗?答案是 ...
- asp.net(C#) Excel导出类 导出.xls文件
---恢复内容开始--- using Microsoft.Office.Interop.Excel; 针对office 2003需添加引用Microsoft Excel 11.0 Obje ...
- Java 第8章 循环结构进阶
循环结构进阶 什么是二重循环? 二重循环的执行顺序是什么?
- IE11浏览器:请不要再叫我IE,谢谢
这篇对自已挺有用的,特mark一下,纯转载. 转载自:nczonline 微软在上周刚刚发布了用于Windows 8.1上 的首个Internet Explorer 11的预览版.我们已经确认Inte ...
- 我看见的第一个XCODE编译错误 - Command /applications.../clang failed with exit code 1
开始用XCODE学习Apple相关开发的东东,写些demo熟悉Object C,一直还没看见什么问题,昨晚在家把一些demo上传到代码服务器,今天在另外一台机器上下载下来编译,出现了问题: Preco ...
- HTML5界面开发工具jQuery EasyUI更新至v1.3.5
本文转自:evget.com HTML5界面开发工具 jQuery EasyUI 最新发布v1.3.5,新版修复了多个bug,并改进了menu,tabs和slider等多个控件.jQuery Easy ...
- 这几天对Redis的初探,写一个阶段性的东西
原来基于wcf写了一个交互框架,其中自定义了一个session队列,用于保存客户端连接的一些信息. 这几天在想如何将这个wcf框架做负载均衡,于是将session队列拆分出来,用一个共享的内存进行处理 ...
- video标签无法使用的问题
原因:IIS的MIME中未注册MP4.ogg.webm相关类型,导致IIS无法识别 解决方法:在IIS中注册MP4.ogg.webm类型,以下以MP4为例,ogg和webm以此类推: windows ...