版权声明:本文为CSDN博主「a1406215966」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
参考
参考官方文档折射:
- Using Refraction —— Guide for using Refraction in your Materials. 参考 youtube 两个关于透明材质的反射与折射视频:
- Simple Unreal Engine glass material with refraction | UE4.26
- Raytraced Glass, Translucency, & Refraction (Unreal Engine 4) + New Raytracing Features Coming Soon
操作流程如下
一、新建材质
1.1 配置材质属性
- 将材质模式改为半透明,启用双面材质,将光照模式改为后两种其中之一,
SurfaceForwardShading消耗比SurfaceTranslucencyVolume大,原因最后分析(SurfaceTranslucencyVolume\SurfaceForwardShading) - 可以选择启用
ScreenSpaceReflections, 此选项可以使材质对周围空间进行准确的反射,性能消耗较高
1.2 按下图连接材质
其中的 IOR 代表折射率,20211231 日修订:根据:官方文档说明(翻到最后),折射率直接连到 specular 上即可。文章中还列举了半透明材质在开启光追中的性能优化方案。此链接中的文字摘录如下:
半透明折射率(IOR)
在为光线追踪设置并使用折射时,高光(Specular) 材质输入用于控制半透明材质的折射率(IOR)。 虚幻引擎的光线追踪特性遵循 Disney 的 BRDF 模型,其中反射值和 IOR 值是耦合的,不能独立定义。
光线追踪功能优化
设置反射和半透明最大粗糙度(Setting Reflections and Translucency Maximum Roughness)
使用 最大粗糙度(Max Roughness) 在材质上设置光线追踪反射的阈值。可在后期处理体积内,或使用控制台命令 r.RayTracing.Reflections.MaxRoughness 完成此操作。
设置全局照明、反射和半透明的最大光线距离(Setting a Maximum Ray Distance for Global Illumination, Reflections, and Translucency)
这项将设置此类功能的最大光线距离,以降低其在场景中的开销和贡献。
使用控制台设置此类光线追踪功能的 MaxRayDistance 控制台变量。这些功能位于 r.RayTracing.* 下。
RTGI 优化(RTGI Optimizations)
现在,屏幕百分比和逐像素采样分别默认为 50 和 4。如需将其设为其他值,默认使用其控制台命令进行设置:r.RayTracing.GlobalIllumination.ScreenPercentage 和 r.RayTracing.GlobalIllumination.SamplesPerPixel 。
可使用光源的 影响全局照明(Affect Global Illumination) 属性启用/禁用 GI 的光照贡献。
二、场景配置
项目设置中启用 RTX 并在后处理中将半透明的反射模式改成 RayTracing,并用反射球捕获场景或者指定 cubemap
2.1 效果展示
2.2 未启用 Raytracing
未在后处理中启用 Raytracing 的效果
2.3 使用单面材质
想折射效果好需要启用双面材质,不然单面材质就是下图这种效果:反射效果差一些
2.4 颜色配置
颜色不要给纯黑纯白,效果不理想,纯白纯黑如下图所示
2.5 半透明度配置
通过给半透明度合理的值,使得反射和折射效果达到最佳的融合效果,透明度太小或者太大就会出现下图中的效果,太小导致反射看不到,太大导致反射太强烈,折射效果被掩盖。
2.6 粗糙度配置
粗糙度稍微给零点零几即可,否则没有高光点
2.7 后处理半透明反弹次数
后处理中半透明的反弹次数越大透明材质内部越亮,但性能消耗越多。默认的 3 次反弹效果就不错,当反弹次数设成1后会是下图的效果
三、折射率(IOR)可以按照下图给出的不同材质标准值设置:
四、两种 LightingMode 分析
SurfaceForwardShading 与 SurfaceTranslucencyVolume, 他们的名词解释:
SurfaceForwardShading:照明将计算一个表面。把它涂在半透明的表面上,比如玻璃和水。这是通过前向阴影实现的,因此局部光源的镜面高光被支持,然而许多仅延迟的特性是不支持的。这是最昂贵的半透明照明方法,因为每个光的贡献是按像素计算的。SurfaceTranslucencyVolume:照明将计算一个表面。光线在一个体积中积累,所以结果是模糊的,有限的距离,但每像素的成本非常低。把它涂在半透明的表面上,比如玻璃和水。仅支持漫射照明。
对比来看前者的性能消耗是最高的,测试在 4K 画面下,下图左图为 SurfaceForwardShading 模式(24ms),右图为 SurfaceTranslucencyVolume 模式(24 ms)基本没差别
这么看来两者的消耗貌似没什么差别,我将后处理的反弹次数增大到 50 并拉进观看时还是性能依然没有明显差别
咳咳,可能是本人电脑过于强大,嘻嘻,开个玩笑,打开,材质复杂性显示,可以明显看出下面 10 个球的的复杂性要更高(下面十个10球给的是 SurfaceForwardShading 类型材质,上面 15 个是 SurfaceTranslucencyVolume 材质)
从编辑器效果测试来看,在拉远距离后,前者光照模式的高光还在,后者在拉远距离后高光点基本快消失没了,效果如下两图所示:
五、两种 Refraction 模式
在材质设置中有下图这个设置,根据每项的说明,显示:
- 按照折射率:这种适用于玻璃球等对象
- 像素法线偏移:适用于水面材质
六、总结
两种类型在效果上差别不大,场景性能占用上也无明显差别。但是材质复杂度相差不少,我发现两种材质模式在编译速度上有差别复杂的 SurfaceForwardShading 模式编译材质在 8 秒左右,SurfaceTranslucencyVolume 则需要 5 秒。所以不要求极致效果的话使用 SurfaceTranslucencyVolume 灯光模式即可。