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

Posted 清清!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Building Worlds In Unreal 学习笔记——03-06 地形贴图/地形材质/修正重复/近景位移相关的知识,希望对你有一定的参考价值。

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

本系列学习资料来源,Ben Cloward大佬以及B站的搬运翻译

Lec03 地形贴图 Landscape Textures

推荐一个PureRef的软件用来保存参考图

注意到参考图中,溪流有断层的流水,边缘比较平缓的斜而不是陡峭,对之前的河床修改了一下

接下来,我们需要一些贴图,这是一些参考图,表示了我们可能使用的材质

1 Quixel Bridge安装、贴图下载导入

对于材质的获取,在UE中可以免费使用Quixel的材质,我们使用一下Bridge

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 地形贴图/地形材质/修正重复/近景位移

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

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