use super::shaders::{ShaderEndpoint, ShaderUniform, UniformValue};
pub fn scene_lighting_solar() -> ShaderEndpoint {
ShaderEndpoint {
name: "material_scene_lighting_solar",
uniforms: vec![
ShaderUniform {
name: "u_sun_direction",
value: UniformValue::Vec3([0.0, 0.0, 1.0]),
},
ShaderUniform {
name: "u_sun_color",
value: UniformValue::Vec3([1.0, 0.98, 0.95]),
},
ShaderUniform {
name: "u_sun_intensity",
value: UniformValue::Float(1.0),
},
ShaderUniform {
name: "u_ambient_color",
value: UniformValue::Vec3([0.02, 0.02, 0.03]),
},
ShaderUniform {
name: "u_ambient_intensity",
value: UniformValue::Float(0.01),
},
],
}
}
pub fn scene_lighting_from_sun(sun_pos: [f32; 3], observer_pos: [f32; 3]) -> ShaderEndpoint {
let dx = sun_pos[0] - observer_pos[0];
let dy = sun_pos[1] - observer_pos[1];
let dz = sun_pos[2] - observer_pos[2];
let len = (dx * dx + dy * dy + dz * dz).sqrt();
let dir = if len > 0.0 {
[dx / len, dy / len, dz / len]
} else {
[0.0, 0.0, 1.0]
};
ShaderEndpoint {
name: "material_scene_lighting_positioned",
uniforms: vec![
ShaderUniform {
name: "u_sun_direction",
value: UniformValue::Vec3(dir),
},
ShaderUniform {
name: "u_sun_color",
value: UniformValue::Vec3([1.0, 0.98, 0.95]),
},
ShaderUniform {
name: "u_sun_intensity",
value: UniformValue::Float(1.0),
},
ShaderUniform {
name: "u_ambient_color",
value: UniformValue::Vec3([0.02, 0.02, 0.03]),
},
ShaderUniform {
name: "u_ambient_intensity",
value: UniformValue::Float(0.01),
},
],
}
}
pub fn skybox_deep_space() -> ShaderEndpoint {
ShaderEndpoint {
name: "material_skybox_deep_space",
uniforms: vec![
ShaderUniform {
name: "u_background_color",
value: UniformValue::Vec3([0.0, 0.0, 0.002]),
},
ShaderUniform {
name: "u_star_field_density",
value: UniformValue::Float(1.0),
},
ShaderUniform {
name: "u_milky_way_intensity",
value: UniformValue::Float(0.1),
},
],
}
}
pub fn skybox_inner_system() -> ShaderEndpoint {
ShaderEndpoint {
name: "material_skybox_inner_system",
uniforms: vec![
ShaderUniform {
name: "u_background_color",
value: UniformValue::Vec3([0.0, 0.0, 0.001]),
},
ShaderUniform {
name: "u_star_field_density",
value: UniformValue::Float(0.8),
},
ShaderUniform {
name: "u_milky_way_intensity",
value: UniformValue::Float(0.05),
},
],
}
}