Struct bevy::pbr::StandardMaterial
[−]pub struct StandardMaterial {Show 16 fields
pub base_color: Color,
pub base_color_texture: Option<Handle<Image>>,
pub emissive: Color,
pub emissive_texture: Option<Handle<Image>>,
pub perceptual_roughness: f32,
pub metallic: f32,
pub metallic_roughness_texture: Option<Handle<Image>>,
pub reflectance: f32,
pub normal_map_texture: Option<Handle<Image>>,
pub flip_normal_map_y: bool,
pub occlusion_texture: Option<Handle<Image>>,
pub double_sided: bool,
pub cull_mode: Option<Face>,
pub unlit: bool,
pub alpha_mode: AlphaMode,
pub depth_bias: f32,
}
Expand description
A material with “standard” properties used in PBR lighting Standard property values with pictures here https://google.github.io/filament/Material%20Properties.pdf.
Fields
base_color: Color
Doubles as diffuse albedo for non-metallic, specular for metallic and a mix for everything
in between. If used together with a base_color_texture, this is factored into the final
base color as base_color * base_color_texture_value
base_color_texture: Option<Handle<Image>>
emissive: Color
Color the material “emits” to the camera.
This is typically used for monitor screens or LED lights. Anything that can be visible even in darkness.
The emissive color is added to what would otherwise be the material’s visible color. This means that for a light emissive value, in darkness, you will mostly see the emissive component.
The default emissive color is black, which doesn’t add anything to the material color.
Note that an emissive material won’t light up surrounding areas like a light source, it just adds a value to the color seen on screen.
emissive_texture: Option<Handle<Image>>
perceptual_roughness: f32
Linear perceptual roughness, clamped to [0.089, 1.0] in the shader
Defaults to minimum of 0.089
If used together with a roughness/metallic texture, this is factored into the final base
color as roughness * roughness_texture_value
metallic: f32
From [0.0, 1.0], dielectric to pure metallic
If used together with a roughness/metallic texture, this is factored into the final base
color as metallic * metallic_texture_value
metallic_roughness_texture: Option<Handle<Image>>
reflectance: f32
Specular intensity for non-metals on a linear scale of [0.0, 1.0] defaults to 0.5 which is mapped to 4% reflectance in the shader
normal_map_texture: Option<Handle<Image>>
Used to fake the lighting of bumps and dents on a material.
A typical usage would be faking cobblestones on a flat plane mesh in 3D.
Notes
Normal mapping with StandardMaterial
and the core bevy PBR shaders requires:
- A normal map texture
- Vertex UVs
- Vertex tangents
- Vertex normals
Tangents do not have to be stored in your model,
they can be generated using the Mesh::generate_tangents
method.
If your material has a normal map, but still renders as a flat surface,
make sure your meshes have their tangents set.
flip_normal_map_y: bool
Normal map textures authored for DirectX have their y-component flipped. Set this to flip it to right-handed conventions.
occlusion_texture: Option<Handle<Image>>
Specifies the level of exposure to ambient light.
This is usually generated and stored automatically (“baked”) by 3D-modelling software.
Typically, steep concave parts of a model (such as the armpit of a shirt) are darker, because they have little exposed to light. An occlusion map specifies those parts of the model that light doesn’t reach well.
The material will be less lit in places where this texture is dark. This is similar to ambient occlusion, but built into the model.
double_sided: bool
Support two-sided lighting by automatically flipping the normals for “back” faces
within the PBR lighting shader.
Defaults to false.
This does not automatically configure backface culling, which can be done via
cull_mode
.
cull_mode: Option<Face>
Whether to cull the “front”, “back” or neither side of a mesh
defaults to Face::Back
unlit: bool
alpha_mode: AlphaMode
depth_bias: f32
Trait Implementations
impl AsBindGroup for StandardMaterial
impl AsBindGroup for StandardMaterial
type Data = StandardMaterialKey
type Data = StandardMaterialKey
Data that will be stored alongside the “prepared” bind group.
fn as_bind_group(
&self,
layout: &BindGroupLayout,
render_device: &RenderDevice,
images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>,
fallback_image: &FallbackImage
) -> Result<PreparedBindGroup<StandardMaterial>, AsBindGroupError>
fn as_bind_group(
&self,
layout: &BindGroupLayout,
render_device: &RenderDevice,
images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>,
fallback_image: &FallbackImage
) -> Result<PreparedBindGroup<StandardMaterial>, AsBindGroupError>
Creates a bind group for self
matching the layout defined in AsBindGroup::bind_group_layout
.
fn bind_group_layout(render_device: &RenderDevice) -> BindGroupLayout
fn bind_group_layout(render_device: &RenderDevice) -> BindGroupLayout
Creates the bind group layout matching all bind groups returned by AsBindGroup::as_bind_group
impl AsBindGroupShaderType<StandardMaterialUniform> for StandardMaterial
impl AsBindGroupShaderType<StandardMaterialUniform> for StandardMaterial
fn as_bind_group_shader_type(
&self,
images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> StandardMaterialUniform
fn as_bind_group_shader_type(
&self,
images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> StandardMaterialUniform
Return the T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist. Read more
impl Clone for StandardMaterial
impl Clone for StandardMaterial
fn clone(&self) -> StandardMaterial
fn clone(&self) -> StandardMaterial
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
impl Debug for StandardMaterial
impl Debug for StandardMaterial
impl Default for StandardMaterial
impl Default for StandardMaterial
fn default() -> StandardMaterial
fn default() -> StandardMaterial
Returns the “default value” for a type. Read more
impl From<&StandardMaterial> for StandardMaterialKey
impl From<&StandardMaterial> for StandardMaterialKey
fn from(material: &StandardMaterial) -> StandardMaterialKey
fn from(material: &StandardMaterial) -> StandardMaterialKey
Converts to this type from the input type.
impl From<Color> for StandardMaterial
impl From<Color> for StandardMaterial
fn from(color: Color) -> StandardMaterial
fn from(color: Color) -> StandardMaterial
Converts to this type from the input type.
impl From<Handle<Image>> for StandardMaterial
impl From<Handle<Image>> for StandardMaterial
fn from(texture: Handle<Image>) -> StandardMaterial
fn from(texture: Handle<Image>) -> StandardMaterial
Converts to this type from the input type.
impl Material for StandardMaterial
impl Material for StandardMaterial
fn specialize(
_pipeline: &MaterialPipeline<StandardMaterial>,
descriptor: &mut RenderPipelineDescriptor,
_layout: &Hashed<InnerMeshVertexBufferLayout, FixedState>,
key: MaterialPipelineKey<StandardMaterial>
) -> Result<(), SpecializedMeshPipelineError>
fn specialize(
_pipeline: &MaterialPipeline<StandardMaterial>,
descriptor: &mut RenderPipelineDescriptor,
_layout: &Hashed<InnerMeshVertexBufferLayout, FixedState>,
key: MaterialPipelineKey<StandardMaterial>
) -> Result<(), SpecializedMeshPipelineError>
Customizes the default RenderPipelineDescriptor
for a specific entity using the entity’s
MaterialPipelineKey
and MeshVertexBufferLayout
as input. Read more
fn fragment_shader() -> ShaderRef
fn fragment_shader() -> ShaderRef
Returns this material’s fragment shader. If ShaderRef::Default
is returned, the default mesh fragment shader
will be used. Read more
fn alpha_mode(&self) -> AlphaMode
fn alpha_mode(&self) -> AlphaMode
Returns this material’s AlphaMode
. Defaults to AlphaMode::Opaque
.
fn depth_bias(&self) -> f32
fn depth_bias(&self) -> f32
Add a bias to the view depth of the mesh which can be used to force a specific render order for meshes with equal depth, to avoid z-fighting. Read more
fn vertex_shader() -> ShaderRef
fn vertex_shader() -> ShaderRef
Returns this material’s vertex shader. If ShaderRef::Default
is returned, the default mesh vertex shader
will be used. Read more
impl TypeUuid for StandardMaterial
impl TypeUuid for StandardMaterial
Auto Trait Implementations
impl RefUnwindSafe for StandardMaterial
impl Send for StandardMaterial
impl Sync for StandardMaterial
impl Unpin for StandardMaterial
impl UnwindSafe for StandardMaterial
Blanket Implementations
impl<T, U> AsBindGroupShaderType<U> for T where
U: ShaderType,
&'a T: for<'a> Into<U>,
impl<T, U> AsBindGroupShaderType<U> for T where
U: ShaderType,
&'a T: for<'a> Into<U>,
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
Return the T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist. Read more
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
impl<T> FromWorld for T where
T: Default,
impl<T> FromWorld for T where
T: Default,
fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using data from the given World
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
sourcefn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
impl<T> TypeData for T where
T: 'static + Send + Sync + Clone,
impl<T> TypeData for T where
T: 'static + Send + Sync + Clone,
fn clone_type_data(&self) -> Box<dyn TypeData + 'static, Global>
impl<T> TypeUuidDynamic for T where
T: TypeUuid,
impl<T> TypeUuidDynamic for T where
T: TypeUuid,
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
T: Future, type Output = <T as Future>::Output;
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
fn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more