当前位置: 首页 > article >正文

从画质设置看游戏引擎(其一)

前往我的博客,获取无广告,更好的阅读体验

1. 抗锯齿(Anti-Aliasing)

1.1 锯齿问题的起因

在三维模型的世界中,模型是连续的,但是屏幕像素是不连续,是离散的;
即当一个圆形显示在显示器中,显示的圆实际上是棱角分明的,若像素过少,则会出现明显的“棱角”,看起来非常不自然,这就是一种锯齿现象。

理想情况下,如果屏幕分辨率无限高,DPI越高,那么就不会出现明显的锯齿。

1.2 抗锯齿的分类及工作原理

1.2.1 MSAA(Multisample Anti-Aliasing)
  • 工作原理:MSAA是基于几何体的抗锯齿方法。它会对每个像素的边界进行多次采样,尤其是多边形边缘的像素。MSAA只对几何体的边缘部分进行采样,减少了锯齿问题,同时避免对整个场景的所有像素进行抗锯齿处理。

即对像素边缘,进行超过渲染分辨率的计算,然后向下取样,这样就会一定程度缓和边缘锯齿现象。

  • 优点:可以有效减少边缘的锯齿现象,并且不会模糊整个画面。
  • 缺点:对性能有一定的消耗,尤其是需要更多显存来存储多次采样的信息。同时,它对纹理、透明物体的效果有限。

延迟渲染难以与MSAA同时使用,延迟渲染会将几何体的信息分离到G-buffer中,MSAA无法获取器所需要的信息。

1.2.2 FXAA(Fast Approximate Anti-Aliasing)
  • 工作原理:FXAA是一种后处理抗锯齿技术,它不依赖于几何体,而是直接对渲染后的图像进行处理。它通过分析屏幕上的边缘,并对检测到的锯齿边缘进行模糊和平滑处理。

简单来说,就是对图像,进行柔和处理。

  • 优点:非常高效,几乎不会带来额外的性能消耗,适合低端硬件和需要高帧率的场景。
  • 缺点:FXAA的主要问题在于它对整个图像进行模糊处理,因此可能会导致画面变得较为模糊,特别是在细节丰富的区域,如文字和纹理。
1.2.3 TAA(Temporal Anti-Aliasing)
  • 工作原理:TAA是基于时间域的抗锯齿方法,结合多帧之间的渲染数据来平滑边缘。它利用每一帧中的移动和历史数据来减少锯齿问题,同时消除闪烁和其他动态伪影。

可以简单的理解为,对于某个物体,结合物体的前几帧的位置,对其抖动,混合,融入现在的信息,进行一种模糊化。

  • 优点:TAA可以非常有效地减少动态场景中的锯齿问题,并且在场景中物体移动时不会引入闪烁或“抖动”。
  • 缺点:可能引入轻微的模糊,尤其是在快速运动场景或对比度较高的区域。
1.2.4 SMAA(Subpixel Morphological Anti-Aliasing)
  • 工作原理:SMAA是一种结合了几何和后处理的抗锯齿技术。它使用形态学算法识别边缘并进行平滑处理,同时保留了图像中的细节。SMAA通过检测子像素级别的变化来减少锯齿,并通过特殊的算法来避免模糊化。

借助深度信息,对边缘进行处理

  • 优点:SMAA能在保证较好抗锯齿效果的同时,不像FXAA那样模糊整个画面,因此画面质量较为清晰。
  • 缺点:虽然效果优于FXAA,但在快速运动的场景中,SMAA的性能和效果可能不如TAA。
1.2.5 DLSS(Deep Learning Super Sampling)
  • 工作原理:DLSS是NVIDIA推出的一种基于人工智能的超采样技术,利用深度学习模型通过低分辨率渲染的图像预测并重建出高分辨率图像。DLSS通过在训练过程中生成的AI模型来估计每个像素的正确显示,并进行插值处理。
  • 优点:相比传统抗锯齿,DLSS能够在保持高画质的同时大幅提升帧率,适合4K或更高分辨率的显示。
  • 缺点:需要NVIDIA RTX系列的硬件支持,同时对于不同游戏需要单独优化和训练。

2. 环境光遮蔽(Ambient Occlusion, AO)

2.1 基本概念

环境光遮蔽是用来增强场景的光照效果,使物体在彼此接近时产生柔和的阴影。它模拟了光线在被遮挡时无法完全进入某些区域的现象,例如物体交接处、墙角或复杂几何体的内部。

2.2 环境光遮蔽的常见实现方法

2.2.1 SSAO(Screen Space Ambient Occlusion)
  • 工作原理:SSAO基于屏幕空间进行计算,使用场景中的深度缓冲区信息来推断哪些区域的光线会被遮挡。SSAO会在视线所能看到的区域内进行光遮蔽的计算,而不会考虑场景背后的部分。
  • 优点:性能较好,适合实时渲染的应用。
  • 缺点:由于仅考虑了屏幕空间的像素深度,SSAO会忽略场景背后的遮挡,因此可能在某些情况下产生不准确的阴影效果。
2.2.2 HBAO(Horizon-Based Ambient Occlusion)
  • 工作原理:HBAO是一种改进的SSAO算法,通过对光线遮挡的方向性进行计算,确定哪些光线在场景中的传播路径被几何体遮挡。相比SSAO,HBAO能生成更加精确的阴影效果,特别是在物体交接处和凹陷处。
  • 优点:比SSAO更精确,能生成更自然的阴影效果,适合画质要求较高的场景。
  • 缺点:性能开销较大,对低端硬件可能不太友好。
2.2.3 VXAO(Voxel Ambient Occlusion)
  • 工作原理:VXAO通过使用体素(3D像素)来表示场景,并在体素空间计算环境光遮蔽。通过体素化场景的几何体,可以更精确地模拟遮挡效应,特别是在复杂的几何结构中。
  • 优点:精度高,能够生成非常真实的光线遮蔽效果,特别适合大规模复杂场景。
  • 缺点:计算量大,适合高端硬件和对画质要求极高的游戏。
2.2.4 光线追踪环境光遮蔽(RTX AO)
  • 工作原理:光线追踪环境光遮蔽通过直接追踪光线的路径来模拟光线在场景中的遮挡和反射。相比屏幕空间技术,光线追踪环境光遮蔽不再依赖于屏幕空间,可以生成更加精确和自然的阴影效果。
  • 优点:极高的精度和真实感,特别是对复杂几何体和遮挡结构的处理非常自然。
  • 缺点:计算资源需求极大,适合拥有高性能硬件的用户。

3. 分辨率

3.1 渲染分辨率

渲染分辨率是游戏在GPU中处理和输出的图像的分辨率,它决定了最终图像的像素数量。渲染分辨率越高,画面越清晰,但对性能的要求也越高。通常我们看到的1080p、1440p、4K等都是常见的渲染分辨率。

  • 影响:高渲染分辨率可以提供更细腻的图像,特别是在显示器尺寸较大时能够更好地展示细节。然而,过高的分辨率对显卡负载较大,可能影响帧率。

3.2 渲染倍率

渲染倍率是指渲染分辨率与游戏内设置的分辨率之间的比值。
考虑到锯齿产生的原因,会有以下情况

  • 渲染倍率的提升会带来更加干净的显示效果,会极大的优化抗锯齿;
  • 渲染倍率的降低会让抗锯齿更加明显,但如果抗锯齿足够优秀,依然会有更细腻的画面;

假设均为原生分辨率;

3.3 动态分辨率缩放(Dynamic Resolution Scaling, DRS)

动态分辨率缩放技术会根据场景的复杂度和当前的GPU负载动态调整渲染分辨率,以保持帧率的稳定。例如,当场景中几何体较少时,渲染分辨率可以提高;而当场景变得复杂时,分辨率则会降低,以避免帧率下降。

  • 优点:能够在高帧率和高画质之间找到一个平衡点,特别是在复杂场景中避免帧率大幅下降。
  • 缺点:由于分辨率的动态变化,可能会导致画面细节的不稳定性,在快速切换场景时画面会忽然变得模糊。

3.4 贴图分辨率

即实际物品的分辨率

  • 当贴图分辨率大于渲染分辨率,会进行下采样;
  • 当贴图分辨率大于渲染分辨率,会进行拉伸;

4. 部分渲染特性

4.1 高动态范围(HDR)

HDR技术允许渲染出超出传统显示设备能够显示的亮度和色彩范围。通过HDR,游戏可以呈现更高对比度的画面,亮部和暗部的细节都更加丰富,同时颜色更加鲜艳。

  • 实现方式:HDR通常需要配合支持HDR显示技术的硬件(如HDR显示器)才能完全展现其效果。此外,游戏需要在渲染时生成高动态范围的图像,并通过色调映射(Tone Mapping)将其调整到显示设备能够处理的范围内。
  • 优点:HDR提供更真实的视觉体验,特别是在阴影、光照变化和丰富色彩表现方面,可以增强玩家的沉浸感。相比于SDR(标准动态范围),HDR能够提供更高的亮度范围(通常可达1000尼特甚至更高)和更广泛的色彩空间(如DCI-P3或Rec. 2020)。
  • 注意事项:在实施HDR时,需要考虑亮度的校准,以确保在不同的显示设备上都能保持一致的视觉效果。同时,开发者需确保场景中的光源和材质能充分利用HDR的优势。

4.2 色调映射(Tone Mapping)

色调映射是将HDR图像中的高动态范围色彩映射到普通显示设备所能显示的色彩范围的一种技术。它会避免场景中出现过曝或者过暗的区域,确保画面的亮部和暗部都有足够的细节。

  • 实现方式:常见的色调映射算法包括Reinhard、Filmic和ACES等,每种算法都有不同的调整方式,影响最终输出图像的视觉效果。
  • 优点:色调映射能够帮助处理动态范围的压缩,使得画面在亮度极高或极低的情况下仍然保持细节,从而提升整体画质。
  • 应用:色调映射不仅适用于游戏,还广泛应用于电影和摄影后期处理中,以确保在不同设备上呈现出最佳效果。

http://www.kler.cn/a/326225.html

相关文章:

  • ScubaGear:用于评估 Microsoft 365 配置是否存在安全漏洞的开源工具
  • 分布式cap理论学习
  • React--》如何高效管理前端环境变量:开发与生产环境配置详解
  • vue项目使用eslint+prettier管理项目格式化
  • 深入解析Javascript中的this指向
  • 模糊神经网络学习方法探讨
  • 正点原子阿波罗STM32F429IGT6移植zephyr rtos(二)---使用I2C驱动MPU6050
  • 使用apipost工具导入通过swag生成的golang接口文档步骤
  • 思科安全网络解决方案
  • FIOT/浙江信达可恩消防股份有限公司25周年庆典隆重召开
  • 【JavaEE初阶】网络原理
  • 大盘点|9月独家爆款SVG模版(互斥伸长、扑克出牌、预感应滑动等)
  • 【C#生态园】构建高效PDF应用:全面解析C#六大PDF生成库
  • Linux date命令(用于显示和设置系统的日期和时间,不仅可以显示时间,还能进行复杂的时间计算和格式化)
  • 苍穹外卖学习笔记(十四)
  • 【JavaEE】——CAS指令和ABA问题
  • 【Android】获取备案所需的公钥以及签名MD5值
  • Mybatis中遍历List内容进行动态SQL拼接
  • LeetCode 461. 汉明距离
  • 实战OpenCV之图像滤波
  • 记录一次排查sql server 服务调用异常的问题
  • 1.2.1 HuggingFists安装说明-Linux安装
  • Tableau|一入门
  • k8s基于nfs创建storageClass
  • C#名片识别接口集成方式、文字识别API
  • 电脑剪切的文件粘贴时丢失的高效恢复策略