{"id":334277,"date":"2022-06-09T15:01:35","date_gmt":"2022-06-09T15:01:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=334277"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=334277","title":{"rendered":"<span>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u043d\u0430\u043b\u0435\u0442\u0443<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0432 \u0434\u0430\u043b\u0451\u043a\u043e\u043c 2013 \u0433\u043e\u0434\u0443 \u043a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u0437 2006 \u0433\u043e\u0434\u0430 [4]. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u043e\u0442\u043a\u0430\u0437\u0443 \u043e\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b \u0438 \u0432 2022, \u0430 \u0432\u044b\u0432\u043e\u0434 \u0444\u043e\u0440\u043c\u0443\u043b \u0438\u0437\u043b\u043e\u0436\u0435\u043d \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438 \u0431\u0435\u0437 \u0438\u0437\u043b\u0438\u0448\u0435\u0441\u0442\u0432.<\/p>\n<p>\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u043d\u0430\u043b\u0435\u0442\u0443 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435, \u0447\u0442\u043e \u043f\u043e \u0438\u0440\u043e\u043d\u0438\u0438 \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 [2] \u043e\u0442 1997 \u0433\u043e\u0434\u0430:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/15b\/935\/4af\/15b9354af8d08ebbd84779c4e46e4937.png\" alt=\"\" title=\"\" width=\"436\" height=\"70\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/15b\/935\/4af\/15b9354af8d08ebbd84779c4e46e4937.png\"\/><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043c\u0435\u0442\u043e\u0434 \u0431\u0430\u043c\u043f-\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a \u0436\u0435\u043b\u0435\u0437\u0443 \u043f\u043e\u043c\u0438\u043c\u043e \u0442\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u0424\u043e\u043d\u0433\u0443. <strong>\u041c\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430<\/strong>&#8230;<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0437\u0430 \u043e\u043a\u043d\u043e\u043c \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 1997 \u0433\u043e\u0434, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u0430\u0451\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0441\u0441\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p> \u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u0441\u044f \u0448\u0438\u043d\u0430 \u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0448\u0438\u043d.<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u043e\u043d\u043e\u043c\u044f\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440\u044b \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u044f\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043f\u0440\u0438 \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0445<\/p>\n<\/li>\n<\/ul>\n<h2>\u041b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a \u043d\u0438\u043c<\/h2>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0435\u0442\u0430\u0444\u043e\u0440\u043e\u0439 \u043d\u0430 C++. \u041f\u0443\u0441\u0442\u044c \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>Vector3<\/code> \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0438 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>Covector3<\/code> \u0434\u043b\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/a>. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043f\u0438\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043e\u043d \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043f\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0445 (\u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0432 \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 <a href=\"https:\/\/habr.com\/ru\/post\/529978\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e<\/a>). \u041a\u0430\u043a \u0432\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u043d\u0430\u0435\u0442\u0435, \u043d\u043e\u0440\u043c\u0430\u043b\u044c &#8212; \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u0430\u043a \u043c\u044b \u0435\u0451 \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">Vector3 tangent; Vector3 bitangent; Covector3 normal; Covector3 perturb_normal( float a, float b, float c ) {     return         a * tangent +         b * bitangent +         c * normal;         \/\/ ^^^^ compile-error: type mismatch for operator + }<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0432 \u043e\u0434\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0435\u0434\u0451\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 <code>normal<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u0442\u0438\u043f\u043e\u043c <code>Covector3<\/code>, \u0442\u043e <code>tangent<\/code> \u0438 <code>bitangent<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0442\u043e\u0433\u043e \u0436\u0435 \u0442\u0438\u043f\u0430, \u0438\u043d\u0430\u0447\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0432 \u043a\u043e\u0434\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e \u0442\u0438\u043f\u043e\u043c <code>vec3<\/code> \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<h2>\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/h2>\n<p>\u041f\u0440\u0438\u0441\u043a\u043e\u0440\u0431\u043d\u043e, \u043d\u043e &#171;\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e&#187; \u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u0431\u044b\u043b\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 [2] \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0435 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435. \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u0435\u043d. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u0441 <em>\u043d\u0435\u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0435\u0439 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d<\/em>. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0432\u0432\u0451\u043b <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{T}\" alt=\"\\vec{T}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/858\/4fe\/41f\/8584fe41f9aac3b33e0a8d01e02d32d6.svg\" width=\"14\" height=\"21\"\/> (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, &#171;\u043a\u043e\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c&#187;) \u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1c0\/e65\/695\/1c0e65695038076c7d365d3d16825f31.svg\" width=\"14\" height=\"21\"\/> (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e-\u0431\u0438-\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u043e\u0440\u043e\u0442\u043e \u044d\u0442\u043e \u043d\u0438 \u0437\u0432\u0443\u0447\u0430\u043b\u043e) \u043a\u0430\u043a \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0438\u043d\u0430\u0447\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0431\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, TBN-\u0431\u0430\u0437\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BA%D0%B0%D1%81%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%BE\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c<\/a>.<\/p>\n<h2>\u042d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0411\u043b\u0438\u043d\u043d\u0430<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/454\/053\/12f\/45405312f80b4f53ae781199a8fdc753.svg\" width=\"14\" height=\"21\"\/> \u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/68d\/a7f\/7c7\/68da7f7c745434616cf60e28868737da.svg\" width=\"14\" height=\"21\"\/> \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0411\u043b\u0438\u043d\u043d\u0430 [1] \u043e \u0431\u0430\u043c\u043f-\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0435. \u0411\u043b\u0438\u043d\u043d \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043a\u0440\u0438\u0432\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0411\u0435\u0437\u044c\u0435), \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{p}_u\" alt=\"\\vec{p}_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/00e\/76d\/efc\/00e76defc7a52cc378f69b4904e4d2e3.svg\" width=\"21\" height=\"21\"\/> \u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{p}_v\" alt=\"\\vec{p}_v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a91\/972\/390\/a91972390b45ff2585a12f02cf27ae9f.svg\" width=\"20\" height=\"21\"\/> \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec p\" alt=\"\\vec p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/28e\/64d\/237\/28e64d2374606363f52581b7523604ae.svg\" width=\"11\" height=\"20\"\/>\u043f\u043e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u\" alt=\"u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/330\/26f\/d0c\/33026fd0c9276f663b66fd0191b795c5.svg\" width=\"11\" height=\"12\"\/> \u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"v\" alt=\"v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7af\/3bc\/f33\/7af3bcf3395bfa1eee7fdfa70be18016.svg\" width=\"9\" height=\"12\"\/>.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/947\/69c\/11a\/94769c11a3dc1d6a3dc353758cb36edc.png\" alt=\"\" title=\"\" width=\"360\" height=\"112\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/947\/69c\/11a\/94769c11a3dc1d6a3dc353758cb36edc.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043e\u043d \u043f\u0438\u0448\u0435\u0442 \u043d\u0438\u0436\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043a\u0430\u043a \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445, \u0442\u043e \u0435\u0441\u0442\u044c <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{p}_u = \\frac{\\partial\\vec p}{\\partial u}\" alt=\"\\vec{p}_u = \\frac{\\partial\\vec p}{\\partial u}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/414\/ed7\/8cd\/414ed78cddd18acca336986d1ce1d038.svg\" width=\"73\" height=\"43\"\/>. \u041d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043e\u043d \u0432\u0432\u043e\u0434\u0438\u0442 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec N = \\vec{p}_u\\times \\vec{p}_v\" alt=\"\\vec N = \\vec{p}_u\\times \\vec{p}_v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aaf\/28e\/dff\/aaf28edffa8d45ebd64664b9f16b328c.svg\" width=\"103\" height=\"25\"\/>\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u044b\u0441\u043e\u0442 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"f\" alt=\"f\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f46\/171\/326\/f4617132631bbc8f4b2c9decc0ca6a86.svg\" width=\"10\" height=\"20\"\/>. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\vec{N}' \\simeq \\vec{N} + \\frac{f_u \\vec{N} \\times \\vec{p}_v + f_v \\vec{p}_u \\times \\vec{N}}{|\\vec{N}|}\" alt=\"\\vec{N}' \\simeq \\vec{N} + \\frac{f_u \\vec{N} \\times \\vec{p}_v + f_v \\vec{p}_u \\times \\vec{N}}{|\\vec{N}|}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/281\/148\/8ab\/2811488ab9b1895f3d303618e29df203.svg\" width=\"269\" height=\"57\"\/><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{N} \\times \\vec{p}_v\" alt=\"\\vec{N} \\times \\vec{p}_v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/614\/0c8\/02b\/6140c802bcfcc3c76050f3326c80a192.svg\" width=\"58\" height=\"25\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{p}_u \\times \\vec{N}\" alt=\"\\vec{p}_u \\times \\vec{N}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/33a\/850\/4b0\/33a8504b02900cd18582d105e4fa8e9c.svg\" width=\"60\" height=\"25\"\/>. \u041e\u043d\u0438 <em>\u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u044b<\/em> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{p}_u\" alt=\"\\vec{p}_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a24\/ee7\/f35\/a24ee7f35e0fdb18d276a7ffe44cd8b8.svg\" width=\"21\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{p}_v\" alt=\"\\vec{p}_v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1a4\/15f\/e14\/1a415fe14167318ced31d19be1bf5f95.svg\" width=\"20\" height=\"21\"\/>\u0432 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438, \u0438 \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0431\u0430\u0437\u0438\u0441 \u0434\u043b\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"f_u\" alt=\"f_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/915\/fd1\/475\/915fd147515bda683e9b8e2def1f1646.svg\" width=\"19\" height=\"20\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"f_v\" alt=\"f_v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/125\/796\/704\/125796704f3666046e428c01e19f63a4.svg\" width=\"17\" height=\"20\"\/>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0438 \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0447\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0445. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u0445 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u044e \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044e \u0442\u0438\u043f\u043e\u0432. \u0415\u0441\u043b\u0438 \u043c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u044d\u0442\u0438 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u043d\u0430 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"|\\vec N|\" alt=\"|\\vec N|\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/27c\/6ec\/f1c\/27c6ecf1ccc3039c408387e7ccc6627c.svg\" width=\"27\" height=\"25\"\/>\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u043c \u0438\u0445 \u0437\u043d\u0430\u043a, \u0442\u043e \u043f\u0440\u0438\u0434\u0451\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/05b\/101\/d03\/05b101d031346ec36bdfe2eddf5f9484.svg\" width=\"14\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/001\/886\/c42\/001886c42abc0d8a0bb319b7b98a7770.svg\" width=\"14\" height=\"21\"\/>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align*} \\vec{T} &amp;= -\\frac{\\vec{N} \\times \\vec{p}_v}{|\\vec{N}|^2} = \\nabla u, &amp; \\vec{B} &amp;= -\\frac{\\vec{p}_u \\times \\vec{N}}{|\\vec{N}|^2} = \\nabla v, \\end{align*}\" alt=\"\\begin{align*} \\vec{T} &amp;= -\\frac{\\vec{N} \\times \\vec{p}_v}{|\\vec{N}|^2} = \\nabla u, &amp; \\vec{B} &amp;= -\\frac{\\vec{p}_u \\times \\vec{N}}{|\\vec{N}|^2} = \\nabla v, \\end{align*}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/215\/75b\/a2b\/21575ba2b52c61b7954b7c3780fff77b.svg\" width=\"391\" height=\"56\"\/><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\vec{N}' \\simeq \\hat{N} - f_u \\vec{T} - f_v \\vec{B} ,\" alt=\"\\vec{N}' \\simeq \\hat{N} - f_u \\vec{T} - f_v \\vec{B} ,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a8c\/7e0\/009\/a8c7e00096dd633f175682150ef54fb0.svg\" width=\"178\" height=\"27\"\/><\/p>\n<p>\u0433\u0434\u0435 \u043a\u0440\u044b\u0448\u0435\u0447\u043a\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c. \u042d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u0432 [4]. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c9b\/ec6\/562\/c9bec6562c18896e11077f3a34a36ec5.svg\" width=\"14\" height=\"21\"\/>\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u\" alt=\"u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e6\/f90\/9c9\/2e6f909c956ce67f1010fbf1efc78b30.svg\" width=\"11\" height=\"12\"\/>, \u0430 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b72\/f71\/6ac\/b72f716ac2fecccf0e5a847357fbb47c.svg\" width=\"14\" height=\"21\"\/>\u2014 \u043a\u0430\u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"v\" alt=\"v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba9\/863\/0d0\/ba98630d03b54192acc8a15703beec21.svg\" width=\"9\" height=\"12\"\/>. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0432\u0437\u0430\u0438\u043c\u043d\u043e-\u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 (\u0442\u043e\u0447\u043d\u0435\u0435, \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0430) <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c27\/165\/3be\/c271653be902c19b9252d7911b79c17f.svg\" width=\"14\" height=\"21\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/753\/422\/572\/75342257212e11c119dc4c97d72de197.svg\" width=\"14\" height=\"21\"\/> \u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec N\" alt=\"\\vec N\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7ca\/5fa\/b6c\/7ca5fab6cec0723dc803b89533d2b697.svg\" width=\"17\" height=\"21\"\/>, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0431\u0430\u0437\u0438\u0441 \u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u0410 \u0435\u0449\u0451 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/142\/3d1\/9f8\/1423d19f8e8e3382f9d4a00e53540da4.svg\" width=\"14\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/af9\/648\/4ea\/af96484ea090251d2740c75b9a4fa8a5.svg\" width=\"14\" height=\"21\"\/>\u044d\u0442\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u\" alt=\"u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fdf\/cdc\/65a\/fdfcdc65a23e4588aa7400efcfb15941.svg\" width=\"11\" height=\"12\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"v\" alt=\"v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9eb\/1fc\/f6b\/9eb1fcf6bbd7cef0d82acd1588f8b7d1.svg\" width=\"9\" height=\"12\"\/>. \u041c\u043e\u0434\u0443\u043b\u044c \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442\u044b, \u043e \u0447\u0451\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043d\u0438\u0436\u0435.<\/p>\n<h2>\u0417\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0442\u043e \u0447\u0435\u043c\u0443 \u0432\u0430\u0441 \u0443\u0447\u0438\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435<\/h2>\n<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u0431\u0435\u0440\u0443\u0442 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b3\/958\/d15\/5b3958d1598c29ca6ed41c66dd67f55c.svg\" width=\"14\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/27b\/d45\/973\/27bd45973ce57cd3253ae1df61f52957.svg\" width=\"14\" height=\"21\"\/>\u0437\u0430 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{p}_u\" alt=\"\\vec{p}_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d3f\/50d\/73c\/d3f50d73cd4fc7552240df99fb3cc8d1.svg\" width=\"21\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{p}_v\" alt=\"\\vec{p}_v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eae\/956\/aab\/eae956aab996fb083bd4a96bf96a60b3.svg\" width=\"20\" height=\"21\"\/>, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u043a\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c &#171;\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435&#187;, \u0432\u043e\u0437\u044c\u043c\u0451\u043c &#171;\u043a\u043e\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435&#187; \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f: \u041f\u0438\u0440\u0441\u0438 \u0441 \u0441\u043e\u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 [2] \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"f_u\" alt=\"f_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a2\/d99\/c04\/3a2d99c046370f621f7db7e1ec6b9f39.svg\" width=\"19\" height=\"20\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"f_v\" alt=\"f_v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/188\/afb\/c5f\/188afbc5f3a3460354cd587f990a704a.svg\" width=\"17\" height=\"20\"\/>(\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442) \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0445 \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u041e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u043e &#171;\u043a\u0430\u0440\u0442\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439&#187;, \u043d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e &#171;\u043a\u0430\u0440\u0442\u0430 \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u044b \u0443\u043a\u043b\u043e\u043d\u043e\u0432&#187;, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0435\u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"http:\/\/mmikkelsen3d.blogspot.de\/2011\/07\/derivative-maps.html\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u0440\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445<\/a>. \u0412 \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u044b. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c \u0441\u0438\u043b\u044b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u041a\u0438\u043b\u0433\u0430\u0440\u0434 [3] \u0432\u0432\u043e\u0434\u0438\u0442 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043a\u0430\u043a <em>\u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f<\/em>, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044f\u0441\u044c \u043e\u0442 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0439 \u043f\u0443\u0442\u0451\u043c \u044f\u0432\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\vec{N}' = a \\vec{T} + b \\vec{B} + c \\hat{N} ,\" alt=\"\\vec{N}' = a \\vec{T} + b \\vec{B} + c \\hat{N} ,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eb6\/a38\/279\/eb6a38279e4a1fec3e3b26d027bfdaac.svg\" width=\"168\" height=\"27\"\/><\/p>\n<p>\u0433\u0434\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"a\" alt=\"a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/59d\/54e\/566\/59d54e566c8267929d89aabd15a985b4.svg\" width=\"10\" height=\"12\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"b\" alt=\"b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c30\/44a\/ffe\/c3044affee401a3baec4e6039a0e17e1.svg\" width=\"8\" height=\"16\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"c\" alt=\"c\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/204\/6dd\/c84\/2046ddc84954e953709d8d89a9cb4c61.svg\" width=\"8\" height=\"12\"\/>\u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041c\u043d\u043e\u0433\u0438\u0435 \u0434\u0443\u043c\u0430\u044e\u0442, \u0447\u0442\u043e \u0432 \u043a\u0430\u0440\u0442\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u043d\u043e \u044d\u0442\u043e \u0432\u0435\u0440\u043d\u043e \u043b\u0438\u0448\u044c \u043e\u0442\u0447\u0430\u0441\u0442\u0438. \u0418\u0434\u0435\u044f \u041a\u0438\u043b\u0433\u0430\u0440\u0434\u0430 \u0431\u044b\u043b\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439: \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u0430\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c &#8212; \u044d\u0442\u043e [0, 0, 1], \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c. \u0412 \u043e\u0431\u0449\u0435\u043c \u0434\u0430, \u043a\u0430\u0440\u0442\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u044b\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u043c, \u043d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f. \u0422\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u0431\u043b\u0435\u043d\u0434\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0440\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u043c\u0438. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043e\u0431\u0437\u043e\u0440 <a href=\"http:\/\/blog.selfshadow.com\/publications\/blending-in-detail\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434 \u0444\u043e\u0440\u043c\u0443\u043b \u0434\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430, \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u043a \u0440\u0435\u0448\u0451\u043d\u043d\u043e\u0439 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0411\u043b\u0438\u043d\u043d\u0430. \u0418\u0437 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0434\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 (\u043a\u043e)\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u043a \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u\" alt=\"u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b2\/3b0\/49c\/6b23b049cdfc8fb51ebee754f79c9790.svg\" width=\"11\" height=\"12\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"v\" alt=\"v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/91b\/701\/5a1\/91b7015a16dd8ca6d769eb4b86e8b996.svg\" width=\"9\" height=\"12\"\/>: <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{T} = \\nabla u\" alt=\"\\vec{T} = \\nabla u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d4\/58e\/926\/8d458e926240fad4fbda24ca26cf8f5c.svg\" width=\"65\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{B} = \\nabla v\" alt=\"\\vec{B} = \\nabla v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b76\/fbe\/d8e\/b76fbed8e9822ef21fc25fbf00aca3cd.svg\" width=\"63\" height=\"21\"\/>, \u0430 \u0441\u0430\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0435\u044f\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u0435\u0440\u0448\u0438\u043d\u044b <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"p\" alt=\"p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/32e\/a4e\/aa0\/32ea4eaa01f189dcefaac2de781b9e9a.svg\" width=\"10\" height=\"15\"\/>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align*} \\mathrm{d} u &amp;= \\vec{T} \\cdot \\mathrm{d} \\vec{p} , &amp; \\mathrm{d} v &amp;= \\vec{B} \\cdot \\mathrm{d} \\vec{p} , \\end{align*}\" alt=\"\\begin{align*} \\mathrm{d} u &amp;= \\vec{T} \\cdot \\mathrm{d} \\vec{p} , &amp; \\mathrm{d} v &amp;= \\vec{B} \\cdot \\mathrm{d} \\vec{p} , \\end{align*}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/25a\/859\/a92\/25a859a92a688b861e447cd541b5c54c.svg\" width=\"240\" height=\"25\"\/><\/p>\n<p>\u0433\u0434\u0435 \u0442\u043e\u0447\u043a\u0430 &#8212; \u044d\u0442\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0432\u0432\u0435\u0434\u0451\u043c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta u_1\" alt=\"\\Delta u_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b1c\/033\/919\/b1c033919a6d742d462d46c8a0cee4e5.svg\" width=\"35\" height=\"19\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta u_2\" alt=\"\\Delta u_2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/560\/dd8\/b8d\/560dd8b8dc5c7cb4fe646576dcecfc3e.svg\" width=\"35\" height=\"19\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta v_1\" alt=\"\\Delta v_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a84\/e2b\/b4d\/a84e2bb4d8be7ec1daaa890f7be71839.svg\" width=\"33\" height=\"19\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta v_2\" alt=\"\\Delta v_2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/13f\/205\/d86\/13f205d8656c5c2df3a6e7a8f8910b12.svg\" width=\"33\" height=\"19\"\/>, \u0430 \u0442\u0430\u043a \u0436\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p}_1\" alt=\"\\Delta \\vec{p}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/263\/653\/538\/2636535385d51dd1fb274e1764df6196.svg\" width=\"35\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p}_2\" alt=\"\\Delta \\vec{p}_2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3be\/6e8\/458\/3be6e8458dc8937bb98c256b17040765.svg\" width=\"35\" height=\"21\"\/>. \u0418\u0441\u043a\u043e\u043c\u044b\u0435 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align*} \\Delta u_1 &amp;= \\vec{T} \\cdot \\Delta \\vec{p_1} , &amp; \\Delta v_1 &amp;= \\vec{B} \\cdot \\Delta \\vec{p_1} , \\\\ \\Delta u_2 &amp;= \\vec{T} \\cdot \\Delta \\vec{p_2} , &amp; \\Delta v_2 &amp;= \\vec{B} \\cdot \\Delta \\vec{p_2} , \\\\ 0 &amp;= \\vec{T} \\cdot \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} , &amp; 0 &amp;= \\vec{B} \\cdot \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2}. \\end{align*}\" alt=\"\\begin{align*} \\Delta u_1 &amp;= \\vec{T} \\cdot \\Delta \\vec{p_1} , &amp; \\Delta v_1 &amp;= \\vec{B} \\cdot \\Delta \\vec{p_1} , \\\\ \\Delta u_2 &amp;= \\vec{T} \\cdot \\Delta \\vec{p_2} , &amp; \\Delta v_2 &amp;= \\vec{B} \\cdot \\Delta \\vec{p_2} , \\\\ 0 &amp;= \\vec{T} \\cdot \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} , &amp; 0 &amp;= \\vec{B} \\cdot \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2}. \\end{align*}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/81a\/55b\/e3b\/81a55be3bb309af95d80f410ce9f3939.svg\" width=\"407\" height=\"84\"\/><\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0447\u0442\u043e (\u043a\u043e)\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0435\u0437 \u043d\u0435\u0451 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u0434\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430. \u041e\u0442\u0441\u044e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/43e\/86d\/62c\/43e86d62c121b2115364e5d9adff1b30.svg\" width=\"14\" height=\"21\"\/>\u0432 \u043c\u0430\u0442\u0440\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\vec{T} = \\begin{pmatrix} \\Delta \\vec{p_1} \\\\ \\Delta \\vec{p_2} \\\\ \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\end{pmatrix}^{-1} \\begin{pmatrix} \\Delta u_1 \\\\ \\Delta u_2 \\\\ 0 \\end{pmatrix}.\" alt=\"\\vec{T} = \\begin{pmatrix} \\Delta \\vec{p_1} \\\\ \\Delta \\vec{p_2} \\\\ \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\end{pmatrix}^{-1} \\begin{pmatrix} \\Delta u_1 \\\\ \\Delta u_2 \\\\ 0 \\end{pmatrix}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b40\/bd6\/e71\/b40bd6e71b7f27cad01d37fcfedb1b67.svg\" width=\"271\" height=\"91\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ea\/5f4\/568\/3ea5f4568c614bd4f46641b098bf8459.svg\" width=\"14\" height=\"21\"\/> \u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta v\" alt=\"\\Delta v\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cf7\/e12\/37c\/cf7e1237c0958107f62985f7327919a1.svg\" width=\"25\" height=\"17\"\/>\u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e.<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043a\u043e\u0434\u0443 \u0448\u0435\u0439\u0434\u0435\u0440\u0430<\/h2>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0441\u0442\u0440\u0430\u0448\u0430\u044e\u0449\u0435 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435! \u041e\u0434\u043d\u0430\u043a\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0438, \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u0435\u0441\u0442\u0438 \u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 GLSL \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b 3\u04453. \u041f\u043e\u0445\u043e\u0436\u0438\u0439 \u043a\u043e\u0434 \u043d\u0430 HLSL \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0441\u044f \u0432 \u043a\u043d\u0438\u0433\u0435, \u043d\u043e \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u044f \u0435\u0433\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b. \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043a\u0430\u043a \u0438\u0437 \u0432\u0435\u0442\u043a\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B8%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D1%91%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0443\u044e<\/a> \u043c\u0430\u0442\u0440\u0438\u0446\u0443:<\/p>\n<pre><code class=\"cpp\">mat3 inverse3x3( mat3 M ) {     mat3 M_t = transpose( M );      float det = dot( cross( M_t[0], M_t[1] ), M_t[2] );      mat3 adjugate = mat3( cross( M_t[1], M_t[2] ), cross( M_t[2], M_t[0] ), cross( M_t[0], M_t[1] ) );      return adjugate \/ det; }<\/code><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0434, \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0441\u043a\u043e\u0431\u043a\u0438, \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u043d\u043e\u0432\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/613\/8c3\/07f\/6138c307f46415435a8d5576b49f5261.svg\" width=\"14\" height=\"21\"\/>. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\left| \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right|^2\" alt=\"\\left| \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right|^2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/710\/0b6\/b60\/7100b6b6044ec0e63a0f438a2bc724f7.svg\" width=\"110\" height=\"37\"\/>, \u0430 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0443\u0445 \u043d\u043e\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_1}_\\perp\" alt=\"\\Delta \\vec{p_1}_\\perp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f9\/368\/b5e\/5f9368b5eae6c0f8ef00c2dedbe4b597.svg\" width=\"46\" height=\"27\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_2}_\\perp\" alt=\"\\Delta \\vec{p_2}_\\perp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a4\/33e\/de1\/7a433ede115c5ad8565c907e78e1b0c3.svg\" width=\"46\" height=\"27\"\/>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\vec{T} = \\frac{1}{\\left| \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right|^2} \\begin{pmatrix} \\Delta \\vec{p_2}_\\perp \\\\ \\Delta \\vec{p_1}_\\perp \\\\ \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\end{pmatrix}^\\mathrm{T} \\begin{pmatrix} \\Delta u_1 \\\\ \\Delta u_2 \\\\ 0 \\end{pmatrix} ,\" alt=\"\\vec{T} = \\frac{1}{\\left| \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right|^2} \\begin{pmatrix} \\Delta \\vec{p_2}_\\perp \\\\ \\Delta \\vec{p_1}_\\perp \\\\ \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\end{pmatrix}^\\mathrm{T} \\begin{pmatrix} \\Delta u_1 \\\\ \\Delta u_2 \\\\ 0 \\end{pmatrix} ,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/99d\/c76\/825\/99dc76825c6997a4c1b09c21527beae7.svg\" width=\"380\" height=\"93\"\/><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align*} \\Delta \\vec{p_2}_\\perp &amp;= \\Delta \\vec{p_2} \\times \\left( \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right) , \\\\ \\Delta \\vec{p_1}_\\perp &amp;= \\left( \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right) \\times \\Delta \\vec{p_1} . \\end{align*}\" alt=\"\\begin{align*} \\Delta \\vec{p_2}_\\perp &amp;= \\Delta \\vec{p_2} \\times \\left( \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right) , \\\\ \\Delta \\vec{p_1}_\\perp &amp;= \\left( \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right) \\times \\Delta \\vec{p_1} . \\end{align*}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fd1\/636\/76e\/fd163676e0f069893ac6234b61565c86.svg\" width=\"255\" height=\"75\"\/><\/p>\n<p>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f, \u0447\u0442\u043e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_1}_\\perp\" alt=\"\\Delta \\vec{p_1}_\\perp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b5a\/538\/9c7\/b5a5389c716d1f1b7d1cf88a2ae8d0f8.svg\" width=\"46\" height=\"27\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_2}_\\perp\" alt=\"\\Delta \\vec{p_2}_\\perp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d00\/6c3\/a01\/d006c3a0179cd4a3ba4b43a74dd3cb9e.svg\" width=\"46\" height=\"27\"\/>\u044d\u0442\u043e <em>\u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u044b<\/em> \u043a \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043e\u043d\u0438 <em>\u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b<\/em>, \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0431\u0430\u0437\u0438\u0441 <em>\u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u043e\u0433\u043e \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>. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043d\u0435\u0432\u0430\u0436\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 0.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u044b ( <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_1}_\\perp\" alt=\"\\Delta \\vec{p_1}_\\perp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/620\/10e\/f1b\/62010ef1b6056c7d0aaaf52357a9abc5.svg\" width=\"46\" height=\"27\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_2}_\\perp\" alt=\"\\Delta \\vec{p_2}_\\perp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d66\/9f7\/651\/d669f7651be774a58ce379d706367413.svg\" width=\"46\" height=\"27\"\/>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043a \u0433\u0440\u0430\u043d\u0438 ( <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_1} \\times \\Delta \\vec{p_2}\" alt=\"\\Delta \\vec{p_1} \\times \\Delta \\vec{p_2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e7d\/22e\/7f1\/e7d22e7f18ad2cecc7728f85bfa93462.svg\" width=\"91\" height=\"26\"\/>) \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u0432\u0435\u0440\u0448\u0438\u043d\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u0434\u0430\u0451\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c (\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\left| \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right|^2\" alt=\"\\left| \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right|^2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/99e\/90b\/b0f\/99e90bb0f082d1c887c0cf212c50fa0c.svg\" width=\"110\" height=\"37\"\/>) \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c, \u043e \u0447\u0451\u043c \u043d\u0438\u0436\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u043c:<\/p>\n<pre><code class=\"cpp\">mat3 cotangent_frame( vec3 N, vec3 p, vec2 uv ) {     \/\/ \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435     vec3 dp1 = dFdx( p );     vec3 dp2 = dFdy( p );     vec2 duv1 = dFdx( uv );     vec2 duv2 = dFdy( uv );          \/\/ \u0420\u0435\u0448\u0430\u0435\u043c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443     vec3 dp2perp = cross( dp2, N );     vec3 dp1perp = cross( N, dp1 );     vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;     vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;          \/\/ \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e-\u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441     float invmax = inversesqrt( max( dot(T,T), dot(B,B) ) );     return mat3( T * invmax, B * invmax, N ); } <\/code><\/pre>\n<h2>\u0418\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438<\/h2>\n<p>\u0412 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\left| \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right|^2\" alt=\"\\left| \\Delta \\vec{p_1} \\times \\Delta \\vec{p_2} \\right|^2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e81\/5d1\/958\/e815d1958deff9408e2066f81ebc10ac.svg\" width=\"110\" height=\"37\"\/>. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/291\/29d\/a07\/29129da07fb84fb93c389fe20b857361.svg\" width=\"14\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/744\/a46\/178\/744a4617859a7f82cf0e11f6ecc3dbae.svg\" width=\"14\" height=\"21\"\/> \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0443 \u043c\u043e\u0434\u0435\u043b\u0438. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b. \u0415\u0441\u043b\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c, \u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u0440\u0448\u0438\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec{T} = \\nabla u = \\left( \\frac{\\partial u}{\\partial x}, \\frac{\\partial u}{\\partial y}, \\frac{\\partial u}{\\partial z} \\right)\" alt=\"\\vec{T} = \\nabla u = \\left( \\frac{\\partial u}{\\partial x}, \\frac{\\partial u}{\\partial y}, \\frac{\\partial u}{\\partial z} \\right)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae2\/908\/099\/ae29080998c0b5dd687f19a0989acef9.svg\" width=\"217\" height=\"47\"\/>\u0438 (\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e) <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7d2\/7e5\/6c7\/7d27e56c783b2c875c04d8c71d1b2e00.svg\" width=\"14\" height=\"21\"\/>\u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec N\" alt=\"\\vec N\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/403\/094\/1bd\/4030941bdffbf1d01679a9f367c0176d.svg\" width=\"17\" height=\"21\"\/>. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u0443\u0449\u0435\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u0432\u044b\u0441\u043e\u0442 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b\u0430\u0441\u044c.<\/p>\n<p>\u0425\u043e\u0442\u044f \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043e\u043d\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u043c\u0430\u043f\u044b \u043d\u0430 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b (\u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430), \u044f \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0438 \u043d\u043e\u0440\u043c\u0438\u0440\u0443\u044e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/935\/b4f\/636\/935b4f6368fa1ba332312defab668dcb.svg\" width=\"14\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f4\/769\/ec3\/8f4769ec3e50a026d0a53887c85c3c5b.svg\" width=\"14\" height=\"21\"\/>\u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438\u0437 \u043d\u0438\u0445. \u042d\u0442\u043e\u0442 \u0445\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u0438\u043d\u044b <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec T\" alt=\"\\vec T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1f4\/3a8\/62c\/1f43a862c0d850c12581197cc3f1330d.svg\" width=\"14\" height=\"21\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\vec B\" alt=\"\\vec B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/205\/746\/b41\/205746b41a492cb80b59a737c3b30052.svg\" width=\"14\" height=\"21\"\/>, \u0438 \u0434\u0430\u0436\u0435 \u0441\u043a\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u0438\u043b\u0438 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044b\u0439 \u0431\u0430\u0437\u0438\u0441 \u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<h2>\u0411\u0435\u0441\u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_1} = \\Delta \\vec{p_2}_\\perp\" alt=\"\\Delta \\vec{p_1} = \\Delta \\vec{p_2}_\\perp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/607\/eb7\/14e\/607eb714ef6afc8da4a9292aaf7604a6.svg\" width=\"105\" height=\"27\"\/>\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Delta \\vec{p_2} = \\Delta \\vec{p_1}_\\perp\" alt=\"\\Delta \\vec{p_2} = \\Delta \\vec{p_1}_\\perp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/073\/478\/62b\/07347862b7ef6b0d25f23a2b1b5c6ec0.svg\" width=\"105\" height=\"27\"\/>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0439, \u0438 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u0430\u0442\u0435\u0442\u0443 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c \u043a\u0430\u0442\u0435\u0442\u043e\u043c. \u0412\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043d\u0435 \u0432\u043d\u043e\u0441\u0438\u0442 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439. \u0412 [4] \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u0430. \u0422\u0430\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0435\u0449\u0451 \u0434\u0432\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043d\u043e \u043f\u043e-\u043c\u043e\u0435\u043c\u0443 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0440\u0435\u0434\u0438\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443 \u0435\u0441\u043b\u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<h2>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0451 \u0432\u043e\u0435\u0434\u0438\u043d\u043e<\/h2>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u043c\u0443\u0442\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c. \u042d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>perturb_normal<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0435\u043a\u0442\u043e\u0440 \u0438\u0437 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u043a\u0430\u043c\u0435\u0440\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cpp\">vec3 perturb_normal( vec3 N, vec3 V, vec2 texcoord )  {      \/\/ N - \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c,     \/\/ V - \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438\u0437 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u043a\u0430\u043c\u0435\u0440\u0443     vec3 map = texture2D( mapBump, texcoord ).xyz; #ifdef WITH_NORMALMAP_UNSIGNED     map = map * 255.\/127. - 128.\/127.;  #endif  #ifdef WITH_NORMALMAP_2CHANNEL      map.z = sqrt( 1. - dot( map.xy, map.xy ) );  #endif  #ifdef WITH_NORMALMAP_GREEN_UP      map.y = -map.y;  #endif     mat3 TBN = cotangent_frame( N, -V, texcoord );      return normalize( TBN * map );  }<\/code><\/pre>\n<pre><code class=\"cpp\">varying vec3 g_vertexnormal;  varyingvec3 g_viewvector;\/\/ camera pos - vertex pos  varying vec2 g_texcoord;     void main()  {     vec3 N = normalize( g_vertexnormal );    #ifdef WITH_NORMALMAP      N = perturb_normal( N, g_viewvector, g_texcoord );  #endif        \/\/ ...  } <\/code><\/pre>\n<h2>\u0417\u0435\u043b\u0451\u043d\u0430\u044f \u043e\u0441\u044c<\/h2>\n<p>OpenGL \u0438 DirectX \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u0430\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 (0, 0) &#8212; \u044d\u0442\u043e \u0443\u0433\u043e\u043b \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e 3\u0434-\u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0438\u043d\u0430\u0447\u0435: \u043e\u043d\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0438\u0436\u043d\u0438\u0439 \u043b\u0435\u0432\u044b\u0439 \u0443\u0433\u043e\u043b uv-\u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0443\u0433\u043b\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u0438\u0441\u043a \u043f\u043e <a href=\"http:\/\/www.google.com\/search?q=normal+map&amp;tbm=isch\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c \u0432 \u0413\u0443\u0433\u043b\u0435<\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u043e \u0437\u0435\u043b\u0451\u043d\u043e\u043c \u043a\u0430\u043d\u0430\u043b\u0435 \u0432 \u043a\u0430\u0440\u0442\u0430\u0445 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439. \u0423 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0432\u0435\u0440\u0445, \u0430 \u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 &#8212; \u0432\u043d\u0438\u0437. \u041d\u0430\u0448\u0438 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0432\u0435\u0440\u0445 \u043f\u043e \u0434\u0432\u0443\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, 3ds Max \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u0442\u0430\u043a\u0438\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0435\u0435, \u043a\u0430\u043a \u043f\u0440\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0438 \u0437\u0435\u043b\u0451\u043d\u044b\u043c \u0441\u0432\u0435\u0442\u043e\u043c \u0441\u0432\u0435\u0440\u0445\u0443. \u042d\u0442\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043d\u0435\u0432\u043e\u043e\u0440\u0443\u0436\u0451\u043d\u043d\u044b\u043c \u0433\u043b\u0430\u0437\u043e\u043c.<\/p>\n<h2>\u041e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430\u0437\u0430\u0434<\/h2>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u0434\u0435\u0438. \u0425\u043e\u0442\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u044b\u043b \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043e\u043d \u0431\u044b\u043b \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0430\u0442 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0430\u0440\u044e\u0441\u044c \u0441 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u0445. \u041c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437 \u041c\u0430\u043a\u0441\u0430 \u0438\u043b\u0438 \u041c\u0430\u0439\u0438. \u0425\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0438 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043e\u0442\u0435\u0440\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0447\u0430\u0441\u0442\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e: \u0435\u0441\u0442\u044c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f, \u0435\u0441\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u043a\u0430\u0440\u0442\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439, \u0438 \u043e\u043d\u043e <em>\u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/em>.<\/p>\n<p>\u041d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0435. \u041a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u0435\u0440\u0435\u043d. \u041f\u043e\u0434 \u043d\u0435\u0433\u043e \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 (&#171;\u043a\u043e\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439&#187;) \u0431\u0430\u0437\u0438\u0441, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u0435\u043d. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c, \u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441.<\/p>\n<h2>\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/h2>\n<p>[1] <a href=\"http:\/\/research.microsoft.com\/pubs\/73939\/p286-blinn.pdf\" rel=\"noopener noreferrer nofollow\"><u>James Blinn, \u201cSimulation of wrinkled surfaces\u201d, SIGGRAPH 1978<\/u><\/a> <\/p>\n<p>[2] <a href=\"http:\/\/citeseerx.ist.psu.edu\/viewdoc\/summary?doi=10.1.1.42.4736\" rel=\"noopener noreferrer nofollow\"><u>Mark Peercy, John Airey, Brian Cabral, \u201cEfficient Bump Mapping Hardware\u201d, SIGGRAPH 1997<\/u><\/a> <\/p>\n<p>[3] <a href=\"http:\/\/citeseerx.ist.psu.edu\/viewdoc\/summary?doi=10.1.1.18.537\" rel=\"noopener noreferrer nofollow\"><u>Mark J Kilgard, \u201cA Practical and Robust Bump-mapping Technique for Today\u2019s GPUs\u201d, GDC\u00a02000<\/u><\/a><\/p>\n<p>[4] Christian Sch\u00fcler, \u201cNormal Mapping without Precomputed Tangents\u201d, <a href=\"http:\/\/www.shaderx5.com\" rel=\"noopener noreferrer nofollow\">ShaderX 5<\/a>, Chapter 2.6, pp. 131 \u2013\u00a0140<\/p>\n<p>[5] <a href=\"http:\/\/blog.selfshadow.com\/publications\/blending-in-detail\/\" rel=\"noopener noreferrer nofollow\"><u>Colin Barr\u00e9-Brisebois and Stephen Hill, \u201cBlending in Detail\u201d<\/u><\/a><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \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\/670522\/\"> https:\/\/habr.com\/ru\/post\/670522\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0432 \u0434\u0430\u043b\u0451\u043a\u043e\u043c 2013 \u0433\u043e\u0434\u0443 \u043a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u0437 2006 \u0433\u043e\u0434\u0430 [4]. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u043e\u0442\u043a\u0430\u0437\u0443 \u043e\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b \u0438 \u0432 2022, \u0430 \u0432\u044b\u0432\u043e\u0434 \u0444\u043e\u0440\u043c\u0443\u043b \u0438\u0437\u043b\u043e\u0436\u0435\u043d \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438 \u0431\u0435\u0437 \u0438\u0437\u043b\u0438\u0448\u0435\u0441\u0442\u0432.<\/p>\n<p>\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u043d\u0430\u043b\u0435\u0442\u0443 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435, \u0447\u0442\u043e \u043f\u043e \u0438\u0440\u043e\u043d\u0438\u0438 \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 [2] \u043e\u0442 1997 \u0433\u043e\u0434\u0430:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043c\u0435\u0442\u043e\u0434 \u0431\u0430\u043c\u043f-\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a \u0436\u0435\u043b\u0435\u0437\u0443 \u043f\u043e\u043c\u0438\u043c\u043e \u0442\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u0424\u043e\u043d\u0433\u0443. <strong>\u041c\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430<\/strong>&#8230;<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0437\u0430 \u043e\u043a\u043d\u043e\u043c \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 1997 \u0433\u043e\u0434, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u0430\u0451\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0441\u0441\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p> \u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u0441\u044f \u0448\u0438\u043d\u0430 \u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0448\u0438\u043d.<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u043e\u043d\u043e\u043c\u044f\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440\u044b \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u044f\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043f\u0440\u0438 \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0445<\/p>\n<\/li>\n<\/ul>\n<h2>\u041b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a \u043d\u0438\u043c<\/h2>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0435\u0442\u0430\u0444\u043e\u0440\u043e\u0439 \u043d\u0430 C++. \u041f\u0443\u0441\u0442\u044c \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>Vector3<\/code> \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0438 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>Covector3<\/code> \u0434\u043b\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/a>. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043f\u0438\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043e\u043d \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043f\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0445 (\u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0432 \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 <a href=\"https:\/\/habr.com\/ru\/post\/529978\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e<\/a>). \u041a\u0430\u043a \u0432\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u043d\u0430\u0435\u0442\u0435, \u043d\u043e\u0440\u043c\u0430\u043b\u044c &#8212; \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u0430\u043a \u043c\u044b \u0435\u0451 \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">Vector3 tangent; Vector3 bitangent; Covector3 normal; Covector3 perturb_normal( float a, float b, float c ) {     return         a * tangent +         b * bitangent +         c * normal;         \/\/ ^^^^ compile-error: type mismatch for operator + }<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0432 \u043e\u0434\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0435\u0434\u0451\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 <code>normal<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u0442\u0438\u043f\u043e\u043c <code>Covector3<\/code>, \u0442\u043e <code>tangent<\/code> \u0438 <code>bitangent<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0442\u043e\u0433\u043e \u0436\u0435 \u0442\u0438\u043f\u0430, \u0438\u043d\u0430\u0447\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0432 \u043a\u043e\u0434\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e \u0442\u0438\u043f\u043e\u043c <code>vec3<\/code> \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<h2>\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/h2>\n<p>\u041f\u0440\u0438\u0441\u043a\u043e\u0440\u0431\u043d\u043e, \u043d\u043e &#171;\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e&#187; \u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u0431\u044b\u043b\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 [2] \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0435 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435. \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u0435\u043d. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u0441 <em>\u043d\u0435\u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0435\u0439 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d<\/em>. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0432\u0432\u0451\u043b  (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, &#171;\u043a\u043e\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c&#187;) \u0438  (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e-\u0431\u0438-\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u043e\u0440\u043e\u0442\u043e \u044d\u0442\u043e \u043d\u0438 \u0437\u0432\u0443\u0447\u0430\u043b\u043e) \u043a\u0430\u043a \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0438\u043d\u0430\u0447\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0431\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, TBN-\u0431\u0430\u0437\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BA%D0%B0%D1%81%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%BE\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c<\/a>.<\/p>\n<h2>\u042d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0411\u043b\u0438\u043d\u043d\u0430<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435  \u0438  \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0411\u043b\u0438\u043d\u043d\u0430 [1] \u043e \u0431\u0430\u043c\u043f-\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0435. \u0411\u043b\u0438\u043d\u043d \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043a\u0440\u0438\u0432\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0411\u0435\u0437\u044c\u0435), \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b  \u0438  \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043f\u043e  \u0438 .<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043e\u043d \u043f\u0438\u0448\u0435\u0442 \u043d\u0438\u0436\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043a\u0430\u043a \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445, \u0442\u043e \u0435\u0441\u0442\u044c . \u041d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043e\u043d \u0432\u0432\u043e\u0434\u0438\u0442 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u044b\u0441\u043e\u0442 . \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438:<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u0438 . \u041e\u043d\u0438 <em>\u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u044b<\/em> \u0438 \u0432 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438, \u0438 \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0431\u0430\u0437\u0438\u0441 \u0434\u043b\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 . \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0438 \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0447\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0445. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u0445 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u044e \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044e \u0442\u0438\u043f\u043e\u0432. \u0415\u0441\u043b\u0438 \u043c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u044d\u0442\u0438 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u043d\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u043c \u0438\u0445 \u0437\u043d\u0430\u043a, \u0442\u043e \u043f\u0440\u0438\u0434\u0451\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u0438 :<\/p>\n<p>\u0433\u0434\u0435 \u043a\u0440\u044b\u0448\u0435\u0447\u043a\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c. \u042d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u0432 [4]. \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e , \u0430 \u2014 \u043a\u0430\u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e . \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0432\u0437\u0430\u0438\u043c\u043d\u043e-\u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 (\u0442\u043e\u0447\u043d\u0435\u0435, \u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0430) ,  \u0438, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0431\u0430\u0437\u0438\u0441 \u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u0410 \u0435\u0449\u0451 \u0438 \u044d\u0442\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u0438 . \u041c\u043e\u0434\u0443\u043b\u044c \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442\u044b, \u043e \u0447\u0451\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043d\u0438\u0436\u0435.<\/p>\n<h2>\u0417\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0442\u043e \u0447\u0435\u043c\u0443 \u0432\u0430\u0441 \u0443\u0447\u0438\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435<\/h2>\n<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u0431\u0435\u0440\u0443\u0442 \u0438 \u0437\u0430 \u0438 , \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u043a\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c &#171;\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435&#187;, \u0432\u043e\u0437\u044c\u043c\u0451\u043c &#171;\u043a\u043e\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435&#187; \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f: \u041f\u0438\u0440\u0441\u0438 \u0441 \u0441\u043e\u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 [2] \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 (\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442) \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0445 \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u041e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u043e &#171;\u043a\u0430\u0440\u0442\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439&#187;, \u043d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e &#171;\u043a\u0430\u0440\u0442\u0430 \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u044b \u0443\u043a\u043b\u043e\u043d\u043e\u0432&#187;, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0435\u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"http:\/\/mmikkelsen3d.blogspot.de\/2011\/07\/derivative-maps.html\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u0440\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445<\/a>. \u0412 \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0443\u0442\u0438\u0437\u043d\u044b. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c \u0441\u0438\u043b\u044b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u041a\u0438\u043b\u0433\u0430\u0440\u0434 [3] \u0432\u0432\u043e\u0434\u0438\u0442 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043a\u0430\u043a <em>\u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f<\/em>, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044f\u0441\u044c \u043e\u0442 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0439 \u043f\u0443\u0442\u0451\u043c \u044f\u0432\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438:<\/p>\n<p>\u0433\u0434\u0435 , \u0438 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041c\u043d\u043e\u0433\u0438\u0435 \u0434\u0443\u043c\u0430\u044e\u0442, \u0447\u0442\u043e \u0432 \u043a\u0430\u0440\u0442\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u043d\u043e \u044d\u0442\u043e \u0432\u0435\u0440\u043d\u043e \u043b\u0438\u0448\u044c \u043e\u0442\u0447\u0430\u0441\u0442\u0438. \u0418\u0434\u0435\u044f \u041a\u0438\u043b\u0433\u0430\u0440\u0434\u0430 \u0431\u044b\u043b\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439: \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u0430\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c &#8212; \u044d\u0442\u043e [0, 0, 1], \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c. \u0412 \u043e\u0431\u0449\u0435\u043c \u0434\u0430, \u043a\u0430\u0440\u0442\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u044b\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u043c, \u043d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f. \u0422\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u0431\u043b\u0435\u043d\u0434\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0440\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u043c\u0438. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043e\u0431\u0437\u043e\u0440 <a href=\"http:\/\/blog.selfshadow.com\/publications\/blending-in-detail\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434 \u0444\u043e\u0440\u043c\u0443\u043b \u0434\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430, \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u043a \u0440\u0435\u0448\u0451\u043d\u043d\u043e\u0439 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0411\u043b\u0438\u043d\u043d\u0430. \u0418\u0437 \u043a\u0430\u0440\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u0439 \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u0443\u0449\u0451\u043d\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0434\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 (\u043a\u043e)\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u043a \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 : \u0438 , \u0430 \u0441\u0430\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0435\u044f\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u0435\u0440\u0448\u0438\u043d\u044b :<\/p>\n<p>\u0433\u0434\u0435 \u0442\u043e\u0447\u043a\u0430 &#8212; \u044d\u0442\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0432\u0432\u0435\u0434\u0451\u043c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 , , , , \u0430 \u0442\u0430\u043a \u0436\u0435 \u0438 . \u0418\u0441\u043a\u043e\u043c\u044b\u0435 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c:<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0447\u0442\u043e (\u043a\u043e)\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0435\u0437 \u043d\u0435\u0451 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u0434\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430. \u041e\u0442\u0441\u044e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u043c\u0430\u0442\u0440\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435:<\/p>\n<p> \u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e.<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043a\u043e\u0434\u0443 \u0448\u0435\u0439\u0434\u0435\u0440\u0430<\/h2>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0441\u0442\u0440\u0430\u0448\u0430\u044e\u0449\u0435 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435! \u041e\u0434\u043d\u0430\u043a\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0438, \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u0435\u0441\u0442\u0438 \u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 GLSL \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b 3\u04453. \u041f\u043e\u0445\u043e\u0436\u0438\u0439 \u043a\u043e\u0434 \u043d\u0430 HLSL \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0441\u044f \u0432 \u043a\u043d\u0438\u0433\u0435, \u043d\u043e \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u044f \u0435\u0433\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b. \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043a\u0430\u043a \u0438\u0437 \u0432\u0435\u0442\u043a\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B8%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D1%91%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0443\u044e<\/a> \u043c\u0430\u0442\u0440\u0438\u0446\u0443:<\/p>\n<pre><code class=\"cpp\">mat3 inverse3x3( mat3 M ) {     mat3 M_t = transpose( M );      float det = dot( cross( M_t[0], M_t[1] ), M_t[2] );      mat3 adjugate = mat3( cross( M_t[1], M_t[2] ), cross( M_t[2], M_t[0] ), cross( M_t[0], M_t[1] ) );      return adjugate \/ det; }<\/code><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0434, \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0441\u043a\u043e\u0431\u043a\u0438, \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u043d\u043e\u0432\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f . \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 , \u0430 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0443\u0445 \u043d\u043e\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 :<\/p>\n<p>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f, \u0447\u0442\u043e \u0438 \u044d\u0442\u043e <em>\u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u044b<\/em> \u043a \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043e\u043d\u0438 <em>\u043a\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u044b<\/em>, \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0431\u0430\u0437\u0438\u0441 <em>\u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u043e\u0433\u043e \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>. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043d\u0435\u0432\u0430\u0436\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 0.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u044b ( \u0438 ), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043a \u0433\u0440\u0430\u043d\u0438 ( ) \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u0432\u0435\u0440\u0448\u0438\u043d\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u0434\u0430\u0451\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c (\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 ) \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c, \u043e \u0447\u0451\u043c \u043d\u0438\u0436\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u043c:<\/p>\n<pre><code class=\"cpp\">mat3 cotangent_frame( vec3 N, vec3 p, vec2 uv ) {     \/\/ \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435     vec3 dp1 = dFdx( p );     vec3 dp2 = dFdy( p );     vec2 duv1 = dFdx( uv );     vec2 duv2 = dFdy( uv );          \/\/ \u0420\u0435\u0448\u0430\u0435\u043c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443     vec3 dp2perp = cross( dp2, N );     vec3 dp1perp = cross( N, dp1 );     vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;     vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;          \/\/ \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e-\u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441     float invmax = inversesqrt( max( dot(T,T), dot(B,B) ) );     return mat3( T * invmax, B * invmax, N ); } <\/code><\/pre>\n<h2>\u0418\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438<\/h2>\n<p>\u0412 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c . \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438  \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0443 \u043c\u043e\u0434\u0435\u043b\u0438. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b. \u0415\u0441\u043b\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c, \u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u0440\u0448\u0438\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0438 (\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e) \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a . \u0412 \u0438\u0442\u043e\u0433\u0435, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u0443\u0449\u0435\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u0432\u044b\u0441\u043e\u0442 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b\u0430\u0441\u044c.<\/p>\n<p>\u0425\u043e\u0442\u044f \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043e\u043d\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u043c\u0430\u043f\u044b \u043d\u0430 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b (\u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430), \u044f \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0438 \u043d\u043e\u0440\u043c\u0438\u0440\u0443\u044e \u0438 \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438\u0437 \u043d\u0438\u0445. \u042d\u0442\u043e\u0442 \u0445\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u0438\u043d\u044b \u0438 , \u0438 \u0434\u0430\u0436\u0435 \u0441\u043a\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u0438\u043b\u0438 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044b\u0439 \u0431\u0430\u0437\u0438\u0441 \u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<h2>\u0411\u0435\u0441\u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0438 . \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0439, \u0438 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u0430\u0442\u0435\u0442\u0443 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-334277","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334277","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=334277"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334277\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=334277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=334277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=334277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}