From cbe13f3aa58b21d97db5796af259f87e2451b430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9l=C3=A8ne=20Amanita?= <134181069+Selene-Amanita@users.noreply.github.com> Date: Mon, 31 Jul 2023 19:55:42 +0100 Subject: [PATCH] Improve `Mesh` documentation (#9061) # Objective This PR continues https://github.com/bevyengine/bevy/pull/8885 It aims to improve the `Mesh` documentation in the following ways: - Put everything at the "top level" instead of the "impl". - Explain better what is a Mesh, how it can be created, and that it can be edited. - Explain it can be used with a `Material`, and mention `StandardMaterial`, `PbrBundle`, `ColorMaterial`, and `ColorMesh2dBundle` since those cover most cases - Mention the glTF/Bevy vocabulary discrepancy for "Mesh" - Add an image for the example - Various nitpicky modifications ## Note - The image I added is 90.3ko which I think is small enough? - Since rustdoc doesn't allow cross-reference not in dependencies of a subcrate [yet](https://github.com/rust-lang/rust/issues/74481), I have a lot of backtick references that are not links :( - Since rustdoc doesn't allow linking to code in the crate (?) I put link to github directly. - Since rustdoc doesn't allow embed images in doc [yet](https://github.com/rust-lang/rust/issues/32104), maybe [soon](https://github.com/rust-lang/rfcs/pull/3397), I had to put only a link to the image. I don't think it's worth adding [embed_doc_image](https://docs.rs/embed-doc-image/latest/embed_doc_image/) as a dependency for this. --- assets/docs/Mesh.png | Bin 0 -> 90278 bytes crates/bevy_asset/src/loader.rs | 4 +- crates/bevy_gltf/src/lib.rs | 3 +- crates/bevy_render/src/mesh/mesh/mod.rs | 118 ++++++++++++++++-------- 4 files changed, 81 insertions(+), 44 deletions(-) create mode 100644 assets/docs/Mesh.png diff --git a/assets/docs/Mesh.png b/assets/docs/Mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..fd556d3427f5c51172b122ce3b2c581f889b0f73 GIT binary patch literal 90278 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

P!{t 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%0A~6 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 literal 0 HcmV?d00001 diff --git a/crates/bevy_asset/src/loader.rs b/crates/bevy_asset/src/loader.rs index 6853ebf228..6b2536e43c 100644 --- a/crates/bevy_asset/src/loader.rs +++ b/crates/bevy_asset/src/loader.rs @@ -14,8 +14,8 @@ use std::path::Path; /// A loader for an asset source. /// -/// Types implementing this trait are used by the asset server to load assets into their respective -/// asset storages. +/// Types implementing this trait are used by the [`AssetServer`] to load assets +/// into their respective asset storages. pub trait AssetLoader: Send + Sync + 'static { /// Processes the asset in an asynchronous closure. fn load<'a>( diff --git a/crates/bevy_gltf/src/lib.rs b/crates/bevy_gltf/src/lib.rs index fc022bf94f..90f8443aab 100644 --- a/crates/bevy_gltf/src/lib.rs +++ b/crates/bevy_gltf/src/lib.rs @@ -60,7 +60,8 @@ impl Plugin for GltfPlugin { } } -/// Representation of a loaded glTF file. +/// Representation of a loaded glTF file +/// (file loaded via the `AssetServer` with the extension `.glb` or `.gltf`). #[derive(Debug, TypeUuid, TypePath)] #[uuid = "5c7d5f8a-f7b0-4e45-a09e-406c0372fea2"] pub struct Gltf { diff --git a/crates/bevy_render/src/mesh/mesh/mod.rs b/crates/bevy_render/src/mesh/mesh/mod.rs index 2110fec6aa..3bb065b292 100644 --- a/crates/bevy_render/src/mesh/mesh/mod.rs +++ b/crates/bevy_render/src/mesh/mesh/mod.rs @@ -26,28 +26,24 @@ use wgpu::{ pub const INDEX_BUFFER_ASSET_INDEX: u64 = 0; pub const VERTEX_ATTRIBUTE_BUFFER_ID: u64 = 10; -// TODO: allow values to be unloaded after been submitting to the GPU to conserve memory -#[derive(Debug, TypeUuid, TypePath, Clone)] -#[uuid = "8ecbac0f-f545-4473-ad43-e1f4243af51e"] -pub struct Mesh { - primitive_topology: PrimitiveTopology, - /// `std::collections::BTreeMap` with all defined vertex attributes (Positions, Normals, ...) - /// for this mesh. Attribute ids to attribute values. - /// Uses a BTreeMap because, unlike HashMap, it has a defined iteration order, - /// which allows easy stable VertexBuffers (i.e. same buffer order) - attributes: BTreeMap, - indices: Option, - morph_targets: Option>, - morph_target_names: Option>, -} - -/// Contains geometry in the form of a mesh. +/// A 3D object made out of vertices representing triangles, lines, or points, +/// with "attribute" values for each vertex. /// -/// Often meshes are automatically generated by bevy's asset loaders or primitives, such as -/// [`shape::Cube`](crate::mesh::shape::Cube) or [`shape::Box`](crate::mesh::shape::Box), but you can also construct -/// one yourself. +/// Meshes can be automatically generated by a bevy `AssetLoader` (generally by loading a `Gltf` file), +/// or by converting a primitive [`shape`](crate::mesh::shape) using [`into`](std::convert::Into). +/// It is also possible to create one manually. +/// They can be edited after creation. /// -/// Example of constructing a mesh (to be rendered with a `StandardMaterial`): +/// Meshes can be rendered with a `Material`, like `StandardMaterial` in `PbrBundle` +/// or `ColorMaterial` in `ColorMesh2dBundle`. +/// +/// A [`Mesh`] in Bevy is equivalent to a "primitive" in the glTF format, for a +/// glTF Mesh representation, see `GltfMesh`. +/// +/// ## Manual creation +/// +/// The following function will construct a flat mesh, to be rendered with a +/// `StandardMaterial` or `ColorMaterial`: /// ``` /// # use bevy_render::mesh::{Mesh, Indices}; /// # use bevy_render::render_resource::PrimitiveTopology; @@ -78,50 +74,90 @@ pub struct Mesh { /// 1, 3, 2 /// ]))); /// mesh -/// // For further visualization, explanation, and examples see the built-in Bevy examples -/// // and the implementation of the built-in shapes. /// } /// ``` -/// Common points of confusion: -/// - UV maps in Bevy are "flipped", (0.0, 0.0) = Top-Left (not Bot-Left like `OpenGL`) -/// - It is normal for multiple vertices to have the same position -/// attribute - it's a common technique in 3D modelling for complex UV mapping or other calculations. /// -/// To render correctly with `StandardMaterial` a mesh needs to have properly defined: -/// - [`UVs`](Mesh::ATTRIBUTE_UV_0): Bevy needs to know how to map a texture onto the mesh. -/// - [`Normals`](Mesh::ATTRIBUTE_NORMAL): Bevy needs to know how light interacts with your mesh. ([0.0, 0.0, 1.0] is very -/// common for simple meshes because simple meshes are smooth, and they don't require complex light calculations.) -/// - Vertex winding order - -/// the default behavior is with `StandardMaterial.cull_mode` = Some([`Face::Front`](crate::render_resource::Face::Front)) which means -/// that by default Bevy would *only* render the front of each triangle, and the front -/// is the side of the triangle in which the vertices appear in a *counter-clockwise* order. +/// You can see how it looks like [here](https://github.com/bevyengine/bevy/blob/main/assets/dovs/Mesh.png), +/// used in a `PbrBundle` with a square bevy logo texture, with added axis, points, +/// lines and text for clarity. /// +/// ## Other examples +/// +/// For further visualization, explanation, and examples, see the built-in Bevy examples, +/// and the [implementation of the built-in shapes](https://github.com/bevyengine/bevy/tree/main/crates/bevy_render/src/mesh/shape). +/// In particular, [generate_custom_mesh](https://github.com/bevyengine/bevy/blob/main/examples/3d/generate_custom_mesh.rs) +/// teaches you to access modify a Mesh's attributes after creating it. +/// +/// ## Common points of confusion +/// +/// - UV maps in Bevy start at the top-left, see [`ATTRIBUTE_UV_0`](Mesh::ATTRIBUTE_UV_0), +/// other APIs can have other conventions, `OpenGL` starts at bottom-left. +/// - It is possible and sometimes useful for multiple vertices to have the same +/// [position attribute](Mesh::ATTRIBUTE_POSITION) value, +/// it's a common technique in 3D modelling for complex UV mapping or other calculations. +/// +/// ## Use with `StandardMaterial` +/// +/// To render correctly with `StandardMaterial`, a mesh needs to have properly defined: +/// - [`UVs`](Mesh::ATTRIBUTE_UV_0): Bevy needs to know how to map a texture onto the mesh +/// (also true for `ColorMaterial`). +/// - [`Normals`](Mesh::ATTRIBUTE_NORMAL): Bevy needs to know how light interacts with your mesh. +/// [0.0, 0.0, 1.0] is very common for simple flat meshes on the XY plane, +/// because simple meshes are smooth and they don't require complex light calculations. +/// - Vertex winding order: by default, `StandardMaterial.cull_mode` is [`Some(Face::Back)`](crate::render_resource::Face), +/// which means that Bevy would *only* render the "front" of each triangle, which +/// is the side of the triangle from where the vertices appear in a *counter-clockwise* order. +/// +// TODO: allow values to be unloaded after been submitting to the GPU to conserve memory +#[derive(Debug, TypeUuid, TypePath, Clone)] +#[uuid = "8ecbac0f-f545-4473-ad43-e1f4243af51e"] +pub struct Mesh { + primitive_topology: PrimitiveTopology, + /// `std::collections::BTreeMap` with all defined vertex attributes (Positions, Normals, ...) + /// for this mesh. Attribute ids to attribute values. + /// Uses a BTreeMap because, unlike HashMap, it has a defined iteration order, + /// which allows easy stable VertexBuffers (i.e. same buffer order) + attributes: BTreeMap, + indices: Option, + morph_targets: Option>, + morph_target_names: Option>, +} + impl Mesh { - /// Where the vertex is located in space. Use in conjunction with [`Mesh::insert_attribute`] + /// Where the vertex is located in space. Use in conjunction with [`Mesh::insert_attribute`]. pub const ATTRIBUTE_POSITION: MeshVertexAttribute = MeshVertexAttribute::new("Vertex_Position", 0, VertexFormat::Float32x3); /// The direction the vertex normal is facing in. - /// Use in conjunction with [`Mesh::insert_attribute`] + /// Use in conjunction with [`Mesh::insert_attribute`]. pub const ATTRIBUTE_NORMAL: MeshVertexAttribute = MeshVertexAttribute::new("Vertex_Normal", 1, VertexFormat::Float32x3); - /// Texture coordinates for the vertex. Use in conjunction with [`Mesh::insert_attribute`] + /// Texture coordinates for the vertex. Use in conjunction with [`Mesh::insert_attribute`]. + /// + /// Values are generally between 0. and 1., with `StandardMaterial` and `ColorMaterial` + /// `[0.,0.]` is the top left of the texture, and [1.,1.] the bottom-right. + /// You usually want to only use values in that range, values outside will be + /// clamped per pixel not for the vertex, "stretching" the borders of the texture. + /// This behavior can be useful in some cases, usually when the borders have only + /// one color, for example a logo, and you want to "extend" those borders. pub const ATTRIBUTE_UV_0: MeshVertexAttribute = MeshVertexAttribute::new("Vertex_Uv", 2, VertexFormat::Float32x2); - /// The direction of the vertex tangent. Used for normal mapping + /// The direction of the vertex tangent. Used for normal mapping. + /// Usually generated with [`generate_tangents`](Mesh::generate_tangents). pub const ATTRIBUTE_TANGENT: MeshVertexAttribute = MeshVertexAttribute::new("Vertex_Tangent", 3, VertexFormat::Float32x4); - /// Per vertex coloring. Use in conjunction with [`Mesh::insert_attribute`] + /// Per vertex coloring. Use in conjunction with [`Mesh::insert_attribute`]. pub const ATTRIBUTE_COLOR: MeshVertexAttribute = MeshVertexAttribute::new("Vertex_Color", 4, VertexFormat::Float32x4); - /// Per vertex joint transform matrix weight. Use in conjunction with [`Mesh::insert_attribute`] + /// Per vertex joint transform matrix weight. Use in conjunction with [`Mesh::insert_attribute`]. pub const ATTRIBUTE_JOINT_WEIGHT: MeshVertexAttribute = MeshVertexAttribute::new("Vertex_JointWeight", 5, VertexFormat::Float32x4); - /// Per vertex joint transform matrix index. Use in conjunction with [`Mesh::insert_attribute`] + + /// Per vertex joint transform matrix index. Use in conjunction with [`Mesh::insert_attribute`]. pub const ATTRIBUTE_JOINT_INDEX: MeshVertexAttribute = MeshVertexAttribute::new("Vertex_JointIndex", 6, VertexFormat::Uint16x4);