From c8f1b3b962c83ae1e7c6b175fb74ef1890495b2b Mon Sep 17 00:00:00 2001 From: Arnav Mummineni <45217840+RCoder01@users.noreply.github.com> Date: Fri, 3 Jul 2026 10:08:00 -0400 Subject: [PATCH 1/2] offset by subview viewport --- crates/bevy_pbr/src/transmission/transmission.wgsl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/bevy_pbr/src/transmission/transmission.wgsl b/crates/bevy_pbr/src/transmission/transmission.wgsl index 06e3c0e4512b1..1b58e3a116709 100644 --- a/crates/bevy_pbr/src/transmission/transmission.wgsl +++ b/crates/bevy_pbr/src/transmission/transmission.wgsl @@ -42,7 +42,11 @@ fn specular_transmissive_light(world_position: vec4, frag_coord: vec3, let clip_exit_position = view_bindings::view.clip_from_world * vec4(exit_position, 1.0); // Scale / offset position so that coordinate is in right space for sampling transmissive background texture - let offset_position = (clip_exit_position.xy / clip_exit_position.w) * vec2(0.5, -0.5) + 0.5; + let subview_position = (clip_exit_position.xy / clip_exit_position.w) * vec2(0.5, -0.5) + 0.5; + let origin = view_bindings::view.viewport.xy; + let size = view_bindings::view.viewport.zw; + let full_size = textureDimensions(view_bindings::view_transmission_texture); + let offset_position = (subview_position * size + origin) / vec2f(f32(full_size.x), f32(full_size.y)); // Fetch background color var background_color: vec4; From 46bb19b3b313c68366119a73b04bf79ab4946b3d Mon Sep 17 00:00:00 2001 From: Arnav Mummineni <45217840+RCoder01@users.noreply.github.com> Date: Sat, 4 Jul 2026 12:26:16 -0400 Subject: [PATCH 2/2] naming --- crates/bevy_pbr/src/transmission/transmission.wgsl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/bevy_pbr/src/transmission/transmission.wgsl b/crates/bevy_pbr/src/transmission/transmission.wgsl index 1b58e3a116709..ff7be0f945478 100644 --- a/crates/bevy_pbr/src/transmission/transmission.wgsl +++ b/crates/bevy_pbr/src/transmission/transmission.wgsl @@ -43,10 +43,10 @@ fn specular_transmissive_light(world_position: vec4, frag_coord: vec3, // Scale / offset position so that coordinate is in right space for sampling transmissive background texture let subview_position = (clip_exit_position.xy / clip_exit_position.w) * vec2(0.5, -0.5) + 0.5; - let origin = view_bindings::view.viewport.xy; - let size = view_bindings::view.viewport.zw; - let full_size = textureDimensions(view_bindings::view_transmission_texture); - let offset_position = (subview_position * size + origin) / vec2f(f32(full_size.x), f32(full_size.y)); + let viewport_origin = view_bindings::view.viewport.xy; + let viewport_size = view_bindings::view.viewport.zw; + let full_size = vec2(textureDimensions(view_bindings::view_transmission_texture)); + let offset_position = (subview_position * viewport_size + viewport_origin) / full_size; // Fetch background color var background_color: vec4;