1.Terrain引擎
1.1.简介
Terrain 是Unity自带的地形编辑器工具。
1.2.创建
在 Hierarchy面板
中右键-> 3D Object
-> Terrain
,创建一个Terrain(地形)
同时会在 Assets 文件夹中创建一个默认名为 New Terrain 的文件,用于保存 Terrain 的相关数据。后缀为". asset "。
1.3.几个初始的Terrain参数
- Terrain 创建后除了最基本的 Transform 组件外,还自带两个组件,
Terrain
与Terrain Collider
。 - Terrain 默认平面大小为 500米*500米 。
- Terrain 默认的 Pivot 中心点,为世界坐标轴的原点(0,0,0)。
2.Terrain组件
2.1.Settings
2.1.1.简介与位置
Settings 是 Terrain 的参数设置面板。
2.1.2.参数的详情
-
Base Terrain:基本地形设置
-
Draw
:是否显示该地形 -
Pixel Error
:贴图和地形之间的准确度,值越高越不准,但系统负担越小 -
Pixel Map Dist.
:在多少距离以外地形贴图将自动转为较低分辨率(以提高效率) -
Cast Shadow
:是否投射阴影(如果是很平的地形可以不投射阴影) -
Material
:地形使用的材质类型 -
Reflection Probes
:地形是否会被反射探球所计算(也就是说是不是能出现在反射贴图里面) -
Thickness
:在发生碰撞时,该地形向-y方向延伸的厚度(用来防止高速物体穿过较薄的地形)
-
-
Tree & Detail Objects:树和细节物体
-
Detail Distance
:在多少米视距范围内显示Details物体 -
Collect Detail Patches
-Detail Density
:Details物体的密度(1单位面积内最多出现多少个Detail物体) -
Tree Distance
:在多少米视距范围内显示Tree物体 -
Billboard Start
:多少米以外Tree物体开始显示为一张贴图 -
Fade Length
:从多少米以外Tree物体开始被逐渐替换成贴图 -
Max Mesh Trees
:场景中最多出现多少颗真正的多边形树(也就是说超过这个数量的树不论距离摄影机的距离有没有达到标准都会被替换成一张贴图),这个值太小的话,“跳帧”现象会非常明显
-
-
Wind Settings for Grass:风和草的设定
-
Speed
:风速。而风速越快,草的摆动幅度越大 -
Size
:草的基础大小 -
Bending
:草物体被风吹弯的最大程度 -
Grass Tint
:对草物体统一添加一个颜色,通常会设置为与地面颜色接近的颜色
-
-
Resolution:分辨率
-
Terrain Width
:地形最大宽度(米) -
Terrain Length
:地形最大长度(米)
以上这两个属性就是默认面积500 * 500,可以在这里改变整个地形的面积 -
Terrain Height
:地形最大高度(米),这个值是我们能够刷出的地形高度的最大值。 -
Heightmap Resolution
:刷出来的高差图的分辨率,513的话代表一个像素值控制大概1米区域的地貌,由于我们的笔刷是按照像素来规定大小的,如果我们在一个较低的Heightmap Resolution下刷好地面以后修改Heightmap Resolution为一个较高的值,会发现我们刷好的范围会变成一个角落里的一小块地形,所以千万不要刷到一半的时候再去修改这个数值 -
Detail Resolution
: -
Detail Resolution Per Patch
: -
Control Texture Resolution
:控制贴图的分辨率,所谓控制贴图是说控制各层贴图的“透明通道”的分辨率,比如基层贴图是泥土,上层贴图是草地,那么草地贴图本身是完全覆盖的,但通过一个“控制贴图”的灰度来决定每个点草地贴图与泥土贴图如何融合 -
Base Texture Resolution
:对于很远处的地形,Unity3D会切换成显示一个自动创建好的“融合”了各层贴图效果的Basemap,这样比去计算多层贴图融合要高效很多,这个参数就是设置这个Basemap的分辨率的
-
-
Heightmap:
这里可以导入RAW图像作为heightmap使用,或者将当前的heightmap导出成RAW图像。我们可以从地理数据库中获得真实的某一地区的地形高差图,也可以利用第三方工具创建地形,然后将高差图导出给Unity3D使用。
要注意的是,
Heightmap Resolution
是指水平方向的分辨率,而不是地形的垂直分辨率,地形垂直分辨率取决于高差图的色深范围。,如果是普通jpg或者png图片做高差图的话,垂直分辨率就是256,代表最多能表达256个不同高度,用这样的垂直分辨率刷高山区域,很容易出现“梯田”状的结果,所以最好使用16bit或32bit色深的高动态图片来做高差图。
2.2.地形操作
2.2.1.位置
2.2.2.关闭Baking
由于每一次改变地形,unity 默认都会自动生成光照贴图,导致性能减弱。
可以在 windows 菜单-> rendering
->lighting setting
->取消勾选最下面的auto Generate
2.2.3.各个地形工具
Raise / Lower Terrain
使用:
从调色板 Brushes 中选择一个画笔,然后单击左键并将其拖动到 Terrain对象上 以提高地形高度直到最大高度 Terrain Height
。在按住Shift键的同时单击左键并拖动以降低地形高度降低地形高度直到0。
属性 | 作用 |
---|---|
Brush Size | 控制画笔工具的大小以创建不同的效果,从大山峰到小细节 |
Opacity | 确定画笔的强度,值越大,改变地形速度越快 |
Set Height
作用:
使用 “Set Height” 工具来调整“ Terrain 区域的高度中的特定值。
设置高度对于在场景中
Set Height 对于在 场景中 创建平坦的水平区域很有用。例如高原或人造特征(如道路,平台和台阶)。
使用:
使用“ Set Height”工具绘画时,单击左键在 Terrain 上拖动,它将降低当前高于 目标高度 的地形区域,并升高低于 目标高度 的区域。
属性 | 作用 |
---|---|
Height | Set Height工具的目标高度 |
Brush Size | 控制画笔工具的大小以创建不同的效果,从大山峰到小细节 |
Opacity | 确定画笔的强度,值越大,改变地形速度越快 |
注意:
- 如果您按下在 Height 属性旁 “ Flatten ”按钮,它将使当前选中那一块 Terrain 图块均达到您指定的目标高度。例如,如果您希望景观同时包括地面以上的丘陵和地面以下的山谷,这对设置升高的地面很有用。
- 如果勾选了 Flatten all 按钮,再按下 “Flatten” 按钮时,它将调平场景中的所有 Terrain,并移动到目标高度 。
Smooth Height
作用:
“ Smooth Height” 工具可以平均附近区域,使景观柔和并减少突然变化的外观;它不会显着提高或降低地形高度。
使用包含高频图案的画笔绘画后,平滑处理特别有用。这些笔刷图案倾向于将尖锐的锯齿状边缘引入到景观中,但是您可以使用 “Smooth Height” 工具来软化该粗糙度。
使用:
使用“ Smooth Height” 工具绘画时,单击左键在 Terrain 上拖动,
属性 | 作用 |
---|---|
Opacity | 确定画笔的强度,值越大,改变地形速度越快 |
Brush Size | 控制画笔工具的大小 |
Paint Texture
作用:
使用 “Paint Texture” 工具将诸如草,雪或沙之类的 纹理 添加到 Terrain 中。它使我们可以将平铺纹理的区域直接绘制到 Terrain上 。在 Inspector 面板中,单击“ 绘制地形”图标,然后选择从 “Brushes” 工具列表中 绘制纹理 。
使用:
- 要配置该工具,必须首先单击 “Edit Terrain Layers” 按钮以添加 “地形图层” 。我们添加的第一个 Terrain图层 将使用配置的纹理泛洪填充我们的 Terrain 。我们可以添加多个地形图层。但是,每个图块支持的地形层数取决于我们的特定渲染管线。
- 接下来,我们选择 画笔 进行绘画。笔刷是基于纹理的资产,该纹理定义笔刷的形状。从内置画笔中选择或创建自己的画笔。
- 最后,在 Scene视图 中查看,单击左键并在 “Terrain” 上拖动光标以创建平铺纹理区域。
属性 | 作用 |
---|---|
Opacity | 确定画笔的强度,值越大,改变地形速度越快 |
Brush Size | 控制画笔工具的大小 |
注意:
- 应用于地形的第一个地形层将自动成为基础层,并扩展到整个景观。
- 我们可以使用其他地形图层绘制区域以模拟不同的地面,例如草,沙漠或雪。要在草木乡村和沙滩之间逐渐过渡,您可以选择应用不透明度可变的纹理。
- 我们可以跨越图块边界进行绘制,以使相邻区域具有自然的有机外观。
- 地形系统会将选定的地形图层添加到您绘制的任何地形上。
Create Neighbor Terrain
作用:
选择工具后,Unity会突出显示所选“地形”图块周围的区域,指示您可以在其中放置新的连接图块的空间。
使用:
左键单击区域,将自动生成一片空白的 Terrain ,并在 Assets 文件夹中生成一个新的 assets 文件。
注意:
- 默认情况下,Unity 在 Terrain 的 Terrain Settings 中启用 “Auto connect”。当自动连接被启用,地形系统会自动管理周边地形之间的连接,并且会自动连接到具有相同 Grouping ID 的相邻 Terran 。
- 在极少数情况下,如果更改 Grouping ID 或为一个或多个图块禁用自动连接,则可能会失去图块之间的连接。要在地形图块之间重新创建连接,请单击 Inspector 面板中 Terrain settings 中的 “reconnect” 按钮。如果两个相邻的图块具有相同的分组ID,并且两个图块都启用了自动连接,“重新连接” 会但仅连接这两个相邻的 Terrain 。
Stamp Terrain
作用:
如果使用 “Brushes” 来创建自定义画笔,该 “纹理” 表示具有特定地质特征(例如山丘)的高度图,则 Stamp Terrain 很有用。
使用:
1.使用Stamp Terrain工具,您可以选择现有的画笔并单击以选用它。在 Terrain 中每次单击都会引发 Terrain 中出现所选笔刷形状的 “Stamp Height” 。要将 Stamp Height 乘以百分比,请移动 Opacity 滑块以更改其值。例如, Stamp Height 为200,Opacity 为50%,则将每个 Stamp 的高度设置为100。
2.Max <–> Add 让我们选择是将 Stamp 的高度添加到地形的当前高度,还是取两者中的最大高度。
如果将 “Max <–> Add”设置为0,然后在地形上标记,Unity会将 Stamp Height 与标记区域的当前高度进行比较,并将最终高度设置为较高的值。
如果将 “Max <–> Add”设置不为0,然后在地形上标记,Unity会将 Stamp Height×(Max <–> Add)的值 添加到标记区域的当前高度,以便最终高度是两个值的总和。
属性 | 作用 |
---|---|
Stamp Height | 标记的高度 |
Max <–> Add | 选择最大还是添加 |
Opacity | 确定画笔的强度,值越大,改变地形速度越快 |
Brush Size | 控制画笔工具的大小 |
2.3.Paint Trees
作用:
将树刷入到 Terrain 里面。
添加树:
点击 Edit Trees … -> Add Tree -> 选择
使用:
- 按下左键拖动开始刷树
- 按住Shift键重复操作可以删除已经刷出来的全部种类的树
- 按住Ctrl键左键拖动可以删除当前选择种类的树。
Settings:
属性 | 作用 |
---|---|
Brush Size | 笔刷大小,控制可以添加树的区域的大小 |
Tree Density | 树的密度。设置在“ Brush Size”定义的区域上绘制的树的平均数量。 |
Tree Height | 树的高度(Y轴缩放)。如果勾选 Random ,系统自动随机生成不同高度的树。而树的高度的范围取决于中间的白色滑块,白色滑块的范围可以调整。 |
Lock Width to Height | 默认情况下,树的模型比例锁定了,因此,树总是始终按比例缩放。但是,我们可以禁用 “Lock Width to Height” 选项,可以在下面参数 Tree Width 里分别指定宽度。(其中X和Z轴,也就是横截面一定是等比例缩放的) |
Color Variation | 颜色的随机变化程度,会自动让不同的树的颜色产生一定的差异 |
2.3.Paint Details
作用:
一个地形可能有草丛和其他小物体(例如岩石)。用 Paint Details 来刷细节。
添加细节物体和草:
最初,地形没有可用的草或细节。在检查器中,单击“ 编辑细节”按钮以显示带有“ 添加草纹理”和“ 添加细节网格”选项的菜单。单击任一选项以打开一个窗口,您可以在其中选择资产以添加到地形以进行绘制。
- 添加草贴图:在 Details 栏点击Edit Details... -> Add Grass Texture,打开Add Grass Texture面板设置新建“草贴图”的参数。
- 添加细节物体:在 Details 栏点击Edit Details... -> Add Details Mesh,打开Add Details Mesh 面板设置新建“细节物体”的参数。
使用:
- 按下左键拖动开始刷细节物体
- 按住Shift键重复操作可以删除已经刷出来的全部种类的细节物体
- 按住Ctrl键左键拖动可以删除当前选择种类的细节物体。
添加窗口:
属性 | 作用 |
---|---|
Detail |
选择一张花或者草的贴图 |
Min Width 、Max Width 、Min Height 、Max Height
|
单个草物体的最大最小的宽高值 |
Noise Spread |
增加其在所选范围中分布的随机性 |
Healthy Color |
细节物体的健康颜色 |
Dry Color |
细节物体的干枯颜色 |
Render Mode |
细节物体的渲染模式。选择 Grass ,细节物体会被压扁成一个薄片,然后用草的渲染方式来渲染;选择 Vertex Lit ,细节物体接收的光照模式为顶点照亮 |
注意:
- 点击 Detail 旁的小圆点来选择的细节物体。
- Unity在 Min Width 和 Max Width 值以及 Min Height 和 Max Height 值之间,随机取值进行缩放。Unity对细节物体的 x 和 z 轴都使用 Width 缩放,对 y 轴使用 Height 缩放。 Noise Spread, Healthy Color和 Dry Color 值的作用与草一样。
属性 | 作用 |
---|---|
Detail Texture |
选择一张花或者草的贴图 |
Min Width 、Max Width 、Min Height 、Max Height
|
单个草物体的最大最小的宽高值 |
Noise Spread |
增加其在所选范围中分布的随机性 |
Healthy Color |
草的健康颜色 |
Dry Color |
草的干枯颜色 |
Billboard |
勾选后就以一张贴图永远面向 Camera 生成单个草物体。取消勾选就会以贴图十字交叉的样子来生成单个草物体 |
注意:
- Detail Texture 是代表草的贴图。可以用贴图来表示类似物体,例如铁丝网、花朵之类的。
- Min Width,Max Width,Min Height 和 Max Height 值来指定所生成的上部和下部的大小限制草团块。为了营造出真实的外观,以随机的“嘈杂”模式生成草,并散布着裸露的补丁。
- Noise Spread 值控制裸露和草皮斑块的近似大小,值越高,在指定区域内会出现更多的变化。Unity使用 Perlin noise 算法,Noise Spread 指的是在 Terrain 的 x , y 位置与图像之间应用的缩放比例。
- 交替出现的草块在 中心处比边缘处“更健康”,并且在 健康颜色” 和 干枯颜色 设置中设置的颜色代表草的健康表现。
- 最后,勾选 Billboard 选项后,贴图将自动旋转,让它们始终面对 Camera 。当我们要显示草丛茂密的草地时,这很有用,因为草是二维的,从侧面看不到。但是,在稀疏的草丛中,玩家可能会看到单个贴图的旋转,从而产生奇怪的效果。