From fad7b366c90d800a78f863e19be3829216b3348f Mon Sep 17 00:00:00 2001 From: Elijah Seed-Arita Date: Mon, 27 Jun 2022 15:51:22 -0400 Subject: [PATCH 1/2] Add inverse_projection and inverse_view_proj fields to view uniform --- crates/bevy_pbr/src/render/mesh_view_types.wgsl | 2 ++ crates/bevy_render/src/view/mod.rs | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/crates/bevy_pbr/src/render/mesh_view_types.wgsl b/crates/bevy_pbr/src/render/mesh_view_types.wgsl index 3892cdefb46dc..31d3cdebb275c 100644 --- a/crates/bevy_pbr/src/render/mesh_view_types.wgsl +++ b/crates/bevy_pbr/src/render/mesh_view_types.wgsl @@ -2,9 +2,11 @@ struct View { view_proj: mat4x4; + inverse_view_proj: mat4x4; view: mat4x4; inverse_view: mat4x4; projection: mat4x4; + inverse_projection: mat4x4; world_position: vec3; width: f32; height: f32; diff --git a/crates/bevy_render/src/view/mod.rs b/crates/bevy_render/src/view/mod.rs index 2638e94d4581a..3312b607a3f2a 100644 --- a/crates/bevy_render/src/view/mod.rs +++ b/crates/bevy_render/src/view/mod.rs @@ -84,9 +84,11 @@ pub struct ExtractedView { #[derive(Clone, ShaderType)] pub struct ViewUniform { view_proj: Mat4, + inverse_view_proj: Mat4, view: Mat4, inverse_view: Mat4, projection: Mat4, + inverse_projection: Mat4, world_position: Vec3, width: f32, height: f32, @@ -138,14 +140,17 @@ fn prepare_view_uniforms( view_uniforms.uniforms.clear(); for (entity, camera) in views.iter() { let projection = camera.projection; + let inverse_projection = projection.inverse(); let view = camera.transform.compute_matrix(); let inverse_view = view.inverse(); let view_uniforms = ViewUniformOffset { offset: view_uniforms.uniforms.push(ViewUniform { view_proj: projection * inverse_view, + inverse_view_proj: inverse_projection * view, view, inverse_view, projection, + inverse_projection, world_position: camera.transform.translation, width: camera.width as f32, height: camera.height as f32, From 6d401a6722745edb4bc52c932b66734f4744a84f Mon Sep 17 00:00:00 2001 From: Elijah Date: Mon, 27 Jun 2022 16:52:50 -0400 Subject: [PATCH 2/2] Correct inverse_view_proj matrix multiplication order Co-authored-by: Robert Swain --- crates/bevy_render/src/view/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_render/src/view/mod.rs b/crates/bevy_render/src/view/mod.rs index 3312b607a3f2a..35bd213bfd9b3 100644 --- a/crates/bevy_render/src/view/mod.rs +++ b/crates/bevy_render/src/view/mod.rs @@ -146,7 +146,7 @@ fn prepare_view_uniforms( let view_uniforms = ViewUniformOffset { offset: view_uniforms.uniforms.push(ViewUniform { view_proj: projection * inverse_view, - inverse_view_proj: inverse_projection * view, + inverse_view_proj: view * inverse_projection, view, inverse_view, projection,