1. 帧率(每一帧耗时)(90fps,11.11ms)
  2. 分辨率(每一帧的清晰度)
  3. 每像素的光照数量
  4. 阴影处理的方式
  5. 材质的复杂度
  6. 抗锯齿的方式

这里用到两个案例项目,内容量非常多,务必下载案例研究
image.png

复制并粘贴此虚幻商城兑换码,获取此课程的项目文件。 4PXEW-TMCVR-ZMLMU-3ZW8X 7GNSF-7WJYV-W8QHB-2WKBG

VR需要的:

  • 高帧率
  • 高分辨率

光照

影响渲染的最大因素之一,尤其对于VR,尤其是移动端VR
在runtime是不可调整属性的,所以最好是减少它的数量,尤其是动态光
光照分为三种

static

(一个好的artist 可以只用它就创造很真实的画面)

  • 在开发过程中烘焙,开销固定
  • 只会影响项目使用空间和迭代时间
  • 高效率低质量,不影响动态物体
  • light shape
    • Point
    • Directional
    • Spot
    • Rectangle

static区别于其他的就是阴影烘焙到表面的方式不同

stationary

  • 介于static和dynamic
  • 对所有物体投射光照
  • 打造预计算的反射光照
  • 注意:当stationary和dynamic出现重叠,会造成巨大的消耗

    dynamic

  • 在运行时计算

  • 一般用于移动的物体,比如手电筒或者火把
  • 投射动态阴影,因此开销十分大,尽量避免
  • PC平台
    • 使用最大绘制距离 max draw distance
    • 使用最小的影响距离 max distance fade range

Reflect Capture 反射捕获

获取场景360度的截图,将其光照细节应用到动态和静态物体上
确保:Reflection capture 不被设置为捕捉每一帧的画面

最佳光照实践

每个物体的渲染消耗取决于多少光照碰到了它
所以室外场景中的太阳就会让所有物体增加开销

所以很常见的做法是,限制本地光照的衰减半径(Attenuation radius),这样就可以限制物体收到光照的数量。

渲染

Deffered Rendering

依赖屏幕空间校准纹理,或者渲染目标储存的数据 屏幕中的每个像素都储存纹理属性

  • Material Color
  • Roughness
  • Surface Normals

光照解决方案必须更加保守,即使物体只有一个角被光照touch,整个物体都要被多计算一次light。
deferred shading 有助于解决这个问题——光照被写道pixel level
让复杂的场景更加高效被渲染表现

缺点

读取和写入更多内存,正比于分辨率

传统的延迟渲染通道

  1. 所有物体通过pixel shading输出材质和属性并输入 G Buffer
  2. Shader使用 G Buffer 和光照信息进行计算

优点

  1. 让复杂的场景更加高效被渲染表现
  2. 抗锯齿
    1. 使用MSAA多重采样去渲染G Buffer,但是UE不支持,而且性能很差
    2. 使用Temporal Anti Aliasing 会有几帧的延迟,还有模糊和拖尾的问题
      1. 和Deffered Shading一起终于可以解决更多AA问题,
    3. FSAA,也对VR有影响

前向渲染 Forward Rendering

在VR端是比较好的选择
集群前向渲染是UE4中对传统FR的改良
而且可以和硬件中的MSAA配合

Note for MSAA

只能解决源锯齿问题,primitive aliasing,但是对于纹理和着色锯齿没有用
我们需要使用Mipmap(必须是二次幂,但不一定是正方形)和高品质过滤解决texture aliasing

镜面微光的锯齿 Specular Shimmering
UE4 使用 Composite texture特性解决

最佳渲染实践

高品质PC效果或者复杂的视觉特效——Deffered Rendering with FXAA
移动端——Forward Rendering with MSAA

Shader

以前可以手写Shader,但是这个过长太复杂无聊
现在UE提出 使用一个Uber Shader 来应用通常的实例

Shader Permutation 着色器排列
使用很长的编译时间,可以自动生成,提供高效结点。

移动端优化

关闭这些
image.png

Forward Shading includes

所有这些资源都被打包到一个着色器通道

  • Shadings
  • Light types
  • Material types
  • Tone Mapping

Deferred Shading includes

将它们放到不同的通道中

  • Lighting
  • Tone Mapping

材质最佳实践

使用较少的材质,满足不同的需求。
让GPU不频繁的切换Shader能够提高效率。

image.png

Mesh

一般让大多数物体都拥有超过300个三角形
而不是让一个几何体拥有太多mesh

如果有很多小物体需要经常被调用,那么可以把它们打包在一起,render with a single draw call

Occlusion Culling

遮蔽剔除,是一个实时过程,剔除看不到的物体
image.png
只有当场景中遮挡物体多的时候,才有用,因为它本身也有性能消耗
一般推荐关闭UE自己默认打开的Occlusion Culling ,自己去观察渲染过程的性能损耗
一个替代项:
PreComputed Visibility Volume 预计算可视性体积
基于玩家的摄像头,保存actor的世界位置的可见性。
对传统移动游戏非常有效,尤其是对于VR游戏中的绘制数量的降低。