-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a repeating texture example #11161
Conversation
Welcome, new contributor! Please make sure you've read our contributing guide and we look forward to reviewing your pull request shortly ✨ |
@alice-i-cecile @IceSentry would you mind reviewing this? |
// Instead of using a standard quad with UV coordinates in the range `0..=1` (spanning the entire texture), | ||
// we create a quad with UV coordinates in the range `-1..=2`, going beyond the texture by one entire unit in each direction. | ||
// Texture behaviour then depends on the selected sampler mode. | ||
// By default (`ImageAddressMode::ClampToEdge`) the out-of-bounds UV coordinates will map to the edge of the texture. | ||
// When `ImageAddressMode::Repeat` is specified the out-of-bounds UV coordinates will repeat the texture. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My opinion, which has very little weight in this context would be this:
Less text is better, because those who read the example, would have to spend less time and energy reading it.
standard quad with UV coordinates
There's no such thing as "standard quad with UV coordinates". For example, if you have a mesh for a sphere, it usually contains hundreds quads, and none of them use coordinates 0..1. Quads with XY and UV coordinates 0..1 are used mostly in examples (and probably in Minecraft).
Also the comments below "usual UV range 0..=1
", "custom UV coordinates" are not exactly correct for the same reason.
Texture behaviour then depends on the selected sampler mode
Texture behavior always depends on the sampler more, not "then". Perhaps you meant "Texture behaviour then depends on the selected address mode", which indeed then depends, because when UV is in range 0..=1, it does not depend on address mode.
By default (
ImageAddressMode::ClampToEdge
) the out-of-bounds UV coordinates will map to the edge of the texture.
WhenImageAddressMode::Repeat
is specified the out-of-bounds UV coordinates will repeat the texture
These would be the redundant comments because they
- repeat the mostly obvious enum variant name
- repeat enum documentation
- basically repeat what is said several lines above where the image is loaded (where this comments belongs)
Again, feel free to ignore this comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You make a good point in regards to the sampler vs address mode, that should be reworded.
As per what a standard quad UV means, you're right that when you're talking about quad as a graphics primitive (part of a mesh), it could have any UVs for any reason, but when one talks about a quad as a mesh itself (a geometric quadrilateral) it does occur to me only as natural to use UV coordinates as usual.
I said usual UV range 0..=1
, because in that range lie UVs of most meshes people come into contact with (3D designers don't typically make their UVs sample outside of a texture from my experience).
You're right the comment does seem to give a bunch of redundant information that could be found in the docstrings for ImageAddressMode
, though the purpose of the comment is mainly to explain why it takes user-handled in UV coordinates + a change in address mode to achieve the desired repeating effect, because just changing the adress mode would not actually produce any noticeable effects.
I'll consider shortening this part to a refference to the appropriate docs.
Anyway if someone gives me another opinion on this, I'll rewrite it.
In my very subjective opinion, examples are not meant to optimized for reading, not for code reuse. |
Could you edit your PR description to include that this also fixes #399? Also, I think we can simplify and unblock this by just removing the non-repeating texture from the example. Discussion: #11136 (comment) |
let mut mesh = Mesh::new(PrimitiveTopology::TriangleList); | ||
mesh.insert_attribute( | ||
Mesh::ATTRIBUTE_POSITION, | ||
vec![[0., 0., 0.], [1., 0., 0.], [1., 1., 0.], [0., 1., 0.]], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the vertex positions should match those of Bevy's "default quad." Users putting together code from various Bevy examples might be surprised that this quad isn't "anchored" on its center like the default one.
I personally feel like we should just modify the default Quad
here, and that the example would be a bit more self-documenting with a function more like repeating_quad(times: f32)
. I have an example using that method here: #11136 (comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Modifying the default Quad might be better, I'll at least fix the mesh coordinates.
A better function name is welcome, although repeating_quad(times: f32)
feels a little suggestive, because it suggest using this mesh would automatically cause repeating, whereas it only sets up a mesh that can be repeated over, but maybe this is not such a problem given the comments explaining the mechanisms.
Issue #399 added! |
One point against this fixing #399: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't have any blocking concerns: I think that the Quad swap would be nice, but should be done seperately.
@janhohenheim StandardMaterial also has uv_transform since #11904 , which is done exactly for GLTF |
@bugsweeper yep, I wrote that PR 😉 |
# Objective Fixes #11136 . Fixes #11161. ## Solution - Set image sampler with repeated mode for u and v - set uv_transform of StandardMaterial to resizing params ## Testing Got this view on example run ![image](https://github.com/bevyengine/bevy/assets/17225606/a5f7c414-7966-4c31-97e1-320241ddc75b)
Objective
Changelog
Started with the commits from the PR #11109
Added another commit that
quad_1_2
toquad_with_custom_uv
to make the sample code more useful and reusableFurther details
bevy::render::mesh::shape::Quad
?