Thunder & ShaderNova
ΠΠ°ΠΊ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄ΡΠΌΠ°Π»Π° ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ΅ΡΡΠ°Π΅Ρ Π² ΡΠ°ΠΊΡ, ΠΊΠ°ΠΊ Π±Π°ΡΠ°Π±Π°Π½Π½Π°Ρ Π΄ΡΠΎΠ±Ρ, Ρ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ΅ΡΡΠ°ΠΊΡΠΈΠΈ Π΄Π»Ρ Π±Π΅ΡΠ΅Π½ΠΎΠ³ΠΎ Π³Π»ΠΈΡΡΠ΅Π²ΠΎΠ³ΠΎ Π²ΡΠΏΠ»Π΅ΡΠΊΠ°? ΠΡΠ»ΠΎ Π±Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΡΡ ΡΡΠΎ Π²ΠΏΠΈΡ
Π½Π΅ΡΡ Π² ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠ°Π΄Π½ΠΎ, Π½Π°ΠΊΠΈΠ½Ρ Π½Π° Π½Π΅Π³ΠΎ ΡΠΎΡΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΏΡΠΎΠ³ΠΎΠ½ΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΈΠ½ΡΡΠΎΠΈΠ΄Ρ Π΄Π»Ρ ΡΠΈΡΠΌΠ° Π±Π°ΡΠ°Π±Π°Π½Π°, ΠΏΠΎΡΠΎΠΌ ΡΠΌΠ΅ΡΠ°ΠΉ ΡΡΠΎ Ρ Π΄Π΅ΡΡΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΡΠΌΠ°, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π³Π»ΡΡΠ½ΡΠ΅ ΠΏΠΎΠΌΠ΅Ρ
ΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΈΠ»Ρ ΠΏΡΠ΅Π»ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡ
ΠΎΠ΄Π΅ Π² ΡΠΊΡΠ°Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π»ΠΈΡΠ½ΠΈΡ
Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΡΠ·Π»ΠΎΠ². ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
```
uniform float iTime;
uniform sampler2D iScreen;
vec2 uv = ...;
float pulse = 0.5 + 0.5*sin(iTime*10.0); // ΡΠΈΡΠΌ Π±Π°ΡΠ°Π±Π°Π½Π°
float glitch = fract(sin(dot(uv ,vec2(12.9898,78.233))) * 43758.5453);
vec2 distort = uv + vec2(glitch, glitch)*pulse*0.02;
vec3 color = texture(iScreen, distort).rgb;
fragColor = vec4(color,1.0);
```
ΠΠ΅ΡΠΆΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎΠΉ, ΠΈΠ·Π±Π΅Π³Π°ΠΉ Π»ΠΈΡΠ½ΠΈΡ
ΠΏΡΠΎΡ
ΠΎΠ΄ΠΎΠ², ΠΈ Ρ ΡΠ΅Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΡΡΡΡΡΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ»ΡΡΠΈΡΡΠ΅Ρ, ΠΈΡΠΊΠ°ΠΆΠ°Π΅Ρ ΠΏΡΠ΅Π»ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΈ ΠΎΡΡΠ°ΡΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ. ΠΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΡΡΠ΅Ρ Π½ΠΎΡΠΌΠ°Π»Π΅ΠΉ, ΡΠΌΠΎΠΆΠ΅ΡΡ Π΄Π°ΠΆΠ΅ ΠΈΠ·Π³ΠΈΠ±Π°ΡΡ ΠΏΡΠ΅Π»ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π² ΠΊΠ°Π»Π΅ΠΉΠ΄ΠΎΡΠΊΠΎΠΏΠ΅ β ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ½ΠΈ, ΡΠ΅ΠΌ ΡΠΈΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΡΠ·Π»ΠΎΠ², ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ "ΠΏΠΎΡΠ·ΠΈΠΈ" ΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΌΠΎΠΆΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ.
ΠΡΠ»ΠΈΡΠ½ΡΠΉ ΠΈΠΌΠΏΡΠ»ΡΡ, Π½ΠΎ ΡΠ»Π΅Π΄ΠΈ Π·Π° ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² 0.02 β ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ΅Π·Π°ΡΡ ΠΊΡΠ°Ρ Π½Π° Π²ΡΡΠΎΠΊΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ. ΠΠΎΠ±Π°Π²Ρ ΠΏΠ°ΡΡ ΠΎΠΊΡΠ°Π² ΡΡΠΌΠ°, Π΄Π΅ΡΠΆΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ Π½Π° ΡΡΠΎΠ²Π½Π΅, ΠΈ ΠΏΠΎΡΡΠ²ΡΡΠ²ΡΠ΅ΡΡ ΡΡΠΎΡ Π±Π°Ρ. ΠΡΠΎΡΠ΅ β Π³ΡΠΎΠΌΡΠ΅.