{"id":466250,"date":"2025-07-07T15:13:31","date_gmt":"2025-07-07T15:13:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=466250"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=466250","title":{"rendered":"<span>\u041f\u0438\u0448\u0435\u043c 3D-\u0438\u0433\u0440\u0443 \u0434\u043b\u044f \u0440\u0435\u0442\u0440\u043e-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432\u0435\u0441\u043e\u043c \u0432 600\u041a\u0431\u2026<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>&#8230;\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u00a0<strong>\u043f\u0435\u0440\u0432\u044b\u0445\u00a0<\/strong>Android-\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0432 \u043c\u0438\u0440\u0435, \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0438\u0437 90-\u0445 \u0438 \u0434\u0430\u0436\u0435 Mac&#8217;\u0430\u0445! <strong>\u0427\u0430\u0441\u0442\u044c 2<\/strong>.  <\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0443 \u043c\u0435\u043d\u044f \u043b\u0435\u0436\u0438\u0442 \u0434\u0443\u0448\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0438\u0433\u0440\u0443\u0448\u043a\u0443 \u0441 \u043d\u0443\u043b\u044f, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u0441\u0442\u0430\u0432\u043b\u044e \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u043a\u0438: \u0438\u0433\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0441\u0438\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u043c\u0435\u0439\u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u00ab\u0442\u0430\u043d\u0447\u0438\u043a\u043e\u0432\u00bb \u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0433\u043e\u0442\u043e\u0432 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u00a0<strong>\u0432\u0441\u0435\u0445\u00a0<\/strong>\u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f \u0432 2025 \u0433\u043e\u0434\u0443. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 3D-\u0434\u0435\u043c\u043a\u0438 \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb \u043e\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u044f \u2014 \u0436\u0434\u0443 \u0432\u0430\u0441 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c!  <\/p>\n<h4>\u276f \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/h4>\n<ol>\n<li>\n<p><a href=\"#0\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#1\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u043d\u0434\u0435\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#2\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#3\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u043e\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#4\" rel=\"noopener noreferrer nofollow\">\u0422\u0435\u0441\u0442\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ol>\n<h2>\u276f \u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"0\" id=\"0\"><\/a><\/p>\n<p>\u0415\u0449\u0451 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430, \u043c\u043d\u0435 \u0432\u0437\u0431\u0440\u0435\u043b\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u00abWrite once, run anywhere\u00bb \u043f\u0440\u0430\u0432\u0434\u0438\u0432\u0430. \u0412\u0441\u0435 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e Java \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Enterprise-\u0441\u0435\u043a\u0442\u043e\u0440\u0435 \u043f\u043e \u0442\u0438\u043f\u0443 \u0431\u0430\u043d\u043a\u043e\u0432, Android-\u0433\u0430\u0434\u0436\u0435\u0442\u0430\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044f\u0437\u044b\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043e\u043a\u043e\u043b\u043e 80% \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0434\u0430\u0436\u0435 \u0432 \u0441\u043c\u0430\u0440\u0442-\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430\u0445, \u043a\u0443\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043d\u0430\u043c SIM \u0438 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/923\/fbb\/c05\/923fbbc059ae8f78cefd9e065a12ca50.jpeg\" width=\"516\" height=\"393\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/923\/fbb\/c05\/923fbbc059ae8f78cefd9e065a12ca50.jpeg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/923\/fbb\/c05\/923fbbc059ae8f78cefd9e065a12ca50.jpeg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0433\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0431\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0430\u043c\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 Android-\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0432 \u043c\u0438\u0440\u0435, \u043d\u043e \u0435\u0449\u0451 \u0438 \u043d\u0430 \u0440\u0435\u0442\u0440\u043e-\u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445, \u0438 \u043f\u0440\u0438 \u0432\u0441\u0451\u043c \u044d\u0442\u043e\u043c \u0431\u044b\u043b\u0430 3D. \u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043d\u0435\u0434\u0435\u043b\u0438, \u044f \u0443\u0441\u043f\u0435\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u0433\u043e\u043d\u043e\u0447\u043a\u0438 \u0441 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0438\u0437\u0438\u043a\u043e\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u00ab\u043b\u0438\u043d\u0438\u0439\u00bb:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/953\/f98\/424\/953f98424b8baf02443817f2da184c00.jpg\" alt=\"\u0412 \u0438\u0433\u0440\u0435 \u0431\u044b\u043b \u043c\u0443\u043b\u044c\u0442\u0438\u0440\u0435\u0434\u043d\u0435\u0440 \u0434\u043b\u044f M3G \u0438 MascotCapsule... \u043d\u0435 \u0445\u0443\u0436\u0435 \u0438\u0433\u0440 Fishlabs :))\" title=\"\u0412 \u0438\u0433\u0440\u0435 \u0431\u044b\u043b \u043c\u0443\u043b\u044c\u0442\u0438\u0440\u0435\u0434\u043d\u0435\u0440 \u0434\u043b\u044f M3G \u0438 MascotCapsule... \u043d\u0435 \u0445\u0443\u0436\u0435 \u0438\u0433\u0440 Fishlabs :))\" width=\"399\" height=\"782\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/953\/f98\/424\/953f98424b8baf02443817f2da184c00.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/953\/f98\/424\/953f98424b8baf02443817f2da184c00.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0412 \u0438\u0433\u0440\u0435 \u0431\u044b\u043b \u043c\u0443\u043b\u044c\u0442\u0438\u0440\u0435\u0434\u043d\u0435\u0440 \u0434\u043b\u044f M3G \u0438 MascotCapsule&#8230; \u043d\u0435 \u0445\u0443\u0436\u0435 \u0438\u0433\u0440 Fishlabs :))<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u0437\u0430\u0442\u0435\u043c \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043b\u0438\u0448\u0430\u044e\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0445 \u0444\u0438\u0447 \u044f\u0437\u044b\u043a\u0430. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0433\u0440\u044b \u0434\u043b\u044f Java-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u0439 \u00ab\u0434\u0436\u0430\u0432\u0435\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0435\u0451 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u043c \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0435. \u0412 \u043c\u0438\u0440\u0435 C\/C++ \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u00abC \u0441 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438\u00bb, \u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 Java &#8212; \u043f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c-\u0434\u0432\u0443\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0433\u0440\u044b. \u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u0435\u0440\u0441\u0438\u044f JDK \u0432 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u0431\u044b\u043b\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 1.3 \u2014 \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u0438 \u0438\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0444\u0438\u0448\u0435\u043a Java.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/618\/11e\/38d\/61811e38df36ebf78cc4c428ccae3c3c.jpg\" alt=\"\u041f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0433\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u044f \u043f\u0438\u0441\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u0414\u0430\u0431\u044b \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0432\u0430\u0441 \u043e\u0442 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439, \u0441\u0441\u044b\u043b\u043a\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 :)\" title=\"\u041f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0433\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u044f \u043f\u0438\u0441\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u0414\u0430\u0431\u044b \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0432\u0430\u0441 \u043e\u0442 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439, \u0441\u0441\u044b\u043b\u043a\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 :)\" width=\"1280\" height=\"960\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/618\/11e\/38d\/61811e38df36ebf78cc4c428ccae3c3c.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/618\/11e\/38d\/61811e38df36ebf78cc4c428ccae3c3c.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u041f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0433\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u044f \u043f\u0438\u0441\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u0414\u0430\u0431\u044b \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0432\u0430\u0441 \u043e\u0442 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439, \u0441\u0441\u044b\u043b\u043a\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \ud83d\ude42<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u0435\u0436\u0435\u043c HTC Dream \u2014 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u043c Android-\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u0432 \u043c\u0438\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0448\u0435\u043b \u0432 \u0434\u0430\u043b\u0451\u043a\u043e\u043c 2008 \u0433\u043e\u0434\u0443 \u0441 Android 1.0 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443. \u0412 \u043d\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0435 JVM, \u0430 \u0441\u0432\u043e\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 Dalvik \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u043c \u0438 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 JDK \u2014 1.5, \u0434\u0430 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0437\u0434\u0435\u0441\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0449\u043d\u0435\u0435, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438!<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/14b\/b09\/549\/14bb09549fe6c60f27af2d2f7f1f4a3d.jpg\" width=\"1024\" height=\"988\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/14b\/b09\/549\/14bb09549fe6c60f27af2d2f7f1f4a3d.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/14b\/b09\/549\/14bb09549fe6c60f27af2d2f7f1f4a3d.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0433\u0440\u0443 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u044e \u043d\u0430 \u041f\u041a, \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043b\u0434 \u0438 \u0434\u043b\u044f \u0440\u0435\u0442\u0440\u043e-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0441 GPU \u0438\u0437 90-\u0445 \u0438 \u043d\u0443\u043b\u0435\u0432\u044b\u0445. \u0418 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441 \u0432\u0430\u043c\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b!<\/p>\n<h2>\u276f \u0420\u0435\u043d\u0434\u0435\u0440<\/h2>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440, \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043d\u0430 \u0441\u043b\u0430\u0431\u044b\u0445 \u0441\u0441\u044b\u043b\u043a\u0430\u0445, \u043d\u0435\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0433\u0440\u0430\u0444\u0430 \u0441\u0446\u0435\u043d\u044b \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0443\u0440\u043e\u0432\u043d\u0435\u0439. \u041d\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u0430\u043b\u043e \u0434\u043b\u044f 3D-\u0438\u0433\u0440\u044b \u0438, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0432\u0441\u0435 \u044d\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ace\/c1a\/ed2\/acec1aed2dc98dae142f2670c24ec991.png\" width=\"798\" height=\"596\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ace\/c1a\/ed2\/acec1aed2dc98dae142f2670c24ec991.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ace\/c1a\/ed2\/acec1aed2dc98dae142f2670c24ec991.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u00ab\u0432 \u043b\u043e\u0431\u00bb \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0443\u0431\u0438\u043a \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0438\u0433\u0440\u043e\u0432\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0440\u0438\u0441\u0443\u0435\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u00bb \u2014 \u043c\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u043c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 (DIP&#8217;\u043e\u0432) \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 \u0432\u0441\u0435 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u044b. \u0414\u043b\u044f \u0443\u0440\u043e\u0432\u043d\u044f \u0432 16&#215;16 \u0431\u043b\u043e\u043a\u043e\u0432 \u044d\u0442\u043e \u0443\u0436\u0435 \u0446\u0435\u043b\u044b\u0445 256 DIP&#8217;\u043e\u0432 &#8212; \u0430 \u0432\u043a\u0443\u043f\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u0430\u043d\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 UI &#8212; \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 260-270.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/796\/720\/a31\/796720a312894d9be3a49ccdc6e92cf2.jpg\" width=\"1920\" height=\"1440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/796\/720\/a31\/796720a312894d9be3a49ccdc6e92cf2.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/796\/720\/a31\/796720a312894d9be3a49ccdc6e92cf2.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u0430\u043c\u0430\u044f \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u044d\u0442\u043e <strong>\u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/strong> (Frustum culling). \u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441 \u0432\u0430\u043c\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 4&#215;4: \u043c\u0438\u0440\u043e\u0432\u0430\u044f (\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043c\u0438\u0440\u0435), \u0432\u0438\u0434\u0430 (\u043a\u0430\u043c\u0435\u0440\u0430, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438\u0437 \u00ab\u0433\u043b\u0430\u0437\u00bb) \u0438 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0438, \u043e\u043d\u0438 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e WorldViewProjection-\u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438 \u0435\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u2014 \u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0451 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 <strong>Clip-Space<\/strong> (\u0438\u043b\u0438 NDC) \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0442\u043e\u0440 \u0431\u0435\u0440\u0451\u0442 \u043a\u0430\u0436\u0434\u044b\u0435 \u0442\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0433\u043b\u043e\u0432 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0440\u0435\u043d\u0434\u0435\u0440\u0442\u0430\u0440\u0433\u0435\u0442 &#8212; \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044d\u0442\u043e \u044d\u043a\u0440\u0430\u043d. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0438 Z-\u0431\u0443\u0444\u0435\u0440\u0430, \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/579\/184\/259\/579184259e778a907c9b37282ae372bb.png\" width=\"525\" height=\"462\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/579\/184\/259\/579184259e778a907c9b37282ae372bb.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/579\/184\/259\/579184259e778a907c9b37282ae372bb.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432\u0438\u0434\u0430 \u0441 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0435\u0451 \u043d\u0430 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043c\u0438\u0440\u0430 (\u0432\u0432\u0435\u0440\u0445, \u0432\u043d\u0438\u0437, \u0432\u043b\u0435\u0432\u043e, \u0432\u043f\u0440\u0430\u0432\u043e, \u0432\u043f\u0435\u0440\u0451\u0434, \u043d\u0430\u0437\u0430\u0434) \u2014 \u0442\u043e \u043f\u0443\u0442\u0451\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u2014 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043c\u0438\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b:<\/p>\n<pre><code class=\"java\">    public void calculate(Matrix viewProj) {         float[] items = viewProj.Matrix;         planes[0].set(items[3] - items[0], items[7] - items[4], items[11] - items[8], items[15] - items[12]).normalize();         planes[1].set(items[3] + items[0], items[7] + items[4], items[11] + items[8], items[15] + items[12]).normalize();         planes[2].set(items[3] + items[1], items[7] + items[5], items[11] + items[9], items[15] + items[13]).normalize();         planes[3].set(items[3] - items[1], items[7] - items[5], items[11] - items[9], items[15] - items[13]).normalize();         planes[4].set(items[3] - items[2], items[7] - items[6], items[11] - items[10], items[15] - items[14]).normalize();         planes[5].set(items[3] + items[2], items[7] + items[6], items[11] + items[10], items[15] + items[14]).normalize();     }      \/\/ Allocation-less     public boolean isPointInFrustum(float x, float y, float z)     {         for(int i = 0; i &lt; planes.length; i++)         {             Plane plane = planes[i];              if ((plane.A * x) + (plane.B * y) + (plane.C * z) + plane.D &lt;= 0)                 return false;         }          return true;     }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043b\u0438 \u043d\u0430\u0448 \u043a\u0443\u0431\u0438\u043a \u0438\u043b\u0438 \u0442\u0430\u043d\u0447\u0438\u043a \u0432 \u043a\u0430\u0434\u0440 \u2014 \u0434\u0435\u043b\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0438. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430: \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c Bounding-sphere \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 (\u0440\u0430\u0434\u0438\u0443\u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0430\u043c\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u0438 \u0441\u0430\u043c\u043e\u0439 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b), \u0438\u043b\u0438 Bounding-box. \u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u0438 \u0441\u0430\u043c\u043e\u0439 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 Bounding-box&#8217;\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0442\u0430\u043a\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0439 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u0443\u0442\u043a\u043d\u0443\u0442\u0441\u044f \u0432 \u00ab\u0441\u0442\u0435\u043d\u043a\u0443\u00bb \u043d\u043e\u0441\u043e\u043c \u0432 \u0438\u0433\u0440\u0435:<\/p>\n<pre><code class=\"java\">  public boolean isMeshRendererInFrustum(MeshRenderer renderer) {         float x = renderer.Parent.Position.X;         float y = renderer.Parent.Position.Y;         float z = renderer.Parent.Position.Z;         Vector min = renderer.Mesh.BoundingMin;         Vector max = renderer.Mesh.BoundingMax;          return isPointInFrustum(x + min.X, -(y + min.Y), z + min.Z) || isPointInFrustum(x + max.X, -(y + max.Y), z + max.Z);     }<\/code><\/pre>\n<p>\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043e\u043a\u043e\u043b\u043e 100 DIP&#8217;\u043e\u0432 \u0438 \u0434\u0430\u0451\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 FPS. \u041d\u0430 Galaxy S3 \u0441 Mali 400MP4 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 60FPS, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043d\u0430 Xperia Play \u2014 \u043e\u043a\u043e\u043b\u043e 30&#8230; \u0427\u0442\u043e-\u0436, \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u0430\u043b\u043e, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c GPU \u2014 \u043a\u0440\u043e\u0432\u043d\u044b\u0439 \u0431\u0440\u0430\u0442 Xenos \u0432 Xbox 360&#8230;<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/31a\/6db\/9ce\/31a6db9ce73fd8b4a5bcd2de32afa1c7.jpg\" width=\"1920\" height=\"1440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/31a\/6db\/9ce\/31a6db9ce73fd8b4a5bcd2de32afa1c7.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/31a\/6db\/9ce\/31a6db9ce73fd8b4a5bcd2de32afa1c7.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c 256 \u043a\u0443\u0431\u0438\u043a\u043e\u0432 \u0434\u043b\u044f GPU, \u0434\u0430\u0436\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u2014 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0431\u044c\u044e\u0442 \u043f\u043e \u0444\u0438\u043b\u043b\u0440\u0435\u0439\u0442\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 GPU \u0431\u044b\u043b \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043d\u0430 \u0447\u0438\u0441\u043b\u043e DIP&#8217;\u043e\u0432 \u2014 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 100, \u0438\u043d\u0430\u0447\u0435 FPS \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u043a\u0443 <strong>\u0431\u0430\u0442\u0447\u0438\u043d\u0433\u0430<\/strong>: \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u043a\u0443\u0431\u0438\u043a\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c \u0432 \u0441\u0446\u0435\u043d\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u0437\u0430 \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 DIPUP:<\/p>\n<pre><code class=\"java\">public void bake() {         int uniqueMaterials = 0;          batchList.clear();         batchRenderers.clear();         world.findComponentsOfType(BatchedMeshRenderer.class, batchRenderers);          for(int i = 0; i &lt; batchRenderers.size(); i++) {             BatchedMeshRenderer renderer = batchRenderers.get(i);             renderer.IsTakenByBatcher = false;              if(renderer.Mesh != null &amp;&amp; renderer.Material != null) {                 if(renderer.Mesh.Buffers.length != 1)                     continue; \/\/ Only simple meshes is supported now                  Batch batch = meshes.get(renderer.Material);                  if(batch == null)                     meshes.put(renderer.Material, batch = new Batch(renderer.Material));                  batch.addMesh(renderer);             }         }          for(Map.Entry&lt;Material, Batch&gt; materialBatch : meshes.entrySet()) {             batchList.add(new BatchHolder(materialBatch.getKey(), materialBatch.getValue()));             materialBatch.getValue().finish(); \/\/ Upload mesh to GPU         }     }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, FPS \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 &#8212; \u0446\u0435\u043b\u044b\u0445 45! \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430: \u044d\u0442\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u044c\u0451\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u043e \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0431\u0430\u0442\u0447\u0438\u043d\u0433\u0430 (\u0442\u0430\u043d\u043a\u0438 \u0432\u0435\u0434\u044c \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0442 \u043a\u0443\u0431\u0438\u043a\u0438) &#8212; \u043f\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u0434\u0430\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0443\u0442\u0451\u043c \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u0431\u0430\u0442\u0447\u0435\u0439 \u043d\u0430 \u0441\u0435\u0442\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b &#171;\u043a\u0443\u0431\u0438\u043a\u043e\u0432&#187; \ud83d\ude42<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/db2\/60a\/88f\/db260a88f654eee8ba30fd54cc37ada6.jpg\" width=\"1920\" height=\"1440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/db2\/60a\/88f\/db260a88f654eee8ba30fd54cc37ada6.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/db2\/60a\/88f\/db260a88f654eee8ba30fd54cc37ada6.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u0435\u043c\u0430 \u2014 \u044d\u0442\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043b\u0430 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0430\u0431\u043e\u0440 \u0440\u0435\u043d\u0434\u0435\u0440\u0441\u0442\u0435\u0439\u0442\u043e\u0432 \u0438 \u043f\u0430\u0440\u043e\u0447\u043a\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440: Diffuse \u0438 Detail. \u041d\u043e \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u043f\u043e\u043c\u043d\u0438\u0442, \u0447\u0442\u043e \u0435\u0449\u0451 \u0434\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0432 FFP \u0431\u044b\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0438\u043c\u0435\u043d\u0443\u0435\u043c\u044b\u0439 <strong>\u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u0430\u043c\u0438<\/strong>. \u041f\u043e \u0441\u0443\u0442\u0438, \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u044b \u2014 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u044e\u043d\u0438\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0437\u0430 \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5b3\/d02\/a43\/5b3d02a4377e7e2e6c7360f04ba58ce4.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u2014 \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u043a\u0438. \u042d\u0434\u0430\u043a\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0438 Splat mapping\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u2014 \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u043a\u0438. \u042d\u0434\u0430\u043a\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0438 Splat mapping\" width=\"636\" height=\"476\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5b3\/d02\/a43\/5b3d02a4377e7e2e6c7360f04ba58ce4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5b3\/d02\/a43\/5b3d02a4377e7e2e6c7360f04ba58ce4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u043e\u0432 <\/em>\u2014<em> \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u043a\u0438. \u042d\u0434\u0430\u043a\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0438 Splat mapping<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0434\u043b\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e \u0442\u0438\u043f\u0443 ini-\u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u0441\u0435\u043a\u0446\u0438\u0438 Texture \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043f\u0443\u043b\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0432 RenderStates \u2014 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043f\u043e\u043b\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 Material, \u0430 \u0432 Combiners \u2014 \u043e\u0447\u0435\u043d\u044c-\u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u043d\u0430 \u0442\u0435\u043c\u0443 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432!<\/p>\n<pre><code class=\"1c\">[Texture] Primary = textures\/t72_diffuse.tex Secondary = textures\/brick.tex  [RenderStates] AlphaTest = 0 AlphaTestValue = 1  DepthWrite = 1 DepthTest = 1 AlphaBlend = 0 Fog = 1 Unlit = 1  [Combiners] Sample Primary Interpolate Secondary 0.3 MultiplyColor Primary<\/code><\/pre>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438 \u044d\u0434\u0430\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043a\u0430\u043a \u00ab\u0448\u0435\u0439\u0434\u0435\u0440\u044b\u00bb \u0432 Quake 3. \u041e\u0434\u043d\u0430\u043a\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043b\u044f\u043c\u0431\u0434 \u0432 Java 1.5, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445 (\u0438 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043d\u0430 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438) \u043d\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u043b\u0430 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u00ab\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438\u00bb \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0438 \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u044b. \u0421\u0443\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0441\u0435\u0432\u0434\u043e-\u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 FixedFunctionShader \u0438 \u0432 \u0442\u0435\u043b\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 onApply \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u0430\u043c\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0435\u0439\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e API \u043a\u0440\u043e\u043c\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440:<\/p>\n<pre><code class=\"java\">    static class Sample implements BaseGraphics.FixedFunctionShader {          @Override         public void onApply(Material material, int combiner, float[] params) {             if(params.length != 1)                 throw new ShaderException(this, material, params, \"Expected 1 argument\");              int texId = (int)params[0];             Texture2D tex = material.Textures[texId];              if(tex == null)                 throw new ShaderException(this, material, params, \"Texture \" + texId + \" was null\");              tex.bind();              glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);             glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);             glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE0 + combiner);             glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE0 + combiner);              glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);             glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);         }     }<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438, \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u00ab\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u00bb \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u2014 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u00ab\u043e\u0434\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u043e\u0439\u00bb \u0432\u0435\u0440\u0441\u0438\u0438 (\u0434\u0440\u0430\u0439\u0432\u0435\u0440 GLES \u043d\u0430 Mali-400 \u0438 VideoCore IV \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u044b, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438). \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0448\u0443\u0441\u0442\u0440\u043e:<\/p>\n<pre><code class=\"java\">      if(GPUClass.QualityLevel &gt;= com.monobogdan.engine.GPUClass.QUALITY_LEVEL_NORMAL) {             for (int i = 0; i &lt; Material.COMBINER_STAGE_COUNT; i++) {                 \/\/ Reset combiner state                 glActiveTexture(GL_TEXTURE0 + i);                 glDisable(GL_TEXTURE_2D);             }              for (int i = 0; i &lt; material.Shaders.length; i++) {                 Material.ShaderInstance instance = material.Shaders[i];                  glActiveTexture(GL_TEXTURE0 + i);                 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);                 glEnable(GL_TEXTURE_2D);                 instance.Shader.onApply(material, i, instance.Params);             }         } else {             \/\/ Single texture fallback for very slow GPU's             glActiveTexture(GL_TEXTURE0);             setState(GL_TEXTURE_2D, material.Textures[0] != null);             material.Textures[0].bind();         }<\/code><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/68d\/9dc\/c08\/68d9dcc080e04b0b8ed76f3e86fc28c2.png\" alt=\"\u041d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043a\u0438\u0440\u043f\u0438\u0447\u043d\u044b\u0439 \u0442\u0430\u043d\u043a \u2014 \u0432\u0438\u0434\u0435\u043b\u0438 \u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043c\u0443\u0444\u043b\u044f\u0436? :)\" title=\"\u041d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043a\u0438\u0440\u043f\u0438\u0447\u043d\u044b\u0439 \u0442\u0430\u043d\u043a \u2014 \u0432\u0438\u0434\u0435\u043b\u0438 \u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043c\u0443\u0444\u043b\u044f\u0436? :)\" width=\"265\" height=\"243\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/68d\/9dc\/c08\/68d9dcc080e04b0b8ed76f3e86fc28c2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/68d\/9dc\/c08\/68d9dcc080e04b0b8ed76f3e86fc28c2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u041d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043a\u0438\u0440\u043f\u0438\u0447\u043d\u044b\u0439 \u0442\u0430\u043d\u043a <\/em>\u2014<em> \u0432\u0438\u0434\u0435\u043b\u0438 \u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043c\u0443\u0444\u043b\u044f\u0436? \ud83d\ude42<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u0435\u043c\u0430 \u2014 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0442\u0435\u043a\u0441\u0442\u0430. \u0412 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043f\u0430\u0440\u0438\u043b\u0441\u044f \u043d\u0430\u0434 \u0434\u0435\u043c\u043a\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043b \u0442\u0435\u043a\u0441\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u043b \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u0432\u0430\u0434. \u0422\u0430\u043a\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0448\u0443\u0441\u0442\u0440\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u0430\u044f \u043d\u0430 \u041f\u041a \u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0442\u0430\u043a\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e VRAM! \u041e\u0434\u043d\u0430\u043a\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0431\u0438\u0442\u043c\u0430\u043f\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0430\u0442\u043b\u0430\u0441\u0430 \u2014 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441 \u00ab\u0437\u0430\u043f\u0435\u0447\u0435\u043d\u043d\u044b\u043c\u0438\u00bb \u0431\u0443\u043a\u0432\u0430\u043c\u0438 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u043e\u043c, \u0433\u0434\u0435 \u043a\u0430\u043a\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u043d\u0435\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 BMFont, \u0430 \u0441\u0430\u043c \u043a\u043e\u0434 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c:<\/p>\n<pre><code class=\"java\">    public void drawString(BitmapFont font, Vector color, float x, float y, String str) {         if(font == null)             throw new NullPointerException(\"font was null\");          if(str == null)             return;          int sz = font.Size \/ 2;          for(int i = 0; i &lt; str.length(); i++) {             char chr = str.charAt(i);              if(chr == ' ')                 x += sz;             else {                 BitmapFont.CharacterInfo chrInfo = font.getCharacter(chr);                 drawImage(font.Pages[chrInfo.Page], x, y + chrInfo.YOffset, chrInfo.X, chrInfo.Y, chrInfo.Width, chrInfo.Height, chrInfo.Width, chrInfo.Height, color);                 x += chrInfo.Width;             }         }     }<\/code><\/pre>\n<p>\u0418 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 &#8212; \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u044b\u043c:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f26\/445\/821\/f26445821180b3d8ebeba280288d2fe2.png\" width=\"758\" height=\"263\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f26\/445\/821\/f26445821180b3d8ebeba280288d2fe2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f26\/445\/821\/f26445821180b3d8ebeba280288d2fe2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0434\u0430\u043b\u0435\u0435 \u043e\u0441\u043e\u0431\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0435\u0447\u0435\u0433\u043e \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0430. \u0418\u043d\u0441\u0442\u0430\u043d\u0441\u0438\u043d\u0433\u0430 \u0432 FFP \u043d\u0435\u0442, \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u2014 \u0442\u043e\u0436\u0435, \u0430 \u0440\u0435\u043d\u0434\u0435\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0439 \u0438 \u043d\u0430 Android, \u0438 \u043d\u0430 \u041f\u041a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043c\u0435\u0435\u043c \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u043c!<\/p>\n<h2>\u276f \u0410\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438<\/h2>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0430\u043b \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445, \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u0440\u0435\u0437\u043a\u0438\u0435 \u043f\u0440\u043e\u0441\u0430\u0434\u043a\u0438 \u043a\u0430\u0434\u0440\u043e\u0432 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 FPS. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u043b\u0430\u0433\u043e\u0432 \u0431\u044b\u043b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0439: \u0440\u0430\u0437 \u0432 2-3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u0440\u043e\u0441\u0430\u0434\u043a\u0430 \u0432 20 \u043a\u0430\u0434\u0440\u043e\u0432. \u0417\u0430\u0433\u043b\u044f\u043d\u0443\u0432 \u0432 logcat, \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0447\u0442\u043e Dalvik \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 GC (\u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430) \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0430 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b\u0435 16\u043c\u0441 \u2014 \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u00ab\u043a\u0443\u0447\u0435\u00bb! \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, Dalvik \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0442 8 \u0434\u043e 32\u041c\u0431 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f &#8212; \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e!<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e56\/703\/76f\/e5670376ff14a0f6a48a4272a12b7a91.png\" width=\"987\" height=\"153\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e56\/703\/76f\/e5670376ff14a0f6a48a4272a12b7a91.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e56\/703\/76f\/e5670376ff14a0f6a48a4272a12b7a91.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0443 \u043c\u0435\u043d\u044f \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e \u043d\u0435 \u0432 update\/draw, \u0430 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u042d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043c\u0430\u0442\u0440\u0438\u0446 \u0438 \u0438\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 \u2014 \u0432\u0435\u0434\u044c \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 .NET, \u0432 Java \u043d\u0435\u0442 Value-\u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u043a\u0440\u043e\u043c\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432 C# \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432:<\/p>\n<pre><code class=\"cs\">struct Vector3 {   public float X, Y, Z;    public Vector3(float x, float y, float z)   {     X = x;     Y = y;     Z = z;   }    public static Vector3 operator +(Vector3 a, Vector3 b)   {     return new Vector3(a.X + b.X, a.Y + b.y, a.Z + b.z);   } }  ...  Transform.Position += Velocity;<\/code><\/pre>\n<p>\u0422\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e Vector3 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0435\u0437 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043e\u0442 GC, \u0440\u0430\u043d\u0442\u0430\u0439\u043c .NET \u0432\u044b\u0434\u0435\u043b\u0438\u0442 \u0435\u0451 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u0430 \u043d\u0435 \u0432 \u043a\u0443\u0447\u0435 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u0438\u0442 \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0441\u043a\u043e\u0443\u043f\u0430 \u043c\u0435\u0442\u043e\u0434\u0430, \u0433\u0434\u0435 \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0432 Java:<\/p>\n<pre><code class=\"java\">public static Vector3 add(Vector3 a, Vector3 b) {   return new Vector3(a.X + b.X, a.Y + b.y, a.Z + b.z); }  ...  transform.position = Vector3.add(transform.position, velocity);<\/code><\/pre>\n<p>\u0422\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u044d\u0442\u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u043e\u0434\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440. \u0418 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c GC \u2014 \u043e\u043d \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u0435\u0442 \u0438\u0433\u0440\u0443 \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0444\u0440\u0438\u0437\u044b, \u043f\u0440\u044f\u043c\u043e \u043a\u0430\u043a \u0432 Minecraft \u043d\u0430 \u041f\u041a. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441 \u0437\u0434\u0435\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Dalvik \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c GC, \u0442\u043e\u0440\u043c\u043e\u0437\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0433\u0440\u044b. \u0412 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u041e\u0417\u0423 (\u0445\u043e\u0442\u044f-\u0431\u044b 1\u0413\u0431) \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0443\u0436\u0435 \u043d\u0435\u0442.<\/p>\n<p>\u041d\u043e \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0438 \u0441\u043a\u0430\u0437\u0430\u043b \u0432\u044b\u0448\u0435 \u2014 \u043c\u043e\u0438 \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0438 GC, \u043d\u0438 \u043a\u0443\u0447\u0443, \u043d\u043e \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c \u0438\u0433\u0440\u0443, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0443\u0436\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438. \u041d\u0430\u0447\u0430\u0432 \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0438\u0442\u044c \u043a\u043e\u0434, \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0447\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430&#8230; \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u044b! \u0414\u0430-\u0434\u0430, \u0442\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438: \u0434\u0430\u0436\u0435 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u044b\u0439 \u0432\u0435\u0441 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u044e\u0442 \u0445\u0438\u043f \u0438 \u043f\u043e \u0438\u0442\u043e\u0433\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 GC. \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 for:<\/p>\n<pre><code class=\"java\">        for(int i = 0; i &lt; GameObjects.size(); i++) {             GameObjects.get(i).onUpdate();         }          \/\/ Second pass for late updates         for(int i = 0; i &lt; GameObjects.size(); i++)             GameObjects.get(i).onLateUpdate();<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 GC \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c!<\/p>\n<h2>\u276f \u0412\u0432\u043e\u0434<\/h2>\n<p><a class=\"anchor\" name=\"3\" id=\"3\"><\/a><\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u044d\u0442\u043e \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u043e\u0434\u0430. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443, \u043d\u043e \u0438 \u0433\u0435\u0439\u043c\u043f\u0430\u0434\u044b, \u0430 \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u2014 \u0435\u0449\u0451 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u0432\u043e\u0434\u0430 \u0432 \u0438\u0433\u0440\u0435 \u043d\u0430 150 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043a\u0430\u043a \u0432 Unity, \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0435\u0451 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043a\u0438\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u0439\u043c\u043f\u0430\u0434 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438: \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u044b.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043c\u0430\u043f\u043f\u0438\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u043d\u0430\u0448 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u0439\u043c\u043f\u0430\u0434. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432: Xperia Play, \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u043e\u043b\u0435\u0439 \u043d\u0430 Android&#8217;\u0435 \u0438\u0437 2012-\u0433\u043e \u0438 \u0434\u0430\u0436\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u0441 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c\u0438 QWERTY-\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u043c\u0438. \u0418 \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439!<\/p>\n<pre><code class=\"java\">    private static int[] xperiaPlayMapping = {             KeyEvent.KEYCODE_DPAD_UP, KeyEvent.KEYCODE_DPAD_DOWN, KeyEvent.KEYCODE_DPAD_LEFT, KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_CENTER,             KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_BUTTON_X, KeyEvent.KEYCODE_BUTTON_Y, KeyEvent.KEYCODE_BUTTON_R1, KeyEvent.KEYCODE_BUTTON_L1     };      private static int[] genericQWERTYMapping = {             KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_W, KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_SPACE, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K,             KeyEvent.KEYCODE_Q, KeyEvent.KEYCODE_E     };      public static int[][] ConversionTable = {         xperiaPlayMapping,         genericQWERTYMapping     };  ...    private int resolveGamePadTranslationTable(int keyCode) {         for(int i = 0; i &lt; GamePadKeyTable.ConversionTable.length; i++) {             int[] keys = GamePadKeyTable.ConversionTable[i];              for(int j = 0; j &lt; keys.length; j++) {                 if(keyCode == keys[j])                     return j;             }         }          return -1; \/\/ Not resolved     }      @Override     public boolean onKeyUp(int keyCode, KeyEvent event) {         int gamePadKey = resolveGamePadTranslationTable(keyCode);         handleKeyEvent(event.getScanCode(), Input.STATE_RELEASED);          if(gamePadKey != -1)             handleGamePadEvent(gamePadKey, Input.STATE_RELEASED);          return true;     }<\/code><\/pre>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u041f\u041a \u0438 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445, \u043f\u043e\u043a\u0430\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0430\u0448\u0435\u0439 \u0434\u0435\u043c\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043d\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u043e\u0439 Xperia Play!<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/879\/c61\/93f\/879c6193fb6e7a925734dae73c24f7e7.jpg\" width=\"1920\" height=\"1440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/879\/c61\/93f\/879c6193fb6e7a925734dae73c24f7e7.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/879\/c61\/93f\/879c6193fb6e7a925734dae73c24f7e7.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u0431\u0435\u0437 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u0439\u043c\u043f\u0430\u0434 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u043b\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c Aspect Ratio \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c:<\/p>\n<pre><code class=\"java\">    public void drawUI() {         VerticalInput = 0;         HorizontalInput = 0;          float scaled = UI_BASE_SIZE * Scale;         float baseY = 1.0f - (scaled * 3); \/\/ 0.7f is base coefficient for 1.0f scaling          if(game.Runtime.UI.imageButton(arrowUp, scaled, baseY, scaled, scaled, true))             VerticalInput = 1;          if(game.Runtime.UI.imageButton(arrowDown, scaled, baseY + (scaled * 2), scaled, scaled, true))             VerticalInput = -1;          if(game.Runtime.UI.imageButton(arrowLeft, 0.0f, baseY + scaled, scaled, scaled, true))             HorizontalInput = -1;          if(game.Runtime.UI.imageButton(arrowRight, scaled * 2, baseY + scaled, scaled, scaled, true))             HorizontalInput = 1;     }<\/code><\/pre>\n<h2>\u276f \u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0433\u0440\u0443<\/h2>\n<p><a class=\"anchor\" name=\"4\" id=\"4\"><\/a><\/p>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0443\u0441\u043f\u0435\u043b\u0438 \u0441 \u0432\u0430\u043c\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u044e. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0448\u0438\u043d\u043e\u043a: Asus eeePC 4G \u0432 \u0440\u043e\u043b\u0438 \u00ab\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438\u0437 90-\u0445\u00bb, Sony Ericsson Xperia Play, iPhone 4S \u0441 \u043d\u044e\u0430\u043d\u0441\u043e\u043c \u0438 Samsung Galaxy Y Pro. \u0412\u0441\u0435 \u0433\u0430\u0434\u0436\u0435\u0442\u044b \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0445\u043e\u0440\u043e\u0448\u0438, \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 GPU \u0438 \u0432\u0441\u0435\u0445 \u0438\u0445 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 SE Xperia Play 2011 \u0433\u043e\u0434\u0430 \u0432\u044b\u043f\u0443\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d. \u041f\u043e \u0441\u0443\u0442\u0438, Xperia Play &#8212; \u0447\u0443\u0442\u043e\u0447\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 Xperia Pro, \u0433\u0434\u0435 QWERTY-\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430 \u0433\u0435\u0439\u043c\u043f\u0430\u0434, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0445 &#171;\u0441\u043e\u043d\u0435\u0440\u0438\u043a\u043e\u0432&#187; 2011 \u0433\u043e\u0434\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430\u044f: \u0447\u0438\u043f\u0441\u0435\u0442 Qualcomm MSM8250 \u0441 ARMv7-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c \u044f\u0434\u0440\u043e\u043c Scorpio \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 1\u0413\u0413\u0446 \u0438 GPU Adreno 205 (\u0440\u0435\u0431\u0440\u0435\u043d\u0434\u0438\u043d\u0433 ATI Imageon Z430, \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 Xenos), 512\u041c\u0431 \u041e\u0417\u0423 \u0442\u0438\u043f\u0430 DDR1 \u0438 512\u041c\u0431 \u0444\u043b\u044d\u0448-\u043f\u0430\u043c\u044f\u0442\u0438. \u0421 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u043c\u0438 \u0432 \u0442\u0435 \u0433\u043e\u0434\u044b \u0431\u044b\u043b\u0430 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u0430\u043a \u0438 \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0443\u043b\u0435\u0432\u044b\u0445: \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0431\u044b\u043b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u0438 \u0443\u0436\u0435 \u0432 2012 \u0433\u043e\u0434\u0443, Xperia Play \u043d\u0435 \u0442\u044f\u043d\u0443\u043b \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u0438\u0433\u0440\u044b \u0438\u0437-\u0437\u0430 \u0441\u043b\u0430\u0431\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 GPU!<br \/>\u041d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043e\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u0431\u044f \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0442\u044f\u043d\u0435\u0442 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0443\u0440\u043e\u0432\u043d\u044f \u0438 \u0442\u0430\u043d\u0447\u0438\u043a\u0430 \u0432 40-45 FPS&#8230; \u0412 \u0438\u0433\u0440\u0430\u0445 \u043d\u0430 Unity3D, Adreno 205 \u0442\u0430\u043a\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u043e\u0445\u0432\u0430\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043c\u043e\u0433.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/73a\/915\/9d3\/73a9159d31987007c300ecfa9c77ac09.gif\" width=\"480\" height=\"270\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/73a\/915\/9d3\/73a9159d31987007c300ecfa9c77ac09.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/73a\/915\/9d3\/73a9159d31987007c300ecfa9c77ac09.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a iPhone 4S, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u044e\u0430\u043d\u0441\u043e\u043c: \u044d\u0442\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430 \u043d\u0430 Android. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0443 \u043a\u043e\u043f\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u0430\u044f IPS-\u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u043f\u043e\u0447\u0442\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0436\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f (800&#215;480 \u043f\u0440\u043e\u0442\u0438\u0432 960&#215;640), \u043a\u0430\u043a \u0438 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0430\u0439\u0444\u043e\u043d\u0435. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 &#171;\u043a\u043b\u043e\u043d&#187; \u043d\u0430 \u0431\u0430\u0437\u0435 \u0447\u0438\u043f\u0441\u0435\u0442\u0430 MediaTek MT6515 2012 \u0433\u043e\u0434\u0430 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u0441 \u043e\u0434\u043d\u0438\u043c \u044f\u0434\u0440\u043e\u043c Cortex-A9, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 1\u0413\u0413\u0446 \u0438 GPU PowerVR SGX531 Ultra. \u0422\u0430\u043a\u0436\u0435 \u0432 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e 256\u041c\u0431 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 256\u041c\u0431 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 &#8212; \u0432 \u043e\u0431\u0449\u0435\u043c, \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u0438\u043a \u0442\u0435\u0445 \u043b\u0435\u0442. GPU \u043e\u0442 PowerVR &#8212; \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0433\u0435\u0439\u043c\u0438\u043d\u0433\u0430, \u043d\u0430\u0448\u0430 \u0434\u0435\u043c\u043a\u0430 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0432\u044b\u0434\u0430\u0451\u0442 50-60 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 FPS. \u042f \u0441\u0447\u0438\u0442\u0430\u044e \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/119\/10e\/8e6\/11910e8e61d22a02cf5a0e0f7eea80a4.gif\" width=\"320\" height=\"180\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/119\/10e\/8e6\/11910e8e61d22a02cf5a0e0f7eea80a4.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/119\/10e\/8e6\/11910e8e61d22a02cf5a0e0f7eea80a4.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 &#171;\u044d\u043a\u0437\u043e\u0442\u0438\u043a\u0443&#187; &#8212; Samsung Galaxy Y Pro. \u042d\u0442\u043e\u0442 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0435\u0439 QWERTY-\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043e\u0439, \u043d\u043e \u0438 \u043e\u0447\u0435\u043d\u044c \u0434\u0438\u043a\u043e\u0432\u0438\u043d\u043d\u044b\u043c (\u0438 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c Raspberry Pi) \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c Broadcom BCM21553 \u0441 \u043e\u0434\u043d\u0438\u043c ARMv6-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c \u044f\u0434\u0440\u043e\u043c \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 832\u041c\u0413\u0446 \u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u043c GPU \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 VideoCore IV. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e GPU \u0432 \u0447\u0438\u043f\u0441\u0435\u0442\u0430\u0445 Broadcom \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u043e\u043b\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0438 \u043f\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0438\u0434\u0435\u043e\u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u0435\u0439. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e DSP \u0441 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u044b\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0435\u0433\u043e \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0441\u043e\u0444\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u043e\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0430\u043d\u043d\u0438\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e GPU \u0431\u044b\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u044b\u0440\u044b\u043c\u0438 \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0433\u0440 \u0432\u044b\u0434\u0430\u0432\u0430\u043b\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u041d\u0430\u0448\u0430 \u0438\u0433\u0440\u0443\u0448\u043a\u0430 &#8212; \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 20 FPS \u043f\u0440\u0438 240&#215;320&#8230;<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/501\/24e\/3f9\/50124e3f938fdef90a0d8c210967c761.gif\" width=\"480\" height=\"270\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/501\/24e\/3f9\/50124e3f938fdef90a0d8c210967c761.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/501\/24e\/3f9\/50124e3f938fdef90a0d8c210967c761.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043a\u0435: Asus eeePC 4G. \u041f\u0435\u0440\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u043e\u0439 \u043b\u0438\u043d\u0435\u0439\u043a\u0438 \u043d\u0435\u0442\u0431\u0443\u043a\u043e\u0432 \u043e\u0442\u043b\u0438\u0447\u0430\u043b\u0438\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u043e\u0439 \u0446\u0435\u043d\u043e\u0439, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u0430\u0431\u044b\u043c \u0438 \u043f\u0440\u043e\u0436\u043e\u0440\u043b\u0438\u0432\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c Celeron M 353 \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 Dothan (\u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u043e\u0442\u043e\u043c\u043e\u043a Pentium III Tualatin) \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 900\u041c\u0413\u0446, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 Intel GMA900 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 2.0 \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u041e\u0417\u0423 \u0432 512\u041c\u0431 \u0442\u0438\u043f\u0430 DDR2. \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b \u0442\u0435\u0441\u0442\u044b \u043d\u0430 JRE 1.7 &#8212; \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043f\u043e\u0447\u0442\u0438 60 FPS&#8230; \u0437\u0430 \u0432\u044b\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0430\u0437 \u0432 3-4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u044f \u043f\u043e\u043b\u0443\u0447\u0430\u044e \u043c\u0438\u043a\u0440\u043e\u0444\u0440\u0438\u0437\u044b \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432 80%. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0430\u043c\u0430 JRE \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u043f\u0440\u0438\u0447\u0451\u043c: \u0442\u0430\u043a\u0430\u044f \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0443 GPU \u043d\u0435\u0442 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u0422\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u043d\u044e\u0430\u043d\u0441:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c63\/d4c\/816\/c63d4c8168138cd755786758902c3df2.gif\" width=\"400\" height=\"225\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c63\/d4c\/816\/c63d4c8168138cd755786758902c3df2.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c63\/d4c\/816\/c63d4c8168138cd755786758902c3df2.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u276f\u00a0\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p><a class=\"anchor\" name=\"5\" id=\"5\"><\/a><\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 3D-\u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f \u0443 \u043d\u0430\u0441 \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c. \u041f\u0440\u043e\u0448\u043b\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0440\u0443\u0431\u0440\u0438\u043a\u0435 \u044f \u043f\u0438\u0441\u0430\u043b \u0432 \u0441\u0442\u0438\u043b\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430, \u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u044f \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043a\u0435\u0439\u0441\u044b \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0418 \u043c\u043e\u0436\u0435\u0442 \u043e\u043d\u0430 \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f, \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u00ab\u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0438\u043a\u043e\u0432\u00bb \u0438\u043b\u0438 Top-Down \u0441\u0442\u0440\u0435\u043b\u044f\u043b\u043a\u0438 \u043f\u043e \u0437\u043e\u043c\u0431\u0438, \u0434\u0443\u043c\u0430\u044e \u0441\u0432\u043e\u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043e\u043d\u0430 \u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0448\u043b\u0430! \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0441 \u043a\u043e\u0434\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043c\u043e\u0451\u043c\u00a0<a href=\"https:\/\/github.com\/monobogdan\/tank-game\" rel=\"noopener noreferrer nofollow\">Github<\/a>.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/48e\/28b\/c82\/48e28bc825a5a714788ab19241d8a242.jpg\" width=\"1920\" height=\"1440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/48e\/28b\/c82\/48e28bc825a5a714788ab19241d8a242.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/48e\/28b\/c82\/48e28bc825a5a714788ab19241d8a242.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0440\u0435\u043c\u043e\u043d\u0442\u0430, \u043c\u043e\u0434\u0434\u0438\u043d\u0433\u0430 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0433\u0430\u0434\u0436\u0435\u0442\u043e\u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u043b\u0435\u0442 \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043c\u043e\u0439 Telegram-\u043a\u0430\u043d\u0430\u043b \u202d\u00ab<a href=\"https:\/\/t.me\/monobogdann\" rel=\"noopener noreferrer nofollow\">\u041a\u043b\u0443\u0431 \u0444\u0430\u043d\u0430\u0442\u043e\u0432 \u0431\u0430\u043b\u0434\u0435\u0436\u0430<\/a>\u202d\u00bb, \u043a\u0443\u0434\u0430 \u044f \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e \u0431\u044d\u043a\u0441\u0442\u0435\u0439\u0434\u0436\u0438 \u0441\u0442\u0430\u0442\u0435\u0439, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0432\u0438\u0434\u0435\u043e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u044b \u0438 \u0449\u0438\u0442\u043f\u043e\u0441\u0442\u044e. \u0410 \u0440\u043e\u043b\u0438\u043a\u0438 (\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438) \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u043c\u043e\u0451\u043c<a href=\"https:\/\/www.youtube.com\/@monobogdan\" rel=\"noopener noreferrer nofollow\">\u00a0YouTube \u043a\u0430\u043d\u0430\u043b\u0435<\/a>.<\/p>\n<p><strong>\u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e! \u0420\u0430\u0437\u044b\u0441\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0435\u0432\u0430\u0439\u0441\u044b \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439!<\/strong><\/p>\n<p>\u0414\u0440\u0443\u0437\u044c\u044f! \u0414\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0430\u043c\u043e\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0443\u0448\u0435\u043a \u043f\u043e\u0434 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u043e\u0437\u044b\u0441\u043a \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u0435\u0439! \u0412 2000-\u0445 \u0433\u043e\u0434\u0430\u0445, \u043a\u0438\u0442\u0430\u0439\u0446\u044b \u0447\u0430\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u0435\u0448\u0435\u0432\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u0441 \u0438\u0433\u0440\u043e\u0432\u044b\u043c \u0443\u043a\u043b\u043e\u043d\u043e\u043c \u2014 \u043e\u0431\u044b\u0447\u043d\u043e \u0443 \u043d\u0438\u0445 \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0433\u0435\u0439\u043c\u043f\u0430\u0434\u0430 (\u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0430) \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u0432\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e A\/B, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u044b NES\/Sega. \u0424\u0438\u0448\u043a\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u0442\u0430\u043a\u0438\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u043d\u043e\u0432\u044b\u0435 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u044b, \u0447\u0435\u043c \u044f \u0438 \u0445\u043e\u0447\u0443 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e! \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0438 \u0432\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0435\u0433\u043e \u0437\u0430\u0434\u043e\u043d\u0430\u0442\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u0430\u0442\u044c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043c\u043d\u0435 \u0432 Telegram (@<a href=\"https:\/\/t.me\/monobogdan\" rel=\"noopener noreferrer nofollow\">monobogdan<\/a>) \u0438\u043b\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b-\u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043d\u0430 Android (\u043d\u0430 \u0440\u044b\u043d\u043a\u0435 \u0420\u0424 \u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u0430 Func Much-01), \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0447\u0443\u0442\u043e\u0447\u043a\u0443 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \ud83d\ude42<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/030\/f1e\/c78\/030f1ec781c530464dde807e2d9857ec.png\" width=\"1560\" height=\"1147\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/030\/f1e\/c78\/030f1ec781c530464dde807e2d9857ec.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/030\/f1e\/c78\/030f1ec781c530464dde807e2d9857ec.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410 \u0442\u0430\u043a\u0436\u0435 \u044f \u0438\u0449\u0443 \u0441\u0442\u0430\u0440\u044b\u0435 (2010-2014) \u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0438 \u043d\u0430 \u0431\u0440\u0435\u043d\u0434\u043e\u0432\u044b\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b Samsung, Apple \u0438 \u0442. \u043f. \u041e\u043d\u0438 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0432\u0435\u0441\u044c\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0447\u0438\u043f\u0441\u0435\u0442\u0430\u0445 \u0438 \u043f\u043e\u0434\u0434\u0430\u044e\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043c\u043e\u0434\u0434\u0438\u043d\u0433\u0443, \u043f\u0430\u0440\u043e\u0447\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u0443\u0436\u0435 \u0432\u044b\u0448\u043b\u043e, \u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u0438 \u043f\u043e \u0438\u0445 \u043c\u043e\u0434\u0434\u0438\u043d\u0433\u0443! \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0430\u043c\u044b\u0435 \u043f\u0435\u0440\u0432\u044b\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b Xiaomi (\u0441\u0435\u0440\u0438\u0438 Mi), Meizu (\u0435\u0449\u0451 \u043d\u0430 Exynos) \u0438\u043b\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b Motorola \u043d\u0430 Linux (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5 \u0438 \u0442. \u043f., \u043e \u043d\u0438\u0445 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u0432\u0438\u0434\u0435\u043e \u0442. \u043a. \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043b\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445, \u043f\u043e\u0434\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u043c\u0443 \u043c\u043e\u0434\u0434\u0438\u043d\u0433\u0443 \u0438 \u0431\u044b\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0430\u0436\u0435 Quake!). \u0412\u0441\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0434\u043e\u043d\u0430\u0442\u044b!<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3f9\/65d\/b75\/3f965db755eb378fbeb683dd79edfac3.png\" width=\"700\" height=\"395\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/3f9\/65d\/b75\/3f965db755eb378fbeb683dd79edfac3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3f9\/65d\/b75\/3f965db755eb378fbeb683dd79edfac3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0410 \u0435\u0449\u0451 \u044f \u0434\u0435\u0440\u0436\u0443 \u0432\u0441\u0435 \u0441\u0432\u043e\u0438 \u043c\u043e\u0431\u0438\u043b\u044b \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u0440\u0437\u0438\u043d\u0435 \u043f\u0440\u0438 \u0441\u0435\u0431\u0435 (\u0432 \u0441\u043c\u044b\u0441\u043b\u0435, \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430) \u2014 Timeweb. \u041f\u043e\u0442\u043e\u043c\u0443 \u043d\u0430\u0433\u043b\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0442\u043e, \u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0441\u0430\u043c \u2014\u00a0<\/strong><a href=\"https:\/\/timeweb.cloud\/?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign=promo\" rel=\"noopener noreferrer nofollow\"><strong>\u0432\u044d\u043b\u043a\u0430\u043c<\/strong><\/a><strong>:<\/strong><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3s\/gu\/qq\/3sguqqbs0iploau5loc7hhuwdja.jpeg\" alt=\"\u041e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u21a9\" title=\"\u041e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u21a9\" width=\"1280\" height=\"463\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/3s\/gu\/qq\/3sguqqbs0iploau5loc7hhuwdja.jpeg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/3s\/gu\/qq\/3sguqqbs0iploau5loc7hhuwdja.jpeg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><a href=\"https:\/\/timeweb.cloud\/?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign=promo\" rel=\"noopener noreferrer nofollow\"><strong><em>\u041e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c<\/em><\/strong><\/a><strong><em> \u21a9<\/em><\/strong><\/figcaption><\/div>\n<\/figure>\n<blockquote>\n<p><a href=\"https:\/\/t.me\/timewebru\" rel=\"noopener noreferrer nofollow\"><strong>\u041d\u043e\u0432\u043e\u0441\u0442\u0438, \u043e\u0431\u0437\u043e\u0440\u044b \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u044b \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\u00a0<\/strong><\/a><a href=\"http:\/\/Timeweb.Cloud\" rel=\"noopener noreferrer nofollow\"><strong>Timeweb.Cloud<\/strong><\/a><a href=\"https:\/\/t.me\/timewebru\" rel=\"noopener noreferrer nofollow\"><strong>\u00a0\u2014 \u0432 \u043d\u0430\u0448\u0435\u043c Telegram-\u043a\u0430\u043d\u0430\u043b\u0435<\/strong><\/a>\u00a0<strong>\u21a9<\/strong><\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/companies\/timeweb\/articles\/924472\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0427\u0442\u043e \u0434\u0443\u043c\u0430\u0435\u0442\u0435 \u043e \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0441\u0442\u0430\u0442\u0435\u0439?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">52.78% <\/span><span class=\"tm-article-poll__answer-label\">\u0412\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 3D-\u0438\u0433\u0440\u044b \u0441\u043b\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043d\u0430\u0443\u0447\u043f\u043e\u043f \u0444\u043e\u0440\u043c\u0430\u0442, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0430\u0442\u044c\u044e\u2026 \u0430 \u0432\u043e\u0442 \u00ab\u043f\u043e\u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439\u00bb \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u2014 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e!<\/span><span class=\"tm-article-poll__answer-votes\">19<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 52.78%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">19.44% <\/span><span class=\"tm-article-poll__answer-label\">\u041c\u0430\u043b\u043e \u0447\u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e!<\/span><span class=\"tm-article-poll__answer-votes\">7<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 19.44%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">2.78% <\/span><span class=\"tm-article-poll__answer-label\">\u0415\u0449\u0451 \u0431\u044b \u043a\u043e\u0434 \u0431\u044b\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439\u2026 \u0430 \u0442\u043e \u043b\u044e\u0442\u044b\u0439 \u0423\u0413-\u043a\u043e\u0434! \u042f \u043a\u0430\u043a Enterprise Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u044d\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u044e!<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 2.78%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">0% <\/span><span class=\"tm-article-poll__answer-label\">\u042b\u043d\u0442\u044b\u0440\u043f\u0440\u0430\u0439\u0437\u0435\u0440\u044b, \u0437\u0430\u043a\u0440\u043e\u0439\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e. \u0412 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0433\u0440 \u043d\u0435\u0442 \u043c\u0435\u0441\u0442\u0430 \u043a\u0443\u0447\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439, \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0433\u0438\u0431\u043a\u043e\u0439 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0435\u0437 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0433\u043e Java&#8212;\u0441\u0442\u0430\u0439\u043b\u0430.<\/span><span class=\"tm-article-poll__answer-votes\">0<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 0%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">0% <\/span><span class=\"tm-article-poll__answer-label\">\u0422\u0430\u043a \u0430\u0432\u0442\u043e\u0440 \u0442\u043e\u0436\u0435 \u043e\u0431\u043c\u0430\u0437\u0430\u043b\u0441\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 \u041e\u041e\u041f \u0440\u0430\u0434\u0438 \u041e\u041e\u041f. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u0443\u0436\u0447\u0438\u043d\u0430-\u044d\u043c\u0431\u0435\u0434\u0434\u0435\u0440 \u0434\u0430\u0436\u0435 \u0432 Java \u0431\u0443\u0434\u0435\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432!<\/span><span class=\"tm-article-poll__answer-votes\">0<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 0%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">13.89% <\/span><span class=\"tm-article-poll__answer-label\">\u0427\u0442\u043e \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c. \u0425\u043e\u0442\u044c \u043a\u0430\u043a \u043d\u0435 \u043f\u044b\u0442\u0430\u0439\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 Java \u2014 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043b\u0430\u0433\u0430\u0435\u0442 \u0438 \u0436\u0440\u0451\u0442 \u0440\u0430\u043c\u0443 \u043d\u0435 \u0432 \u0441\u0435\u0431\u044f!<\/span><span class=\"tm-article-poll__answer-votes\">5<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 13.89%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">11.11% <\/span><span class=\"tm-article-poll__answer-label\">\u042f \u043b\u0438\u0447\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0440\u044b\u0439 OpenGL\/D3D \u0438 \u043f\u0438\u0441\u0430\u043b \u0441 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0433\u0440\u0443\u0448\u043a\u0438. \u0421\u043b\u0451\u0437\u044b \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u0438\u2026<\/span><span class=\"tm-article-poll__answer-votes\">4<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 11.11%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 36 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 7 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/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\/articles\/924472\/\"> https:\/\/habr.com\/ru\/articles\/924472\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>&#8230;\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u00a0<strong>\u043f\u0435\u0440\u0432\u044b\u0445\u00a0<\/strong>Android-\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0432 \u043c\u0438\u0440\u0435, \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0438\u0437 90-\u0445 \u0438 \u0434\u0430\u0436\u0435 Mac&#8217;\u0430\u0445! <strong>\u0427\u0430\u0441\u0442\u044c 2<\/strong>.  <\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0443 \u043c\u0435\u043d\u044f \u043b\u0435\u0436\u0438\u0442 \u0434\u0443\u0448\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0438\u0433\u0440\u0443\u0448\u043a\u0443 \u0441 \u043d\u0443\u043b\u044f, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u0441\u0442\u0430\u0432\u043b\u044e \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u043a\u0438: \u0438\u0433\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0441\u0438\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u043c\u0435\u0439\u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u00ab\u0442\u0430\u043d\u0447\u0438\u043a\u043e\u0432\u00bb \u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0433\u043e\u0442\u043e\u0432 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u00a0<strong>\u0432\u0441\u0435\u0445\u00a0<\/strong>\u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f \u0432 2025 \u0433\u043e\u0434\u0443. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 3D-\u0434\u0435\u043c\u043a\u0438 \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb \u043e\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u044f \u2014 \u0436\u0434\u0443 \u0432\u0430\u0441 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c!  <\/p>\n<h4>\u276f \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/h4>\n<ol>\n<li>\n<p><a href=\"#0\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#1\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u043d\u0434\u0435\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#2\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#3\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u043e\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#4\" rel=\"noopener noreferrer nofollow\">\u0422\u0435\u0441\u0442\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ol>\n<h2>\u276f \u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"0\" id=\"0\"><\/a><\/p>\n<p>\u0415\u0449\u0451 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430, \u043c\u043d\u0435 \u0432\u0437\u0431\u0440\u0435\u043b\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u00abWrite once, run anywhere\u00bb \u043f\u0440\u0430\u0432\u0434\u0438\u0432\u0430. \u0412\u0441\u0435 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e Java \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Enterprise-\u0441\u0435\u043a\u0442\u043e\u0440\u0435 \u043f\u043e \u0442\u0438\u043f\u0443 \u0431\u0430\u043d\u043a\u043e\u0432, Android-\u0433\u0430\u0434\u0436\u0435\u0442\u0430\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044f\u0437\u044b\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043e\u043a\u043e\u043b\u043e 80% \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0434\u0430\u0436\u0435 \u0432 \u0441\u043c\u0430\u0440\u0442-\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430\u0445, \u043a\u0443\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043d\u0430\u043c SIM \u0438 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0433\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0431\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0430\u043c\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 Android-\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0432 \u043c\u0438\u0440\u0435, \u043d\u043e \u0435\u0449\u0451 \u0438 \u043d\u0430 \u0440\u0435\u0442\u0440\u043e-\u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445, \u0438 \u043f\u0440\u0438 \u0432\u0441\u0451\u043c \u044d\u0442\u043e\u043c \u0431\u044b\u043b\u0430 3D. \u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043d\u0435\u0434\u0435\u043b\u0438, \u044f \u0443\u0441\u043f\u0435\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u0433\u043e\u043d\u043e\u0447\u043a\u0438 \u0441 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0438\u0437\u0438\u043a\u043e\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u00ab\u043b\u0438\u043d\u0438\u0439\u00bb:<\/p>\n<figure class=\"\">\n<div><figcaption><em>\u0412 \u0438\u0433\u0440\u0435 \u0431\u044b\u043b \u043c\u0443\u043b\u044c\u0442\u0438\u0440\u0435\u0434\u043d\u0435\u0440 \u0434\u043b\u044f M3G \u0438 MascotCapsule&#8230; \u043d\u0435 \u0445\u0443\u0436\u0435 \u0438\u0433\u0440 Fishlabs :))<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u0437\u0430\u0442\u0435\u043c \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043b\u0438\u0448\u0430\u044e\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0445 \u0444\u0438\u0447 \u044f\u0437\u044b\u043a\u0430. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0433\u0440\u044b \u0434\u043b\u044f Java-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u0439 \u00ab\u0434\u0436\u0430\u0432\u0435\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0435\u0451 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u043c \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0435. \u0412 \u043c\u0438\u0440\u0435 C\/C++ \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u00abC \u0441 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438\u00bb, \u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 Java &#8212; \u043f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c-\u0434\u0432\u0443\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0433\u0440\u044b. \u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u0435\u0440\u0441\u0438\u044f JDK \u0432 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u0431\u044b\u043b\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 1.3 \u2014 \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u0438 \u0438\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0444\u0438\u0448\u0435\u043a Java.<\/p>\n<figure class=\"full-width\">\n<div><figcaption><em>\u041f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0433\u0440 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u044f \u043f\u0438\u0441\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u0414\u0430\u0431\u044b \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0432\u0430\u0441 \u043e\u0442 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439, \u0441\u0441\u044b\u043b\u043a\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \ud83d\ude42<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u0435\u0436\u0435\u043c HTC Dream \u2014 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u043c Android-\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u0432 \u043c\u0438\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0448\u0435\u043b \u0432 \u0434\u0430\u043b\u0451\u043a\u043e\u043c 2008 \u0433\u043e\u0434\u0443 \u0441 Android 1.0 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443. \u0412 \u043d\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0435 JVM, \u0430 \u0441\u0432\u043e\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 Dalvik \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u043c \u0438 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 JDK \u2014 1.5, \u0434\u0430 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0437\u0434\u0435\u0441\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0449\u043d\u0435\u0435, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438!<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0433\u0440\u0443 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u044e \u043d\u0430 \u041f\u041a, \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043b\u0434 \u0438 \u0434\u043b\u044f \u0440\u0435\u0442\u0440\u043e-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0441 GPU \u0438\u0437 90-\u0445 \u0438 \u043d\u0443\u043b\u0435\u0432\u044b\u0445. \u0418 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441 \u0432\u0430\u043c\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b!<\/p>\n<h2>\u276f \u0420\u0435\u043d\u0434\u0435\u0440<\/h2>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440, \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043d\u0430 \u0441\u043b\u0430\u0431\u044b\u0445 \u0441\u0441\u044b\u043b\u043a\u0430\u0445, \u043d\u0435\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0433\u0440\u0430\u0444\u0430 \u0441\u0446\u0435\u043d\u044b \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0443\u0440\u043e\u0432\u043d\u0435\u0439. \u041d\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u0430\u043b\u043e \u0434\u043b\u044f 3D-\u0438\u0433\u0440\u044b \u0438, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0432\u0441\u0435 \u044d\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b. <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u00ab\u0432 \u043b\u043e\u0431\u00bb \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0443\u0431\u0438\u043a \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0438\u0433\u0440\u043e\u0432\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0440\u0438\u0441\u0443\u0435\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u00bb \u2014 \u043c\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u043c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 (DIP&#8217;\u043e\u0432) \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 \u0432\u0441\u0435 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u044b. \u0414\u043b\u044f \u0443\u0440\u043e\u0432\u043d\u044f \u0432 16&#215;16 \u0431\u043b\u043e\u043a\u043e\u0432 \u044d\u0442\u043e \u0443\u0436\u0435 \u0446\u0435\u043b\u044b\u0445 256 DIP&#8217;\u043e\u0432 &#8212; \u0430 \u0432\u043a\u0443\u043f\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u0430\u043d\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 UI &#8212; \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 260-270.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0421\u0430\u043c\u0430\u044f \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u044d\u0442\u043e <strong>\u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/strong> (Frustum culling). \u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441 \u0432\u0430\u043c\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 4&#215;4: \u043c\u0438\u0440\u043e\u0432\u0430\u044f (\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043c\u0438\u0440\u0435), \u0432\u0438\u0434\u0430 (\u043a\u0430\u043c\u0435\u0440\u0430, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438\u0437 \u00ab\u0433\u043b\u0430\u0437\u00bb) \u0438 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0438, \u043e\u043d\u0438 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e WorldViewProjection-\u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438 \u0435\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u2014 \u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0451 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 <strong>Clip-Space<\/strong> (\u0438\u043b\u0438 NDC) \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0442\u043e\u0440 \u0431\u0435\u0440\u0451\u0442 \u043a\u0430\u0436\u0434\u044b\u0435 \u0442\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0433\u043b\u043e\u0432 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0440\u0435\u043d\u0434\u0435\u0440\u0442\u0430\u0440\u0433\u0435\u0442 &#8212; \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044d\u0442\u043e \u044d\u043a\u0440\u0430\u043d. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0438 Z-\u0431\u0443\u0444\u0435\u0440\u0430, \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432\u0438\u0434\u0430 \u0441 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0435\u0451 \u043d\u0430 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043c\u0438\u0440\u0430 (\u0432\u0432\u0435\u0440\u0445, \u0432\u043d\u0438\u0437, \u0432\u043b\u0435\u0432\u043e, \u0432\u043f\u0440\u0430\u0432\u043e, \u0432\u043f\u0435\u0440\u0451\u0434, \u043d\u0430\u0437\u0430\u0434) \u2014 \u0442\u043e \u043f\u0443\u0442\u0451\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u2014 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043c\u0438\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b:<\/p>\n<pre><code class=\"java\">    public void calculate(Matrix viewProj) {         float[] items = viewProj.Matrix;         planes[0].set(items[3] - items[0], items[7] - items[4], items[11] - items[8], items[15] - items[12]).normalize();         planes[1].set(items[3] + items[0], items[7] + items[4], items[11] + items[8], items[15] + items[12]).normalize();         planes[2].set(items[3] + items[1], items[7] + items[5], items[11] + items[9], items[15] + items[13]).normalize();         planes[3].set(items[3] - items[1], items[7] - items[5], items[11] - items[9], items[15] - items[13]).normalize();         planes[4].set(items[3] - items[2], items[7] - items[6], items[11] - items[10], items[15] - items[14]).normalize();         planes[5].set(items[3] + items[2], items[7] + items[6], items[11] + items[10], items[15] + items[14]).normalize();     }      \/\/ Allocation-less     public boolean isPointInFrustum(float x, float y, float z)     {         for(int i = 0; i &lt; planes.length; i++)         {             Plane plane = planes[i];              if ((plane.A * x) + (plane.B * y) + (plane.C * z) + plane.D &lt;= 0)                 return false;         }          return true;     }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043b\u0438 \u043d\u0430\u0448 \u043a\u0443\u0431\u0438\u043a \u0438\u043b\u0438 \u0442\u0430\u043d\u0447\u0438\u043a \u0432 \u043a\u0430\u0434\u0440 \u2014 \u0434\u0435\u043b\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0438. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430: \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c Bounding-sphere \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 (\u0440\u0430\u0434\u0438\u0443\u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0430\u043c\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u0438 \u0441\u0430\u043c\u043e\u0439 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b), \u0438\u043b\u0438 Bounding-box. \u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u0438 \u0441\u0430\u043c\u043e\u0439 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 Bounding-box&#8217;\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0442\u0430\u043a\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0439 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u0443\u0442\u043a\u043d\u0443\u0442\u0441\u044f \u0432 \u00ab\u0441\u0442\u0435\u043d\u043a\u0443\u00bb \u043d\u043e\u0441\u043e\u043c \u0432 \u0438\u0433\u0440\u0435:<\/p>\n<pre><code class=\"java\">  public boolean isMeshRendererInFrustum(MeshRenderer renderer) {         float x = renderer.Parent.Position.X;         float y = renderer.Parent.Position.Y;         float z = renderer.Parent.Position.Z;         Vector min = renderer.Mesh.BoundingMin;         Vector max = renderer.Mesh.BoundingMax;          return isPointInFrustum(x + min.X, -(y + min.Y), z + min.Z) || isPointInFrustum(x + max.X, -(y + max.Y), z + max.Z);     }<\/code><\/pre>\n<p>\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043e\u043a\u043e\u043b\u043e 100 DIP&#8217;\u043e\u0432 \u0438 \u0434\u0430\u0451\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 FPS. \u041d\u0430 Galaxy S3 \u0441 Mali 400MP4 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 60FPS, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043d\u0430 Xperia Play \u2014 \u043e\u043a\u043e\u043b\u043e 30&#8230; \u0427\u0442\u043e-\u0436, \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u0430\u043b\u043e, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c GPU \u2014 \u043a\u0440\u043e\u0432\u043d\u044b\u0439 \u0431\u0440\u0430\u0442 Xenos \u0432 Xbox 360&#8230;<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c 256 \u043a\u0443\u0431\u0438\u043a\u043e\u0432 \u0434\u043b\u044f GPU, \u0434\u0430\u0436\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u2014 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0431\u044c\u044e\u0442 \u043f\u043e \u0444\u0438\u043b\u043b\u0440\u0435\u0439\u0442\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 GPU \u0431\u044b\u043b \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043d\u0430 \u0447\u0438\u0441\u043b\u043e DIP&#8217;\u043e\u0432 \u2014 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 100, \u0438\u043d\u0430\u0447\u0435 FPS \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u043a\u0443 <strong>\u0431\u0430\u0442\u0447\u0438\u043d\u0433\u0430<\/strong>: \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u043a\u0443\u0431\u0438\u043a\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c \u0432 \u0441\u0446\u0435\u043d\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u0437\u0430 \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 DIPUP:<\/p>\n<pre><code class=\"java\">public void bake() {         int uniqueMaterials = 0;          batchList.clear();         batchRenderers.clear();         world.findComponentsOfType(BatchedMeshRenderer.class, batchRenderers);          for(int i = 0; i &lt; batchRenderers.size(); i++) {             BatchedMeshRenderer renderer = batchRenderers.get(i);             renderer.IsTakenByBatcher = false;              if(renderer.Mesh != null &amp;&amp; renderer.Material != null) {                 if(renderer.Mesh.Buffers.length != 1)                     continue; \/\/ Only simple meshes is supported now                  Batch batch = meshes.get(renderer.Material);                  if(batch == null)                     meshes.put(renderer.Material, batch = new Batch(renderer.Material));                  batch.addMesh(renderer);             }         }          for(Map.Entry&lt;Material, Batch&gt; materialBatch : meshes.entrySet()) {             batchList.add(new BatchHolder(materialBatch.getKey(), materialBatch.getValue()));             materialBatch.getValue().finish(); \/\/ Upload mesh to GPU         }     }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, FPS \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 &#8212; \u0446\u0435\u043b\u044b\u0445 45! \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430: \u044d\u0442\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u044c\u0451\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u043e \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0431\u0430\u0442\u0447\u0438\u043d\u0433\u0430 (\u0442\u0430\u043d\u043a\u0438 \u0432\u0435\u0434\u044c \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0442 \u043a\u0443\u0431\u0438\u043a\u0438) &#8212; \u043f\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u0434\u0430\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0443\u0442\u0451\u043c \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u0431\u0430\u0442\u0447\u0435\u0439 \u043d\u0430 \u0441\u0435\u0442\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b &#171;\u043a\u0443\u0431\u0438\u043a\u043e\u0432&#187; \ud83d\ude42<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u0435\u043c\u0430 \u2014 \u044d\u0442\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043b\u0430 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0430\u0431\u043e\u0440 \u0440\u0435\u043d\u0434\u0435\u0440\u0441\u0442\u0435\u0439\u0442\u043e\u0432 \u0438 \u043f\u0430\u0440\u043e\u0447\u043a\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440: Diffuse \u0438 Detail. \u041d\u043e \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u043f\u043e\u043c\u043d\u0438\u0442, \u0447\u0442\u043e \u0435\u0449\u0451 \u0434\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0432 FFP \u0431\u044b\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0438\u043c\u0435\u043d\u0443\u0435\u043c\u044b\u0439 <strong>\u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u0430\u043c\u0438<\/strong>. \u041f\u043e \u0441\u0443\u0442\u0438, \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u044b \u2014 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0445 \u044e\u043d\u0438\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0437\u0430 \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. <\/p>\n<figure class=\"full-width\">\n<div><figcaption><em>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u043e\u0432 <\/em>\u2014<em> \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u043a\u0438. \u042d\u0434\u0430\u043a\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0438 Splat mapping<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0434\u043b\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e \u0442\u0438\u043f\u0443 ini-\u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u0441\u0435\u043a\u0446\u0438\u0438 Texture \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043f\u0443\u043b\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0432 RenderStates \u2014 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043f\u043e\u043b\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 Material, \u0430 \u0432 Combiners \u2014 \u043e\u0447\u0435\u043d\u044c-\u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u043d\u0430 \u0442\u0435\u043c\u0443 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432!<\/p>\n<pre><code class=\"1c\">[Texture] Primary = textures\/t72_diffuse.tex Secondary = textures\/brick.tex  [RenderStates] AlphaTest = 0 AlphaTestValue = 1  DepthWrite = 1 DepthTest = 1 AlphaBlend = 0 Fog = 1 Unlit = 1  [Combiners] Sample Primary Interpolate Secondary 0.3 MultiplyColor Primary<\/code><\/pre>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-466250","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/466250","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=466250"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/466250\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=466250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=466250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=466250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}