在Unity工作流程内,地形是一个不可缺少的重要元素,不论是游戏或虚拟现实都会使用到各种类型的地形效果,在这个教学中我们需要了解到地形的制作基本概念与,其中对于Unity的地形操作部分需要大量的操作练习.熟悉这些功能操作之后,相信对于游戏地形的制作与运用将会更得心应手。 创建一个新的專案目录,勾選Terrain Assets資源包(Tree Creator與Water可一併加入),按下 Create 開始创建项目。
开始创建地形,按下Terrain > Create Terrain,窗口内自动产生一个平面,这是地形默认使用的基本原型。
选择 Terrain > Set Resolution 功能可以检视默认的地形所设定的基本参数,在这个选单内提供多样化的设定方式:
Terrain Width : 地形的宽度
Terrain Height : 地形的高度
Terrain Length : 地形的长度
HeightMap Resolution:地形高度图片所使用的分辨率. Detail Resolution : 这个数值高低用来控制草地和添加细节模型的分辨率。数值越高效果越好,不过会大量消耗内存,可能会造成严重的延迟,大多数我们将这个数值控制在128到256之间会取得一个测试地形的开始。
Detail Resolution Per Patch : 每一个面片的细节设定值
Control Texture Resolution : 控制贴图纹理的分辨率。
Base Texture Resolution : 控制地型基本贴图纹理分辨率。 在第一次的练习中,我们先采用内定的标准数值来进行地形绘制,直接按下Set Resolution 完成确认。
在Inspector 面板中的 Terrain ( Script ) 是关于整个地形的所有功能设定,最上面的七个按钮为主功能区,由左至右的按钮功能分别是:
1.Raise and Lower Terrain – 绘制地形表面凹凸程度,如在绘制过程按下 Shift 则将地形向下凹陷。
2. Paint height – 绘制地形高度
3. Smooth the terrain height – 对地形表面进行平滑处理
4 Paint the terrain texture – 绘制地形表面贴图
5.Place trees – 种植树木功能
6.Place plant,stone and other small foliage – 种植花草与地形表面对象
7.Terrain – 地形相关参数设定
确认 Set Resolution 的设定值为默认的设定值后,选择 Import Heightmap – Raw功能。Raw文件里面记录着灰阶的位阶图,藉由灰阶的落差来产生地形的高低。
选择下載的附件terrain.raw,不改动任何设定,直接按下 Import将地形高度贴图导入。
经过贴图的导入后,原本的平面转换成高低起伏的地形,接下来我们就可以开始绘制地形上的纹理效果。
按下 Paint the terrain texture > Edit Texture > Add Texture,将Sand (Beach2) 拖曳到 Splat 栏位内。
将贴图拖曳进来后按下 Add 完成导入动作,在地形上就直接覆盖了一层类似沙地的表面。
现在我们需要导入第二张贴图来增加地形斜坡上的绿色纹理,按下 Add Texture 后将Grass ( Hill )拖曳到 Splat,Tile Size X与Y设定为10,按下Add完成导入,在 Textures 小窗口内就增加了第二种纹理。
按下绿色的纹理小图,表示选择该贴图进行绘制,在Settings 字段中将 ***sh Size 设定为60,Opacity设定为50,Target Strength设定为0.9的笔刷设定,然后开始进行斜坡上的纹理绘制。
使用相同方式在地形的斜坡区块上绘制出相同的绿色纹理,在完成大面积的斜坡纹理绘制后,选择原来的沙地贴图, 将***sh Size 设定为5,Opacity设定为50,Target Strength设定为1,在斜坡上绘制出道路的造型。
在绘制斜坡道路时可先使用较小的笔刷先绘制出基本线条,然后再推进摄影机角度进行更多细节上的调整。
将加第三个贴图纹理Cliff(Layered Rock)加载,Tile Size X与Y设定为50,***sh Size 设定为15,Opacity设定为40,Target Strength设定为0.4,然后在斜坡与地面上的交界处进行绘制,使其能产生融合的纹理效果.
在绘制交界处纹理时,先将 Target Strength 设定为 0.4可取得一个半透明的融合,然后再降低数值约为0.25,在靠近地面的融合处再用笔刷淡化边缘,使交界处能产生较为真实的地形表面纹理.
接下来需要在地形上面放置植物与花草,连结到官方网站http://unity3d.com/support/resources/assets/terrain-assets下载地形辅助资源包后,使用 Assets > Import Package > Custom Package 将资源包导入.
导入资源包时可以预览与勾选所需要的对象内容,确认所有资源都被勾选后按下Import,系统在逐一导入资源时会需要些时间,完成后在Project面板内就会出现Terrain Assets的资源目录.
按下Place Trees > Edit Trees..> Add Tree,然后将Palm(Group)模型加载,我们准备用这个椰树来做为种植的对象.
在树木的设定栏中调整分别设定笔刷的大小与密度,设定的数值作用如下:
***sh Size – 笔刷范围
Tree Density – 树木的密度
Color Variation – 颜色的变化控制
Tree Height – 树木高度
Variation – 高度的变化值(使其产生高度不一的树木)
Tree Width – 树木的宽度
Variation – 宽高度的变化值(使其产生宽度不一的树木)
设定好树木笔刷的数值之后,就可以开始在地形上刷出椰树,我们将椰树种植在比较低的区域,越往上则数量越少,一个原则是先刷密集区域,然后再降低 Tree Density数值刷其它部分.
在进行树木种植过程中,可能会有些不需要种植的区域被刷到,消除的方式只要配合Shift键就可刷掉多余的树木.
完成第一种树木的种植后,现在增加第二种树木模型,按下Edit Trees>Add Tree,将Terrain Assets资源包内的ThinTree加载,然后将笔刷的设定修改如下:
开始刷出第二种树木的分布,运用相同的操作方式配合Shift键进行区域种植,必须注意的是 Tree Density的数值控制.
按下 Place plants,stones..> Edit Details..> Add Grass Texture ,将Terrain Assets > Terrain Grass > Grass 拖曳到Detail Texture.
调整Grass的设定值如下,将Health Color与Dry Color颜色设定为白,Billboard为勾选的状态,按下Add完成导入.
调整Grass的笔刷与强度,这里必须注意到的是Target Strength这个数值的调整,数值越大则植物的密度越高,可先从0.15-0.25之间的数值先开始操作.
现在我们将摄影机拉远到一个距离,这时会发现刷出来的植物突然消失不见,原因是地形中的细节显示被限定在一个范围内,按下 Settings for the terrain 可找到关于地形的相关设定,我们可以将Draw > Detail Distance的显示距离加大到250(最大值),这样就可在场景中看到更多较多的细节.
Detail Density用来设定细节的密度显示比例,将数值设定为0则完全不显示.Tree Distance 表示在摄影机中看到树木的距离,数值越小则从摄影机看过去的数量越少,这个功能类似3D软件中Clip Plane的作用.
按下Edit Detail > Add Grass Texture 加载 Terrain Assets > Grass > Fern后继续在地形上增加一些花草作为点缀.除了使用Grass贴图作为种植方式,还可以增加细节模型来强化场景的三维效果,按下Edit > Add Detail Mesh,将Terrain Assets > Tree Ambient-Occlusion > BananaPlant拖曳到 Detail字段,设定值调整如下,Health 、 Dry Color分别设定为浅绿与深灰色,Render Mode选择Vertex Lit(顶点着色),按下Add完成导入.
将***sh Size调整为4,Opacity为0.06,Target Strength为0.0625,然后在地形上刷出少量的植物.
最后再增加一种点缀用的植物,将Terrain Assets > Grass > WhiteFlowers拖曳到Detail Texture后分别设定以下的数值, 将Health、Dry Color分别设定为白色与浅灰色,按下Add完成导入.
导入后在地形上刷出第四种花草植物,在过程中我们可根据地形高低与范围来切换不同的植物,再配合Shift键删减掉多余的部分,最终就能得到一个理想的地形效果。

最后在场景中增加天空背景与雾化效果即可完成整个地形的制作。
|