forked from bevyengine/bevy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
use
Material
for wireframes (bevyengine#5314)
# Objective - Use the `Material` abstraction for the Wireframes - Right now this doesn't have many benefits other than simplifying some of the rendering code - We can reuse the default vertex shader and avoid rendering inconsistencies - The goal is to have a material with a color on each mesh so this approach will make it easier to implement - Originally done in bevyengine#5303 but I decided to split the Material part to it's own PR and then adding per-entity colors and globally configurable colors will be a much simpler diff. ## Solution - Use the new `Material` abstraction for the Wireframes ## Notes It's possible this isn't ideal since this adds a `Handle<WireframeMaterial>` to all the meshes compared to the original approach that didn't need anything. I didn't notice any performance impact on my machine. This might be a surprising usage of `Material` at first, because intuitively you only have one material per mesh, but the way it's implemented you can have as many different types of materials as you want on a mesh. ## Migration Guide `WireframePipeline` was removed. If you were using it directly, please create an issue explaining your use case. --------- Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
- Loading branch information
1 parent
4351434
commit cef1899
Showing
3 changed files
with
132 additions
and
222 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,66 +1,6 @@ | ||
#import bevy_pbr::mesh_bindings mesh | ||
#import bevy_pbr::mesh_functions get_model_matrix, mesh_position_local_to_clip | ||
#import bevy_pbr::morph | ||
|
||
#ifdef SKINNED | ||
#import bevy_pbr::skinning | ||
#endif | ||
|
||
struct Vertex { | ||
@builtin(instance_index) instance_index: u32, | ||
@location(0) position: vec3<f32>, | ||
#ifdef SKINNED | ||
@location(5) joint_indexes: vec4<u32>, | ||
@location(6) joint_weights: vec4<f32>, | ||
#endif | ||
#ifdef MORPH_TARGETS | ||
@builtin(vertex_index) index: u32, | ||
#endif | ||
}; | ||
|
||
struct VertexOutput { | ||
@builtin(position) clip_position: vec4<f32>, | ||
}; | ||
|
||
|
||
#ifdef MORPH_TARGETS | ||
fn morph_vertex(vertex_in: Vertex) -> Vertex { | ||
var vertex = vertex_in; | ||
let weight_count = bevy_pbr::morph::layer_count(); | ||
for (var i: u32 = 0u; i < weight_count; i ++) { | ||
let weight = bevy_pbr::morph::weight_at(i); | ||
if weight == 0.0 { | ||
continue; | ||
} | ||
vertex.position += weight * bevy_pbr::morph::morph(vertex.index, bevy_pbr::morph::position_offset, i); | ||
} | ||
return vertex; | ||
} | ||
#endif | ||
|
||
@vertex | ||
fn vertex(vertex_no_morph: Vertex) -> VertexOutput { | ||
|
||
#ifdef MORPH_TARGETS | ||
var vertex = morph_vertex(vertex_no_morph); | ||
#else | ||
var vertex = vertex_no_morph; | ||
#endif | ||
|
||
#ifdef SKINNED | ||
let model = bevy_pbr::skinning::skin_model(vertex.joint_indexes, vertex.joint_weights); | ||
#else | ||
// Use vertex_no_morph.instance_index instead of vertex.instance_index to work around a wgpu dx12 bug. | ||
// See https://github.com/gfx-rs/naga/issues/2416 . | ||
let model = get_model_matrix(vertex_no_morph.instance_index); | ||
#endif | ||
|
||
var out: VertexOutput; | ||
out.clip_position = mesh_position_local_to_clip(model, vec4<f32>(vertex.position, 1.0)); | ||
return out; | ||
} | ||
#import bevy_pbr::mesh_vertex_output MeshVertexOutput | ||
|
||
@fragment | ||
fn fragment() -> @location(0) vec4<f32> { | ||
fn fragment(in: MeshVertexOutput) -> @location(0) vec4<f32> { | ||
return vec4<f32>(1.0, 1.0, 1.0, 1.0); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.