{"id":298597,"date":"2020-02-12T15:00:55","date_gmt":"2020-02-12T15:00:55","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=298597"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=298597","title":{"rendered":"\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u043f\u0435\u0441\u043a\u0430 \u0438\u0433\u0440\u044b Journey"},"content":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/487154\/\"><a href=\"https:\/\/habr.com\/ru\/post\/476448\/\">\u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0437\u0434\u0435\u0441\u044c<\/a><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/828\/9b4\/997\/8289b49971bbe0046845f71284790124.png\" alt=\"image\"><\/div>\n<p>  <\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 4: \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u044e\u043d\u044b \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u043e\u043a\u0435\u0430\u043d \u043f\u0435\u0441\u043a\u0430.<\/p>\n<p>  \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0440\u0438\u0433\u0443\u044e\u0449\u0438\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043f\u0435\u0441\u043a\u0430 <em>Journey<\/em> \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u044e\u043d\u044b \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0442 \u0432 \u043b\u0443\u0447\u0430\u0445 \u0441\u0432\u0435\u0442\u0430. \u0422\u0430\u043a\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u043c (specular)<\/strong>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043e\u0442 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 <em>speculum<\/em>, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0433\u043e <em>\u00ab\u0437\u0435\u0440\u043a\u0430\u043b\u043e\u00bb<\/em>. <strong>Specular reflection<\/strong> \u2014 \u044d\u0442\u043e \u00ab\u0437\u043e\u043d\u0442\u0438\u0447\u043d\u043e\u0435\u00bb \u043f\u043e\u043d\u044f\u0442\u0438\u0435, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0435\u0435 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0432\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0430 \u043d\u0435 \u0440\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u043e\u0433\u043b\u043e\u0449\u0430\u0435\u0442\u0441\u044f. \u0418\u043c\u0435\u043d\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0438 \u0432\u043e\u0434\u0430, \u0438 \u043e\u0442\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0438\u043c\u0438.<\/p>\n<p>  \u0412 <em>Journey<\/em> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439: <strong>\u0441\u0432\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0430\u0451\u0432 (rim lighting)<\/strong>, <strong>\u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u043a\u0435\u0430\u043d\u0430 (ocean specular)<\/strong> \u0438 <strong>\u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0431\u043b\u0435\u0441\u043a\u043e\u0432 (glitter reflections)<\/strong>, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043d\u0438\u0436\u0435.<a name=\"habracut\"><\/a> \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e83\/9e1\/047\/e839e1047f41693c6830b105a3c55c59.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/07a\/739\/06d\/07a73906d58ed9d4c251340b4e92d7f5.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/716\/d17\/d2f\/716d17d2f4d0d0796e51bee059ce39c2.png\"><\/div>\n<p>  <i>\u0414\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/i><\/p>\n<h2>Rim Lighting<\/h2>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 <em>Journey<\/em> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u043e\u0432. \u0418 \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0438\u043b\u044c\u043d\u0443\u044e \u0438 \u0447\u0438\u0441\u0442\u0443\u044e \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0443, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u043f\u0435\u0441\u043a\u0430. \u0414\u044e\u043d\u044b \u0440\u0435\u043d\u0434\u0435\u0440\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0442\u0442\u0435\u043d\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0433\u0440\u043e\u043a\u0443 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0433\u0434\u0435 \u043d\u0430 \u0434\u0430\u043b\u0451\u043a\u043e\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0430\u044f.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e, \u043a\u0440\u0430\u0439 \u043a\u0430\u0436\u0434\u043e\u0439 \u0434\u044e\u043d\u044b \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0441\u0438\u044f\u043d\u0438\u044f, \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0435\u0451 \u043a\u043e\u043d\u0442\u0443\u0440\u044b. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u044e\u043d\u0430\u043c \u043d\u0435 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0438\u043b\u043b\u044e\u0437\u0438\u044e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0433\u043e \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043c <strong>\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f<\/strong>, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u043d\u0435\u0451 <strong>diffuse colour<\/strong> (\u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438) \u0438 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">float4 LightingJourney (SurfaceOutput s, fixed3 viewDir, UnityGI gi) {     \/\/ Lighting properties     float3 L = gi.light.dir;     float3 N = s.Normal;      \/\/ Lighting calculation     float3 diffuseColor\t= DiffuseColor (N, L);     float3 rimColor     = RimLighting  (N, V);      \/\/ Combining     float3 color = diffuseColor + rimColor;      \/\/ Final color     return float4(color * s.Albedo, 1); }<\/code><\/pre>\n<p>  \u0412 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f \u043a\u0440\u0430\u0451\u0432 (rim lighting), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>rimColor<\/code>, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 diffuse colour.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u042d\u0444\u0444\u0435\u043a\u0442\u044b High Dynamic Range \u0438 Bloom<\/b><\/p>\n<div class=\"spoiler_text\">\u0418 \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0438 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0430\u0451\u0432 \u2014 \u044d\u0442\u043e \u0446\u0432\u0435\u0442\u0430 RGB \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f9c\/3c8\/e48\/f9c3c8e488ead4696749012f5ece6d13.svg\" alt=\"$0$\" data-tex=\"inline\"><\/math> \u0434\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>. \u041e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0445 \u0441\u0443\u043c\u043c\u043e\u0439. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0446\u0432\u0435\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u043e\u0442 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f9c\/3c8\/e48\/f9c3c8e488ead4696749012f5ece6d13.svg\" alt=\"$0$\" data-tex=\"inline\"><\/math> \u0434\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0446\u0432\u0435\u0442\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u043b\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>. \u0415\u0441\u043b\u0438 \u0443 \u043a\u0430\u043c\u0435\u0440\u044b \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 <a href=\"https:\/\/docs.unity3d.com\/Manual\/HDR.html\">High Dynamic Range<\/a>, \u0442\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0441 \u044f\u0440\u043a\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0448\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math> \u0431\u0443\u0434\u0443\u0442 \u00ab\u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u00bb \u0441\u0432\u0435\u0442 \u043d\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438. \u042d\u0442\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 bloom, \u0433\u0430\u043b\u043e \u0438 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0441\u0432\u0435\u0442\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <strong>\u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/strong>.  <\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u041e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0424\u0440\u0435\u043d\u0435\u043b\u044e<\/h3>\n<p>  \u0421\u0432\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0430\u0451\u0432 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e <strong>\u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e \u0424\u0440\u0435\u043d\u0435\u043b\u044e<\/strong>.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u043b\u0435\u0436\u0430\u0449\u0435\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0424\u0440\u0435\u043d\u0435\u043b\u044e, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e, \u0433\u0434\u0435 \u043e\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0434\u044e\u043d\u0430 \u0432\u0438\u0434\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043c\u0435\u0440\u0443 (\u0441\u0438\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c). \u041a\u0440\u0430\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0430 <strong>\u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438<\/strong> \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0434\u044e\u043d\u044b, \u0433\u0434\u0435 \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u041b\u0435\u0433\u043a\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u0440\u0430\u044f \u0434\u044e\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e: \u0438\u0445 \u043d\u043e\u0440\u043c\u0430\u043b\u044c (<math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1e8\/0c3\/b30\/1e80c3b3087c0a57b68ad11261a9ec2b.svg\" alt=\"$N$\" data-tex=\"inline\"><\/math>, \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430) \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u0430 <strong>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0432\u0437\u0433\u043b\u044f\u0434\u0430<\/strong> (<math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math>, \u0441\u0438\u043d\u0435\u0433\u043e \u0446\u0432\u0435\u0442\u0430).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c82\/547\/052\/c82547052c28a89dbc8c8fc9b3fa5976.png\"><\/div>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e Diffuse Colour, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>\u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/strong> <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1e8\/0c3\/b30\/1e80c3b3087c0a57b68ad11261a9ec2b.svg\" alt=\"$N$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0440\u0443 \u0438\u0445 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4af\/3f1\/d99\/4af3f1d993cf41a1fdf008aa2cf2bec5.svg\" alt=\"$N \\cdot V$\" data-tex=\"inline\"><\/math> \u0440\u0430\u0432\u043d\u044f\u0435\u0442\u0441\u044f <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f9c\/3c8\/e48\/f9c3c8e488ead4696749012f5ece6d13.svg\" alt=\"$0$\" data-tex=\"inline\"><\/math>, \u0432\u0435\u0434\u044c \u0434\u0432\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u044b; \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b60\/087\/d3c\/b60087d3c20cb4a4ebc67116f257af86.svg\" alt=\"$1- N \\cdot V$\" data-tex=\"inline\"><\/math> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0440\u044b \u0438\u0445 \u043d\u0435\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b60\/087\/d3c\/b60087d3c20cb4a4ebc67116f257af86.svg\" alt=\"$1- N \\cdot V$\" data-tex=\"inline\"><\/math> \u043d\u0435 \u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u044b\u043c. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <em>\u0440\u0435\u0437\u0447\u0435<\/em>, \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u0438. \u0421\u0442\u0435\u043f\u0435\u043d\u044c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u043e\u0442 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f9c\/3c8\/e48\/f9c3c8e488ead4696749012f5ece6d13.svg\" alt=\"$0$\" data-tex=\"inline\"><\/math> \u0434\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math> \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c, \u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c\u043d\u043e\u0442\u043e\u0439 \u0438 \u0441\u0432\u0435\u0442\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0447\u0435.<\/p>\n<p>  \u0412 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e \u0424\u0440\u0435\u043d\u0435\u043b\u044e \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0441\u0432\u0435\u0442\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/64b\/eb7\/37a\/64beb737a23fb5cb0a455f0e9213f2a4.svg\" alt=\"$I$\" data-tex=\"inline\"><\/math> \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p><math>$$display$$\\begin{equation*}  I = \\left(1 -N \\cdot V\\right)^\\mathit{power} * \\mathit{strength} \\end{equation*}(1)$$display$$<\/math><\/p>\n<p>  \u0433\u0434\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7a1\/cfb\/661\/7a1cfb661819cba2415a41aadb5175be.svg\" alt=\"$\\mathit{power}$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b54\/11a\/b1c\/b5411ab1c9babd8ef7253c1a879ff1e0.svg\" alt=\"$\\mathit{strength}$\" data-tex=\"inline\"><\/math> \u2014 \u044d\u0442\u043e \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0441\u0438\u043b\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0430. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7a1\/cfb\/661\/7a1cfb661819cba2415a41aadb5175be.svg\" alt=\"$\\mathit{power}$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b54\/11a\/b1c\/b5411ab1c9babd8ef7253c1a879ff1e0.svg\" alt=\"$\\mathit{strength}$\" data-tex=\"inline\"><\/math> \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <em>specular<\/em> \u0438 <em>gloss<\/em>, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0438 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0423\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 (1) \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cs\">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; }<\/code><\/pre>\n<p>  \u0415\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043d\u0438\u0436\u0435.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.2493%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/X7xnX4OSc1A?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2>Ocean Specular<\/h2>\n<p>  \u041e\u0434\u043d\u0438\u043c \u0441\u0430\u043c\u044b\u0445 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u044f <em>Journey<\/em> \u0441\u0442\u0430\u043b\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0438\u0433\u0440\u043e\u043a \u0432 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u00ab\u0441\u0451\u0440\u0444\u0438\u0442\u044c\u00bb \u043f\u043e \u0434\u044e\u043d\u0430\u043c. \u0412\u0435\u0434\u0443\u0449\u0438\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0414\u0436\u043e\u043d \u042d\u0434\u0432\u0430\u0440\u0434\u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e <a href=\"https:\/\/twitter.com\/thatgamecompany\" rel=\"noopener noreferrer\">thatgamecompany<\/a> \u0441\u0442\u0440\u0435\u043c\u0438\u043b\u0430\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0441\u043e\u043a \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0449\u0443\u0449\u0430\u043b\u0441\u044f \u043d\u0435 \u0442\u0432\u0451\u0440\u0434\u044b\u043c, \u0430 \u0436\u0438\u0434\u043a\u0438\u043c.<\/p>\n<p>  \u0418 \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e, \u0432\u0435\u0434\u044c \u043f\u0435\u0441\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0447\u0435\u043d\u044c \u0433\u0440\u0443\u0431\u0443\u044e \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044e \u0436\u0438\u0434\u043a\u043e\u0441\u0442\u0438. \u0410 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043f\u0435\u0441\u043e\u0447\u043d\u044b\u0445 \u0447\u0430\u0441\u0430\u0445, \u043e\u043d \u0434\u0430\u0436\u0435 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0436\u0438\u0434\u043a\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0438\u0434\u0435\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0441\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0436\u0438\u0434\u043a\u043e\u0441\u0442\u0438, \u0432 <em>Journey<\/em> \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0436\u0438\u0434\u043a\u0438\u0445 \u0442\u0435\u043b\u0430\u0445. \u0414\u0436\u043e\u043d \u042d\u0434\u0432\u0430\u0440\u0434\u0441 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e <strong>ocean specular (\u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043e\u043a\u0435\u0430\u043d\u0430)<\/strong>: \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u0442\u0438\u043f \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0438\u0434\u0435\u043d \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043e\u043a\u0435\u0430\u043d\u0430 \u0438\u043b\u0438 \u043e\u0437\u0435\u0440\u0430 \u043d\u0430 \u0437\u0430\u043a\u0430\u0442\u0435 \u0441\u043e\u043b\u043d\u0446\u0430 (\u0441\u043c. \u043d\u0438\u0436\u0435).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/095\/17e\/c43\/09517ec43fc6abd21bf8b04bce0bf66b.jpg\"><\/div>\n<p>  \u041a\u0430\u043a \u0438 \u043f\u0440\u0435\u0436\u0434\u0435, \u0432\u043d\u0435\u0441\u0451\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f <code>LightingJourney<\/code>, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0451 \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">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\t= 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); }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0431\u0435\u0440\u0451\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0442 \u0434\u0432\u0443\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f?<\/b><\/p>\n<div class=\"spoiler_text\">\u0415\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <strong>rim lighting<\/strong> \u0438 <strong>ocean specular<\/strong>. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0434\u044e\u043d\u044b, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434 \u0443\u0433\u043b\u0430\u043c\u0438 \u0441\u043a\u043e\u043b\u044c\u0436\u0435\u043d\u0438\u044f, \u043c\u043e\u0433\u0443\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0424\u0440\u0435\u043d\u0435\u043b\u044e \u0438 \u043f\u043e \u0411\u043b\u0438\u043d\u043d\u0443-\u0424\u043e\u043d\u0443\u0433\u0443. \u0415\u0441\u043b\u0438 \u0438\u0445 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u0434\u044e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043b\u0435\u0441\u0442\u0435\u0442\u044c.<\/p>\n<p>  \u041c\u044b \u0431\u0435\u0440\u0451\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438\u0437 \u043d\u0438\u0445, \u0438 \u044d\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.  <\/div>\n<\/div>\n<p>  \u0417\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u043e\u0434\u0435 \u0447\u0430\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>\u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0411\u043b\u0438\u043d\u043d\u0443-\u0424\u043e\u043d\u0433\u0443<\/strong>, \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043c\u0430\u043b\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432. \u0412\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0414\u0436\u0435\u0439\u043c\u0441\u043e\u043c \u0424. \u0411\u043b\u0438\u043d\u043d\u043e\u043c \u0432 1977 \u0433\u043e\u0434\u0443 (\u0441\u0442\u0430\u0442\u044c\u044f: &quot;<a href=\"http:\/\/citeseerx.ist.psu.edu\/viewdoc\/download;jsessionid=D97C4795B8C3D9B479421AC3B7882EE3?doi=10.1.1.131.7741&amp;amp;rep=rep1&amp;amp;type=pdf\" rel=\"noopener noreferrer\">Models of Light Reflection for Computer Synthesized Pictures<\/a>&quot;) \u043a\u0430\u043a \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0435\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0439 \u0411\u0443\u0439 \u0422\u044b\u043e\u043d\u0433 \u0424\u043e\u043d\u0433\u043e\u043c \u0432 1973 \u0433\u043e\u0434\u0443 (\u0441\u0442\u0430\u0442\u044c\u044f: &quot;<a href=\"http:\/\/citeseerx.ist.psu.edu\/viewdoc\/download?doi=10.1.1.330.4718&amp;amp;rep=rep1&amp;amp;type=pdf\" rel=\"noopener noreferrer\">Illumination for Computer Generated Pictures<\/a>&quot;).<\/p>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u0411\u043b\u0438\u043d\u043d\u0443-\u0424\u043e\u043d\u0433\u0443 \u0441\u0432\u0435\u0442\u0438\u043c\u043e\u0441\u0442\u044c (luminosity) <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/64b\/eb7\/37a\/64beb737a23fb5cb0a455f0e9213f2a4.svg\" alt=\"$I$\" data-tex=\"inline\"><\/math> \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c:<\/p>\n<p><math>$$display$$\\begin{equation*}  I = \\left(N \\cdot H\\right)^\\mathit{power} * \\mathit{strength} \\end{equation*}(2)$$display$$<\/math><\/p>\n<p>  \u0433\u0434\u0435 <\/p>\n<p><math>$$display$$\\begin{equation*}  H = \\frac{V + L}{\\left \\| V+L \\right \\|} \\end{equation*}(3)$$display$$<\/math><\/p>\n<p>  \u0417\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u044c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f (3) \u0434\u0435\u043b\u0438\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d80\/af7\/66f\/d80af766f69c0315ac3332b732b9b250.svg\" alt=\"$V+L$\" data-tex=\"inline\"><\/math> \u043d\u0430 \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0443. \u042d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/bd2\/36a\/859\/bd236a859d121c85d92d1acf80ba3597.svg\" alt=\"$H$\" data-tex=\"inline\"><\/math> \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>. \u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430\u044f \u0448\u0435\u0439\u0434\u0435\u0440\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e <code>normalize<\/code>. \u0421 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f, <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/bd2\/36a\/859\/bd236a859d121c85d92d1acf80ba3597.svg\" alt=\"$H$\" data-tex=\"inline\"><\/math> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u00ab\u043c\u0435\u0436\u0434\u0443\u00bb <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a5a\/4e0\/afa\/a5a4e0afaec84939dbfda220172b2be0.svg\" alt=\"$L$\" data-tex=\"inline\"><\/math>, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u043f\u043e\u043b\u0443\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c (half vector)<\/strong>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7af\/a5b\/6f8\/7afa5b6f85a208334f37ff8a3ec7d943.png\"><\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 H \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 V \u0438 L?<\/b><\/p>\n<div class=\"spoiler_text\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/bd2\/36a\/859\/bd236a859d121c85d92d1acf80ba3597.svg\" alt=\"$H$\" data-tex=\"inline\"><\/math> \u2014 \u0432\u0435\u043a\u0442\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a5a\/4e0\/afa\/a5a4e0afaec84939dbfda220172b2be0.svg\" alt=\"$L$\" data-tex=\"inline\"><\/math>.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Parallelogram_law\" rel=\"noopener noreferrer\">\u0442\u043e\u0436\u0434\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430<\/a>, \u0434\u0430\u044e\u0449\u0435\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044e \u0441\u0443\u043c\u043c\u044b \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438. \u0421\u0443\u043c\u043c\u0443 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a5a\/4e0\/afa\/a5a4e0afaec84939dbfda220172b2be0.svg\" alt=\"$L$\" data-tex=\"inline\"><\/math> \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a5a\/4e0\/afa\/a5a4e0afaec84939dbfda220172b2be0.svg\" alt=\"$L$\" data-tex=\"inline\"><\/math> \u0432 \u043a\u043e\u043d\u0435\u0446 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math> \u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math> \u043a \u043a\u043e\u043d\u0446\u0443 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a5a\/4e0\/afa\/a5a4e0afaec84939dbfda220172b2be0.svg\" alt=\"$L$\" data-tex=\"inline\"><\/math>.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043a \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0434\u0432\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d80\/af7\/66f\/d80af766f69c0315ac3332b732b9b250.svg\" alt=\"$V+L$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f00\/ce7\/69a\/f00ce769adb9c45febc4a0152ca5fece.svg\" alt=\"$L+V$\" data-tex=\"inline\"><\/math>, \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b \u0434\u0432\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4c9\/2ba\/181\/4c92ba1815755568822507862486ec2e.png\"><\/div>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u0445, \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u043e\u0433\u0440\u0430\u043c\u043c, \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0434\u043b\u0438\u043d\u0443. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c (\u0442\u043e \u0435\u0441\u0442\u044c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d80\/af7\/66f\/d80af766f69c0315ac3332b732b9b250.svg\" alt=\"$V+L$\" data-tex=\"inline\"><\/math>) \u0434\u0435\u043b\u0438\u0442 \u0443\u0433\u043e\u043b \u043f\u043e\u043f\u043e\u043b\u0430\u043c. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0441\u0438\u043d\u0438\u0439 \u0438 \u0436\u0451\u043b\u0442\u044b\u0439 \u0443\u0433\u043b\u044b \u0440\u0430\u0432\u043d\u044b (\u0432\u043d\u0438\u0437\u0443 \u0441\u043b\u0435\u0432\u0430).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f02\/02f\/4d2\/f0202f4d20afdbf26d3f1e80616180af.png\"><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d80\/af7\/66f\/d80af766f69c0315ac3332b732b9b250.svg\" alt=\"$V+L$\" data-tex=\"inline\"><\/math> \u2014 \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a5a\/4e0\/afa\/a5a4e0afaec84939dbfda220172b2be0.svg\" alt=\"$L$\" data-tex=\"inline\"><\/math>, \u043d\u043e \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0432\u043d\u044f\u0442\u044c\u0441\u044f <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>. \u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u0442 \u0434\u043b\u0438\u043d\u044b <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>, \u0447\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442 \u0435\u0433\u043e \u0432 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 (\u0432\u0432\u0435\u0440\u0445\u0443 \u0441\u043f\u0440\u0430\u0432\u0430).  <\/div>\n<\/div>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0411\u043b\u0438\u043d\u043d\u0443-\u0424\u043e\u043d\u0433\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 <a href=\"https:\/\/www.alanzucconi.com\/2015\/06\/24\/physically-based-rendering\/\" rel=\"noopener noreferrer\">Physically Based Rendering and Lighting Models<\/a>. \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430.<\/p>\n<pre><code class=\"cs\">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; }<\/code><\/pre>\n<p>  \u0412 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043e\u0433\u043e \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u041b\u0430\u043c\u0431\u0435\u0440\u0442\u0443 \u0438 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e \u0411\u043b\u0438\u043d\u043d\u0443-\u0424\u043e\u043d\u0433\u0443:<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.2493%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/DGmK3VgzWUU?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 5: \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0435\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0438\u0434\u043d\u044b \u043d\u0430 \u043f\u0435\u0441\u0447\u0430\u043d\u044b\u0445 \u0434\u044e\u043d\u0430\u0445.<\/p>\n<p>  \u0412\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043e\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 <a href=\"https:\/\/twitter.com\/fleity\" rel=\"noopener noreferrer\">\u0414\u0436\u0443\u043b\u0438\u0430\u043d \u041e\u0431\u0435\u0440\u0431\u0435\u043a<\/a> \u0438 <a href=\"https:\/\/twitter.com\/littleBugHunter\" rel=\"noopener noreferrer\">\u041f\u043e\u043b \u041d\u044d\u0434\u0435\u043b\u0435\u043a<\/a> \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432 Unity \u0441\u0446\u0435\u043d\u044b, \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u0439 \u0438\u0433\u0440\u043e\u0439 Journey. \u0412 \u0442\u0432\u0438\u0442\u0435 \u043d\u0438\u0436\u0435 \u0432\u0438\u0434\u043d\u043e \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0431\u041e\u043b\u044c\u0448\u0443\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 IndieBurg <a href=\"https:\/\/indieburg.com\/blog\/posts\/20200110-mip-map-folding\" rel=\"noopener noreferrer\">Mip Map Folding<\/a>.<\/p>\n<div class=\"oembed\">\n<blockquote class=\"twitter-tweet\" data-lang=\"en_US\">\n<p lang=\"en\" dir=\"ltr\">Made a journey like shader just for fun starting of from <a href=\"https:\/\/twitter.com\/AlanZucconi?ref_src=twsrc%5Etfw\">@AlanZucconi<\/a> tutorial and a little help form <a href=\"https:\/\/twitter.com\/littleBugHunter?ref_src=twsrc%5Etfw\">@littleBugHunter<\/a> expanding on it for better glittering. So much glitter \ud83d\ude00<br \/>*Rocks from asset store <a href=\"https:\/\/twitter.com\/hashtag\/shader?src=hash&amp;ref_src=twsrc%5Etfw\">#shader<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw\">#madewithunity<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/unity3d?src=hash&amp;ref_src=twsrc%5Etfw\">#unity3d<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/Unity?src=hash&amp;ref_src=twsrc%5Etfw\">#Unity<\/a> <a href=\"https:\/\/t.co\/nt7MOrxbnt\">pic.twitter.com\/nt7MOrxbnt<\/a><\/p>\n<p>&mdash; Julian Oberbeck (@fleity) <a href=\"https:\/\/twitter.com\/fleity\/status\/1214857483715567616?ref_src=twsrc%5Etfw\">January 8, 2020<\/a><\/p><\/blockquote>\n<p> <script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script> <\/div>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0443\u0440\u0441\u0430 \u043c\u044b \u0440\u0430\u0441\u043a\u0440\u044b\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0432\u0443\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 \u043f\u0435\u0441\u043a\u0430 <em>Journey<\/em>: <strong>rim lighting<\/strong> \u0438 <strong>ocean specular<\/strong>. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f: <strong>\u0431\u043b\u0435\u0441\u043a (glitter)<\/strong>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/35e\/ada\/492\/35eada4926ebf58a389faec51e2ae895.png\"><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u044b\u0432\u0430\u043b\u0438 \u0432 \u043f\u0443\u0441\u0442\u044b\u043d\u0438, \u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u0430\u043c\u0435\u0447\u0430\u043b\u0438, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0441\u043e\u043a \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0439. \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432 \u0447\u0430\u0441\u0442\u0438 \u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u0445 \u043f\u0435\u0441\u043a\u0430, \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0435\u0441\u0447\u0438\u043d\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0432\u0435\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u043e\u0442\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0445 \u043b\u0443\u0447\u0435\u0439 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0432 \u043a\u0430\u043c\u0435\u0440\u0443. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0441\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u044f\u0440\u043a\u0438\u043c\u0438. \u042d\u0442\u043e\u0442 \u0431\u043b\u0435\u0441\u043a \u043e\u0447\u0435\u043d\u044c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d \u043a \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u0430\u043b\u0435\u0439\u0448\u0438\u0439 \u0441\u0434\u0432\u0438\u0433 \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u043c \u043b\u0443\u0447\u0430\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u043a\u0430\u043c\u0435\u0440\u0443.<\/p>\n<p>  \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u0433\u0440\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <a href=\"https:\/\/store.steampowered.com\/app\/361420\/ASTRONEER\/\" rel=\"noopener noreferrer\">Astroneer<\/a> \u0438 <a href=\"https:\/\/store.steampowered.com\/app\/433340\/Slime_Rancher\/\" rel=\"noopener noreferrer\">Slime Rancher<\/a> \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u043f\u0435\u0441\u043a\u0430 \u0438 \u043f\u0435\u0449\u0435\u0440.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/716\/d17\/d2f\/716d17d2f4d0d0796e51bee059ce39c2.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/539\/f3c\/33c\/539f3c33c6c12f5206540ff62ecf4102.png\"><\/div>\n<p>  <i>\u0411\u043b\u0435\u0441\u043a: \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0430<\/i><\/p>\n<p>  \u041f\u0440\u043e\u0449\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0431\u043b\u0435\u0441\u043a\u0430 \u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/91a\/563\/52c\/91a56352c32cc17c9701e1a60c4a28e5.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/347\/28d\/7e3\/34728d7e33e9904f9815fe8a8b1d1105.png\"><\/div>\n<p>  \u0411\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0439, \u044d\u0444\u0444\u0435\u043a\u0442 \u0431\u043b\u0435\u0441\u043a\u0430 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u044e\u043d\u0430\u0445 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0441\u0447\u0438\u043d\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u0441\u0432\u0435\u0442 \u043d\u0430\u043c \u0432 \u0433\u043b\u0430\u0437\u0430. \u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043c\u044b \u0443\u0436\u0435 \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0443\u0440\u0441\u0430, \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u043c \u043f\u0435\u0441\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439. \u0422\u0430\u043a \u0437\u0430\u0447\u0435\u043c \u0436\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u044d\u0444\u0444\u0435\u043a\u0442?<\/p>\n<p>  \u041e\u0442\u0432\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 \u0431\u043b\u0435\u0441\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043a\u0430\u043c\u0435\u0440\u0443, \u043f\u0435\u0441\u043e\u043a \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0431\u043b\u0435\u0441\u0442\u0435\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0443 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0441\u0432\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u0441\u0446\u0435\u043d\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u043b\u0443\u0447\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043e\u0442\u0440\u0430\u0437\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e 100% \u0441\u0432\u0435\u0442\u0430 (\u0435\u0441\u043b\u0438 \u043f\u0435\u0441\u043e\u043a \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0431\u0435\u043b\u044b\u0439).<\/p>\n<p>  \u041d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u0447\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u044f\u0440\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u0435\u0442 <em>\u0440\u0430\u0441\u0442\u0435\u043a\u0430\u043b\u0441\u044f<\/em> \u043d\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0441 \u043d\u0438\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0438, \u0442\u043e \u0446\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 Unity \u043f\u0440\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a \u043a\u0430\u043c\u0435\u0440\u0435 <strong>\u0444\u0438\u043b\u044c\u0442\u0440\u0430 bloom<\/strong> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>\u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/strong>, \u0446\u0432\u0435\u0442\u0430 \u044f\u0440\u0447\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math> \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u0433\u0430\u043b\u043e, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0441\u0432\u0435\u0442\u044f\u0442\u0441\u044f. \u042d\u0442\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442 <strong>HDR-\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430<\/strong>.<\/p>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0435\u0442, \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0445 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<h2>\u0422\u0435\u043e\u0440\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439<\/h2>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u0435\u0435 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u044e\u043d\u044b \u043a\u0430\u043a \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0435\u0440\u043a\u0430\u043b, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0442\u0435\u043e\u0440\u0438\u0435\u0439 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439 (microfacet theory)<\/strong>, \u0433\u0434\u0435 <strong>\u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u044c\u044e (microfacet)<\/strong> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u044b\u0445 \u0437\u0435\u0440\u043a\u0430\u043b. \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0435\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043c\u043e\u0434\u0435\u043b\u0438 <a href=\"https:\/\/docs.unity3d.com\/Manual\/shader-StandardShader.html\" rel=\"noopener noreferrer\">Standard shader \u0438\u0437 Unity<\/a>.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0434\u044e\u043d\u044b \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0438 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445. \u041a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430, \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u043c \u043f\u0435\u0441\u043a\u0430, \u0433\u0434\u0435 UV-\u043f\u043e\u0437\u0438\u0446\u0438\u044f 3D-\u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u044e\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0422\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e. \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043e\u0442 \u0435\u0451 <strong>\u0443\u0440\u043e\u0432\u043d\u044f mip-\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/strong>. \u041d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0438, \u0430 \u043d\u0435 \u0441\u0442\u0440\u0435\u043c\u043b\u0435\u043d\u0438\u0438 \u043a \u0444\u043e\u0442\u043e\u0440\u0435\u0430\u043b\u0438\u0437\u043c\u0443; \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448 \u0434\u043b\u044f \u043d\u0430\u0441.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0435\u0441\u0447\u0438\u043d\u043a\u043e\u0439\/\u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u044c\u044e \u0434\u044e\u043d\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/560\/bd9\/7f2\/560bd97f235311a36dff00db005e6ab5.svg\" alt=\"$G$\" data-tex=\"inline\"><\/math>. \u041e\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <strong>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043b\u0435\u0441\u043a\u0430<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c <strong>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438<\/strong> \u043f\u0435\u0441\u0447\u0438\u043d\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0441\u043c\u043e\u0442\u0440\u0438\u043c. \u041b\u0443\u0447 \u0441\u0432\u0435\u0442\u0430, \u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043f\u0435\u0441\u0447\u0438\u043d\u043a\u0443, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u0433\u0440\u0430\u043d\u044c \u2014 \u044d\u0442\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u043e, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/560\/bd9\/7f2\/560bd97f235311a36dff00db005e6ab5.svg\" alt=\"$G$\" data-tex=\"inline\"><\/math>. \u0412 \u043a\u0430\u043c\u0435\u0440\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u043e\u0442\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0439 \u043b\u0443\u0447 \u0441\u0432\u0435\u0442\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b81\/a7c\/1e9\/b81a7c1e9676b36cc02ddeea5d5f6e51.svg\" alt=\"$R$\" data-tex=\"inline\"><\/math> (\u0441\u043c. \u043d\u0438\u0436\u0435).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d71\/668\/23c\/d7166823c2badfe515d38068087de58a.png\"><\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>\u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/strong> <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b81\/a7c\/1e9\/b81a7c1e9676b36cc02ddeea5d5f6e51.svg\" alt=\"$R$\" data-tex=\"inline\"><\/math> \u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/836\/e59\/247\/836e59247dee9dc566df40f0f1d606e8.svg\" alt=\"$V$\" data-tex=\"inline\"><\/math> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0440\u044b \u0438\u0445 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/192\/f1d\/ea0\/192f1dea08e1a451fedccf9e439a31a5.svg\" alt=\"$R \\cdot V$\" data-tex=\"inline\"><\/math>, \u043a\u0430\u043a \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 (\u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0439) \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0447\u0435\u043d\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432 <em>Journey<\/em>. \u0411\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0435\u0434\u043a\u0438\u043c\u0438 \u0438 \u043e\u0447\u0435\u043d\u044c \u044f\u0440\u043a\u0438\u043c\u0438. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/192\/f1d\/ea0\/192f1dea08e1a451fedccf9e439a31a5.svg\" alt=\"$R \\cdot V$\" data-tex=\"inline\"><\/math> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0438\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0431\u043b\u0435\u0441\u043a\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>reflect<\/code> \u0432 Cg, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b81\/a7c\/1e9\/b81a7c1e9676b36cc02ddeea5d5f6e51.svg\" alt=\"$R$\" data-tex=\"inline\"><\/math>.<\/p>\n<pre><code class=\"cs\">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]-&gt;[-1,+1]      \/\/ Light that reflects on the glitter and hits the eye     float3 R = reflect(L, G);     float RdotV = max(0, dot(R, V)); \t     \/\/ Only the strong ones (= small RdotV)     if (RdotV &gt; _GlitterThreshold)         return 0; \t     return (1 - RdotV) * _GlitterColor; }<\/code><\/pre>\n<p>  \u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0435\u0441\u043b\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/560\/bd9\/7f2\/560bd97f235311a36dff00db005e6ab5.svg\" alt=\"$G$\" data-tex=\"inline\"><\/math> \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e, \u0442\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b81\/a7c\/1e9\/b81a7c1e9676b36cc02ddeea5d5f6e51.svg\" alt=\"$R$\" data-tex=\"inline\"><\/math> \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c. \u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>reflect<\/code> \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0418 \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0432\u0435\u0440\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430, \u043d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f? \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043b\u0438 \u0438\u0437-\u0437\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043e\u043b\u043d\u0446\u0430, \u0438\u043b\u0438 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0447\u0435\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u0432\u0435\u0442\u0430, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043a \u0438\u0433\u0440\u043e\u043a\u0443. \u0412 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0435\u0441\u043e\u043a \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0423\u044e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u0430\u0434\u0440\u043e\u043c, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442 \u0431\u043b\u0435\u0441\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>reflect<\/code> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0438\u0436\u0435:<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.2493%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/1wnw0B2hWPI?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u043c\u044b \u043f\u043e\u043c\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430, \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u043b\u0435\u0441\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0446\u0432\u0435\u0442\u0443.<\/p>\n<pre><code class=\"cs\">#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; \t     return float4(color * s.Albedo, 1); }<\/code><\/pre>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u0446\u0432\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0443 bloom. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u043e. \u042d\u0444\u0444\u0435\u043a\u0442 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f (\u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0438\u0435 \u043f\u0435\u0441\u0447\u0438\u043d\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u0430\u0436\u0435 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0434\u044e\u043d\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u044b.<\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0438. \u0412\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0438\u0442\u043e\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0438\u0447\u044c. \u0412 <a href=\"https:\/\/store.steampowered.com\/app\/361420\/ASTRONEER\/\" rel=\"noopener noreferrer\">Astroneer<\/a> \u0438 <a href=\"https:\/\/store.steampowered.com\/app\/433340\/Slime_Rancher\/\" rel=\"noopener noreferrer\">Slime Rancher<\/a>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0447\u044c\u044e. \u042d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u043b\u044b \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0431\u043b\u0435\u0441\u043a\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 <code>max(dot(L, fixed3(0,1,0),0))<\/code> \u0440\u0430\u0432\u043d\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u043b\u043d\u0446\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u0432\u0435\u0440\u0445\u0443, \u0438 \u0440\u0430\u0432\u043d\u0430 \u043d\u0443\u043b\u044e, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u043e \u0437\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c. \u041d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0432 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u043e \u0411\u043b\u0438\u043d\u043d\u0443-\u0424\u043e\u043d\u0433\u0443 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f reflect?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0444\u0444\u0435\u043a\u0442 <strong>ocean specular<\/strong>, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438, \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>\u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0411\u043b\u0438\u043d\u043d\u0443-\u0424\u043e\u043d\u0433\u0443<\/strong>.<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0440\u0430\u043d\u043d\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f 3D-\u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043b\u044f \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0441\u0442\u044c\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u0442\u0430\u043b\u043b\u0430 \u0438 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u0430. \u041d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>reflect<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u0439. \u0414\u043b\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u043f\u0435\u0440\u0451\u0434 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0411\u043b\u0438\u043d\u043d\u0443-\u0424\u043e\u043d\u0433\u0443 \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442<math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/192\/f1d\/ea0\/192f1dea08e1a451fedccf9e439a31a5.svg\" alt=\"$R \\cdot V$\" data-tex=\"inline\"><\/math> \u043d\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4eb\/d9e\/6b0\/4ebd9e6b02c887eb945aece1cdd8f3c2.svg\" alt=\"$N \\cdot H$\" data-tex=\"inline\"><\/math>, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0435\u0439.<\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 6: \u0432\u043e\u043b\u043d\u044b<\/h2>\n<p>  \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0432\u043e\u043b\u043d\u044b \u043f\u0435\u0441\u043a\u0430, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0432\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u044e\u043d \u0438 \u0432\u0435\u0442\u0440\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c00\/b54\/814\/c00b54814122211b0ae5db424f92a7f5.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/539\/f3c\/33c\/539f3c33c6c12f5206540ff62ecf4102.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/828\/9b4\/997\/8289b49971bbe0046845f71284790124.png\"><\/div>\n<p>  <i>\u0412\u043e\u043b\u043d\u044b \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0434\u044e\u043d: \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435<\/i><\/p>\n<p>  \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u0445 \u043f\u0435\u0441\u043a\u0430. \u042f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0435\u0451 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438\u0437 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430. \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u044d\u0442\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0442\u0435\u043c, \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u0433\u043e\u0432.<\/p>\n<h2>\u041a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439<\/h2>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 (\u043f\u044f\u0442\u043e\u0439) \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0435\u0441\u043a\u0430. \u0412 \u0447\u0430\u0441\u0442\u0438, \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u043c \u043f\u0435\u0441\u043a\u0430 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0432\u0435\u0442\u0430 \u0441 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 <strong>\u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 (normal mapping)<\/strong>. \u041e\u043d\u0430 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 3D-\u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043b\u043b\u044e\u0437\u0438\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e, \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0440\u0438\u0432\u044b\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u0430\u0432\u043d\u044b\u043c\u0438 (\u0441\u043c. \u043d\u0438\u0436\u0435).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f93\/544\/d9c\/f93544d9c95a70da71848897f0913676.png\"><\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 <strong>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u0438<\/strong>, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u043c \u0435\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e. \u0418 \u043e\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043c\u0435\u0448\u0430.<\/p>\n<p>  \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0438\u0437 \u043a\u0430\u0436\u0443\u0449\u0435\u0439\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0435\u0440\u043d\u0438\u0441\u0442\u043e\u0441\u0442\u044c. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043e\u043d\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e.<\/p>\n<h2>\u0412\u043e\u043b\u043d\u044b \u043d\u0430 \u043f\u0435\u0441\u043a\u0435<\/h2>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0435\u0441\u0447\u0430\u043d\u044b\u0435 \u0434\u044e\u043d\u044b \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c: \u0432\u043e\u043b\u043d\u044b. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0434\u044e\u043d\u0435 \u0435\u0441\u0442\u044c \u0434\u044e\u043d\u044b \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0438\u0437-\u0437\u0430 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u0435\u0442\u0440\u0430 \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0442\u0440\u0435\u043d\u0438\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0441\u0447\u0438\u043d\u043e\u043a.<\/p>\n<p>  \u042d\u0442\u0438 \u0432\u043e\u043b\u043d\u044b \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u044b \u0438 \u0432\u0438\u0434\u043d\u044b \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0434\u044e\u043d. \u041d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043d\u0438\u0436\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0439 \u0432 \u041e\u043c\u0430\u043d\u0435, \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0431\u043b\u0438\u0436\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u044e\u043d\u044b \u0438\u043c\u0435\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u043b\u043d\u0438\u0441\u0442\u044b\u0439 \u0443\u0437\u043e\u0440.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/874\/c94\/2b7\/874c942b78535dabc26f5971c4e6c30b.jpg\"><\/div>\n<p>  \u042d\u0442\u0438 \u0432\u043e\u043b\u043d\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 \u0444\u043e\u0440\u043c\u044b \u0434\u044e\u043d\u044b, \u043d\u043e \u0438 \u043e\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0435\u0442\u0440\u0430. \u0423 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0434\u044e\u043d \u0441 \u043e\u0441\u0442\u0440\u044b\u043c \u043f\u0438\u043a\u043e\u043c \u0432\u043e\u043b\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b (\u0441\u043c. \u043d\u0438\u0436\u0435).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b30\/e98\/3da\/b30e983daf43fc38b8fbe3714eebabc2.jpg\"><\/div>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u0430\u0432\u043d\u044b\u0435 \u0434\u044e\u043d\u044b, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u0432\u043e\u043b\u043d\u044b \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c. \u042d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0447\u043d\u043e, \u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c, \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c.<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u043e\u043b\u043d<\/h2>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u043b\u043d. \u041d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0445 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435, \u043d\u043e \u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0438\u043d\u043e\u0433\u043e. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0430: \u0432\u043e\u043b\u043d\u044b \u043d\u0435 \u00ab\u043f\u043b\u043e\u0441\u043a\u0438\u0435\u00bb \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0441\u0432\u0435\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0438\u0445, \u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b (\u0438\u043b\u0438 \u0441\u043e\u043b\u043d\u0446\u0430).<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u043b\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u044e\u043d\u044b. \u041d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0431\u0449\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0432 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u0435\u0441\u043a\u0430, \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <em>\u043a\u0430\u0440\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439<\/em>. \u041f\u043e \u0441\u0443\u0442\u0438, \u043e\u043d\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438.<\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0432 \u0434\u0440\u0443\u0433\u0443\u044e: \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0442\u0438 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439. \u0420\u0443\u0447\u043d\u0430\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0434\u044e\u043d\u044b \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u043e\u043b\u043d\u044b \u0437\u0430\u043d\u043e\u0432\u043e. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0438.<\/p>\n<p>  \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u043b\u043d <em>\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u043c<\/em> \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0434\u044e\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0441\u0447\u0438\u043d\u043a\u0438, \u043d\u043e \u0438 \u0432\u043e\u043b\u043d\u044b.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u043e\u043b\u043d\u044b \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 3D-\u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438, \u0431\u0443\u0434\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0441 \u0432\u043e\u043b\u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c. \u0417\u0430\u0442\u0435\u043c \u044d\u0442\u0430 \u043a\u0430\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u043a\u0430\u0440\u0442\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439, \u0440\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u043f\u0435\u0441\u043a\u0430.<\/p>\n<h2>\u041a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439<\/h2>\n<p>  \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 <em>\u043d\u043e\u0440\u043c\u0430\u043b\u044f\u043c\u0438<\/em>:<\/p>\n<ul>\n<li><strong>\u041d\u043e\u0440\u043c\u0430\u043b\u044c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438<\/strong>: \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0430\u043d\u0438 3D-\u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u0445;<\/li>\n<li><strong>\u041d\u043e\u0440\u043c\u0430\u043b\u044c \u043f\u0435\u0441\u043a\u0430<\/strong>: \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0448\u0443\u043c\u0430;<\/li>\n<li><strong>\u041d\u043e\u0440\u043c\u0430\u043b\u044c \u0432\u043e\u043b\u043d<\/strong>: \u043d\u043e\u0432\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438.<\/li>\n<\/ul>\n<p>  \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435, \u0432\u0437\u044f\u0442\u043e\u043c \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b Unity <a href=\"https:\/\/docs.unity3d.com\/Manual\/SL-SurfaceShaderExamples.html\" rel=\"noopener noreferrer\">Surface Shader examples<\/a>, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 3D-\u043c\u043e\u0434\u0435\u043b\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>o.Normal<\/code>, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b (\u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 <strong>\u043a\u0430\u0440\u0442\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439<\/strong>).<\/p>\n<pre><code class=\"cpp\">  Shader &quot;Example\/Diffuse Bump&quot; {     Properties {       _MainTex (&quot;Texture&quot;, 2D) = &quot;white&quot; {}       _BumpMap (&quot;Bumpmap&quot;, 2D) = &quot;bump&quot; {}     }     SubShader {       Tags { &quot;RenderType&quot; = &quot;Opaque&quot; }       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 &quot;Diffuse&quot;   }<\/code><\/pre>\n<p>  \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u044e \u043f\u0435\u0441\u043a\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 UnpackNormal?<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c <strong>\u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439<\/strong> \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <strong>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438<\/strong>. \u042d\u0442\u043e <strong>\u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440<\/strong> (\u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 1), \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043a\u0443\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b X, Y \u0438 Z \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 R, G \u0438 B \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439.<\/p>\n<p>  \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d06\/719\/edc\/d06719edc69908e7467f7e6189302b74.svg\" alt=\"$-1$\" data-tex=\"inline\"><\/math> \u0434\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9d1\/49e\/a8e\/9d149ea8ef8692eb106a55ce5af36ccd.svg\" alt=\"$+1$\" data-tex=\"inline\"><\/math>. \u041e\u0434\u043d\u0430\u043a\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f9c\/3c8\/e48\/f9c3c8e488ead4696749012f5ece6d13.svg\" alt=\"$0$\" data-tex=\"inline\"><\/math> \u0434\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u00ab\u0441\u0436\u0430\u0442\u044c\u00bb \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438 \u00ab\u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044c\u00bb \u0438\u0445 \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u042d\u0442\u0438 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f <strong>\u0443\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 (normal packing)<\/strong> \u0438 <strong>\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 (normal unpacking)<\/strong>. \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u0442\u0438\u0445 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439:<\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b99\/5d8\/2b3\/b995d82b30a8471e2e0a8b1135dccda5.svg\" alt=\"$\\begin{align} R &amp;= \\frac{X}{2} + \\frac{1}{2} \\\\ G &amp;= \\frac{Y}{2} + \\frac{1}{2} \\\\B &amp;= \\frac{Z}{2} + \\frac{1}{2}\\end{align}(1)$\" data-tex=\"display\"><\/math><\/p>\n<p>  \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0438\u043c:<\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/ab7\/5d0\/486\/ab75d048661565d0cdf8ffee31fd9943.svg\" alt=\"$\\begin{align} X &amp;= 2R - 1 \\\\ Y &amp;= 2G - 1 \\\\ Z &amp;= 2B - 1 \\end{align}(2)$\" data-tex=\"display\"><\/math><\/p>\n<p>  \u0412 Unity \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 (2), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>UnpackNormal<\/code>. \u0415\u0451 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0438\u0437 \u043a\u0430\u0440\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439.<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"http:\/\/wiki.polycount.com\/wiki\/Normal_Map_Technical_Details\" rel=\"noopener noreferrer\">Normal Map Technical Details<\/a> \u0432 \u0432\u0438\u043a\u0438 \u0441\u0430\u0439\u0442\u0430 polycount.<\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u041a\u0440\u0443\u0442\u0438\u0437\u043d\u0430 \u0434\u044e\u043d<\/h2>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430 \u0432\u043e\u043b\u043d \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0441\u0442\u0440\u043e\u0442\u044b \u0434\u044e\u043d. \u041d\u0435\u0432\u044b\u0441\u043e\u043a\u0438\u0435, \u043f\u043b\u043e\u0441\u043a\u0438\u0435 \u0434\u044e\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0432\u043e\u043b\u043d\u044b; \u043d\u0430 \u043a\u0440\u0443\u0442\u044b\u0445 \u0434\u044e\u043d\u0430\u0445 \u0432\u043e\u043b\u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0431\u043e\u043b\u0435\u0435 \u043e\u0442\u0447\u0451\u0442\u043b\u0438\u0432\u044b. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c <em>\u043a\u0440\u0443\u0442\u0438\u0437\u043d\u0443<\/em> \u0434\u044e\u043d\u044b.<\/p>\n<p>  \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u0441\u043e\u0437\u0434\u0430\u0432 \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043f\u043b\u043e\u0441\u043a\u0438\u0445 \u0438 \u043a\u0440\u0443\u0442\u044b\u0445 \u0434\u044e\u043d. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u044b \u0434\u044e\u043d\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1ae\/a7e\/691\/1aea7e6919021a7adf95b595e141348a.jpg\"><\/div>\n<p>  <i>\u041a\u0430\u0440\u0442\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0434\u043b\u044f \u043a\u0440\u0443\u0442\u043e\u0439 \u0434\u044e\u043d\u044b<\/i><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3cd\/7d6\/983\/3cd7d698303b82e9c4aeac3c35c84925.jpg\"><\/div>\n<p>  <i>\u041a\u0430\u0440\u0442\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0434\u043b\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0439 \u0434\u044e\u043d\u044b<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0438 \u0441\u0438\u043d\u0438\u0439 \u043a\u0430\u043d\u0430\u043b<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u043d\u043e\u0433\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0441\u0438\u043d\u0438\u0439 \u043a\u0430\u043d\u0430\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435, \u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0430.<\/p>\n<p>  \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0430\u044f\u0441\u044f \u0432 \u043d\u0451\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0439. \u0415\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0435\u0439 (X \u0438 Y) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 (Z) \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e.<\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4ce\/068\/b7a\/4ce068b7a07ce1ae417c7b0d70358406.svg\" alt=\"$\\begin{align} length\\left(N\\right) &amp;= 1 \\\\ \\sqrt{X^2+Y^2+Z^2} &amp;= 1 \\\\ \\end{align}(3)$\" data-tex=\"display\"><\/math><\/p>\n<p>  \u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442:<\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/462\/375\/c58\/462375c58a5dd6cfd4c49f89ee48dbfb.svg\" alt=\"$\\begin{align} \\sqrt{X^2+Y^2+Z^2} &amp;= 1 \\\\ X^2+Y^2+Z^2 &amp;= 1^2 \\\\ Z^2 &amp;= 1 - X^2-Y^2 \\\\ Z &amp;= \\sqrt{1 - X^2-Y^2} \\end{align}(4)$\" data-tex=\"display\"><\/math><\/p>\n<p>  \u042d\u0442\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>UnpackNormal<\/code> \u0434\u0432\u0438\u0436\u043a\u0430 Unity. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e Shader API \u043e\u043d\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0438\u043b\u0438 \u0434\u0432\u0443\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432.<\/p>\n<pre><code class=\"cpp\">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 }<\/code><\/pre>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e Unity \u0445\u0440\u0430\u043d\u0438\u0442 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <strong>DXT5nm<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0438 \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 (<code>packednormal.xy<\/code>) \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b \u0438 \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b (<code>packednormal.wy<\/code>).<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"http:\/\/wiki.polycount.com\/wiki\/Normal_Map_Compression\" rel=\"noopener noreferrer\">Normal Map Compression<\/a> \u0432 \u0432\u0438\u043a\u0438 \u0441\u0430\u0439\u0442\u0430 polycount.<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u0438\u0440\u0435\u043d\u0435\u0432\u044b\u043c\u0438?<\/b><\/p>\n<div class=\"spoiler_text\">\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439, \u0442\u043e \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0438\u0440\u0435\u043d\u0435\u0432\u0430\u0442\u044b\u0435.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 <em>\u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439<\/em> \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442 <em>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439<\/em> \u0432 <strong>\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/strong>, \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u0432\u0435\u0440\u0445 \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/654\/bcd\/201\/654bcd201c9ef1dc81b725525279ad60.svg\" alt=\"$\\left[0, 0, 1\\right]$\" data-tex=\"inline\"><\/math> \u043d\u0435 \u0432\u043d\u043e\u0441\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u0440\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0446\u0432\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/654\/bcd\/201\/654bcd201c9ef1dc81b725525279ad60.svg\" alt=\"$\\left[0, 0, 1\\right]$\" data-tex=\"inline\"><\/math> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e5c\/b42\/a62\/e5cb42a62c282d4bdd1cb1742dc029f6.svg\" alt=\"$\\left[0.5, 0.5, 1\\right]$\" data-tex=\"inline\"><\/math>, \u0447\u0442\u043e \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0438\u0440\u0435\u043d\u0435\u0432\u043e\u043c\u0443 \u0446\u0432\u0435\u0442\u0443 \u0432 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 RGB.<\/p>\n<p>  \u041a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0447\u0430\u0441\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443; \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043e\u043d\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044f\u0445 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/654\/bcd\/201\/654bcd201c9ef1dc81b725525279ad60.svg\" alt=\"$\\left[0, 0, 1\\right]$\" data-tex=\"inline\"><\/math>.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u00ab\u0432\u043d\u0443\u0442\u0440\u044c\u00bb. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 B \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d06\/719\/edc\/d06719edc69908e7467f7e6189302b74.svg\" alt=\"$-1$\" data-tex=\"inline\"><\/math> \u0434\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9d1\/49e\/a8e\/9d149ea8ef8692eb106a55ce5af36ccd.svg\" alt=\"$+1$\" data-tex=\"inline\"><\/math>, \u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f9c\/3c8\/e48\/f9c3c8e488ead4696749012f5ece6d13.svg\" alt=\"$0$\" data-tex=\"inline\"><\/math> \u0434\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9d1\/49e\/a8e\/9d149ea8ef8692eb106a55ce5af36ccd.svg\" alt=\"$+1$\" data-tex=\"inline\"><\/math>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0438\u043c\u0435\u044e\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0442\u0442\u0435\u043d\u043e\u043a \u0441\u0438\u043d\u0435\u0433\u043e.<\/div>\n<\/div>\n<p>  \u041a\u0440\u0443\u0442\u0438\u0437\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>\u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u00ab\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438\u00bb \u0434\u0432\u0443\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0431\u0435\u0440\u0451\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 (\u043d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u0441\u0438\u043d\u0438\u043c) \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0435\u0451 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0432 \u043d\u0435\u0431\u043e (\u043d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0436\u0451\u043b\u0442\u044b\u043c). \u0421\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e4\/c77\/a6e\/3e4c77a6e7c579a778fa84a18b6f4be0.svg\" alt=\"$1$\" data-tex=\"inline\"><\/math>, \u043a\u043e\u0433\u0434\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u043f\u043e\u0447\u0442\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b (\u043f\u043b\u043e\u0441\u043a\u0438\u0435 \u0434\u044e\u043d\u044b), \u0438 \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f9c\/3c8\/e48\/f9c3c8e488ead4696749012f5ece6d13.svg\" alt=\"$0$\" data-tex=\"inline\"><\/math>, \u043a\u043e\u0433\u0434\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0443\u0433\u043e\u043b 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 (\u043a\u0440\u0443\u0442\u044b\u0435 \u0434\u044e\u043d\u044b).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ca1\/41e\/541\/ca141e541313d8b0dcea3091bed240d5.png\"><\/div>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u2014 \u0432 \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u0412\u0435\u043a\u0442\u043e\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0439 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>surf<\/code> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>o.Normal<\/code>, \u0432\u044b\u0440\u0430\u0436\u0435\u043d \u0432 <strong>\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/strong>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e <strong>\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/strong>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430 \u043a \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 (\u0441\u043c. \u043d\u0438\u0436\u0435). \u041c\u044b \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043a\u0430\u0441\u0430\u043b\u0438\u0441\u044c \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u044b \u0432 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u0435\u0441\u043a\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8c7\/ac9\/e27\/8c7ac9e27aa358c7bd999859a3bf8777.png\"><\/div>\n<p>  \u0412\u0435\u043a\u0442\u043e\u0440 \u0436\u0435, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432 \u043d\u0435\u0431\u043e, \u0432\u044b\u0440\u0430\u0436\u0435\u043d \u0432 <strong>\u043c\u0438\u0440\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/strong>. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043e\u0431\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0430 \u0431\u044b\u043b\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.<\/p>\n<p>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 Unity \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>WorldNormalVector<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0438\u0437 <em>\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430<\/em> \u0432 <em>\u043c\u0438\u0440\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e<\/em>. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>Input<\/code>, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0435\u0451 \u0431\u044b\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b <code>float3 worldNormal<\/code> \u0438 <code>INTERNAL_DATA<\/code>:<\/p>\n<pre><code class=\"cpp\">struct Input {     ...      float3 worldNormal;     INTERNAL_DATA };<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Unity <a href=\"https:\/\/docs.unity3d.com\/Manual\/SL-SurfaceShaders.html\" rel=\"noopener noreferrer\">Writing Surface Shaders<\/a>, \u0433\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f:<\/p>\n<blockquote><p><code>INTERNAL_DATA<\/code> \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043c\u0438\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 <code>o.Normal<\/code>.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0438\u0437 \u043f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>WorldNormalVector (IN, o.Normal)<\/code>.<\/p><\/blockquote>\n<p>  \u0427\u0430\u0441\u0442\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432. \u041f\u043e \u0441\u0443\u0442\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>o.Normal<\/code>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>surf<\/code>, <em>\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f<\/em> \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u0435\u0433\u043e, <code>o.Normal<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <em>\u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438<\/em> \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 <em>\u043c\u0438\u0440\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/em>. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, <code>o.Normal<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <em>\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/em>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 <code>o.Normal<\/code>, \u043d\u043e \u0432\u0430\u043c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0432 <em>\u043c\u0438\u0440\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/em> (\u043a\u0430\u043a \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435), \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>WorldNormalVector (IN, o.Normal)<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>Input<\/code>.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 INTERNAL_DATA?<\/b><\/p>\n<div class=\"spoiler_text\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>INTERNAL_DATA<\/code> \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Unity.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>WorldNormalVector<\/code>. \u041e\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440, \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 <em>\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/em>, \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 <em>\u043c\u0438\u0440\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e<\/em>. \u0422\u0430\u043a\u0430\u044f \u0441\u043c\u0435\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432 <strong>\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0430\u043b\u0433\u0435\u0431\u0440\u0435<\/strong> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u0431\u0430\u0437\u0438\u0441\u0430<\/strong> (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Change_of_basis\" rel=\"noopener noreferrer\">\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438<\/a>).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0431\u0440\u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0443 \u0431\u0430\u0437\u0438\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c 3D-\u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 3\u00d73. \u042d\u0442\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0430, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432 \u043c\u0438\u0440\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e (tangent to world matrix)<\/strong>, \u0447\u0442\u043e Unity \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u043e <strong>TtoW<\/strong>.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 <code>INTERNAL_DATA<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 TtoW \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code>Input<\/code>. \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043e\u0442\u043a\u0440\u044b\u0432 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043d\u043e\u043f\u043a\u0438 \u00abShow generated code\u00bb \u0432 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2de\/d96\/ed0\/2ded96ed0cdbf606643b9c6ff179380b.png\"><\/div>\n<p>  \u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e <code>INTERNAL_DATA<\/code> \u2014 \u044d\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 TtoW:<\/p>\n<pre><code class=\"cpp\">#define INTERNAL_DATA     half3 internalSurfaceTtoW0;     half3 internalSurfaceTtoW1;     half3 internalSurfaceTtoW2;<\/code><\/pre>\n<p>  \u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043a\u0430\u043a <code>half3x3<\/code>, \u0430 \u043a\u0430\u043a \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 <code>half3<\/code>.<\/p>\n<p>  \u0412 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <code>WorldNormalVector<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 (\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432 <em>\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/em>) \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 TtoW:<\/p>\n<pre><code class=\"cpp\">#define WorldNormalVector(data,normal)     fixed3     (         dot(data.internalSurfaceTtoW0, normal),         dot(data.internalSurfaceTtoW1, normal),         dot(data.internalSurfaceTtoW2, normal)     )<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043c\u0430\u0442\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f <code>mul<\/code>, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u0430 TtoW \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0438, \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e <em>\u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/em>.<\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e:<\/p>\n<p><math>$$display$$\\begin{equation*} \\begin{bmatrix} ToW_{1,1} &amp; ToW_{1,2} &amp; ToW_{1,3} \\\\ ToW_{2,1} &amp; ToW_{2,2} &amp; ToW_{2,3} \\\\ ToW_{3,1} &amp; ToW_{3,2} &amp; ToW_{3,3} \\end{bmatrix} \\cdot \\begin{bmatrix} N1\\\\ N2\\\\ N3 \\end{bmatrix}= \\begin{bmatrix} \\begin{bmatrix} ToW_{1,1} \\\\ ToW_{1,2} \\\\ ToW_{1,3} \\end{bmatrix}\\cdot\\begin{bmatrix} N1\\\\ N2\\\\ N3 \\end{bmatrix} \\\\ \\begin{bmatrix} ToW_{2,1} \\\\ ToW_{2,2} \\\\ ToW_{2,3} \\end{bmatrix}\\cdot\\begin{bmatrix} N1\\\\ N2\\\\ N3 \\end{bmatrix} \\\\ \\begin{bmatrix} ToW_{3,1} \\\\ ToW_{3,2} \\\\ ToW_{3,3} \\end{bmatrix}\\cdot\\begin{bmatrix} N1\\\\ N2\\\\ N3 \\end{bmatrix} \\end{bmatrix} \\end{equation*}$$display$$<\/math><\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"https:\/\/learnopengl.com\/Advanced-Lighting\/Normal-Mapping\" rel=\"noopener noreferrer\">LearnOpenGL<\/a>.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>  \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0438\u0436\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u0438\u0437 <em>\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e<\/em> \u0432 <em>\u043c\u0438\u0440\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e<\/em> \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e <em>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u00ab\u0432\u0432\u0435\u0440\u0445\u00bb<\/em>.<\/p>\n<pre><code class=\"cpp\">\/\/ Calculates normal in world space float3 N_WORLD = WorldNormalVector(IN, o.Normal); float3 UP_WORLD = float3(0, 1, 0);  \/\/ Calculates &quot;steepness&quot; \/\/ =&gt; 0: steep (90 degrees surface) \/\/  =&gt; 1: shallow (flat surface) float steepness = saturate(dot(N_WORLD, UP_WORLD));<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043b\u0438 \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u0443 \u0434\u044e\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0434\u043b\u044f \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u043a\u0430\u0440\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439. \u0421\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439, \u0438 \u043f\u043b\u043e\u0441\u043a\u0430\u044f, \u0438 \u043a\u0440\u0443\u0442\u0430\u044f (\u0432 \u043a\u043e\u0434\u0435 \u043d\u0438\u0436\u0435 \u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f <code>_ShallowTex<\/code> \u0438 <code>_SteepTex<\/code>). \u0417\u0430\u0442\u0435\u043c \u043e\u043d\u0438 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>steepness<\/code>:<\/p>\n<pre><code class=\"cpp\">float2 uv = W.xz;  \/\/ [0,1]-&gt;[-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);<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432 \u0447\u0430\u0441\u0442\u0438 \u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u0445 \u043f\u0435\u0441\u043a\u0430, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u0438 \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>lerp<\/code>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>slerp<\/code>, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>normalerp<\/code>.<\/p>\n<h3>\u0421\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u043e\u043b\u043d<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043a\u043e\u0434, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0441 \u0440\u0430\u0437\u043e\u0447\u0430\u0440\u043e\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0434\u044e\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044e \u0434\u0432\u0443\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u0435 \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u0442 \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u044c \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">\/\/ Steepness to blending steepness = pow(steepness, _SteepnessSharpnessPower);<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0438 \u0434\u0432\u0443\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0434\u043b\u044f \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u0438 \u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>pow<\/code>. \u041c\u044b \u0443\u0437\u043d\u0430\u043b\u0438, \u043a\u0430\u043a \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043c\u043e\u0451\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 <a href=\"https:\/\/www.alanzucconi.com\/2015\/06\/24\/physically-based-rendering\/\" rel=\"noopener noreferrer\">Physically Based Rendering<\/a>.<\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0434\u0432\u0430 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430. \u041d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0446\u0432\u0435\u0442\u0430 \u043e\u0442 \u0447\u0451\u0440\u043d\u043e\u0433\u043e \u043a \u0431\u0435\u043b\u043e\u043c\u0443, \u043b\u0438\u043d\u0435\u0439\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043e\u0441\u0438 X \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>c = uv.x<\/code>. \u041d\u0430 \u043d\u0438\u0436\u043d\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>c = pow(uv.x*1.5)*3.0<\/code>:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ae4\/db9\/84c\/ae4db984c649c8ae5357b71357ef208e.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/bf0\/214\/1b2\/bf02141b275e8ae5596f7477016f5cc8.png\"><\/div>\n<p>  \u041b\u0435\u0433\u043a\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e <code>pow<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0437\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u0447\u0451\u0440\u043d\u044b\u043c \u0438 \u0431\u0435\u043b\u044b\u043c. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438, \u044d\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u0438\u0445 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0451\u0442\u043a\u0438\u0435 \u043a\u0440\u0430\u044f.<\/p>\n<h2>\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u044e\u043d<\/h2>\n<p>  \u0412\u0441\u0451, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e. \u041d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u0412\u043e\u043b\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 <em>\u043a\u0440\u0443\u0442\u0438\u0437\u043d\u044b<\/em>, \u043d\u043e \u043d\u0435 \u043e\u0442 <em>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/em>. \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u0432\u043e\u043b\u043d\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u043c\u0438 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0435\u0442\u0435\u0440 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0443\u0435\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e\u043b\u043d\u044b \u0435\u0449\u0451 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u0435\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 (\u0441\u043c. \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0438\u0436\u0435). \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u044e\u043d\u044b \u043e\u0441\u0438 X \u0438\u043b\u0438 \u043e\u0441\u0438 Z.<\/p>\n<div class=\"scrollable-table\">\n<table>\n<tbody>\n<tr>\n<td><\/td>\n<td><strong>\u041a\u0440\u0443\u0442\u0430\u044f<\/strong><\/td>\n<td><strong>\u041f\u043b\u043e\u0441\u043a\u0430\u044f<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>X<\/strong><\/td>\n<td>\u043a\u0440\u0443\u0442\u043e\u0439 x<\/td>\n<td>\u043f\u043b\u043e\u0441\u043a\u0438\u0439 x<\/td>\n<\/tr>\n<tr>\n<td><strong>Z<\/strong><\/td>\n<td>\u043a\u0440\u0443\u0442\u043e\u0439 z<\/td>\n<td>\u043f\u043b\u043e\u0441\u043a\u0438\u0439 z<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u044e\u043d\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0438 Z. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u044b, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e <code>float3 UP_WORLD = float3(0, 1, 0);<\/code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>float3 Z_WORLD = float3(0, 0, 1);<\/code>.<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433 \u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432\u0430\u043c. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 Unity.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0435\u0440\u0438\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432 \u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 \u043f\u0435\u0441\u043a\u0430 \u0438\u0433\u0440\u044b Journey.<\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/509\/4c1\/65b\/5094c165b5f2e1ba10696fec1641482c.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/828\/9b4\/997\/8289b49971bbe0046845f71284790124.png\"><\/div>\n<p>  <i>\u0414\u043e \u0438 \u043f\u043e\u0441\u043b\u0435<\/i><\/p>\n<p>  \u0425\u043e\u0447\u0443 \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c \u0432\u0430\u0441 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u044d\u0442\u043e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0438 \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0448\u0435\u0439\u0434\u0435\u0440.<\/p>\n<h3>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>  \u0412\u0438\u0434\u0435\u043e\u0438\u0433\u0440\u0430 <a href=\"http:\/\/thatgamecompany.com\/journey\/\" rel=\"noopener noreferrer\">Journey<\/a> \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 <strong>Thatgamecompany<\/strong> \u0438 \u0438\u0437\u0434\u0430\u043d\u0430 <strong>Sony Computer Entertainment<\/strong>. \u041e\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f PC (<a href=\"https:\/\/www.epicgames.com\/store\/en-US\/product\/journey\/home\" rel=\"noopener noreferrer\">Epic Store<\/a>) \u0438 PS4 (<a href=\"https:\/\/www.playstation.com\/en-gb\/games\/journey-ps4\/\" rel=\"noopener noreferrer\">PS Store<\/a>).<\/p>\n<p>  3D-\u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u044e\u043d, \u0444\u043e\u043d\u044b \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b <a href=\"https:\/\/github.com\/AtwoodDeng\/JourneySand\" rel=\"noopener noreferrer\">Jiadi Deng<\/a>.<\/p>\n<p>  3D-\u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 Journey \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435 FacePunch (\u043d\u044b\u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u043c).<\/p>\n<h2>\u041f\u0430\u043a\u0435\u0442 Unity<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442, \u0442\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 Unity \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0430 <a href=\"https:\/\/www.patreon.com\/posts\/30540389\/\" rel=\"noopener noreferrer\">Patreon<\/a>. \u0412 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435, \u043e\u0442 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0434\u043e 3D-\u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/487154\/\"> https:\/\/habr.com\/ru\/post\/487154\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/487154\/\"><a href=\"https:\/\/habr.com\/ru\/post\/476448\/\">\u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0437\u0434\u0435\u0441\u044c<\/a><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/828\/9b4\/997\/8289b49971bbe0046845f71284790124.png\" alt=\"image\"><\/div>\n<p>  <\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 4: \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u044e\u043d\u044b \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u043e\u043a\u0435\u0430\u043d \u043f\u0435\u0441\u043a\u0430.<\/p>\n<p>  \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0440\u0438\u0433\u0443\u044e\u0449\u0438\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043f\u0435\u0441\u043a\u0430 <em>Journey<\/em> \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u044e\u043d\u044b \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0442 \u0432 \u043b\u0443\u0447\u0430\u0445 \u0441\u0432\u0435\u0442\u0430. \u0422\u0430\u043a\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u043c (specular)<\/strong>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043e\u0442 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 <em>speculum<\/em>, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0433\u043e <em>\u00ab\u0437\u0435\u0440\u043a\u0430\u043b\u043e\u00bb<\/em>. <strong>Specular reflection<\/strong> \u2014 \u044d\u0442\u043e \u00ab\u0437\u043e\u043d\u0442\u0438\u0447\u043d\u043e\u0435\u00bb \u043f\u043e\u043d\u044f\u0442\u0438\u0435, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0435\u0435 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0432\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0430 \u043d\u0435 \u0440\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u043e\u0433\u043b\u043e\u0449\u0430\u0435\u0442\u0441\u044f. \u0418\u043c\u0435\u043d\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0438 \u0432\u043e\u0434\u0430, \u0438 \u043e\u0442\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0438\u043c\u0438.<\/p>\n<p>  \u0412 <em>Journey<\/em> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439: <strong>\u0441\u0432\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0430\u0451\u0432 (rim lighting)<\/strong>, <strong>\u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u043a\u0435\u0430\u043d\u0430 (ocean specular)<\/strong> \u0438 <strong>\u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0431\u043b\u0435\u0441\u043a\u043e\u0432 (glitter reflections)<\/strong>, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043d\u0438\u0436\u0435.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-298597","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/298597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=298597"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/298597\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=298597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=298597"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=298597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}