通过找到在 60fps 和 30fps 时 运行 的最佳设置来摆脱性能设置旋钮
Getting rid of performance setting knobs by finding best settings that will run at 60fps, and 30fps
简介
我正在开发一款游戏,其质量很大程度上取决于两个因素。
- post的处理效果多么炫酷,越炫越好但gpu也越吃力
- 可以模拟多少个实体,这会给cpu带来压力。
问题是,即使没有 post 处理,即使 2010 年之前的设备也可以 运行 它是一款非常好的游戏。我有大约 48 个不同级别的 post 处理,而大多数设备可以 运行 说 10 级,其他新设备可以 运行 级别 48 处理并且看起来更酷。
我的困境是我不希望我的用户不得不通过一个界面苦苦挣扎 select 有多少实体,并调整影响 post 处理质量的两个设置。这有两个原因。
- 主游戏已经有很多界面元素了,我真的不想再添加了。它会带走游戏的极简主义和神奇外观。
- 我曾想过为用户提供 30fps 和 60fps 选项(最佳设置 运行 在那个 fps),这确实成为我的目标。
问题
但是,我在实现 30fps 选项和 60fps 选项的梦想时遇到了问题。主要是因为两个原因,我希望你能帮助我。
- 分析需要很长时间!太多的测试会导致这个过程花费太长时间。另外,我做的测试越短,结果就越不准确。
- 分析不准确,即使我从测试的前 20% 和后 20% 中删除了数据,但每次的结果仍然略有不同。
- 由于这将是一个 ios 和 android 应用程序,因此要分析的设备太多,因此很难在预测中进行编程。
您将如何测试设备以找出 30fps 和 60fps 的最佳设置?无需展示代码(文章会更好)只是解释过程。
如果您想阅读更多内容,这是我目前的方法。
我目前的方法
这是我目前的做法,我的测试(虽然需要 3 分钟,而且有些不准确)有一些假设可以让它更快。
- 每个新实体不会显着增加 GPU 渲染时间,这意味着 CPU 和 GPU 测试可以单独完成,而不是测试组合。
- Post 处理由两个设置处理
- Downs-sample size:基本上 post 处理效果以较低的分辨率呈现并适合较高的分辨率。因此,如果您将采样率降低到设备分辨率的 30%,这意味着需要减少 70% 的像素来进行昂贵的计算。质量也较低。我通过进行 6 种不同级别的下采样来简化这一过程。
- 纹理样本:完成的所有处理都是卷积,因此在 post 处理阶段每个像素需要进行大量纹理样本。目前为了简单起见,我想出了 8 个不同级别的级别 1 每个像素对纹理采样 3 次,级别 2 每个像素对纹理采样 7 次等。更多样本 = 更准确和更显着的效果
但是我的方法有一些问题使其数据变得模糊,这些问题主要是因为我无法预测这些尖峰将持续多长时间并丢弃数据:
- 每次我更改其中一个 GPU 设置时都会出现延迟尖峰,因此对于更改纹理样本,制服会导致代码以不同方式分支并且 GPU 重新编译,而对于更改下采样我必须重新生成帧缓冲区。
- 由于创建了新粒子,每个新 CPU 测试开始时也会出现滞后峰值。
- 性能分析在启动之初就开始了,即使我有时等了两秒钟它仍然没有完全稳定,而且我在第一次测试时会得到非常低的结果。
- 有些设备的粒子数可能高得离谱,具有讽刺意味的是,设备越好,我的 cpu 测试时间就越长。
现在为了测试我只是 运行 像往常一样玩游戏,每次新测试我都会调整粒子数量和 gpu 数量。
我首先测试 CPU,然后关闭 post 处理。我从 0 个实体开始,然后增加 100 个实体。当 fps 似乎低于目标水平(60fps 然后 30fps)时,我再次测试它之前的那个。如果这个新测试通过(例如:500)但最后一个测试失败(例如:600),那么我知道 500 是该 fps 下的最大实体数量。
然后我测试 GPU 基本上与上次测试相同,除了我每次都给 GPU 更多的工作。我把它分成 4 个测试。 Luxury:查看是否高端并找到最佳设置,Level 6:进行 6 级纹理采样,并找到可能的最低下采样,Level 5:进行 5 级纹理采样并找到可能的最低下采样,Remedial:尽力而为找到一个可以在最大下采样下工作的发光设置。
纹理采样级别 5 和 6 是我的目标。我真的不在乎纹理的下采样率。我会选择 level 6 与没有下采样的 level 5 相比下采样 70%。
纹理采样级别 1-4 是真正低端设备的补救措施,我只在最高级别的下采样下测试过这些设备。如果我得到了有用的东西,那就太好了,如果没有,那么就不会发光。
纹理采样级别 7 和 8 仅适用于高端设备,并且只在没有下采样的情况下进行测试。
为了加速 GPU 测试,我按照 Luxury-> Level 6-> Level 5->Remedial 的顺序进行测试,如果其中一个通过,它会跳过其他测试。
您的大问题将是热稳定性 - 如果 CPU 和 GPU 都达到最大值 运行,大多数现代 mid-end/high-end 手机产生的热量会超过它们散发的热量。它们可能会在冷启动后的最初 5-10 分钟内保持明显更快的性能点,但最终会热到足以让它们需要降频。因此,您的分析问题会随时间变化,并且您可能会选择在前 10 分钟内运行良好的设置,然后遇到问题。
如果您想要一致的用户体验,您可能希望留出相当大的余量,而不是尽可能地增加一些东西,如果您要留出余量,则系统中缺乏 100% 的稳定性结果不太重要。
就我个人而言,作为用户,我不觉得这种类型的设置有太大问题 - 在您的情况下,听起来您只需要两个滑块,一个用于 CPU 和 GPU。如果游戏允许我的电池持续更长时间,我经常故意将图形调到低于我的设备的能力(我在旅行时玩游戏,所以并不总是很容易使用充电器)。
简介
我正在开发一款游戏,其质量很大程度上取决于两个因素。
- post的处理效果多么炫酷,越炫越好但gpu也越吃力
- 可以模拟多少个实体,这会给cpu带来压力。
问题是,即使没有 post 处理,即使 2010 年之前的设备也可以 运行 它是一款非常好的游戏。我有大约 48 个不同级别的 post 处理,而大多数设备可以 运行 说 10 级,其他新设备可以 运行 级别 48 处理并且看起来更酷。
我的困境是我不希望我的用户不得不通过一个界面苦苦挣扎 select 有多少实体,并调整影响 post 处理质量的两个设置。这有两个原因。
- 主游戏已经有很多界面元素了,我真的不想再添加了。它会带走游戏的极简主义和神奇外观。
- 我曾想过为用户提供 30fps 和 60fps 选项(最佳设置 运行 在那个 fps),这确实成为我的目标。
问题
但是,我在实现 30fps 选项和 60fps 选项的梦想时遇到了问题。主要是因为两个原因,我希望你能帮助我。
- 分析需要很长时间!太多的测试会导致这个过程花费太长时间。另外,我做的测试越短,结果就越不准确。
- 分析不准确,即使我从测试的前 20% 和后 20% 中删除了数据,但每次的结果仍然略有不同。
- 由于这将是一个 ios 和 android 应用程序,因此要分析的设备太多,因此很难在预测中进行编程。
您将如何测试设备以找出 30fps 和 60fps 的最佳设置?无需展示代码(文章会更好)只是解释过程。
如果您想阅读更多内容,这是我目前的方法。
我目前的方法
这是我目前的做法,我的测试(虽然需要 3 分钟,而且有些不准确)有一些假设可以让它更快。
- 每个新实体不会显着增加 GPU 渲染时间,这意味着 CPU 和 GPU 测试可以单独完成,而不是测试组合。
- Post 处理由两个设置处理
- Downs-sample size:基本上 post 处理效果以较低的分辨率呈现并适合较高的分辨率。因此,如果您将采样率降低到设备分辨率的 30%,这意味着需要减少 70% 的像素来进行昂贵的计算。质量也较低。我通过进行 6 种不同级别的下采样来简化这一过程。
- 纹理样本:完成的所有处理都是卷积,因此在 post 处理阶段每个像素需要进行大量纹理样本。目前为了简单起见,我想出了 8 个不同级别的级别 1 每个像素对纹理采样 3 次,级别 2 每个像素对纹理采样 7 次等。更多样本 = 更准确和更显着的效果
但是我的方法有一些问题使其数据变得模糊,这些问题主要是因为我无法预测这些尖峰将持续多长时间并丢弃数据:
- 每次我更改其中一个 GPU 设置时都会出现延迟尖峰,因此对于更改纹理样本,制服会导致代码以不同方式分支并且 GPU 重新编译,而对于更改下采样我必须重新生成帧缓冲区。
- 由于创建了新粒子,每个新 CPU 测试开始时也会出现滞后峰值。
- 性能分析在启动之初就开始了,即使我有时等了两秒钟它仍然没有完全稳定,而且我在第一次测试时会得到非常低的结果。
- 有些设备的粒子数可能高得离谱,具有讽刺意味的是,设备越好,我的 cpu 测试时间就越长。
现在为了测试我只是 运行 像往常一样玩游戏,每次新测试我都会调整粒子数量和 gpu 数量。
我首先测试 CPU,然后关闭 post 处理。我从 0 个实体开始,然后增加 100 个实体。当 fps 似乎低于目标水平(60fps 然后 30fps)时,我再次测试它之前的那个。如果这个新测试通过(例如:500)但最后一个测试失败(例如:600),那么我知道 500 是该 fps 下的最大实体数量。
然后我测试 GPU 基本上与上次测试相同,除了我每次都给 GPU 更多的工作。我把它分成 4 个测试。 Luxury:查看是否高端并找到最佳设置,Level 6:进行 6 级纹理采样,并找到可能的最低下采样,Level 5:进行 5 级纹理采样并找到可能的最低下采样,Remedial:尽力而为找到一个可以在最大下采样下工作的发光设置。
纹理采样级别 5 和 6 是我的目标。我真的不在乎纹理的下采样率。我会选择 level 6 与没有下采样的 level 5 相比下采样 70%。 纹理采样级别 1-4 是真正低端设备的补救措施,我只在最高级别的下采样下测试过这些设备。如果我得到了有用的东西,那就太好了,如果没有,那么就不会发光。 纹理采样级别 7 和 8 仅适用于高端设备,并且只在没有下采样的情况下进行测试。
为了加速 GPU 测试,我按照 Luxury-> Level 6-> Level 5->Remedial 的顺序进行测试,如果其中一个通过,它会跳过其他测试。
您的大问题将是热稳定性 - 如果 CPU 和 GPU 都达到最大值 运行,大多数现代 mid-end/high-end 手机产生的热量会超过它们散发的热量。它们可能会在冷启动后的最初 5-10 分钟内保持明显更快的性能点,但最终会热到足以让它们需要降频。因此,您的分析问题会随时间变化,并且您可能会选择在前 10 分钟内运行良好的设置,然后遇到问题。
如果您想要一致的用户体验,您可能希望留出相当大的余量,而不是尽可能地增加一些东西,如果您要留出余量,则系统中缺乏 100% 的稳定性结果不太重要。
就我个人而言,作为用户,我不觉得这种类型的设置有太大问题 - 在您的情况下,听起来您只需要两个滑块,一个用于 CPU 和 GPU。如果游戏允许我的电池持续更长时间,我经常故意将图形调到低于我的设备的能力(我在旅行时玩游戏,所以并不总是很容易使用充电器)。