基础篇 | 光追01 | UE中光线追踪的使用技巧及优化

1、光追是什么

  • 基本概念

    • 屏幕的每个像素往场景发出射线,碰撞到场景物体后,会展示出不同的颜色,然后对应调整该像素的颜色表现。

    • BVH算法,让光追效率极大增强;(检测碰撞三角面 → 检测碰撞模型包围盒)

  • 光追与光栅化的区别

光追 光栅化
从像素和射线开始; 从物体和三角面开始;
渲染慢,但真实; 渲染块,但不够真实;
真实的物理灯光; 使用一些技巧来模拟灯光行为;
开启简单; 需要一些开发尝试来达到真实效果;

2、混合渲染

  • 基本概念

    • 因为光追很昂贵,所以我们会在需要的地方使用光追。
  • 应用

    • 漫射(Diffuse light):我们会用光栅化实现;

    • 反射:模糊表面的反射使用光栅化,光滑表面反射使用光追;

    • 环境遮蔽(AO):看情况选择SSAO,或者光追;

    • 阴影:核心灯光的阴影选择使用光追;

    • 全局光(GI):消耗很高,使用时,考虑关闭其他光追;

      扫描二维码关注公众号,回复: 15101345 查看本文章

      在这里插入图片描述

3、光追的使用

1)场景基础设置

  • 项目设置

    • 打开光追与贴图LOD;

      在这里插入图片描述

    • 平台中设置为DirectX 12;

      在这里插入图片描述

  • 设置成功后重启引擎

    • 会在右上角看到图形计算切换到了DirectX 12;

      在这里插入图片描述

    • 显示中多出光追Dug的分栏;

      在这里插入图片描述

2)环境遮蔽-AO

  • 概念

    • 一种计算环境光是否被周围物体遮挡的算法;
  • 两种方案

    • 光追AO

      • 屏幕射线与模型表面碰撞,能计算出真实的遮挡关系;
    • 光栅化AO:SSAO

      • 基于现成的深度数据,运算快;

      • 最大弊端是无法区分前景和背景,物体被遮挡时,背景物体会被剔除,这部分的AO会被忽略;

        在这里插入图片描述

  • AO的开启与设置

    • 红框启用时,使用光追AO。非启用时,使用SSAO;

    • 逐像素是AO的精度;半径是光追射线的长度;这两个值都直接影响性能;

      在这里插入图片描述

3)反射-Reflection

  • 三种方案

    • 光追反射

      • 表面越粗糙,反射喇叭口越大,消耗越大;

        在这里插入图片描述

    • 屏幕空间反射:属于图像的后期处理

      • 无法识别屏幕以外的物体,所以画面边界和一些特殊的地方会失真;

      • 反射距离也会受画面距离影响,局限大;

    • 反射探针

      • 环境捕获或者HDR贴图;

      在这里插入图片描述

      在这里插入图片描述

  • 反射的开启与设置

    • 反射中选择类型;

    • 最大粗糙度:超过数值的表面使用SSR,这个阈值对性能影响大,推荐值0.2;

    • 最大反弹次数:反射的反射,次数越多,性能消耗越大;

    • 逐像素:控制精度,影响性能;

    • 阴影设置和半透物体设置,同样影响性能,按需开启;

      在这里插入图片描述

4)阴影-Shadow

  • 两种方案

    • 光追阴影:会匹配光源的半径,出现真实的虚影;

      在这里插入图片描述

    • 光栅化阴影:用的是瀑布流的阴影贴图(Shadow map)

      在这里插入图片描述

  • 开启与设置

    • 给主光源开启光追阴影

      在这里插入图片描述

    • 光追阴影的采样精度
      在这里插入图片描述

5)全局光-GI

  • 两种方案

    • 光追GI:环境物体散射真实的次级光;

      在这里插入图片描述

    • 光栅化GI:用构建+光照贴图的方式;

  • 开启与设置

    • 类型中选择是否开启;

    • 反弹次数和逐像素对精度影响都很大;

      在这里插入图片描述

6)半透-Translucent

  • 两种方案

    • 光追半透:产生真实的反射和折射;

      在这里插入图片描述

    • 光栅化半透:配合SSR或反射探针使用;

  • 开启与设置

    • 场景无透射时,选择光栅化,能节省几帧性能

      在这里插入图片描述

  • 半透材质

    • 使用光栅化时,通常会有排序纹理,最好关闭双面;

      在这里插入图片描述

    • 折射率的计算(近似值):空气到玻璃,为两者折射率相除;

      在这里插入图片描述

    • 材质事例

      在这里插入图片描述

4、性能优化

1)材质上的优化

  • 原理:光追时,关闭反射中的一些的材质运算,来增加运行性能;

  • 核心节点:RayTracingQualitySwitchReplace

    • Normal:正常渲染时,shader调用的数据;

    • RayTraced:光追反射中,shader调用的数据;

      在这里插入图片描述

      在这里插入图片描述

2)全局指令优化

  • 指令1:r.RayTracing.Reflections.TestPathRoughness 1

    • 原理:光追测试的反射度阈值,阈值为1时,测试都用SSR;

      在这里插入图片描述

  • 指令2:r.RayTracing.Reflections.MaxRayDistance 100

    • 原理:射线的最远距离,默认为-1(无限远)。降低时,性能提高,反射会不完全;

      在这里插入图片描述

  • 指令3:r.RayTracing.Reflections.ScreenPercentage 50

    • 原理:设置反射的分辨率百分比。降低时,性能提升,反射会产生抖动;

      在这里插入图片描述

  • 指令4:r.RayTracing.Reflections.Hybrid 1

    • 原理:打开反射的混合算法。打开时,性能提升,第二次反射开始会用SSR代替光追反射;

      在这里插入图片描述

  • 指令5:r.RayTracing.Reflections.ReflectionCaptures 1

    • 原理:光追反射的基础上叠加探针反射。打开时,可以把所有反射都设置为1次,原本2次以上的黑暗区域会被探针反射替代。

      在这里插入图片描述

      在这里插入图片描述

3)全局光GI优化

  • 模式从“强力”改成“最终聚集”

    在这里插入图片描述

  • 降低天光的采样精度

    在这里插入图片描述

  • 指令:r.RayTracing.GlobalIllumination.NextEventEstimationSamples 1

    • 原理:采样次数降低
      在这里插入图片描述

4)GPU查看器-visualizer

  • 快捷键:Ctrl+Shift+

  • 官方网页

  • 界面及操作

    在这里插入图片描述

  • 点击时,会定位到这个块的消耗

    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u011637323/article/details/125849257
今日推荐