Troika: рдЯреЗрдХреНрд╕реНрдЯ рдПрдВрдЯреАрдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рд╡рд┐рдЪрд╛рд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЬреВрди 2021  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: protectwise/troika

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдВрдЯреАрдЕрд▓рд╛рдЗрдЬрд┐рдВрдЧ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╢реЗрдбрд░-рдбреНрд░рд╛ рд╕рд░реНрдХрд▓ рдХреЗ рдПрдВрдЯреАрдЕрд▓рд╛рдЗрдЬрд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдкрд░ рднреА рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ , рдХреНрдпреЛрдВрдХрд┐ рдЯреЗрдХреНрд╕реНрдЯ рдПрд╕рдбреАрдПрдл-рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рд╕рд░реНрдХрд▓ рдХрд╛ рдПрдВрдЯреАрдЕрд▓рд╛рдЗрдЬрд┐рдВрдЧ рджреВрд░реА-рдЖрдзрд╛рд░рд┐рдд рднреА рд╣реИред

рдЯреНрд░реЛрдЗрдХрд╛ рдХреЗ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдк рджреВрд░реА рдХреЗ рд▓рд┐рдП return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.5; рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╣реИ рдХрд┐ рдХреЛрдг рдкрд░ рджреЗрдЦрдиреЗ рдкрд░, рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдзреБрдВрдзрд▓рд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:
image

рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрджрд┐рд╢ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛; рджреВрд░реА, рдореЗрд░реЗ рд╕рд░реНрдХрд▓ рдХреЛрдб рдХреА рддрд░рд╣: return fwidth(distance) * 0.5; troikaGetFragDistValue рд╕реЗ рдЗрд╕ рддрд░рд╣ рдкрд╛рд░рд┐рдд рджреВрд░реА рдХреЗ рд╕рд╛рде: float distance = troikaGetFragDistValue(); float aaDist = troikaGetAADist(distance);
рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдзреБрдВрдзрд▓рд╛ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
image

0.5 рдХрд╛рд░рдХ рдХреЛ рдПрдХ рд╕реНрдореВрде рдПрдВрдЯреАрдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ 0.8 :
image

рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╢рд╛рдпрдж рдЖрдк рднреА рдореЗрд░реА рддрд░рд╣ рдЗрд╕ рддрд░реАрдХреЗ рд╕реЗ рдЕрдирдЬрд╛рди рдереЗ, рддреЛ рд╕реЛрдЪрд╛ рдХрд┐ рдЗрд╕реЗ рд╢реЗрдпрд░ рдХрд░ рджреВрдВред рдореЗрд░реЗ "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рд╣реИрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ), рдФрд░ рд╢рд╛рдпрдж рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ред рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╢реЗрдбрд░ рдХреЛрдб рдореЗрдВ рдПрдбрд┐рд╕реНрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕реБрд╕рдЬреНрдЬрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рдХреЛрдб рдмрджрд▓рд╛ рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛ рдореЗрд░реЗ "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рдХреЛ рдФрд░ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

image

рдореБрдЭреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдпрд╣ рд╡рд┐рдзрд┐ рдпрд╣рд╛рдБ bgolus рдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ рдорд┐рд▓реА: https://forum.unity.com/threads/antialiasing-circle-shader.432119/ рдЬрд╣рд╛рдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рд╡рд╣ рдпрд╣ рднреА рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП length(vec2(dFdx(distance), dFdy(distance))) рдХреЗ рдмрдЬрд╛рдп fwidth(distance) рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдирдЧрдгреНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВред

рд╕рднреА 7 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдпреЗ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЙрди рдзреБрдВрдзрд▓реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рддрд┐рд░рдЫреЗ рдХреЛрдгреЛрдВ рдкрд░ рднреА рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЦрддреНрдо рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ distance рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ vTroikaGlyphUV * vTroikaGlyphDimensions рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЛрдиреЛрдВ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдлрд╝реЙрдиреНрдЯ-рд╕реНрдкреЗрд╕ рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рджреВрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдХреБрдЫ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдирджреЗрдЦреА рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЧрдП рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЖрдкрдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред :)

рдорд╣рд╛рди! рдкрд░рд┐рд╡рд░реНрддрди рдЙрддрдирд╛ рд╣реА рд╕рд░рд▓ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ (рдФрд░ рдЙрд╕ рджреВрд░реА рддрд░реНрдХ рдореЗрдВ рдЗрд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдХрдЪреНрдЪрд╛ рдХреЛрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрд▓ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреВрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ vTroikaGlyphUV * vTroikaGlyphDimensions рджреЛрдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдлрд╝реЙрдиреНрдЯ-рд╕реНрдкреЗрд╕ рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рджреВрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ

рдореИрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреИрд╕реЗ рд╕рдорд╛рди рд╣реЛрдВрдЧреЗред distance рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд╕рдбреАрдПрдл рджреВрд░реА рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдПрдХ рдЫреЛрдЯрд╛ рдпреВрд╡реА рд╕реНрдерд┐рддрд┐ рд╣реИред рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ fwidth рдкрдбрд╝реЛрд╕реА рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдЙрдиреНрд╣реАрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирдкреБрдЯ рдорд╛рди рдХрд╛ рдЕрдВрддрд░ рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрдбрд╝реЛрд╕реА рдЯреБрдХрдбрд╝реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЖрдЬ рдкрд╣рд▓реЗ gl_FragColor.rgb = vec3(fwidth(gl_FragColor.x + gl_FragColor.g + gl_FragColor.b)); рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ/рдПрдХ рд╕реЛрдмреЗрд▓ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рддрд░рд╣ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЙрд╕ рддрдереНрдп рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдпрд╣ рдХрд┐рдпрд╛ред

рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рд╕рд╛рдорд╛рди рдХрднреА-рдХрднреА рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред ;)

рдЬрдм рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рд╡реЗ "рд╕рдорддреБрд▓реНрдп" рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рджреВрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред

рдмреИрдХ рдЕрдк рд▓реЗрдирд╛, рд╣рдо рдпрд╣рд╛рдВ рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрди рдХреА _potential_ рджрд░ рд╣реИред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЬрд╛ рд░рд╣реЗ distance рдЪрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рдЧрд▓рдд рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рд╕ SDF рд╕реЗ рдЙрд╕ рдорд╛рди рдХрд╛ рдирдореВрдирд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ _non-uniform_ рд╣реИ; рдпрд╣ рдШрдЯрддрд╛ рд╣реИ рдФрд░ рдЧреНрд▓рд┐рдлрд╝ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рджрд┐рд╢рд╛ рдмрджрд▓рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдкрдбрд╝реЛрд╕реА рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдмреАрдЪ distance рдХрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрдВрдд рдореЗрдВ рдмрд╣реБрдд рдЫреЛрдЯрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢реВрдиреНрдп рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЬрд╣рд╛рдВ рджреВрд░реА рдХреНрд╖реЗрддреНрд░ рдЧреНрд▓рд┐рдлрд╝ рдкрдереЛрдВ рдХреЗ рдмреАрдЪ рдмрдврд╝рддреЗ рд╕реЗ рдШрдЯрддреЗ рдЖрдзреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЬрдм рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдФрд░ рдЦрдВрдб рдЧреНрд░рд┐рдб рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдПрд╕рдбреАрдПрдл рдХреЛ рдУрд╡рд░рд▓реЗ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред

рддреЛ рд╣рдо distance рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА _potential_ рджрд░ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдареАрдХ рд╣реИ рдХрд┐ "рд╕реНрдХреЗрд▓реНрдб рдпреВрд╡реА рдкреЛрдЬреАрд╢рди" рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд░реЗрдХреНрдЯ рдХреЗ рднреАрддрд░ рдПрдХ x/y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИ, рд╕рдорд╛рди рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ distance ред рдЙрд╕ x/y рдХрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣рдореЗрдВ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрднрд╛рд╡рд┐рдд рдпрд╛рддреНрд░рд╛ рдХреА рджрд░ рджреЗрддрд╛ рд╣реИред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ distance рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧреНрд▓рд┐рдлрд╝ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА _uniform_ рджрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИрдВ рдФрд░ рдпрд╣ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИред

рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдЯреВрдЯрддрд╛ рд╣реИ рд╡рд╣ рддрд┐рд░рдЫреЗ рдХреЛрдгреЛрдВ рдкрд░ рд╣реЛрддрд╛ рд╣реИ; рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд x/y рдкрд░рд┐рд╡рд░реНрддрди рдХреА рджрд░ рдХреНрд╖реИрддрд┐рдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рджрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдЙрд╕ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдПрд╕рдбреАрдПрдл рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд┐рд╢рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдзреБрдВрдзрд▓реА рдФрд░/рдпрд╛ рддрдбрд╝рдХрд╛ рд╣реБрдЖ рд░реЗрдЦрд╛рдПрдВ рджреЗрддрд╛ рд╣реИред

рддреЛ рд╣рд╛рдБ, рдкрд░реЛрдХреНрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ distance рдХреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВред рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рдП (рдПрдХ рддрд┐рд░рдЫреЗ рдХреЛрдг рдкрд░ рдмрдбрд╝реЗ рдкрд╛рда рдХрд╛ рдЖрдХрд╛рд░, рдПрдХ рдкрде рдХреЗ рдХрд░реАрдм) рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ distance рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╣рд╛рдБ, рдпрд╣ рд╕рд╛рдорд╛рди рд╕реЛрдЪрдиреЗ рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд╣рд╛ред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рджреВрд░реА рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдХрдо рдЪрд┐рдХрдирд╛ рд╣реИ, рд╣рд╛рдБред

рд╡реЗ рдЧрдбрд╝рдмрдбрд╝ рдкрд┐рдХреНрд╕реЗрд▓ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдБ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рджреВрд░реА рдХреЗ рдорд╛рди рд╣реИрдВред

рдпрд╣ рджреВрд░ рд╕реЗ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рддрдбрд╝рдХрд╛ рд╣реБрдЖ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпреВрд╡реА рдХреЛ рдмреЗрд╣рддрд░ рд╣реЛрддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рджреВрд░реА рдЪрд░ рдФрд░ рдХреИрдорд░рд╛ рджреВрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдпреВрд╡реА рдХреЗ рдмреАрдЪ рдЗрдВрдЯрд░рдкреЛрд▓рд┐рдВрдЧ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреА; рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░ рдЕрдзрд┐рдХ fwidth(рджреВрд░реА) рдФрд░ рджреВрд░ рд╣реЛрдиреЗ рдкрд░ рдЕрдзрд┐рдХ fwidth(uv) рдЪреБрдиреЗрдВред

рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП (рдПрдХ рд╣реА рдХреИрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рджреЛрдиреЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╕реЗ рднреА рдЕрдВрддрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ):
рджреВрд░реА (0.8 рдХрд╛рд░рдХ):
image
рдпреВрд╡реА:
image

рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдВрд╢реЛрдзрди рдХрд╕реНрдЯрдо рдЯреЗрдХреНрд╕реНрдЯ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХреБрдЫ рдкрд╛рда рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ createDerivedMaterial ( рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рджреЗрдЦреЗрдВ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рдХреНрд░ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реЛрдЗрдХрд╛-рддреАрди-рдкрд╛рда рд╢реЗрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

image

рдпрд╣рд╛рдБ рд╡рд╣реА рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИ, рд▓реЗрдХрд┐рди @asbjornlystrup рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рд╛рде troikaGetAADist :

image

рджреВрд╕рд░реЗ рд╢реЙрдЯ рдореЗрдВ, рдЖрдк рдмреЗрд╣рдж рдлреИрд▓рд╛ рд╣реБрдЖ "рдЧреНрд░реЗрдЯ!" рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рдлреА рдХреНрд░рд┐рд╕реНрдкреА рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ: рдореИрдВрдиреЗ рдпрд╣ рднреА рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ 0.25 (0.5 рд╕реЗ) рдореЗрдВ рдмрджрд▓рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреБрд░рдХреБрд░рд╛ рдХрд┐рдирд╛рд░рд╛ рднреА рдмрдирд╛рддрд╛ рд╣реИ:

return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.25;

рдзрдиреНрдпрд╡рд╛рдж @canadaduane , рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлреИрд▓реЗ рд╣реБрдП рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рд╣реЗрд▓реНрд▓реЛ рдореЗрдВ рдПрд▓ рдХреЗ рдмреАрдЪ рдмрджрд╕реВрд░рдд рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЛ рдЕрдкрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕