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

  • Lec07 岩石与树 Rocks and Trees
    • 1 Foliage参数与绘制
    • 2 树木
  • Lec08 落木与灌木 Foliage & Undergrowth
  • Lec 09 溪水着色器 Stream Water Shader
    • 1 泡沫部分
    • 2 深度部分
    • 3 计算水流遮罩与FlowMap
    • 4 渐变映射
    • 5 看一看
  • Lec10 水的潮湿与焦散贴花 Water Decals
  • Lec11 光,反射,后处理 Lighting, Reflections, and Postprocess
    • 1 灯光烘焙
    • 2 反射
    • 3 后处理
    • 4 总览

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

Lec07 岩石与树 Rocks and Trees

回来继续看看参考图
特征,到处都是石头,石头苔藓多

去Bidge找些资产来用,下载这三组

  • 设置如下
    贴图只要Albedo,normal,cavity,roughness
    模型要LOD1 3 4 5 ,导出的LOD1
    下载贴图2K
  • 下载后

参考图里有成千上万的石头,一个个放模型有些难搞,但是我们可以进入这个模式去快速把资产绘制到场景中

  • 绘制岩石

1 Foliage参数与绘制

下面全选所有岩石,说明一下参数

  • 关于剔除距离,如果全选设置一样的值,那么会是这样(我自己都设置4000)

    给每个岩石设置单独的值,有溶解的效果
  • 关闭 cast shadow,因为我们后面要加树木,树木有阴影,就不用石头自己的阴影了
  • 打开 Receives Decals接受贴花;打开Enable Density Scaling,可以进行密度缩放

画一些岩石

2 树木

收集树木资源,搜素open world demo,将其添加到工程(然而这里面的树用不动,经常崩溃,就没用这个)

以及这个demo添加到工程

它的文件导入后,把mesh下面的树拖进去

放几个树

但是这样还是不太真实,我们从来没有用过root来画地图
所以我们来在树底下画一画树根,同时也可以去抬高一下树根的地形

Lec08 落木与灌木 Foliage & Undergrowth

  • 首先查看参考图,确定资产——灌木/大石头/落木等等,而后去Quixel下载(可以下载一些封闭的模型,方便旋转),导入UE测试,通过植物笔刷绘制

  • 参考图中除了之前我们做的要素,还有巨石,落木,灌木,星星点点的草

  • 下载了哪些素材使用可以看油管简介里的链接

下载完列一列

记得给岩石加上碰撞体

  • 一些岩石属性设置

摆些石头


摆几个落下的树干和树根

画草(把草的材质实例里SSS调成绿色,强度调低)

效果如下

Lec 09 溪水着色器 Stream Water Shader

给河流铺上面片,在这上面做水的效果,中间断开的部分要做瀑布,这个以后再说

根节点这么设置


这是面片的水的着色器概览,可以看到蛮复杂的,逐个分解阐述

1 泡沫部分

原理在材质课的Lec28有讲过,可以返回去看之前的记录,下面也做了简述

  • Texture Object是一张泡沫贴图,其三通道包含不同密度的泡沫
    对其使用自带的Motion_4WayChaos材质函数(采样图片四次,每次进行不同的位移,然后叠加起来,造成混乱)
    使用世界坐标位置的XY作为该函数的UV输入
    外置了参数控制缩放,速度,透明度
  • Texture Sample中包含一张渐变图,由黑到白的条状,也是三通道
    使用深度图除以深度参数,使泡沫只出现边缘渐变

2 深度部分

  • 通过相机位置减去世界位置,得到Pixel depth的向量值,乘以比例得到Screen depth的向量值,两个向量相减,拿到Z的差距,也就是深度了
    设置了深度参数和深度衰减参数

3 计算水流遮罩与FlowMap

  • 我们之前在Lec29的FlowMap中,是去绘制了一张贴图,将其作为FlowMap
    但是我们也可以不用贴图,我们这次只想让水流沿着一个方向流动
    于是在下方的UV Coord Masks中,我们“算”了一个的“贴图”

  • UV Coord Masks中
    拿到TexCoord,进行反转后自乘,得到中间是0.25,两边是0的一个纹理坐标"图",将其乘以两个参数,一个控制宽度上的渐变,一个控制首尾的渐变
    看以下示意图,能了解我们在UV Coord Masks里连线做了什么,比较有意思的

    可以看到参数值越大,渐变范围越小
    所以我们用大参数得到的范围当作边缘的渐变mask,小参数得到的范围当做流水方向的mask
    比如(4000,16)就是左右流的水

  • 拿到小参数的方向,乘以外置参数速度,用作FlowMap函数的FlowMap,得到水流中间快两边慢的mask
    并且注意UV缩放,需要配合物件本身的缩放,乘以外置参数缩放,用作FlowMap函数的UV

  • FlowMap材质函数如下图
    利用FlowMap的值作为UV基本量,时间进行Frac当做添加量与FlowMap相乘
    添加量分为两组,间隔0.5
    这样的得到的数值去加上初始的UV,可以得到两组互相间隔的UV
    利用时间构造锯齿波,对两者进行插值,可以得到看似连续不断的水流动画

  • FlowMap的函数过后,将两组UV采样水的法线图,用锯齿波进行插值,进行外置参数的法线平滑,于是可以连到法线上

  • 得到了两组遮罩后,可以利用起来
    R的mask乘以深度渐变,可以得到水流末端的狭小渐变区域,乘以G的mask水流两边的宽宽的渐变,得到一个完整的水的mask,根据该范围,对折射率进行插值,产生折射

4 渐变映射

右边这一坨其实就是利用深度控制水流的渐变色,以及要不要加泡沫
两组Switch,上面一组是处理颜色,要不要加上泡沫颜色
下面一组是根据深度和水流左右的mask产生透明度遮罩,控制河岸可见,以及要不要加泡沫
高光给了恒定的0.3

5 看一看

创建材质实例后,根据自己的场景调整了些参数

效果还不错

Lec10 水的潮湿与焦散贴花 Water Decals

水会让周围变湿和有焦散,我们会使用decal制作
decal的基础知识,可以到材质课的Lec27中查明

  • 首先是湿润的decal
    新建材质,做如下根节点设置,很节省,它不发光,不做纹理查找

    非常简单,椭圆的mask配合一些简单参数,制作这个mask的计算和之前算水流的mask很像
    10000这个值控制了椭圆四个角上的渐变



    我们还没又加上反射探针,所以目前光照效果可能不太好,但是湿润的效果很好

  • 波光焦散的Decal,和之前材质课的Lec27教的一样,只不过调整了些参数

    进行世界坐标投影,保证三个方向都能得到正确的焦散结果
    而后根据一组法线纹理作出扰动,去扰动两组运动速度不同的焦散纹理,而后进行叠加

Lec11 光,反射,后处理 Lighting, Reflections, and Postprocess

1 灯光烘焙

当涉及到室内光,室外日光的场景时,通常会用方向光就行了

方向光我们通常也只会用它的方向,不会移动它(毕竟只是方向,移动也没用)

不过我们需要决定场景是随着时间变化,还是静态场景。

虽然动态光照非常帅,但是有点难做,场景要不断调整怎么样好看,并且也会更加复杂,开销更高。

所以我们基本用方向光

有这么些烘焙方式

  • static light
    static light只有间接光,没有直接光。光照和阴影烘焙到lightmap;static light通过indirect lighting cache Sample Grid(需要有lightmass importance volume)影响动态物体

  • stationary light
    光源位置不变,但颜色和亮度会变。这是stationary light和static light的区别。后者在运行时,什么都不能改变。另外,运行时改变亮度只影响直接光照。因为间接光照是预先用lightmass烘焙的,不会改变。三种光照可移动性的光照中,stationary光照效率最高,中等易变形,中等性能消耗。
    stationary光照的间接光照和阴影都存储在lightmap中;直接阴影存储在Shadowmap中。这些光照用到Distance Field Shadows,也就是说即使光照的物体lightmap分辨率很低,还是会很清晰。

可以选择方向光为静态,在正午和黄昏之间选一个合适的角度,开始烘焙

烘焙完之后,看到阴影都变成大斑点了,失去了很多细节,但是帧数变高了
这是因为我们之前的动态阴影贴图,比我们现在烘焙的静态光照阴影来的精度大
虽然我们增加精度也可以,只是那样要增加材质消耗的内存了

对于我们的例子,我们使用动态光照好看点

2 反射

在阴影处,我们发现石头很奇怪,泛蓝色

因为这块地方的反射是捕捉天空得到的,但是其实阴影里面天空应该是被遮住的,只是我们只用了天空反射
所以我们可以加上反射探针

反射探针捕捉最准确的地方就是在其中心,所以我们可以准备小的探针放在阴影里,放在相机可能经过的高度
也可以放几个大的

3 后处理


有很多选项,这一部分其实可以百度查查资料,了解每一项的设置
关于我们的例子

  • bloom会把HDR的颜色加模糊,阈值设定了HDR颜色到什么范围才开始Bloom

  • 曝光尝试去计算场景的整体亮度,平衡明暗
    max和min是曝光补偿

  • 色差偏移

  • 镜头耀斑,简单设置

  • 景深(为了性能不设置了)

  • 阴影的饱和度也可以调一下

  • 高光也可以调一下

  • 也可以调AO,可以稍微勾勒一点形状

每个部分其实都可以深入,不过经过以上简单调整,效果如下

4 总览


之后是做瀑布,要建模起来了,开始痛苦了QAQ

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

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

    Building Worlds In Unreal 学习笔记--03-06 地形贴图/地形材质/修正重复/近景位移 Lec03 地形贴图 Landscape Textures 1 Quixel Bri ...

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

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

  3. 【EF学习笔记07】----------加载关联表的数据 贪婪加载

    [EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...

  4. Linux第二周学习笔记(11)

    Linux第二周学习笔记(11) 2.17 隐藏权限lsattr_chattr chattr命令:是设置吟唱隐藏权限的命令,更改Linux文件系统上的文件属性. 参数说明: A:表示文件或目录的ati ...

  5. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

    FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...

  6. C# 学习笔记(11)蓝屏小工具

    C# 学习笔记(11)蓝屏小工具 加载界面参考 C# Winform 现代化扁平化启动界面设计https://www.bilibili.com/video/BV17E41147wM PS做一张图 70 ...

  7. JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】

    Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...

  8. MySQL学习笔记07【事务、用户管理和权限管理】

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

  9. 深度学习笔记(11) 超参数调试

    深度学习笔记(11) 超参数调试 1. 选择合适的范围 2. 超参数调试实践 1. 选择合适的范围 关于训练深度最难的事情之一是要处理的参数的数量 学习速率 a 到 Momentum(动量梯度下降法) ...

最新文章

  1. 习题7-6 统计大写辅音字母 (15 分)
  2. java双等号和equals_Java中的 equals和双等号,你懂吗?
  3. 利用svg技术实现在线动画演示
  4. Tungsten Fabric SDN — Service Chain — 高级特性
  5. php 国密 签名,关于php国密SM3签名算法
  6. 判断ROS版本号-ubuntu20.04安装ROS_noetic-修改镜像源
  7. 防止Visual C++应用程序缓冲区溢出
  8. java 循环删除hashmap中的键值对,解决java.util.ConcurrentModificationException报错
  9. SAP License:系统退货处理流程
  10. Apache Flink 不止于计算,数仓架构或兴起新一轮变革
  11. c4d python技巧_还在Bug不断?不妨试试Python中的这2个装__技巧
  12. 股票量化实盘交易接口如何做回测?
  13. LeetCode知识点总结 - 1179
  14. LeetCode刷题笔记——(8/17 - 8/27)
  15. 客户画像赋能百度推广生态实践
  16. Cesium中的相机—旋转矩阵
  17. 修改域服务器同步时间,配置Windows Server 2008 R2 域控制器的时间同步
  18. boot中jar包部署的方式读取classes下的文件
  19. in-place运算总结
  20. 国内代码托管平台gitee的使用

热门文章

  1. 分析1996~2015年人口数据特征间的关系并分析1996~2015年人口数据各个特征的分布分散状况
  2. cv2 在图片上画线
  3. 基于javaweb的宠物店管理系统(java+jsp+javascript+bootstrap+mysql)
  4. Unity粒子系统基本
  5. 程序员转型IT讲师的优势
  6. 什么是淘宝私域流量?和公域流量流量有何区别?
  7. “蓝色巨人”转向,极氪会是吉利的一剂“良药”吗?
  8. android--------Android Studio常见问题以及解决方式
  9. 我的世界服务器兑换系统怎么做,Minecraft我的世界村民交易方法及兑换表格
  10. dsp 中DATA_SECTION用法