Building Worlds In Unreal 学习笔记——03-06 地形贴图/地形材质/修正重复/近景位移
Posted 清清!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Building Worlds In Unreal 学习笔记——03-06 地形贴图/地形材质/修正重复/近景位移相关的知识,希望对你有一定的参考价值。
Building Worlds In Unreal 学习笔记——03-06 地形贴图/地形材质/修正重复/近景位移
- Lec03 地形贴图 Landscape Textures
- Lec04 地形贴图 Landscape Materials
- Lec05 修正重复 Fixing Landscape Tiling
- Lec06 近景位移贴图 Landscape Displacement
本系列学习资料来源,Ben Cloward大佬以及B站的搬运翻译
Lec03 地形贴图 Landscape Textures
推荐一个PureRef的软件用来保存参考图
注意到参考图中,溪流有断层的流水,边缘比较平缓的斜而不是陡峭,对之前的河床修改了一下
接下来,我们需要一些贴图,这是一些参考图,表示了我们可能使用的材质
1 Quixel Bridge安装、贴图下载导入
对于材质的获取,在UE中可以免费使用Quixel的材质,我们使用一下Bridge
- 这里列出三个安装教程
Quixel Bridge免费使用指南
在UE4中添加Megascans插件(虚幻引擎)
在Windows上为UE4安装Megascans插件
安装成功会出现这个绿色的插件
- 在Bridge里找到Mossy Creek Stones,设置好下载和导出的图片,需要以下6份
(Cavity 贴图本质上是一个强调特别微小细节的灰度贴图,它会将模型的裂缝和细节展现出来)
- 导入UE后会自带一个材质球,和它的贴图,对landscape附上材质球后
近看还行,远看被拉伸的过离谱了,暂时先放着不谈,我们来处理六张图
2 SD进行贴图合并
6张图采样太多了,我们需要处理一下
- 在SD中处理
颜色RGB+粗糙度A—>CR图(color roughness)
法线RG+AO和cavity在blend里multiply占B+高度图存到A(NOH图,normal AO Height)
都存成TGA
导出成功
3 贴图压缩方式、拆分通道材质函数
注意法线那副图在UE里的压缩方式,因为只有两个通道是法线,所以不选择法线的压缩方式
也正是因为这样,我们要自己把法线图前俩通道的0-1变换到-1到1
接下来尝试分开这几个合并的图,做个小的测试材质试试
-
AO通常不用黑的值,所以黑的裁掉点也没事
-
AO和cavity部分用到这个节点去把它们分开,增大对比度,得到cavity图,乘上0.5充当镜面值
我们希望把拆分通道的方法做成函数,因为我们不是只处理这么一个石头的贴图,所有的贴图我们都想这么处理
构建材质函数
测试用法如下,height那个地方留着以后用
其他的贴图照样的操作
我们下载了这些材质的图,然后都变成cr和noh图
- 依次是
River Stones,Forest Roots 2x2 M,Mossy Ground,
Forest Ground,River Bank Rocks 2x2 M,
Stony Forest Ground(下载完名字变成了Moist Stone Surface)
以及最初的Mossy Creek Stones - 把这些材质的贴图都合并成CR图和NOH图
Lec04 地形贴图 Landscape Materials
1 地形材质函数:单独→整体
在上一节,我们建立了这么一个纹理解包的测试材质
但是每个纹理都会用到纹理解包,所以我们创建这么一个材质函数方便使用
- 使用世界位置投影,除以一个系数,通过该系数可以控制贴图的大小或者tilling的倍数
- CR和NOH后面的near是下节要讨论的内容,控制远近的纹理目前暂时放着
对于每一个种类的纹理,我们都可以进行其独特的设置
所以我们再次为每个纹理单独设置材质函数
- River Stones为例,首先插入CR和NOH,然后设置缩放值,其他材质同理设置,一样的连法
- 一般quixel上下载的材质,都是用于1m*1m的
我们设置了83的NearUVScale,通过这个值可以控制纹理的tilling,该值是地形上显示的厘米数 - 每种材质的这个NearUVScale我们可以都设置的不一样
设置不一样之后,他们的tilling就不容易排列对齐到一起
并且我们可以把这个数设置成质数,这样他们无法被整除更加不会tiiling对齐到一起了 - 比如我们给Creek Mossy Stones设置89,Mossy Ground设置127,Moist Stone设置97,Forest Ground设置101,Forest Roots设置241
为了以后再细节调整时更加清爽,所以我们需要单独设置
在单独设置好后,我们把他们结合起来,到一个整体的地形的材质上
- 设置LayerBlend,河床是AlphaBlend,其他都是HeightBlend;拆分属性
2 绘制地形材质
应用以后发现场景变黑了,很正常,因为我们没画地形
- 进入Paint模式,发现左边一栏材质,同时我们的鼠标是红的
- 红色是因为我们没有建立Layer,所以点击材质右边的加号,建立权重layer
下面就要进入到怎么绘制地形了,这就要用到参考图
- 通过观察,我们得到一些结果
- 水底往往只有岩石,边缘可以有些Mossy石头,再边上可以有泥土
随意画画,得到丑丑的地形结果
Lec05 修正重复 Fixing Landscape Tiling
上节我们学习了如何将各种材料组合在一起来创造地形,虽然近处能看到细致的纹理,但是它们远了真的不太好看,很重复,非常不自然
在本节中,我们会研究四个技巧,在近处去打破纹理的简单tilling,在中程和远处,按顺序打破它们的简单tilling
根据项目需要,这些技巧在使用时不用全部都用上,可以用其中一两个
- 为了凸显效果,我们先使用一个简单的材质作为基底
1 旋转——解决近处
第一种技术是一种旋转技术,我们采样两次纹理
不过第二次采样的缩放比例有所不同,并且我们会把它转90度
- 这里用到一张mask,用PS的绘制云功能即可绘制
- 将base color连到mask上看看效果
在黑色区域是正常的材质,在白色区域,我们会有旋转了90度并缩放的纹理
我们看看效果如何
- 可以看到有更多的混乱模式,而不是一行一列的的简单重复
远方仍然是简单的tilling,但是近处是更好看的
我们还要把我们的Normal改回来,因为UV变化了,Normal采样就错位了
- 我们把NOH的前面俩通道换一下
2 再次放大采样——解决远处①
解决远处的有一种方法,就是采样相同的贴图,在远处以更大的纹理坐标再次采样
- CamraDepthFade节点作为插值依据,输出物体表面深度和摄影机近平面之间的差,其值在0-1范围内
Fade Distance在视图坐标中定义0和1之间的淡入淡出值应出现的距离
Fade Offest定义视图坐标到相机近平面的偏移量,也就是0-1渐变要开始的地方
远方的纹理变的更大了
- 动图如下
但是这个技术简单的打破了tilling,并且没有消耗额外的纹理内存
但它混淆了我们的规模,我们的贴图是为了1米范围的大小正确,放大采样的倍数让贴图不太真实
3 多次平铺混合——解决远处②
单纯在远处采样相同的纹理会不好看,所以我们把远处的纹理做一下处理
我们会在SD中用到这个节点
- 节点说明
我们要给所有的贴图都用到这个节点,所以需要几个函数
- (关于Ben佬本节提供的sd的文件,在sd2020的版本打开报错丢数据,怎么调都弄不出,所以去下了sd的2018版)
- 整体贴图操作步骤如下(远处的纹理就不需要4K大小了,所以用了1K的分辨率输出)
- CR和NOH的函数如下(blend用multiply)
- 多采样如下
- 也就是每组都多了这俩图
对测试材质使用效果如下
-
更改如下
-
使用前
-
使用后,感觉重复感确实变少了
3-1 材质函数封装
在这么做之前,我们把我们的简单的测试材质,翻译成材质函数,这样方便运用到我们之前绘制的多层地形上。
我们修改MF_LandScape_Mat,这个所有材质都会用到的底层函数。
- 修改结果如图(屏幕太小截不下,就截了Ben佬视频的图),后面放自己的注释图
- 注释图1
- 注释图2
- (注意!此时MF_LandScape_Mat其中所有的Texture Sample记得改成Shared:Warp模式)
此时回到各个材质,设置参数
- 参数示例,根据自己的实际情况设置,或者去Ben佬的视频里看看他的参数好不好用
感觉是好了一些
4 全局纹理
在整体上我们再加一个全局纹理去扰动,将0-1的颜色应用到整个地图上,示例如下
(下面会补充完整)
- 这张纹理长这样,基色是灰色0.5,可以自己从上到下看场景,根据场景绘制红绿蓝
我们将其应用到地图的base color上看看颜色
是随机的颜色噪声
- 补充完整是这样
参数解释一下
因为地图的XY是25200,所以是除以50400,因为UE4的UV默认在中间,所以加0.5把UV移到角落
因为基色是0.5,所以我们减去0.5后,0到1 变成了 -0.5到0.5 ,这样加上原本地图的颜色,就可以控制地形上的明暗
效果长这样,整个地图加了些微妙的颜色变化
Lec06 近景位移贴图 Landscape Displacement
上节我们摆脱了tilling过于单调的问题,这节我们来解决表面太平的问题
我们确实用了normal map,但是看着就是蛮平的,原因是我们的线框不够细节
- 如图
所以为了修复这点,我们要做两件事,一件事是把靠近相机的三角形细分开来,另一件事是根据高度图偏移顶点
首先选择地形材质的根节点,选择平滑细分
而后进行操作
1 根据相机远近细分
将其插入base color
再将其插入细分倍数
接着来控制顶点的位移和方向
根据高度图进行位移,大于0.5则向上移,小于0.5向下移
- 我们以河床的石头作为例子
根据高度图,从插值基本偏移量,乘以之前的遮罩软化,再乘以法线方向
我们将产生细分倍数和位移的这些功能节点,转换为材质函数
使用材质函数,在各层之间混合
这不是一个便宜的技术,消耗相当大,但是效果相当好,可以给中高端PC使用
如果是中低端机器或者移动设备,不需要用这种高消耗的曲面细分(笔记本带不动细分了谔谔啊啊啊(草,后面发现是体积云没关掉,hxd们建议关了体积云
2 实例调整
上述的函数比较粗糙,并且每次改动数值都要编译一遍着色器,比较痛苦
我们进行如下调整,首先调整一下位移的函数,给它参数化
创建地形的材质实例进行调整
以上是关于Building Worlds In Unreal 学习笔记——03-06 地形贴图/地形材质/修正重复/近景位移的主要内容,如果未能解决你的问题,请参考以下文章
Building Worlds In Unreal 学习笔记——29-30 水坑与涟漪
Building Worlds In Unreal 学习笔记——01-02 概览与引入
Building Worlds In Unreal 学习笔记——12-14 瀑布/雾与光/总结与展望
Building Worlds In Unreal 学习笔记——03-06 地形贴图/地形材质/修正重复/近景位移