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