pub struct ParallaxMaterial {Show 21 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: 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,
pub height_map: Handle<Image>,
pub height_depth: f32,
pub algorithm: ParallaxAlgo,
pub max_height_layers: f32,
pub fog_enabled: bool,
}Expand description
A shameless clone of bevy’s default PBR material with an additional field:
height_map.
height_map is a greyscale image representing the height of the object at a given
pixel. Works like the original StandardMaterial otherwise.
WARNING: this material assumes the mesh has tangents set. If your mesh doesn’t have tangents, bad unspecified things will happen.
Fields§
§base_color: ColorDoubles 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>>The “albedo” of the material, when Some, this will be the texture applied to the mesh.
emissive: ColorColor 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>>Same as emissive, but based off a texture
perceptual_roughness: f32Linear 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: f32From [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>>A texture representing both metallic and preceptual_roughness.
The blue channel is the metallic and green is roughness (we don’t
talk about the red channel)
reflectance: f32Specular 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: 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: boolNormal 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: boolSupport 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: boolWhether to shade this material.
Normals, occlusion textures, roughness, metallic, reflectance and
emissive are ignored if this is set to true.
alpha_mode: AlphaModeHow to interpret the alpha channel of the base_color_texture.
By default, it’s Opaque, therefore completely ignored.
Note that currently bevy handles poorly semi-transparent textures. You
are likely to encounter the following bugs:
- When two
AlphaMode::Blendmaterial occupy the same pixel, only one material’s color will show. - If a different mesh is both “in front” and “behind” a non-opaque material, bevy won’t know which material to display in front, which might result in flickering.
depth_bias: f32Re-arange depth of material, useful to avoid z-fighting.
height_map: Handle<Image>The height map used for parallax mapping.
Black is the tallest, white deepest.
To improve performance, set your height_map’s Image::sampler_descriptor
filter mode to FilterMode::Nearest, as this paper indicates, it improves
perfs a bit.
height_depth: f32How deep the offset introduced by the height map should be.
Default is 0.1, anything over that value may look very awkward. Lower value look less “deep.”
algorithm: ParallaxAlgoWhether to use a more accurate and more expensive algorithm.
We recommend that all objects use the same ParallaxAlgo, to avoid
duplicating and running two shaders.
max_height_layers: f32In how many layers to split the height maps for Steep Parallax Mapping.
If your height_depth is >0.1 and you are seeing jaggy edges,
increase this value. However, this incures a performance cost.
Default is 16.0.
This must never be less than 2.0.
fog_enabled: boolWhether to enable fog for this material
Trait Implementations§
Source§impl AsBindGroup for ParallaxMaterial
impl AsBindGroup for ParallaxMaterial
Source§type Data = ParallaxMaterialKey
type Data = ParallaxMaterialKey
Source§fn as_bind_group(
&self,
layout: &BindGroupLayout,
render_device: &RenderDevice,
images: &RenderAssets<Image>,
fallback_image: &FallbackImage,
) -> Result<PreparedBindGroup<Self::Data>, AsBindGroupError>
fn as_bind_group( &self, layout: &BindGroupLayout, render_device: &RenderDevice, images: &RenderAssets<Image>, fallback_image: &FallbackImage, ) -> Result<PreparedBindGroup<Self::Data>, AsBindGroupError>
self matching the layout defined in AsBindGroup::bind_group_layout.Source§fn bind_group_layout(render_device: &RenderDevice) -> BindGroupLayout
fn bind_group_layout(render_device: &RenderDevice) -> BindGroupLayout
AsBindGroup::as_bind_groupSource§impl AsBindGroupShaderType<ParallaxMaterialUniform> for ParallaxMaterial
impl AsBindGroupShaderType<ParallaxMaterialUniform> for ParallaxMaterial
Source§fn as_bind_group_shader_type(
&self,
images: &RenderAssets<Image>,
) -> ParallaxMaterialUniform
fn as_bind_group_shader_type( &self, images: &RenderAssets<Image>, ) -> ParallaxMaterialUniform
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.Source§impl Clone for ParallaxMaterial
impl Clone for ParallaxMaterial
Source§fn clone(&self) -> ParallaxMaterial
fn clone(&self) -> ParallaxMaterial
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ParallaxMaterial
impl Debug for ParallaxMaterial
Source§impl Default for ParallaxMaterial
impl Default for ParallaxMaterial
Source§impl From<&ParallaxMaterial> for ParallaxMaterialKey
impl From<&ParallaxMaterial> for ParallaxMaterialKey
Source§fn from(material: &ParallaxMaterial) -> Self
fn from(material: &ParallaxMaterial) -> Self
Source§impl From<&ParallaxMaterial> for StandardMaterial
impl From<&ParallaxMaterial> for StandardMaterial
Source§fn from(mat: &ParallaxMaterial) -> Self
fn from(mat: &ParallaxMaterial) -> Self
Source§impl FromReflect for ParallaxMaterialwhere
Color: FromReflect,
Option<Handle<Image>>: FromReflect,
f32: FromReflect,
Handle<Image>: FromReflect,
bool: FromReflect,
AlphaMode: FromReflect,
ParallaxAlgo: FromReflect,
Option<Face>:,
impl FromReflect for ParallaxMaterialwhere
Color: FromReflect,
Option<Handle<Image>>: FromReflect,
f32: FromReflect,
Handle<Image>: FromReflect,
bool: FromReflect,
AlphaMode: FromReflect,
ParallaxAlgo: FromReflect,
Option<Face>:,
Source§fn from_reflect(reflect: &dyn Reflect) -> Option<Self>
fn from_reflect(reflect: &dyn Reflect) -> Option<Self>
Self from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn Reflect>,
) -> Result<Self, Box<dyn Reflect>>
fn take_from_reflect( reflect: Box<dyn Reflect>, ) -> Result<Self, Box<dyn Reflect>>
Self using,
constructing the value using from_reflect if that fails. Read moreSource§impl Material for ParallaxMaterial
impl Material for ParallaxMaterial
Source§fn specialize(
_pipeline: &MaterialPipeline<Self>,
descriptor: &mut RenderPipelineDescriptor,
_layout: &MeshVertexBufferLayout,
key: MaterialPipelineKey<Self>,
) -> Result<(), SpecializedMeshPipelineError>
fn specialize( _pipeline: &MaterialPipeline<Self>, descriptor: &mut RenderPipelineDescriptor, _layout: &MeshVertexBufferLayout, key: MaterialPipelineKey<Self>, ) -> Result<(), SpecializedMeshPipelineError>
RenderPipelineDescriptor for a specific entity using the entity’s
MaterialPipelineKey and MeshVertexBufferLayout as input.Source§fn fragment_shader() -> ShaderRef
fn fragment_shader() -> ShaderRef
ShaderRef::Default is returned, the default mesh fragment shader
will be used.Source§fn alpha_mode(&self) -> AlphaMode
fn alpha_mode(&self) -> AlphaMode
AlphaMode. Defaults to AlphaMode::Opaque.Source§fn depth_bias(&self) -> f32
fn depth_bias(&self) -> f32
Source§fn vertex_shader() -> ShaderRef
fn vertex_shader() -> ShaderRef
ShaderRef::Default is returned, the default mesh vertex shader
will be used.Source§fn prepass_vertex_shader() -> ShaderRef
fn prepass_vertex_shader() -> ShaderRef
ShaderRef::Default is returned, the default prepass vertex shader
will be used.Source§fn prepass_fragment_shader() -> ShaderRef
fn prepass_fragment_shader() -> ShaderRef
ShaderRef::Default is returned, the default prepass fragment shader
will be used.Source§impl Reflect for ParallaxMaterial
impl Reflect for ParallaxMaterial
Source§fn get_type_info(&self) -> &'static TypeInfo
fn get_type_info(&self) -> &'static TypeInfo
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any.Source§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Source§fn clone_value(&self) -> Box<dyn Reflect>
fn clone_value(&self) -> Box<dyn Reflect>
Reflect trait object. Read moreSource§fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
Source§impl Struct for ParallaxMaterial
impl Struct for ParallaxMaterial
Source§fn field(&self, name: &str) -> Option<&dyn Reflect>
fn field(&self, name: &str) -> Option<&dyn Reflect>
name as a &dyn Reflect.Source§fn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
name as a
&mut dyn Reflect.Source§fn field_at(&self, index: usize) -> Option<&dyn Reflect>
fn field_at(&self, index: usize) -> Option<&dyn Reflect>
index as a
&dyn Reflect.Source§fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
index
as a &mut dyn Reflect.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index.Source§fn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
Source§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct.Source§impl Typed for ParallaxMaterial
impl Typed for ParallaxMaterial
Auto Trait Implementations§
impl Freeze for ParallaxMaterial
impl RefUnwindSafe for ParallaxMaterial
impl Send for ParallaxMaterial
impl Sync for ParallaxMaterial
impl Unpin for ParallaxMaterial
impl UnwindSafe for ParallaxMaterial
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self using data from the given WorldSource§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for Twhere
T: Reflect,
impl<T> GetPath for Twhere
T: Reflect,
Source§fn reflect_path<'r, 'p>(
&'r self,
path: &'p str,
) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path<'r, 'p>( &'r self, path: &'p str, ) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn reflect_path_mut<'r, 'p>(
&'r mut self,
path: &'p str,
) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'r, 'p>( &'r mut self, path: &'p str, ) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
path. Read more