#[derive(Debug, Clone, Copy, PartialEq)]
pub struct AccretionDiskMaterial {
pub inner_color: [f32; 3],
pub outer_color: [f32; 3],
pub peak_temperature_k: f32,
pub opacity: f32,
pub doppler_boost: f32,
}
impl AccretionDiskMaterial {
pub fn hot_inner_disk() -> Self {
Self {
inner_color: [0.9, 0.95, 1.0],
outer_color: [1.0, 0.6, 0.2],
peak_temperature_k: 1e7,
opacity: 0.8,
doppler_boost: 1.0,
}
}
pub fn outer_disk() -> Self {
Self {
inner_color: [1.0, 0.7, 0.3],
outer_color: [0.8, 0.2, 0.05],
peak_temperature_k: 1e4,
opacity: 0.4,
doppler_boost: 0.3,
}
}
pub fn quiescent() -> Self {
Self {
inner_color: [0.5, 0.3, 0.15],
outer_color: [0.2, 0.08, 0.02],
peak_temperature_k: 5000.0,
opacity: 0.15,
doppler_boost: 0.05,
}
}
pub fn temperature_at_radius(&self, r_over_isco: f32) -> f32 {
self.peak_temperature_k * r_over_isco.powf(-0.75)
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct EventHorizonMaterial {
pub shadow_color: [f32; 3],
pub photon_ring_color: [f32; 3],
pub photon_ring_intensity: f32,
}
impl EventHorizonMaterial {
pub fn schwarzschild() -> Self {
Self {
shadow_color: [0.0, 0.0, 0.0],
photon_ring_color: [1.0, 0.85, 0.6],
photon_ring_intensity: 5.0,
}
}
pub fn kerr_prograde() -> Self {
Self {
shadow_color: [0.0, 0.0, 0.0],
photon_ring_color: [0.8, 0.9, 1.0],
photon_ring_intensity: 8.0,
}
}
}