分类:Unity、C#、VS2015
创建日期:2016-04-10
一、简介
Unity拥有功能完善的地形编辑器,支持以笔刷绘制的方式实时雕刻出山脉、峡谷、平原、高地等地形。Unity地形编辑器同时提供了实时绘制地表材质纹理、树木种植、大面枳草地布置等功能。值得—提的是,Unity中的地形编辑器支持LOD(Level of Detail)功能,能够根据摄像机与地形的距离以及地形起伏程度调整地形块(Patch)网格的疏密程度。远处或平坦的地形块使用稀疏的网格,近处或陡峭的地形块使用密集的网格。这将使游戏场景即真实、精细,同时也不影晌性能。
注意:地形与其他的游戏对象有些不同,地形支持Transform(几何变换)组件中的Position(位置)变换,但对于Rotation(旋转)以及scale(缩放)操作是无效的。
二、地形的创建方式
要创建地形并实现山脉、峡谷、平原、高地、树木种植、大面枳草地布置等功能的绘制,必须先熟悉下面的基本概念。
1、添加地形对象
先创建一个新的场景,然后打开菜单栏中的【Terrain】→【Create Terrain】,就创建了一个地形对象:
新创建的地形会在项目工程中创建一个地形资源,并在当前场景中添加—个地形实例(Project视图和Hierarchy视图中同时出现了该地形的相关文件),如下图所示:
新建地形对象后,在检视器视图中可以看到该对象所挂载的组件,除了Transform组件外,还有一个Terrain(地形)组件以及一个Terrain Collider(地形碰撞)组件。
2、地形组件
Terrain组件共包含7个选项按钮,利用这些选项就可以绘制地形起伏、地表纹理或附加细节如树、草或石头等:
在这7个选项按钮中,前3个用于地形高度绘制。
(1)按钮1--升高/降低高度
单击此选项按钮后,再展开的选项卡中,先设置Brush Size(笔刷大小)、Opacity(不透明度)的值以及绘制时使用的Brushes(笔刷),然后就可以在场景中用鼠标单击或拖动绘制地形了。
单击鼠标会增加高度,保持鼠标按下状态移动鼠标会不断的升高高度直到达到高度的最大值。如果想降低高度,按住Shift键再单击鼠标即可。
(2)按钮2--喷涂高度
单击左侧开始的第2个按钮选项,可进入喷涂高度模式。该模式一般用于绘制平整的高地或峡谷等地形。
设置Brush Size(笔刷大小)、Opacity(不透明度)、Height(高度)的值以及绘制时使用的Brushes(笔刷),就可以利用鼠标移动场景中地形上的任意部分,直到达到你希望的高度为止。
(3)按钮3--平滑高度
单击左侧开始的第3个按钮选项,可进入平滑高度模式。该模式用于柔化绘制的区域的高度差,使地形的起伏更加平滑。
(4)按钮4--绘制纹理
单击左侧开始的第4个按钮选项,可进入纹理绘制模式。单击【Edit Texture】可添加、编辑、移除纹理。重复“Add Texture”这个过程,可以添加多个纹理。
添加地形纹理以后,选择想使用的地形纹理,即可使用此纹理拖动鼠标左键对地形进行纹理绘制,如下图所示:
选择不同的纹理再拖动鼠标绘制,就可以在同一个场景中绘制出各种形式的地形纹理。
(5)按钮5—植树
单击左侧开始的第5个按钮选项,可进入植树模式。
单击【Edit Tree】可添加、编辑、移除树。重复“Add Tree”这个过程,可以添加多种树。
选择使用的树,设置树的密度(Tree Density)为合适的值,然后就可以将其绘制在场景中了,此时当前鼠标所在位置会标记为蓝色高亮,如下图所示,单击即可。
单击地形的任何地方都能种树。按住鼠标左键不放并拖动鼠标可在地形上连续种树。按住Shift键然后单击地面,可以擦掉相应位置种植的树。
参数设置(Settings):
Bush Size:笔刷的尺寸。设置植树时笔刷的大小,取值范围在1~100之间。
Tree Density:树木密度。用于控制树对象的间距。值越大树木越密集、间距越小。取值范围在10~100之间。
Tree Height:树的基准高度。值越大树木越高,取值范围在50~200之间。
Color Variation:每棵树的颜色所能够使用的随机变量值,取值范围在0~1之间。
(6)按钮6—种草
单击左侧开始的第6个按钮选项,可进入Paint Details模式,利用该模式可绘制草坪(用Grass Texture种草)以及指定对草坪进行细节性描述的网格(Detail Mesh)。
其中,【Settings】下的【Target Strength】表示目标强度,用于控制种草以及添加细节网格时所产生的影晌,取值范围在0~1之间。
单击【Edit Details…】,在弹出的快捷菜单项中选择【Add Grass Texture】,然后选择某种草坪纹理,并设置相关参数,单击【Add】即可添加一种草坪:
Details Texture:草坪的图片。
Min Width、Max Wdth、Min Height:设定草坪的最小宽度、最大宽度、最小高度值。
Noise Spread:噪波范围。用于控制草产生簇的大小。该值越低意昧着噪波越低。
Healthy Color:健康颜色。此颜色在噪波中心较为明显。
Dry Color:干燥颜色。此颜色在噪波边缘较为明显。
Billboard:广告牌。该项如果被勾选,草将随着摄像机一起转动,永远面向主摄像机。
单击【Edit Details…】,在弹出的快捷菜单项中选择【Add Details】,然后选择某种草的预设,并设置相关参数,单击【Add】即可添加一种草的预设体:
这两项选择后,就可以在场景中用鼠标种草了。
按住Shift键可用鼠标选择删除,按住Ctrl键可用鼠标删除选择的细节网格。
(7)按钮7—地形参数设置
单击左侧开始的第7个按钮选项,进入地形设置模式。
基本地形(Base Settings)选项卡下的参数如下:
Draw:是否绘制基本地形。
Pixel Erroe:像素容差。在显示地形网格时允许的像素误差。是地形LOD系统的一个参数。
Base Map Dist:基本地图距离。设置地形贴图显示高分辨率的距离。
Cast Shadows:投影。设置地形是否投射阴影。
Mterial:材质。通过单击右侧的圆圈按钮为地形指定材质。
树和细节配置(Tree & Details Objects)选项卡下的参数如下:
Draw:如果选中该项,所有的树、草和细节模型都将被渲染出来。
Bake Light Probes for:
Detail Distance:细节距离。该项用于设定摄像机停止对细节渲染的距离。
Collect Detail Patches:
Detail Density:细节密度。该项用于控制细节的密度。默认为1,如果将此值调小,过密的地形细节将会不被渲染。
Tree Distance:树林距离。该项用于设定摄像机停止对树对象进行渲染的距离。值越高,越远的树会被渲染。
Billboard Start:开始广告牌。该项用于没定摄像机将树渲染为广告牌的距离。
Fade Length:渐变距离。该项用于控制树对象从模型过渡到广告牌的速度,如果值设置为0,模型会突变为广告牌。
Max Mesh Trees:最大网格树。该项用于控制在地形上所有模型树的总数量上限。
针对草的风设置(Wind Settings for Grass)选项卡下的参数如下:
Speed:速度。该顶用于设定风吹过的速度。
Size:大小。该项用于设定风力影响的面枳。
Bending:弯曲。该项用于没定草木被风吹的弯曲程度。
Crass Tint:草的色调。该项用于设定所有草以及细节网格整体的色调。
【Resolution】选项卡下的参数用于添加地形对象后设置相关的属性。参数含义如下:
HeightMap Resolution:高度图分辨率。
Detail Resolution:细节分辨率。控制草地和细节网格的地图分辨率。如果希望提高绘制性能,可将该数字设置低一些,比如设置为512或者256。
Base Texture Resolution:基础纹理分辨率,用于代替在一定距离的泼溅贴图 (splat map) 的复合纹理分辨率。
三、示例(Demo05)
这里介绍实际操作的基本步骤,当你熟悉了这些基本步骤后,就可以绘制各种绚丽的地形了。按这些基本步骤操作完成后,即可得到下面的简单示例效果:
1、添加地形对象
在层次视图中鼠标右击选择【Terrain】→【Create Terrain】,创建一个地形。此时在Project的Assets下也会自动添加一个文件名为【New Terrain】的地形组件。
将Project的Assets下的【New Terrain】拖放到Demos05子文件夹下,并将其换名为【Demo05Terrain】。
在“层级视图”(Hierarchy) 中选中地形 (Terrain) 后,便可以使用 F(焦点)键对地形进行轻松导航。按 F 后,无论鼠标在哪个位置,都会移动到场景视图 (Scene View) 的中心位置。这样就可以对某个区域进行润色,快速移动到另一个区域并修改其他东西。如果在按下 F 键时鼠标没有悬停在地形 (Terrain) 的某个区域,则整个地形 (Terrain) 都会被置于场景视图 (Scene View) 的中心位置。
2、设置地形长宽
在检视图中,单击地形组件中的【按钮7】,修改【Resolution】选项卡下的参数设置,将地形的长(Length)宽(Width)都设置为2000,其他使用默认值:
下面是在Unity 5.3.4中初次创建地形后的默认值:
宽(Terrain Width):500
长(Terrain Length):500
高度(Height):600
Heightmap Resolution:513
细节分辨率(Detail Resolution):1024
Detail Resolution Per Path:8
Control Texture Resolution:512
Base Texture Resolution:1024
3、绘制山脉
在检视图中,单击地形组件中的【按钮1】,然后在地形上绘制出山脉的初步效果,这—步骤主要从整体角度来把握山脉效果,绘制出山脉的大致起伏即可:
然后在【Brushes】栏中选择笔刷的样式,为山脉增加细节结构,用于模拟山脊的效果:
4、绘制平坦地面
绘制山脉上的部分平坦地面,如下图所示:
技巧:按住Shift键配合单击或按住鼠标左键可以实时获取到笔刷所在地形的相应位置的高度,并将该高度设为笔刷的高度值。
5、为地形添加材质(可选)
鼠标右击Demo05文件夹,在该文件夹下创建一个材质:
然后将其命名为【Demo05Material】:
选中Demo05Material材质,在Inspector视图中单击Shader右侧的按钮,在弹出的列表框中依次选择【Nature】→ 【Terrain】→【Diffuse】项,为terrain材质指定shade:
选择地形,在Inspector视图中,单击【按钮7】,然后单击【Material】项右侧的圆圈按钮,在弹出的Sehct Matmal对话框中为地形指定刚刚创建的材质:
说明:地形的材质不是必须设置的,通常没置地形的材质是为了能够更改地形的渲染Shader。如果该材质设置为空,Unity会使用一套内置的地形材质。
6、添加纹理
单击地形编辑器中的【按钮4】切换到【Paint Textures】模式,单击【Edit Texture】按钮,选择【Add Texture】项,会弹出Add Terrain Texture对话框,单击Texture顶的【Select】按钮,在弹出的Select Texture2D对话框中指定一张纹理作为地形的首层纹理:
指定首层纹理后,Unity会自动将首层纹理平铺在整个地形上。如果需要修改平铺的大小,可继续单击【Edit Texture】按钮,选择【Edit Texture】项,在弹出的对话框中调节【Size】项的X、Y方向的数值即可。
首层纹理指定之后,接下来还可以继续为地形指定其他纹理用于丰富地形效果,方法与指定首层纹理相同。指定后再选中新添加的纹理,利用笔刷将该纹理绘制到地形上,这里不再演示。
7、添加路面
办法与“6.添加纹理”相同。
下面是添加的路面纹理:
下面是添加路面后的效果:
8、添加树
地形的纹理绘制完毕后,接下来为地形添加树。单击地形编辑器中的【按钮5】切换到【Place Trees】模式,单击【Edit Trees】按钮,选择【Add Tree】,在弹出的Add Tree对话框中单击【Tree】顶右侧的圆圈按钮,进而在弹出的【Se!ect CameObject】对话框中指定—棵树作为地形的树(重复此操作可以添加多种树):
添加树以后,在【Trees】预览框中选中某种树,设置合适的参数后,就可以利用笔刷在地形上种树:
如果希望修改已添加树的样式或受风力影晌的程度等参数,先在Tree预览框中选择要编辑的树,然后单击【Edit Trees】按钮,选择【Edit Tree】,在弹出的对话框中进行编辑。
要移除树,单击【Edit Trees】按钮,选择【Remove Tree】项即可。
9、添加草、灌木等
绘制完树,接下来为地形添加草、灌木等细节。
单击地形编辑器中的【按钮6】切换到【Paint Deails】模式,然后添加草坪、灌木等细节即可,用法与前面添加树的办法类似,这里就不再细讲了。
10、设置其他参数
当你熟悉以后,还可以通过地形编辑器【按钮7】下的选项,设置风刮草地和树木的效果。最后,再添加光源让整个场景看起来明亮绚丽等。