Add some documentation to standard material fields (#5323)

# Objective

the bevy pbr shader doesn't handle at all normal maps
if a mesh doesn't have backed tangents. This is a pitfall
(that I fell into) and needs to be documented.

# Solution

Document the behavior. (Also document a few other
`StandardMaterial` fields)

## Changelog

* Add documentation to `emissive`, `normal_map_texture` and `occlusion_texture` fields of `StandardMaterial`.
This commit is contained in:
Nicola Papale 2022-07-20 22:00:59 +00:00
parent 99440c11b3
commit 4b1f6f4ebb

View File

@ -24,9 +24,24 @@ pub struct StandardMaterial {
#[texture(1)] #[texture(1)]
#[sampler(2)] #[sampler(2)]
pub base_color_texture: Option<Handle<Image>>, pub base_color_texture: Option<Handle<Image>>,
// Use a color for user friendliness even though we technically don't use the alpha channel // Use a color for user friendliness even though we technically don't use the alpha channel
// Might be used in the future for exposure correction in HDR // Might be used in the future for exposure correction in HDR
/// 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.
pub emissive: Color, pub emissive: Color,
#[texture(3)] #[texture(3)]
#[sampler(4)] #[sampler(4)]
pub emissive_texture: Option<Handle<Image>>, pub emissive_texture: Option<Handle<Image>>,
@ -39,21 +54,55 @@ pub struct StandardMaterial {
/// If used together with a roughness/metallic texture, this is factored into the final base /// If used together with a roughness/metallic texture, this is factored into the final base
/// color as `metallic * metallic_texture_value` /// color as `metallic * metallic_texture_value`
pub metallic: f32, pub metallic: f32,
#[texture(5)] #[texture(5)]
#[sampler(6)] #[sampler(6)]
pub metallic_roughness_texture: Option<Handle<Image>>, pub metallic_roughness_texture: Option<Handle<Image>>,
/// Specular intensity for non-metals on a linear scale of [0.0, 1.0] /// 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 /// defaults to 0.5 which is mapped to 4% reflectance in the shader
pub reflectance: f32, pub reflectance: f32,
/// 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.
///
/// [`Mesh::generate_tangents`]: bevy_render::mesh::Mesh::generate_tangents
#[texture(9)] #[texture(9)]
#[sampler(10)] #[sampler(10)]
pub normal_map_texture: Option<Handle<Image>>, pub normal_map_texture: Option<Handle<Image>>,
/// Normal map textures authored for DirectX have their y-component flipped. Set this to flip /// Normal map textures authored for DirectX have their y-component flipped. Set this to flip
/// it to right-handed conventions. /// it to right-handed conventions.
pub flip_normal_map_y: bool, pub flip_normal_map_y: bool,
/// 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.
#[texture(7)] #[texture(7)]
#[sampler(8)] #[sampler(8)]
pub occlusion_texture: Option<Handle<Image>>, pub occlusion_texture: Option<Handle<Image>>,
/// Support two-sided lighting by automatically flipping the normals for "back" faces /// Support two-sided lighting by automatically flipping the normals for "back" faces
/// within the PBR lighting shader. /// within the PBR lighting shader.
/// Defaults to false. /// Defaults to false.