http://blog.csdn.net/tianmao111/article/details/46482963

现在在u3d圈里流行了一种地形转换器(或者叫编辑器吧),但是经查阅之后,似乎还没有中文教程,又看到网上不少人在求中文教程,正巧公司内部也需要研究这块,所以我想顺便做一个尝试,顺便写个中文教程吧,英文不足之处请指出,好废话不多说,直接上菜。

T4M是什么?为什么要用它?

它是一个地形(Terrain)工具。

它是一个Unity地形的替代工具,用于所有被3D开发工具(Maya,EarthSculpto,3DS Max,Blender等)创建的几何体。

最初,它只用于移动设备,但是更多的人发现了其他的一些益处:

T4M是允许用户导入几何体到Unity作为地形(Terrain)的一种工具。

T4M for Web和for mobile在编译时体积是非常小的,仅有一个draw call,快速的加载速度和强大的性能(旧设备也一样)。

所以,我决定针对所有平台并且提出了一整套解决方案(比如:Elevation tool yet)。

对于每个导入的几何体,T4M包括纹理绘制,绘制树和草,并且有一个细节(LOD)系统和广告牌。

T4M还可以把Unity Terrain转换成包括混合纹理(blend texture),4倍数纹理(一种增强纹理性能和存储移除的透明度贴图)(the first four splat textures)的几何体,并且使用它的所有优点比一个导入几何体+T4M系统。

所有特性兼容Unity Free和Pro版。

特性:

Shader Model 1,2,3 (iPhone,iPad,Andoid,Web,PC,MAC,Flash Naci)

转换地形到T4M,保持所有纹理和混合纹理(它使用4倍数纹理)

转换你自己导入的Mesh(你可以自由的用其他3D软件制作地形)

绘制和放置任何你想要的对象,在新的绘制系统下

集成细节(LOD)系统

集成广告牌系统

直接用物质材质绘制

最佳刷新预览

兼容Unity地形Shaders,你可以使用自己的Shader

返回或重置已经绘操作

添加自己的画刷(64*64)

兼容实时阴影,光照贴图和Directional光照贴图

事先声明本教程使用的是T4M v2.41版本,Unity为4.6.3 Pro版,请尽可能保证相同,以免有所出入

一个好的开始,需要遵循以下步骤:

1:添加26,27,28,29,30层,如下图所示:

2:通过菜单Window->T4M Source Codes打开T4M的主界面:

上边的Tab小按钮按照顺序功能如下:

1:转换器

2:优化

3:我的T4M

4:画刷

5:植物

6:LOD细节

7:广告牌

右边的按钮:激活/反激活 控制器

转换功能:

添加一个gameobject,如下所示:

给该对象挂上脚本

选择这个游戏对象,此时应该显示下图界面。如果当前界面跟这个不一样,请点击下图右上角的Controls按钮,保证当前值为Activated

此时我们起名MyTerrain,注意NewPrefab选项可选择,影响在下边介绍。

点击PROCESS按钮,如果成功,应该显示如下提示:

此时在你的Project内会发现新目录T4MOBJ。如果你之前选择没有选择NewPrefab选项,结果会跟下图一样

此时,预制上挂载了新的脚本

除了上边会挂载T4MObj SC脚本外,还会在预制上挂载新的组件如下:

如果你选择了NewPrefab选项,则会跟下图一样

注意看,此时Terrains目录下会多出一个地形预制

好了,你的模型已经准备好了。

地形转换到T4M

我随便建立了一个地图如下:

此时T4M操作界面如下所示:

重新起个名字

如果你想保证纹理为4的倍数,则选择Keep the textures选项,这里不用管

通过滑动条调整你想要的质量(其实就是调整你想要的顶点数)

注意看下边的为顶点显示:作用是什么呢?看解释便知,为近似的标志,那是什么意思呢?

看下边那些设备都是打了勾的,在你调整上边滑块的时候,有可能下边的勾会变成黄色叹号



你会发现,随着滑块代表的顶点数越来越大,某些设备就不再被支持。

好,我们点击PROCESS按钮,此时会出现如下选项:

看到那几个按钮了吗?功能如下:

1:保留你的转换结果,销毁原型

2:修改选项,开启一个新的转换,直到最好的效果

3:执行上边两个操作并继续

注意:如果你选择的顶点数过多,Unity会自动分割网格到几部分。不必担心T4M会使用分裂了的地形。

好了现在你的地形已经可以准备使用了。

优化

在上图中,你可以调整T4M游戏对象的质量和压缩率

Optimization of Load Time是最佳加载时间,减轻Unity引擎的负担

Level滑块,一共4个级别,每次选择都会看到下边对应的描述:

Level0:仅仅组织顶点的次序减轻3D引擎负担

Level1:Level0+较低的网格压缩(网格毁坏程度低)

Level2:Level0+适中的网格压缩(网格毁坏程度适中)

Level3:Level0+高网格压缩(网格惨不忍睹)

我的T4M

选择第3个tab选项,如下图:

注意看,选择Shader Model 1时,此时有3个Shader支持

T4M_2中的2代表混合2张纹理

LM表示兼容光照贴图

2DC表示需要2次Draw Call(所以上传顶点数也是*2的)

同理,Shader Model2,3都有对应的一些Shader支持,这里就不一一列举,我会在单独章节里详细解释一下。

T4M设置

Master T4M Object:一个 T4M主对象是一个独立的游戏对象,用来控制相机,细节(LOD)和广告牌,你可以仅仅使用一个在场景中。

如果你有多个T4M对象,则SceneCamera参数可以调整为仅仅依赖于主对象。

Scene Camera:默认情况下,T4M会寻找场景中的Main Camera,但是你可以使用其他相机来查看细节(LOD)、广告牌或层次剔除距离。

Activate LOD,Activate Billboard分别为细节和广告牌系统的开关。

Active LayerCullDistance:你可以使用4种不同的视图距离,通过使用Layers。

对于移动设备的性能,这是一个好主意。

Maximum Distance of View:

如果开启了LayerCullDistance选项,你可以调整相机和地形对象(前面我们转换过的模型)的距离。

说了半天什么是层次距离呢?还记得我们之前建立的层了吗?有没有发现他们的名字正好与上图中的4种距离名字相同?对,就是他们

比如:CloseDistance你设置了30,那么Close 层内的对象将在与相机的距离大于30的时候隐藏,这回明白了吗?

当你做完了你所有的调整,点击UPDATE按钮

ATS Mobile Foliage

此系统专门调整风向,风的频率,风吹草的频率,还可以到Assets Store下载指定的设置。看标题也知道,这个主要用于移动设备的。


绘制

如果你想绘制,你必须添加一些材质,所以我们必须先选择如下选项卡

关于画刷,我就不多说了。下边的5个滑动条做什么的呢?他代表了你的贴图粒度,1表示一倍细密程度,数值越大,绘制的表面越光滑,越细致。

JoinX/Y表示,是否对x,y采用同一个值。

选择材质选项卡,如下图:



在选择材质之前,你必须选择材质类型(Material Type),先选择Classic(默认)

点击Texture To Add右边的小圆圈,选择你感兴趣的材质,然后点击指定的黑色三角,把选择的材质放置到上边列表中。此图中,我选择了4张图。

你可以通过选择上边列表中的图,通过Modify功能来重新调整材质。

可能有人会问,这上边的黑色三角的数量是怎么来的?我们注意上一节我们设置过ShaderModel的版本

看到了么,这里是2张纹理混合,通过点击下边的UPDATE,再回头看看下边界面:



是不是只剩下2个小三角了。就是这样,根据不同显卡对不同版本ShaderModel的支持程度,决定可以混合的纹理数。

重复以上步骤,就可以混合想要的效果了。

如果你想使用凹凸贴图,那么你必须先回到MyT4M界面

选择一个Bumped相关的Shader,点更新。此时绘制界面变成了下边的样子



此时Modify列表内多出个凹凸贴图,我已经选择了一个凹凸贴图。

关于材质类型选择substances的用法,暂不介绍。

画刷:

你可以通过在以下目录添加自己的画刷

你可以添加喜欢的64*64的2D PNG图片作为新画刷,别忘记在图片的每个边缘保留1像素的空白。

植物

通过Add to List选项,添加一个树模型,点击对应的黑三角按钮。此时树模型加入到了列表中。

在每一个树模型的下边都有个菜单,用来选择所属层



菜单上边还有个checkbox,它允许你随机绘制所有打对号的树模型中的一个,T4M是自动完成选择的。

PlantMode:你可以选择绘制的树跟随法线,或者与地形表面有倾斜度

LocalSize:你可以增加或减少树的大小

SizeVar:随机数,它允许你在-LocalSize与LocalSize之间选择随机大小。为0时,表示不随机。

Y Origin Corrector:树起点Y偏移量修正,允许你调整树的起点与地面之间的距离。

CreateCollider:如果你选择了它,则T4M会在每一个树实例上创建mesh collider脚本。

Static Object:创建静态对象,用于光照贴图阴影,或Unity Pro的静态批处理功能。

Group Name:创建一个文件夹在舞台上用于分组对象。

图1



Spacing Distances的主要功能是避免游戏对象之间的重叠。

Safe Zone:安全区,在圆形的安全区内,不会出现其他对象。当你绘制的时候,你的画刷会显示一个圆圈,如果圆圈半径内已经有树了,再次点击,会没任何反应。这个值是安全区的半径(树与树之间的最小距离),如下所示:

如果你选择了Random Spacing选项,则菜单会变成图1的样子。

注意Random Instance Zone永远不能小于Safe Zone的值。当Safe Zone小于Random Instance Zone时,画刷会变成下面的样子:

在这种情况下,绿色区域总是安全区,黄色圆代表随机实例区域,黄色的线圈表示安全区与随机实例之间计算出来的随机距离。

每一次绘制,这个距离都会根据这两个值重新计算,这样的结果比使用固定值更真实。

总之一句话,就是黄色线圈才是真正的安全区。

你可以设置Random Rotation的值,此时的面板如上所示:

随机旋转每一个绘制的对象,增加场景真实感。

X和Y值会影响对象的倾斜度,Y值调整Up旋转。

按住Shift键,此时为擦除模式,如下图所示:

它允许你移除已经绘制的对象。

按住CTRL键(PC)或CMD键(MAC),此时为替换模式,如下图所示:

它允许你替换掉黄色区域内所有树,替换的对象是你在树列表内选择的新树。

新树会继承被替换者的旋转和位置。

当你选择了一种树,此时按下G和H键,你会发现你选择的模型会沿着Y轴向不同方向旋转,如下所示:

当你按下小键盘上的“+”和”-”键时(注意必须是小键盘)。会调整树对象原点(pivot)与地面之间的距离偏移。

LOD 系统

Mass Control:每一个对象都被同一种算法管理,这样,所有的细节改变,都是同时间的,视觉上效果不是很好。

Independent Control:每一个对象都被自身管理,这样细节改变也是逐过程的,效果最好。

Max View Distance:T4M会根据脚本剔除掉细节对象。

但是如果LayerCullDistance选项(回顾MyT4M)被激活,并且游对象所在的层与摄像机的距离小于Maximum View Distance的值,则Maximum View Distance方法不起任何作用,因为LayerCullDistance将在脚本之前处理剔除。

说白了LayerCullDistance选项就只是选择LayerCullDistance剔除而已。

Maximum View Distance的值越小,剔除的越厉害。

LOD Update Interval in Seconde:这个值非常重要,以为它是刷新细节对象状态的时间间隔。注意值不要太小,这会给移动设备增加负担。

LOD2是你想用LOD2的细节对象改变LOD1细节对象的距离。0表示仅仅LOD1的细节对象将可见,大于这个值表示LOD2的细节对象会替换LOD1细节对象。

同理,如果距离大于LOD3的值,LOD3的细节对象将替换LOD2的细节对象。

点击ACTIVATE按钮,你讲看到所有场景上的LOD细节处理。

注意每次绘制其他新对象后,都要重新点击ACTIVATE按钮进行更新。

可能有人会问LOD1是什么东东?别急,下面就来介绍。

LOD 设计者

一个用来创建T4M可兼容细节对象的菜单



LOD Meshes

LOD1 Close:绝大最细致网格放这里

LOD2 Medium:中等细致网格放这里

LOD3 Far:最差细致网格放这里

LOD Setup

Place the MeshCollider on this LOD:就像它说的,给选择的LOD Mesh对象添加碰撞器。

LOD Shader菜单

New:利用指定的Shader创建新材质,此时根据不同的Shader需要选择主纹理或凹凸贴图。

Already Exist:选择已经存在的材质

上边我设置好了对应的3种网格

当你把3个LOD Setup都设置好之后,就可以点击CONSTRUCT按钮,生成细节对象了,如下图:

你可以在LODObjects目录下找到你生成的对象。

这里我没有选择生成新材质,如果你生成新材质了,那么你会在LODObjects/Material下找到你创建的材质。
注意,如果你没有设置完全部3个材质,会提示你需要完成公式计算。

我们来看看MyLOD

广告牌



广告牌的设置基本上跟LOD对象的设置一样,请参照上边讲解。

BillBoard Rotation Axis:可以选择沿Y轴旋转还是所有轴旋转。

记得每次添加新对象到地形上,都要重新点击ACTIVATE按钮,进行更新。

广告牌的创建也跟LOD对象创建差不多。

选择Custom选项,则需要你自己选择网格。

好了,没什么问题点击ACTIVATE按钮,会出现如下目录:

有时间我会单独介绍MyT4M下,不同ShaderModel下的不同Shader的支持情况

Unity T4M 中文讲解的更多相关文章

  1. Unity射击实例讲解—主角创建

    前言: 经过三分钟的思考决定换个标题,这两天其实游戏制作进度推了大半了,加入了许多自我创作的素材,不过想一想用来讲解的实例不该这么花哨,决定还是参照我的一些教材做一些简单的示例不然要说的东西太多,本人 ...

  2. Unity射击实例讲解—子弹创建

    前言: 这一篇章会介绍如何创建最基本的射击用子弹,示例用工程进度也往后推了许多,有时间会都整理了发出来,学艺尚浅有一些东西不能讲明白,后续学习深入会慢慢补足.另外自己魔改过的版本也是花钱买了一些模型, ...

  3. sip协议中文讲解

    https://blog.csdn.net/qiuchangyong/article/details/50748854

  4. Unity 之 中文乱码

    更改 C#脚本的编码格式: 文件 -> 高级保存选项 -> Unicode

  5. T4m

    Unity T4M 中文讲解 http://blog.csdn.net/tianmao111/article/details/46482963

  6. Unity内存优化之视频讲解

    视频为中文讲解,mp4格式,大小3.05GB 目录   扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主

  7. Unity依赖注入使用详解

    写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...

  8. Unity Jobsystem 详解实体组件系统ECS

    原文摘选自Unity Jobsystem 详解实体组件系统ECS 简介 随着ECS的加入,Unity基本上改变了软件开发方面的大部分方法.ECS的加入预示着OOP方法的结束.随着实体组件系统ECS的到 ...

  9. 2019年Unity学习资源指南[精心整理]

    前言 进入一个领域,最直接有效的方法就是,寻找相关综述性文章,首先你需要对你入门的领域有个概括性的了解,这些包括: 1.主流的学习社区与网站. 2.该领域的知名大牛与热心分享的从业者. 3.如何有效的 ...

随机推荐

  1. SD 相关表

    一.客户主数据基本数据放在KNA1里:公司代码放在KNB1里:销售视图放在KNVV里:合作伙伴放在KNVP里: 二.信用主数据KNKK里有信贷限额.应收总额.特别往来:S066里是未清订单值:S067 ...

  2. 采集练习(十一) php 获得电视节目预告---数据来自电视猫

    昨天写了个采集搜视网的电视节目预告,刚好今天有心情,想采下其他网站提供的节目预告,发现  电视猫wap版 的提供的节目预告也蛮好采(需要正则)....感谢移动互联网! 电视猫的 wap版地址是 htt ...

  3. Java for LeetCode 092 Reverse Linked List II

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1-> ...

  4. node+express上传图片到七牛

    本人微信公众号:前端修炼之路,欢迎关注 最近做项目的时候有一个上传图片的需求,由于没有后端的配合,所以决定自己来搭个服务器,实现上传图片功能.以后如果需要修改成java或者php为后端,直接使用即可, ...

  5. Windows、Linux、Mac OSX编译jni动态库

    在不同平台下默认调用不同名字的动态库,在Windows平台调用name.dll,在Linux平台调用libname.so,在OSX下调用libname.jnilib.不同平台下的编译的方法也有些区别. ...

  6. oops信息的分析【转】

    本文转载自:https://blog.csdn.net/zhangchiytu/article/details/8303172 oops是英语口语"糟糕"的意思,当LINUX 内核 ...

  7. hihocoder 微软编程之美2015 初赛 第一场 (树算法 + 暴力思想 + 搜索思想)

    题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...

  8. 51Nod 1294 修改数组 —— LIS

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1294 1294 修改数组  题目来源: HackerRank ...

  9. JAVA- JSP中解决无法在Cookie当中保存中文字符的问题

    因为cookie的值是ASCII字符,不能直接把自定义cookie的值直接赋值为中文,但是要实现这个功能,还是有方法的. 1.java中已经给我们提供了方法,此时只需要导入该包就行 <%@ pa ...

  10. python做简易记事本

    以下内容参考<辛星tkinter教程第二版>: from tkinter import * from tkinter.filedialog import * from tkinter.me ...