contrails: rougher wispy shader with 2D fbm breakup
This commit is contained in:
1 parent
c15351115f
commit
7e603d7677
1 file changed
+35
-17
Vendored
+35
-17
@@ -5444,28 +5444,46 @@ var CT2_FRAG_SRC = [
|
|||||||
'varying float vV;',
|
'varying float vV;',
|
||||||
'varying float vS;',
|
'varying float vS;',
|
||||||
'varying vec3 vWorld;',
|
'varying vec3 vWorld;',
|
||||||
'float hash1(float x) {',
|
'float hash2(vec2 p) {',
|
||||||
'return fract(sin(x * 127.1) * 43758.5453);',
|
'return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);',
|
||||||
'}',
|
'}',
|
||||||
'float noise1(float x) {',
|
'float noise2(vec2 p) {',
|
||||||
'float i = floor(x);',
|
'vec2 i = floor(p);',
|
||||||
'float f = fract(x);',
|
'vec2 f = fract(p);',
|
||||||
'return mix(hash1(i), hash1(i + 1.0), f);',
|
'f = f * f * (3.0 - 2.0 * f);',
|
||||||
|
'return mix(',
|
||||||
|
'mix(hash2(i), hash2(i + vec2(1.0, 0.0)), f.x),',
|
||||||
|
'mix(hash2(i + vec2(0.0, 1.0)), hash2(i + vec2(1.0, 1.0)), f.x),',
|
||||||
|
'f.y);',
|
||||||
|
'}',
|
||||||
|
'float fbm2(vec2 p) {',
|
||||||
|
'float v = 0.0;',
|
||||||
|
'float a = 0.5;',
|
||||||
|
'for (int i = 0; i < 4; i++) {',
|
||||||
|
'v += a * noise2(p);',
|
||||||
|
'p = p * 2.03 + vec2(13.7, 7.1);',
|
||||||
|
'a *= 0.5;',
|
||||||
|
'}',
|
||||||
|
'return v;',
|
||||||
'}',
|
'}',
|
||||||
'void main() {',
|
'void main() {',
|
||||||
'float side = abs(vV);',
|
'float side = abs(vV);',
|
||||||
'float wob = 0.48 + 0.42 * noise1(vU * 24.0);',
|
'float edgeNoise = fbm2(vec2(vU * 18.0, vV * 5.0));',
|
||||||
'float jag = noise1(vU * 61.0 + vV * 17.0) - 0.5;',
|
'float clumpNoise = fbm2(vec2(vU * 43.0 + 11.0, vV * 11.0 - 3.0));',
|
||||||
'float edge = 1.0 - smoothstep(wob * 0.16, wob, side + jag * 0.18);',
|
'float wob = 0.30 + 0.72 * edgeNoise;',
|
||||||
'edge *= 0.42 + 0.58 * pow(vU, 0.65);',
|
'float raggedSide = side + (clumpNoise - 0.5) * 0.42;',
|
||||||
'float dens = 0.58 + 0.42 * noise1(vU * 31.0);',
|
'float edge = 1.0 - smoothstep(wob * 0.10, wob, raggedSide);',
|
||||||
'float head = 0.32 + 0.68 * vU;',
|
'edge *= 0.32 + 0.68 * pow(vU, 0.55);',
|
||||||
'float a = clamp(vS * edge * head * dens, 0.0, 0.88);',
|
'float dens = fbm2(vec2(vU * 31.0 + vV * 2.0, vU * 7.0 - vV * 4.0));',
|
||||||
'if (a <= 0.004) discard;',
|
'dens = smoothstep(0.24, 0.86, dens);',
|
||||||
'vec3 dayCol = vec3(1.0, 1.0, 1.0);',
|
'float streak = 0.55 + 0.45 * noise2(vec2(vU * 90.0, vV * 2.0));',
|
||||||
'vec3 nightCol = vec3(0.45, 0.55, 0.75);',
|
'float head = 0.28 + 0.72 * vU;',
|
||||||
|
'float a = clamp(vS * edge * head * dens * streak, 0.0, 0.92);',
|
||||||
|
'if (a <= 0.006) discard;',
|
||||||
|
'vec3 dayCol = mix(vec3(0.82, 0.84, 0.88), vec3(1.0, 1.0, 1.0), dens);',
|
||||||
|
'vec3 nightCol = mix(vec3(0.30, 0.38, 0.55), vec3(0.58, 0.68, 0.88), dens);',
|
||||||
'vec3 col = mix(nightCol, dayCol, clamp(uDay, 0.0, 1.0));',
|
'vec3 col = mix(nightCol, dayCol, clamp(uDay, 0.0, 1.0));',
|
||||||
'col *= 0.35 + 0.65 * clamp(uDay + uNight, 0.0, 1.0);',
|
'col *= 0.32 + 0.68 * clamp(uDay + uNight, 0.0, 1.0);',
|
||||||
'gl_FragColor = vec4(col, a);',
|
'gl_FragColor = vec4(col, a);',
|
||||||
'}'
|
'}'
|
||||||
].join('\n');
|
].join('\n');
|
||||||
|
|||||||
Reference in new issue
Block a user