添加地形_[专栏精选]2018.3地形更新详解

693b9faed087b9e3b621a54d5e1c7ce2.png
本文节选自 洪流学堂公众号技术专栏《大话Unity2018》,未经允许不可转载。

洪流学堂公众号回复专栏,查看更多专栏文章。


大智:“Unity2018.3已经发布有一段时间了,这次更新内容还是比较大的,这周我们来着重学习一下之前学习过的内容在2018.3中的重大更新。今天我们看一下地形系统有哪些惊喜的变化。”

d794dccfe448fd11ef88b0022a21ce5b.png

地形系统的更新主要功能包括:

  • 多地形块的支持
  • 新的地形资产类型
  • 新的地形画刷
  • 新的地形绘制工具
  • 性能大幅提升,充分利用GPU
  • 开放地形API接口

下面我们一起来逐一研究一下具体的变化吧!

地形更新2018.3

Unity2018.3包含了地形系统的较多更新,主要体现在性能和易用性方面。

地形系统改进了制作地形的工具,在性能方面可以更充分地利用GPU。增加了HDRP和LWRP的支持,也兼容了内置渲染管线和现有的地形系统。

可以看出Unity在大地形方面已经有所布局,这次更新只是第一步。

多地形支持

现在Unity对多个地形块的支持更友好了。可以管理相邻地形的连接,然后可以跨地形无缝绘制,这在之前需要自己写脚本才能实现。

现在可以通过Create Neighbor Terrain工具快速扩展相邻地形块。

e15116ca64dc1a332e1c427acc1f70a2.gif
快速创建相邻地形块.gif

勾选Terrain Settings中的‘Auto connect’,地形会自动和相邻地形连接,使用相同的分组ID。这样在进行地形绘制时,可以跨地形无缝绘制。

dbbcc0d8edc5814e30c50de8f2d03a76.png

新的地形资产类型

现在新增了两种和地形相关的资产类型,可以简化工作流,分别是TerrainLayer和Brush资产。

TerrainLayer

TerrainLayer来源于原地形系统对应的地形纹理材质,但是原来不同地形之间的地形纹理材质不能通用,需要手动添加。通过独立资产的方式可以让你独立于地形来定义地形材质,这样你可以在不同的地形之间复用这些材质,修改起来也更方便。

d615f7567637a89f0ce70979cac04ded.gif
添加TerrainLayer.gif

经过上面添加后,会在工程中多一个NewLayer的资产,可以对这个资产进行重命名、移动、编辑修改。在其他地形中也可以直接复用这个材质。

bdf9d30dfafbcb3caf821defbddbbafa.png

Brush画刷

画刷资产代表了用于绘制和雕刻地形的GPU画刷形状。现在可以自定义画刷,包含自定义纹理以及参数,更好地调整画刷形状。

参数包含:

  • Falloff 衰减曲线
  • Radius Scale 半径尺寸

f826a6130a2f43b576a7f8aa07bfb358.gif
Brush资产.gif

同时你也能看到,现在画刷会有一个预览效果,这也是得益于画刷操作现在运行在GPU上,速度更快。

支持R16纹理

Unity现在支持R16格式的画刷纹理(一个通道有16bit,传统的纹理一个通道8bit)。这种类型的纹理会带来什么好处呢?

传统8bit的纹理能表示的数值范围比较小,在地形上可能会出现“阶梯”状的不平滑的效果。

而16bit的纹理表示的数值范围比8bit大得多,可以让地形更平滑。

98f4d1eaa762d9cfb8a659b26630710c.png


8位笔刷标记产生的“阶梯”瑕疵(上)和16位笔刷标记的效果(下)

新的地形绘制工具

新的地形绘制工具没有直接包含在引擎中,你需要手动导入到Unity中使用。
下载地址:https://github.com/Unity-Technologies/TerrainToolSamples

安装方法:
1、下载Github的版本库,可以下载.zip或clone代码(如果不知道怎么操作,可以回去复习147课Github相关的操作哦)
2、将Editor和Shaders文件夹复制到工程中(需要Unity2018.3或之后的版本)
3、编译后你就能在地形工具中看到这些小工具了。

dbbb13b593884fcdd8ecbca5aeefa302.png
如果你在下面使用工具时发现没有效果,注意确认一下画刷的Opacity属性是不是太小了。

Utility(工具)

dbbb13b593884fcdd8ecbca5aeefa302.png

Bridge 建桥工具

这个工具可以让两个点之间变成平面

  1. 在起点Shift加点击
  2. 在终点左键点击,两次点击中间的区域就根据画刷的形状变平整

同时这个工具也给出了一些参数,你可以实践研究下这些参数的作用。

b4554a1062f3771287457c59bafcc4ef.gif
Bridge工具.gif

Clone 克隆工具

这个工具可以让一个点复制另外一个点

  1. 在被克隆点左Ctrl加点击
  2. 在克隆点左键点击,克隆点就会呈现和被克隆点一致的地形信息

0f55a34c7787bbf9b578382e89ec1089.png


可以选择克隆的信息:地形起伏、贴图

253a783b5ad99baddf0bc438f59aea8a.gif
克隆画刷.gif

Mesh 网格工具

这个工具可以让你根据网格的形状修改地形的起伏。

  • 左键点击来根据mesh抬升地形
  • Ctrl + 左键点击根据mesh降低地形
  • 按住Shift可以对网格进行旋转、缩放和位置修改。

a29bfe89b9209a1c34a65e7aa1f4201c.gif
Mesh工具

Sharpen

这个工具可以让地形变得更陡峭。

dd9a7d0da5db88a3a4b80cc6531b50e1.png

Slope Flaten Height

做平滑地形的同时保持原来一定的坡度。

8529940ecb3b4563b832a74fc983e462.gif
Slope Flatten Height.gif

Erosion 侵蚀

顾名思义,就是在地形上做出侵蚀的效果。

cd66e61fe845a91f20d8de3cf4549c7d.png
图片来源:百度百科

Erode Height (Simple) 侵蚀高度

这个工具的作用是:在地形上点击左键,画刷区域的最高点不变,其他区域会变低,增大了落差。

e0fc345633232801d9ede422ab9cc23c.gif
侵蚀高度.gif

Ridging Erosion 成脊侵蚀

成脊侵蚀是什么意思呢?就是将地形侵蚀成一个山脊。看下面的图可能会更直观。

371a44a8d8209cde86f3a01e59b55e2e.gif
成脊侵蚀.gif

Terrace Erosion 梯田侵蚀

将地形侵蚀为梯田状。

其中有两个参数:

  • Terrace Count:梯田的阶数。这个数值越大,两个阶梯之间的高度差会越小。
  • Interior Corner Weight:阶梯内部保留原来高度的权重,这个需要你自行体验,看看这个属性不同数值的差异。

999b573b39de606b50c8f6de09e3776d.gif
梯田侵蚀,是不是很有像素风

Transform

Pinch Height 挤压高度

f574f20a38e6bf674286d730165e43a2.png
挤压(图片来源:有道词典)
  • 左键点击进行挤压(有点像成脊侵蚀)
  • Shift+左键点击进行膨胀(挤压的反向操作)

9c4e113bdb5de78de2491ed0e0a5a85f.gif
挤压高度.gif

Smudge Height 涂抹高度

你可以想象拿着一个画刷在一个画布上随意涂抹的效果。

1c32edd64356261ab462673e96bc9438.gif
涂抹高度.gif

Twist Height 扭曲高度

Twist我们在之前的Shadergraph课中见过,是扭曲的意思。

这个工具需要在高度有落差的地方使用,可以形成旋涡状的扭曲。

36be0c3dabeef1d67e33adc22333dd82.gif
扭曲高度.gif

性能方面

Unity为地形增加了GPU-instanced的渲染路径。在大多数情况下,GPU实例化可以显著减少draw call的数量。经过测试,大多数情况可以减少超过50%的CPU消耗(实际情况取决于运行的平台和使用场景)。

7d38d6069df54ac065a5c27b4e086ce5.png


开启方法如图所示

启用后,Unity会将所有大型地形数据,比如高度图和splat贴图等转换为GPU上的纹理。Unity会使用GPU实例化来复制单个网格、采样高度图纹理来生成正确的几何体,而不是使用传统的方法在CPU上为每个地形块生成网格。CPU的负载会有数量级的降低,因为几个实例化draw call就可以替代上千个自定义网格绘制。

同时呢,还可以改善加载时间。为什么能改善加载时间呢?现在Unity可以用GPU来构建basemap(预混合的LOD贴图),就不用预先构建占用存储空间了。GPU非常擅长这种事,速度很快。这也意味着,如果你要写自定义的地形shader,现在可以重写'build basemap'的shader并且生成匹配的basemap LOD贴图。

可编程的GPU工具

在编辑器中,Unity现在开放了地形的编程接口,你可以编写自己的地形工具,在GPU上实现跨地形块的无缝拼接、起伏雕刻和纹理绘制。

API包括:

  • TerrainPaintTool<T0>,一个地形工具的基础类
  • TerrainPaintUtility,包含修改地形数据的工具方法

Unity也将现有的地形工具都转到了GPU上进行运算。除了使用这些工具更流畅,也提供了更大的画刷尺寸,更好地画刷预览以及可以跨地形块的地形绘制(自动无缝拼接)。

总结

大智:“相信这些地形的更新会给地形带来很多增强,不管是在制作过程还是运行过程的性能。”

今日思考题

大智:“制作一个地形试试吧,看看新的地形能给你带来什么?”
小新:“好嘞!”
大智:“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”


洪流学堂公众号回复专栏,查看更多专栏文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值