Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#version 120
|
||||
uniform sampler2D texture[2];
|
||||
uniform float cycles[5];
|
||||
uniform float temperature;
|
||||
|
||||
varying float distortion;
|
||||
varying vec2 uv;
|
||||
varying vec3 normal;
|
||||
varying vec3 v;
|
||||
|
||||
const float maxVariance = 0.03; //should be kept low
|
||||
const float deviationCycles = 3.25; //How much variation is based on base color
|
||||
|
||||
const float two_pi = 6.28318531;
|
||||
|
||||
const float noise1Base = 0.84, noise1Range = 0.25;
|
||||
const float noise2Base = 0.93, noise2Range = 0.34;
|
||||
|
||||
const float diffPower = 2.3;
|
||||
const float tempInfluence = 0.25;
|
||||
const float baseTemp = 10000.0;
|
||||
|
||||
const float noiseOffsetNoise = 0.1;
|
||||
|
||||
float mixRange(float x, float low, float hi) {
|
||||
return clamp((x - low) / (hi - low), 0.0, 1.0);
|
||||
}
|
||||
|
||||
vec3 blackBody(float temp) {
|
||||
vec3 c;
|
||||
c.r = mix(1.0, 0.6234, mixRange(temp, 6400.0, 29800.0));
|
||||
c.b = mix(0.0, 1.0, mixRange(temp, 2800.0, 7600.0));
|
||||
if(temp < 6600.0)
|
||||
c.g = mix(0.22, 0.976, mixRange(temp, 1000.0, 6600.0));
|
||||
else
|
||||
c.g = mix(0.976, 0.75, mixRange(temp, 6600.0, 29800.0));
|
||||
return c;
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 noiseCoord = uv * 3.0 + (texture2D(texture[1], uv * 16.0).xz - vec2(0.5)) * noiseOffsetNoise;
|
||||
noiseCoord += vec2( cycles[0], cycles[1]);
|
||||
|
||||
vec2 noise2Coord = noiseCoord + vec2( -cycles[3], cycles[4] );
|
||||
vec2 noise3Coord = noiseCoord + vec2( -cycles[2], cycles[3] * 4.0 );
|
||||
vec2 noise4Coord = noiseCoord * 2.0 + vec2( cycles[4], cycles[0] * -2.0 );
|
||||
|
||||
noiseCoord += vec2( cycles[1], cycles[2] );
|
||||
|
||||
float heat;
|
||||
heat = noise1Base + noise1Range *
|
||||
mix(texture2D(texture[1], uv * 4.0).r, texture2D(texture[1], noiseCoord, 20.0 * distortion).r, distortion);
|
||||
heat *= noise2Base + noise2Range *
|
||||
mix(texture2D(texture[0], noise2Coord).g, texture2D(texture[0], noise2Coord, 20.0 * distortion).g, distortion);
|
||||
heat *= noise2Base + noise2Range *
|
||||
mix(texture2D(texture[0], noise3Coord).b, texture2D(texture[0], noise3Coord, 20.0 * distortion).r, distortion);
|
||||
heat *= noise1Base + noise1Range *
|
||||
mix(texture2D(texture[1], noise4Coord).g, texture2D(texture[1], noise4Coord, 20.0 * distortion).b, distortion);
|
||||
heat = (heat - 1.1);
|
||||
if(temperature < 4500.0 || temperature > 6000.0) {
|
||||
if(heat < 0.0)
|
||||
heat *= 2.0;
|
||||
else
|
||||
heat *= 8.0;
|
||||
}
|
||||
else {
|
||||
heat *= 4.0;
|
||||
}
|
||||
|
||||
heat = heat * pow(max(dot(normalize(normal), vec3(0.0,0.0,1.0)), 0.0), 1.7) + 1.0;
|
||||
|
||||
gl_FragColor.rgb = blackBody(temperature * heat) * clamp(heat, min(temperature / 2500.0, 1.0), 1.0);
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
Reference in New Issue
Block a user