рдпреВрдирд┐рдЯреА 3 рдбреА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХреАрдХреГрдд рдЗрд▓рд╛рдХреЗ рдкрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдУрд╡рд░рд▓реЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ Googling рдиреЗ
рдЗрд╕ shader рдФрд░ рдЗрд╕рдХреЗ рдХреБрдЫ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд▓рд╛рдПред рддрд╕реНрд╡реАрд░ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╢реЗрдбрд░ рдХреЛ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓рдЯрдХрд╛рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╢реЗрдбрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ (рдЬреЛ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ), рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, 4 рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ shader рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдпрд╣ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдорд╛рдирдХ shader рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реИрдВрдбрд╕реНрдХреЗрдк рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рд╕реНрдЯреИрдВрдбрд░реНрдб рдпреВрдирд┐рдЯ рд╢реЗрдбреНрд╕ рдореЗрдВ
рдпреВрдирд┐рдЯ рдореЗрдВ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╣рд┐рдбрди / рдЯреЗрд░реЗрдирдПрдиреНрдЬрд╛рдЗрди / рд╕реНрдкреНрд▓реИрдЯрдореИрдк / рд▓рд╛рдЗрдЯрдореИрдк-рдлрд╝рд░реНрд╕реНрдЯрдкрд╛рд╕ рдФрд░
рд╣рд┐рдбрди / рдЯреЗрд░реЗрдирдПрдиреНрдЬрд╛рдЗрди / рд╕реНрдкреНрд▓реИрдЯрдореИрдк / рд▓рд╛рдЗрдЯрдореИрдк-рдПрдбрдкрд╛рд╕ , рдЙрдиреНрд╣реЗрдВ
рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб
рдХрд░реЗрдВрдкрд╣рд▓рд╛ рд╢реЗрдбрд░ рдкрд╣рд▓реЗ 4 рдЗрд▓рд╛рдХрд╝рд╛ рдмрдирд╛рд╡рдЯ рдмрдирд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА shader рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╢реЗрд╖ рдмрдирд╛рд╡рдЯ 4 рдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдЦреАрдВрдЪрддреА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдмрдирд╛рд╡рдЯ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАред
рддреЛ рдЗрдВрдЬрди рд╕реЗ рд╢реИрдбрд░ рдХреЛ рдХреНрдпрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
... struct Input { float2 uv_Control : TEXCOORD0; float2 uv_Splat0 : TEXCOORD1; float2 uv_Splat1 : TEXCOORD2; float2 uv_Splat2 : TEXCOORD3; float2 uv_Splat3 : TEXCOORD4; }; sampler2D _Control; sampler2D _Splat0,_Splat1,_Splat2,_Splat3; ...
_SplatX - рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ
_Control - рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдбред рдпрд╣ рдПрдХ рдмрдирд╛рд╡рдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЪрдордХ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрдВрдЬрди рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рд░ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реИрдВрдбрд╕реНрдХреЗрдк рд╕рд╛рдордЧреНрд░реА рдХреЗ рдирдХреНрд╢реЗ (рдПрд▓реНрдлреИрдкреИрдк) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рд╡рдЯ рдореЗрдВ 4 рдЪреИрдирд▓ рд╣реИрдВ, shaders рдПрдХ рдмрд╛рд░ рдореЗрдВ 4 рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рд╢реЗрдбрд░ рдореЗрдВ рдЖрдЧреЗ:
рдЗрд╕рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ (o.Albedo) рдХрд╛ рд░рдВрдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ RGBA рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдб рд╕реЗ рдмрд┐рдВрджреБ рдХреА рдЪрдордХ рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдпреЛрдЧ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреА рдмрдирд╛рд╡рдЯ рд╕реЗ рдЗрд╕рдХреЗ рд░рдВрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
... void surf (Input IN, inout SurfaceOutput o) { half4 splat_control = tex2D (_Control, IN.uv_Control); half3 col; col = splat_control.r * tex2D (_Splat0, IN.uv_Splat0).rgb; col += splat_control.g * tex2D (_Splat1, IN.uv_Splat1).rgb; col += splat_control.b * tex2D (_Splat2, IN.uv_Splat2).rgb; col += splat_control.a * tex2D (_Splat3, IN.uv_Splat3).rgb; o.Albedo = col; o.Alpha = 0.0; } ...
рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

рдирдИ рд╕рд░реНрдл рдкреНрд░рдХреНрд░рд┐рдпрд╛:
void surf (Input IN, inout SurfaceOutput o) { fixed4 splat_control = tex2D (_Control, IN.uv_Control); fixed3 col; fixed spec; // RGBA fixed4 d1 = tex2D (_Splat0, IN.uv_Splat0); // RGBA fixed4 d2 = tex2D (_Splat2, IN.uv_Splat2); // fixed3 n1 = UnpackNormal( tex2D (_Splat1, IN.uv_Splat1) ); // fixed3 n2 = UnpackNormal( tex2D (_Splat3, IN.uv_Splat3) ); // col = splat_control.r * d1.rgb; // ( ) o.Normal = normalize(lerp(fixed3(0.5,0.5,1), n1, clamp(splat_control.r + 0.3,0,1))); // , . "0.1" - , . spec = (1 - d1.a) * splat_control.r * 0.1; // col += splat_control.b * d2.rgb; o.Normal += normalize(lerp(fixed3(0.5,0.5,1), n2, clamp(splat_control.b + 0.3,0,1))); spec += (1 - d2.a) * splat_control.b * 0.1; // , basemap' o.Albedo = col * 0.5; // o.Specular = spec; o.Gloss = spec; o.Alpha = 0.0; }
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд╣рд╛рдБ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рд╡рд╣ рд╣реИ рдпрд╣ рдкрдВрдХреНрддрд┐:
o.Normal = lerp(fixed3(0.5,0.5,1), n1, clamp(splat_control.r + 0.3,0,1));
рд╕рд╛рдорд╛рдиреНрдп рд╕рддрд╣ рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╡рдд рдПрдХ рдЗрдХрд╛рдИ рд╡реЗрдХреНрдЯрд░ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдХреБрдЫ рдХрд╛рд░рдХ рд╕реЗ рдЧреБрдгрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддрдерд╛рдХрдерд┐рдд рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рд╛рдорд╛рдиреНрдп рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред "рд╢реВрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп", рдЬрд┐рд╕рдореЗрдВ рдмрдирд╛рд╡рдЯ рдкрд░ рдХреЛрдИ рд░рд╛рд╣рдд рдирд╣реАрдВ рд╣реЛрдЧреАред
рддрд╛рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреА рдЧрдгрдирд╛ рдлрд░ рдкрд░ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП (рд╡реЗрдХреНрдЯрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕рддрд╣ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░, рд╕реНрдХреИрди рдкрд░ рд╕рдордиреНрд╡рдп рдпреВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд)ред рдЖрдорддреМрд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореЙрдбрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдпреВрдирд┐рдЯ "рдлреНрд▓рд╛рдИ рдкрд░" рдореЗрдВ рд▓реИрдВрдбрд╕реНрдХреЗрдк рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдХреЛрдИ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ shader рдХреЗ рдЕрдВрджрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рд╣реЛрдЧреА:
void vert (inout appdata_full v) { fixed3 T1 = float3(1, 0, 0); if (dot(T1,v.normal) > 0.99) { T1 = float3(0,1,0); //workaround } fixed3 Bi = cross(T1, v.normal); fixed3 newTangent = normalize(cross(v.normal, Bi)); v.tangent.xyz = newTangent.xyz; if (dot(cross(v.normal,newTangent),Bi) < 0) v.tangent.w = -1.0f; else v.tangent.w = 1.0f; }
рдмрд╛рдж рдХреЗ рдкрд╛рд╕ рдХреЗ рд▓рд┐рдП shader рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреЛрдб рдореЗрдВ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред рдЙрдиреНрд╣реЗрдВ рджреЛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╖рдо рд╕реВрдЪрдХрд╛рдВрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВред
materials[x, z, material_number*2] = 1;
рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рдкрдХреНрд╖:
- рдЕрдзрд┐рдХ рдЫрд╛рдпрд╛рджрд╛рд░ рдкрд╛рд╕ рдХреЗ рдХрд╛рд░рдг рдбреНрд░рд╛ рдХреЙрд▓ рдереЛрдбрд╝рд╛ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ
- рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рдЧрд▓рдд рд╕рд╛рдордЧреНрд░реА (рд╕рд╛рдорд╛рдиреНрдп) рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрднрд╛рд▓ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП
- 8 рд╕реЗ рдЕрдзрд┐рдХ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдлреНрд▓реИрд╢ рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ
- Shader 3.0 рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреБрд░рд╛рдиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ (64+ рдСрдкрд░реЗрд╢рди рдХреЗ рдХрд╛рд░рдг)
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ:
- Shader рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдирдХреНрд╢реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдЦреАрдВрдЪрддрд╛ рд╣реИ
- рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рдмрдирд╛рд╡рдЯ рдПрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдбрд┐рдлреНрдпреВрдЬ / рдиреЙрд░реНрдорд▓ / рдбрд┐рдлреНрдпреВрдЬ / рдиреЙрд░реНрдорд▓ рдЖрджрд┐ред
- рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдореИрдк рдбрд┐рдлреНрдпреВрдЬрд╝рд░ рдХреЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ
рдПрдХ рдорд╛рдирдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо, рдФрд░ рдЗрд╕рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдХрд╛рд░реНрдб (рдмрди рдЧрдП / рдереЗ):
рдбрд╛рдЙрдирд▓реЛрдб shader