1 2/* 3Copyright (c) 2019 The Khronos Group Inc. 4Use of this source code is governed by an MIT-style license that can be 5found in the LICENSE.txt file. 6*/ 7 8 9#ifdef GL_ES 10precision mediump float; 11#endif 12uniform float GrainSize; 13uniform vec3 DarkColor; 14uniform vec3 colorSpread; 15 16varying float lightIntensity; 17varying vec3 Position; 18 19void main (void) 20{ 21 // 22 // cheap noise 23 // 24 vec3 location = Position; 25 26 vec3 floorvec = vec3(floor(Position.x * 10.0), 0.0, floor(Position.z * 10.0)); 27 vec3 noise = Position * 10.0 - floorvec - 0.5; 28 noise *= noise; 29 location += noise * 0.12; 30 31 // 32 // distance from axis 33 // 34 float dist = location.x * location.x + location.z * location.z; 35 float grain = dist / GrainSize; 36 37 // 38 // grain effects as function of distance 39 // 40 float brightness = fract(grain); 41 if (brightness > 0.5) 42 brightness = (1.0 - brightness); 43 vec3 color = DarkColor + 0.5 * brightness * (colorSpread); 44 45 brightness = fract(grain*7.0); 46 if (brightness > 0.5) 47 brightness = 1.0 - brightness; 48 color -= 0.5 * brightness * colorSpread; 49 50 // 51 // also as a function of lines parallel to the axis 52 // 53 brightness = fract(grain*47.0); 54 float line = fract(Position.z + Position.x); 55 float snap = floor(line * 30.0) * (1.0/30.0); 56 if (line < snap + 0.004) 57 color -= 0.5 * brightness * colorSpread; 58 59 // 60 // apply lighting effects from vertex processor 61 // 62 color *= lightIntensity; 63 color = clamp(color, 0.0, 1.0); 64 65 gl_FragColor = vec4(color, 0.1) 66} 67