第九章第九章 地形与寻路技术地形与寻路技术 19.1 地形引擎v9.1.1 地形的创建vUnity3D游戏引擎中可以通过两种方式创建地形,一种是通过Unity内置的地形引擎,另一种则是将带有大量地形信息的高度图导入进地形引擎 (1)进入Unity3D集成开发环境中,利用快捷键Ctrl+N新建一场景,点击“GameObject”“3D Object”“Terrain”菜单创建一个地形,如图9-1所示游戏组成对象列表和游戏资源列表中都会出现相应的地形信息与地形文件,如图9-2所示29.1 地形引擎v9.1.1 地形的创建v(2)选中Terrain游戏对象,其属性面板中会出现Terrain组件和Terrain Collider组件,如图9-3所示前者负责地形的基本功能,后者充当了地形的物理碰撞器Terrain Collider组件属于物理引擎方面的组件,实现了地形的物理模拟计算 39.1 地形引擎v9.1.1 地形的创建v其组件的相关参数 :vMaterial地形的物理材质,可通过设置物理材质的相关参数分别开发出草地和戈壁滩的效果vTerrain Date地形数据参数,用于存储地形高度和其他重要的相关信息vEnable Tree Collider是否启用树木的碰撞检测49.1 地形引擎v9.1.2 地形的基本操作vTerrain组件下有一排按钮,分别对应了地形的各项操作和设置 :v(1)选中Terrain组件下的第一个按钮,其下的文本区域中会显示出该按钮的名称以及其操作方式,如图9-4所示。
该按钮可以调整地形的凹凸程度,以笔刷的方式设置地形的坡度Brushes栏下有各种各样的笔刷样式,笔者可以根据开发需要选择不同的笔刷样式59.1 地形引擎v9.1.2 地形的基本操作vTerrain组件下有一排按钮,分别对应了地形的各项操作和设置 :v(2)通过点击和拖动鼠标,可以使鼠标点过的地方凸起,同时按下“Shift”键可以实现下凹的功能需要注意的是,进行下凹的操作时,不能使地形水平面低于地形最小高度即地形创建时的初始高度是地形的最低限制,之后的操作不能使地形低于该高度vBrush Size笔刷大小,含义为笔刷的直径大小,单位为米vOpacity笔刷的强度大小,其值越大,地形变化的幅度越大,反之则越小69.1 地形引擎v9.1.2 地形的基本操作v(3)选中第二个按钮,将其Height参数大小修改为30,单位是米并点击Flatten按钮,其作用是将整个地形的高度设置为指定的Height再次选中Raise/Lower Terrain按钮,按住Shift键即可实现地形的下凹效果,如图9-6所示:79.1 地形引擎v9.1.2 地形的基本操作v(4)除了Raise/Lower Terrain按钮可以调整地形的局部高度外,Paint Height按钮也可以实现该功能,如图9-5所示。
与前一个按钮不同的是,该按钮有一个参数可以设置地形高度值,被调整的局部地形高度值不会超过该数值:89.1 地形引擎v9.1.2 地形的基本操作v(5)Paint Height按钮中各项参数的功能如表9-3所列通过修改该按钮的各项参数,可以对地形进行局部的调整,实现地形在限定高度范围内上升或下降的效果该按钮也可制作特定高度的地形,如图9-7所示:99.1 地形引擎v9.1.2 地形的基本操作v(6)地形制作过程中,由于地形的高度差较大会导致部分地形显的特别突兀,或者使山峰过于尖锐,这时就需要用到平滑处理Smooth Height,如图9-8所示该按钮可以使地形更加平滑,将图9-7突兀的地方做平滑处理后的效果如图9-9所示109.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(1)调整好地形的基本形状后,点击Paint Texture按钮可以为其添加纹理图,如图9-10所示图片纹理以涂画的方式进行,将单元图片赋给画笔,画笔所经过的地方将所对应的纹理图贴到地形上Paint Texture的各项参数如表9-5所列:属性含义Brush Size笔刷大小,含义为 笔刷的直径大小,单位为米Opacity笔刷的强度值,该值 越大,制作地形时,地形变化的幅度越大,反之则越小Target Strength笔刷的涂抹强度值,代表的是与地形原来纹理图的混合比例值119.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(2)下面需要为画笔赋上纹理图,这里需要用到Unity游戏开发引擎中的标准资源包。
在游戏资源列表中右击Import PackageEnvironment导入环境资源包,如图9-11所示129.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(3)环境资源包导入完成后,EnvironmentSpeedTree文件夹下的三个文件夹中包含大量内置的纹理图,如图9-12所示可以从此文件及中选取合适的纹理图点击Terrain组件下“Edit Texture”“Add Texture”选项添加纹理,如图9-13所示139.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(4)场景中弹出的Add Terrain Texture面板中,可以通过点击Select按钮添加普通贴图和法线贴图,在弹出的Select Texture2D面板中选择合适的纹理图或者是法线贴图,如图9-14所示可以通过调整Metallic值来调整纹理图的明暗程度,点击Add按钮完成纹理图的添加如图9-15所示149.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(5)为地形添加第一副纹理图时,该纹理图会铺满整个地形,还可以通过点击Edit Texture按钮选中Edit Texture菜单对所选中的纹理图进行编辑,如图9-16-1所示。
地形引擎还支持添加多幅纹理图,并通过笔刷改变地形中某部分的纹理图,效果如图9-16-2所示159.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(6)地形引擎还可以为地形添加花草树木,点击Place Trees按钮进入种植树木功能区树木Prefab添加的方式与添加纹理图的方式相同,如图9-17所示以涂画的方式批量地进行树木的种植,开发人员只需提供单棵树木的预制件资源即可效果如图9-18所示其各项参数如表9-6所列169.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(7)除了进行树木的种植,开发人员还可以在地形上铺设花草等修饰物,点击“Paint Details”按钮进入该功能区,如图9-19所示该按钮参数与Place Trees类似,主要区别是前者可以使用标志板和网格对象作为资源对象,而后者只可以使用预制件效果如图9-20所示参数如表9-7所列属性含义Brush Size画笔大小,其实际含义为画笔的直径长度,以米为单位Opacity笔刷的强度值,该值越大,制作地形时,地形变化的幅度越大,反之则越小Target Strength画笔涂抹强度值,该值范围为0-1,代表了与地形原来花草的混合比例大小179.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(8)点击Edit Texture按钮选中Edit菜单可对所选中的纹理图进行编辑,如图9-21所示。
弹出的Edit Grass Texture面板中可以对铺设的纹理图的宽度、高度以及颜色等参数进行设置,如图9-22所示参数如表9-8所列189.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(9)最后可以对地形进行一些参数设置,地形设置面板中,可以设置地形的大小及精度等参数,还可以给地形添加一个模拟风,使地形中的花草树木会非常生动地随风摆动,点击“Terrain Settings”按钮进入地形设置功能区,如图9-23、9-24所示199.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(10)Terrain Settings面板中的各项参数功能如表9-9所列该功能区中,开发人员可以对地形的整体参数、分辨率进行详细地设置属性含义属性含义Base Terrain基于地形的参数修改Draw是否显示地形Cast Shadows是否进行阴影的投射Thickness物理引擎中该地形的可碰撞厚度Tree & Detail Object树木和花草等游戏对象Draw是否显示花草树木Bake Light Probes For Tress烘焙光照是否烘焙到树上Detail Distance细节距离,与相机间的细节可显示的距离Collect Detail Patches进行细节补 丁的收集Detail Density细节的密集程度Tree Distance树木的可视距离值Max Mesh Trees允许出现的网格类型的树木的最大数量Wind Settings For Grass草的风向设置Speed吹过草地风的风速Size模拟风可影响的范围大小Bending草被风吹弯的弯曲程度Grass Tint被风吹过时草的色调Resolution分辨率的设置Terrain Width地形的总宽度值Terrain Length地形的总长度值Terrain Height地形的总高度值Heightmap Resolution地形灰度度的精度209.1 地形引擎v9.1.3 地形的纹理添加及设置参数v(10)Terrain Settings面板中的各项参数功能如表9-9所列。
该功能区中,开发人员可以对地形的整体参数、分辨率进行详细地设置Detail Resolution细节 精度值,该值 越大,地形显示的细节 越精细,但随之占用的资源也会越多Detail Resolution Per Patch每一小块地形所设置的细节 精度值Control Texture Resolution将不同的纹理插值绘 制在地形上时所设置的精度值Base Texture Resolution地形上绘制基础纹 理时所采用的精度值Heightmap高度图,可以导入高度图,或者将制作好的地形高度图导 出Material材质类 型,选项 分别是标准、漫反射、高光、自定义,使用自定义时 需要制定材质Reflection Probes反射探头类 型,选项 分别是关闭、混合探头、混合和天空盒探头、一般Pixel Error像素误差,表示地形的绘制精度,该值 越大,地形的结构细节 越少Base Map Dist基础图 距,当与地形的距离超过该值时 ,则以低分辨率的纹理进行显示Billboard Start标志板起点,以标志板形式出现的树木与相机的距离Fade Length淡变长 度,树从标志板转换 成网格模式时,所使用的距离增量219.1 地形引擎v9.1.4 高度图的使用v(1)高度图是一张带有灰阶的图片,图片中的每个像素具有不同的灰度值,这些灰度值代表了不同的高度。
像素的灰度值越大,表示对应的高度越高,像素的灰度值越小,表示对应的高度越低v(2)开发人员可以在不同的开发工具上制作高度图,笔者利用的Photoshop CS6(以下简称PS)首先准备好一张彩色图片,将其导入进PS,步骤如图9-25所示弹出的面板中选择准备好的图片导进PS(制作高度图的方法有好多种,也可以采用其他方式)v(3)导入完成后,点击工具栏中的图像模式灰度菜单,如图9-26所示弹出的面板选择“扔掉”按钮,此时整幅图片变为灰色,如图9-27所示需要注意的是,Unity中地形使用的高度图的分辨率为1+32*X,X为任意正整数,则高度图最小的分辨率为33229.1 地形引擎v9.1.4 高度图的使用v(4)接下来修改该图片的分辨率,点击PS的工具栏中的图像图像大小,如图9-28所示弹出的面板中勾掉“约束比例”,勾选“重定图像像素”复选框,笔者在像素大小一栏中将宽度和高度像素修改为65,点击确定按钮确定修改选项,如图9-29所示 v(5)像素大小修改完成后需将该高度图盗图,目前Unity只支持RAW格式的高度图,选择弹出面板的格式下拉列表中的(*.RAW)格式,如图9-30所示将高度图保存某一路径下,打开U。