Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Based on: https://github.com/frozein/VkGalaxy/blob/main/assets/shaders/particle.frag
- #version 450
- layout (location = 0) in vec2 in_tex;
- layout (location = 1) in float temperature;
- layout (location = 2) in flat uint in_type;
- layout (location = 0) out vec4 out_color;
- // Based on: https://github.com/zubetto/BlackBodyRadiation
- vec4 blackbody(in float temp_in_kel)
- {
- if(temp_in_kel <= 0.0)
- {
- return vec4(0.0, 0.0, 0.0, 1.0);
- }
- vec4 color = {0.0, 0.0, 0.0, 1.0};
- float kel = temp_in_kel * 500.0;
- float u = 0.000536332 * kel;
- color.r = 0.638749 + (u + 1.57533) / (u * u + 0.28664);
- u = 0.0019639 * kel;
- color.g = 0.971029 + (u - 10.8015) / (u * u + 6.59002);
- float p = 0.00668406 * kel + 23.3962;
- u = 0.000941064 * kel;
- float q = u * u + 0.00100641 * kel + 10.9068;
- color.b = 2.25398 - p / q;
- return color;
- }
- void main(void)
- {
- vec2 centered_pos = 3.0 * (in_tex - 0.5);
- if (in_type == 0) // Star
- {
- out_color = blackbody(temperature);
- }
- else if (in_type == 1) // Dust
- {
- out_color.rgb *= vec3(0.5, 0.5, 1.0);
- out_color.a *= max(1.0 - length(centered_pos), 0.0);
- }
- else // H-2 regions
- {
- float dist = max(1.0 - length(centered_pos), 0.0);
- out_color.rgb = mix(vec3(1.0, 0.0, 0.0), vec3(1.0), dist * dist * dist);
- out_color.a = dist * dist;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment