├── README.md ├── Shader001.gif ├── Shader001.glsl ├── Shader002.gif ├── Shader002.glsl ├── Shader003.gif ├── Shader003.glsl ├── Shader004.gif ├── Shader004.glsl ├── Shader005.gif ├── Shader005.glsl ├── Shader006.gif ├── Shader006.glsl ├── Shader007.gif ├── Shader007.glsl ├── Shader008.gif ├── Shader008.glsl ├── Shader009.gif ├── Shader009.glsl ├── Shader010.gif └── Shader010.glsl /README.md: -------------------------------------------------------------------------------- 1 | # LGTM-Shaders 2 | Shaders for [GLSLSandbox](http://glslsandbox.com) 3 | 4 | 5 | ## Shader 001 6 | [http://glslsandbox.com/e#35123.5](http://glslsandbox.com/e#35123.5) 7 | 8 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader001.gif)` 9 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader001.gif) 10 | 11 | ## Shader 002 12 | [http://glslsandbox.com/e#35123.6](http://glslsandbox.com/e#35123.6) 13 | 14 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader002.gif)` 15 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader002.gif) 16 | 17 | ## Shader 003 18 | [http://glslsandbox.com/e#35123.7](http://glslsandbox.com/e#35123.7) 19 | 20 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader003.gif)` 21 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader003.gif) 22 | 23 | ## Shader 004 24 | [http://glslsandbox.com/e#35123.8](http://glslsandbox.com/e#35123.8) 25 | 26 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader004.gif)` 27 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader004.gif) 28 | 29 | ## Shader 005 30 | [http://glslsandbox.com/e#35123.9](http://glslsandbox.com/e#35123.9) 31 | 32 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader005.gif)` 33 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader005.gif) 34 | 35 | ## Shader 006 36 | [http://glslsandbox.com/e#35123.10](http://glslsandbox.com/e#35123.10) 37 | 38 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader006.gif)` 39 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader006.gif) 40 | 41 | ## Shader 007 42 | [http://glslsandbox.com/e#35123.11](http://glslsandbox.com/e#35123.11) 43 | 44 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader007.gif)` 45 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader007.gif) 46 | 47 | ## Shader 008 48 | [http://glslsandbox.com/e#35123.12](http://glslsandbox.com/e#35123.12) 49 | 50 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader008.gif)` 51 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader008.gif) 52 | 53 | ## Shader 009 54 | [http://glslsandbox.com/e#35123.13](http://glslsandbox.com/e#35123.13) 55 | 56 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader009.gif)` 57 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader009.gif) 58 | 59 | ## Shader 010 60 | [http://glslsandbox.com/e#35123.18](http://glslsandbox.com/e#35123.18) 61 | 62 | `![LGTM](https://github.com/notargs/LGTM-Shaders/raw/master/Shader010.gif)` 63 | ![](https://github.com/notargs/LGTM-Shaders/raw/master/Shader010.gif) 64 | 65 | ## License 66 | MIT License 67 | 68 | Copyright (c) 2017 notargs 69 | 70 | Permission is hereby granted, free of charge, to any person obtaining a copy 71 | of this software and associated documentation files (the "Software"), to deal 72 | in the Software without restriction, including without limitation the rights 73 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 74 | copies of the Software, and to permit persons to whom the Software is 75 | furnished to do so, subject to the following conditions: 76 | 77 | The above copyright notice and this permission notice shall be included in all 78 | copies or substantial portions of the Software. 79 | 80 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 81 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 82 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 83 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 84 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 85 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 86 | SOFTWARE. 87 | -------------------------------------------------------------------------------- /Shader001.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader001.gif -------------------------------------------------------------------------------- /Shader001.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | uniform float time; 8 | uniform vec2 mouse; 9 | uniform vec2 resolution; 10 | 11 | float box(vec2 pos, vec2 rect) 12 | { 13 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 14 | } 15 | 16 | float lChar(vec2 pos) 17 | { 18 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 19 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 20 | } 21 | 22 | float gChar(vec2 pos) 23 | { 24 | return min(min(min( 25 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 26 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 27 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 28 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 29 | } 30 | 31 | float tChar(vec2 pos) 32 | { 33 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 34 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 35 | } 36 | float mChar(vec2 pos) 37 | { 38 | return min(min(min( 39 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 40 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 41 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 42 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 43 | } 44 | float dist(vec2 pos) { 45 | return min(min(min( 46 | lChar(pos - vec2(-0.3, 0.0)), 47 | gChar(pos - vec2(-0.1, 0.0))), 48 | tChar(pos - vec2(0.1, 0.0))), 49 | mChar(pos - vec2(0.3, 0.0))); 50 | } 51 | 52 | mat2 rot(float a) 53 | { 54 | float s = sin(a); 55 | float c = cos(a); 56 | return mat2(c, s, 57 | -s, c); 58 | } 59 | 60 | void main( void ) { 61 | 62 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 63 | pos.x += sin(time * 10.0 + pos.y * 20.0) * 0.01; 64 | pos *= abs(sin(time)) * 10.0; 65 | pos /= 1.0 + length(pos) * 0.3; 66 | pos = mod(pos + vec2(0.45, 0.15), vec2(0.9, 0.3)) - vec2(0.45, 0.15); 67 | 68 | vec3 color = vec3(0.0, 0.0, 0.0); 69 | color += vec3(1.0, 1.0, 1.0) * (0.009 / abs(dist(pos))); 70 | gl_FragColor = vec4(color, 1.0); 71 | 72 | } -------------------------------------------------------------------------------- /Shader002.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader002.gif -------------------------------------------------------------------------------- /Shader002.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | uniform float time; 8 | uniform vec2 mouse; 9 | uniform vec2 resolution; 10 | 11 | float rand(vec3 co) 12 | { 13 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 14 | } 15 | 16 | float noise(vec3 pos) 17 | { 18 | vec3 ip = floor(pos); 19 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 20 | vec4 a = vec4( 21 | rand(ip + vec3(0, 0, 0)), 22 | rand(ip + vec3(1, 0, 0)), 23 | rand(ip + vec3(0, 1, 0)), 24 | rand(ip + vec3(1, 1, 0))); 25 | vec4 b = vec4( 26 | rand(ip + vec3(0, 0, 1)), 27 | rand(ip + vec3(1, 0, 1)), 28 | rand(ip + vec3(0, 1, 1)), 29 | rand(ip + vec3(1, 1, 1))); 30 | 31 | a = mix(a, b, fp.z); 32 | a.xy = mix(a.xy, a.zw, fp.y); 33 | return mix(a.x, a.y, fp.x); 34 | } 35 | 36 | 37 | float perlin(vec3 pos) 38 | { 39 | return (noise(pos) * 8.0 + 40 | noise(pos * 2.0 ) * 4.0 + 41 | noise(pos * 4.0) * 2.0 + 42 | noise(pos * 8.0) ) / 16.0; 43 | } 44 | 45 | float box(vec2 pos, vec2 rect) 46 | { 47 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 48 | } 49 | 50 | float lChar(vec2 pos) 51 | { 52 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 53 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 54 | } 55 | 56 | float gChar(vec2 pos) 57 | { 58 | return min(min(min( 59 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 60 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 61 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 62 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 63 | } 64 | 65 | float tChar(vec2 pos) 66 | { 67 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 68 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 69 | } 70 | float mChar(vec2 pos) 71 | { 72 | return min(min(min( 73 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 74 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 75 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 76 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 77 | } 78 | float dist(vec2 pos) { 79 | return min(min(min( 80 | lChar(pos - vec2(-0.3, 0.0)), 81 | gChar(pos - vec2(-0.1, 0.0))), 82 | tChar(pos - vec2(0.1, 0.0))), 83 | mChar(pos - vec2(0.3, 0.0))); 84 | } 85 | 86 | mat2 rot(float a) 87 | { 88 | float s = sin(a); 89 | float c = cos(a); 90 | return mat2(c, s, 91 | -s, c); 92 | } 93 | 94 | void main( void ) { 95 | 96 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 97 | 98 | vec3 color = vec3(0.0, 0.0, 0.0); 99 | color += vec3(1.0, 1.0, 1.0) * (0.005 / abs(dist(pos))); 100 | color += clamp((perlin(vec3(pos.y * 20.0, 0.0, time * 2.0)) - 0.5) * 5.0, 0.0, 1.0) * vec3(0.4, 0.0, 0.7); 101 | gl_FragColor = vec4(color, 1.0); 102 | 103 | } -------------------------------------------------------------------------------- /Shader003.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader003.gif -------------------------------------------------------------------------------- /Shader003.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | uniform float time; 8 | uniform vec2 mouse; 9 | uniform vec2 resolution; 10 | 11 | float rand(vec3 co) 12 | { 13 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 14 | } 15 | 16 | float noise(vec3 pos) 17 | { 18 | vec3 ip = floor(pos); 19 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 20 | vec4 a = vec4( 21 | rand(ip + vec3(0, 0, 0)), 22 | rand(ip + vec3(1, 0, 0)), 23 | rand(ip + vec3(0, 1, 0)), 24 | rand(ip + vec3(1, 1, 0))); 25 | vec4 b = vec4( 26 | rand(ip + vec3(0, 0, 1)), 27 | rand(ip + vec3(1, 0, 1)), 28 | rand(ip + vec3(0, 1, 1)), 29 | rand(ip + vec3(1, 1, 1))); 30 | 31 | a = mix(a, b, fp.z); 32 | a.xy = mix(a.xy, a.zw, fp.y); 33 | return mix(a.x, a.y, fp.x); 34 | } 35 | 36 | 37 | float perlin(vec3 pos) 38 | { 39 | return (noise(pos) * 8.0 + 40 | noise(pos * 2.0 ) * 4.0 + 41 | noise(pos * 4.0) * 2.0 + 42 | noise(pos * 8.0) ) / 16.0; 43 | } 44 | 45 | float box(vec2 pos, vec2 rect) 46 | { 47 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 48 | } 49 | 50 | float lChar(vec2 pos) 51 | { 52 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 53 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 54 | } 55 | 56 | float gChar(vec2 pos) 57 | { 58 | return min(min(min( 59 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 60 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 61 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 62 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 63 | } 64 | 65 | float tChar(vec2 pos) 66 | { 67 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 68 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 69 | } 70 | float mChar(vec2 pos) 71 | { 72 | return min(min(min( 73 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 74 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 75 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 76 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 77 | } 78 | float dist(vec2 pos) { 79 | return min(min(min( 80 | lChar(pos - vec2(-0.3, 0.0)), 81 | gChar(pos - vec2(-0.1, 0.0))), 82 | tChar(pos - vec2(0.1, 0.0))), 83 | mChar(pos - vec2(0.3, 0.0))); 84 | } 85 | 86 | mat2 rot(float a) 87 | { 88 | float s = sin(a); 89 | float c = cos(a); 90 | return mat2(c, s, 91 | -s, c); 92 | } 93 | 94 | void main( void ) { 95 | 96 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 97 | pos.x -= clamp((perlin(vec3(pos.y * 20.0, 0.0, time * 4.0)) - 0.5) * 5.0, 0.0, 1.0) * 0.1; 98 | 99 | vec3 color = vec3(0.0, 0.0, 0.0); 100 | color += vec3(1.0, 1.0, 1.0) * (0.005 / abs(dist(pos))); 101 | gl_FragColor = vec4(color, 1.0); 102 | 103 | } -------------------------------------------------------------------------------- /Shader004.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader004.gif -------------------------------------------------------------------------------- /Shader004.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | #define PI 3.1415926535 8 | 9 | uniform float time; 10 | uniform vec2 mouse; 11 | uniform vec2 resolution; 12 | 13 | float rand(vec3 co) 14 | { 15 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 16 | } 17 | 18 | float noise(vec3 pos) 19 | { 20 | vec3 ip = floor(pos); 21 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 22 | vec4 a = vec4( 23 | rand(ip + vec3(0, 0, 0)), 24 | rand(ip + vec3(1, 0, 0)), 25 | rand(ip + vec3(0, 1, 0)), 26 | rand(ip + vec3(1, 1, 0))); 27 | vec4 b = vec4( 28 | rand(ip + vec3(0, 0, 1)), 29 | rand(ip + vec3(1, 0, 1)), 30 | rand(ip + vec3(0, 1, 1)), 31 | rand(ip + vec3(1, 1, 1))); 32 | 33 | a = mix(a, b, fp.z); 34 | a.xy = mix(a.xy, a.zw, fp.y); 35 | return mix(a.x, a.y, fp.x); 36 | } 37 | 38 | 39 | float perlin(vec3 pos) 40 | { 41 | return (noise(pos) * 32.0 + 42 | noise(pos * 2.0 ) * 16.0 + 43 | noise(pos * 4.0) * 8.0 + 44 | noise(pos * 8.0) * 4.0 + 45 | noise(pos * 16.0) * 2.0 + 46 | noise(pos * 32.0) * 1.0) / 64.0; 47 | } 48 | 49 | float box(vec2 pos, vec2 rect) 50 | { 51 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 52 | } 53 | 54 | float lChar(vec2 pos) 55 | { 56 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 57 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 58 | } 59 | 60 | float gChar(vec2 pos) 61 | { 62 | return min(min(min( 63 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 64 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 65 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 66 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 67 | } 68 | 69 | float tChar(vec2 pos) 70 | { 71 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 72 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 73 | } 74 | float mChar(vec2 pos) 75 | { 76 | return min(min(min( 77 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 78 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 79 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 80 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 81 | } 82 | float dist(vec2 pos) { 83 | return min(min(min( 84 | lChar(pos - vec2(-0.3, 0.0)), 85 | gChar(pos - vec2(-0.1, 0.0))), 86 | tChar(pos - vec2(0.1, 0.0))), 87 | mChar(pos - vec2(0.3, 0.0))); 88 | } 89 | 90 | mat2 rot(float a) 91 | { 92 | float s = sin(a); 93 | float c = cos(a); 94 | return mat2(c, s, 95 | -s, c); 96 | } 97 | 98 | void main( void ) { 99 | 100 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 101 | pos.x = max(pos.x, sin(time)); 102 | 103 | vec3 color = vec3(0.0, 0.0, 0.0); 104 | color += vec3(1.0, 1.0, 1.0) * (0.005 / abs(dist(pos))); 105 | color += 0.01 / abs(perlin(vec3(pos * 10.0 + time, time * 1.0)) - 0.5) * vec3(0.3, 0, 1.0); 106 | gl_FragColor = vec4(color, 1.0); 107 | } -------------------------------------------------------------------------------- /Shader005.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader005.gif -------------------------------------------------------------------------------- /Shader005.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | #define PI 3.1415926535 8 | 9 | uniform float time; 10 | uniform vec2 mouse; 11 | uniform vec2 resolution; 12 | 13 | float rand(vec3 co) 14 | { 15 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 16 | } 17 | 18 | float noise(vec3 pos) 19 | { 20 | vec3 ip = floor(pos); 21 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 22 | vec4 a = vec4( 23 | rand(ip + vec3(0, 0, 0)), 24 | rand(ip + vec3(1, 0, 0)), 25 | rand(ip + vec3(0, 1, 0)), 26 | rand(ip + vec3(1, 1, 0))); 27 | vec4 b = vec4( 28 | rand(ip + vec3(0, 0, 1)), 29 | rand(ip + vec3(1, 0, 1)), 30 | rand(ip + vec3(0, 1, 1)), 31 | rand(ip + vec3(1, 1, 1))); 32 | 33 | a = mix(a, b, fp.z); 34 | a.xy = mix(a.xy, a.zw, fp.y); 35 | return mix(a.x, a.y, fp.x); 36 | } 37 | 38 | 39 | float perlin(vec3 pos) 40 | { 41 | return (noise(pos) * 32.0 + 42 | noise(pos * 2.0 ) * 16.0 + 43 | noise(pos * 4.0) * 8.0 + 44 | noise(pos * 8.0) * 4.0 + 45 | noise(pos * 16.0) * 2.0 + 46 | noise(pos * 32.0) * 1.0) / 64.0; 47 | } 48 | 49 | float box(vec2 pos, vec2 rect) 50 | { 51 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 52 | } 53 | 54 | float lChar(vec2 pos) 55 | { 56 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 57 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 58 | } 59 | 60 | float gChar(vec2 pos) 61 | { 62 | return min(min(min( 63 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 64 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 65 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 66 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 67 | } 68 | 69 | float tChar(vec2 pos) 70 | { 71 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 72 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 73 | } 74 | float mChar(vec2 pos) 75 | { 76 | return min(min(min( 77 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 78 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 79 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 80 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 81 | } 82 | float dist(vec2 pos) { 83 | return min(min(min( 84 | lChar(pos - vec2(-0.3, 0.0)), 85 | gChar(pos - vec2(-0.1, 0.0))), 86 | tChar(pos - vec2(0.1, 0.0))), 87 | mChar(pos - vec2(0.3, 0.0))); 88 | } 89 | 90 | mat2 rot(float a) 91 | { 92 | float s = sin(a); 93 | float c = cos(a); 94 | return mat2(c, s, 95 | -s, c); 96 | } 97 | 98 | void main( void ) { 99 | 100 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 101 | pos.x += (perlin(vec3(pos * 20.0, 0.0)) - 0.5) * max(0.0, sin(time - length(pos))); 102 | pos.y += (perlin(vec3(pos * 20.0, 1.0)) - 0.5) * max(0.0, sin(time - length(pos))); 103 | 104 | vec3 color = vec3(0.0, 0.0, 0.0); 105 | color += vec3(1.0, 1.0, 1.0) * (0.005 / abs(dist(pos))); 106 | color += 0.01 / abs(perlin(vec3(pos * 10.0 + time, time * 1.0)) - 0.5) * vec3(0.0, 0.3, 0.0); 107 | gl_FragColor = vec4(color, 1.0); 108 | 109 | } -------------------------------------------------------------------------------- /Shader006.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader006.gif -------------------------------------------------------------------------------- /Shader006.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | #define PI 3.1415926535 8 | 9 | uniform float time; 10 | uniform vec2 mouse; 11 | uniform vec2 resolution; 12 | 13 | float rand(vec3 co) 14 | { 15 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 16 | } 17 | 18 | float noise(vec3 pos) 19 | { 20 | vec3 ip = floor(pos); 21 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 22 | vec4 a = vec4( 23 | rand(ip + vec3(0, 0, 0)), 24 | rand(ip + vec3(1, 0, 0)), 25 | rand(ip + vec3(0, 1, 0)), 26 | rand(ip + vec3(1, 1, 0))); 27 | vec4 b = vec4( 28 | rand(ip + vec3(0, 0, 1)), 29 | rand(ip + vec3(1, 0, 1)), 30 | rand(ip + vec3(0, 1, 1)), 31 | rand(ip + vec3(1, 1, 1))); 32 | 33 | a = mix(a, b, fp.z); 34 | a.xy = mix(a.xy, a.zw, fp.y); 35 | return mix(a.x, a.y, fp.x); 36 | } 37 | 38 | 39 | float perlin(vec3 pos) 40 | { 41 | return (noise(pos) * 32.0 + 42 | noise(pos * 2.0 ) * 16.0 + 43 | noise(pos * 4.0) * 8.0 + 44 | noise(pos * 8.0) * 4.0 + 45 | noise(pos * 16.0) * 2.0 + 46 | noise(pos * 32.0) * 1.0) / 64.0; 47 | } 48 | 49 | float box(vec2 pos, vec2 rect) 50 | { 51 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 52 | } 53 | 54 | float lChar(vec2 pos) 55 | { 56 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 57 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 58 | } 59 | 60 | float gChar(vec2 pos) 61 | { 62 | return min(min(min( 63 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 64 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 65 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 66 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 67 | } 68 | 69 | float tChar(vec2 pos) 70 | { 71 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 72 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 73 | } 74 | float mChar(vec2 pos) 75 | { 76 | return min(min(min( 77 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 78 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 79 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 80 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 81 | } 82 | float dist(vec2 pos) { 83 | return min(min(min( 84 | lChar(pos - vec2(-0.3, 0.0)), 85 | gChar(pos - vec2(-0.1, 0.0))), 86 | tChar(pos - vec2(0.1, 0.0))), 87 | mChar(pos - vec2(0.3, 0.0))); 88 | } 89 | 90 | mat2 rot(float a) 91 | { 92 | float s = sin(a); 93 | float c = cos(a); 94 | return mat2(c, s, 95 | -s, c); 96 | } 97 | 98 | void main( void ) { 99 | 100 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 101 | pos += normalize(pos) * sin(length(pos) * 30.0 - time * 5.0) * 0.03; 102 | 103 | vec3 color = vec3(0.0, 0.0, 0.0); 104 | color += vec3(1.0, 1.0, 1.0) * (0.005 / abs(dist(pos))); 105 | color += 0.01 / abs(perlin(vec3(pos * 10.0 + time, time * 1.0)) - 0.5) * vec3(0.0, 0.3, 0.0); 106 | gl_FragColor = vec4(color, 1.0); 107 | 108 | } -------------------------------------------------------------------------------- /Shader007.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader007.gif -------------------------------------------------------------------------------- /Shader007.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | #define PI 3.1415926535 8 | 9 | uniform float time; 10 | uniform vec2 mouse; 11 | uniform vec2 resolution; 12 | 13 | float rand(vec3 co) 14 | { 15 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 16 | } 17 | 18 | float noise(vec3 pos) 19 | { 20 | vec3 ip = floor(pos); 21 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 22 | vec4 a = vec4( 23 | rand(ip + vec3(0, 0, 0)), 24 | rand(ip + vec3(1, 0, 0)), 25 | rand(ip + vec3(0, 1, 0)), 26 | rand(ip + vec3(1, 1, 0))); 27 | vec4 b = vec4( 28 | rand(ip + vec3(0, 0, 1)), 29 | rand(ip + vec3(1, 0, 1)), 30 | rand(ip + vec3(0, 1, 1)), 31 | rand(ip + vec3(1, 1, 1))); 32 | 33 | a = mix(a, b, fp.z); 34 | a.xy = mix(a.xy, a.zw, fp.y); 35 | return mix(a.x, a.y, fp.x); 36 | } 37 | 38 | 39 | float perlin(vec3 pos) 40 | { 41 | return (noise(pos) * 32.0 + 42 | noise(pos * 2.0 ) * 16.0 + 43 | noise(pos * 4.0) * 8.0 + 44 | noise(pos * 8.0) * 4.0 + 45 | noise(pos * 16.0) * 2.0 + 46 | noise(pos * 32.0) * 1.0) / 64.0; 47 | } 48 | 49 | float box(vec2 pos, vec2 rect) 50 | { 51 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 52 | } 53 | 54 | float lChar(vec2 pos) 55 | { 56 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 57 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 58 | } 59 | 60 | float gChar(vec2 pos) 61 | { 62 | return min(min(min( 63 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 64 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 65 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 66 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 67 | } 68 | 69 | float tChar(vec2 pos) 70 | { 71 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 72 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 73 | } 74 | float mChar(vec2 pos) 75 | { 76 | return min(min(min( 77 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 78 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 79 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 80 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 81 | } 82 | float dist(vec2 pos) { 83 | return min(min(min( 84 | lChar(pos - vec2(-0.3, 0.0)), 85 | gChar(pos - vec2(-0.1, 0.0))), 86 | tChar(pos - vec2(0.1, 0.0))), 87 | mChar(pos - vec2(0.3, 0.0))); 88 | } 89 | 90 | mat2 rot(float a) 91 | { 92 | float s = sin(a); 93 | float c = cos(a); 94 | return mat2(c, s, 95 | -s, c); 96 | } 97 | 98 | void main( void ) { 99 | 100 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 101 | float t = pow((sin(time + (pos.x + pos.y) * 0.2) + 1.0) / 2.0, 2.0) * 200.0; 102 | pos = floor(pos * t) / t; 103 | 104 | vec3 color = vec3(0.0, 0.0, 0.0); 105 | color += vec3(1.0, 1.0, 1.0) * (0.005 / abs(dist(pos))); 106 | color += 0.01 / abs(perlin(vec3(pos * 10.0 + time, time * 1.0)) - 0.5) * vec3(0.0, 0.3, 0.0); 107 | gl_FragColor = vec4(color, 1.0); 108 | 109 | } -------------------------------------------------------------------------------- /Shader008.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader008.gif -------------------------------------------------------------------------------- /Shader008.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | #define PI 3.1415926535 8 | 9 | uniform float time; 10 | uniform vec2 mouse; 11 | uniform vec2 resolution; 12 | 13 | float rand(vec3 co) 14 | { 15 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 16 | } 17 | 18 | float noise(vec3 pos) 19 | { 20 | vec3 ip = floor(pos); 21 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 22 | vec4 a = vec4( 23 | rand(ip + vec3(0, 0, 0)), 24 | rand(ip + vec3(1, 0, 0)), 25 | rand(ip + vec3(0, 1, 0)), 26 | rand(ip + vec3(1, 1, 0))); 27 | vec4 b = vec4( 28 | rand(ip + vec3(0, 0, 1)), 29 | rand(ip + vec3(1, 0, 1)), 30 | rand(ip + vec3(0, 1, 1)), 31 | rand(ip + vec3(1, 1, 1))); 32 | 33 | a = mix(a, b, fp.z); 34 | a.xy = mix(a.xy, a.zw, fp.y); 35 | return mix(a.x, a.y, fp.x); 36 | } 37 | 38 | 39 | float perlin(vec3 pos) 40 | { 41 | return (noise(pos) * 32.0 + 42 | noise(pos * 2.0 ) * 16.0 + 43 | noise(pos * 4.0) * 8.0 + 44 | noise(pos * 8.0) * 4.0 + 45 | noise(pos * 16.0) * 2.0 + 46 | noise(pos * 32.0) * 1.0) / 64.0; 47 | } 48 | 49 | float box(vec2 pos, vec2 rect) 50 | { 51 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 52 | } 53 | 54 | float lChar(vec2 pos) 55 | { 56 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 57 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 58 | } 59 | 60 | float gChar(vec2 pos) 61 | { 62 | return min(min(min( 63 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 64 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 65 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 66 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 67 | } 68 | 69 | float tChar(vec2 pos) 70 | { 71 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 72 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 73 | } 74 | float mChar(vec2 pos) 75 | { 76 | return min(min(min( 77 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 78 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 79 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 80 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 81 | } 82 | float dist(vec2 pos) { 83 | return min(min(min( 84 | lChar(pos - vec2(-0.3, 0.0)), 85 | gChar(pos - vec2(-0.1, 0.0))), 86 | tChar(pos - vec2(0.1, 0.0))), 87 | mChar(pos - vec2(0.3, 0.0))) 88 | + (length(fract(pos * 40.0 + time) - 0.5) - 0.5) / (sin(time * 3.0 + (pos.x + pos.y) * 2.0) * 14.0 + 16.0); 89 | } 90 | 91 | mat2 rot(float a) 92 | { 93 | float s = sin(a); 94 | float c = cos(a); 95 | return mat2(c, s, 96 | -s, c); 97 | } 98 | 99 | void main( void ) { 100 | 101 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 102 | 103 | vec3 color = vec3(0.0, 0.0, 0.0); 104 | if (dist(pos) < 0.001) color += vec3(1.0, 1.0, 0.0); 105 | 106 | if (fract(pos.x * 10.0 + time) < 0.1) color += vec3(0.0, 0.3, 0.0); 107 | if (fract(pos.y * 10.0 + time) < 0.1) color += vec3(0.0, 0.3, 0.0); 108 | //color += 0.01 / abs(perlin(vec3(pos * 10.0 + time, time * 1.0)) - 0.5) * vec3(0.0, 0.3, 0.0); 109 | gl_FragColor = vec4(color, 1.0); 110 | 111 | } -------------------------------------------------------------------------------- /Shader009.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader009.gif -------------------------------------------------------------------------------- /Shader009.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | #define PI 3.1415926535 8 | 9 | uniform float time; 10 | uniform vec2 mouse; 11 | uniform vec2 resolution; 12 | 13 | float rand(vec3 co) 14 | { 15 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 16 | } 17 | 18 | float noise(vec3 pos) 19 | { 20 | vec3 ip = floor(pos); 21 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 22 | vec4 a = vec4( 23 | rand(ip + vec3(0, 0, 0)), 24 | rand(ip + vec3(1, 0, 0)), 25 | rand(ip + vec3(0, 1, 0)), 26 | rand(ip + vec3(1, 1, 0))); 27 | vec4 b = vec4( 28 | rand(ip + vec3(0, 0, 1)), 29 | rand(ip + vec3(1, 0, 1)), 30 | rand(ip + vec3(0, 1, 1)), 31 | rand(ip + vec3(1, 1, 1))); 32 | 33 | a = mix(a, b, fp.z); 34 | a.xy = mix(a.xy, a.zw, fp.y); 35 | return mix(a.x, a.y, fp.x); 36 | } 37 | 38 | 39 | float perlin(vec3 pos) 40 | { 41 | return (noise(pos) * 32.0 + 42 | noise(pos * 2.0 ) * 16.0 + 43 | noise(pos * 4.0) * 8.0 + 44 | noise(pos * 8.0) * 4.0 + 45 | noise(pos * 16.0) * 2.0 + 46 | noise(pos * 32.0) * 1.0) / 64.0; 47 | } 48 | 49 | float box(vec2 pos, vec2 rect) 50 | { 51 | return length(max(vec2(0.0), abs(pos) - rect)) - 0.001; 52 | } 53 | 54 | float lChar(vec2 pos) 55 | { 56 | return min(box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 57 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))); 58 | } 59 | 60 | float gChar(vec2 pos) 61 | { 62 | return min(min(min( 63 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 64 | box(pos - vec2(0.0, -0.08), vec2(0.08, 0.02))), 65 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))), 66 | box(pos - vec2(0.06, -0.05), vec2(0.02, 0.05))); 67 | } 68 | 69 | float tChar(vec2 pos) 70 | { 71 | return min(box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1)), 72 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 73 | } 74 | float mChar(vec2 pos) 75 | { 76 | return min(min(min( 77 | box(pos - vec2(-0.06, 0.0), vec2(0.02, 0.1)), 78 | box(pos - vec2(0.06, 0.0), vec2(0.02, 0.1))), 79 | box(pos - vec2(0.0, 0.0), vec2(0.02, 0.1))), 80 | box(pos - vec2(0.0, 0.08), vec2(0.08, 0.02))); 81 | } 82 | float dist(vec2 pos) { 83 | return min(min(min( 84 | lChar(pos - vec2(-0.3, 0.0)), 85 | gChar(pos - vec2(-0.1, 0.0))), 86 | tChar(pos - vec2(0.1, 0.0))), 87 | mChar(pos - vec2(0.3, 0.0))); 88 | } 89 | 90 | mat2 rot(float a) 91 | { 92 | float s = sin(a); 93 | float c = cos(a); 94 | return mat2(c, s, 95 | -s, c); 96 | } 97 | 98 | void main( void ) { 99 | 100 | vec2 pos = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 101 | pos.x += (perlin(vec3(pos, time * 0.1)) - 0.5); 102 | pos.y += (perlin(vec3(pos, time * 0.1 + 10.0)) - 0.5); 103 | 104 | vec3 color = vec3(0.0, 0.0, 0.0); 105 | color += vec3(1.0, 1.0, 1.0) * (0.005 / abs(dist(pos))); 106 | color += 0.01 / abs(perlin(vec3(pos * 10.0 + time, time * 1.0)) - 0.5) * vec3(0.0, 0.3, 0.0); 107 | gl_FragColor = vec4(color, 1.0); 108 | 109 | } -------------------------------------------------------------------------------- /Shader010.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/notargs/LGTM-Shaders/584a188e5e3d08f3f17920a74fc21c49f13c7e8c/Shader010.gif -------------------------------------------------------------------------------- /Shader010.glsl: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | #extension GL_OES_standard_derivatives : enable 6 | 7 | #define PI 3.1415926535 8 | 9 | uniform float time; 10 | uniform vec2 mouse; 11 | uniform vec2 resolution; 12 | 13 | float rand(vec3 co) 14 | { 15 | return fract(sin(dot(co.xyz, vec3(12.9898, 78.233, 56.787))) * 43758.5453); 16 | } 17 | 18 | float noise(vec3 pos) 19 | { 20 | vec3 ip = floor(pos); 21 | vec3 fp = smoothstep(0.0, 1.0, fract(pos)); 22 | vec4 a = vec4( 23 | rand(ip + vec3(0, 0, 0)), 24 | rand(ip + vec3(1, 0, 0)), 25 | rand(ip + vec3(0, 1, 0)), 26 | rand(ip + vec3(1, 1, 0))); 27 | vec4 b = vec4( 28 | rand(ip + vec3(0, 0, 1)), 29 | rand(ip + vec3(1, 0, 1)), 30 | rand(ip + vec3(0, 1, 1)), 31 | rand(ip + vec3(1, 1, 1))); 32 | 33 | a = mix(a, b, fp.z); 34 | a.xy = mix(a.xy, a.zw, fp.y); 35 | return mix(a.x, a.y, fp.x); 36 | } 37 | 38 | 39 | float perlin(vec3 pos) 40 | { 41 | return (noise(pos) * 32.0 + 42 | noise(pos * 2.0 ) * 16.0 + 43 | noise(pos * 4.0) * 8.0 + 44 | noise(pos * 8.0) * 4.0 + 45 | noise(pos * 16.0) * 2.0 + 46 | noise(pos * 32.0) * 1.0) / 64.0; 47 | } 48 | 49 | float box(vec3 pos, vec3 rect) 50 | { 51 | return length(max(vec3(0.0), abs(pos) - rect)) - 0.001; 52 | } 53 | 54 | float lChar(vec3 pos) 55 | { 56 | return min(box(pos - vec3(-0.06, 0.0, 0.0), vec3(0.02, 0.1, 0.02)), 57 | box(pos - vec3(0.0, -0.08, 0.0), vec3(0.08, 0.02, 0.02))); 58 | } 59 | 60 | float gChar(vec3 pos) 61 | { 62 | return min(min(min( 63 | box(pos - vec3(-0.06, 0.0, 0.0), vec3(0.02, 0.1, 0.02)), 64 | box(pos - vec3(0.0, -0.08, 0.0), vec3(0.08, 0.02, 0.02))), 65 | box(pos - vec3(0.0, 0.08, 0.0), vec3(0.08, 0.02, 0.02))), 66 | box(pos - vec3(0.06, -0.05, 0.0), vec3(0.02, 0.05, 0.02))); 67 | } 68 | 69 | float tChar(vec3 pos) 70 | { 71 | return min(box(pos - vec3(0.0, 0.0, 0.0), vec3(0.02, 0.1, 0.02)), 72 | box(pos - vec3(0.0, 0.08, 0.0), vec3(0.08, 0.02, 0.02))); 73 | } 74 | float mChar(vec3 pos) 75 | { 76 | return min(min(min( 77 | box(pos - vec3(-0.06, 0.0, 0.0), vec3(0.02, 0.1, 0.02)), 78 | box(pos - vec3(0.06, 0.0, 0.0), vec3(0.02, 0.1, 0.02))), 79 | box(pos - vec3(0.0, 0.0, 0.0), vec3(0.02, 0.1, 0.02))), 80 | box(pos - vec3(0.0, 0.08, 0.0), vec3(0.08, 0.02, 0.02))); 81 | } 82 | 83 | float lgtm(vec3 pos) { 84 | return min(min(min( 85 | lChar(pos - vec3(-0.3, 0.0, 0.0)), 86 | gChar(pos - vec3(-0.1, 0.0, 0.0))), 87 | tChar(pos - vec3(0.1, 0.0, 0.0))), 88 | mChar(pos - vec3(0.3, 0.0, 0.0))); 89 | } 90 | 91 | float pipe(vec3 pos) { 92 | return length(fract(pos.xz / 3.0 + pos.y * 0.05) - 0.5) - 0.05; 93 | } 94 | 95 | float dist(vec3 pos) { 96 | return min(min(min(lgtm(pos), 97 | box(pos - vec3(0.0, 0.4, 0.0), vec3(0.3, 0.2, 0.3))), 98 | box(pos - vec3(0.0, -0.4, 0.0), vec3(0.3, 0.2, 0.3))), 99 | pipe(pos)); 100 | } 101 | 102 | vec3 getColor(vec3 pos) 103 | { 104 | if (lgtm(pos) < 0.001) return vec3(1, 0, 0.5); 105 | return vec3(0.2, 0.0, 0.4); 106 | } 107 | 108 | vec3 getNormal(vec3 pos) 109 | { 110 | float e = 0.001; 111 | return normalize(vec3(dist(pos) - dist(pos - vec3(e, 0, 0)), 112 | dist(pos) - dist(pos - vec3(0, e, 0)), 113 | dist(pos) - dist(pos - vec3(0, 0, e)))); 114 | } 115 | 116 | mat3 rotateY(float a) 117 | { 118 | float s = sin(a); 119 | float c = cos(a); 120 | return mat3(c, 0, s, 121 | 0, 1, 0, 122 | -s, 0, c); 123 | } 124 | 125 | void main( void ) { 126 | 127 | vec2 tex = (gl_FragCoord.xy - resolution.xy / 2.0) / resolution.y; 128 | mat3 rot = rotateY(sin(time) * 4.0 + PI); 129 | vec3 pos = rot * vec3(0, 0, -0.5); 130 | vec3 dir = rot * normalize(vec3(tex, 0.3)); 131 | 132 | vec3 color = vec3(1, 1, 1); 133 | 134 | for (float depth = 0.0; depth < 64.0; ++depth) 135 | { 136 | float d = dist(pos); 137 | pos += d * dir; 138 | if (d < 0.001) 139 | { 140 | vec3 normal = getNormal(pos); 141 | float light = max(dot(normal * rot, vec3(1, 1, -1) ), 0.0) + 0.3; 142 | color *= clamp(light * getColor(pos) + depth / 64.0, 0.0, 1.0); 143 | dir = reflect(dir, normal); 144 | pos += dir * 0.01; 145 | } 146 | } 147 | 148 | gl_FragColor = vec4(color, 1.0); 149 | 150 | } --------------------------------------------------------------------------------