1#define_import_path bevy_gaussian_splatting::packed 3#import bevy_gaussian_splatting::bindings::points 4#ifdef BINARY_GAUSSIAN_OP 5 #import bevy_gaussian_splatting::bindings::{rhs_points, out_points} 8#import bevy_gaussian_splatting::spherical_harmonics::{ 9 spherical_harmonics_lookup, 15 fn gaussian_position(point: Gaussian) -> vec3<f32> { 16 return point.position_visibility.xyz; 19 fn gaussian_color(point: Gaussian, ray_direction: vec3<f32>) -> vec3<f32> { 20 let sh = gaussian_spherical_harmonics(point); 21 let color = spherical_harmonics_lookup(ray_direction, sh); 22 return srgb_to_linear(color); 25 fn gaussian_spherical_harmonics(point: Gaussian) -> array<f32, #{SH_COEFF_COUNT}> { 29 fn gaussian_rotation(point: Gaussian) -> vec4<f32> { 30 return point.rotation; 33 fn gaussian_scale(point: Gaussian) -> vec3<f32> { 34 return point.scale_opacity.xyz; 37 fn gaussian_opacity(point: Gaussian) -> f32 { 38 return point.scale_opacity.w; 41 fn gaussian_visibility(point: Gaussian) -> f32 { 42 return point.position_visibility.w; 45 fn get_position(index: u32) -> vec3<f32> { 46 return gaussian_position(points[index]); 51 ray_direction: vec3<f32>, 53 return gaussian_color(points[index], ray_direction); 56 fn get_spherical_harmonics(index: u32) -> array<f32, #{SH_COEFF_COUNT}> { 57 return gaussian_spherical_harmonics(points[index]); 60 fn get_rotation(index: u32) -> vec4<f32> { 61 return gaussian_rotation(points[index]); 64 fn get_scale(index: u32) -> vec3<f32> { 65 return gaussian_scale(points[index]); 68 fn get_opacity(index: u32) -> f32 { 69 return gaussian_opacity(points[index]); 72 fn get_visibility(index: u32) -> f32 { 73 return gaussian_visibility(points[index]); 76 #ifdef BINARY_GAUSSIAN_OP 78 fn get_rhs_position(index: u32) -> vec3<f32> { 79 return gaussian_position(rhs_points[index]); 84 ray_direction: vec3<f32>, 86 return gaussian_color(rhs_points[index], ray_direction); 89 fn get_rhs_spherical_harmonics(index: u32) -> array<f32, #{SH_COEFF_COUNT}> { 90 return gaussian_spherical_harmonics(rhs_points[index]); 93 fn get_rhs_rotation(index: u32) -> vec4<f32> { 94 return gaussian_rotation(rhs_points[index]); 97 fn get_rhs_scale(index: u32) -> vec3<f32> { 98 return gaussian_scale(rhs_points[index]); 101 fn get_rhs_opacity(index: u32) -> f32 { 102 return gaussian_opacity(rhs_points[index]); 105 fn get_rhs_visibility(index: u32) -> f32 { 106 return gaussian_visibility(rhs_points[index]); 109 fn set_output_position_visibility( 114 out_points[index].position_visibility = vec4<f32>(position, visibility); 117 fn set_output_spherical_harmonics( 119 sh: array<f32, #{SH_COEFF_COUNT}>, 121 out_points[index].sh = sh; 124 fn set_output_transform( 130 out_points[index].rotation = rotation; 131 out_points[index].scale_opacity = vec4<f32>(scale, opacity);