当前位置: 首页 > news >正文

UE4_后期处理七—仿红外线成像效果

效果图展示:

参考文档:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/using-fresnel-in-your-unreal-engine-materials?application_version=5.4

二、所用知识点扩充

在创建电影或过场动画时,你常常需要想办法更好地突显角色或场景的轮廓。这时你需要用到一种光照技术,称为边沿光照或边缘光照,它的原理是通过添加额外光源来帮助区分角色轮廓与背景。虽然这能够很好地适用于电影,但将额外光源添加到3D场景会增加额外的复杂度,使其很快变得难以管理。

虚幻引擎在材质层面提供了相应的解决方案。 美术师可以使用 菲涅尔(Fresnel) 在角色或道具的材质中模拟边沿光照,更好地控制效果的外观体验。 菲涅尔是一种固有属性,在许多材质中自然存在,其中包括玻璃、水以及一些类型的织物和油漆。本教程中的技术将帮助你更准确地模拟这些材质。

1、菲涅尔

菲涅尔(Fresnel) 这一术语用于说明你看到的光线如何根据视角的变化以不同的强度反射。例如,你站在水池边,低头看脚下的水,你会发现水面的反射不是特别强烈。随着你抬起头,使你的视线与水池中的水面平行,你会开始发现水面越来越波光粼粼。水和玻璃都表现出很强的菲涅尔倾向,即视线垂直于表面时,它们看起来相对透明,视线未垂直于表面时,它们会反射更多光线。

请注意,从正面看时,相框中的玻璃是透明的,从侧面看时,玻璃的反光会更明显。

在虚幻引擎中,菲涅尔材质表达式 会根据表面法线与摄像机方向的点积计算衰减。当表面法线径直指向摄像机时,会输出值0,意味着应该不会发生菲涅尔效果。当表面法线与摄像机垂直时,会输出值1,意味着应该发生完整的菲涅尔效果。结果会限制在[0, 1]范围内,这样就不会在中心看到负值颜色。下图演示了此概念。

在球体中间(标记为0),没有菲涅尔效果。这是因为摄像机径直指向表面法线。朝向球体边缘(标记为1),表面法线趋于与摄像机垂直,菲涅尔效果也越来越明显。 这会造成球体边缘被照亮的感觉。

2、菲涅尔材质表达式

工具(Utility) 下的 菲涅尔 材质表达式是本教程中使用的选项,并且在这两个选项中更易于配置。强烈推荐你使用此版本入手,并仅在更好地理解该节点运作方式之后才使用菲涅尔材质函数。

属性说明
ExponentIn此输入将控制菲涅尔效果的衰减。
BaseReflectFractionIn这指定了视线垂直于表面时的高光度反射率。将其设置为值1实际上会禁用菲涅尔。
法线(Normal)你可以输入法线贴图来更改菲涅尔效果的渲染方式。法线贴图必须从切线空间变换为世界空间(参见下文)。

有三种方法可调整菲涅尔材质表达式中的值。

  • 在材质图表中选择节点时,你可以在 细节(Details) 面板中输入值。

你还可以将常量或标量参数连接到输入。

你可以将法线贴图拖到 法线(Normal) 输入来更改菲涅尔效果的外观。如果你使用法线贴图纹理,必须通过 TransformVector 表达式传递它,然后再将其连接到法线输入。这会将法线贴图从切线空间变换为世界空间。如果不进行此变换,法线贴图可能无法按你所需的方式影响菲涅尔。

3、菲涅尔材质函数

向量操作(Vector Ops) 类别中的 Fresnel_Function 材质函数是高度可自定义的菲涅尔版本,用于提供对菲涅尔效果的多个不同方面的控制。这个新增加的功能有其缺点,因为设置出错可能导致菲涅尔效果的渲染存在瑕疵或错误。 

你应该仅在 工具(Utility) 下的菲涅尔材质表达式不能产生你所需的结果时使用此材质函数。

属性说明
法线向量(V3)(Normal Vector (V3))你可以在此处输入法线来修改菲涅尔效果的渲染。为获得准确的结果,你必须通过变换节点(切线空间到世界空间)来传递法线贴图。
摄像机向量(V3)(Camera Vector(V3))手动更改用于确定摄像机和表面法线之间点积的摄像机向量。
反转菲涅尔(B)(Invert Fresnel(B))反转菲涅尔的效果。如果你希望菲涅尔仅在中心或边缘应用,这会很有用。
能力(S)(Power(S))输入标量以控制菲涅尔效果的范围(或衰减)。输入的数字越大,受影响的区域越小。输入的数字越小,那么菲涅尔节点影响的表面区域越大。
使用低开销对比度(B)(Use Cheap Contrast(B))启用此属性后,菲涅尔节点会使用开销更低的方法来计算亮色与暗色之间的对比度。
低开销对比度暗色(S)(Cheap Contrast Dark (S))此属性将控制菲涅尔的昏暗程度。这仅在启用 使用低开销对比度(Use Cheap Contrast) 时有效果。
低开销对比度亮色(S)(Cheap Contrast Bright (S))此属性将控制菲涅尔效果的明亮程度。这仅在启用 使用低开销对比度(Use Cheap Contrast) 时有效果。
限制菲涅尔点积(B)(Clamp Fresnel Dot Product (B))将菲涅尔点积的结果限制在0到1之间。 此属性默认为true,但你可以使用设置为false的 静态布尔(Static Bool) 将其覆盖。

4、如何在材质中使用菲涅尔

使用以下步骤可创建要使用菲涅尔的材质。

  1. 在 内容浏览器(Content Browser) 中 右键点击 并从上下文菜单中的创建基本资产(Create Basic Asset)分段选择 材质(Material) 。 创建材质后,将其命名为 FresnelMaterial 。

  2. 在 内容浏览器(Content Browser) 中 双击 缩略图,打开新材质。

  3. 展开 控制板(Palette) 或在材质图表中 右键点击 以显示上下文菜单。搜索以下材质表达式节点并将其添加到图表中。

  4. 重命名所有标量和向量参数节点,并在细节(Details)面板中设置其默认值。

    名称默认值
    菲涅尔颜色(Fresnel Color)1.0, 0.0, 0.0, 0.0
    基础颜色(Base Color)0.5, 0.5, 0.5, 0
    菲涅尔衰减(Fresnel Falloff)8
    粗糙度(Roughness)0.5

5.将 Multiply 节点添加到图表,然后使用下图作为指南来连接所有材质表达式。

点击工具栏中的 应用(Apply) 来编译材质,然后点击 保存(Save) 。

请记住,在 菲涅尔衰减(Fresnel Falloff) 中输入较大的数字会将菲涅尔效果愈加推向边缘,而输入较小的数字则会使效果更靠近中心。下面是 菲涅尔衰减(Fresnel Falloff) 值从0增加到10的效果展示。请注意,随着数字增加,蓝色会逐渐推向球体边缘。

5、菲涅尔和法线贴图

由于菲涅尔会根据脸部的表面法线计算,所以你可以使用法线贴图来影响菲涅尔效果在材质中的分布。菲涅尔节点的运用原理是检查表面法线是否与摄像机垂直。如果与摄像机垂直,则菲涅尔效果可见。在光滑的球体上,这意味着菲涅尔效果仅在边缘发生。

但是,引入法线贴图时,表面法线会被修改,可能使网格体的轮廓中出现起伏和轮廓线。 这意味着菲涅尔效果可以高亮或突显在表面法线光滑时不可见的细节。

如需直观了解其运作原理,可以参考下面的两张图片。左图(1)显示了菲涅尔节点在使用扁平表面法线时的输出情况。菲涅尔效果仅在球体边缘可见。 右图(2)输入了法线贴图,显著改变了网格体的表面法线。 现在,菲涅尔效果沿法线贴图中定义的轮廓线可见。

下图显示了不同的法线贴图对菲涅尔的影响。

三、效果制作步骤分析:

1、观察场景法线得到的颜色图

当蓝图节点为下图时:

效果图如下:

2、观察场景法线作为fresnel法线参数得到的效果图

当蓝图节点为下图时:

效果图如下:

3、观察环境光遮挡得到的遮罩效果

4、观察场景法线的fresnel与环境光遮挡的正片叠底效果

5、用环境光遮挡选区作为两种颜色的线性插值的alpha

6、自定义深度减去场景深度得到的遮罩样式

作用效果如下图:

7、把自定义深度遮罩选区作为上一个图像的蒙版

实际上我们得到了一个自定义深度的遮罩图。把自定义深度遮罩应用于用环境光遮挡来定义的不同颜色图上。

把墙开启自定义深度通道,效果如下图:

当我们把人物隔离出去时,节点连接图和效果图如下:

8、给被隔离的人物添加颜色

这样会随着角度的不同让角色显示不同的颜色。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MIME 类型
  • Ubuntu环境切换到服务器某个用户后source等命令和Tab快捷补全都用不了了,提示没找到,但root用户可以
  • java并发编程笔记 之 线程和进程
  • Unity 的Event的Use()方法
  • 太速科技-383-基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡
  • Java后端中的复杂查询优化:索引设计与SQL调优的结合
  • 个人计算机与网络的安全
  • 【JavaScript】LeetCode:51-55
  • Vue实战教程:手动封装一个全局可自定义图标提示组件
  • 企业如何高效应对多类型知识产权事务的复杂挑战?
  • Vue中集中常见的布局方式
  • 1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)
  • MySQL事务、视图、索引、恢复、备份、导入导出的学习
  • 代码随想录打卡Day41
  • 研一奖学金计划2024/9/23有感
  • [deviceone开发]-do_Webview的基本示例
  • Angular2开发踩坑系列-生产环境编译
  • C++11: atomic 头文件
  • eclipse(luna)创建web工程
  • ESLint简单操作
  • PHP CLI应用的调试原理
  • Rancher-k8s加速安装文档
  • 彻底搞懂浏览器Event-loop
  • 力扣(LeetCode)965
  • 排序算法学习笔记
  • 一天一个设计模式之JS实现——适配器模式
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • Spring第一个helloWorld
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​批处理文件中的errorlevel用法
  • ​浅谈 Linux 中的 core dump 分析方法
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (java)关于Thread的挂起和恢复
  • (Java入门)抽象类,接口,内部类
  • (LeetCode C++)盛最多水的容器
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (一)80c52学习之旅-起始篇
  • (转)C#调用WebService 基础
  • ***测试-HTTP方法
  • ***利用Ms05002溢出找“肉鸡
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net Stream篇(六)
  • .NET WPF 抖动动画
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • /dev/sda2 is mounted; will not make a filesystem here!
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [ai笔记9] openAI Sora技术文档引用文献汇总