Unreal Engine Real-Time Rendering Class(一)

本文是Unreal Engine官方课程的学习笔记

Introduction

  • Real-Time Rendering(RTR)只有在不渲染时性能才是最高的,因此RTR的本质是管理性能损耗:
    Unreal Engine Real-Time Rendering Class(一)_第1张图片
    RTR的本质是管理性能损耗

    你需要:
      1. 确定目标帧率
      2. 专注于你的方案和工作流,尽一切努力达到目标帧率
      3. 让每一种性能损耗都得到尽可能多的回报

  • RTR不可能以一种完美的方式呈现,总是在性能、质量和功能之间寻求一个平衡:
    Unreal Engine Real-Time Rendering Class(一)_第2张图片
    在性能、质量和功能之间寻求一个平衡
  • 可以通过以下四件事来在RTR中获得良好的性能:
       1. 每个环节都需要尽可能的保持高效
       2. 需要严格的流程标准和限制
       3. 将一部分工作量分配到预计算环节,并非所有内容都是实时渲染的,混合预烘焙内容和实时渲染内容
       4. 混合使用以下各种方案:


    Unreal Engine Real-Time Rendering Class(一)_第3张图片
    各种渲染方案
  • 一般的电脑硬件组成如图:
    Unreal Engine Real-Time Rendering Class(一)_第4张图片
    电脑硬件的组成

    数据由硬盘通过带宽(带宽通常会被忽略,其实渲染不仅和硬件组成有关,和带宽也有关,是它将信息从硬件架构中的一部分传输到另一部分)传输到内存。然后,数据会在CPU和GPU之间来回传输。

  • CPU vs GPU
      1. 负责处理实时渲染的不同部分,多数时候是同步的
      2. 它们有可能会成为对方的瓶颈,较慢的那个会成为性能的制约因素
      3. 你需要知道工作负荷如何在两者之间分配,才能采取应对措施
  • 实时渲染有两种方式,前向渲染和延迟渲染,UE4默认使用的是延迟渲染。
    前向渲染具有如下特点:
      1. 着色和几何体/材质在同一个pass中计算
      2. 在计算光照/材质时能够拥有更高的灵活性,但并不擅长混合各种不同功能,因为它很快就会变得非常复杂
      3. 擅长渲染半透明表面
      4. 在渲染简单应用时快得多
      5. 处理动态光照会有性能问题(不过已经有许多新技术使得前向渲染中的动态光照性能几乎达到和延迟渲染相同的水平)
      6. 支持MSAA
    延迟渲染具有如下特点:
      1. 着色发生在延迟环节
      2. 使用GBuffer进行合成。GBuffer本质上是一组图像,引擎将信息存储在GBuffer中,然后将部分内容延迟到之后渲染。例如着色和光照不会和几何体渲染同时完成,引擎先渲染几何体,之后会渲染光照并将结果与之前渲染的几何体进行混合
      3. 擅长渲染动态光照
      4. 擅长提供稳定、可预测的高质量效果和高性能
      5. 在涉及到开启/禁用功能时会更加灵活,但涉及到表面属性时就没有那么灵活了(因为延迟了渲染,所以它拥有的信息总量不如前向渲染。例如,在之后渲染光照时,它就不再拥有之前渲染几何体时所能得到的所有信息了,可供渲染光照使用的信息变少了)
      6. MSAA不可用,完全依赖TAA

本文固定链接: https://www.jianshu.com/p/3525e6d0fee9
转载请注明: EnigmaJJ 2018年10月21日 于 发表

你可能感兴趣的:(Unreal Engine Real-Time Rendering Class(一))