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

  • Lec03 地形贴图 Landscape Textures
    • 1 Quixel Bridge安装、贴图下载导入
    • 2 SD进行贴图合并
    • 3 贴图压缩方式、拆分通道材质函数
  • Lec04 地形贴图 Landscape Materials
    • 1 地形材质函数:单独→整体
    • 2 绘制地形材质
  • Lec05 修正重复 Fixing Landscape Tiling
    • 1 旋转——解决近处
    • 2 再次放大采样——解决远处①
    • 3 多次平铺混合——解决远处②
    • 3-1 材质函数封装
    • 4 全局纹理
  • Lec06 近景位移贴图 Landscape Displacement
    • 1 根据相机远近细分
    • 2 实例调整

本系列学习资料来源,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 地形贴图/地形材质/修正重复/近景位移相关推荐

  1. Building Worlds In Unreal 学习笔记——07-11 岩石树落木灌木绘制/溪水着色器/潮湿与焦散贴花/后处理

    Building Worlds In Unreal 学习笔记--07-11 岩石树落木灌木绘制/溪水着色器/潮湿与焦散贴花/后处理 Lec07 岩石与树 Rocks and Trees 1 Folia ...

  2. Building Worlds In Unreal 学习笔记——24-28 UE4.26的河流系统/自动河床材质/浮力/交互水面

    Building Worlds In Unreal 学习笔记--24-28 UE4.26的河流系统/自动河床材质/浮力/交互水面 Lec24 用UE4.26的水来做一条河 River Water wi ...

  3. python学习笔记 -- 03 实现切割九图

    废话 朋友问我能不能搞个九图切割的小软件,我就着手搞了 不过这次注释我会用英文写 九图切割 一.需求 选择图片路径 裁剪图片成九张 保存裁剪的九张图片 二.步骤分析 选择图片 打开图片 裁剪图片 保存 ...

  4. JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  5. MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. JavaScript学习笔记03【基础——对象(RegExp、Global)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  7. MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])

    MySQL 8--学习笔记03(插入.更新.删除 数据 [DML语句]) 一.插入数据 1.1 插入所有字段.插入部分字段 1.2 同时插入多条记录(批量插入) 1.3 将查询结果插入到表中 二.更新 ...

  8. JavaEE——Spring学习笔记03【AOP开发】

    JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...

  9. Git 的安装与初次使用 —— Git 学习笔记 03

    Git 的安装与初次使用 -- Git 学习笔记 03 Git 的安装与初次使用 -- Git 学习笔记 03 安装 Git 在 Linux 上安装 在 Windows 上安装 初次运行 Git 前的 ...

最新文章

  1. Linux drm显示系统的两种方案
  2. JDBC登录功能实现
  3. Selenium WebDriver + python 自动化测试框架
  4. 计算机科学1pdf,计算机科学导论1.pdf
  5. h5禁用浏览器下载视频_Flash正式被全球禁用,只有中国版还活着
  6. BZOJ 3289 Mato的文件管理(莫队+树状数组)
  7. 持续集成之 Jenkins+Gitlab 打包发布程序到 Tomcat(二)
  8. 使用计算机报点系统时填记,子案例库接发列车工作-企业生产实际教学案例库...
  9. string-indexOf、substring、split
  10. 群晖安装pip3 模块并启用http server |NS DBI HOMESERVER
  11. 计算机网络选择公用还是家庭,如何设置打印机共享?
  12. java毕业设计总结
  13. Linux通过windows代理上网配置方式
  14. Python计算机视觉实验五——针孔照相机模型
  15. 【C系列】How to printf “unsigned long” in C?
  16. Android批量打包
  17. web资源分享(视频、资料)
  18. 将大文本文件分割成多个小文件
  19. jquery.countdown.js一个时间倒计时的插件
  20. 小白成为大数据工程师 需掌握哪些知识技能

热门文章

  1. 《缠中说禅108课》11:不会W,无以GC
  2. 魔方爱好者快来康康,困难的平面魔方来了!
  3. minecraft python好玩的建筑_你对Minecraft建筑及地形作者的看法是怎么样的?
  4. 实战篇——变频风机恒压控制(非PID)
  5. 【JAVA开发环境配置】 卸载JDK很简单, 一分钟帮你搞定!
  6. 大疆无人机视频恢复成功
  7. 魅族m8 java_软件更丰富 魅族M8成功安装JAVA虚拟机
  8. 软考哪个科目比较难?
  9. 计算机工作者,关于电脑工作者的常识
  10. 仿91助手的PC与android手机通讯(1) --- 检测设备插入