рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЛ рдЬреЙрди рдЪреИрдкрдореИрди рдХреЗ рд▓реЗрдЦ
"рдЫрджреНрдо рд▓реЗрдВрд╕ рднрдбрд╝рдХрдирд╛" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред
рд▓реЗрдВрд╕ рдлреНрд▓реЗрдпрд░ (рд▓реЗрдВрд╕ рдлреНрд▓реЗрдпрд░) рдПрдХ рд▓реЗрдВрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдкреНрд░рдХреАрд░реНрдгрди рдФрд░ рдЕрдкрд╡рд░реНрддрди рд╕реЗ рдЙрддреНрдкрдиреНрди рдПрдХ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрд▓рд╛рдХреГрддрд┐ рд╣реИред рдпрджреНрдпрдкрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рд╣реИ, рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ
рд▓реЗрдВрд╕ рдлреНрд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ:
- рдпрд╣ рдЫрд╡рд┐ рдХреА рдХрдерд┐рдд рдЪрдордХ рдФрд░ рджреГрд╢реНрдпрдорд╛рди рдЧрддрд┐рд╢реАрд▓ рд╕реАрдорд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
- рд▓реЗрдВрд╕ рднрдбрд╝рдХрдирд╛ рдЕрдХреНрд╕рд░ рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣рдбрд╝рддрд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ
- рдпрд╣ рд╢реИрд▓реА рдпрд╛ рдирд╛рдЯрдХ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдЧреЗрдо рдореЗрдВ рдЧреЗрдордкреНрд▓реЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдВрдзрд╛ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ)
рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ
рд▓реЗрдВрд╕ рднрдбрд╝рдХрдирд╛ рд╕реНрдкреНрд░рд╛рдЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдФрд░ рдмрд╣реБрдд рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдбрд╝рд╛ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рд╕рд░рд▓ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддреЗ рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдкреНрд░рднрд╛рд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЗрдирдкреБрдЯ рд░рдВрдЧ рдмрдлрд░ рд╕реЗ рдПрдХ рдЫрджреНрдо
рд▓реЗрдВрд╕ рднрдбрд╝рдХрддрд╛ рд╣реИред рдпрд╣ рднреМрддрд┐рдХреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдлреЛрдЯреЛрд░рд┐рдЕрд▓рд┐рд╕реНрдЯрд┐рдХ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реНрдкреНрд░рд╛рдЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде (рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ) рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
4 рдЪрд░рдгреЛрдВ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:
- рдЪрдврд╝рд╛рд╡ / рджрд╣рд▓реАрдЬред
- рд▓реЗрдВрд╕ рднрдбрд╝рдХрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА рдЙрддреНрдкрддреНрддрд┐ ред
- рдзреБрдВрдзрд▓рд╛ред
- рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЕрдкрд╕реНрдХреЗрд▓ / рд╕рдореНрдорд┐рд╢реНрд░рдгред
1. рдЪрдврд╝рд╛рд╡ / рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб
рдбрд╛рдЙрдирд╕рдорд▓рд┐рдВрдЧ - рдмрд╛рдж рдХреЗ рдЪрд░рдгреЛрдВ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рдиред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдореВрд▓ рдЫрд╡рд┐ рдореЗрдВ рд╕рдмрд╕реЗ рдЪрдордХрджрд╛рд░ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╕реНрдХреЗрд▓ / рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ (рд╕реНрдХреЗрд▓ / рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдЪреАрд▓рд╛ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
uniform sampler2D uInputTex; uniform vec4 uScale; uniform vec4 uBias; noperspective in vec2 vTexcoord; out vec4 fResult; void main() { fResult = max(vec4(0.0), texture(uInputTex, vTexcoord) + uBias) * uScale; }
рд╕реНрдХреЗрд▓ / рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рд╕рдорд╛рдпреЛрдЬрди рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рддрд░реАрдХрд╛ рд╣реИ; рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд░рдВрдЧ рдмрдлрд░ рдХреА рдЧрддрд┐рд╢реАрд▓ рд╕реАрдорд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧреА, рд╕рд╛рде рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдкрддрд▓рд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рддрдХрдиреАрдХ рдПрдХ рд╕рдиреНрдирд┐рдХрдЯрди рд╣реИ, рд╕реВрдХреНрд╖реНрдорддрд╛ рдмреЗрд╣рддрд░ рджрд┐рдЦрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
2. рд▓реЗрдВрд╕ рднрдбрд╝рдХрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА рдЙрддреНрдкрддреНрддрд┐
рд▓реЗрдВрд╕ рднрдбрд╝рдХрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдЫрд╡рд┐ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШреВрдорддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдХреЗ, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреНрд╖реИрддрд┐рдЬ / рд▓рдВрдмрд╡рдд рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрддреНрд╡ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реНрддрд░ рдкрд░ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
vec2 texcoord = -vTexcoords + vec2(1.0);
рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ; рддрддреНрд╡ рдкреАрдврд╝реА рдЗрд╕рдХреЗ рд╕рд╛рде рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╣реА рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрджрд▓рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк
рд▓реЗрдВрд╕ рдХреЛ рдореВрд▓ рдЫрд╡рд┐ рд╕реЗ
рднрдбрд╝рдХрдирд╛ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред
рднреВрдд
"
рдШреЛрд╕реНрдЯ " (рднреВрдд) рд╣рд╛рдЗрд▓рд╛рдЗрдЯреНрд╕ рджреЛрд╣рд░рд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рд░рдВрдЧреАрди рдмрдлрд░ рдореЗрдВ рдЙрдЬреНрдЬреНрд╡рд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ, рдЫрд╡рд┐ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЦреБрд▓рддреЗ рд╣реИрдВред рдЬрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдореИрдВрдиреЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИ, рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рд╕реНрдХреНрд░реАрди рдХреЗ рдХреЗрдВрджреНрд░ рддрдХ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрдИ рдЪрдпрди рдХрд░реЗрдВред

uniform sampler2D uInputTex; uniform int uGhosts;
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ
рдлреНрд░реИрдХреНрдЪрд░ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрддрд╛ рд╣реИ; рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЖрдк рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд░реИрдк рдореЛрдб
GL_REPEAT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

рдЖрдк рднреВрдд рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЙрдЬреНрдЬреНрд╡рд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрдВрджреНрд░ рд╕реЗ рдШрдЯрдиреЗ рд╡рд╛рд▓реЗ рд╡рдЬрд╝рди рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
vec4 result = vec4(0.0); for (int i = 0; i < uGhosts; ++i) { vec2 offset = fract(texcoord + ghostVec * float(i)); float weight = length(vec2(0.5) - offset) / length(vec2(0.5)); weight = pow(1.0 - weight, 10.0); result += texture(uInputTex, offset) * weight; }
рд╡рдЬрди рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рд╣реИ - рд░реИрдЦрд┐рдХред рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рд╡рдЬрди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЙрдЬреНрдЬреНрд╡рд▓ рдХреНрд╖реЗрддреНрд░ рд╕реАрдорд╛рдУрдВ рдкрд░ рднреВрддреЛрдВ рдХреЛ "рдХрд╛рд╕реНрдЯ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реАрдорд╛рдУрдВ рдкрд░ рдЙрдЬреНрдЬреНрд╡рд▓ рдХреНрд╖реЗрддреНрд░ рднреВрддреЛрдВ рдХреЛ рдХреЗрдВрджреНрд░ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрддрд┐рдо рд╕реБрдзрд╛рд░ 1 рдбреА рдмрдирд╛рд╡рдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рднреВрдд рдХреЗ рд░реЗрдбрд┐рдпрд▓ рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ:

рдЗрд╕реЗ рднреВрдд рдХреЗ рдЕрдВрддрд┐рдо рд░рдВрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдХреНрд░ рдХреЗ рдмрд╛рдж рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
result *= texture(uLensColor, length(vec2(0.5) - texcoord) / length(vec2(0.5)));
HALOS (рд╣рд▓реЛ)
рдпрджрд┐ рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЫрд╡рд┐ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐
рднреВрдд рдЧрдгрдирд╛ рдореЗрдВ, рд▓реЗрдХрд┐рди рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рднрд╛рд╡ рдорд┐рд▓рддрд╛ рд╣реИ: рдореВрд▓ рдЫрд╡рд┐ рдХреЛ рд░реЗрдбрд┐рдпрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рд╣рдо рдПрдХ рдирдореВрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рдЬрди рдХреЛ рдЧреБрдгрд╛ рдХрд░рдХреЗ "рд╣реЗрд▓реЛ" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рдХреГрдд рдЫрд╡рд┐ рдХреЗ рдпреЛрдЧрджрд╛рди рдХреЛ рдПрдХ рдЕрдВрдЧреВрдареА рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рддреНрд░рд┐рдЬреНрдпрд╛
uHaloWidth рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ :

CHROMATIC DISTORTION (рд░рдВрдЧ рд╡рд┐рдХреГрддрд┐)
рдХреБрдЫ рд▓реЗрдВрд╕ рдлреНрд▓реЗрдпрд░реНрд╕ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░рдВрдЧ рджреИрд░реНрдзреНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдЕрдкрд╡рд░реНрддрди рдореЗрдВ рднрд┐рдиреНрдирддрд╛ рдХреЗ рдХрд╛рд░рдг рд░рдВрдЧ рд╡рд┐рд░реВрдкрдг рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдХрд░ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд▓рд╛рд▓, рд╣рд░реЗ рдФрд░ рдиреАрд▓реЗ рдЪреИрдирд▓ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирдореВрдиреЗ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЪреБрдирддрд╛ рд╣реИ:
vec3 textureDistorted( in sampler2D tex, in vec2 texcoord, in vec2 direction,
рдЗрд╕реЗ рдкрд┐рдЫрд▓реА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ
рдЯреЗрдХреНрд╕рдЪрд░ () рдХреЙрд▓рд┐рдВрдЧ
рдЯреЗрдХреНрд╕рдЪрд░ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░
рджрд┐рд╢рд╛ рдФрд░
рд╡рд┐рдХреГрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ:
vec2 texelSize = 1.0 / vec2(textureSize(uInputTex, 0)); vec3 distortion = vec3(-texelSize.x * uDistortion, 0.0, texelSize.x * uDistortion); vec3 direction = normalize(ghostVec);
рдпрджреНрдпрдкрд┐ рдпрд╣ рднреНрд░реВрдг рдХрд╛ рдХрд╛рд░реНрдп рд╕рд░рд▓ рд╣реИ, рдЗрд╕рдХреА рдмрдирд╛рд╡рдЯ рд╕реЗ x3 рдирдореВрдиреЗ рдЦрд░реНрдЪ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рд╕рднреА рдХреИрд╢-рдлреНрд░реЗрдВрдбрд▓реА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдХреБрдЫ рд╡рд┐рд╢рд╛рд▓ рдореВрд▓реНрдп рдкрд░
uDistortion рд╕реЗрдЯ
рди рдХрд░реЗрдВред
рддрддреНрд╡реЛрдВ рдХреА рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

3. рдзрдмреНрдмрд╛
рдзреБрдВрдзрд▓рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд┐рдирд╛,
рд▓реЗрдВрд╕ рднрдбрд╝рдХрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рднреВрдд) рдЫрд╡рд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдВрд╕ рдлреНрд▓реЗрдпрд░ рддрддреНрд╡реЛрдВ рдореЗрдВ рдзрдмреНрдмрд╛ рдЬреЛрдбрд╝рдХрд░, рд╣рдо рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдХрдордЬреЛрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдкреНрд░рднрд╛рд╡ рдХреЛ рдмреЗрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред

рдореИрдВ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдзрдмреНрдмрд╛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рдЧреЙрд╕рд┐рдпрди рдХрд▓рдВрдХ) рдкрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
4. рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЕрдкрд╕реНрдХреЗрд▓ / рдорд┐рд╢реНрд░рдг
рддреЛ, рд╣рдо рд╣рдорд╛рд░реЗ
рд▓реЗрдВрд╕ рднрдбрд╝рдХ рддрддреНрд╡реЛрдВ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдзреБрдВрдзрд▓рд╛ рд╣реИред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдореВрд▓ рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рдВрдкреВрд░реНрдг рд░реЗрдВрдбрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ:
- рд▓реЗрдВрд╕ рдХреЗ рднрдбрд╝рдХрдиреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рднреА рдмрд╛рдж рдХреЗ рдЧрддрд┐ рдзреБрдВрдзрд▓рд╛ рдпрд╛ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд▓реЗрдВрд╕ рднрдбрд╝рдХрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдЗрди рдкреНрд░рднрд╛рд╡реЛрдВ рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрдВрдЧреЗред
- рдХрд┐рд╕реА рднреА рдЯреЛрдирд╣реАрдкрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдВрд╕ рднрдбрд╝рдХрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рднреМрддрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реА рд░реЛрд╢рдиреА рдореЗрдВ рдлрд┐рд▓реНрдо / CMOS рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдирдХрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд▓реЗрдВрд╕ рднрдбрд╝рдХрдирд╛ рдПрдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИред
рдЗрд╕ рдмрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдкрд░рд┐рдгрд╛рдо рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд▓реЗрдВрд╕ DIRT
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкреВрд░реНрдг рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдореЗрдВ рдПрдХ рдЧрдВрджреЗ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде
рд▓реЗрдВрд╕ рдлреНрд▓реЗрдпрд░ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдпреБрджреНрдзрдХреНрд╖реЗрддреНрд░ 3 рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):

uniform sampler2D uInputTex;
рдЗрд╕ рдХреА рдХреБрдВрдЬреА рд▓реЗрдВрд╕ рдкрд░ рдмрд╣реБрдд рдЧрдВрджрдЧреА рдмрдирд╛рд╡рдЯ рд╣реИред рдпрджрд┐ рдХрдВрдЯреНрд░рд╛рд╕реНрдЯ рдХрдо рд╣реИ, рддреЛ
рд▓реЗрдВрд╕ рднрдбрд╝рдХрдирд╛ рдЖрдХрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдкрд░ рд╣рд╛рд╡реА рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрдврд╝рдиреЗ рдкрд░,
рд▓реЗрдВрд╕ рднрдбрд╝рдХрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдордлрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЕрд▓рдЧ рд╕реМрдВрджрд░реНрдп рдЙрдкрд╕реНрдерд┐рддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рджреЛрд╖реЛрдВ рдХреЛ рднреА рдЫрд┐рдкрд╛рддрд╛ рд╣реИред
DIFFRACTION STARBURST
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЗрд╕реЗ
рд▓реЗрдВрд╕ рдХреА рдЧрдВрджрдЧреА рдореЗрдВ рдЬреЛрдбрд╝рдХрд░
рд╕реНрдЯрд╛рд░рдмрд░реНрд╕реНрдЯ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ,
рд╕реНрдЯрд╛рд░рдмрд░реНрд╕реНрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдирд╣реАрдВ рд▓рдЧрддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ shader рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рд╣рд░ рдлреНрд░реЗрдо рдХреЛ рдШреБрдорд╛рдиреЗ / рд╡рд┐рдХреГрдд рдХрд░рдиреЗ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
uniform sampler2D uInputTex;
ULensStarMatrix рдкрд░рд┐рд╡рд░реНрддрди
рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреИрдорд░рд╛ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдкрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:
vec3 camx = cam.getViewMatrix().col(0);
рдХреЗрдорд░реЛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ; рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреИрдорд░реЗ рдХреЛ рдШреБрдорд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
mat3 scaleBias1 = ( 2.0f, 0.0f, -1.0f, 0.0f, 2.0f, -1.0f, 0.0f, 0.0f, 1.0f, ); mat3 rotation = ( cos(camrot), -sin(camrot), 0.0f, sin(camrot), cos(camrot), 0.0f, 0.0f, 0.0f, 1.0f ); mat3 scaleBias2 = ( 0.5f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, ); mat3 uLensStarMatrix = scaleBias2 * rotation * scaleBias1;
рд╕реНрдХреЗрд▓ рдФрд░
рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЛ рдмрдирд╛рд╡рдЯ рдЙрддреНрдкрддреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЫрд╡рд┐ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖
рд╕реНрдЯрд╛рд░рдмрд░реНрд╕реНрдЯ рдХреЛ рдШреБрдорд╛ рд╕рдХреЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рддреЛ рдЕрдм рд╕рдм рдХреБрдЫ! рдпрд╣ рд╡рд┐рдзрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓реАрдХреГрдд рдкреЛрд╕реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╕рднреНрдп рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ
рд▓реЗрдВрд╕ рдХреЛ рдХреИрд╕реЗ рднрдбрд╝рдХрддреА рд╣реИ ред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлреЛрдЯреЛрд░рд┐рдЕрд▓рд┐рд╕реНрдЯрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдпрд╣ рдмреЗрд╣рддрд░реАрди рдкрд░рд┐рдгрд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдпреБрдкреАрдбреАрд▓реЗрдЦрдХ рдиреЗ рдорд╛рдореВрд▓реА рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде
рдПрдХ рд▓реЗрдЦ рднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред
рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ
рдпрд╣рд╛рдВ рдФрд░
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред