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

在这里插入图片描述
在实践中,常常需要为类似荧幕,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
那么我们待续…

<think>好的,我现在需要解决用户在UE5中取消勾选“显示预览平面”后反射消失的问题。首先,我得回忆一下UE5中的反射系统是如何工作的。通常,虚幻引擎使用屏幕空间反射(SSR)和平面反射(Planar Reflections)来生成反射效果。而预览平面可能在某些情况下作为反射的捕捉源,尤其是当项目设置或场景中没有其他反射源时。 用户提到取消勾选“显示预览平面”导致反射消失,这可能意味着预览平面在场景中充当了反射平面。当用户隐藏它后,引擎可能无法找到替代的反射源,导致反射效果丢失。我需要验证这一点。 首先,检查项目设置中的反射选项。可能用户没有启用其他反射类型,比如平面反射Actor或反射球(Reflection Captures)。如果是这样,系统可能依赖预览平面作为默认的反射源。关闭后,反射自然会消失。解决方案可能是添加反射球或平面反射Actor到场景中。 其次,检查材质设置。如果材质依赖于特定的反射环境,隐藏预览平面可能会影响材质的反射属性。确保材质使用了正确的反射输入,比如环境立方体贴图或屏幕空间反射。此外,查看材质中的粗糙度和金属度设置是否正确,因为这些参数影响反射的可见性[^1]。 另外,考虑Nanite的影响。虽然Nanite主要处理几何细节,但某些情况下可能反射系统有冲突。例如,引用[2]提到Nanite可能导致某些材质显示问题。不过这个问题更多几何体优化有关,可能反射丢失无直接关联,但也不能完全排除。 可能的解决步骤包括:1. 添加反射球或平面反射Actor到场景中;2. 调整项目设置,确保屏幕空间反射和全局光照正确启用;3. 检查材质属性,确保反射参数正确;4. 验证Nanite设置是否干扰了反射效果。 需要用户尝试这些步骤,观察反射是否恢复。如果问题依旧,可能需要更深入的诊断,如检查日志文件或更新引擎版本。</think>在UE5中取消“显示预览平面”后反射消失的问题,通常场景反射源配置相关。以下是分步解决方案: ### 解决方案步骤 1. **添加反射捕捉组件** - 在场景中手动添加**反射球(Sphere Reflection Capture)**或**平面反射Actor(Planar Reflection Actor)** - 通过`放置Actor`面板搜索并拖入场景,调整覆盖范围 - 反射球适合动态物体,平面反射适合镜面/水面等平整表面 2. **启用屏幕空间反射(SSR)** ```cpp // 项目设置路径: 项目设置 -> 引擎 - 渲染 -> 默认设置 ``` - 勾选`屏幕空间反射`选项 - 调整`屏幕空间反射质量`至中/高等级 3. **检查材质反射属性** - 打开问题材质实例 - 确认`金属度(Metallic)`>0.3时才会触发物理反射[^1] - 验证`粗糙度(Roughness)`<0.5以保证反射可见性 4. **强制更新反射环境** - 执行控制台命令:`r.SSR.Reflections 1` - 在反射球属性中点击`捕获场景` ### 技术原理说明 预览平面本质是内置的平面反射源,当关闭后若没有其他反射捕捉组件,引擎会丢失反射参考数据。通过手动添加反射球/平面反射组件,可以重建反射参考系。同时屏幕空间反射作为辅助技术,能在没有实体反射源时提供基础反射效果[^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值