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

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


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

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

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

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

地形更新2018.3

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

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

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

多地形支持

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

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

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

新的地形资产类型

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

TerrainLayer

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

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

Brush画刷

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

参数包含:

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

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

支持R16纹理

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

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

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

新的地形绘制工具

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

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

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

Utility(工具)

Bridge 建桥工具

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

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

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

Clone 克隆工具

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

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

Mesh 网格工具

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

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

Sharpen

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

Slope Flaten Height

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

Erosion 侵蚀

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

Erode Height (Simple) 侵蚀高度

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

Ridging Erosion 成脊侵蚀

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

Terrace Erosion 梯田侵蚀

将地形侵蚀为梯田状。

其中有两个参数:

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

Transform

Pinch Height 挤压高度

  • 左键点击进行挤压(有点像成脊侵蚀)
  • Shift+左键点击进行膨胀(挤压的反向操作)

Smudge Height 涂抹高度

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

Twist Height 扭曲高度

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

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

性能方面

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

启用后,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,一个地形工具的基础类
  • TerrainPaintUtility,包含修改地形数据的工具方法

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

总结

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

今日思考题

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


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

《大话Unity2018》,大智带小新学Unity2018的有趣经历,让你学Unity更简单。
所有订阅《大话Unity2018》的用户,可在《大话Unity2019》上线时获得1元换购资格。

[专栏精选]2018.3地形更新详解相关推荐

  1. Maven精选系列--三种仓库详解

    转载自 Maven精选系列--三种仓库详解 仓库分类 1.本地仓库 本地仓库就是开发者本地已经下载下来的或者自己打包所有jar包的依赖仓库,本地仓库路径配置在maven对应的conf/settings ...

  2. [Unity2018.2]ShaderGraph更新详解

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 洪流学堂公众号回复节点,获取ShaderGraph节点详解PDF文件(带目录). ShaderGraph 2018.2 更新详解 在2018.1 ...

  3. 侍魂胧月传说服务器维护,侍魂胧月传说手游2021年6月2日停机维护更新详解

    在侍魂胧月传说手游中2021年6月2日更新了哪些有趣的内容呢?想了解2021年6月2日更新情况如何的话,接下来就让我们一起来看一下吧! 侍魂胧月传说手游2021年6月2日停机维护更新详解 <侍魂 ...

  4. fofa自动化爬虫脚本更新+详解

    fofa自动化爬虫脚本更新+详解 起因 最近要用到fofa爬虫,为什么要用爬虫不用api,问就是穷,想起来之前写过一个相关的脚本:Fofa-python-脚本,是很久以前写的了,之前写的时候有点问题, ...

  5. STM32应用IAP进行程序更新详解及实例

      这是以前就想写的一个小专题关于IAP,以及IAP在STM32编程的应用,专题分三小节,主要介绍常见的单片机烧录方式,IAP的实际应用,以及Ymodem协议在IAP编程中应用,在笔记吃灰很久了,终于 ...

  6. mysql视图的更新 条件_mysql中视图更新详解

    视图的可更新性与视图中查询的定义是有关的 一.mysql中那些试图使不可更新的?以下类型的视图是不可更新的 1.包含以下关键字的sql语句:聚合函数(sum.min.max.count).distin ...

  7. Android热更新详解

    一 前言介绍 正好最近又看到热更新,对以前Android 热修复核心原理:ClassLoader类加载机制做了点补充. 从16年开始开始,热修复技术开始在安卓界流行,它以classloader类加载机 ...

  8. 涉及子模块_COMSOL Multiphysics 5.6 RF模块更新详解

    业界领先的多物理场仿真.App 设计与部署的软件解决方案提供商COMSOL 公司发布了全新的COMSOL Multiphysics® 软件5.6 版本.新版本为多核和集群计算提供了计算速度更快且内存需 ...

  9. 软考之信息系统运行管理员(包含2006、2018历年真题详解+课本教材讲义)

    软考-信息系统运行管理员2006以及2018历年考试真题以及详细答案(试题和答案分离的哦),这个科目是冷门的科目,就06年和18年开考过,所以资料很少的.但只要把课本教材看几遍,我觉得很容易通过考试. ...

最新文章

  1. AI十年进阶:一段算法能力演进的历史
  2. python中with学习
  3. 在android中监听呼出电话(电话拦截、修改呼出电话)
  4. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
  5. 中国互联网企业综合实力研究报告(2020)
  6. php跳过代码,PHP利用continue实现跳过本次循环中剩余代码的注意点
  7. Linux虚拟化:Virtio: 一个 I/O 虚拟化框架
  8. Day10 sambaNFS(Enginner04)
  9. linux中mysql群集_阅读无群集可用性组中的Scale可用性组
  10. Virtual Box下配置Host-Only联网方式详解
  11. Stream篇(2)【TextReader】
  12. 报表统计(六) 访问数据库
  13. 如何给IDC_STATIC关联成员变量
  14. 免费内网映射外网绑定,tcp端口转发(windows)
  15. 令人疑惑的defaultValueAttribute
  16. hp linux还原系统还原,酷越一键备份还原 惠普电脑系统还原
  17. R语言检测异常值的几个案例
  18. 新手上路参考驾驶手册 36计教你安全上路(收集)
  19. 启动jupyter notebook 报错:ImportError:DLL load failed,找不到指定模块的解决办法
  20. 第一章图像处理基础概念(人眼和光)

热门文章

  1. asp.net试题(三)
  2. 能玩游戏的计算机名字,没有手机和电脑时,孩子们最喜欢的游戏,简单却能玩上一整天!...
  3. mysql主从安装_MySQL主从详细安装步骤
  4. 知云文献翻译打不开_比有道更好用的英文文献阅读翻译神器免费啦
  5. 彩色烟雾一直是许多摄影师和摄影爱好者的首选武器
  6. 设计师必备灵感网站,优秀作品聚集在集设
  7. 冬天来了,温暖甜品热饮海报设计psd模板,勾住你的胃!
  8. 色彩丰富的水彩纹理背景,配合排版和简单的设计元素,给任何设计带来乐趣。
  9. 矢量算法java,矢量线的一种栅格化算法
  10. 终端进入网页_华为云进入IDC MarketScape终端安全检测与响应市场领导者象限