如何用 Bevy 的 Bevymark 压力测试测量本机的渲染性能?
如何用 Bevy 的 Bevymark 压力测试测量本机的渲染性能【免费下载链接】bevyA refreshingly simple>项目地址: https://gitcode.com/GitHub_Trending/be/bevy如果你的机器要跑 Bevy 游戏想先弄清楚它在 2D 渲染上能撑住多少实体、帧率会掉到多少仓库自带的bevymark示例就是为这件事准备的它是一个重 sprite 渲染负载的压力测试在 examples/README.md 中被描述为 A heavy sprite rendering workload to benchmark your system with Bevy。本文给出在 bevy 仓库内运行它的完整命令、如何向场景注入负载、以及如何读取屏幕上的实体数和三类 FPS 数据。准备条件在 bevy 仓库根目录下工作bevymark注册在 Cargo.toml 中示例源码为 examples/stress_tests/bevymark.rs。必须用接近 release 的编译档位运行。examples/stress_tests/README.md 明确说明stress test 应该用stress-testprofile 运行to accurately represent performance in production, otherwise they will run in cargos default dev profile which is very slow。该 profile 定义在 Cargo.toml 中[profile.stress-test]继承release并启用lto fat和panic abort。运行 Bevymark最短主路径来自 examples/stress_tests/README.md 的示例命令把EXAMPLE换成bevymarkcargo run --profile stress-test --example bevymark另一条文档中同样给出的路径是cargo run --release --example bevymarkexamples/README.md 的 Stress Tests 一节bevymark启动时打印的警告也要求 must be run in release mode using --release or it will be very slow。stress-testprofile 本身就继承自release且额外开了 fat LTO本文以它为主路径两种方式测出的都是优化后的行为不要使用默认 dev profile。启动后注意两点控制台会输出一条warn!日志内容来自 examples/stress_tests/warning_string.txt这是一个把 Bevy 推向极限的压力测试用于调试性能问题不代表真实游戏的表现。应用窗口被固定为 1920×1080、缩放因子 1.0并使用PresentMode::AutoNoVsync见 examples/stress_tests/bevymark.rs 的main函数。这意味着帧率上限只取决于你的机器读数不会被垂直同步人为拉平。如何注入负载并读取结果默认操作方式源码头部注释Usage: spawn more entities by clicking on the screen.按住鼠标左键会持续生成 bird 实体生成速率是BIRDS_PER_SECOND 10000即每秒 10000 只屏幕左上角的覆盖层实时显示四项数据counter_system每帧刷新Bird Count当前实体总数、FPS (raw)、FPS (SMA)滑动平均、FPS (EMA)指数滑动平均。同时注册的LogDiagnosticsPlugin还会把 FPS 诊断信息输出到控制台。判断方法很直接一边按住左键一边看Bird Count是否按预期增长再看三种 FPS 读数随实体数上升的下降过程。raw反映单帧波动SMA/EMA更适合用来比较不同机器或不同参数下的稳定水平。用参数固定工作负载如果想让每次运行的负载完全一致、便于跨机器对比用--benchmark开关配合波次参数。参数定义在 examples/stress_tests/bevymark.rs 的Args结构体中参数作用默认值--mode渲染模式sprite或mesh2dsprite--benchmark按固定步长推进动画使每帧在多次运行间保持一致若配置了波次则启动时一次性生成全部实体立即进入最大负载关闭--per_wave 数量每个波次生成的实体数0--waves 数量生成的波次数0--vary_per_instance为每个实例变化材质数据关闭--material_texture_count 数量随机选择材质颜色所用的纹理数量0表示不使用纹理1--ordered_zz 值按递增顺序生成而不是随机关闭--alpha_modeopaque、blend、alpha_maskblend其中--per_wave和--waves的取值由读者按测试目标自行指定文档没有给出推荐数量下面的示例值仅演示语法# 启动时一次性生成 5 个波次、每波 20000 只立即进入满负载 cargo run --profile stress-test --example bevymark -- --benchmark --per_wave 20000 --waves 5不加--benchmark时--per_wave/--waves会在运行时逐个波次生成加上后则在启动时全部生成并固定模拟步长FIXED_DELTA_TIME 1/60这也是它适合做复测的原因。可选分支sprite 与 mesh2d 对比同一实体量下可以切换渲染路径来对比cargo run --profile stress-test --example bevymark -- --benchmark --per_wave 20000 --waves 5 --mode mesh2d--mode只接受sprite和mesh2d两个值传其他值会报错。限制与说明结果只代表bevymark这一特定 2D 负载sprite 或 mesh2d固定 1920×1080、无垂直同步启动警告已声明它 not representative of an actual game。如果目标是测 3D 渲染负载仓库另有bevymark_3dA heavy 3D cube rendering workload to benchmark your system with Bevy见 examples/stress_tests/bevymark_3d.rs命令形式相同cargo run --profile stress-test --example bevymark_3d。下一步定位瓶颈FPS 读数能告诉你快不快但回答不了时间花在哪。如果bevymark跑出的帧时间不达标docs/profiling.md 给出了继续排查的路径用--features bevy/trace_tracy --release或bevy/trace_chrome打开 CPU 侧的 span 分析当 CPU profiling 显示瓶颈在 GPU 时改用 GPU 厂商工具NVIDIA Nsight Graphics、AMD RGP、Intel GPA、Xcode做 GPU 侧分析。【免费下载链接】bevyA refreshingly simple>项目地址: https://gitcode.com/GitHub_Trending/be/bevy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考