About bevy-pbr-materials
A skill for Bevy 0.19 developers working with PBR materials, lighting, and mesh primitives. It covers custom materials and version-specific implementation changes.
Key features
- 01Use StandardMaterial for shading
- 02Implement custom Material types
- 03Configure lights and shadows
- 04Set up Atmosphere and cameras
- 05Work with mesh primitives
Use cases
- 01Apply PBR materials to meshes
- 02Create stylized or dissolve shaders
- 03Configure contact shadows in a scene
- 04Add an atmosphere effect
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevy-pbr-materialsAfter installing, type/bevy-pbr-materialsin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/custom-material.mdlighting.mdmesh-primitives.mdDetails
From the project READMEBevy 0.19 — PBR Materials
When to use this skill
- Texturing a mesh with the built-in physically based shader.
- Writing a custom
Material(e.g. for stylised shading, dissolve effects, world-space shaders). - Enabling shadow maps or Bevy 0.19 contact shadows.
- Spawning an
Atmosphereentity and enabling it on a camera. - Compiler error on
AsBindGroup::label()(now required). - Compiler error on
MaterialPlugin::<M> { prepass_enabled: ... }(fields removed in 0.18).
Canonical pattern — 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),
));
}
Custom material — Bevy 0.19 shape
Custom materials with the Material trait and AsBindGroup are covered in
detail at references/custom-material.md.
Topics
| Topic | Reference |
|---|---|
PointLight, DirectionalLight, SpotLight; GlobalAmbientLight; shadow maps, contact shadows, atmosphere | references/lighting.md |
Plane3d, Cuboid, Sphere, Circle, Cylinder, Capsule3d, Torus constructors and orientation gotchas | references/mesh-primitives.md |
Material trait methods, AsBindGroup attributes, ShaderRef variants, MaterialPlugin wiring | references/custom-material.md |
Bevy 0.19 gotchas
MaterialPlugin::<M> { prepass_enabled, shadows_enabled, ..default() }is gone. Override theMaterialtrait methods instead — see references/custom-material.md.- Light fields use
shadow_maps_enabled.shadows_enabledwas renamed because Bevy 0.19 adds the separatecontact_shadows_enabledcontrol. - Contact shadows require both sides. Add
ContactShadowsto the camera and setcontact_shadows_enabled: trueon participating lights. Atmosphereis its own entity. KeepAtmosphereSettingson the camera and spawnbevy::light::Atmosphereseparately.- glTF material labels changed.
#Material0loadsGltfMaterial; use#Material0/stdwhen you specifically needHandle<StandardMaterial>. AsBindGroup::label()is required. The#[derive(AsBindGroup)]macro generates it automatically; hand-rolled impls must add it.- Mesh component wrappers. Use
Mesh3d(handle)andMeshMaterial3d(material_handle)— the wrappers are what the renderer queries on. Plane3d::newtakesVec2forhalf_size, not a scalar — see references/mesh-primitives.md.Color::rgb(...)is gone — useColor::srgb(...)orColor::linear_rgb(...).- Directional light position is ignored — only rotation matters. See references/lighting.md.
See also
bevy-rendering— built-in renderer, forward/deferred, custom passes, and renderer replacement boundaries.bevy-cameras— views, HDR, and render targets.bevy-migration-0-18-to-0-19— light, atmosphere, glTF material, and render-system migrations.
Comments
Markdown supported