рдпрд╛рддреНрд░рд╛ рдЦреЗрд▓ рдХреЗ рд░реЗрдд shader рдХреА рдЦреЛрдЬ

рдпрд╣рд╛рдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╢реБрд░реБрдЖрдд

рдЫрд╡рд┐

рднрд╛рдЧ 4: рджрд░реНрдкрдг рдЫрд╡рд┐


рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рджрд░реНрдкрдг рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЯрд┐рдмреНрдмрд╛ рд░реЗрдд рдХреЗ рдПрдХ рдорд╣рд╛рд╕рд╛рдЧрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╛рддреНрд░рд╛ рдХреЗ

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

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




рджрд░реНрдкрдг рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ

рд░рд┐рдо рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдпрд╛рддреНрд░рд╛ рд╕реНрддрд░ рдкрд░ рд░рдВрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЬрдм рдпрд╣ рдПрдХ рдордЬрдмреВрдд рдФрд░ рд╕реНрд╡рдЪреНрдЫ рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░ рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд░реЗрдд рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЯрд┐рдмреНрдмрд╛ рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рдВрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдПрдХ рд▓рдВрдмреА рджреВрд░реА рдкрд░ рдХрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

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

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

float4 LightingJourney (SurfaceOutput s, fixed3 viewDir, UnityGI gi)
{
    // Lighting properties
    float3 L = gi.light.dir;
    float3 N = s.Normal;

    // Lighting calculation
    float3 diffuseColor	= DiffuseColor (N, L);
    float3 rimColor     = RimLighting  (N, V);

    // Combining
    float3 color = diffuseColor + rimColor;

    // Final color
    return float4(color * s.Albedo, 1);
}

рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдо рдкреНрд░рдХрд╛рд╢ рдХрд╛ рджрд░реНрдкрдг рдШрдЯрдХ, рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ rimColor, рдореВрд▓ рдореВрд▓ рд░рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрдЪреНрдЪ рдЧрддрд┐рд╢реАрд▓ рд░реЗрдВрдЬ рдФрд░ рдмреНрд▓реВрдо рдкреНрд░рднрд╛рд╡
рдлреИрд▓рд╛рдирд╛ рдШрдЯрдХ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рдЪрдордХ рджреЛрдиреЛрдВ рдЖрд░рдЬреАрдмреА рд░рдВрдЧ рд╕реЗ рд░реЗрдВрдЬ рдореЗрдВ рд╣реИрдВ 0рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ 1. . , 1.

, , 01. , , 1. High Dynamic Range, 1┬л┬╗ . bloom, . .

рдлреНрд░реЗрд╕реЗрд▓ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рдВрд╕


рдХрд┐рдирд╛рд░реЛрдВ рдХреА рдЪрдордХ рдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп shader рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╕рд┐рджреНрдз Fresnel рдкреНрд░рддрд┐рдмрд┐рдВрдм рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред

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


рдбрд┐рдлреНрдпреВрдЬрд╝ рдХрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рдХрд┐рдпрд╛, рдЙрд╕рдХреЗ рд╕рдорд╛рди, рдЖрдк рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Nрддрдерд╛ VрдЙрдирдХреЗ рд╕рдорд╛рдирддрд╛ рдХрд╛ рдПрдХ рдЙрдкрд╛рдп рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВNтЛЕV рдмрд░рд╛рдмрд░реА 0, рдХреНрдпреЛрдВрдХрд┐ рджреЛ рдпреВрдирд┐рдЯ рд╡реИрдХреНрдЯрд░ рд▓рдВрдмрд╡рдд рд╣реИрдВ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ1тИТNтЛЕVрдЙрдирдХреЗ рдЧреИрд░-рд╕рдорд╛рдирддрд╛ рдХреЗ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрдкрдпреЛрдЧ1тИТNтЛЕVрд╣рдореЗрдВ рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдмрд╣реБрдд рдордЬрдмреВрдд рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЛ рддреЗрдЬ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ , рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдбрд┐рдЧреНрд░реА рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕реЗ рдкрд░рд┐рдорд╛рдг рдХреА рдбрд┐рдЧреНрд░реА0 рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ 1рдПрдХ рдЕрдВрддрд░рд╛рд▓ рддрдХ рд╕реАрдорд┐рдд рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдзреЗрд░реЗ рдФрд░ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рддреЗрдЬ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдлреНрд░реЗрдЬрд╝реЗрд▓ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдореЙрдбрд▓ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд╢ рдХреА рдЪрдордХI рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

I=(1тИТNтЛЕV)powerтИЧstrength(1)


рдХрд╣рд╛рдБ рдкреЗ powerрддрдерд╛ strength- рдпреЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╡рд┐рдкрд░реАрдд рдФрд░ рддрд╛рдХрдд рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░power рддрдерд╛ strengthрдХрднреА-рдХрднреА рдЗрд╕реЗ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдФрд░ рдЧреНрд▓реЙрд╕ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдирд╛рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдореАрдХрд░рдг (1) рдХреЛрдб рдореЗрдВ рдмрджрд▓рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

float _TerrainRimPower;
float _TerrainRimStrength;
float3 _TerrainRimColor;

float3 RimLighting(float3 N, float3 V)
{
    float rim = 1.0 - saturate(dot(N, V));
    rim = saturate(pow(rim, _TerrainRimPower) * _TerrainRimStrength);
    rim = max(rim, 0); // Never negative
    return rim * _TerrainRimColor;
}

рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рдПрдиреАрдореЗрд╢рди рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдорд╣рд╛рд╕рд╛рдЧрд░ рдХрд╛ рдирдореВрдирд╛


рдпрд╛рддреНрд░рд╛ рдЧреЗрдордкреНрд▓реЗ рдХреЗ рд╕рдмрд╕реЗ рдореВрд▓ рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдЯрд┐рдмреНрдмрд╛ рдХреЛ "рд╕рд░реНрдл" рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧреНрд░рдгреА рдЗрдВрдЬреАрдирд┐рдпрд░ рдЬреЙрди рдПрдбрд╡рд░реНрдбреНрд╕ рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдереИрдЧрдореИрдХреЛрдореНрдкрдиреА рдиреЗ рд░реЗрдд рдХреЛ рдареЛрд╕ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рддрд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред

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

рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд░реЗрдд рдореЗрдВ рдПрдХ рддрд░рд▓ рдШрдЯрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд░реНрдиреА рдиреЗ рдПрдХ рджреВрд╕рд░рд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдкреНрд░рднрд╛рд╡ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рддрд░рд▓ рдирд┐рдХрд╛рдпреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЙрди рдПрдбрд╡рд░реНрдбреНрд╕ рдЗрд╕реЗ рдорд╣рд╛рд╕рд╛рдЧрд░реАрдп рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдХрд╣рддреЗ рд╣реИрдВ: рд╡рд┐рдЪрд╛рд░ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╕рдореБрджреНрд░ рдпрд╛ рдЭреАрд▓ рдХреА рд╕рддрд╣ рдкрд░ рд╕реВрд░реНрдпрд╛рд╕реНрдд рдХреЗ рд╕рдордп рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред


рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рд╣рдо LightingJourneyрдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВрдЧреЗ ред

float4 LightingJourney (SurfaceOutput s, fixed3 viewDir, UnityGI gi)
{
    // Lighting properties
    float3 L = gi.light.dir;
    float3 N = s.Normal;
    float3 V = viewDir;

    // Lighting calculation
    float3 diffuseColor	= DiffuseColor  (N, L);
    float3 rimColor     = RimLighting   (N, V);
    float3 oceanColor   = OceanSpecular (N, L, V);

    // Combining
    float3 specularColor = saturate(max(rimColor, oceanColor));
    float3 color = diffuseColor + specularColor;

    // Final color
    return float4(color * s.Albedo, 1);
}

рд╣рдо рдЕрдзрд┐рдХрддрдо рджреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдШрдЯрдХ рдХреНрдпреЛрдВ рд▓реЗрддреЗ рд╣реИрдВ?
, rim lighting ocean specular. , , -. , .

, .

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

рдмреНрд▓рд┐рдиреВ-рдлреЛрдВрдЧ рдЫрд╛рдпрд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЪрдордХрджрд╛рд░рддрд╛I рд╕рддрд╣реЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдореАрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рд╣реИрдВ:

I=(NтЛЕH)powerтИЧstrength(2)


рдХрд╣рд╛рдБ рдкреЗ

H=V+LтАЦV+LтАЦ(3)


рд╕рдореАрдХрд░рдг рдХрд╛ рд╣рд░ (3) рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ V+LрдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдкрд░ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИH рд▓рдВрдмрд╛рдИ рд╣реИ 1ред рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд░рд╛рдмрд░ shader рдлрд╝рдВрдХреНрд╢рди рд╣реИ normalizeред рдПрдХ рдЬреНрдпрд╛рдорд┐рддреАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ,H рдХреЗ рдмреАрдЪ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ Vрддрдерд╛ L, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рдЖрдзрд╛ рд╡реЗрдХреНрдЯрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред



V рдФрд░ L рдХреЗ рдмреАрдЪ H рдХреНрдпреЛрдВ рд╣реИ?
, , HтАФ VL.

, . VLLVVL.

, , V+LL+V, . , :


, , . , ( V+L) . , ( ).


, V+LтАФ VL, 1. , 1, ( ).

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

float _OceanSpecularPower;
float _OceanSpecularStrength;
float3 _OceanSpecularColor;

float3 OceanSpecular (float3 N, float3 L, float3 V)
{
    // Blinn-Phong
    float3 H = normalize(V + L); // Half direction
    float NdotH = max(0, dot(N, H));
    float specular = pow(NdotH, _OceanSpecularPower) * _OceanSpecularStrength;
    return specular * _OceanSpecularColor;
}

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


рднрд╛рдЧ 5: рд╢рд╛рдирджрд╛рд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм


рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЙрди рд╢рд╛рдирджрд╛рд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд░реЗрдд рдХреЗ рдЯреАрд▓реЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдЬреВрд▓рд┐рдпрди рдУрдмрд░рдмреЗрдХ рдФрд░ рдкреЙрд▓ рдирдбреЗрд▓реЗрдХ рдиреЗ рдпреВрдирд┐рдЯреА рдореЗрдВ рдЬрд░реНрдиреА рдЧреЗрдо рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдПрдХ рджреГрд╢реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЯреНрд╡реАрдЯ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдзрд┐рдХ рдЕрд╕реНрдерд╛рдпреА рд▓реМрдХрд┐рдХ рдЕрдЦрдВрдбрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдирджрд╛рд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ред IndieBurg Mip Map Folding рдкрд░ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ ред


рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдкрд┐рдЫрд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ, рд╣рдордиреЗ рдЬрд░реНрдиреА рд╕реИрдВрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рджреЛ рдорд┐рд░рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ : рд░рд┐рдо рд▓рд╛рдЗрдЯрд┐рдВрдЧ рдФрд░ рдУрд╢рди рд╕реНрдкреЗрдХреБрд▓рд░ ред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдкрд░рд╛рд╡рд░реНрддрди рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП: рдЪрдордХ ред


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

рдЕрдиреНрдп рдЦреЗрд▓реЛрдВ рдореЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрд╕реНрдЯреНрд░реЛрдирд░ рдФрд░ рд╕реНрд▓рд┐рдо рд░реИрдВрдЪрд░ , рд░реЗрдд рдФрд░ рдЧреБрдлрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╢рд╛рдирджрд╛рд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдЪрдордХ: рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВред

рдмрдбрд╝реА рдЫрд╡рд┐ рдореЗрдВ рдЗрди рдЪрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:



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

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

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

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

рдорд╛рдЗрдХреНрд░реЛрдлреЙрд╕ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд


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

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

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


рдпрд╣рд╛рдВ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Rрддрдерд╛ VрдЙрдирдХреЗ рд╕рдорд╛рдирддрд╛ рдХреЗ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╣рдо reflectCg рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЧреНрд▓реЙрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЬрд┐рд╕рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИRред

sampler2D_float _GlitterTex;
float _GlitterThreshold;
float3 _GlitterColor;

float3 GlitterSpecular (float2 uv, float3 N, float3 L, float3 V)
{
    // Random glitter direction
    float3 G = normalize(tex2D(_GlitterTex, uv).rgb * 2 - 1); // [0,1]->[-1,+1]

    // Light that reflects on the glitter and hits the eye
    float3 R = reflect(L, G);
    float RdotV = max(0, dot(R, V));
	
    // Only the strong ones (= small RdotV)
    if (RdotV > _GlitterThreshold)
        return 0;
	
    return (1 - RdotV) * _GlitterColor;
}

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

рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рджрд░реНрд╢рд╛рдП рдЧрдП рд╣реИ:


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдЧреНрд▓реЙрд╕ рдШрдЯрдХ рдХреЛ рдЕрдВрддрд┐рдо рд░рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

#pragma surface surf Journey fullforwardshadows

float4 LightingJourney (SurfaceOutput s, fixed3 viewDir, UnityGI gi)
{
    float3 diffuseColor = DiffuseColor    ();
    float3 rimColor     = RimLighting     ();
    float3 oceanColor   = OceanSpecular   ();
    float3 glitterColor = GlitterSpecular ();

    float3 specularColor = saturate(max(rimColor, oceanColor));
    float3 color = diffuseColor + specularColor + glitterColor;
	
    return float4(color * s.Albedo, 1);
}

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди max(dot(L, fixed3(0,1,0),0))рд╣реИ1рдЬрдм рд╕реВрд░реНрдп рдКрдкрд░ рд╕реЗ рдЧрд┐рд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрд╖рд┐рддрд┐рдЬ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдкрд░ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЖрдкрдХреА рд╡рд░реАрдпрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред

рдмреНрд▓рд┐рди-рдлреЛрдВрдЧ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
ocean specular, , -.

, 3D- , , . , reflect . - RтЛЕVNтЛЕH, .

рднрд╛рдЧ 6: рддрд░рдВрдЧреЗрдВ


рд▓реЗрдЦ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЯрд┐рдмреНрдмрд╛ рдФрд░ рд╣рд╡рд╛ рдХреЗ рдкрд░рд╕реНрдкрд░ рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реЗрдд рддрд░рдВрдЧреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВрдЧреЗред




рдЯрд┐рдмреНрдмрд╛ рдХреА рд╕рддрд╣ рдкрд░ рд▓рд╣рд░реЗрдВ: рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВред

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

рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ


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


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

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рд╡рдЯ рд╕реЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреА рджрд┐рд╢рд╛рдУрдВ рдХреЛ рдкрдврд╝рдХрд░, рд╣рдо рджрд╛рдиреЗрджрд╛рд░рддрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рд╢рд╛рд░реАрд░рд┐рдХ рдЕрд╢реБрджреНрдзрд┐ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд╣ рдЕрднреА рднреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рджрд┐рдЦрддреА рд╣реИред

рд░реЗрдд рдореЗрдВ рд▓рд╣рд░реЗрдВ


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

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


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


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

рд▓рд╣рд░реЛрдВ рдХрд╛ рдПрд╣рд╕рд╛рд╕


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

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

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

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

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

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

рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ


рдЗрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдо рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓реЗ :

  • рдЬреНрдпрд╛рдорд┐рддрд┐ рд╕рд╛рдорд╛рдиреНрдп : 3 рдбреА рдореЙрдбрд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрд╣рд░реЗ рдХрд╛ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕, рдЬреЛ рд╕реАрдзреЗ рдХреЛрдиреЗ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ;
  • рд░реЗрдд рд╕рд╛рдорд╛рдиреНрдп : рд╢реЛрд░ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЧрдгрдирд╛ рдХреА;
  • рд╡реЗрд╡ рдиреЙрд░реНрдорд▓ : рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рдирдП рдкреНрд░рднрд╛рд╡ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИред

рдиреАрдЪреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг, рдпреВрдирд┐рдЯреА рд╕рд░рдлреЗрд╕ рд╢реЗрдбрд░ рдЙрджрд╛рд╣рд░рдг рдкреГрд╖реНрда рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ , рдПрдХ 3D рдореЙрдбрд▓ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ o.Normal, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдмрдирд╛рд╡рдЯ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ )ред

  Shader "Example/Diffuse Bump" {
    Properties {
      _MainTex ("Texture", 2D) = "white" {}
      _BumpMap ("Bumpmap", 2D) = "bump" {}
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }
      CGPROGRAM
      #pragma surface surf Lambert
      struct Input {
        float2 uv_MainTex;
        float2 uv_BumpMap;
      };
      sampler2D _MainTex;
      sampler2D _BumpMap;
      void surf (Input IN, inout SurfaceOutput o) {
        o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
        o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
      }
      ENDCG
    } 
    Fallback "Diffuse"
  }

рд╣рдордиреЗ рд░реЗрдд рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд╕рд╛рде рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдЙрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдЕрд╕рд╛рдорд╛рдиреНрдп рдХреНрдпрд╛ рд╣реИ?
. ( 1), , . X, Y Z R, G B .

тИТ1+1. 01. , ┬л┬╗ ┬л┬╗ . (normal packing) (normal unpacking). :

R=X2+12G=Y2+12B=Z2+12(1)


:

X=2RтИТ1Y=2GтИТ1Z=2BтИТ1(2)


Unity (2), UnpackNormal. .

Normal Map Technical Details polycount.

рдЯреАрд▓реЛрдВ рдХреА рд╕реАрдврд╝рд┐рдпрд╛рдБ


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╣рд▓реА рдХрдард┐рдирд╛рдИ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХрд┐ рддрд░рдВрдЧреЛрдВ рдХреЗ рддреЗрдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддрд░рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИред рдХрдо, рд╕рдкрд╛рдЯ рдЯрд┐рдмреНрдмрд╛ рдореЗрдВ рдЫреЛрдЯреА рд▓рд╣рд░реЗрдВ рд╣реЛрддреА рд╣реИрдВ; рдЦрдбрд╝реА рдЯрд┐рдмреНрдмрд╛ рдкрд░, рд▓рд╣рд░ рдкреИрдЯрд░реНрди рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЯрд┐рдмреНрдмрд╛ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

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


рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЦрдбрд╝реА рдбреБрдмрдХреА


рдПрдХ рдлреНрд▓реИрдЯ рдЯрд┐рдмреНрдмрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░

рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдФрд░ рдиреАрд▓рд╛ рдЪреИрдирд▓
, .

, . , (X Y) (Z) .

length(N)=1X2+Y2+Z2=1(3)


:

X2+Y2+Z2=1X2+Y2+Z2=12Z2=1тИТX2тИТY2Z=1тИТX2тИТY2(4)


UnpackNormal Unity. Shader API .

inline fixed3 UnpackNormal(fixed4 packednormal)
{
#if defined(SHADER_API_GLES)  defined(SHADER_API_MOBILE)
    return packednormal.xyz * 2 - 1;
#else
    fixed3 normal;
    normal.xy = packednormal.wy * 2 - 1;
    normal.z = sqrt(1 - normal.x*normal.x - normal.y * normal.y);
    return normal;
#endif
}

Unity DXT5nm, (packednormal.xy) - (packednormal.wy).

Normal Map Compression polycount.

рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдмрдХрд╛рдЗрди рдХреНрдпреЛрдВ рд▓рдЧрддреЗ рд╣реИрдВ?
, , .

, . , [0,0,1].

[0,0,1][0.5,0.5,1], RGB.

; , [0,0,1].

, ┬л┬╗. , B тИТ1+1, 0+1. .

рд╕реНрдЯреАрдкрд▓рдиреЗрд╕ рдХреА рдЧрдгрдирд╛ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рджреЛ рджрд┐рд╢рд╛рдУрдВ рдХреЗ "рд╕рдорд╛рдирд╛рдВрддрд░рд╡рд╛рдж" рдХреА рдбрд┐рдЧреНрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП shader рдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреА рджрд┐рд╢рд╛ рд▓реЗрддреЗ рд╣реИрдВ (рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдЖрдХрд╛рд╢ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рд╡реЗрдХреНрдЯрд░ (рдкреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдЗрди рджреЛрдиреЛрдВ рд╡реИрдХреНрдЯрд░реЛрдВ рдХрд╛ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдорд╛рдиреЛрдВ рдХреЛ рдХрд░реАрдм рд▓рд╛рддрд╛ рд╣реИ1рдЬрдм рд╡реИрдХреНрдЯрд░ рд▓рдЧрднрдЧ рд╕рдорд╛рдирд╛рдВрддрд░ (рдлреНрд▓реИрдЯ рдЯрд┐рдмреНрдмрд╛) рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХрд░реАрдм рд╣реЛрддреЗ рд╣реИрдВ 0рдЬрдм рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рдХреЛрдг 90 рдбрд┐рдЧреНрд░реА (рдЦрдбрд╝реА рдЯрд┐рдмреНрдмрд╛) рд╣реЛрддрд╛ рд╣реИред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рджреЛ рд╡реИрдХреНрдЯрд░ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред surfрдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рдиo.Normal рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рджрд┐рд╢рд╛ рдХреЛ рдШреЗрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рд╕реНрдерд╛рдиреАрдп рд╕рддрд╣ рдЬреНрдпрд╛рдорд┐рддрд┐ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред рд╣рдордиреЗ рд╕рд╛рдорд╛рдиреНрдп рд░реЗрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХреАред


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

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХрддрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреА WorldNormalVectorрд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рд╕реЗ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ ред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ Input, рддрд╛рдХрд┐ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реЛ float3 worldNormalрдФрд░ INTERNAL_DATA:

struct Input
{
    ...

    float3 worldNormal;
    INTERNAL_DATA
};

рдпреВрдирд┐рдЯреА рд░рд╛рдЗрдЯрд┐рдВрдЧ рд╕рд░реНрдлреЗрд╕ рд╢реЗрдбрд░реНрд╕ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдпрд╣ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ :

INTERNAL_DATA тАФ , o.Normal.

, WorldNormalVector (IN, o.Normal).

рдЕрдХреНрд╕рд░ рдпрд╣ рд╕рддрд╣ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдореБрдЦреНрдп рд╕реНрд░реЛрдд рдмрди рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореВрд▓реНрдп o.Normalрд╣реИ рдХрд┐ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ surf, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИ рдЖрдк рдХреИрд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЗрд╕реЗ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░o.Normal рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ред рдЖрдк рдЕрдкрдиреЗ рдореВрд▓реНрдп рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣реИ рд╕реНрдкрд░реНрд╢ рдЕрдВрддрд░рд┐рдХреНрд╖ ред рдпрджрд┐ рдЖрдк рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдврд╛рдВрдЪреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ редo.Normal

o.NormalWorldNormalVector (IN, o.Normal)Input

INTERNAL_DATA рдХреНрдпрд╛ рд╣реИ?
INTERNAL_DATA Unity.

, , WorldNormalVector. , , . ( ).

, 3D- 3├Ч3. , , (tangent to world matrix), Unity TtoW.

INTERNAL_DATA TtoW Input. , ┬лShow generated code┬╗ :


, INTERNAL_DATA тАФ , TtoW:

#define INTERNAL_DATA
    half3 internalSurfaceTtoW0;
    half3 internalSurfaceTtoW1;
    half3 internalSurfaceTtoW2;

half3x3, half3.

WorldNormalVector, , ( ) TtoW:

#define WorldNormalVector(data,normal)
    fixed3
    (
        dot(data.internalSurfaceTtoW0, normal),
        dot(data.internalSurfaceTtoW1, normal),
        dot(data.internalSurfaceTtoW2, normal)
    )

mul, TtoW , .

, :

[ToW1,1ToW1,2ToW1,3ToW2,1ToW2,2ToW2,3ToW3,1ToW3,2ToW3,3]тЛЕ[N1N2N3]=[[ToW1,1ToW1,2ToW1,3]тЛЕ[N1N2N3][ToW2,1ToW2,2ToW2,3]тЛЕ[N1N2N3][ToW3,1ToW3,2ToW3,3]тЛЕ[N1N2N3]]


LearnOpenGL.

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╕рд╛рдорд╛рдиреНрдп рдХреЛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдКрдкрд░ рдХреА рджрд┐рд╢рд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдврд▓рд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ ред

// Calculates normal in world space
float3 N_WORLD = WorldNormalVector(IN, o.Normal);
float3 UP_WORLD = float3(0, 1, 0);

// Calculates "steepness"
// => 0: steep (90 degrees surface)
//  => 1: shallow (flat surface)
float steepness = saturate(dot(N_WORLD, UP_WORLD));

рдЕрдм рдЬрдм рд╣рдордиреЗ рдЯрд┐рдмреНрдмрд╛ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрдгрдирд╛ рдХреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдирдореВрдирд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдлреНрд▓реИрдЯ рдФрд░ рд╢рд╛рдВрдд рд╣реЛрддреЗ рд╣реИрдВ (рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ _ShallowTexрдФрд░ _SteepTex)ред рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ steepness:

float2 uv = W.xz;

// [0,1]->[-1,+1]
float3 shallow = UnpackNormal(tex2D(_ShallowTex, TRANSFORM_TEX(uv, _ShallowTex)));
float3 steep   = UnpackNormal(tex2D(_SteepTex,   TRANSFORM_TEX(uv, _SteepTex  )));

// Steepness normal
float3 S = normalerp(steep, shallow, steepness);

рдЬреИрд╕рд╛ рдХрд┐ рд░реЗрдд рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ lerpред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ slerp, рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХрдо рдорд╣рдВрдЧрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ normalerpред

рд▓рд╣рд░ рдХрд╛ рдорд┐рд╢реНрд░рдг


рдпрджрд┐ рд╣рдо рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрдВ рдирд┐рд░рд╛рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯрд┐рдмреНрдмрд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕реНрдерд┐рд░рддрд╛ рд╣реИ, рдЬреЛ рджреЛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рд╡рдЯ рдХреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд┐рд╢реНрд░рдг рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдЯреАрдкрдиреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рд░реЗрдЦреАрдп рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдорд┐рд╢реНрд░рдг рдХреЗ рддреЗрдЬ рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛:

// Steepness to blending
steepness = pow(steepness, _SteepnessSharpnessPower);

рджреЛ рдмрдирд╛рд╡рдЯреЛрдВ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╕рдордп, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдЙрдирдХреЗ рддреАрдЦреЗрдкрди рдФрд░ рд╡рд┐рдкрд░реАрддрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ powред рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред

рдиреАрдЪреЗ рд╣рдо рджреЛ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рджреЗрдЦрддреЗ рд╣реИрдВред рд╢реАрд░реНрд╖ рдПрдХреНрд╕ рд╕реЗ рдзреБрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рд▓реЗ рд╕реЗ рд╕рдлреЗрдж, рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд░рдВрдЧреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ c = uv.xред рд╕рдмрд╕реЗ рдиреАрдЪреЗ, рдЙрд╕реА рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреЗ рд╕рд╛рде рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ c = pow(uv.x*1.5)*3.0:



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

рдЯреАрд▓реЛрдВ рдХреА рджрд┐рд╢рд╛


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

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

рдардВрдбрд╛рд╕рдорддрд▓
рдПрдХреНрд╕рд╢рд╛рдВрдд рдПрдХреНрд╕рдлреНрд▓реИрдЯ рдПрдХреНрд╕
рдЬреЗрдбрд╢рд╛рдВрдд zрд╕рдкрд╛рдЯ z

рдпрд╣рд╛рдВ рд╣рдореЗрдВ Z рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЯрд┐рдмреНрдмрд╛ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреАрдкрдиреЗрд╕ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп float3 UP_WORLD = float3(0, 1, 0);рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ float3 Z_WORLD = float3(0, 0, 1);ред

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

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ рдпрд╛рддреНрд░рд╛ рд╕реЗ рд░реЗрдд рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХрд┐рддрдиреА рдЖрдЧреЗ рдмрдврд╝ рдкрд╛рдП рд╣реИрдВ:



рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐

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

рд╕реНрд╡реАрдХреГрддрд┐рдпрд╛рдБ


рдЬрд░реНрдиреА рд╡реАрдбрд┐рдпреЛ рдЧреЗрдо рдерд╛рдЯрдЧреИрдореНрдкреЗрдХрдиреА рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕реЛрдиреА рдХрдВрдкреНрдпреВрдЯрд░ рдПрдВрдЯрд░рдЯреЗрдирдореЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рдкреАрд╕реА ( рдПрдкрд┐рдХ рд╕реНрдЯреЛрд░ ) рдФрд░ рдкреАрдПрд╕ 4 ( рдкреАрдПрд╕ рд╕реНрдЯреЛрд░ ) рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред

3 рдбреА рдЯрд┐рдмреНрдмрд╛ рдореЙрдбрд▓, рдкреГрд╖реНрдарднреВрдорд┐, рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╡рд┐рдХрд▓реНрдк рдЬреАрдбреА рдбреЗрдВрдЧ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдереЗ ред

рдлреЗрд╕рдкрдВрдЪ рдлреЛрд░рдо (рдЕрдм рдмрдВрдж) рдкрд░ рдЬрд░реНрдиреА рдХреИрд░реЗрдХреНрдЯрд░ рдХрд╛ рдПрдХ 3D рдореЙрдбрд▓ рдкрд╛рдпрд╛ рдЧрдпрд╛ред

рдПрдХрддрд╛ рдкреИрдХреЗрдЬ


рдпрджрд┐ рдЖрдк рдЗрд╕ рдЖрд╢рдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреЗрдЯреАрдПрдо рдкрд░ рдкреВрд░реНрдг рдпреВрдирд┐рдЯреА рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдЗрд╕рдореЗрдВ рдЖрдкрдХреА рдЬрд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢реЗрдбреНрд╕ рд╕реЗ рд▓реЗрдХрд░ 3 рдбреА рдореЙрдбрд▓реНрд╕ рддрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

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


All Articles