1#define_import_path bevy_gaussian_splatting::optical_flow 4 forward_io::VertexOutput, 7#import bevy_render::color_operations::hsv_to_rgb 8#import bevy_render::maths::PI_2 10#import bevy_gaussian_splatting::bindings::{ 12 previous_view_uniforms, 16fn calculate_motion_vector( 17 world_position: vec3<f32>, 18 previous_world_position: vec3<f32>, 20 let world_position_t = vec4<f32>(world_position, 1.0); 21 let previous_world_position_t = vec4<f32>(previous_world_position, 1.0); 22 let clip_position_t = view.unjittered_clip_from_world * world_position_t; 23 let clip_position = clip_position_t.xy / clip_position_t.w; 24 let previous_clip_position_t = previous_view_uniforms.clip_from_world * previous_world_position_t; 25 let previous_clip_position = previous_clip_position_t.xy / previous_clip_position_t.w; 32 return (clip_position - previous_clip_position) * vec2(0.5, -0.5); 35fn optical_flow_to_rgb( 36 motion_vector: vec2<f32>, 38 let flow = motion_vector / globals.delta_time; 40 let radius = length(flow); 41 var angle = atan2(flow.y, flow.x); 49 let m = clamp(radius, 0.0, 1.0); 51 let rgb = hsv_to_rgb(vec3<f32>(angle, m, 1.0));