mcpField
B
bevy-rendering

bevy-rendering

github.com/chrisgliddon开发2667 次安装9 周前更新
代码仓库

关于 bevy-rendering

bevy-rendering 是面向 Bevy 0.19 的渲染方案技能,帮助开发者选择和扩展渲染配置,并了解内置、延迟、无头及外部渲染路径的取舍与集成边界。

主要功能

  1. 01选择渲染配置
  2. 02比较正向与延迟渲染
  3. 03扩展内置渲染
  4. 04规划无头或外部渲染
  5. 05了解 Rapier 集成边界
  6. 06审查 Cargo 功能选择

适用场景

  1. 01为游戏或可视化项目选渲染器
  2. 02添加自定义着色器或渲染通道
  3. 03配置无头模拟
  4. 04检查渲染与 Rapier 功能组合

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/chrisgliddon/bevy-skills --skill bevy-rendering

安装后在 Claude Code 中输入/bevy-rendering确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
physics-boundary.md
render-systems.md
renderer-choice.md
scripts/
audit_renderer_features.py
tests/
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,
    ));
}

此选择适用于不透明渲染。透明材质仍需使用相应的前向/透明渲染路径。请在最低规格硬件上使用有代表性的内容进行基准测试,不要仅根据光源数量来选择。

先扩展,再替换

按以下层级逐步升级:

  1. StandardMaterial 属性以及摄像机/后处理组件。
  2. 使用 Material、Material2d 或 MaterialExtension 实现着色器专用化。
  3. 渲染世界的提取/准备/排队管线。
  4. 在 Core2d / Core3d 中使用 Bevy 0.19 渲染系统实现自定义通道。
  5. 只有在前面几级无法满足限制时,才使用完全外部的渲染器。

摄像机的 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/调试渲染不匹配问题。

评论

支持 Markdown