Skip to content
Renders sky colors with Rayleigh and Mie scattering.
Branch: master
Clone or download
wwwtyro Merge pull request #3 from miyu/fix-readme-links
Fix broken README Credits Links
Latest commit 4f02092 May 13, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example bang! Jan 11, 2016
images update screenshot Jan 11, 2016
.gitignore bang! Jan 11, 2016
LICENSE bang! Jan 11, 2016
README.md Fix broken README Credits Links May 13, 2017
index.glsl solve for both intersections Sep 26, 2016
package.json bump major version for substack's fix Sep 26, 2016

README.md

glsl-atmosphere

Renders sky colors with Rayleigh and Mie scattering.

Demo

Install

npm install glsl-atmosphere

Example

Javascript

var quad = Geometry(gl)
    .attr('aPosition', [
        -1, -1, -1,
         1, -1, -1,
         1,  1, -1,
        -1, -1, -1,
         1,  1, -1,
        -1,  1, -1
    ]);

program.bind();
quad.bind(program);
program.uniforms.uSunPos = [0, 0.1, -1];
quad.draw();

Vertex Shader

attribute vec3 aPosition;

varying vec3 vPosition;

void main() {
    gl_Position = vec4(aPosition, 1.0);
    vPosition = aPosition;
}

Fragment Shader

varying vec3 vPosition;

uniform vec3 uSunPos;

#pragma glslify: atmosphere = require(glsl-atmosphere)

void main() {
    vec3 color = atmosphere(
        normalize(vPosition),           // normalized ray direction
        vec3(0,6372e3,0),               // ray origin
        uSunPos,                        // position of the sun
        22.0,                           // intensity of the sun
        6371e3,                         // radius of the planet in meters
        6471e3,                         // radius of the atmosphere in meters
        vec3(5.5e-6, 13.0e-6, 22.4e-6), // Rayleigh scattering coefficient
        21e-6,                          // Mie scattering coefficient
        8e3,                            // Rayleigh scale height
        1.2e3,                          // Mie scale height
        0.758                           // Mie preferred scattering direction
    );

    // Apply exposure.
    color = 1.0 - exp(-1.0 * color);

    gl_FragColor = vec4(color, 1);
}

API

#pragma glslify: atmosphere = require(glsl-atmosphere)

vec3 atmosphere(vec3 r, vec3 r0, vec3 pSun, float iSun, float rPlanet, float rAtmos, vec3 kRlh, float kMie, float shRlh, float shMie, float g)

Returns a vec3 representing the color of the sky along a view direction.

Takes:

  • vec3 r normalized ray direction, typically a ray cast from the observers eye through a pixel
  • vec3 r0 ray origin in meters, typically the position of the viewer's eye
  • vec3 pSun the position of the sun
  • float iSun intensity of the sun
  • float rPlanet radius of the planet in meters
  • float rAtoms radius of the atmosphere in meters
  • vec3 kRlh Rayleigh scattering coefficient
  • vec3 kMie Mie scattering coefficient
  • float shRlh Rayleigh scale height in meters
  • float shMie Mie scale height in meters
  • float g Mie preferred scattering direction

For an Earth-like atmosphere, see the settings in the example above.

Credits

You can’t perform that action at this time.