{"id":305138,"date":"2020-06-10T09:00:45","date_gmt":"2020-06-10T09:00:45","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=305138"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=305138","title":{"rendered":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0432 Godot 3.2"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/506120\/\">\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/Tk2P235GX1E?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\" allow=\"encrypted-media; accelerometer; gyroscope; picture-in-picture\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Godot 3 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0432\u0441\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435.<\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/danilw.itch.io\/godot-graphic-demo-3d?password=demo\" rel=\"nofollow\">\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 itch.io<\/a><\/strong>, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f WebGL2.<br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/danilw\/godot-utils-and-other\" rel=\"nofollow\">\u043d\u0430 github<\/a>, \u043f\u0440\u043e\u0435\u043a\u0442 graphic_demo_3d.<\/p>\n<p>  <\/p>\n<h2 id=\"statya-razbita-na-takie-razdely\">\u0421\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b:<\/h2>\n<p>  <\/p>\n<ol>\n<li>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u043f\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u043c\u0435\u043d\u0430 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u0441\u044d\u043c\u043f\u043b\u0438\u043d\u0433.<\/li>\n<li>\u041f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0438 \u0438\u0445 \u043b\u043e\u0433\u0438\u043a\u0443.<\/li>\n<li>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.<\/li>\n<\/ol>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"o-chem-eto\">\u041e \u0447\u0435\u043c \u044d\u0442\u043e:<\/h2>\n<p>  <\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043c \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b. <\/p>\n<p>  <\/p>\n<p><strong>\u0421\u043a\u0430\u0447\u0430\u0442\u044c<\/strong> \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043b\u044f Linux \u0438 Windows <strong><a href=\"https:\/\/danilw.itch.io\/godot-graphic-demo-3d?password=demo\" rel=\"nofollow\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 itch.io<\/a><\/strong>.<br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/danilw\/godot-utils-and-other\" rel=\"nofollow\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 github<\/a>.<\/p>\n<p>  <\/p>\n<p><strong>\u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 Godot 3.2.1<\/strong>, \u0431\u0435\u0437 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. <\/p>\n<p>  <\/p>\n<h2 id=\"staticheskie-tekstury\">\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b<\/h2>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/i.imgur.com\/iWQgibF.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p><strong>Ray-tracer \u0438 \u0443\u0431\u0438\u0440\u0430\u043d\u0438\u0435 \u0448\u0443\u043c\u0430:<\/strong><br \/>  \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f raytracer. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044d\u0442\u043e Blender-cycles.<br \/>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u043d\u043e\u0438\u0437\u0435\u0440\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 <a href=\"https:\/\/github.com\/BrutPitt\/glslSmartDeNoise\/\" rel=\"nofollow\">glslSmartDeNoise<\/a>.<\/p>\n<p>  <\/p>\n<p><strong>\u0420\u0430\u0437\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f:<\/strong><br \/>  \u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <code>graphic_demo_3d\/game\/models\/objects\/arc\/<\/code> \u0435\u0441\u0442\u044c \u043f\u0430\u043f\u043a\u0438 <code>orig+\u0446\u0432\u0435\u0442<\/code> \u0433\u0434\u0435 \u0432\u0441\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438(\u043c\u0435\u0448\u0430).<br \/>  \u0418 \u044d\u0442\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 <a href=\"https:\/\/github.com\/danilw\/godot-utils-and-other\/tree\/master\/graphic_demo_3d\/game\/models\/objects\/arc\/arc.gd\" rel=\"nofollow\">arc.gd<\/a><\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0430\u043d\u043e\u0440\u0430\u043c\u044b:<\/strong><br \/>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043f\u0430\u043d\u043e\u0440\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0444\u0435\u0440\u0430\u0445, \u0434\u0435\u043b\u0430\u043b cubemap \u0441\u043d\u0438\u043c\u043e\u043a \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u043f\u0430\u043d\u043e\u0440\u0430\u043c\u0443, \u0432 Godot \u0442\u0430\u043a\u043e\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0447\u0435\u043c \u0432 Blender.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u0443 \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0444\u0435\u0440 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0441\u043d\u0438\u043c\u043e\u043a \u043a \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u043c \u0448\u0430\u0440\u0430\u043c, \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f. <\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hj\/ra\/hx\/hjrahxk0b0wpfoloukyyv94_5xa.png\"><\/p>\n<p>  <\/p>\n<h2 id=\"sglazhivanie-i-multisempling\">\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u0441\u044d\u043c\u043f\u043b\u0438\u043d\u0433<\/h2>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/i.imgur.com\/kzpAEnK.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u041c\u0443\u043b\u044c\u0442\u0438\u0441\u044d\u043c\u043f\u043b\u0438\u043d\u0433(MSAA) \u043d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u043e\u0439, \u0438 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u043d \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<br \/>  \u041d\u0430 \u0432\u0438\u0434\u0435\u043e \u0432\u044b\u0448\u0435 \u0448\u0435\u0439\u0434\u0435\u0440 \u0440\u0438\u0441\u0443\u0435\u0442 \u043b\u0438\u043d\u0438\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>smoothstep<\/code>, \u0438 <strong>\u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0434\u0438\u0443\u0441 <code>smoothstep<\/code> \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f <em>\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0448\u0435\u0439\u0434\u0435\u0440\u0430<\/em><\/strong>, \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u044d\u0442\u0430\u0436\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0431\u0435\u0437 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><strong>\u041d\u0430 \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u0444\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u0441\u044d\u043c\u043f\u043b\u0438\u043d\u0433 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b<\/strong>, \u043a\u043e\u0434 \u0448\u0435\u0439\u0434\u0435\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">    const int AA=4;     for (int mx = 0; mx &lt; AA; mx++)         for (int nx = 0 ; nx &lt; AA; nx++) {             vec2 o = vec2(float(mx), float(nx)) \/ float(AA) - 0.5;             o=tuv+o*baa;             tot+=texture(p_o,o).rgb;         }     tot \/= float(AA * AA);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0413\u0434\u0435 <code>baa<\/code> \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043e\u0442 \u043a\u0430\u043c\u0435\u0440\u044b.<br \/>  \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f.<br \/>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 mipmaps \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0430 \u043f\u0430\u043d\u043e\u0440\u0430\u043c\u0430 \u0438 \u0441\u0444\u0435\u0440\u0430(\u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439), \u043a\u0443\u0431\u0435\u043c\u0430\u043f \u043d\u0430 \u0441\u0444\u0435\u0440\u0443 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u043d\u0430\u0442\u044f\u043d\u0443\u0442\u044c \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 mipmaps\u2026 <\/p>\n<p>  <\/p>\n<p><strong>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043b\u0443\u0447\u0430\u0439, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435<\/strong> \u2014 \u043a\u043e\u0433\u0434\u0430 \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u044f\u0440\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438, \u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0447\u0442\u043e\u0431 \u0438\u0445 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/i.imgur.com\/kXz6nVh.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0421\u043f\u0440\u0430\u0432\u0430 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f <em>\u0431\u0435\u0437 \u0444\u043e\u043a\u0443\u0441\u043e\u0432<\/em> \u0447\u0435\u0441\u0442\u043d\u0430\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f(\u043c\u0435\u0448), \u0438 \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u043d\u0430 \u0442\u0435\u043c\u043d\u043e\u0439 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u043f\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c.<\/p>\n<p>  <\/p>\n<p>\u042f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u043b <em>\u0442\u043e\u0447\u043a\u0438<\/em>(GL_POINT) \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u044c \u044d\u0442\u0438\u0445 \u043c\u0435\u043b\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c <em>\u0442\u043e\u0447\u043a\u0430<\/em> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u043d\u0430 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0435\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"pro-ispolzuemye-sheydery-i-ih-logiku\">\u041f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0438 \u0438\u0445 \u043b\u043e\u0433\u0438\u043a\u0443.<\/h2>\n<p>  <\/p>\n<h4 id=\"sheyder-outline-dlya-odnogo-obekta\">\u0428\u0435\u0439\u0434\u0435\u0440 outline \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430:<\/h4>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/my\/jw\/kj\/myjwkjmzbheoeryqp7-c2ljsuks.png\"><\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0442\u0430\u043a\u043e\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <a href=\"http:\/\/www.adriancourreges.com\/blog\/2015\/03\/10\/deus-ex-human-revolution-graphics-study\/\" rel=\"nofollow\">Silhouette Effect<\/a>.<br \/>  \u0412 Godot 3 \u043d\u0435\u043b\u044c\u0437\u044f, \u0431\u0435\u0437 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0434\u0432\u0438\u0436\u043a\u0430, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0438 ID \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0438 \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u0434\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e framebuffer(Viewport) \u0433\u0434\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0438 \u043f\u043e\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043c\u0430\u043b\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u043e\u043b\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0436\u0434\u0435\u043c Godot 4.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u043a\u0430\u043c\u0435\u0440\u0443 \u043d\u0430 \u0441\u0446\u0435\u043d\u0443, \u0438 \u044d\u0442\u0430 \u043a\u0430\u043c\u0435\u0440\u0430 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442 \u2014 \u0432\u043e\u043b\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u043d\u0442\u0443\u0440 \u0431\u0443\u0434\u0435\u0442, \u043a\u0430\u043c\u0435\u0440\u0430 \u0432 Viewport \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 2 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<p>  <\/p>\n<h4 id=\"sheyder-dlya-osvescheniya-i-teney\">\u0428\u0435\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u043d\u0435\u0439:<\/h4>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/er\/ol\/7m\/erol7mw2jpgeo5h3dhfqnwvf1bi.png\"><\/p>\n<p>  <\/p>\n<p>\u0412 Godot \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0442\u0435\u043d\u0438, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 Godot 3 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b \u0432 Godot 4.<br \/>  \u041a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/danilw\/godot-utils-and-other\/tree\/master\/graphic_demo_3d\/game\/models\/objects\/box\/floor.shader\" rel=\"nofollow\">box\/floor.shader<\/a><\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">void light() {     vec3 col=texture(floor_img,UV).rgb;     if(col.r&gt;0.001){         float dif = clamp(dot(NORMAL,LIGHT), 0.0, 1.0);         vec3 hal = normalize(VIEW+LIGHT);         float spe = pow(clamp(dot(hal, NORMAL), 0.0, 1.0), 32.0);         vec3 ta=ATTENUATION;         vec2 tuv=UV*vec2(15.,10.)*50.;         vec2 ddx = dFdx(tuv);          vec2 ddy = dFdy(tuv);         float tx=filteredSquares(tuv, ddx, ddy);         float tx2=filteredCrosses(tuv, ddx, ddy);         DIFFUSE_LIGHT = dif*co*spe*4.* ta*col;         DIFFUSE_LIGHT = clamp(DIFFUSE_LIGHT,0.,1.);         SPECULAR_LIGHT = mix(ta,vec3(0.)+DIFFUSE_LIGHT,clamp(dif*spe*5.,0.,1.))*tx+0.5*((1.-tx2)*(clamp(1.-ta*5.,0.,1.)));         SPECULAR_LIGHT = clamp(SPECULAR_LIGHT*col,0.,1.);     }     else{         DIFFUSE_LIGHT=vec3(0.);         SPECULAR_LIGHT=vec3(0.);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u0442\u0430\u043a\u0430\u044f \u0447\u0442\u043e, \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b <code>floor_img<\/code> \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0442\u0435\u043d\u044c \u0438 \u0441\u0432\u0435\u0442 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0431\u0435\u043b\u043e\u0433\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>filteredSquares<\/code> \u0438 <code>filteredCrosses<\/code> \u043e\u0442 <a href=\"https:\/\/iquilezles.org\/www\/articles\/filterableprocedurals\/filterableprocedurals.htm\" rel=\"nofollow\">iquilezles.org<\/a>.<br \/>  \u042d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442 \u0441\u0432\u043e\u0439 <em>\u0443\u0437\u043e\u0440<\/em>(\u043f\u0430\u0442\u0435\u0440\u043d), \u0438 \u044d\u0442\u043e\u0442 \u0443\u0437\u043e\u0440 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 <code>ATTENUATION<\/code>, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 SPECULAR_LIGHT \u043e\u0442 DIFFUSE_LIGHT \u0447\u0442\u043e\u0431 \u043e\u0434\u0438\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0435\u043b\u044b\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0436\u0435\u043b\u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<h4 id=\"depth---kontur-u-fioletovogo-schita\">Depth \u2014 \u043a\u043e\u043d\u0442\u0443\u0440 \u0443 \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u0449\u0438\u0442\u0430.<\/h4>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/cz\/cd\/pi\/czcdpij1oyr0gocgtyeur2chzca.png\"><\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439(depth) \u043e\u0442\u0441\u044e\u0434\u0430 <a href=\"https:\/\/github.com\/curly-brace\/godot_force_shield_shader\" rel=\"nofollow\">godot_force_shield_shader<\/a><br \/>  \u0428\u0435\u0439\u0434\u0435\u0440 \u0448\u0443\u043c\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e <a href=\"https:\/\/www.shadertoy.com\/view\/ldlXRS\" rel=\"nofollow\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 shadertoy<\/a><br \/>  \u0421\u0430\u043c \u043a\u043e\u0434 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/danilw\/godot-utils-and-other\/tree\/master\/graphic_demo_3d\/game\/models\/objects\/spheres\/shield.shader\" rel=\"nofollow\">shield.shader<\/a>.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0441\u043b\u043e\u044f\u043c\u0438, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u043c, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0441\u043b\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 <code>SCREEN_TEXTURE<\/code> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435(\u0432\u043e\u043b\u043d\u044b) \u0441\u043d\u0430\u0440\u0443\u0436\u0438.<\/p>\n<p>  <\/p>\n<h4 id=\"area-lights\">Area lights:<\/h4>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pk\/jk\/1w\/pkjk1wid9ainv1qejlxtek0vsl4.png\"><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/sa\/bt\/lm\/sabtlmvjimad7tt_tsf1-nr3xvu.png\"><\/p>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b <a href=\"https:\/\/eheitzresearch.wordpress.com\/415-2\/\" rel=\"nofollow\">Real-Time Polygonal-Light Shading with Linearly Transformed Cosines<\/a> \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 <a href=\"https:\/\/www.shadertoy.com\/view\/MsyXRG\" rel=\"nofollow\">\u043d\u0430 shadertoy \u0441\u0441\u044b\u043b\u043a\u0430<\/a>, \u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432.<br \/>  \u0418 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0444\u0435\u0440\u044b \u0438 \u0442\u0440\u0443\u0431\u044b <a href=\"https:\/\/www.shadertoy.com\/view\/ldfGWs\" rel=\"nofollow\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 shadertoy<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0434 \u044d\u0442\u0438\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0432 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 <a href=\"https:\/\/github.com\/danilw\/godot-utils-and-other\/tree\/master\/graphic_demo_3d\/game\/models\/objects\/area_lights\/floor.shader\" rel=\"nofollow\">area_lights\/floor.shader<\/a> \u0438 <a href=\"https:\/\/github.com\/danilw\/godot-utils-and-other\/tree\/master\/graphic_demo_3d\/game\/models\/objects\/area_lights2\/floor_area.shader\" rel=\"nofollow\">area_lights2\/floor_area.shader<\/a><\/p>\n<p>  <\/p>\n<p>\u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0432 Godot \u043d\u0435\u0442, \u0432\u0441\u0435 \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u0430\u0445, \u0433\u0434\u0435 \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439.<\/p>\n<p>  <\/p>\n<h2 id=\"nemnogo-pro-logiku-skriptov\">\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.<\/h2>\n<p>  <\/p>\n<p><strong>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 <em>\u0432\u043e\u043b\u043a\u0430<\/em><\/strong> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0432 Godot \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c Navigation, \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438\u0437 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430 Godot <a href=\"https:\/\/github.com\/godotengine\/godot-demo-projects\/tree\/master\/3d\/navmesh\" rel=\"nofollow\">3D Navigation Mesh<\/a>. <em>\u0412\u043e\u043b\u043a \u0431\u0435\u0436\u0438\u0442 \u043a \u043a\u0430\u043c\u0435\u0440\u0435 \u043f\u043e \u043a\u043b\u0438\u043a\u0443 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438<\/em>.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0438\u0440\u0430\u043c\u0438\u0434\u044b-\u043b\u0430\u043c\u043f\u044b<\/strong> \u0432\u043e\u043a\u0440\u0443\u0433 \u043f\u043e\u043b\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0447\u0430\u0441\u0442\u0438\u0446\u0430\u043c\u0438, \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0440\u0442\u044f\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<br \/>  \u0421\u043c\u0435\u043d\u0430 \u0446\u0432\u0435\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0448\u0435\u0439\u0434\u0435\u0440, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043a\u0430\u043c\u0435\u0440\u044b. <\/p>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u043d\u0430 \u043f\u043e\u043b\u0443<\/strong> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 framebuffer(Viewport) \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f 20&#215;20 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439.<br \/>  \u0412 \u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0445 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0438 <em>\u0432\u043e\u043b\u043a\u0430<\/em>, \u0434\u0432\u0443\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.<\/p>\n<p>  <\/p>\n<p><strong>\u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u043f\u043e\u043b\u0435:<\/strong><\/p>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/i.imgur.com\/ormRAKf.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. (\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0439 \u043b\u0430\u0433, \u044f \u0443\u0436\u0435 \u043d\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u044d\u0442\u043e)<\/p>\n<p>  <\/p>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f\u043c\u0438<\/strong>.<br \/>  \u0412\u0437\u044f\u0442\u044b \u0438\u0437 sketchfab, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u2014 <a href=\"https:\/\/sketchfab.com\/3d-models\/wolf-with-animations-f3769a474a714ebbbaca0d97f9b0a5a0\" rel=\"nofollow\">\u043c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u043b\u043a\u0430<\/a> \u0438 <a href=\"https:\/\/sketchfab.com\/3d-models\/lil-guy-8fd55a0dcd8042168e7ffa57d7f279a5\" rel=\"nofollow\">\u043c\u043e\u0434\u0435\u043b\u044c \u0440\u043e\u0431\u043e\u0442\u0430<\/a>.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/strong> \u2014 \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043d\u0430 Nvidia 750 \u0438 Vega 8 \u043a\u0430\u0440\u0442\u0430\u0445, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 60fps \u0432 1080p \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u0434\u0443\u043c\u0430\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043d\u043e\u0440\u043c\u044b. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043d\u0430 Windows \u0438 Linux \u2014 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412 WebGL2 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"konec-stati\">\u041a\u043e\u043d\u0435\u0446 \u0441\u0442\u0430\u0442\u044c\u0438<\/h2>\n<p>  <\/p>\n<p>\u041a\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u2014 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0412\u0430\u043c \u0447\u0442\u043e \u0443\u0434\u0435\u043b\u0438\u043b\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u0443.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/506120\/\"> https:\/\/habr.com\/ru\/post\/506120\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/506120\/\">\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/Tk2P235GX1E?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\" allow=\"encrypted-media; accelerometer; gyroscope; picture-in-picture\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Godot 3 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0432\u0441\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435.<\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/danilw.itch.io\/godot-graphic-demo-3d?password=demo\" rel=\"nofollow\">\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 itch.io<\/a><\/strong>, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f WebGL2.<br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/danilw\/godot-utils-and-other\" rel=\"nofollow\">\u043d\u0430 github<\/a>, \u043f\u0440\u043e\u0435\u043a\u0442 graphic_demo_3d.<\/p>\n<p>  <\/p>\n<h2 id=\"statya-razbita-na-takie-razdely\">\u0421\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b:<\/h2>\n<p>  <\/p>\n<ol>\n<li>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u043f\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u043c\u0435\u043d\u0430 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u0441\u044d\u043c\u043f\u043b\u0438\u043d\u0433.<\/li>\n<li>\u041f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0438 \u0438\u0445 \u043b\u043e\u0433\u0438\u043a\u0443.<\/li>\n<li>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.<\/li>\n<\/ol>\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-305138","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/305138","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=305138"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/305138\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=305138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=305138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=305138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}