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

常识: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.rhkb.cn/news/420093.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强烈推荐!分享5款ai论文生成软件

在当今学术研究和写作领域,AI论文生成工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿,还能进行内容优化、查重和排版等操作。以下是五款值得推荐的AI论文生成软件,特别是千笔-AIPassPaper。 ### 千笔-…

C++ —— 关于string类

目录 1. auto和范围for 1.1 auto关键字 1.2 范围for 2. string的三种遍历方式 3. string类的常用接口说明 3.1 成员函数 3.2 Iterators:(迭代器) 3.2.1正向迭代器和反向迭代器 3.3 Capacity(容量) 3.4 Modifiers&#x…

智算时空 重塑视界│智汇云舟2024视频孪生产品发布会圆满举行,多个“全球首款”重磅亮相

​秋风送爽,丹桂飘香。9月6日,由北京智汇云舟科技有限公司主办(简称:智汇云舟),北京北科软科技有限公司(简称:北科软)、北京恒升联合科技有限公司(简称&#…

Leetcode 236-二叉树的最近公共祖先

同剑指offer 68-II 二叉树的最近公共祖先/lcr 194 题目描述 题目转载自LeetCode 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x&#xff0…

【Rust】Mdbook插件开发和分享——多图浏览和多语言代码

mdbook-image-slider 受DevExpress文档多图浏览的启发,我开发这个插件,在查看多个图片和图片的描述的时候非常方便 项目地址:https://github.com/VinciYan/mdbook-image-slider.git 特点 鼠标置于图片查看区域时显示切换图片按钮鼠标点击图…

VS Code 文件定位功能

1、取消“当前打开文件”的自动定位功能。 设置 ->搜索 Explorer: Auto Reveal -> 将配置改为 false 2.在vs2017中定位文件 Tools->Option->Projects And Solutions->General, tick “track Active Item in Solution Explorer” 工具-> 选项->项目和…

iOS——GCD再学习

GCD 使用GCD好处,具体如下: GCD 可用于多核的并行运算;GCD 会自动利用更多的 CPU 内核(比如双核、四核);GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程)&#xff1b…

华为手机找不到wifi调试?不急,没有wifi调试一样可以进行局域网模式调试

最近小黄在使用uniapp启动无线调试的时候突然发现华为的手机突然找不到wifi调试了,那么我们怎么进行无线调试呢? 其实他只是找不到开关而已,正常使用就行。 1.使用数据线连接手机。 打开cmd命令行执行:adb tcpip 5555 2.再执行ad…

物联网之Arduino开发环境的下载与安装、ESP32开发环境的下载与安装、常见环境配置问题的解决办法、COM端口不可用的解决方法

MENU 前言下载和安装Arduino安装ESP32开发环境常见问题JSON下载失败和下载速度慢配置解释器没有发现端口检测到端口,但是有警告图标,端口无法使用 前言 想玩开发板必须得写代码,要不然Arduino不知道怎么运行,Arduino的开发语言是C…

❤《实战纪录片 1 》原生开发小程序中遇到的问题和解决方案

《实战纪录片 1 》原生开发小程序中遇到的问题和解决方案 文章目录 《实战纪录片 1 》原生开发小程序中遇到的问题和解决方案1、问题一:原生开发中 request请求中返回 的数据无法 使用this传递给 data{}中怎么办?2、刚登录后如何将token信息保存&#xf…

用于客户支持的 GenAI:探索 Elastic Support Assistant

作者:Chris Blaisure, Cory Mangini 我们很高兴地宣布推出 Elastic 的支持助手。本博客将带你了解我们最新的生成式 AI 工具以及它可以帮助你使用 Elastic 技术的一些常见场景。 Elastic 支持助手现已在 Support Hub 上可用 今天,我们宣布 Elastic 支持…

每日一题,力扣leetcode Hot100之206反转链表

原来的链表是1-2-3-4-5-null 反转后是5-4-3-2-1-null 只需要循环遍历,并且借一个temp便可以完成反转 class Solution:def reverseList(self, head: ListNode) -> ListNode:cur, pre head, Nonewhile cur:tmp cur.next # 暂存后继节点 cur.nextcur.next pre…

【软件测试】盒木进销存管理系统 需求说明书

目录 1 引言 2 项目概述 3 平台、角色和权限 3.1 Web端 4 Web端需求 4.1 登录/注册页面 4.1.1 业务描述 4.1.2 需求描述 4.1.3 行为人 4.1.4 UI页面 4.1.5 业务规则 4.2 首页 4.2.1 业务描述 4.2.2 需求描述 4.2.3 行为人 4.2.4 UI界面 4.2.5 业务规则 4.3报…

回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测+交叉验证

回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测交叉验证 目录 回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测交叉验证效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现基于贝叶…

第144天:内网安全-Linux权限维持OpenSSHPAM后门SSH软链接公私钥登录

目录 案例一: 权限维持-Linux-替换版本-OpenSSH 后门 案例二: 权限维持-Linux-更改验证-SSH-PAM 后门 案例三: 权限维持-Linux-登录方式-软链接&公私钥&新帐号 ssh软链接 公私钥 新帐号 案例一: 权限维持-Linux-替换…

记录|C#的软件图标更换

目录 前言一、软件界面的图标二、软件外的图标更新时间 前言 参考文章: 自己开发出的软件,肯定要更换图标,无论是软件打开前还是软件上的。如下图: 一、软件界面的图标 直接在Form的属性中进行icon的更换【如下图:】…

android kotlin 基础复习 继承 inherit

1、新建文件kt 2、代码: /**用户基类**/ open class Person1(name:String){/**次级构造函数**/constructor(name:String,age:Int):this(name){//初始化println("-------基类次级构造函数---------")println("name:${name},age:${age}")} }/**子…

线程的状态(java)

“苦? 何止是苦~~~~~” 本期内容来分享一下线程状态相关的知识哦!!! 对于进程来说,进程是有两种状态的。 一种是就绪状态:正在CPU上执行,或者随时可以去CPU上执行的。 另一种是阻塞状态&…

PDF 全文多语言 AI 摘要 API 数据接口

PDF 全文多语言 AI 摘要 API 数据接口 PDF / 文本摘要 AI 生成 PDF 文档摘要 AI 处理 / 智能摘要。 1. 产品功能 支持多语言摘要生成;支持 formdata 格式 PDF 文件流传参;快速处理大文件;基于 AI 模型,持续迭代优化;…

自己动手实现mybatis的底层框架(不用动态代理直接用执行器、用动态代理自己实现。图文分析!)

目录 一.原生mybits框架图分析 自己实现Mybatis框架的分析 两种框架操作数据库的方法: 二.搭建开发环境 1.先创建一个maven项目 2.加入依赖(mysql dom4j junit lombok) 三.mybatis框架的设计思路 具体实现过程 3.1实现任务阶段 1- 完成读取配置文件&#x…