{"id":288566,"date":"2018-08-27T13:50:02","date_gmt":"2018-08-27T09:50:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=288566"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=288566","title":{"rendered":"Learn OpenGL. \u0423\u0440\u043e\u043a 5.10 \u2013 Screen Space Ambient Occlusion"},"content":{"rendered":"\n<div data-io-article-url=\"https:\/\/habr.com\/post\/421385\/\" class=\"post__text post__text-html js-mediator-article\"><img decoding=\"async\" align=\"left\" src=\"https:\/\/habrastorage.org\/web\/c9e\/9b2\/a3b\/c9e9b2a3baf749ab8e2b385c6d93d966.png\" alt=\"OGL3\" width=\"300\"> <\/p>\n<h2>SSAO<\/h2>\n<p>  \u0422\u0435\u043c\u0430 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0430 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u0430 \u043d\u0430\u043c\u0438 \u0432 \u0443\u0440\u043e\u043a\u0435 \u043f\u043e <a href=\"https:\/\/habrahabr.ru\/post\/333932\">\u043e\u0441\u043d\u043e\u0432\u0430\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f<\/a>, \u043d\u043e \u043b\u0438\u0448\u044c \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c. \u041d\u0430\u043f\u043e\u043c\u043d\u044e: \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u2013 \u0441\u0443\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u0432\u043e \u0432\u0441\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 <i>\u0440\u0430\u0441\u0441\u0435\u044f\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u0430<\/i>. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435 \u043c\u0438\u0440\u0435 \u0441\u0432\u0435\u0442 \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0439 \u0437\u0430\u0441\u0432\u0435\u0442\u043a\u0435 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u0441\u0446\u0435\u043d\u044b. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0437\u0430\u0441\u0432\u0435\u0442\u043a\u0430 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u0430. <br \/>  \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0432\u0438\u0434\u043e\u0432 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0442 \u043d\u0435\u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <i>\u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f <\/i>(<i>ambient occlusion, AO<\/i>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u0433\u043b\u043e\u0432, \u0441\u043a\u043b\u0430\u0434\u043e\u043a \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u044f\u0445 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439. \u0422\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439 \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043b\u0443\u0447\u0430\u043c \u0441\u0432\u0435\u0442\u0430 \u0432\u044b\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0440\u0443\u0436\u0443, \u0437\u0430\u0442\u0435\u043c\u043d\u044f\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438.<\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u0431\u0435\u0437 \u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 AO. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u0433\u043b\u043e\u0432 \u0441\u0442\u0435\u043d \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0440\u0435\u0437\u043a\u0438\u0445 \u0438\u0437\u043b\u043e\u043c\u043e\u0432 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/6s\/8z\/kv\/6s8zkvpob8nbgaails8mtfutgw8.png\"><\/div>\n<p>  \u041f\u0443\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u043c\u0435\u0442\u0435\u043d, \u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0432\u043e \u0432\u0441\u0435\u0439 \u0441\u0446\u0435\u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043b\u043b\u044e\u0437\u0438\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u043c\u0430\u043b\u044b\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0441\u0430\u043c\u043e\u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u0427\u0430\u0441\u0442\u044c 1. \u041d\u0430\u0447\u0430\u043b\u043e<\/p>\n<ol>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/310790\/\">OpenGL<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/311198\/\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/311234\/\">Hello Window<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/311808\/\">Hello Triangle<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/313380\/\">Shaders<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/315294\/\">\u0422\u0435\u043a\u0441\u0442\u0443\u0440\u044b<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/319144\/\">\u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/324968\/\">\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/327604\/\">\u041a\u0430\u043c\u0435\u0440\u0430<\/a><\/li>\n<\/ol>\n<p>  \u0427\u0430\u0441\u0442\u044c 2. \u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435<\/p>\n<ol>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/329592\/\">\u0426\u0432\u0435\u0442\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/333932\/\">\u041e\u0441\u043d\u043e\u0432\u044b \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/336166\/\">\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/337550\/\">\u0422\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/337642\/\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0441\u0432\u0435\u0442\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/338254\/\">\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f<\/a><\/li>\n<\/ol>\n<p>  \u0427\u0430\u0441\u0442\u044c 3. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 3D-\u043c\u043e\u0434\u0435\u043b\u0435\u0439<\/p>\n<ol>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/338436\/\">\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Assimp<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/338436\/\">\u041a\u043b\u0430\u0441\u0441 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 Mesh<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/338998\/\">\u041a\u043b\u0430\u0441\u0441 3D-\u043c\u043e\u0434\u0435\u043b\u0438<\/a><\/li>\n<\/ol>\n<p>  \u0427\u0430\u0441\u0442\u044c 4. \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 OpenGL <\/p>\n<ol>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/342610\/\">\u0422\u0435\u0441\u0442 \u0433\u043b\u0443\u0431\u0438\u043d\u044b<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/344238\/\">\u0422\u0435\u0441\u0442 \u0442\u0440\u0430\u0444\u0430\u0440\u0435\u0442\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/343096\/\">\u0421\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043e\u0432<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/346964\/\">\u041e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0435\u0439<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/347354\/\">\u041a\u0430\u0434\u0440\u043e\u0432\u044b\u0439 \u0431\u0443\u0444\u0435\u0440<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/347750\/\">\u041a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u044b<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/350008\/\">\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/350156\/\">\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 GLSL<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/350782\/\">\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0447\u043a\u0438\u0439 \u0448\u0435\u0439\u0434\u0435\u0440<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/352962\/\">\u0418\u043d\u0441\u0442\u0430\u043d\u0441\u0438\u043d\u0433<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/351706\/\">\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<\/ol>\n<p>  \u0427\u0430\u0441\u0442\u044c 5. \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 <\/p>\n<ol>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/353054\/\">\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435. \u041c\u043e\u0434\u0435\u043b\u044c \u0411\u043b\u0438\u043d\u043d\u0430-\u0424\u043e\u043d\u0433\u0430.<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/353632\/\">\u0413\u0430\u043c\u043c\u0430-\u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/353956\/\">\u041a\u0430\u0440\u0442\u044b \u0442\u0435\u043d\u0435\u0439<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/post\/354208\/\">\u0412\u0441\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u0442\u0435\u043d\u0435\u0439<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/post\/415579\/\">Normal Mapping<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/post\/416163\/\">Parallax Mapping<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/post\/420409\/\">HDR<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/post\/420375\/\">Bloom<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/post\/420565\/\">\u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433<\/a><\/li>\n<li><b>SSAO<\/b><\/li>\n<\/ol>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u0430 AO \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0438\u043c\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0412 \u043d\u0430\u0438\u0432\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043b\u0443\u0447\u0435\u0439 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0435\u0451 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432\u0435\u0441\u044c\u043c\u0430 \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u043e\u0441\u0442\u0438. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432 2007 \u0433\u043e\u0434\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Crytek \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <i>\u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 <\/i>(<i>Screen-Space Ambient Occlusion, SSAO<\/i>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0432 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0433\u0440\u044b Crysis. \u041f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043b\u0438\u0448\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0422\u0430\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0430\u0432\u0430\u043b\u0430 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438.<\/p>\n<p>  \u041f\u0440\u0438\u043d\u0446\u0438\u043f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442: \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f <i>\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f <\/i>(<i>occlusion factor<\/i>) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043b\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f). \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u043e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0438\u0437 \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0441 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u0427\u0438\u0441\u043b\u043e \u0432\u044b\u0431\u043e\u0440\u043e\u043a, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0431\u041e\u043b\u044c\u0448\u0443\u044e, \u043d\u0435\u0436\u0435\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0445\u0435\u043c\u0443:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/y5\/yh\/8o\/y5yh8oeqvguchqopeu7nz0g-tsy.png\"><\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c, \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0435\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043b\u0435\u0436\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0432\u043a\u043b\u0430\u0434 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/p>\n<p>  \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043f\u0440\u044f\u043c\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0431\u043e\u0440\u043e\u043a. \u041f\u0440\u0438 \u043c\u0430\u043b\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0430\u0434\u0430\u0435\u0442 \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430 \u0431\u044d\u043d\u0434\u0438\u043d\u0433\u0430 (<i>banding<\/i>) \u0438\u043b\u0438 \u00ab\u043f\u043e\u043b\u043e\u0448\u0435\u043d\u0438\u044f\u00bb \u0438\u0437-\u0437\u0430 \u0440\u0435\u0437\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438 \u0441 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0436\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0420\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u0441\u0445\u043e\u0436\u0438\u0445 \u043f\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0432\u044b\u0431\u043e\u0440\u043e\u043a. \u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u043c \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0443\u0433\u043e\u043b \u043d\u0430\u0431\u043e\u0440\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u043e\u043a. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438 \u0442\u0443\u0442 \u0436\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u043d\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432 \u0432\u0438\u0434\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u043e\u0432\u043e\u0433\u043e \u0443\u0437\u043e\u0440\u0430, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 (\u0430\u0432\u0442\u043e\u0440 \u2013 <a href=\"http:\/\/john-chapman-graphics.blogspot.com\/\">John Chapman<\/a>) \u0438 \u0435\u0433\u043e \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u0431\u044d\u043d\u0434\u0438\u043d\u0433 \u0438 \u0448\u0443\u043c\u043e\u0432\u043e\u0439 \u0443\u0437\u043e\u0440.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/r_\/ay\/l3\/r_ayl3jjozsa6fyuni69ejkwpei.jpeg\"><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0448\u0435\u043d\u0438\u0435 \u0438\u0437-\u0437\u0430 \u043c\u0430\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u043e\u043a.<\/p>\n<p>  \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f SSAO \u043e\u0442 Crytek \u043e\u0431\u043b\u0430\u0434\u0430\u043b\u0430 \u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u044b\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0442\u0438\u043b\u0435\u043c. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b Crytek \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u044f\u0434\u0440\u043e \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u044d\u0442\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u0430\u0436\u0435 \u043d\u0430 \u043f\u043b\u043e\u0441\u043a\u0438\u0445 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0438\u043f\u0430 \u0441\u0442\u0435\u043d, \u0434\u0435\u043b\u0430\u044f \u0438\u0445 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u2013 \u0432\u0435\u0434\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043e\u0431\u044a\u0435\u043c\u0430 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e. \u041d\u0438\u0436\u0435 \u2013 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0441\u043e \u0441\u0446\u0435\u043d\u043e\u0439 \u0438\u0437 Crysis, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0439 \u0432 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044f\u0445 \u0441\u0435\u0440\u043e\u0433\u043e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u0435\u043d \u044d\u0444\u0444\u0435\u043a\u0442 \u00ab\u0441\u0435\u0440\u043e\u0441\u0442\u0438\u00bb:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/j9\/zr\/r8\/j9zrr81dluj-5eobuqcgst48om8.jpeg\"><\/div>\n<p>  \u0414\u043b\u044f \u0438\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043c\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043e\u0442 \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043a \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0435, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0434\u043e\u043b\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/br\/pf\/3v\/brpf3vfbmzd9pmna58ub5x7-age.png\"><\/div>\n<p>  \u041e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 \u0442\u0430\u043a\u043e\u0439 <i>\u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u044b \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438 <\/i>(<i>normal-oriented hemisphere<\/i>) \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u043f\u043e\u0434 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0438\u043b\u0435\u0433\u0430\u044e\u0449\u0435\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0437\u043b\u0438\u0448\u043d\u0435\u0435 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u0435 \u0432, \u0432 \u0446\u0435\u043b\u043e\u043c, \u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0414\u0430\u043d\u043d\u043e\u043c \u0443\u0440\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u043e\u0439 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u043a\u0430 \u043f\u043e SSAO \u043e\u0442 <a href=\"http:\/\/john-chapman-graphics.blogspot.com\/\">John Chapman<\/a>.<\/p>\n<h2>\u0411\u0443\u0444\u0435\u0440 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/h2>\n<p>  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:  <\/p>\n<ul>\n<li>\u0412\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430;<\/li>\n<li>\u0412\u0435\u043a\u0442\u043e\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430;<\/li>\n<li>\u0414\u0438\u0444\u0444\u0443\u0437\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430;<\/li>\n<li>\u042f\u0434\u0440\u043e \u0432\u044b\u0431\u043e\u0440\u043a\u0438;<\/li>\n<li>\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u0440\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438.<\/li>\n<\/ul>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0443 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0432\u0434\u043e\u043b\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u0417\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0435\u0441\u044f \u044f\u0434\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u041c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u043a\u043b\u0430\u0434\u0430 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u0442\u043e\u0439\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0434\u0430\u043b\u0435\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wv\/xo\/aj\/wvxoajroexwvjgq77n81-fjhats.png\"><\/div>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 SSAO \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u043c\u0441\u044f \u0432 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0441\u0447\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0432 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u0432\u0430\u0434. \u041d\u043e \u0442\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0441\u0446\u0435\u043d\u044b. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u043c\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u043c \u0440\u0435\u043d\u0434\u0435\u0440 \u0432\u0441\u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 SSAO \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u0447\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u0446\u0435\u043d\u0435. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u043c \u0443\u0440\u043e\u043a\u0430\u043c, \u0442\u043e \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043e\u0431\u043b\u0438\u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0444\u0444\u0435\u043a\u0442 SSAO \u043a\u0430\u043a \u0440\u043e\u0434\u043d\u043e\u0439 \u0432\u0441\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u043d\u0434\u0435\u0440 \u0441 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u2013 \u0432\u0435\u0434\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0438, \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 G-\u0431\u0443\u0444\u0435\u0440\u0435.<\/p>\n<blockquote><p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438\u0437 \u0443\u0440\u043e\u043a\u0430 \u043e\u0431 <a href=\"https:\/\/habr.com\/post\/420565\">\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0438<\/a>. \u0415\u0441\u043b\u0438 \u0432\u044b \u0435\u0449\u0435 \u043d\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u2013 \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0443\u0440\u043e\u043a\u0443.  <\/p><\/blockquote>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u0445 \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0437\u0430 \u0441\u0447\u0435\u0442 G-\u0431\u0443\u0444\u0435\u0440\u0430, \u0442\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440 \u0441\u0442\u0430\u0434\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442:  <\/p>\n<pre><code class=\"cpp\">#version 330 core layout (location = 0) out vec4 gPosition; layout (location = 1) out vec3 gNormal; layout (location = 2) out vec4 gAlbedoSpec;  in vec2 TexCoords; in vec3 FragPos; in vec3 Normal;  void main() {         \/\/ \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430     gPosition = FragPos;     \/\/ \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0438\u0434\u0435\u0442 \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443     gNormal = normalize(Normal);     \/\/ \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 - \u0432 \u0442\u0440\u0435\u0442\u044c\u044e     gAlbedoSpec.rgb = vec3(0.95); }  <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c SSAO \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u0432 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441\u0446\u0435\u043d\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>FragPos<\/i>, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u0437 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u0430, \u0440\u0430\u043d\u0438\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0421\u0442\u043e\u0438\u0442 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044f\u0445 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 G-\u0431\u0443\u0444\u0435\u0440\u0435 \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0435 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u043c \u0436\u0435.<\/p>\n<blockquote><p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0438\u0448\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0438, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 Matt Pettineo \u0432 <a href=\"https:\/\/mynameismjp.wordpress.com\/2010\/09\/05\/position-from-depth-3\/\">\u0431\u043b\u043e\u0433\u0435<\/a>. \u042d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u0431\u041e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0441\u043f\u043e\u0441\u043e\u0431, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u043d \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432 G-\u0431\u0443\u0444\u0435\u0440\u0435, \u0447\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0443\u0439\u043c\u0443 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u0440\u0430\u0434\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f.<\/p><\/blockquote>\n<p>  \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0431\u0443\u0444\u0435\u0440 \u0446\u0432\u0435\u0442\u0430 <i>gPosition <\/i>\u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">glGenTextures(1, &amp;gPosition); glBindTexture(GL_TEXTURE_2D, gPosition); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_FLOAT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);  <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0445\u0440\u0430\u043d\u0438\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0438\u0437 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043e\u043a. \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u2013 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u043a \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0443 [0., 1.]. \u0422\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0430 \u2013 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d <i>GL_CLAMP_TO_EDGE<\/i>. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043d\u0430\u0440\u043e\u0447\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043e\u0432\u0435\u0440\u0441\u044d\u043c\u043f\u043b\u0438\u043d\u0433 \u0432 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0412\u044b\u0445\u043e\u0434 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0435.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0435\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u044b<\/h2>\n<p>  \u0418\u0442\u0430\u043a, \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0442\u043e\u0447\u0435\u043a \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u044b, \u0441\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0434\u043e\u043b\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e, \u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 <a href=\"https:\/\/habr.com\/post\/415579\">\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e<\/a>, \u0433\u0434\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u043b\u0443\u043e\u0441\u0438 <i>Z<\/i>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/br\/pf\/3v\/brpf3vfbmzd9pmna58ub5x7-age.png\"><\/div>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u0440\u0430\u0434\u0438\u0443\u0441 \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u044b \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 64 \u0442\u043e\u0447\u0435\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\"> \/\/ \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 0.0 - 1.0 std::uniform_real_distribution&lt;float&gt; randomFloats(0.0, 1.0);  std::default_random_engine generator; std::vector&lt;glm::vec3&gt; ssaoKernel; for (unsigned int i = 0; i &lt; 64; ++i) {     glm::vec3 sample(         randomFloats(generator) * 2.0 - 1.0,          randomFloats(generator) * 2.0 - 1.0,          randomFloats(generator)     );     sample  = glm::normalize(sample);     sample *= randomFloats(generator);     float scale = (float)i \/ 64.0;      ssaoKernel.push_back(sample);   }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b <i>x<\/i> \u0438 <i>y<\/i> \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 [-1., 1.], \u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 <i>z<\/i> \u2013 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 [0., 1.] (\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0442\u0430\u043a\u0438\u043c \u0436\u0435, \u043a\u0430\u043a \u0434\u043b\u044f <i>x<\/i> \u0438 <i>y<\/i>, \u043c\u044b \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u044f\u0434\u0440\u043e \u0432\u044b\u0431\u043e\u0440\u043a\u0438). \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f\u0434\u0440\u043e \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432\u0434\u043e\u043b\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0434\u0440\u0430, \u043d\u043e \u0432 \u0443\u0433\u043e\u0434\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0430\u043c, \u043b\u0435\u0436\u0430\u0449\u0438\u043c \u0431\u043b\u0438\u0436\u0435 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u044f\u0434\u0440\u0430, \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430 \u0441\u0447\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432 \u0438\u0445 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u043a\u043e\u043b\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0422\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u0441 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c:  <\/p>\n<pre><code class=\"cpp\">scale   = lerp(0.1f, 1.0f, scale * scale);    sample *= scale;    ssaoKernel.push_back(sample);   }<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <i>lerp() <\/i>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043a\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">float lerp(float a, float b, float f) {     return a + f * (b - a); }  <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0442\u0440\u044e\u043a \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0433\u0434\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432\u0431\u043b\u0438\u0437\u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u044f\u0434\u0440\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jq\/9h\/p4\/jq9hp4-yun_sc277m6pslbjyin0.png\"><\/div>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432, \u0447\u0442\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0443\u0434\u0430\u0440\u0438\u0442 \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430 \u0438\u043b\u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435.<\/p>\n<h2>\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438<\/h2>\n<p>  \u0418\u0442\u0430\u043a, \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438 \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u0435\u043a \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0447\u0438\u0441\u043b\u0443 \u044d\u0442\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0430. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0441\u0446\u0435\u043d\u044b, \u043d\u043e \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438. \u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043d\u0430\u0431\u043e\u0440 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0430 <i>GL_REPEAT<\/i>.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 4\u04454 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430, \u0441\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0434\u043e\u043b\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u0432 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435:  <\/p>\n<pre><code class=\"cpp\">std::vector&lt;glm::vec3&gt; ssaoNoise; for (unsigned int i = 0; i &lt; 16; i++) {     glm::vec3 noise(         randomFloats(generator) * 2.0 - 1.0,          randomFloats(generator) * 2.0 - 1.0,          0.0f);      ssaoNoise.push_back(noise); }  <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f\u0434\u0440\u043e \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043e \u0432\u0434\u043e\u043b\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u043b\u0443\u043e\u0441\u0438 <i>Z<\/i> \u0432 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <i>z<\/i> \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e \u2013 \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u0441\u0438 <i>Z<\/i>.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0442\u0430\u043a\u0436\u0435 4\u04454 \u0438 \u0437\u0430\u043b\u044c\u0435\u043c \u0442\u0443\u0434\u0430 \u043d\u0430\u0448 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0440\u0435\u0436\u0438\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0430 <i>GL_REPEAT <\/i>\u0434\u043b\u044f \u0442\u0430\u0439\u043b\u0438\u043d\u0433\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b:  <\/p>\n<pre><code class=\"cpp\">unsigned int noiseTexture;  glGenTextures(1, &amp;noiseTexture); glBindTexture(GL_TEXTURE_2D, noiseTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, 4, 4, 0, GL_RGB, GL_FLOAT, &amp;ssaoNoise[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);  <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0436, \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0433\u043e\u0442\u043e\u0432\u044b \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 SSAO!<\/p>\n<h2>\u0428\u0435\u0439\u0434\u0435\u0440 SSAO<\/h2>\n<p>  \u0428\u0435\u0439\u0434\u0435\u0440 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0430, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0430, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0439 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0448\u0435\u0439\u0434\u0435\u0440\u0430:  <\/p>\n<pre><code class=\"cpp\">unsigned int ssaoFBO; glGenFramebuffers(1, &amp;ssaoFBO);   glBindFramebuffer(GL_FRAMEBUFFER, ssaoFBO);    unsigned int ssaoColorBuffer; glGenTextures(1, &amp;ssaoColorBuffer); glBindTexture(GL_TEXTURE_2D, ssaoColorBuffer); glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_FLOAT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ssaoColorBuffer, 0);  <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2013 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 [0., 1.], \u0442\u043e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0439. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u043b\u044f \u0431\u0443\u0444\u0435\u0440\u0430 \u0446\u0432\u0435\u0442\u0430 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f <i>GL_RED<\/i>. <\/p>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 SSAO \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\"> \/\/ \u043f\u0440\u043e\u0445\u043e\u0434 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438: \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 G-\u0431\u0443\u0444\u0435\u0440\u0430 glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);     [...] glBindFramebuffer(GL_FRAMEBUFFER, 0);      \/\/ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c G-\u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 SSAO glBindFramebuffer(GL_FRAMEBUFFER, ssaoFBO);     glClear(GL_COLOR_BUFFER_BIT);         glActiveTexture(GL_TEXTURE0);     glBindTexture(GL_TEXTURE_2D, gPosition);     glActiveTexture(GL_TEXTURE1);     glBindTexture(GL_TEXTURE_2D, gNormal);     glActiveTexture(GL_TEXTURE2);     glBindTexture(GL_TEXTURE_2D, noiseTexture);     shaderSSAO.use();     SendKernelSamplesToShader();     shaderSSAO.setMat4(\"projection\", projection);     RenderQuad(); glBindFramebuffer(GL_FRAMEBUFFER, 0);    \/\/ \u043f\u0440\u043e\u0445\u043e\u0434 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f: \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); shaderLightingPass.use(); [...] glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, ssaoColorBuffer); [...] RenderQuad();  <\/code><\/pre>\n<p>  \u0428\u0435\u0439\u0434\u0435\u0440 <i>shaderSSAO <\/i>\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0435\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b G-\u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0430\u043a \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0448\u0443\u043c\u043e\u0432\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438 \u044f\u0434\u0440\u043e \u0432\u044b\u0431\u043e\u0440\u043a\u0438:  <\/p>\n<pre><code class=\"cpp\">#version 330 core out float FragColor;    in vec2 TexCoords;  uniform sampler2D gPosition; uniform sampler2D gNormal; uniform sampler2D texNoise;  uniform vec3 samples[64]; uniform mat4 projection;  \/\/ \u0442\u0430\u0439\u043b\u0438\u043d\u0433 \u0448\u0443\u043c\u043e\u0432\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432\u044c\u044e\u043f\u043e\u0440\u0442\u0430 \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441\u0430\u043c\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \/\/ \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044c\u044e\u043f\u043e\u0440\u0442 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 1280x720 const vec2 noiseScale = vec2(1280.0\/4.0, 720.0\/4.0);   void main() {     [...] }<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <i>noiseScale<\/i>. \u041d\u0430\u0448\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441 \u0448\u0443\u043c\u043e\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0437\u0430\u0442\u0430\u0439\u043b\u0435\u043d\u0430 \u043f\u043e \u0432\u0441\u0435\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u044d\u043a\u0440\u0430\u043d\u0430, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b <i>TexCoords <\/i>\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 [0., 1.] \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0431\u0435\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430. \u0412 \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u044f\u0445 \u043c\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0448\u0443\u043c\u043e\u0432\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b:  <\/p>\n<pre><code class=\"cpp\">vec3 fragPos   = texture(gPosition, TexCoords).xyz; vec3 normal    = texture(gNormal, TexCoords).rgb; vec3 randomVec = texture(texNoise, TexCoords * noiseScale).xyz;  <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0448\u0443\u043c\u043e\u0432\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b <i>texNoise <\/i>\u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0440\u0435\u0436\u0438\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0430 \u0432 <i>GL_REPEAT<\/i>, \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437 \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u044d\u043a\u0440\u0430\u043d\u0430. \u0418\u043c\u0435\u044f \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b <i>randomVec<\/i>, <i>fragPos <\/i>\u0438 <i>normal <\/i>\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 TBN \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437 \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 \u0432\u0438\u0434\u043e\u0432\u043e\u0435:  <\/p>\n<pre><code class=\"cpp\">vec3 tangent   = normalize(randomVec - normal * dot(randomVec, normal)); vec3 bitangent = cross(normal, tangent); mat3 TBN       = mat3(tangent, bitangent, normal);  <\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0413\u0440\u0430\u043c\u043c\u0430-\u0428\u043c\u0438\u0434\u0442\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441, \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u043a\u043b\u043e\u043d\u0435\u043d\u043d\u044b\u043c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <i>randomVec<\/i>. \u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043d\u0435\u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0442\u0440\u0438\u0446\u0430 TBN \u0431\u044b\u043b\u0430 \u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432\u0434\u043e\u043b\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 (\u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 parallax mapping&#8217;\u043e\u043c, \u043f\u0440\u0438\u043c. \u043f\u0435\u0440.), \u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438 \u0431\u0438\u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 \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 \u0432\u0438\u0434\u043e\u0432\u043e\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u0441\u0443\u043c\u043c\u0443 \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u0417\u0430\u0442\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0443\u043c\u043c\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0433\u043b\u0443\u0431\u0438\u043d\u044b, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u043e\u0439 \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b G-\u0431\u0443\u0444\u0435\u0440\u0430. <\/p>\n<p>  \u041f\u043e\u043a\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e \u043f\u043e \u0448\u0430\u0433\u0430\u043c:  <\/p>\n<pre><code class=\"cpp\">float occlusion = 0.0; for(int i = 0; i &lt; kernelSize; ++i) {     \/\/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u043a\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438     vec3 sample = TBN * samples[i]; \/\/ \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u0435 \u043f\u0440-\u0432\u043e     sample = fragPos + sample * radius;           [...] }  <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c <i>kernelSize <\/i>\u0438 <i>radius <\/i>\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0438 \u0440\u0430\u0432\u043d\u044b 64 \u0438 0.5 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e radius, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 SSAO.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u0438\u0445 \u0448\u0430\u0433\u043e\u0432 \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 <i>sample <\/i>\u0432 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b G-\u0431\u0443\u0444\u0435\u0440\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0439 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0441\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <i>sample <\/i>\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 <i>projection<\/i>:  <\/p>\n<pre><code class=\"cpp\">vec4 offset = vec4(sample, 1.0); offset      = projection * offset;    \/\/ \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0437 \u0432\u0438\u0434\u043e\u0432\u043e\u0433\u043e  \u043a\u043b\u0438\u043f\u043e\u0432\u043e\u0435 offset.xyz \/= offset.w;               \/\/ \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435  offset.xyz  = offset.xyz * 0.5 + 0.5; \/\/ \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0443 [0., 1.] <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043b\u0438\u043f\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043c\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <i>xyz <\/i>\u043d\u0430 <i>w <\/i>\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (<i>NDC<\/i>) \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 [0., 1.] \u0434\u0430\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b:  <\/p>\n<pre><code class=\"cpp\">float sampleDepth = texture(gPosition, offset.xy).z; <\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b <i>xy <\/i>\u0432\u0435\u043a\u0442\u043e\u0440\u0430 <i>sample <\/i>\u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439 G-\u0431\u0443\u0444\u0435\u0440\u0430. \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0433\u043b\u0443\u0431\u0438\u043d\u044b (<i>z<\/i> \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b), \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0443 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438 \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044f (\u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0435 \u0437\u0430\u0441\u043b\u043e\u043d\u0435\u043d\u043d\u044b\u0439 \u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442). \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u0430, \u0442\u043e \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">occlusion += (sampleDepth &gt;= sample.z + bias ? 1.0 : 0.0);  <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 <i>bias<\/i>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 (\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0432 0.025). \u042d\u0442\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u043c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 SSAO, \u0430 \u0442\u0430\u043a\u0436\u0435, \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445, \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0440\u044f\u0431\u044c\u044e \u0432 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445.<\/p>\n<p>  \u041d\u043e \u0438 \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c. \u041e\u043d \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432\u0431\u043b\u0438\u0437\u0438 \u043a\u0440\u0430\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0433\u043b\u0443\u0431\u0438\u043d \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442 \u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u043b\u0435\u043a\u043e \u043f\u043e\u0437\u0430\u0434\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439. \u0412 \u044d\u0442\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0435 \u0442\u0435\u043c\u043d\u044b\u0435 \u043e\u0440\u0435\u043e\u043b\u044b \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u043e\u043c <a href=\"http:\/\/john-chapman-graphics.blogspot.com\/\">John Chapman<\/a>):<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zv\/yv\/eq\/zvyveqh3zc_rjcy6fo-z8d76eme.png\"><\/div>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u043a\u043b\u0430\u0434 \u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b, \u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438:  <\/p>\n<pre><code class=\"cpp\">float rangeCheck = smoothstep(0.0, 1.0, radius \/ abs(fragPos.z - sampleDepth)); occlusion       += (sampleDepth &gt;= sample.z + bias ? 1.0 : 0.0) * rangeCheck;         <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e GLSL <i>smoothstep()<\/i>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u043b\u0430\u0432\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0438 \u0432\u0442\u043e\u0440\u044b\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f 0, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u0435\u043d \u043f\u0435\u0440\u0432\u043e\u043c\u0443, \u043b\u0438\u0431\u043e 1, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u0438\u0431\u043e \u0440\u0430\u0432\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u043c\u0443. \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0433\u043b\u0443\u0431\u0438\u043d \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 <i>radius<\/i>, \u0442\u043e \u0435\u0451 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043b\u0430\u0432\u043d\u043e \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 [0., 1.] \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jq\/9h\/p4\/jq9hp4-yun_sc277m6pslbjyin0.png\"><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0447\u0435\u0442\u043a\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u044b, \u0442\u043e \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e \u0431\u044b \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0432 \u0432\u0438\u0434\u0435 \u0440\u0435\u0437\u043a\u0438\u0445 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432 \u0442\u0435\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0433\u0434\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u0433\u043b\u0443\u0431\u0438\u043d \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 <i>radius<\/i>.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0448\u0442\u0440\u0438\u0445\u043e\u043c \u043c\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u044b\u0447\u0438\u0442\u0430\u044f \u0435\u0433\u043e \u0438\u0437 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0434\u0430\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:  <\/p>\n<pre><code class=\"cpp\">} occlusion = 1.0 - (occlusion \/ kernelSize); FragColor = occlusion;  <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u0446\u0435\u043d\u044b \u0441 \u043b\u0435\u0436\u0430\u0449\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c \u043d\u0430\u043c \u043d\u0430\u043d\u043e\u043a\u043e\u0441\u0442\u044e\u043c\u043e\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 SSAO \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0434\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/-z\/a4\/fx\/-za4fxhsbref6easc-cgxnsp94q.png\"><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u044d\u0444\u0444\u0435\u043a\u0442 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u0438\u043b\u043b\u044e\u0437\u0438\u044e \u0433\u043b\u0443\u0431\u0438\u043d\u044b. \u041e\u0434\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0443\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u043a\u043e\u0441\u0442\u044e\u043c\u0430 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043f\u043e\u043b\u0443, \u0430 \u043d\u0435 \u043b\u0435\u0432\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u0442 \u043d\u0435\u0433\u043e.<\/p>\n<p>  \u0418 \u0432\u0441\u0435 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u0430\u043b\u0435\u043a \u043e\u0442 \u0438\u0434\u0435\u0430\u043b\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0448\u0443\u043c\u043e\u0432\u043e\u0439 \u0443\u0437\u043e\u0440, \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430, \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043c\u0435\u0442\u0435\u043d. \u0414\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 SSAO \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f.<\/p>\n<h2>\u0420\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 SSAO \u0438 \u043f\u0435\u0440\u0435\u0434 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0435 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">unsigned int ssaoBlurFBO, ssaoColorBufferBlur; glGenFramebuffers(1, &amp;ssaoBlurFBO); glBindFramebuffer(GL_FRAMEBUFFER, ssaoBlurFBO); glGenTextures(1, &amp;ssaoColorBufferBlur); glBindTexture(GL_TEXTURE_2D, ssaoColorBufferBlur); glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_FLOAT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ssaoColorBufferBlur, 0);<\/code><\/pre>\n<p>  \u0422\u0430\u0439\u043b\u0438\u043d\u0433 \u0448\u0443\u043c\u043e\u0432\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u044e \u043f\u043e\u043b\u044c\u0437\u0443 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">#version 330 core out float FragColor;    in vec2 TexCoords;    uniform sampler2D ssaoInput;  void main() {     vec2 texelSize = 1.0 \/ vec2(textureSize(ssaoInput, 0));     float result = 0.0;     for (int x = -2; x &lt; 2; ++x)      {         for (int y = -2; y &lt; 2; ++y)          {             vec2 offset = vec2(float(x), float(y)) * texelSize;             result += texture(ssaoInput, TexCoords + offset).r;         }     }     FragColor = result \/ (4.0 * 4.0); }  <\/code><\/pre>\n<p>  \u0428\u0435\u0439\u0434\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e \u0442\u0435\u043a\u0441\u0435\u043b\u044f\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b SSAO \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 -2 \u0434\u043e +2, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c \u0448\u0443\u043c\u043e\u0432\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e \u0442\u043e\u0447\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0435\u043b\u044f: \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>textureSize()<\/i>, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f <i>vec2 <\/i>\u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0422.\u043e. \u0448\u0435\u0439\u0434\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/5p\/0g\/i7\/5p0gi7qn_v5w738uyindxexally.png\"><\/div>\n<p>  \u0418\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0435\u0441\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u2013 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0434\u0438\u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f!<\/p>\n<h2>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u042d\u0442\u0430\u043f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442: \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440 \u0441 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0411\u043b\u0438\u043d\u043d\u0430-\u0424\u043e\u043d\u0433\u0430 \u0438\u0437 \u0443\u0440\u043e\u043a\u0430 \u043f\u043e <a href=\"https:\/\/habr.com\/post\/420565\">\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044e<\/a> \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0442\u044c:  <\/p>\n<pre><code class=\"cpp\">#version 330 core out vec4 FragColor;    in vec2 TexCoords;  uniform sampler2D gPosition; uniform sampler2D gNormal; uniform sampler2D gAlbedo; uniform sampler2D ssao;  struct Light {     vec3 Position;     vec3 Color;          float Linear;     float Quadratic;     float Radius; }; uniform Light light;  void main() {                  \/\/ \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 G-\u0431\u0443\u0444\u0435\u0440\u0430     vec3 FragPos = texture(gPosition, TexCoords).rgb;     vec3 Normal = texture(gNormal, TexCoords).rgb;     vec3 Diffuse = texture(gAlbedo, TexCoords).rgb;     float AmbientOcclusion = texture(ssao, TexCoords).r;          \/\/ \u0440\u0430\u0441\u0447\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0411\u043b\u0438\u043d\u043d\u0430-\u0424\u043e\u043d\u0433\u0430 \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435          \/\/ \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432\u043e: \u0443\u0447\u0435\u0442 \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u043a-\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f     vec3 ambient = vec3(0.3 * Diffuse * AmbientOcclusion);      vec3 lighting  = ambient;      \/\/ \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044f \u0432\u0441\u0435\u0433\u0434\u0430 (0, 0, 0) \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440-\u0432\u0435     vec3 viewDir  = normalize(-FragPos);      \/\/ \u0434\u0438\u0444\u0444\u0443\u0437\u043d\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f     vec3 lightDir = normalize(light.Position - FragPos);     vec3 diffuse = max(dot(Normal, lightDir), 0.0) * Diffuse * light.Color;     \/\/ \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f     vec3 halfwayDir = normalize(lightDir + viewDir);       float spec = pow(max(dot(Normal, halfwayDir), 0.0), 8.0);     vec3 specular = light.Color * spec;     \/\/ \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f     float dist = length(light.Position - FragPos);     float attenuation = 1.0 \/ (1.0 + light.Linear * dist + light.Quadratic * dist * dist);     diffuse  *= attenuation;     specular *= attenuation;     lighting += diffuse + specular;      FragColor = vec4(lighting, 1.0); }<\/code><\/pre>\n<p>  \u0421\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430: \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u043c \u0432 \u0432\u0438\u0434\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>AmbientOcclusion<\/i>. \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0446\u0435\u043d\u044b \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u0438\u043d\u0438\u043c \u0442\u043e\u0447\u0435\u0447\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0441\u0432\u0435\u0442\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bz\/8_\/1i\/bz8_1in-othscilg_udfyscghg0.png\"><\/div>\n<p>  \u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043b\u0435\u0436\u0438\u0442 <a href=\"https:\/\/learnopengl.com\/code_viewer_gh.php?code=src\/5.advanced_lighting\/9.ssao\/ssao.cpp\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u041f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 SSAO \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0442\u0438\u043f\u0430 <i>kernelSize<\/i>, <i>radius <\/i>\u0438 <i>bias<\/i>, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0438\u0445 \u0442\u043e\u043d\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u2013 \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439 \u0440\u0430\u0437\u0443\u043c\u0435\u044e\u0449\u0435\u0435\u0441\u044f \u0437\u0430\u043d\u044f\u0442\u0438\u0435 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043b\u043e\u043a\u0430\u0446\u0438\u0438\/\u0441\u0446\u0435\u043d\u044b. \u041d\u0435\u0442 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u00ab\u043b\u0443\u0447\u0448\u0438\u0445\u00bb \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432: \u0434\u043b\u044f \u043e\u0434\u043d\u0438\u0445 \u0441\u0446\u0435\u043d \u0445\u043e\u0440\u043e\u0448 \u043c\u0430\u043b\u044b\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u044f\u0434\u0440\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442 \u043e\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u0438 \u0447\u0438\u0441\u043b\u0430 \u0432\u044b\u0431\u043e\u0440\u043e\u043a. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 64 \u0442\u043e\u0447\u043a\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u0447\u0442\u043e, \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e, \u043d\u043e \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u043c \u0447\u0438\u0441\u043b\u0435 \u0432\u044b\u0431\u043e\u0440\u043e\u043a.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u044e\u043d\u0438\u0444\u043e\u0440\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u044d\u0444\u0444\u0435\u043a\u0442\u0430, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044f\u0432\u043d\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043e\u0437\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0435\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u044e\u043d\u0438\u0444\u043e\u0440\u043c\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">occlusion = 1.0 - (occlusion \/ kernelSize);        FragColor = pow(occlusion, power);<\/code><\/pre>\n<p>  \u0421\u043e\u0432\u0435\u0442\u0443\u044e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0438\u0433\u0440\u0443 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0434\u0430\u0441\u0442 \u043b\u0443\u0447\u0448\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435.<\/p>\n<p>  \u041f\u043e\u0434\u0432\u043e\u0434\u044f \u0438\u0442\u043e\u0433, \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f SSAO \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u0430\u0431\u043e\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0439, \u043d\u043e \u0432 \u0441\u0446\u0435\u043d\u0430\u0445 \u0441 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u043d \u043d\u0435\u043e\u0441\u043f\u043e\u0440\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u0443\u044e \u0442\u043e\u043b\u0438\u043a\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043c\u0430. \u0418\u043c\u0435\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0441\u0432\u043e\u0435\u043c \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0435 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0446\u0435\u043d\u043d\u043e.<\/p>\n<h2>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b<\/h2>\n<ol>\n<li><a href=\"http:\/\/john-chapman-graphics.blogspot.nl\/2013\/01\/ssao-tutorial.html\">SSAO Tutorial<\/a>: \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f-\u0443\u0440\u043e\u043a \u043e\u0442 John Chapman, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u043a\u0430.<\/li>\n<li><a href=\"https:\/\/mtnphil.wordpress.com\/2013\/06\/26\/know-your-ssao-artifacts\/\">Know your SSAO artifacts<\/a>: \u0412\u0435\u0441\u044c\u043c\u0430 \u0446\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043e\u0445\u043e\u0434\u0447\u0438\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0435 \u043d\u0430\u0441\u0443\u0449\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c SSAO, \u043d\u043e \u0438 \u043f\u0443\u0442\u0438 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044e.<\/li>\n<li><a href=\"http:\/\/ogldev.atspace.co.uk\/www\/tutorial46\/tutorial46.html\">SSAO With Depth Reconstruction<\/a>: \u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c\u0443 \u0443\u0440\u043e\u043a\u0443 \u043e SSAO \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 OGLDev, \u043a\u0430\u0441\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u044b. \u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u0430 \u0432\u0435\u0441\u043e\u043c\u043e\u0439 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 G-\u0431\u0443\u0444\u0435\u0440\u0435. \u041f\u043e\u0434\u0445\u043e\u0434 \u0442\u0430\u043a \u0442\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439, \u043a SSAO \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443.<\/li>\n<\/ol>\n<p>  <b>P.S.<\/b>: \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <a href=\"https:\/\/t.me\/joinchat\/Cpb05A46UPpMWdNVVCb4Vg\">\u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u043e\u043d\u0444\u0430 <\/a>\u0434\u043b\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c, \u0442\u043e \u043c\u0438\u043b\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0438\u043c!<\/div>\n<p>        <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <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\/post\/421385\/\"> https:\/\/habr.com\/post\/421385\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div data-io-article-url=\"https:\/\/habr.com\/post\/421385\/\" class=\"post__text post__text-html js-mediator-article\"><img decoding=\"async\" align=\"left\" src=\"https:\/\/habrastorage.org\/web\/c9e\/9b2\/a3b\/c9e9b2a3baf749ab8e2b385c6d93d966.png\" alt=\"OGL3\" width=\"300\"> <\/p>\n<h2>SSAO<\/h2>\n<p>  \u0422\u0435\u043c\u0430 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0430 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u0430 \u043d\u0430\u043c\u0438 \u0432 \u0443\u0440\u043e\u043a\u0435 \u043f\u043e <a href=\"https:\/\/habrahabr.ru\/post\/333932\">\u043e\u0441\u043d\u043e\u0432\u0430\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f<\/a>, \u043d\u043e \u043b\u0438\u0448\u044c \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c. \u041d\u0430\u043f\u043e\u043c\u043d\u044e: \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u2013 \u0441\u0443\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u0432\u043e \u0432\u0441\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 <i>\u0440\u0430\u0441\u0441\u0435\u044f\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u0430<\/i>. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435 \u043c\u0438\u0440\u0435 \u0441\u0432\u0435\u0442 \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0439 \u0437\u0430\u0441\u0432\u0435\u0442\u043a\u0435 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u0441\u0446\u0435\u043d\u044b. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0437\u0430\u0441\u0432\u0435\u0442\u043a\u0430 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u0430. <br \/>  \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0432\u0438\u0434\u043e\u0432 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0442 \u043d\u0435\u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <i>\u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f <\/i>(<i>ambient occlusion, AO<\/i>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u0433\u043b\u043e\u0432, \u0441\u043a\u043b\u0430\u0434\u043e\u043a \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u044f\u0445 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439. \u0422\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439 \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043b\u0443\u0447\u0430\u043c \u0441\u0432\u0435\u0442\u0430 \u0432\u044b\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0440\u0443\u0436\u0443, \u0437\u0430\u0442\u0435\u043c\u043d\u044f\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438.<\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u0431\u0435\u0437 \u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 AO. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u0433\u043b\u043e\u0432 \u0441\u0442\u0435\u043d \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0440\u0435\u0437\u043a\u0438\u0445 \u0438\u0437\u043b\u043e\u043c\u043e\u0432 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/6s\/8z\/kv\/6s8zkvpob8nbgaails8mtfutgw8.png\"><\/div>\n<p>  \u041f\u0443\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u043c\u0435\u0442\u0435\u043d, \u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0432\u043e \u0432\u0441\u0435\u0439 \u0441\u0446\u0435\u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043b\u043b\u044e\u0437\u0438\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u043c\u0430\u043b\u044b\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0441\u0430\u043c\u043e\u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-288566","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/288566","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=288566"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/288566\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=288566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=288566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=288566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}