mirror of
https://github.com/bevyengine/bevy
synced 2025-01-04 17:28:56 +00:00
c1a4b82762
# Objective Closes #15799. Many rendering people and maintainers are in favor of reverting default mesh materials added in #15524, especially as the migration to required component is already large and heavily breaking. ## Solution Revert default mesh materials, and adjust docs accordingly. - Remove `extract_default_materials` - Remove `clear_material_instances`, and move the logic back into `extract_mesh_materials` - Remove `HasMaterial2d` and `HasMaterial3d` - Change default material handles back to pink instead of white - 2D uses `Color::srgb(1.0, 0.0, 1.0)`, while 3D uses `Color::srgb(1.0, 0.0, 0.5)`. Not sure if this is intended. There is now no indication at all about missing materials for `Mesh2d` and `Mesh3d`. Having a mesh without a material renders nothing. ## Testing I ran `2d_shapes`, `mesh2d_manual`, and `3d_shapes`, with and without mesh material components.
59 lines
1.8 KiB
Rust
59 lines
1.8 KiB
Rust
use crate::Material;
|
|
use bevy_asset::{AssetId, Handle};
|
|
use bevy_derive::{Deref, DerefMut};
|
|
use bevy_ecs::{component::Component, reflect::ReflectComponent};
|
|
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
|
|
use derive_more::derive::From;
|
|
|
|
/// A [material](Material) used for rendering a [`Mesh3d`].
|
|
///
|
|
/// See [`Material`] for general information about 3D materials and how to implement your own materials.
|
|
///
|
|
/// [`Mesh3d`]: bevy_render::mesh::Mesh3d
|
|
///
|
|
/// # Example
|
|
///
|
|
/// ```
|
|
/// # use bevy_pbr::{Material, MeshMaterial3d, StandardMaterial};
|
|
/// # use bevy_ecs::prelude::*;
|
|
/// # use bevy_render::mesh::{Mesh, Mesh3d};
|
|
/// # use bevy_color::palettes::basic::RED;
|
|
/// # use bevy_asset::Assets;
|
|
/// # use bevy_math::primitives::Capsule3d;
|
|
/// #
|
|
/// // Spawn an entity with a mesh using `StandardMaterial`.
|
|
/// fn setup(
|
|
/// mut commands: Commands,
|
|
/// mut meshes: ResMut<Assets<Mesh>>,
|
|
/// mut materials: ResMut<Assets<StandardMaterial>>,
|
|
/// ) {
|
|
/// commands.spawn((
|
|
/// Mesh3d(meshes.add(Capsule3d::default())),
|
|
/// MeshMaterial3d(materials.add(StandardMaterial {
|
|
/// base_color: RED.into(),
|
|
/// ..Default::default()
|
|
/// })),
|
|
/// ));
|
|
/// }
|
|
/// ```
|
|
#[derive(Component, Clone, Debug, Deref, DerefMut, Reflect, PartialEq, Eq, From)]
|
|
#[reflect(Component, Default)]
|
|
pub struct MeshMaterial3d<M: Material>(pub Handle<M>);
|
|
|
|
impl<M: Material> Default for MeshMaterial3d<M> {
|
|
fn default() -> Self {
|
|
Self(Handle::default())
|
|
}
|
|
}
|
|
|
|
impl<M: Material> From<MeshMaterial3d<M>> for AssetId<M> {
|
|
fn from(material: MeshMaterial3d<M>) -> Self {
|
|
material.id()
|
|
}
|
|
}
|
|
|
|
impl<M: Material> From<&MeshMaterial3d<M>> for AssetId<M> {
|
|
fn from(material: &MeshMaterial3d<M>) -> Self {
|
|
material.id()
|
|
}
|
|
}
|