 c1a4b82762
			
		
	
	
		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.
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			60 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()
 | |
|     }
 | |
| }
 |