首页 > 其他分享 >虚幻引擎的实时渲染概述(下)

虚幻引擎的实时渲染概述(下)

时间:2023-08-02 22:01:27浏览次数:54  
标签:反射 渲染 光源 阴影 概述 Lightmap 虚幻 光照

虚幻引擎的实时渲染概述(下)

反射

实时渲染中反射是一个非常有挑战的特性

UE中有多种不同的方案,各有各的优势和缺点

  1. 反射捕获
  2. 屏幕空间反射
  3. 平面反射
  4. Lumen
  5. RT Reflection

反射捕获

  • 在指定位置捕获一张Cubemap
  • 需要预计算
  • 快速
  • 不精确
  • 只能捕获一定距离范围内的物体

平面反射

  • 并不常见,也不常常使用,仅限在指定平面上
  • 在某些设置下可能会有很大的性能损耗(每帧捕获)
  • 适合需要精准反射的表面(例如镜子)

屏幕空间反射

  • 默认开启的反射系统
  • 对任何物体都有影响
  • 准确
  • 输出有噪声,性能损耗较大
  • 只反射视野范围内可见的物体

反射性能提示

  • 如果未经过Cook,反射捕获会在打开关卡时进行,导致加载变慢
  • 反射捕获区域如果有很多重叠,会导致多次着色从而性能变差
  • 反射捕获的分辨率可以在系统设置中调节
  • 天空光为整个关卡提供了低成本的反射捕获
  • 必要时才使用平面反射的实时捕获和SSR

光照

  • 静态光源(Static Light)

是指在运行时不能以任何方式改变或移动的光源,它们仅在关照贴图中进行计算,一旦处理完成后,不会再有进一步的性能影响。可移动对象不能和静态光源进行交互,所以静态光源的用处是非常有限的。

  • 可移动光源(Moveable Lights)

产生完全动态的光照和阴影,可以改变光源位置;旋转度,颜色,亮度,衰减,半径等属性;几乎光源的任何属性都可以修改。它们产生的光照不会烘焙到黄照贴图中,也不会产生间接光照效果。

  • 固定光源(Stationary Lights)

保持固定位置不变的光源,但可以在其他方面进行变更,例如可以在其他方面进行变更,例如亮度和颜色。这是它们与静态光源的主要不同之处,静态光源无法在游戏时以任何方式进行变更。然而,应该注意的是,在运行时对亮度进行修改仅会影响直接光照。间接(反射)光照由于是通过Lightmass进行预计算的,所以不会改变。

静态光照和阴影

  • 与反射一样,光照和阴影在实时计算也很困难
  • 部分光照,阴影的计算会在预计算阶段完成,在runtime与实时光照结合
  • 虚幻引擎中有数十种不同的光照和阴影方案

静态光照主要通过Lightmap来实现的,Lightmap是一张烘焙了光照和阴影的贴图在计算时与BaseColor相乘

img

UE4中,我们使用Lightmass工具生成Lightmap

多张Lightmap会合并到atlas中可以逐个mesh调整Lightmap密度

img

Volumetric Lightmap

Lightmass会生成表面光照贴图,用于表现静态对象上的间接光照。但是,动态的对象(例如角色)也需要一种接受间接光照的方法这种方法就是在构建时将所有点的预计算光照存储在名为体积光照贴图的空间中,然后在运行时用于动态对象的间接光照的插值。

质量

  • 可以处理辐射和全局光照
  • 真实的阴影效果包括软阴影
  • 质量取决于Lightmap的分辨率和UV分布
  • 由于UV布局的关系,光照还可能显示出接缝
  • Lightmap分辨率有上限,巨大的模型可能效果不佳
  • 一旦烘焙完成,在运行时静态的光源和物体无法移动

性能

  • 在编辑器下预先计算,并将信息储存在Lightmap中
  • 计算非常高效,但占用更多内存
  • 需要一定的时间去预计算
  • 每次修改光照和静态物体,需要重新构建光照
  • 模型需要Lightmap UV,因此需要额外的步骤去处理

Lightmass

  • Lightmass是一个独立程序,由引擎编辑器在烘焙时调用
  • 支持网络分布式渲染
  • 渲染质量可以通过一些选项设置

GPU Lightmass

  • GPULM大大减少计算,构建和生成复杂场景光照数据所需的时间,其速度可与基于CPU的Lightmass使用Swarm进行分布式构建时的速度相媲美。此外,GPULM提供具有交互性的新工作流,可以实时编辑场景,重新计算和重新构建光照。基于CPU的Lightmass系统无法使用此工作流。

静态光照的性能提示

  • 静态光照总是以完全相同的速度渲染
  • 无论有多少静态光源,烘焙之后的渲染速度是一样的
  • Lightmap分辨率会影响内存,但不影响帧率
  • 烘焙速度会受以下几点影响
    • Lightmap分辨率
    • 模型,光源数量
    • 烘焙选项
    • 光照影响范围

动态光照和阴影

动态阴影

  • 常规动态阴影
  • 级联阴影
  • 逐对象阴影
  • 距离场阴影

阴影是光线阻挡的效果

  • 常规动态阴影——阴影非常锐利

img

  • Shadow Acne

    img

    阴影失真是由于阴影贴图的分辨率不够造成的

    img

  • 级联阴影——方向光,不同距离

    • 阴影贴图的分辨率低,锯齿严重
    • 视锥体分割
  • 逐对象阴影——固定光源(位置固定,颜色,光强可变)

    • 针对可移动物体
  • 距离场阴影——可以生成软阴影,不需要针对模型运行阴影pass

    • 从空间中待着色的点出发,沿着光线方向前进。
      1. 由于需要直接光照,光源需是固定或可移动光源
      2. 只是对静态网络体有效,需离线生成Mesh Distance Field(ue4默认关闭,ue5默认打开)
      3. CSM>DFS>Traditonal Shadow
      4. 运行实时生成Global Distance Field
      5. Ray Marching

距离场阴影原理示意图

其它阴影:

  • Contact Shadow——对于小的物体有较好的细节
  • Capsule Shadow——用简化的模型来渲染阴影

动态阴影的性能提示

  • 渲染阴影的性能损耗大,通常需要降低渲染质量来补偿
  • 动态光照不会对大部分的内容产生辐射或全局光照
  • 动态光照不会生成“真正的”软阴影,只是通过模拟软阴影来实现
  • 动态光照在场景中看起来更"真实"(闪烁等,光线非常锐利)

光照渲染

  • 使用像素着色器计算
  • 点光源用一个球型模型来渲染
  • 在球投影内像素会进行光照渲染

动态光照性能提示

  • 动态光照在延迟渲染中性能损耗相对少,但在前向渲染中损耗非常大
  • 像素越多性能越慢
  • 光源离相机近,受影响的像素越多,性能也就越慢
  • 点光源半径需要尽可能小,避免重叠

Lumen和VSM

Lumen

  • Lumen是虚幻引擎5全新的全动态全局光照和反射系统
  • Lumen使用了多种光线追踪方法来处理全局光照和反射

半透明

  • 延迟渲染管线难以处理半透明材质
  • 半透明渲染在渲染流程后半段
  • 使用前向渲染管线渲染半透明物体
  • 渲染半透明材质的对性能影响很大
  • 像素被多层半透明材质覆盖,性能损耗很大
  • 渲染排序也会增加性能损耗

后期处理

  • 后期处理很大程度上依赖于像素着色器,通过合成实现
  • 通过再度使用G-Buffer的内容来计算各种效果
    • Bloom(泛光)
    • DOF(景深)
    • Lensflare(炫光)
    • Vignette (晕光)
    • Tonemapping (色调映射)
    • Motion Blur(运动模糊)
    • Exposure(曝光)

实时Ray Tracing

Ray Tracing☞追踪从摄像机出发的光线在场景里多次反弹的一个过程

性能调试

  • Stat命令
  • GPU Visualizer
  • Unreal Insight
  • Frontend session

性能调试首先得找到瓶颈 stat unit可以看到不同线程执行的速率

对于GPU可以通过GPU Visualizer ctrl+shift+, 打开

Unreal Insight是一个独立的可执行程序,可以帮助开发者识别瓶颈,用于性能优化,还可以用于收集,分析和显示引擎发出的数据。另外Unreal Insight可以轻松添加用户自己的分析数据,它对项目的执行的影响非常低

学习地址

地址

标签:反射,渲染,光源,阴影,概述,Lightmap,虚幻,光照
From: https://www.cnblogs.com/tcohneyn/p/17601869.html

相关文章

  • 虚幻引擎的实时渲染概述(上)
    虚幻引擎的实时渲染概述(上)1.介绍实时渲染(Real-TimeRendering,RTR)是指在计算机上快速生成图像的一个过程。它是计算机图形学中交互性最高的领域。图像出现在屏幕上,观众做出反应,这种反馈会影响接下来生成的内容。这种反应和渲染的循环以足够快的速度发生,以至于观众看不到单帧图......
  • os_概述
    OS的目标和作用其目标有以下几点:有效性(提高利用率和吞吐率)--面向系统的方便性(易学易用)—面向用户的可扩充性(层次化和模块化结构)开放性(兼容和互连)--遵循统一的标准安全性作用:OS作为用户与计算机硬件系统之间的接口(OS是一个系统软件,因而这种接口是软件接口)OS作为......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • C语言概述
    C语言是一种通用的、高级的程序设计语言,由贝尔实验室的DennisRitchie在1972年首次开发。它在计算机编程领域得到了广泛应用,被认为是现代计算机编程的基础之一。C语言具有简洁的语法、高效的执行速度和强大的底层编程能力,因此在系统级编程、嵌入式开发、操作系统和编译器设计等领域......
  • 跨端技术概述
    0x1跨端跨端背景PC端(WLM)、移动端(Android/iOS)、web端、IoT设备(车载设备、手表)常见痛点:各端功能区别不多,但需要单独配置开发人员开发、维护成本高Android、iOS发版周期长跨端技术方案目标加快研发效率,降低学习成本,提高多端一致性增强用户体验,提高稳定性,优化性......
  • 建模教程:如何利用3ds Max 和 After Effects 实现多通道渲染和后期合成 - 第 1 部分
     推荐:NSDT场景编辑器助你快速搭建可二次开发的3D应用场景1.创建基本场景步骤1打开 3dsMax。在透视视口。打开3dsMax步骤2做一个茶壶,放在飞机上。制作茶壶步骤3我在场景中应用了几个灯光。我选择了光线追踪阴影作为阴影。光线追踪阴影步骤4按 M 打开材质......
  • 建模教程:如何利用3ds Max 和 After Effects 实现多通道渲染和后期合成 - 第 2 部分
     推荐:NSDT场景编辑器助你快速搭建可二次开发的3D应用场景1.创建基本场景步骤1打开 3dsMax。打开3dsMax。步骤2我做了一个简单的场景。我放了三个彼此之间有一定距离的物体。制作对象步骤3按 Ctrl-C 键在透视视图中创建摄影机。创建相机2.设置对象ID步......
  • React重新渲染的触发机制及其优化策略
    React是一个用于构建用户界面的JavaScript库,它的核心特点之一是使用虚拟DOM(VirtualDOM)来实现高效的组件渲染。那组件重新渲染的机制是如何呢?基于这些机制,如果进行优化呢?虚拟DOM是一个用JavaScript对象表示的DOM树,它可以在内存中快速地创建和修改,而不需要直接操作真实的DOM。React......
  • 赋能商业的AI之路:从趣味概述到核心技术
    前言人工智能(AI)正成为当今社会的重要驱动力,对商业和科技产生了深远的影响。在这个快速发展的AI时代,我们有必要了解AI的基本概念和商业应用,以抢占人工智能带来的红利。本文将介绍一系列有趣且实用的AI相关图书,帮助读者入门机器学习、Python编程以及深度强化学习等核心技术,从而为商业......
  • 爬虫:动态渲染网页
    #coding:utf-8importrequestsimportjsonurl='https://www.toutiao.com/search/suggest/hot_words/?_signature=_02B4Z6wo00101KzVDhQAAIDALNf0VpZzQrys8QqAAE.4WWTkOuz1HeMqTrJvEm2yLbAnK-d4x0dPsUEaw146LG7XljEYM0cn9I0bjErwG0PJkn2Kj0dDPMvau3aciANleL.uixoTY......