Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题
Posted 清清!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题相关的知识,希望对你有一定的参考价值。
Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题
- Lec15 使用真实世界高程 Using Real-World Heightmap Data in Unreal
- Lec16 使用高分辨率的高度图 High Resolution Heightmap Data
- Lec17 地形坡面混合材质 Landscape Slope Blending Material
- Lec18 高级地形自动材质 Advanced Landscape Auto Material
- Lec19 在自动材质上绘制材质 Painting On A Landscape Auto Material
本系列学习资料来源,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进行的贴图处理
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 地形贴图/地形材质/修正重复/近景位移