Skip to content

Instantly share code, notes, and snippets.

@AdaRoseCannon
Created January 21, 2020 15:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AdaRoseCannon/71509c3bfa2acbf08855d3902f37ba88 to your computer and use it in GitHub Desktop.
Save AdaRoseCannon/71509c3bfa2acbf08855d3902f37ba88 to your computer and use it in GitHub Desktop.
There is probably an easier way to create a gradient skybox but I am lazy.
const skygeometry = new SphereGeometry( 25, 50, 50 , 0, 2 * Math.PI);
const skymaterial = new MeshBasicMaterial();
skymaterial.side = BackSide;
skymaterial.onBeforeCompile = function (shader) {
shader.vertexShader = shader.vertexShader.replace('#include <common>', '#include <common>\n#define USE_UV');
shader.fragmentShader = shader.fragmentShader.replace('#include <common>', '#include <common>\n#define USE_UV');
shader.vertexShader = shader.vertexShader.replace('#include <uv_vertex>', `
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
`)
shader.fragmentShader = shader.fragmentShader.replace('#include <map_fragment>', `
vec4 col1;
vec4 col2;
float mixAmount;
if (vUv.y > 0.5) {
col1 = vec4( 249, 229, 180, 1 ) / 255.0;
col2 = vec4( 0, 57, 115, 1 ) / 255.0;
float newY = (vUv.y - 0.5) * 2.0;
mixAmount = sqrt(newY)*2.0;
} else {
col1 = vec4(0.6);
}
diffuseColor *= mix(col1, col2, mixAmount);
`);
};
const skysphere = new Mesh( skygeometry, skymaterial );
skysphere.name = 'skysphere';
scene.add( skysphere );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment