рдПрдХрддрд╛ рдореЗрдВ рдПрдХ рд░рдВрдЧ рд╡рд┐рддрд░рдг рдкреНрд░рднрд╛рд╡ рдмрдирд╛рдПрдБ


рдпрд╣ рдкреНрд░рднрд╛рд╡ рдкрд╛рд╡рд░рдкрдл рдЧрд░реНрд▓реНрд╕ рдХреЗ рдПрдкрд┐рд╕реЛрдб рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ред рдореИрдВ рдПрдХ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рд░рдВрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд░рдВрдЧ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреИрд╕реЗ рд░рдВрдЧ рдкреЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ , рдФрд░ рди рдХреЗрд╡рд▓ рд╕реНрдХреНрд░реАрди рдкрд░ рдлреНрд▓реИрдЯ рдмрд╛рд╣рд░ рдлреИрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдЯреВрди рдореЗрдВред

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



рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдкреНрд░рднрд╛рд╡


рдмрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдПрдХ рджреГрд╢реНрдп рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рджрд┐рдЦрддрд╛ рд╣реИред


рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирдП рдпреВрдирд┐рдЯреА 2018 рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ C # рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП PostProcessingEffectSettings рдФрд░ PostProcessEffectRenderer рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЛ рдмрдврд╝рд╛рдХрд░ рдЕрдкрдирд╛ рдкреНрд░рднрд╛рд╡ рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реАрдкреАрдпреВ рдХреА рддрд░рдл (рд╕реА # рдХреЛрдб рдореЗрдВ) рдЗрди рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореИрдВрдиреЗ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдЬреЛрдбрд╝рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрд╛ рдХрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХреЛрдб рдЕрдкрдиреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИред

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

рдПрдХ рд░рдВрдЧ рдХреЛ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдПрдХ рдЪрдордХ рдореВрд▓реНрдп рдореЗрдВ рдШрдЯрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреА рдЪрдордХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ ред рдпрд╣ рдХреИрдорд░рд╛ рдмрдирд╛рд╡рдЯ рдФрд░ рднрд╛рд░рд┐рдд рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХреЛ рд▓реЗ рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рдордЧреНрд░ рд░рдВрдЧ рдЪрдордХ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдЪреИрдирд▓ рдХреЗ рдпреЛрдЧрджрд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рд╣рдо рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЕрджрд┐рд╢ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ:

dot(a, b) = a x * b x + a y * b y + a z * b z

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

рдпрд╣рд╛рдБ shader рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 float4 fullColor = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.screenPos); float3 weight = float3(0.299, 0.587, 0.114); float luminance = dot(fullColor.rgb, weight); float3 greyscale = luminance.xxx; return float4(greyscale, 1.0); 

рдпрджрд┐ рдмреЗрд╕ рд╢реЗрдбрд░ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рднрд╛рд╡ рдХреЛ рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдХреЛ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рд░рдВрдЧрдирд╛ рдЪрд╛рд╣рд┐рдПред




рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд░рдВрдЧ рдкреНрд░рднрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рдирд╛


рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рднрд╛рд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╢реАрд░реНрд╖ рдЫрд╛рдпрд╛ рдореЗрдВ рджреГрд╢реНрдп рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ ред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рдХреЗ рдЪрд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рдХреИрдорд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЫрд╡рд┐ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирдореВрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрдВрдЯреЗ рд╣реБрдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рд╕реНрдерд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд░рдВрдЧ рдкреНрд░рднрд╛рд╡ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдлреИрд▓реЗ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдлреНрд▓реИрдЯ рд╕реНрдХреНрд░реАрди рдкрд░ред

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

рдЖрдорддреМрд░ рдкрд░, рдПрдХ рд╕рдордиреНрд╡рд┐рдд рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рдордиреНрд╡рдп рдЕрдВрддрд░рд┐рдХреНрд╖ A рд╕реЗ рдЕрдВрддрд░рд┐рдХреНрд╖ B. рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред A рд╕реЗ B рддрдХ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реНрдерд╛рди A рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХреНрд░рдордг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗ: рдХрд╛рдЯреЗ рдЧрдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (рдХреНрд▓рд┐рдк рд╕реНрдкреЗрд╕) рдХрд╛ рд╕реНрдерд╛рди -> рджреГрд╢реНрдп рд╕реНрдерд╛рди (рджреГрд╢реНрдп рд╕реНрдерд╛рди) -> рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди (рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди) ред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рдХреНрд▓рд┐рдк-рдЯреВ-рд╡реНрдпреВ-рд╕реНрдкреЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рд╡реНрдпреВ-рдЯреВ-рд╡рд░реНрд▓реНрдб-рд╕реНрдкреЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред

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

рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдпрджрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдпрд╣ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рдПрдХ рдмрдирд╛рд╡рдЯ рдЦреАрдВрдЪрддреА рд╣реИ рдЬреЛ z рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдирд╛рдордХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ ред рд╣рдо рдЗрд╕ рдмрдлрд░ рдХреЛ рд╣рдорд╛рд░реЗ рд╕рдордиреНрд╡рд┐рдд рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рд▓рд╛рдкрддрд╛ рдЬрд╝ рдорд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

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

Hlsl рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ _CameraDepthTexture рдирдореВрдирд╛ рдмрдирд╛рдПрдБ

 TEXTURE2D_SAMPLER2D(_CameraDepthTexture, sampler_CameraDepthTexture); 

рдЕрдм GetWorldFromViewPosition рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЕрдм рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧрд╣рд░рд╛рдИ рдмрдлрд╝рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред (рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕реЗ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред)

 float3 GetWorldFromViewPosition (VertexOutput i) { float z = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, sampler_CameraDepthTexture, i.screenPos).r; return z.xxx; } 

рдЯреБрдХрдбрд╝рд╛ shader рдореЗрдВ, рдЧрд╣рд░рд╛рдИ рдмрдирд╛рд╡рдЯ рдирдореВрдиреЗ рдХреЗ рдореВрд▓реНрдп рдЖрдХрд░реНрд╖рд┐рддред

 float3 depth = GetWorldFromViewPosition(i); return float4(depth, 1.0); 

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


рдпрджрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рдХрджрдо рдЙрдард╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреИрдорд░реЗ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рдХреНрд╖рдо рд╣реИред
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреИрдорд░реЗ рдореЗрдВ MSAA рд╕рдХреНрд╖рдо рд╣реИред
  • рдХреИрдорд░реЗ рдХреЗ рдкрд╛рд╕ рдФрд░ рджреВрд░ рд╡рд┐рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЬрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмрдлрд░ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдПрдХ рдЧрд╣рд░рд╛рдИ рдкрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧрд╣рд░рд╛рдИ рдмрдлрд╝рд░ рдкрд░ рдЖ рдЬрд╛рддрд╛ рд╣реИред LWRP рдореЗрдВ рд╕рднреА рдорд╛рдирдХ рд╢реЗрдбреНрд╕ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред

рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдЕрдм рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрдВрд╕реЗ рд╣реБрдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЪрд▓реЛ рдкреНрд░рдЬрд╛рддрд┐рдпреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрди рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрд╕рдЖрд░рдкреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реЗ рдпреВрдирд┐рдЯреА рдЗрдВрдЬрди рдХреЗ C # рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ ColorSpreadRenderer рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╢реЗрдбрд░ рдореЗрдВ рдбрд╛рд▓рд╛:

 sheet.properties.SetMatrix("unity_ViewToWorldMatrix", context.camera.cameraToWorldMatrix); sheet.properties.SetMatrix("unity_InverseProjectionMatrix", projectionMatrix.inverse); 

рдЕрдм рдЕрдкрдиреЗ GetWorldFromViewPosition рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

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

рдЕрдВрдд рдореЗрдВ, рд╣рдо ViewToWorldMatrix рджреНрд╡рд╛рд░рд╛ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдерд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

 float3 GetWorldFromViewPosition (VertexOutput i) { //    float z = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, sampler_CameraDepthTexture, i.screenPos).r; //      float4 result = mul(unity_InverseProjectionMatrix, float4(2*i.screenPos-1.0, z, 1.0)); float3 viewPos = result.xyz / result.w; //      float3 worldPos = mul(unity_ViewToWorldMatrix, float4(viewPos, 1.0)); return worldPos; } 

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


(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдореЗрдВ рдорд╛рди 1.0 рд╕реЗ рдмрд╣реБрдд рдмрдбрд╝реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ рдХрд┐ рдпреЗ рд░рдВрдЧ рдХрд┐рд╕реА рднреА рдЕрд░реНрде рдореЗрдВ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо "рд╕рд╣реА" рдФрд░ "рдЧрдгрдирд╛" рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВред) рдЕрдЧрд▓рд╛, рдЪрд▓реЛ рдкрд░реАрдХреНрд╖рдг рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╛рдзрд╛рд░рдг рд╕рд╛рдордЧреНрд░реА рд╣реИ (рдФрд░ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреА рдкрд░реАрдХреНрд╖рдг рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИ), рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рднрд╛рд╡ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВред рдореЗрд░реЗ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:


рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЯреЗрд╕реНрдЯ рд╢реИрдбрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреА рдЧрдгрдирд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ!

рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рд╡реГрддреНрдд рдЦреАрдВрдЪрдирд╛


рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рд╣реИ , рддреЛ рд╣рдо рджреГрд╢реНрдп рдореЗрдВ рд░рдВрдЧ рдХрд╛ рдПрдХ рд╡реГрддреНрдд рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ! рд╣рдореЗрдВ рддреНрд░рд┐рдЬреНрдпрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рдкреНрд░рднрд╛рд╡ рд░рдВрдЧ рдЦреАрдВрдЪреЗрдЧрд╛ред рдмрд╛рд╣рд░, рдкреНрд░рднрд╛рд╡ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рдЪрд┐рддреНрд░ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рднрд╛рд╡ рддреНрд░рд┐рдЬреНрдпрд╛ ( _MaxSize ) рдФрд░ рд╕рд░реНрдХрд▓ рдХреЗ рдХреЗрдВрджреНрд░ ( _enter ) рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрди рдорд╛рдиреЛрдВ рдХреЛ C # ColorSpread рд╡рд░реНрдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рд╡реЗ рдирд┐рд░реАрдХреНрд╖рдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВред рдЪрд▓рд┐рдП рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рд╕рд░реНрдХрд▓ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ

 float4 Frag(VertexOutput i) : SV_Target { float3 worldPos = GetWorldFromViewPosition(i); // ,      .  //   ,   ,  ,   float dist = distance(_Center, worldPos); float blend = dist <= _MaxSize? 0 : 1; //   float4 fullColor = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.screenPos); //   float luminance = dot(fullColor.rgb, float3(0.2126729, 0.7151522, 0.0721750)); float3 greyscale = luminance.xxx; // ,       float3 color = (1-blend)*fullColor + blend*greyscale; return float4(color, 1.0); } 

рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рд░рдВрдЧ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рдЕрдВрджрд░ рд╣реИ ред рдпрд╣ рдЖрдзрд╛рд░ рдкреНрд░рднрд╛рд╡ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ!




рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡ рдЬреЛрдбрд╝рдирд╛


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

рд╕рд░реНрдХрд▓ рдЗрдЬрд╝рд╛рдлрд╝рд╛ рдПрдиреАрдореЗрд╢рди


рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдкреВрд░реЗ рд╡рд┐рд╢реНрд╡ рдореЗрдВ рдлреИрд▓реЗ, рдЬреИрд╕реЗ рдХрд┐ рдмрдврд╝ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдордп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

_StartTime рдЙрд╕ рд╕рдордп рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╕рд░реНрдХрд▓ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬреЛ рдЖрдкрдХреЛ рд╕рд░реНрдХрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдкрд░ рдХрд╣реАрдВ рднреА рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ; рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд╛рд░рдВрдн рд╕рдордп рдЙрд╕ рд╕рдордп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдЬрдм рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

_GrowthSpeed тАЛтАЛрд╕рд░реНрдХрд▓ рдмрдврд╝рд╛рдиреЗ рдХреА рдЧрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

 //           float timeElapsed = _Time.y - _StartTime; float effectRadius = min(timeElapsed * _GrowthSpeed, _MaxSize); //  ,      effectRadius = clamp(effectRadius, 0, _MaxSize); 

рд╣рдореЗрдВ рдкреНрд░рднрд╛рд╡ рдХреА рдмрдврд╝рддреА рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рджреВрд░реА рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреА рдЬрд╛рдВрдЪ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рди рдХрд┐ _MaxSize рдХреЗ рд╕рд╛рдеред

 // ,         //   ,   ,  ,   float dist = distance(_Center, worldPos); float blend = dist <= effectRadius? 0 : 1; //     ... 

рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:


рд╢реЛрд░ рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛


рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкреНрд░рднрд╛рд╡ рд░рдВрдЧ рдХреЗ рдзрдмреНрдмреЗ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╣реЛ, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдмрдврд╝рддреЗ рд╣реБрдП рдЪрдХреНрд░ рдХреЗ рд░реВрдк рдореЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдкреНрд░рднрд╛рд╡ рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдкрд░ рд╢реЛрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡рд┐рддрд░рдг рдЕрд╕рдорд╛рди рд╣реЛред

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред I.screenPos рдХреЗ рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рд╣рдо рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдореВрдирд╛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЖрдХрд╛рд░ рдХреИрдорд░рд╛ рдХреЗ рд╕рд╛рде рдЪрд▓реЗрдЧрд╛; рддреЛ рдЪрд▓реЛ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореИрдВрдиреЗ рд╢реЛрд░ рдмрдирд╛рд╡рдЯ рдХреЗ рдирдореВрдиреЗ рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _NoiseTexScale рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИред

 //          float2 worldUV = worldPos.xz; worldUV *= _NoiseTexScale; 

рдЕрдм рдЪрд▓реЛ рд╢реЛрд░ рдмрдирд╛рд╡рдЯ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдВ рдФрд░ рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡ рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдореИрдВрдиреЗ рд╢реЛрд░ рдЖрдХрд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП _NoiseSize рд╕реНрдХреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

 //     float noise = SAMPLE_TEXTURE2D(_NoiseTex, sampler_NoiseTex, worldUV).r; effectRadius -= noise * _NoiseSize; 

рдпрд╣рд╛рдБ рдХреБрдЫ рдЯреНрд╡реАрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдХреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрддреЗ рд╣реИрдВ:




рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рдЖрдк рдореЗрд░реЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЯреНрд╡рд┐рдЪ рдкрд░ рдореИрдВ рдХреЛрдбрд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реВрдВ! (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдЦреЗрд▓реЛрдВ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдк рдореБрдЭреЗ рдореЗрд░реЗ рдкрдЬрд╛рдореЗ рдореЗрдВ рдмреИрдарддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рдВрдЧрдбрдо рд╕реАрдЯ 3 рдЦреЗрд▓рддреЗ рд╣реИрдВ рддреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рди рд╣реЛрдВред)

рдзрдиреНрдпрд╡рд╛рдж:

Source: https://habr.com/ru/post/hi436456/


All Articles