mcpField
B
bevy-pbr-materials

bevy-pbr-materials

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

关于 bevy-pbr-materials

面向使用 Bevy 0.19 的开发者,介绍 PBR 材质、光照和网格图元的实现要点,并整理自定义材质及版本迁移注意事项。

主要功能

  1. 01使用 StandardMaterial 着色
  2. 02实现自定义 Material
  3. 03配置光照与阴影
  4. 04设置 Atmosphere 和相机
  5. 05使用网格图元

适用场景

  1. 01为网格添加 PBR 材质
  2. 02实现风格化或溶解着色
  3. 03为场景配置接触阴影
  4. 04创建大气效果

安装

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

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

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

包含的文件

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

references/
custom-material.md
lighting.md
mesh-primitives.md

详细介绍

Bevy 0.19 — PBR 材质

何时使用此技能

  • 使用内置的基于物理的着色器为网格添加纹理。
  • 编写自定义 Material(例如用于风格化着色、溶解效果、世界空间着色器)。
  • 启用阴影贴图或 Bevy 0.19 接触阴影。
  • 生成 Atmosphere 实体并在摄像机上启用它。
  • AsBindGroup::label() 编译错误(现在是必需项)。
  • MaterialPlugin::<M> { prepass_enabled: ... } 编译错误(这些字段已在 0.18 中移除)。

规范用法 — StandardMaterial

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>>,
) {
    let mesh = meshes.add(Cuboid::new(1.0, 1.0, 1.0));
    let material = materials.add(StandardMaterial {
        base_color: Color::srgb(0.8, 0.3, 0.2),
        perceptual_roughness: 0.4,
        metallic: 0.1,
        ..default()
    });

    commands.spawn((
        Mesh3d(mesh),
        MeshMaterial3d(material),
        Transform::from_xyz(0.0, 0.5, 0.0),
    ));

    commands.spawn((
        Camera3d::default(),
        Transform::from_xyz(0.0, 2.0, 4.0).looking_at(Vec3::ZERO, Vec3::Y),
    ));

    commands.spawn((
        DirectionalLight::default(),
        Transform::from_xyz(2.0, 4.0, 2.0).looking_at(Vec3::ZERO, Vec3::Y),
    ));
}

自定义材质 — Bevy 0.19 形式

使用 Material 特征和 AsBindGroup 的自定义材质详见 references/custom-material.md。

主题

主题参考
PointLight、DirectionalLight、SpotLight;GlobalAmbientLight;阴影贴图、接触阴影、大气references/lighting.md
Plane3d、Cuboid、Sphere、Circle、Cylinder、Capsule3d、Torus 构造函数及方向相关注意事项references/mesh-primitives.md
Material 特征方法、AsBindGroup 属性、ShaderRef 变体、MaterialPlugin 配置references/custom-material.md

Bevy 0.19 注意事项

  • MaterialPlugin::<M> { prepass_enabled, shadows_enabled, ..default() } 已移除。 改为重载 Material 特征方法 — 参见 references/custom-material.md。
  • 光源字段使用 shadow_maps_enabled。 shadows_enabled 已重命名,因为 Bevy 0.19 新增了独立的 contact_shadows_enabled 控制项。
  • 接触阴影需要两端都进行设置。 将 ContactShadows 添加到摄像机,并在参与的光源上设置 contact_shadows_enabled: true。
  • Atmosphere 是独立实体。 将 AtmosphereSettings 保留在摄像机上,并单独生成 bevy::light::Atmosphere。
  • glTF 材质标签已更改。 #Material0 会加载 GltfMaterial;只有在明确需要 Handle<StandardMaterial> 时才使用 #Material0/std。
  • AsBindGroup::label() 是必需的。 #[derive(AsBindGroup)] 宏会自动生成它;手写实现必须添加该方法。
  • 网格组件包装器。 使用 Mesh3d(handle) 和 MeshMaterial3d(material_handle) — 渲染器会查询这些包装器。
  • Plane3d::new 的 half_size 参数接受 Vec2,而非标量 — 参见 references/mesh-primitives.md。
  • Color::rgb(...) 已移除 — 改用 Color::srgb(...) 或 Color::linear_rgb(...)。
  • 方向光的位置会被忽略 — 只有旋转会产生影响。参见 references/lighting.md。

另请参阅

评论

支持 Markdown