【UE】尝试一种老派的平面假反射做法,与进一步改进效果的思路

devtools/2024/9/22 12:35:19/

在这里插入图片描述
在实践中,常常需要为类似荧幕,LED广告牌等平面制作反射。
但会遇到各种问题,例如在使用屏幕空间反射时,平面必须在画面内
平面反射捕获与光线追踪又代价高昂

因此,在一些情况下依然会使用一种历史悠久的反射手法
在这里插入图片描述


这种old school的做法,核心原理就是在地下放一个对称的面片(如下图所示)

在这里插入图片描述
其中,有关的Shader都在地下的面片中

  • 地面上部的面片是普通的半透明,这是为了防止其参与SSR屏幕空间反射
  • 地面和周围模型,都是正常的模型和材质
  • 只有藏在地下,用于表现反射的面片是特殊的,接下来我们就制作它

制作

创建材质

我们拷贝一个地面上部面片的材质

  • M_Plane 为地面上面片材质
  • M_Plane_R 为地面下的反射材质
    在这里插入图片描述
    他们现在内容相同,材质如下

在这里插入图片描述
在这里插入图片描述

放置对称模型

复制模型并对称

不用说,首先复制一个面片,然后将面片Z轴翻转
在这里插入图片描述

更换材质

然后为下部面片更换材质为M_Plane_R

在这里插入图片描述> 在这里插入图片描述

接下来将两个面片的对称轴移动到地面水平位置,此时下部面片已经进入地下,看不到了
在这里插入图片描述

制作Shader

接下来我们就要开始制作反射Shader(M_Plane_R)了

1.禁用深度测试

打开M_Plane_R,第一步就是为其禁用深度测试
在这里插入图片描述
现在,透明被绘制出来了

在这里插入图片描述

2.制作自定义深度

现在我们要自己写一个深度
在这里插入图片描述
这里利用半透明的特性,SceneDepth-PixelDepth求得面片到表面距离
然后对距离进行一个Remap,让透明度根据距离进行线性衰减
最后使用Power,Exp=2 (图里写错成0)让这个过渡以指数进行衰减

效果如下:
在这里插入图片描述
在这里插入图片描述
到此老派的做法已经完成了
我把反射面片附加到了上部模型,使其一起移动,效果如下
在这里插入图片描述

改进

我们并不在此结束,因为效果仍然有巨大改进空间
在延迟渲染引擎中,半透明本质是一种后期效果,因此它可以拿到Gbuffer

粗糙度

接下来我们尝试为其应用粗糙度
我们可以获取Gbuffer中的粗糙度,然后对贴图进行高斯模糊等处理

0成本模糊方案

考虑我们制作这个反射,本身就是为了节省成本
因此这里使用了一种0成本的模糊方案,这要求贴图有MIP
在这里插入图片描述
TextureSample选择MIP模式

在这里插入图片描述
在这里插入图片描述

演示不同值的影响
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随着MIP的增大,贴图分辨率逐渐减小,也就会变得模糊,这张贴图有13个等级的MIP

我们利用这个特性进行0成本的模糊。

原理演示:
在这里插入图片描述

如图所示,这里我们使用了粗糙度作为蒙版输入MIP:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/263fe9b35f69485f963834d63e22aedb.png
在这里插入图片描述
随着粗糙度增加,反射光线理应减少,表现为更多的地面颜色
因此翻转粗糙度,乘入透明度,以减少光线
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

法线

现在只可以在平面进行投影
但我们还可以拿到法线Gbuffer
那么我们待续…


http://www.ppmy.cn/devtools/99613.html

相关文章

lucene搜索关键词错误

问题 遇到的异常信息 : Lexical error at line 1, column 38. Encountered: <EOF> after at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:114)解决办法 查询搜索时遇到了特殊字符&#xff0c;需要对字符串进行转义 public s…

【计算机网络】认识端口号 认识传输层协议 认识网络字节序 认识socket套接字

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

开源好用的堡垒机工具Jumpserver

Jumpserver是一个由杭州飞致云信息科技有限公司&#xff08;FIT2CLOUD飞致云&#xff09;开发的开源堡垒机系统&#xff0c;旨在帮助企业构建和强化运维安全审计能力。 以下是关于Jumpserver的详细介绍&#xff1a; 一、基本概述 定义&#xff1a;Jumpserver是一个开源的堡垒…

DFS 算法:记忆化搜索

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 无 此系列更新频繁&#xff0c;求各位读者点赞 关…

Java蛋糕店烘焙店系统小程序系统源码

解锁烘焙新纪元&#xff0c;揭秘“蛋糕店烘焙店系统”的甜蜜秘籍&#xff01; &#x1f31f;【开篇&#xff1a;烘焙业的数字化浪潮】&#x1f31f; 在这个快节奏的时代&#xff0c;传统烘焙行业也迎来了它的数字化转型时刻&#xff01;你是否梦想过拥有一家高效运转、顾客满…

前端宝典九:React Native从入门到精通实战

本文主要介绍 React Native新旧框架对比React与React Native区别React Native性能优化 其中第3点React Native性能优化的拆包分包&#xff0c;是项目实战中使用过的&#xff0c;在这里整理分享&#xff0c;如果没有用过的小伙伴会觉得晦涩难懂&#xff0c;建议按照在实际项目…

Godot《躲避小兵》实战之创建游戏主场景

游戏主场景 现在是时候将我们所做的一切整合到一个可玩的游戏场景中了。 创建新场景并添加一个 Node节点&#xff0c;命名为 Main。&#xff08;我们之所以使用 Node 而不是 Node2D&#xff0c;是因为这个节点会作为处理游戏逻辑的容器使用。本身是不需要 2D 功能的。&#x…

企业级web应用服务器tomcat

一、WEB技术 1.1HTTP协议和B/S 结构 我们的操作系统之所以可以让程序并行的执行&#xff0c;源于操作系统有进程子系统&#xff0c;每个进程可以有多个线程&#xff0c;每个线程可以被CPU调度执行 客户端和服务端分属于不同的进程&#xff0c;跨主机的进程之间需要通信就得需…