关于 bevy-rendering
bevy-rendering 是面向 Bevy 0.19 的渲染方案技能,帮助开发者选择和扩展渲染配置,并了解内置、延迟、无头及外部渲染路径的取舍与集成边界。
主要功能
- 01选择渲染配置
- 02比较正向与延迟渲染
- 03扩展内置渲染
- 04规划无头或外部渲染
- 05了解 Rapier 集成边界
- 06审查 Cargo 功能选择
适用场景
- 01为游戏或可视化项目选渲染器
- 02添加自定义着色器或渲染通道
- 03配置无头模拟
- 04检查渲染与 Rapier 功能组合
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevy-rendering安装后在 Claude Code 中输入/bevy-rendering确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/physics-boundary.mdrender-systems.mdrenderer-choice.mdscripts/audit_renderer_features.pytests/test_audit_renderer_features.py详细介绍
Bevy 0.19 — 渲染选项
除非经过测量的限制要求采用自定义方案,否则请从 Bevy 内置的 wgpu 渲染器开始。替换渲染器会影响资源准备、可见性、摄像机、材质、平台集成和调试,而不只是替换一个插件。
首先判断需求
| 需求 | 方案 |
|---|---|
| 普通 2D/3D 游戏、编辑器或可视化应用 | 内置的 2d / 3d 配置 |
| 自定义着色器或特殊渲染通道 | 扩展内置渲染 |
| 桌面级 GPU 上的许多动态光源 | 考虑延迟不透明渲染 |
| 不需要像素画面的服务器模拟 | 无头 MinimalPlugins 配置 |
| 现有专有/嵌入式渲染器 | 使用 2d_api / 3d_api 并显式搭建桥接 |
| 物理、碰撞、角色移动 | bevy-physics;这不会选择渲染器 |
不要仅仅因为项目中有物理 crate 就替换渲染器。
bevy_rapier3d 用于计算刚体模拟和查询。它的可选调试绘制功能使用 Bevy 渲染,但 Rapier 不是渲染器。
内置渲染器
[dependencies]
bevy = { version = "0.19", default-features = false, features = ["3d", "ui"] }
use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.run();
}
fn setup(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
commands.spawn((
Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))),
MeshMaterial3d(materials.add(Color::srgb(0.3, 0.7, 0.9))),
));
commands.spawn((
Camera3d::default(),
Transform::from_xyz(0.0, 2.0, 4.0).looking_at(Vec3::ZERO, Vec3::Y),
));
commands.spawn(DirectionalLight::default());
}
3d 是完整配置。3d_bevy_render 是用于选择 Bevy 渲染器的较低层级集合;3d_api 则提供世界端的 3D 类型,但不包含渲染器。
只有设置 default-features = false 时,配置才会精简依赖项。
前向渲染与延迟渲染
前向渲染是默认的不透明渲染方式。平台兼容性广、需要 MSAA、带宽较低、光源较少或材质灵活性要求较高时,优先选择前向渲染。延迟渲染会将不透明材质数据写入 G-buffer,在光源较多时可以减少重复的几何体处理,但带宽开销更高,也不支持 MSAA。
use bevy::{
core_pipeline::prepass::{DeferredPrepass, DepthPrepass},
pbr::DefaultOpaqueRendererMethod,
prelude::*,
};
fn enable_deferred(app: &mut App) {
app.insert_resource(DefaultOpaqueRendererMethod::deferred());
}
fn spawn_deferred_camera(mut commands: Commands) {
commands.spawn((
Camera3d::default(),
Msaa::Off,
DepthPrepass,
DeferredPrepass,
));
}
此选择适用于不透明渲染。透明材质仍需使用相应的前向/透明渲染路径。请在最低规格硬件上使用有代表性的内容进行基准测试,不要仅根据光源数量来选择。
先扩展,再替换
按以下层级逐步升级:
StandardMaterial属性以及摄像机/后处理组件。- 使用
Material、Material2d或MaterialExtension实现着色器专用化。 - 渲染世界的提取/准备/排队管线。
- 在
Core2d/Core3d中使用 Bevy 0.19 渲染系统实现自定义通道。 - 只有在前面几级无法满足限制时,才使用完全外部的渲染器。
摄像机的 ViewNode/渲染图节点 API 已在 0.19 中移除。渲染通道通过使用 ViewQuery 和 RenderContext 的系统实现,并根据实际系统函数或 Core3dSystems/Core2dSystems 集合进行排序。顶层、名为 bevy::render::renderer::RenderGraph 的调度仍可用于非摄像机工作。
无头或外部渲染
# Simulation/server: no render stack.
bevy = { version = "0.19", default-features = false, features = [
"default_app", "multi_threaded", "serialize"
] }
# External renderer that consumes Bevy's world-side 3D types.
# bevy = { version = "0.19", default-features = false, features = [
# "default_app", "3d_api"
# ] }
外部桥接必须明确变换、网格、材质、摄像机、可见性、资源生命周期、GPU 上传、窗口/表面事件以及帧节奏的所有权和同步方式。将渲染器专用句柄保存在专用组件中;不要将其泄漏到游戏逻辑组件中。
Rapier 集成边界
对于 Bevy 0.19,匹配的发布系列是 bevy_rapier3d 0.36。Rapier 默认使用可变时间步长,并在 PostUpdate 中运行;基于 tick 的游戏可以显式将其移至 FixedUpdate。使用同一套权威变换策略驱动可见实体和碰撞体,并将仅用于显示的平滑处理分开。请参阅
bevy-physics 和
物理边界。
审计与参考资料
运行 python3 scripts/audit_renderer_features.py path/to/Cargo.toml,以发现常见的配置文件与 Rapier/调试渲染不匹配问题。