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, 18fn calculate_motion_vector( 19 world_position: vec3<f32>, 20 previous_world_position: vec3<f32>, 22 let world_position_t = vec4<f32>(world_position, 1.0); 23 let previous_world_position_t = vec4<f32>(previous_world_position, 1.0); 24 let clip_position_t = view.unjittered_clip_from_world * world_position_t; 25 let clip_position = clip_position_t.xy / clip_position_t.w; 26 let previous_clip_position_t = previous_view_uniforms.clip_from_world * previous_world_position_t; 27 let previous_clip_position = previous_clip_position_t.xy / previous_clip_position_t.w; 34 return (clip_position - previous_clip_position) * vec2(0.5, -0.5); 38fn optical_flow_to_rgb( 39 motion_vector: vec2<f32>, 41 let flow = motion_vector / globals.delta_time; 43 let radius = length(flow); 44 var angle = atan2(flow.y, flow.x); 52 let m = clamp(radius, 0.0, 1.0); 54 let rgb = hsv_to_rgb(vec3<f32>(angle, m, 1.0));