UE5 Shader基础学习笔记——13-20 DetailNormal/Smoothstep/Length/CeilFloorRound/DDXDDY/SinCos/Power

本系列学习资料来源,Ben Cloward的油管空间,本笔记主要对其中UE的部分进行记录

Lec13 Detail Normal Mapping

使用Quixel的一个岩石资产(PkeeM)作为演示,拉太近之后纹理会比较模糊
在这里插入图片描述
可以使用Detail Normal增加细节,所谓Detail Normal就是再拿一张法线纹理,平铺很多次,进行法线混合覆盖在上面

Ben在视频中使用的DetailNormal如下,RG是法线,B是粗糙度,A是用于颜色Overlay的mask
由于有很多信息,所以在导入UE时使用BC7格式压缩,并且取消SRGB
在这里插入图片描述
使用如下
在这里插入图片描述
此时放大近看可以看到细节
在这里插入图片描述
不过这样是一直在计算DetailNormal,实际使用时为了让其不一直计算,可以在较低的Lod中舍弃这个,或者创建一个基于距离的mask,靠近时再计算

Lec14 Advanced Detail Mapping (etc.灰度mask)

在这节使用一张纹理mask将多个Detail进行映射
整个实现如下图,也就是RGBA四个通道各画一个Mask分别用不同的图

在这里插入图片描述
这样是消耗比较高的,于是可以用UE的TextureArray来改善,创建TextureArray后插入要用的图
在这里插入图片描述
采样TextureArray需要UVW三个参数,UV正常采样,W用于选择贴图
为了分出用什么贴图,可以在mask上使用不同灰度值,这样实现更加节省性能,W用灰度值映射
在这里插入图片描述
在这里插入图片描述
从评论中节选出一些问题

  • TextureArray会只加载一个mip,无法利用Streaming的优势,但对于detail来说没问题,毕竟detail只在特写中需要。Ben关于这个的建议是使用低分辨率的TextureArray,然后应用所有角色,一直在内存中也没事。
    在这里插入图片描述
  • 关于如何在mask中单独设置每个纹理的UV平铺,如果使用了if节点来设置就没有意义了。
    Ben的回复是之前在开发圣歌的时候尝试做过但是这种尝试并不干净,他决定使用一个全局的统一的分辨率控制缩放。Ben提议可以将纹理缩放倍数也编码为灰度颜色读取,但是会在边界上产生一些奇怪的结果,在涉及纹理压缩和低mipmap时尤为明显。
    在圣歌的开发中,Ben让艺术家在一个mask上使用16种材质,texture array设置有16份贴图,分辨率为64*64
    在这里插入图片描述
  • 如果想要使用mask之间过渡,可以采用最开始分通道存储mask的方式
    在这里插入图片描述
  • 也有人提出问题,UE更适合多种材质插槽,使用多种简单的材质更好。Ben觉得使用一个材质可以减少DrawCall。
    在这里插入图片描述

这种用灰度分mask的方法在其他游戏中也会用到,比如原神中根据不同灰度选择不同Ramp
在这里插入图片描述

Lec15 Smoothstep (etc.溶解/高度混合)

关于Smoothstep,可以看看
常用函数SmoothStep的实现原理
Shader实验室: smoothstep函数
推荐使用 Desmos这个网站 来画函数图像

SmoothStep(float edgo0,float edge1, float x);

edge0是样条线插值的下界,edge1是样条线插值的上界,当x小于下界返回0,当x大于上界返回1,介于上界下界之间返回一个平滑的曲线。
在这里插入图片描述
如下图对UV坐标在0.6和0.7之间Smoothstep
在这里插入图片描述

数学上就是这些,下面有一些例子,比如溶解

sin(time)映射到0~1,将噪声图在两个值之间Smoothstep,边缘有0.03厚度进行溶解
在这里插入图片描述
在这里插入图片描述
对溶解做一些改进,再加一组Smoothstep,但是稍微偏移一点,两者相减,溶解就只剩边缘了,有一种扫描的效果
在这里插入图片描述
在这里插入图片描述
还有个例子,Smoothstep也可以用在地形材质的高度混合
Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题
首先拉一个渐变范围,然后让smoothstep去调整渐变的范围
在这里插入图片描述
Smoothstep对调整范围很有帮助,因为有最大值最小值可以控制

Lec16 Length & Distance (etc.摇摆/内部假光)

Length输入一个向量计算长度,Distance输入起止点计算长度,下图上下是等效的
在这里插入图片描述

下面这个例子将局部坐标Z值与下面的点计算距离作为遮罩,进行横向移动,达到摇摆的效果
在这里插入图片描述
在这里插入图片描述

下面的例子结构和摇摆的类似,不过这次将移动的sin作为测量距离的点,将距离pow之后作为自发光,得到一种虚假光源的效果
在这里插入图片描述
在这里插入图片描述
和sdf进行Ray Marching有类似的思路,通过描述距离来实现效果 案例学习——Unity体绘制shader初探

Lec17 Ceil Floor Round (etc.色阶)

Ceil 向上取整
Floor 向下取整
Round 四舍五入

举例 半兰伯特分色阶
在这里插入图片描述

Lec18 DDX DDY (etc.面片法线,纹理mip计算)

相邻像素之间求导
在这里插入图片描述
DDX和DDY叉乘可以得到法线,用于隐藏呈现面片感的树叶
UE4 Material 101学习笔记——30-37 植物叶片(透光/mask/面片隐藏/法线调整/AO/渐隐/世界空间色彩/随风舞动)
在这里插入图片描述
接着来DDXDDY还能修复HDR的latlong贴图
在这里插入图片描述
在这里插入图片描述
图片衔接处会有一个像素的白线,产生的原因是边界的不连续,交界处UV从0跳转到1,此时选择Mipmap出错,于是出现这个问题
在这里插入图片描述
解决办法选择Dericative模式作为MipValueMode,将UV坐标作为DDXDDY输入,对于极坐标等也很有帮助
在这里插入图片描述
在这里插入图片描述
在HLSL中,这个功能相当于 tex2Dgrad(s,t,ddx,ddy)函数 使用微分并指定MIP层的二维纹理查找

DDXDDY还能用于将凹凸贴图转为法线贴图,下面这些节点的功能相当于PerturbNormalLQ
在这里插入图片描述

Lec19 Sin Cos (etc.涟漪)

正弦余弦的定义不再赘述
注意在UE中,sin和cos的周期是1,需要自己在参数栏设置成2pi才会是正常的sin,cos的速度
在这里插入图片描述

sin和cos的使用这里ben佬给出了几个例子
第一个调整幅度
在这里插入图片描述

第二个则可以利用径向渐变来实现ripple
在这里插入图片描述
在这里插入图片描述
更进阶的ripple做法
UE4 Material 101学习笔记——13-18 完整的雨水着色器

第三个是用sin进行运动(加个sin就和弹跳动画一样)
在这里插入图片描述
第四个是旋转UV
在这里插入图片描述

Lec20 Power

幂运算的定义也不再赘述
power可以用于对比度调整,可以用于NdotV菲涅尔的调整,又比如power2.2和gamma校正一样
power性能比较昂贵,引擎也会做一些优化,比如二次方自动用硬编码的自身相乘替代

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值