虚幻引擎VR游戏开发02 | 性能优化设置

news2024/11/15 19:41:42

常识:VR需要保持至少90 FPS的刷新率,以避免用户体验到延迟或晕眩感。以下是优化性能的一系列设置(make sure the frame rate does not drop below a certain threshold)

In project setting-> (以下十个设置都在project setting中)

1.Platforms-Windows -> Default RHI:DirectX12

0)Default RHI

Default RHI指的是“默认渲染硬件接口”(Default Rendering Hardware Interface), RHI 是Unreal Engine用来抽象不同图形API(如DirectX、Vulkan、Metal、OpenGL等)的接口层。

"抽象不同图形API" 是指在编程和软件开发中,通过定义一个统一的接口层来屏蔽底层的具体实现细节,使得上层代码不直接与这些具体的实现交互,而是通过该接口与底层进行交互。

1)什么是图形API?

图形API(Application Programming Interface)是指一组用于与图形硬件进行交互的函数和工具。常见的图形API包括:

  • DirectX(主要用于Windows)DirectX 12是由微软(Microsoft)开发的多媒体编程接口(API),专门用于Windows操作系统。它是DirectX系列的一部分,主要用于游戏开发和其他高性能图形应用程序。DirectX 12的主要目标是提高图形性能、降低CPU的负担,并为开发者提供更精细的控制权,以便他们能够更有效地利用现代图形硬件的资源。
  • Vulkan(跨平台)
  • Metal(用于Apple设备,如macOS和iOS)
  • OpenGL(跨平台,但逐渐被Vulkan取代)

每种图形API都有自己的一套接口和实现方式,但它们的基本功能都是相似的,比如渲染三维图形、处理着色器、管理纹理和缓冲区等。

2)举个例子

假设你要在Unreal Engine中渲染一个三角形。对于不同的图形API,这可能会有不同的代码和步骤:

  • 在DirectX 12中,你可能需要设置渲染目标、配置管线状态对象(PSO)、绑定资源、然后提交渲染命令。
  • 在Vulkan中,你可能需要创建命令缓冲区、设置渲染通道、绑定着色器资源、然后提交命令。

尽管这些API的细节和调用方式不同,Unreal Engine通过RHI将它们抽象为一个统一的接口。开发者只需调用一个通用的函数(比如DrawTriangle),RHI会根据当前使用的图形API选择合适的实现并执行相应的操作。

d74759c972d64f3eb1117929b4464a70.png

2. Platforms-Windows -> sm6

D3D 12 Targeted Shader formats  -> enable sm6

sm6 代表Shader Model 6,是DirectX 12支持的一种高级着色器模型。Shader Model 6引入了许多改进和新特性,如更好的优化、支持高级数学操作、改进的内存管理和对硬件光线追踪的支持(当与DirectX Raytracing结合使用时)。

3. Project -> Target Hardware -> Desktop Scalable

Target Hardware (optimize project setting for)   -> Desktop Scalable

(可选项有mobile和desktop,根据需求平台选择)

4.Engine - Rendering -> Disable allow static lighting

禁用static lighting之后,关卡构建时间变短

  • 关闭 Allow Static Lighting 后,不再需要为静态光源生成光照贴图,这将显著减少关卡构建时的光照构建时间。这对开发周期短、需要频繁迭代的项目来说可能是个优点。

阴影细节和全局光照效果可能质量下降

  • 静态光照通常提供高质量的阴影、光照和全局照明效果。关闭后,必须依赖动态光照或其他实时技术,这可能导致某些光照效果的质量下降,尤其是在阴影细节和全局光照方面。
  • 另外,一些高级的光照特性,如光照反弹(Light Bounce)等,可能需要额外的设置或额外的计算资源来实现类似效果。

关闭静态光照后,性能不一定会提高,具体效果取决于场景的复杂性和你的光照设置。这里是一些关键因素和影响:

1. 静态光照与动态光照的区别

  • 静态光照(Static Lighting)通常在构建(Build)时预先计算并烘焙到光照贴图中。这种光照在运行时几乎不占用任何计算资源,适合用于静态场景。
  • 动态光照(Dynamic Lighting)在每一帧都实时计算,适合处理移动物体、实时阴影等效果,但会消耗更多的CPU和GPU资源。

2. 关闭静态光照的影响

  • 无预计算光照:关闭静态光照后,光照不再预先烘焙,所有的光照效果都需要实时计算。这通常会增加运行时的计算开销,特别是在使用复杂的光照和阴影时。
  • 减少光照贴图开销:静态光照使用光照贴图,这些贴图需要存储在内存中。如果你的场景有大量的静态光源和光照贴图,关闭静态光照可以减少内存和磁盘空间的使用,加载时间也可能变短。

3. 性能影响

  • 实时光照的成本:如果你关闭了静态光照并完全依赖动态光照,GPU和CPU的负载会增加,特别是在复杂的场景中。这可能会导致帧率下降,尤其是在中低端硬件上。
  • 混合光照场景:在某些情况下,关闭静态光照并使用一些混合的光照方案(例如,使用实时阴影、光探针等)可能会优化性能,尤其是在减少光照贴图存储和加载时间的情况下。
  • 光照复杂度和场景规模:如果场景的光照复杂度较低,关闭静态光照可能对性能影响不大,甚至可能提高性能,因为省去了光照贴图的加载和存储。然而,在光照复杂度高的场景中,实时光照计算的负担可能会导致性能下降。

在做出决定前,最好在你的目标硬件上进行性能测试,观察不同设置下的性能表现。

根据项目灵活设置 

在VR交互项目中,Dynamic Lighting 通常是必要的,尤其是在场景需要动态光源或实时阴影变化的情况下。然而,由于VR项目对性能的高要求,动态光照的使用需要谨慎规划和优化。对于高交互性、高沉浸感的VR项目,动态光照能显著提升视觉体验,但在性能受限的硬件上,可能需要通过混合光照或其他优化技术来找到最佳平衡点。

如果你的VR项目中用户只能在几个预定义的点之间移动,而不是自由移动,动态光照的重要性就降低了。如果场景中没有移动的光源或需要实时阴影变化的对象,那么完全可以依靠静态光照来处理大部分的光照需求。

5. Engine - Rendering -> disable forward shading

因为本文示例中禁用了static lighting. 而Deferred ShadingDynamic Lighting 的最佳选择,特别是在场景中有许多光源或者需要复杂光照效果的情况下。它能够更高效地处理实时光照、阴影和其他动态效果,而不会显著影响性能。如果你的项目需要在多个光源下实现实时光照变化和高质量阴影效果,使用 Deferred Shading 是最合适的渲染方式。

Forward Shading 和 Deferred Shading 简介:

  1. Forward Shading

    • Forward Shading 是一种较为传统的渲染路径,适用于场景中光源数量相对较少的情况。它的优势包括较低的渲染开销和更高的抗锯齿效果(如多重采样抗锯齿 MSAA)。
    • Forward Shading 通常在虚拟现实(VR)或需要严格控制渲染性能的场合使用,因为它可以提供较好的性能表现。
    • 它在处理透明物体和复杂材质时较为有效,适合场景中有大量透明材质或需要高质量抗锯齿的项目。
  2. Deferred Shading

    • Deferred Shading 是一种更现代的渲染路径,允许场景中有大量光源,而不会显著影响性能。这是因为光照计算是在一个单独的延迟阶段进行的,而不是在几何渲染时完成的。
    • Deferred Shading 可以处理更多的光源,特别是在复杂的场景中,这是它的主要优势之一。
    • 由于 Deferred Shading 的架构特点,它不支持一些 Forward Shading 专属的特性,如MSAA。不过它适合高复杂度场景的光照处理。

Disable Forward Shading 的效果:

  1. 启用 Deferred Shading

    • 关闭 Forward Shading 后,虚幻引擎会切换到使用 Deferred Shading。这将允许引擎更高效地处理场景中大量的动态光源,尤其是在光源数量较多的复杂场景中。
  2. 影响性能和光照处理

    • Deferred Shading 能更高效地管理和渲染多个光源,但在透明材质处理和抗锯齿方面可能不如 Forward Shading。这意味着在某些情况下,可能会导致性能下降,特别是在处理复杂的透明物体时。
    • 对于需要处理大量光源的场景,Deferred Shading 可以带来更好的光照效果和性能。
  3. 限制特性

    • 禁用 Forward Shading 后,项目将无法使用 Forward Shading 提供的一些特性,如MSAA。对于需要这种高质量抗锯齿效果的项目,这可能是一个缺点。
  4. 光照和材质效果

    • 在使用 Deferred Shading 时,项目中的光照和材质效果会更加复杂和多样化,特别是涉及到全局光照和屏幕空间反射等高级渲染特性。

何时禁用 Forward Shading:

  • 复杂场景和光照:如果你的项目包含复杂的光照设置,或你需要在场景中使用大量动态光源,禁用 Forward Shading 并使用 Deferred Shading 可能是最佳选择。
  • 高端设备或主机平台:在图形处理能力较强的平台(如高端PC或主机)上,Deferred Shading 通常是首选,因为它能处理更复杂的光照和材质效果。

总结:

禁用 Forward Shading 意味着启用 Deferred Shading,这将使引擎更好地处理复杂场景中的大量光源,同时也可能在透明材质处理和抗锯齿效果上有所牺牲。具体是否禁用应根据项目的复杂度、性能要求以及目标平台的特点来决定。

6. Engine - Rendering -> Reflection-> 

reflection Method: Lumen

reflection capture resolution  128 ->96/64

8. Engine - Rendering ->Hardware ray tracing -> support hardware ray tracing

enable support hardware ray tracing

disable ray trace shadows && ray trace skylight (they are too expensive) (even you render with 4090!)

  • Support Hardware Ray Tracing 是一个全局开关,用于启用Unreal Engine对硬件加速光线追踪的支持。开启后,相关的光线追踪效果才能发挥作用。
  • Ray Traced Shadows 是一个具体的光线追踪功能,用于生成更精确、柔和且物理上更准确的阴影。
  • Ray Traced Skylight 是另一个具体的光线追踪功能,用于计算来自天空光的全局照明效果,提升间接光的真实感。

如果你只开启了Support Hardware Ray Tracing但没有开启任何具体的光线追踪效果:

  • GPU会支持光线追踪,但不会进行相关计算:因为没有启用任何具体的光线追踪功能(如阴影或全局照明),GPU虽然支持光线追踪,但没有实际执行这些计算任务。你的场景将继续使用传统的光栅化方法渲染阴影和照明。

  • 其他光线追踪功能:虽然你没有启用Ray Traced Shadows和Ray Traced Skylight,但如果你启用了其他光线追踪功能(如Ray Traced Reflections(反射)或Ray Traced Ambient Occlusion(环境遮蔽)),那么这些功能仍然会受益于硬件光线追踪的支持。

在Unreal Engine的项目设置中,不同版本可能会有一些变化或简化。虽然在项目设置里可能没有直接显示“Ray Traced Reflections”和“Ray Traced Ambient Occlusion”,但这些功能实际上仍然存在并可以在材质和后期处理卷中启用它。

1. Ray Traced Reflections(反射)

  • 在哪里控制: 虽然项目设置中没有直接列出“Ray Traced Reflections”选项,但你可以在材质和后期处理卷中控制它。
  • 启用方法:
    1. 后期处理卷(Post Process Volume): 在场景中添加一个后期处理卷,确保它的Unbound选项被勾选(这样它会影响整个场景)。
    2. 在后期处理卷的设置中,找到“Reflections”部分。
    3. 将“Reflection Method”设置为Ray Tracing
    4. 你还可以调整反射的质量和样本数量以平衡性能和视觉效果。

2. Ray Traced Ambient Occlusion(环境遮蔽)

  • 在哪里控制: 类似于Ray Traced Reflections,这个设置通常在后期处理卷中找到。
  • 启用方法:
    1. 在后期处理卷的设置中,找到“Ambient Occlusion”部分。
    2. 将“Ambient Occlusion Method”设置为Ray Tracing
    3. 调整相关参数(如IntensityRadius)以获得所需的效果。

3. 其他设置(如Texture LOD和Path Tracing)

  • Texture LOD: 这是与纹理细节相关的设置,控制在光线追踪渲染中使用的纹理细节级别。
  • Path Tracing: 这是一个高级的全局光照渲染模式,使用路径追踪来生成极其逼真的光照效果,但它主要用于静态渲染(例如电影级别的场景或静态图像),而非实时渲染。

9. rendering ->Nanite -> enable Nanite

10. rendering ->Anti-Aliasing Method

  • FXAA: 最适合低性能影响的情况,画面可能稍模糊。
  • TAA: 适合动态画面和平滑边缘,但可能导致轻微的模糊或鬼影。
  • MSAA: 提供高质量的边缘抗锯齿,但性能开销较大。
  • TSR: 在高分辨率下提供优质图像,并优化了传统抗锯齿方法的不足之处。

MSAA(multisample anti-aliasing/antialiasing by supersampling)

MSAA就是一个像素划分成很多个小的像素,划分成4*4甚至是100*100.  它不是靠提高分辨率直接解决采样问题,像素划分只是为了近似一个合理的覆盖率。

------------------------混合光照方案补充(待更新)-----------------------

1.实时阴影

2.光探针

光探针(Light Probe) 是一种用于捕捉和存储场景中光照信息的技术。它们通常用于在动态光照和静态光照之间找到平衡,特别是在混合光照场景中。光探针能够为场景中的动态物体提供逼真的间接光照,而无需实时计算复杂的全局照明。

光探针的工作原理

光探针通常是放置在3D空间中的一个或多个点,这些点用于捕捉环境的全局光照信息。这个信息包括来自周围环境的间接光照,比如来自天光、反射光等。光探针的作用主要体现在以下几个方面:

  1. 捕捉环境光照

    • 光探针会捕捉并存储场景中某些点的光照数据,包括光的颜色、方向和强度。这个数据可以被动态物体使用,以获得与环境一致的照明效果。
  2. 影响动态物体

    • 当场景中的动态物体(例如移动的角色或物体)移动到光探针的范围内时,它会使用探针的数据来调整自己的光照,模拟出更逼真的环境光和间接光照效果。
    • 例如,一个角色移动到阴影区域时,光探针可以提供较低的光照信息,从而使角色变得更加阴暗。
  3. 球谐函数(Spherical Harmonics)

    • 光探针通常使用一种叫做球谐函数(Spherical Harmonics)的技术来存储和处理光照数据。这种方法可以有效地表示复杂的光照环境,并在渲染时快速应用于动态物体。

应用场景

  • 混合光照场景:在使用静态光照贴图的同时,光探针可以为动态物体提供间接光照。这种方法减少了实时光照计算的开销,同时保留了光照的真实性。
  • 大型开放世界:在一些大型开放世界游戏中,场景的光照通常非常复杂。光探针可以帮助动态物体与静态环境的光照更好地融合,使整个场景的视觉效果更加统一。

优势和局限

  • 优势

    • 性能优化:通过使用预先捕捉的光照数据,减少实时计算的开销,特别是在需要处理复杂的间接光照时。
    • 一致性:能够提供与环境一致的间接光照,使动态物体与静态场景更好地融合。
  • 局限

    • 精度有限:光探针通常只能捕捉到低频的光照信息,对于非常细致的光照变化可能不够精确。
    • 探针布置:需要合理地布置光探针,以覆盖场景中所有可能的动态物体位置。过少的探针可能导致光照信息不准确,而过多的探针则会增加存储和处理的负担。

总结

光探针是一种有效的技术,用于在不牺牲性能的前提下,提供逼真的间接光照效果,特别是在混合光照场景中。通过合理使用光探针,可以在场景中实现高质量的动态光照,优化性能,同时保持视觉一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用于全栈自动化测试的最佳Python工具

我知道大多数测试人员会说Java是他们创建自动化测试的首选语言。 但是我最喜欢的是Python。为什么?为什么是Python ? Al Sweigart,《自动化那些无聊的东西》的作者,Python一直是他的首选语言,因为:它有一个温和的学习曲线。它适用于Windows…

42.哀家要长脑子了!

1.965. 单值二叉树 - 力扣(LeetCode) 深度优先搜索,看边两端的结点是不是一样的值 class Solution { public:bool isUnivalTree(TreeNode* root) {if(!root) return true;if(root->right) {if(root->val ! root->right->val || …

数字图像处理基础:图像处理概念、步骤、方式介绍

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

5.2.数据结构-c/c++二叉树详解(下篇)(算法面试题)

本章所有代码请见:5.3.数据结构-c/c二叉树代码-CSDN博客 上篇:5.数据结构-c/c二叉树详解(上篇)(遍历方法,完全二叉树)-CSDN博客 目录 1 求二叉树 第k层的节点 2 查找一个节点是否在二叉树中 3 求二叉树节点的个数 4 求二叉树…

c#笔记5 详解事件的内置类型EventHandler、windows事件在winform中的运用

为什么要研究这一问题? 事件和委托可以说是息息相关。 前面先解释了什么是委托,怎么定义一个委托以及怎么使用匿名方法来内联地新建委托。 事实上事件这一机制在c#的程序开发中展很重要的地位,尤其是接触了winform软件开发的同学们应该都知…

chapter12-异常(Exception)——(注解)——day14

444-异常处理入门 445-异常基本介绍 446-异常体系图 虚线代表 实现接口,实线代表继承 447-五大运行时异常 448-异常课堂练习 449-异常处理机制 450-tryCatch异常处理 1)如果异常发送,则异常发生后面的代码不会执行,直接进入到Catc…

接口报错403 Forbidden 【已解决】

接口报错403 Forbidden 【已解决】 在Web开发中,接口请求错误是开发者经常遇到的问题之一。其中,403 Forbidden错误尤为常见,它表明服务器理解了客户端的请求,但是拒绝执行此请求。本文将深入探讨接口请求403 Forbidden错误&#…

iMazing 3官方中文版软件新功能全面解析,最好用的ios设备管理软件

iMazing 3是一款专为iOS设备设计的全面管理软件,想要更换设备的用户,iMazing 3的数据迁移功能能确保无缝切换。iMazing 3不仅提供了强大的备份和恢复功能,确保用户数据安全无虞,还实现了设备与电脑间的高效文件传输。无论是照片、…

浅析SVG无功补偿器在新能源发电中的应用

引言 随着新能源技术的不断进步,光伏发电已经崛起为未来能源发展的一个关键领域,各地纷纷建立起越来越多的光伏电站。然而,光伏发电领域仍面临诸多挑战,包括电网电压不稳定、发电过剩以及电压波动等问题。在这样的背景下&#xf…

《零散知识点 · Kafka 知识拓展》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

【教学类-56-04】数感训练——数字04(中2班寻找自己的学号数字,1号-29号,出现5-10\10-15\15-20次)

背景需求: 今天有个客户购买“学号版的数感训练” 我找到文件夹,发现里面没有1-40号的学号数感,只有上学期为重4班制作的1-31号(其中缺了1和7号)的数感训练模版 于是用代码重新生成 【教学类-56-03】数感训练——数字…

HarmonyOS开发实战( Beta5版)Swiper高性能开发指南

背景 在应用开发中,Swiper 组件常用于翻页场景,比如:桌面、图库等应用。Swiper 组件滑动切换页面时,基于按需加载原则通常会在下一个页面将要显示时才对该页面进行加载和布局绘制,这个过程包括: 如果该页面…

学习算法需要数学知识吗?

目录 算法与数学:看似不可分割的关系常见算法中的数学元素案例分析:不需要高深数学知识的算法1. 二分查找2. 深度优先搜索 (DFS)3. 动态规划:斐波那契数列 如何在有限的数学背景下学习算法1. 专注于算法的逻辑和过程2. 可视化算法流程3. 从简单的实现开始,逐步优化4. 学习算法设…

centos7使用ifconfig查看IP,终端无ens33信息解决办法

1.问题描述 大概有十几天没用虚拟机,最后一次用忘记关闭虚拟机系统了;突然,发现我用远程连接工具,连接不上,去到虚拟机内部查看IP发现终端竟然没有输出enss33地址信息,额,就像下面这样。 2.解决…

android so的加载流程(Android 13~14)

序言 分析环境: Android 13~14 其实大佬 << 安卓so加载流程源码分析 >> 已经写得非常好了,我就没必要再写了 建议读者看看这篇文字,比较新,质量很高<< 安卓so加载流程源码分析 >> 为什么要分析 android so的加载流程 ??? 我想明白 so是怎么打…

无人机之反制系统篇

无人机的反制系统是一个复杂而精细的系统&#xff0c;旨在应对无人机的不当使用或潜在威胁。该系统通常由多个关键部分组成&#xff0c;包括搜索系统、光电跟踪系统、射频干扰系统及显控单元等&#xff0c;这些部分共同协作以实现对无人机的有效反制。以下是对无人机反制系统的…

SpringBoot开发——初步了解SpringBoot

文章目录 一、SpringBoot简介1、什么是Spring Boot2、Spring Boot的优点3、Spring Boot功能 二、Spring与Spring Boot对比三、Spring Boot与Spring MVC四、Spring Boot体系结构五、Springboot Initializr1、Spring Initializr2、Spring Initializr模块 一、SpringBoot简介 1、…

docker ps 得到的ports列的含义

前言 每次使用docker ps 查询容器运行情况的时候就很容易搞混ports列的含义&#xff0c;今天浅记一下 docker ps ports列含义 首先看docker ps的查询结果显示&#xff1a; CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 容器ID …

Axure中继器教程及案例详解

Axure RP 是一款强大的原型设计工具&#xff0c;广泛应用于产品设计、UI/UX 设计及交互设计中。中继器&#xff08;Repeater&#xff09;作为 Axure 中的一个重要元件&#xff0c;以其强大的数据处理和动态交互能力&#xff0c;成为设计师们不可或缺的工具。本文将从中继器基础…

LLM agentic模式之multi-agent: ChatDev,MetaGPT, AutoGen思路

文章目录 Multi-agentChatDev设计阶段编码阶段测试阶段文档编写 MetaGPTSOP模式下的Agent通信协议带执行反馈的迭代编程 AutoGenconversable agentsConversation ProgrammingAutoGen的应用 参考资料 Multi-agent ChatDev ChatDev出自2023年7月的论文《ChatDev: Communicative…