Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题

Posted 清清!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题相关的知识,希望对你有一定的参考价值。

Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题

本系列学习资料来源,Ben Cloward的油管空间,B站的搬运翻译

Lec15 使用真实世界高程 Using Real-World Heightmap Data in Unreal

此前我们都是手工雕刻地形,其实也可以使用地球上的数据构造地形
但是并没有一键导入的方案,期间需要经历一些过程:拿到数据源,格式化,导入UE。

在本节学习三个简单的小工具,在虚幻中获取真实世界的高程

不过在这之前,先看看UE需要什么样格式的Height Map

1 UE4所需的Height Map格式

可以在虚幻官方文档中找到
创建和使用自定义高度图和图层
地形技术指南

  • 高度图格式如下
  • 高度图大小可以类比地形的“整体大小”这一栏
  • 同时注意,虚幻的密度是1 vertex(pixel) per meter,所以8192的大小,也就是8平方公里的土地
  • 我们可以使用World Composition来创建大于8192大小的地图,这个以后再说

清楚格式以后,我们要做的是在世界地图上找一个小于8平方公里的土地,然后获取那块土地的高度图,导入UE

2 工具1——用谷歌地球寻找位置

百度查一查就能下载到

我们可以利用它快速找到想要找到的地点,比如这个亚利桑那州大峡谷国家公园

  • 远看是2D,近看是3D

我们可以通过谷歌地球很快找到自己想要的位置,粗略的浏览地貌的样子

可惜谷歌地球不能下载高度数据,所以它也只是用来找位置用

为了下载高度图,我们使用接下来这个工具

3 工具2——Terrain.party下载高度图

terrain.party是一个网站,复制到搜索框即可进入

  • 进去以后长这样,它有一个蓝框框用来自定义要下载的地形的位置在哪里
  • 找到刚才那个大峡谷国家公园

    调整右边的加减,可以调到8km
  • 也有一些不同的视图选择
  • 点击下载即可下载数据

然而这网站似乎时不时抽风,谷歌查了下似乎是个普遍的的情况

看Ben佬之后的视频也没有真的用到这个网站
本节似乎只是个引入,下节会真正导入细节的高度图,那就先这样算了……

Lec16 使用高分辨率的高度图 High Resolution Heightmap Data

之前Terrain.party下载的高度图分辨率比较低,一个像素8m,不太适合UE里

我们还是需要一个像素1m的分辨率的高度图

1 opentopography获取高分辨率的高度图

opentopography这个网站可以免费下载世界上地理位置的高度图

有红蓝绿的不同数据,红色的数据是免费的,所以我们找红色的区域

  • 找到这个山脉

  • 可是这个网站并不能知道这个范围大概有多大,所以还是打开Terrain.party确定一下8KM的范围

  • 点击左边的select,选择了这么一个区域

下载参数像这样

  • 我们不需要雪,可以自己加,所以选择了第二项的Raster

    而后设置下载参数


    可以下载

    下载完压缩包里有一个tif,接下来去处理这个图片让UE能用(16位的灰度图)

2 TerreSculptor处理高度图格式

这里下载TerreSculptor来处理之前下的高度图

  • 导入

  • 导入完看起来很平
  • 可以修改显示方式
  • 设置一下
  • 重采样给UE的格式


  • 可以更改显示方式看看效果
  • 导出保存为png格式,16位的灰度图

3 导入UE

右上角File→New→NewLevel→TimeOfDay

导入,看着很平滑

把ZScale设置高一点

Lec17 地形坡面混合材质 Landscape Slope Blending Material

Ben佬最开始为了地形更加精致,把地形Resize一下
(然而破笔记本内存不够Resize的过程带不动!!!跳过了)

但是查看本节视频的评论,似乎ben佬也转换回8K大小的地图,并且也关闭细分了,那无所谓了

lod设置一下

1 Bridge下载贴图/SD处理格式

去Bridge里下了两个材质,一个是岩石一个是雪,编号是tdloaf1r​和ukticbcdy​

  • 下载参数如下

继续该系列前几节用SD进行的贴图处理

  • 导出成CR和NOH图(详见Lec03
    节点就这样,blend用相乘,意会一下CR和NOH是哪几幅图
  • 然后导出8m用的图,见Lec05的3

2 基础材质

导入进UE时,要注意NOH图要选择BC7压缩和不勾选SRGB

然后为雪和岩石创建材质函数(这个材质函数的写法是前面小场景课的结果,可以回顾看看Lec04和Lec05)
参数可以注意是质数,减少重复

  • 雪的参数如下
  • 岩石的参数如下,因为岩石的纹理是20m的,所以near的几个参数都是20m左右

3 斜度自动材质

3.1 基础版

首先简单的用法线的Z通道来判断个范围加个锐化


但是我们看到这个顶点法线的Z的渐变过于平滑了,本来应该是雪和岩石穿插在一起

3.2 像素法线边缘混合

下面处理一下平滑的边缘

  • 之前顶点法线比较平滑,那看看像素法线怎么样
    单纯看看岩石的像素法线的效果

  • 发现只用像素法线这又过于细碎了,所以把顶点法线和像素法线结合一下,硬编码一个值进行lerp


    比较不错
  • 但是当我们想直接用这个mask的时候

    它报错了,原因是我们试着用像素法线去输出像素法线,循环起来了,所以我们不能使用自带的这个Blend节点
    但是我们可以调整,我们可以只在混合法线时使用顶点法线,混合其他时使用这个mask,这样就需要自己搞一个自定义的混合的函数

3.3 自定义边缘混合

自定义混合我们写一个材质函数

  • 首先我们找到这个函数节点
  • 点击查找,找到它的文件位置,然后复制粘贴到自己的文件夹
  • 做如下改动,把原来的输入Alpha改成AlphaPixel,在法线的lerp中断开它
    同时多一个输入AlphaVertex连到法线处,然后多一对高度的输入,也是用AlphaVertex来lerp并输出

然后回到我们的材质

积雪和岩石混合的比较好了

我们看到混合的这个功能其实mask和顶点,相当多的连线是重复的,所以做一个材质函数更美观

  • 混合的材质函数如下

然后回到我们的材质,加上之前Lec06做的位移

Lec18 高级地形自动材质 Advanced Landscape Auto Material

本节要使用高度混合以及角度混合实现一个高级的自动材质。

1 下载贴图处理/基本材质函数

去本节的油管简介里可以获得贴图在Brdige里的编号(这次多了ujldajxdy​和pjwky20​)。

下载各自的六种纹理,合并CR和NOH图,NOH记得BC7编码取消SRGB,这些都是惯用操作就一笔带过了(可以在之前的场景教程里看看怎么处理CR和NOH的贴图)。

  • 创建三个材质函数(有一个是之前场景课用过的)


2 在材质中混合角度与高度

创建好后,我们要开始改我们的shader了
角度混合——对于草地Grass,希望它在地形平坦的地方出现,对于岩石Rock则出现在陡峭的地方
高度混合——对于草地Grass和泥土Dirt,希望它在地势低洼的地方出现,对于石头Stone,岩石Rock则出现在地势高的地方

2.1 创建高度mask

在这里要学习一个新节点

它把min到max范围的X平滑到0-1的范围

我们拿到世界位置的高度,给它在最低点和最高点插值(可以放个空物体进去看看高度)
可以尝试一下连到颜色看看,确实给地形打上了一层mask


再来看看这个mask单独应用纹理的效果(把参数改的接近了一点,为了凸显效果)

2.2 高度Mask叠加过渡

是混合了,但是过渡很光滑,所以我们要用到纹理本身的高度,这里用到一个叠加节点

我们将叠加之后的Height,连到颜色上看看效果

过渡虽然依旧平滑了点,但是有岩石自己的height在了

我们可以进一步加大它的对比度,使用这个节点


效果不错,将它应用到纹理上

还可以

2.3 高度与角度的结合

高度和角度可以结合起来

  • 我们把岩石和泥土也连到这个高度混合上看看


    也还可以
  • 但是我们注意到,如下图只使用高度的话,这个很斜的地方还是泥土,我们希望很斜的地方也能用岩石
  • 于是我们需要用回角度混合,我们调一下参数,将以下节点连到颜色上看看效果

    平坦黑陡峭白
  • 和高度mask结合一下

    可以看到陡峭的地方变成岩石了
  • 和之前的草结合一下

  • 我们可以接着根据不同的海拔高度去插值角度混合的影响
    在低海拔的泥土和草地,我们的混合更多根据像素法线,高海拔更多使用顶点法线

    可以看到混合方式比较好

  • 我们把雪也加进来,雪是最上面的,所以我们又在后面连一个混合
    我们希望当海拔高时,即使是陡峭的山峰也会有雪,海拔低时,雪逐渐消退,只会在路径这样平的地方有雪

    (这时候感觉原本选的地形不太好看,又去换了个和Ben佬尽可能一样的地形图,另外Ben佬似乎把地形Z拉伸了400%)
    效果长这样

3 总结

总的节点图长这样,然后逐个给出分布图,材质函数的话见之前的过程展示

  • 见图


Lec19 在自动材质上绘制材质 Painting On A Landscape Auto Material

虽然用了自动材质,但是如果还是想画一画一些特殊的地方呢
这就要加上绘制的功能

  • 首先整理一下节点图(上节结尾总结已经很具体,这里只是换个位置)

    在最后部分换了个节点,更短

使用LayerBlend

然后高度通过LandScapeSample,层层采样lerp

  • 保存完发现场景全黑没有layer怎么办?

    重新导入材质即可

注意右边的加号,添加一下layer

下面就可以画画了(不过我不想画)

之前的场景课我们是手动做的,之后我们可以学习程序化布置植被草地和植被。

以上是关于Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题的主要内容,如果未能解决你的问题,请参考以下文章

Building Worlds In Unreal 学习笔记——29-30 水坑与涟漪

Building Worlds In Unreal 学习笔记——01-02 概览与引入

Building Worlds In Unreal 学习笔记——12-14 瀑布/雾与光/总结与展望

Building Worlds In Unreal 学习笔记——03-06 地形贴图/地形材质/修正重复/近景位移

Building Worlds In Unreal 学习笔记——31-33 天空与雾气/体积云参数与材质分析

Building Worlds In Unreal 学习笔记——31-33 天空与雾气/体积云参数与材质分析