虚幻引擎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.xdnf.cn/news/1522985.html

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

相关文章

基于php+vue+uniapp的医院预约挂号系统小程序

开发语言:PHP框架:phpuniapp数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:PhpStorm 系统展示 后台登录界面 管理员功能界面 用户管理 医生管理 科室分类管理 医生信息管理 预…

机器人外呼有哪些优势?

机器人外呼,作为一种结合了计算机技术和人工智能技术的自动化工具,具有多重显著优势。以下是其主要优势的详细阐述: ### 1. 高效性 * **大幅提升工作效率**:机器人外呼可以全天候、不间断地进行工作,不受时间、地点和…

【优质源码】3D多人在线游戏,前端ThreeJS,后端NodeJS

3D多人在线游戏 【源码】3D多人在线游戏源码,前端ThreeJS,后端NodeJS,完整源码。 游戏画面 启动方法 先启动服务器端。 在目录,3D-multi-player-main\3D-multi-player-main\nodeapps\blockland 中,运行&#xff1a…

Elasticsearch之原理详解

简介 ES是使用 Java 编写的一种开源搜索引擎,它在内部使用 Lucene 做索引与搜索,通过对 Lucene 的封装,隐藏了 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API 然而,Elasticsearch 不仅仅是 Lucene&#…

设计模式及创建型模式-python版

1 架构模式与设计模式 架构模式搞层次的设计模式, 描述系统整体结构和组织方式,设计模式是针对某个问题的解决方案,是一种解决问题的思路。 2 设计模式的分类 2.1 创建型模式 单例模式,工厂方法模式,抽象工厂模式&…

JVM2-JVM组成、字节码文件、类的生命周期、类加载器

目录 Java虚拟机的组成 字节码文件 字节码文件打开方式 字节码文件的组成 基本信息 Magic魔数 主副版本号 常量池 字段 方法 属性 字节码常用工具 javap jclasslib插件 Arthas 类的生命周期 概述 加载阶段 连接阶段 验证 准备 解析 初始化阶段 类加载器…

linux 下一跳缓存,early demux(‌早期解复用)‌介绍

3.6版本以后的下一跳缓存 3.6版本移除了FIB查找前的路由缓存。这意味着每一个接收发送的skb现在都必须要进行FIB查找了。这样的好处是现在查找路由的代价变得稳定(consistent)了。3.6版本实际上是将FIB查找缓存到了下一跳(fib_nh)结构上,也就是下一跳缓存下一跳缓存…

ESP32无线WiFi芯片模组,设备物联网连接通信,产品智能化交互升级

在数字化浪潮的推动下,我们正步入一个万物互联的新时代。物联网(IoT)技术,作为连接物理世界与数字世界的桥梁,正逐渐渗透到我们生活的每一个角落。 乐鑫正通过其创新的无线WiFi芯片模组,为这些领域的发展提…

界面控件DevExpress中文教程:如何使用AI扩展Excel计算?

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

Elasticsearch的Restful风格API

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 1、Restful及JSON格式 RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用 XML 格式定义或 JSON 格式定义。R…

STM32CubeMX CAN收发数据

目录 一、CAN总线 1. 差分信号 2. CAN收发器 3. CAN帧结构 4. CAN波特率设置 5. 标识符筛选 二、CubeMX配置 三、Keil代码 一、CAN总线 CAN(Controller Area Network,控制器局域网络)是一种用于车辆、工业自动化等领域的通信协议&…

springboot博客系统

基于springbootvue实现的博客系统 (源码L文ppt)4-031 4 系统设计 博客系统的整体结构设计主要分为两大部分:管理员和博主。他们的权限不同,于是操作功能也有所不同。整体结构设计如图4-2所示。 图4-2 系统结构图 4.3 数据库设…

Unity(2022.3.41LTS) - 角色控制器和3D刚体

目录 一. 角色控制 二. 3D刚体 一. 角色控制 名称:功能:坡度限制将碰撞器限制为仅爬升比指示值更陡峭(以度为单位)的斜坡。步长偏移只有当楼梯离地面比指示值更近时,角色才会爬上楼梯。此值不应大于 Character Contr…

《CounTR: Transformer-based Generalised Visual Counting》CVPR2023

摘要 本论文考虑了通用视觉对象计数问题,目标是开发一个计算模型,用于计算任意语义类别的对象数量,使用任意数量的“样本”(即可能为零样本或少样本计数)。作者提出了一个新颖的基于Transformer的架构,称为…

shell 学习笔记:变量、字符串、注释

目录 1. 变量 1.1 定义使用变量 1.2 变量命名规则 1.3 只读变量 1.4 删除变量 1.5 变量类型 1.5.1 字符串变量 1.5.2 整数变量 1.5.3 数组变量 1.5.3.1 整数索引数组 1.5.3.2 关联数组 1.4 环境变量 1.5 特殊变量 2. 字符串 2.1 单引号字符串 2.2 双引…

【32项目】基于stm32f103c8t6WIFI远程监控智慧农业大棚(含完整代码)

目录 前言 设计背景 设计原理 所需材料 JW01二氧化碳传感器介绍 YL-69土壤湿度传感器介绍 PCB及原理图 部分代码(完整代码见文章末尾) 前言 随着农业现代化的发展,智慧农业的概念越来越受到重视。智慧农业利用物联网、大数据、人工智…

计算机网络 数据链路层2

ALOHA:想发就发 CSMA 载波监听多路访问协议 CS:载波监听,在发送数据之前检测总线上是否有其他计算机在发送数据 1-坚持CSMA:主机想发送消息,需要监听信道; 信道空闲则直接传输信息; 信道忙碌则一直监听,直…

【JavaWeb】JDBCDruidTomcat入门使用

本章使用技术版本: Tomcatv10.1.25 关于javaweb相关的其他技术,比如tomcat和maven,在我的主页记录了笔记,ajax我用的是本地笔记以后再考虑上传,前端三板斧我用的菜鸟教程文档 JDBC 初识 JDBC概念 JDBC 就是使用Jav…

【深度学习 transformer】使用pytorch 训练transformer 模型,hugginface 来啦

Hugging Face是一个致力于开源自然语言处理(NLP)和机器学习项目的社区。它由几个关键组件组成: Transformers:这是一个基于PyTorch的库,提供了各种预训练的NLP模型,如BERT、GPT、RoBERTa、DistilBERT等。它…

SEO之网站结构优化(十四-内部链接及权重分配3)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客:阿幸SEO~探索搜索排名之道 7、锚文字分布及变化 前面…