marss 0.0.2

Mars celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
#[derive(Debug, Clone)]
pub enum UniformValue {
    Float(f64),
    Vec3([f64; 3]),
    Vec4([f64; 4]),
    Mat4([f64; 16]),
    Int(i32),
}

pub struct ShaderData {
    pub name: &'static str,
    pub uniforms: Vec<(&'static str, UniformValue)>,
}

pub fn terrain() -> ShaderData {
    ShaderData {
        name: "mars_terrain",
        uniforms: vec![
            ("u_sun_direction", UniformValue::Vec3([0.0, 1.0, 0.0])),
            ("u_camera_pos", UniformValue::Vec3([0.0, 0.0, 0.0])),
            ("u_planet_radius", UniformValue::Float(crate::MARS_RADIUS)),
            ("u_atmosphere_height", UniformValue::Float(200_000.0)),
            (
                "u_dust_optical_depth",
                UniformValue::Float(crate::MEAN_DUST_OPTICAL_DEPTH),
            ),
        ],
    }
}

pub fn atmosphere() -> ShaderData {
    ShaderData {
        name: "mars_atmosphere",
        uniforms: vec![
            (
                "u_rayleigh_coeff",
                UniformValue::Vec3([19.918e-6, 13.57e-6, 5.75e-6]),
            ),
            ("u_mie_coeff", UniformValue::Float(4.0e-5)),
            ("u_mie_g", UniformValue::Float(0.76)),
            ("u_sun_intensity", UniformValue::Float(590.0)),
            ("u_dust_color", UniformValue::Vec3([0.9, 0.6, 0.3])),
        ],
    }
}

pub fn dust_storm() -> ShaderData {
    ShaderData {
        name: "mars_dust_storm",
        uniforms: vec![
            (
                "u_optical_depth",
                UniformValue::Float(crate::GLOBAL_STORM_OPTICAL_DEPTH),
            ),
            ("u_dust_albedo", UniformValue::Float(0.25)),
            ("u_dust_asymmetry", UniformValue::Float(0.65)),
            ("u_storm_coverage", UniformValue::Float(0.0)),
        ],
    }
}