bevy/crates
Robert Bragg 1d5145fd64 StandardMaterial: expose a cull_mode option (#3982)
This makes it possible for materials to configure front or
back face culling, or disable culling.

Initially I looked at specializing the Mesh which currently
controls this state but conceptually it seems more appropriate
to control this at the material level, not the mesh level.

_Just for reference this also seems to be consistent with Unity
where materials/shaders can configure the culling mode between
front/back/off - as opposed to configuring any culling state
when importing a mesh._

After some archaeology, trying to understand how this might
relate to the existing 'double_sided' option, it was determined
that double_sided is a more high level lighting option originally
from Filament that will cause the normals for back faces to be
flipped.

For sake of avoiding complexity, but keeping control this
currently keeps the options orthogonal, and adds some clarifying
documentation for `double_sided`. This won't affect any existing
apps since there hasn't been a way to disable backface culling
up until now, so the option was essentially redundant.

double_sided support could potentially be updated to imply
disabling of backface culling.

For reference https://github.com/bevyengine/bevy/pull/3734/commits also looks at exposing cull mode control. I think the main difference here is that this patch handles RenderPipelineDescriptor specialization directly within the StandardMaterial implementation instead of communicating info back to the Mesh via the `queue_material_meshes` system.

With the way material.rs builds up the final RenderPipelineDescriptor first by calling specialize for the MeshPipeline followed by specialize for the material then it seems like we have a natural place to override anything in the descriptor that's first configured for the mesh state.
2022-03-05 03:37:23 +00:00
..
bevy_app remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00
bevy_asset remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00
bevy_audio Audio control - play, pause, volume, speed, loop (#3948) 2022-03-01 01:12:11 +00:00
bevy_core Make get_resource (and friends) infallible (#4047) 2022-02-27 22:37:18 +00:00
bevy_core_pipeline Make get_resource (and friends) infallible (#4047) 2022-02-27 22:37:18 +00:00
bevy_crevice Don't panic in macro shape validation (#3647) 2022-01-15 22:14:43 +00:00
bevy_derive small and mostly pointless refactoring (#2934) 2022-02-13 22:33:55 +00:00
bevy_diagnostic small and mostly pointless refactoring (#2934) 2022-02-13 22:33:55 +00:00
bevy_dylib Release 0.6.0 (#3587) 2022-01-08 10:18:22 +00:00
bevy_dynamic_plugin Release 0.6.0 (#3587) 2022-01-08 10:18:22 +00:00
bevy_ecs Make get_resource (and friends) infallible (#4047) 2022-02-27 22:37:18 +00:00
bevy_ecs_compile_fail_tests Release 0.6.0 (#3587) 2022-01-08 10:18:22 +00:00
bevy_gilrs remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00
bevy_gltf Mesh vertex buffer layouts (#3959) 2022-02-23 23:21:13 +00:00
bevy_input remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00
bevy_internal default() shorthand (#4071) 2022-03-01 20:52:09 +00:00
bevy_log Example of module-level log usage and RUST_LOG usage in main doc (#3919) 2022-03-05 03:00:31 +00:00
bevy_macro_utils small and mostly pointless refactoring (#2934) 2022-02-13 22:33:55 +00:00
bevy_math Release 0.6.0 (#3587) 2022-01-08 10:18:22 +00:00
bevy_pbr StandardMaterial: expose a cull_mode option (#3982) 2022-03-05 03:37:23 +00:00
bevy_reflect Updated visibility of reflected trait (#4034) 2022-02-25 07:05:51 +00:00
bevy_render remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00
bevy_scene remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00
bevy_sprite Make get_resource (and friends) infallible (#4047) 2022-02-27 22:37:18 +00:00
bevy_tasks small and mostly pointless refactoring (#2934) 2022-02-13 22:33:55 +00:00
bevy_text Make get_resource (and friends) infallible (#4047) 2022-02-27 22:37:18 +00:00
bevy_transform small and mostly pointless refactoring (#2934) 2022-02-13 22:33:55 +00:00
bevy_ui remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00
bevy_utils default() shorthand (#4071) 2022-03-01 20:52:09 +00:00
bevy_window remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00
bevy_winit remove Events from bevy_app, they now live in bevy_ecs (#4066) 2022-03-01 19:33:56 +00:00