Unreal Engine Real-Time Rendering Class(二)

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

Before Rendering and Occlusion

  • 有三个主要的线程:CPU线程、在CPU上执行的绘制线程、GPU线程。它们是同步的,但是并不是在同一个时间点处理同一帧的内容。CPU是最先执行的,因为它必须解决渲染之前发生的问题。假设帧率是30,这意味着实际的渲染是从66毫秒开始的:
    Unreal Engine Real-Time Rendering Class(二)_第1张图片
  • Frame 0 - Time 0 - CPU:
      在开始渲染前必须知道一切对象的位置
      需要计算所有的逻辑和变换,包括但不限于:
        1. 动画
        2. 模型和对象的位置
        3. 物理
        4. AI
        5. 对象的创建和销毁,隐藏和显示
      将计算结果传递到CPU上的绘制线程

  • Frame 1 - Time 33ms - Draw Thread (mostly CPU):
      有了对象的位置之后,在开始渲染前需要计算究竟哪些对象是可以看到的,我们应该只渲染那些可以看到的对象,这主要由CPU处理,但GPU也会处理一部分。这意味着我们需要一个遮挡过程(occlusion process),遮挡过程会构建一个可见对象列表。遮挡过程是逐对象进行的,而不是逐三角面。遮挡过程根据以下四个阶段按顺序执行:
      1. 距离剔除
      2. 视锥体剔除
      3. 预计算可见性
      4. 遮挡剔除(最精确的一步)
      距离剔除:移除所有离摄像机距离超过X的对象(默认不开启)
      视锥体剔除:检测哪些对象位于摄像机的视锥体内
      预计算可见性:会将场景细分为网格,每个网格单元都记录了在网格单元位置哪些对象是可见的,哪些对象是不可见的(默认不开启)

    Unreal Engine Real-Time Rendering Class(二)_第2张图片
    预计算可见性将场景细分为网格
      遮挡剔除:精确计算每个模型的可见性,对性能的影响很大

  • 遮挡剔除性能关注点:
      1. 设置距离剔除
      2. 场景中如果有超过1万~1万5千个对象,就可能会有性能影响
      3. 绝大部分情况下会对CPU性能产生影响,但一些情况下对GPU性能也会有影响
      4. 大型开放式场景没法很好的利用遮挡剔除
      5. 几乎任何可见对象都能被遮挡,包括粒子
      6. 大型的网格模型很少会被遮挡,它们会增加GPU的负担。但是将若干小的网格模型组合成大型的网格模型可以减少CPU的负担
      最终将需要渲染的对象列表传递到GPU

本文固定链接: https://www.jianshu.com/p/d53b6a412a6d
转载请注明: EnigmaJJ 2018年11月04日 于 发表

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