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

  • Lec13 Detail Normal Mapping
  • Lec14 Advanced Detail Mapping (etc.灰度mask)
  • Lec15 Smoothstep (etc.溶解/高度混合)
  • Lec16 Length & Distance (etc.摇摆/内部假光)
  • Lec17 Ceil Floor Round (etc.色阶)
  • Lec18 DDX DDY (etc.面片法线,纹理mip计算)
  • Lec19 Sin Cos (etc.涟漪)
  • Lec20 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性能比较昂贵,引擎也会做一些优化,比如二次方自动用硬编码的自身相乘替代

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

  1. UE5 Shader基础学习笔记——01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合

    UE5 Shader基础学习笔记--01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合 Lec01 ...

  2. Spark基础学习笔记13:Scala函数

    文章目录 零.本讲学习目标 一.声明函数 (一)显式声明函数 1.声明格式 2.注意事项 3.案例演示 (1)加法函数 (2)阶乘函数 (二)隐式声明函数 1.声明格式 2.注意事项 3.案例演示 ( ...

  3. Android基础学习笔记13:安卓触摸事件触摸按键

    学习目标 了解安卓触摸动作 熟悉触摸监听器与方法 掌握单点触摸与多点触摸 在Android系统中,触摸是用户最常用,最基础的交互方式,只有弄通触摸事件在系统中的传递处理机制才能更好地增强用户的交互体验 ...

  4. Spring Boot基础学习笔记13:路径扫描整合Servlet三大组件

    文章目录 零.学习目标 一.创建Spring Boot项目 - IntegrateThreeComponents02 二.使用路径扫描方式整合Servlet三大组件 (一)创建MyServlet类 ( ...

  5. python基础学习笔记13:面向对象的三大特性

    1.面向对象有哪些特性 面向对象的三大特性:封装性.继承性.多态性 2.Python中的封装 在Python代码中,封装有两层含义: 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装 cl ...

  6. 2022年Spark基础学习笔记目录

    一.Spark学习笔记 在私有云上创建与配置虚拟机 Spark基础学习笔记01:初步了解Spark Spark基础学习笔记02:Spark运行时架构 Spark基础学习笔记03:搭建Spark单机版环 ...

  7. ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步

    http://blog.jobbole.com/85008/ ASP.Net MVC开发基础学习笔记(5):区域.模板页与WebAPI初步 2015/03/17 · IT技术 · .Net, Asp. ...

  8. Python3 基础学习笔记 C05【字典】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  9. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

最新文章

  1. 计算机管理信息系统大作业,管理信息系统期末大作业
  2. 实际操作之路考的这些事
  3. LOL暗影岛服务器维修,LOL各大区服务器的地点
  4. 瀑布模型、V模型、原型模型、增量模型、螺旋模型、喷泉模型
  5. java中常量池存的是什么_Java中常量池是什么?Java常量池的介绍
  6. 微波射频学习笔记18-------偶极子天线和微波天线设计介绍
  7. CAD中怎么在线缆上输入或删除文字?
  8. 如何用计算机克数和斤换算,克数换算斤计算器(克千克斤公斤计算器)
  9. html播放器参数,sewise HTML5开源播放器参数说明
  10. 《筱静观察》第三季第2期丨区块链在金融开放与监管中的作用
  11. 解决imageview 不显示图片问题
  12. 分段函数sgnx的C语言程序,几个重要的分段函数
  13. 「面试必背」大数据面试题100道(收藏)
  14. 【javaWeb微服务架构项目——乐优商城day15】——会调用订单系统接口,实现订单结算功能,实现微信支付功能
  15. 读书笔记-Icepak计算收敛标准
  16. linux freemind字体,解决freemind中文乱码
  17. python编程软件免费吗_Python Mac下载-Python for Mac(Python编程工具) v3.10.0a2免费版
  18. 编写一个函数,将两个数的正整数A和B合并成一个整数C。
  19. python是跨平台的 以及 py、pyc、pyo
  20. 地图采集小白日赚100+卖网红美食教程月入5W+(15个热门项目)

热门文章

  1. java wmf格式图片转png
  2. [LeetCode By Python]167. Two Sum II - Input array is sorted
  3. 利用二维码进行市场推广的十大新玩法
  4. 《西部世界:觉醒》游戏开发商分享VR技巧
  5. Cadence中原理图模块化
  6. 计算机体系结构:不同方案的机器性能比较例题(1.6)
  7. 2.Cairo图形库-定义
  8. 网络机顶盒哪个牌子好?小编分享最新网络机顶盒排行榜
  9. 推荐几款工具,提升十倍工作效率
  10. Python实现RSA加密算法