{"id":349463,"date":"2023-06-28T09:03:43","date_gmt":"2023-06-28T09:03:43","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=349463"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=349463","title":{"rendered":"<span>\u041a\u0430\u043a \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 3D-\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438\u0437 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432<\/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<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8c3\/9b9\/eab\/8c39b9eab82db5905f2f44ef28703bd6.png\" width=\"1000\" height=\"559\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c3\/9b9\/eab\/8c39b9eab82db5905f2f44ef28703bd6.png\"\/><\/figure>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0428\u0438\u043a\u043e, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u042f\u043d\u0434\u0435\u043a\u0441 \u041c\u0430\u0440\u043a\u0435\u0442\u0435 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0432 2021 \u0433\u043e\u0434\u0443. \u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0434 \u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0438\u043d\u043a\u043e\u043c \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0447\u0430\u0442\u0435: \u00ab\u041a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c \u0441 3D?\u00bb \u0410 \u044f, \u043f\u043e\u043a\u0430 \u0443\u0447\u0438\u043b\u0441\u044f \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0435, \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f 3D-\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0431\u0431\u0438, \u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0432\u043e \u044d\u0442\u043e, \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0441\u0432\u043e\u044e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443\u0440\u0443.<\/p>\n<p>\u0421\u0443\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u044b\u043b\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 AR (\u0442\u043e \u0435\u0441\u0442\u044c, \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c). \u041e\u043d\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0432\u0430\u0440 \u0441 \u041c\u0430\u0440\u043a\u0435\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u00ab\u043f\u0440\u0438\u043c\u0435\u0440\u0438\u0442\u044c\u00bb \u0432 \u0438\u043d\u0442\u0435\u0440\u044c\u0435\u0440. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043a\u0443\u043f\u0438\u0442\u044c \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440, \u043d\u043e \u0432\u0430\u043c \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043c\u0435\u0431\u0435\u043b\u044c\u044e \u0438 \u0432\u043b\u0435\u0437\u0435\u0442 \u043b\u0438 \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 \u0438\u043c\u0435\u044e\u0449\u0435\u0435\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.\u00a0<\/p>\n<p>\u041d\u0430 iOS \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0430 \u043d\u0430 Android \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0434\u0432\u043e\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f: \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u2014 \u0432\u0441\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c ARCore \u0438 \u0434\u0435\u043b\u043e\u0432. \u041d\u043e \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0435\u043a \u0431\u044b\u043b\u043e \u0432 USDZ-\u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0430 ArCore \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 \u043d\u0438\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0422\u043e \u0435\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 iOS \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u2014 GLB. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0441\u043a\u0430\u0447\u0430\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0438 \u043d\u0430\u0436\u043c\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00bb. \u041d\u0435 \u0442\u0443\u0442-\u0442\u043e \u0431\u044b\u043b\u043e.\u00a0<\/p>\n<p>\u0418 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u0438 \u0441 \u0447\u0435\u043c \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f Blender \u0438 Unreal Engine. \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0435\u0433\u043e \u043a\u043e\u0434.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u044b \u0438 \u043e\u0448\u0438\u0431\u043a\u0438<\/h2>\n<h3>\u041f\u043e\u0438\u0441\u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u043a\u0443, \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0451 \u043c\u0430\u043b\u043e\u0439 \u043a\u0440\u043e\u0432\u044c\u044e. \u0414\u0432\u0438\u0433\u0430\u043b\u0441\u044f \u044f \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443:<\/p>\n<ul>\n<li>\n<p>\u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>Blender;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0440\u0443\u0433\u0438\u0435 3D-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>Unreal Engine.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043d\u043b\u0430\u0439\u043d-\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u0430\u0431\u044b\u043c\u0438: \u043e\u043d\u0438 \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 5\u201410 \u043c\u0438\u043d\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>\u0414\u043b\u044f Blender \u0443\u0436\u0435 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d <a href=\"https:\/\/github.com\/robmcrosby\/BlenderUSDZ\"><u>\u043f\u043b\u0430\u0433\u0438\u043d<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c USDZ. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438 \u043f\u0430\u0434\u0430\u043b \u0438\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435. \u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0432 \u0447\u0451\u043c \u0436\u0435 \u0434\u0435\u043b\u043e. \u041d\u043e \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u044f \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u043b \u044d\u0442\u0443 \u0438\u0434\u0435\u044e.<\/p>\n<p>\u041f\u043e\u0438\u0441\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 3D-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438 \u0431\u044b \u0444\u043e\u0440\u043c\u0430\u0442 USDZ, \u043d\u0435 \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u0438\u0441\u044c \u0443\u0441\u043f\u0435\u0445\u043e\u043c. \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 3Ds Max \u0438 Maya \u043d\u0430\u0448\u0451\u043b \u0438\u043d\u0444\u0443, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0430\u043b\u044c\u0444\u0435 \u0438\u043b\u0438 \u0431\u0435\u0442\u0435, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u043e. \u0414\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u043f\u043e\u043c\u043d\u044e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0451\u043c \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043d\u0430 Linux, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u0442\u043e\u0436\u0435 \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<h3>Unreal Engine<\/h3>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c Unreal Engine. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442 USDZ (\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0432 \u0431\u0435\u0442\u0430-\u0432\u0435\u0440\u0441\u0438\u0438), \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0432\u0430\u044f \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0432\u044b\u0448\u043b\u0430 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443:<\/p>\n<ol>\n<li>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442 \u0444\u0430\u0439\u043b\u0430 USDZ \u0432 UnrealEngine.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7a0\/3d4\/50b\/7a03d450b4d366a0b8484c403d31bfe0.png\" width=\"1280\" height=\"697\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a0\/3d4\/50b\/7a03d450b4d366a0b8484c403d31bfe0.png\"\/><\/figure>\n<ol start=\"2\">\n<li>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 .obj \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/850\/fd2\/3f8\/850fd23f8f640b2700b77ebb2887f4f1.png\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/850\/fd2\/3f8\/850fd23f8f640b2700b77ebb2887f4f1.png\"\/><\/figure>\n<ol start=\"3\">\n<li>\n<p>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0442\u044b\u043a\u0430 \u0432 Blender.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2aa\/5b9\/9ff\/2aa5b99ff7c260b65564ec5fac6b941b.png\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2aa\/5b9\/9ff\/2aa5b99ff7c260b65564ec5fac6b941b.png\"\/><\/figure>\n<p>\u0427\u0435\u043c \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b: Unreal Engine \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u044f\u0436\u0451\u043b\u044b\u0439, \u043e\u043d \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0438 \u0432 \u043d\u0451\u043c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0430\u0445 \u043e\u043d \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0438\u043b\u0438 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e3e\/3d1\/de7\/e3e3d1de7bcfca8453bc9ece2cf0b30c.png\" width=\"1280\" height=\"715\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e3e\/3d1\/de7\/e3e3d1de7bcfca8453bc9ece2cf0b30c.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/47e\/17c\/250\/47e17c250d7632631103dc6349e78cf5.png\" alt=\"\u041e\u0437\u0430\u0434\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0413\u0435\u0440\u0430\u043b\u044c\u0442\" title=\"\u041e\u0437\u0430\u0434\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0413\u0435\u0440\u0430\u043b\u044c\u0442\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/47e\/17c\/250\/47e17c250d7632631103dc6349e78cf5.png\"\/><\/p>\n<div><figcaption>\u041e\u0437\u0430\u0434\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0413\u0435\u0440\u0430\u043b\u044c\u0442<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d77\/b60\/45f\/d77b6045ff7ca3f66247c123f7921d8d.png\" alt=\"\u0417\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0442\u0440\u0438\u0446\u0435\u0440\u0430\u0442\u043e\u043f\u0441\" title=\"\u0417\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0442\u0440\u0438\u0446\u0435\u0440\u0430\u0442\u043e\u043f\u0441\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d77\/b60\/45f\/d77b6045ff7ca3f66247c123f7921d8d.png\"\/><\/p>\n<div><figcaption>\u0417\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0442\u0440\u0438\u0446\u0435\u0440\u0430\u0442\u043e\u043f\u0441<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0433 \u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438 \u0438\u0437 USDZ \u0432 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<h3>\u0421\u043d\u043e\u0432\u0430 Blender<\/h3>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u043e\u043a\u043e\u043f\u0430\u0442\u044c \u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u043a Blender. \u042f \u043d\u0430\u0448\u0451\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u0442\u044c \u0432\u0441\u0435 \u043a\u0440\u0430\u0448\u0438 (\u0438\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435), \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0430\u0445 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e?<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fe8\/29d\/6ed\/fe829d6ed200bff15c8ec7e3b9d53cfa.png\" alt=\"\u042d\u0442\u043e XBox One\" title=\"\u042d\u0442\u043e XBox One\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fe8\/29d\/6ed\/fe829d6ed200bff15c8ec7e3b9d53cfa.png\"\/><\/p>\n<div><figcaption><span class=\"habrahidden\">\u042d\u0442\u043e XBox One<\/span><\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5f8\/3d9\/152\/5f83d9152ab1ccd377000bbaf3682034.png\" alt=\"\u0410 \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0432\u0438\u0437\u0438\u044f PlayStation 5\" title=\"\u0410 \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0432\u0438\u0437\u0438\u044f PlayStation 5\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f8\/3d9\/152\/5f83d9152ab1ccd377000bbaf3682034.png\"\/><\/p>\n<div><figcaption><span class=\"habrahidden\">\u0410 \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0432\u0438\u0437\u0438\u044f PlayStation 5<\/span><\/figcaption><\/div>\n<\/figure>\n<p>\u042f \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u0447\u0451\u0441\u044b\u0432\u0430\u0442\u044c GitHub \u0438 \u0432\u044b\u0448\u0435\u043b \u043d\u0430 <a href=\"https:\/\/github.com\/PixarAnimationStudios\/USD\"><u>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Pixar<\/u><\/a> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 USDZ. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0445.\u00a0<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043c\u043d\u0435 \u0443\u043b\u044b\u0431\u043d\u0443\u043b\u0430\u0441\u044c \u0443\u0434\u0430\u0447\u0430. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0441\u0440\u0435\u0434\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043c\u0435\u043d\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b USDView. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443 \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u043d\u0435\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b06\/d0f\/56a\/b06d0f56addad3c66b61acfdaa70f70b.png\" width=\"1165\" height=\"1057\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b06\/d0f\/56a\/b06d0f56addad3c66b61acfdaa70f70b.png\"\/><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043a Blender. \u0421\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u0432\u0435\u0447\u0435\u0440\u043e\u0432, \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0432 USDView, \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u043e\u043c \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u0435 \u0438 Blender, \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u041d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u043c\u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0435 (\u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043f\u043e\u0447\u0442\u0438 4 \u0434\u043d\u044f \u043d\u0430 \u044d\u0442\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438!) \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043c\u0430\u0442\u0440\u0438\u0446 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u043a\u043e\u0440\u0451\u0436\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c.\u00a0<\/p>\n<p>\u0420\u0443\u043a\u0430\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438 \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u0436\u0430\u0442\u044b\u0435 \u0441\u0440\u043e\u043a\u0438. \u0424\u0438\u043a\u0441 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043d\u043e\u044e \u0431\u044b\u043b \u043e\u0446\u0435\u043d\u0435\u043d \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u00ab\u0432\u0440\u043e\u0434\u0435 \u0438\u0437\u044f\u043d\u00bb \u043f\u043e <abbr class=\"habraabbr\" title=\"\" data-title=\"&lt;p>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f4\/735\/52e\/8f473552e551284f51d6b9eea187f1a0.png&#187; data-abbr=&#187;\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u0446\u0435\u043d\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438&#187; data-image-width=&#187;642&#8243; data-image-height=&#187;624&#8243;>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438<\/abbr>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u044d\u0442\u0443 \u0438\u0434\u0435\u044e.<\/p>\n<p>\u042f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0422\u043e\u0433\u0434\u0430 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0448\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440, \u0438\u0437\u0443\u0447\u0438\u0432 \u043a\u0438\u0448\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u043e \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u043e\u0436\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u00ab\u0432\u0440\u043e\u0434\u0435 \u0438\u0437\u044f\u043d\u00bb. \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u044f \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0434\u0435\u0438, \u043a\u0430\u043a \u044f \u043d\u0430\u0445\u043e\u0436\u0443 \u0432 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0441\u043e\u0444\u0442\u0438\u043d\u0443 Usdcat.<\/p>\n<p>\u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, Pixar \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>USDC \u2014 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u044e \u0438\u043d\u0444\u0443 \u043f\u043e \u0441\u0435\u0442\u043a\u0435 \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u0431\u0435\u0437 \u0442\u0435\u043a\u0441\u0442\u0443\u0440.<\/p>\n<\/li>\n<li>\n<p>USDA \u2014 \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 USDC, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>USD \u2014 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0442\u0430\u043a \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c.<\/p>\n<\/li>\n<li>\n<p>USDZ \u2014 \u043f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e zip-\u0430\u0440\u0445\u0438\u0432, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c USDC \u0438\u043b\u0438 USDA \u0444\u0430\u0439\u043b \u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u0432\u043e\u0442, Usdcat \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438.\u00a0<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u044f \u0441\u043e\u0431\u0440\u0430\u043b Blender \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043a\u0430\u043a \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f Python, \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430.<\/p>\n<h2>\u041a\u0430\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440<\/h2>\n<blockquote>\n<p><strong>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/strong> \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0451\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043a\u043e\u0434 \u043e\u0442 \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u043d\u0430 Python. \u0423\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0442 \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u044f \u0440\u0430\u0437\u0431\u0438\u043b \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430\u043f\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 USDZ-\u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f USDC \u0432 USDA.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 USDA, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0432 \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0451 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f Blender \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u0441 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 *.blend \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u0432 GLB.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u2014 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f Blender.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\"># \u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 def try_to_convert(input_file, blend_file, output_file, debug_file=None):     # \u0418\u0449\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 usdcat \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438     usd_cat = find_exe('usdcat')     # \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u0432 blender     create_empty_scene()     # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c usdcat, \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442     file_data = read_file(usd_cat, input_file)     # \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432 Blender     extracted_path = extract_file(input_file)     # \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u0442\u0430\u043a     save_data(file_data, debug_file)     # \u041f\u0430\u0440\u0441\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430     parsed_data = parse_data(file_data) # \u041d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0432\u043e\u0442 \u044d\u0442\u043e     # \u041f\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0448\u0435\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443     import_scene_data(parsed_data, extracted_path) # \u0438 \u044d\u0442\u043e     # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0448\u0438\u0431\u043e\u043a     save_scene(blend_file)     # \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432 glb     export_scene(output_file)     # \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b     clean(extracted_path)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430. \u0412 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 USDC\/USDZ\/USDA \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#usda 1.0 (     customLayerData = {         string creator = \"usdzconvert preview 0.62\"     }     defaultPrim = \"modul_01\"     metersPerUnit = 1     upAxis = \"Y\" )  def Xform \"modul_01\" (     assetInfo = {         string name = \"modul_01\"     }     kind = \"component\" ) def Scope \"Materials\"     {         def Material \"DVP_komod_2_Letta_Malta_modul_01\"         {             token outputs:surface.connect = &lt;\/modul_01\/Materials\/DVP_komod_2_Letta_Malta_modul_01\/surfaceShader.outputs:surface>              def Shader \"surfaceShader\"             {                 uniform token info:id = \"UsdPreviewSurface\"                 color3f inputs:diffuseColor.connect = &lt;\/modul_01\/Materials\/DVP_komod_2_Letta_Malta_modul_01\/diffuseColor_texture.outputs:rgb>                 float inputs:roughness = 1                 token outputs:surface             }             ...     }     ... def Scope \"Geom\"     {         def Mesh \"DVP_komod_2_Letta_Malta_modul_01\"         {             uniform bool doubleSided = 1             int[] faceVertexCounts = [3, 3,...]             rel material:binding = &lt;\/modul_01\/Materials\/DVP_komod_2_Letta_Malta_modul_01>             point3f[] points = [(-0.34295827, 0.2727909, -0.1854379), (0.3439359, 0.27179047, -0.1864381), ...]             normal3f[] primvars:normals = [(2.7196302e-7, 2.3841858e-7, 1), (1, -0.0000013478456, -1.2789769e-13), ...]             texCoord2f[] primvars:st = [(0.6426813, 0.66292274), (0.8511379, 0.32041615), ...]             uniform token subdivisionScheme = \"none\"             quatf xformOp:orient = (1, 0, 0, 0)             float3 xformOp:scale = (1, 1, 1)             double3 xformOp:translate = (0, 0, 0)             uniform token[] xformOpOrder = [\"xformOp:translate\", \"xformOp:orient\", \"xformOp:scale\"]         }         ...     }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u0447\u0442\u043e \u044f \u043e\u0431\u0440\u0430\u0442\u0438\u043b \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u0438:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u0446\u0435\u043d\u044b (\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b, \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u043e\u0441\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435).<\/p>\n<\/li>\n<li>\n<p>Xform \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 xform, \u0438\u043d\u0444\u0443 \u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>Scope \u2014 \u043f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 xform, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0438\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b).<\/p>\n<\/li>\n<li>\n<p>Mesh \u2014 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 (\u0432\u0441\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u0433\u0440\u0430\u043d\u0438, \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435), \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>Material \u2014 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435, \u043d\u0430\u0431\u043e\u0440 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0430\u0440\u0441\u0435\u0440 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u0422\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u043b\u0430 \u0440\u0430\u0437\u043e\u0432\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0443 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0438\u043b\u0438 \u0441\u043e\u0442\u0435\u043d \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0432 \u043a\u0440\u0430\u0441\u043e\u0442\u0443 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u044f \u043d\u0435 \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b\u0441\u044f \u0441\u043e\u0432\u0441\u0435\u043c. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c, \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u0430\u0436\u0434\u043e\u0439. \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u043b\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u043a\u0440\u0430\u0448\u0438\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">class ParseConstants:     usda_desc = '#usda'     up_axis = 'upAxis'     meters_per_unit = 'metersPerUnit'     scope = 'def Scope '      mesh = 'def Mesh '     xform = 'def Xform '     subset = 'def GeomSubset '     material = 'def Material '     shader = 'def Shader'      # operations     matrix4d = 'matrix4d'     op_orient = 'quatf xformOp:orient'     op_scale = 'float3 xformOp:scale'     op_translate = 'double3 xformOp:translate'     op_transform = 'matrix4d xformOp:transform'     op_order = 'uniform token[] xformOpOrder'     ops_map = {         'xformOp:translate': Operation.TRANSLATE,         'xformOp:orient': Operation.ORIENT,         'xformOp:scale': Operation.SCALE,         'xformOp:transform': Operation.TRANSFORM     }      double_sided = 'uniform bool doubleSided'     face_vertex_count = 'int[] faceVertexCounts'     face_vertex_index = 'int[] faceVertexIndices'     material_binding = 'rel material:binding'     points = 'point3f[] points'     interpolation = 'interpolation'     normals_indices = 'int[] primvars:normals:indices'     normals = 'normal3f[] normals'     normals_primvars = 'normal3f[] primvars:normals'     int_primvars = 'int[] primvars:'     subdivision_scheme = 'uniform token subdivisionScheme'     extent = 'float3[] extent'     text_coord = 'texCoord2f[] '      element_type = 'uniform token elementType = \"face\"'     family_name = 'uniform token familyName = \"materialBind\"'     indices = 'int[] indices'      # materials     token = 'token'     metallic = 'metallic'     roughness = 'roughness'     emissive_color = 'emissiveColor'     normal = 'normal'     occlusion = 'occlusion'     diffuse_color = 'diffuseColor'     opacity = 'opacity'     specular_color = 'specularColor'     use_specular_workflow = 'useSpecularWorkflow'     varname = 'varname'     file = 'file'     st = 'st'     default = 'default'     bias = 'bias'     scale = 'scale'     ior = 'ior'     displacement = 'displacement'     clearcoat = 'clearcoat'     clearcoat_roughness = 'clearcoatRoughness'     opacity_threshold = 'opacityThreshold'     wrap_s = 'wrapS'     wrap_t = 'wrapT'     st_primvar_name = 'stPrimvarName'     surface = 'surface'     result = 'result'     rgb = 'rgb'     r = 'r'     b = 'b'     g = 'g'     a = 'a'     connect = '.connect'      type_to_mat_type = {         'uniform token': InfoType.UNIFORM_TOKEN,         'float': InfoType.FLOAT,         'color3f': InfoType.COLOR3F,         'normal3f': InfoType.NORMAL3F,         'int': InfoType.INT,         'float2': InfoType.FLOAT2,         'float3': InfoType.FLOAT3,         'float4': InfoType.FLOAT4,         'token': InfoType.TOKEN,         'asset': InfoType.ASSET,     }      desc_to_direction = {         'inputs': InfoDirection.INPUT,         'outputs': InfoDirection.OUTPUT,     }      token_id_to_shader_type = {         'UsdPreviewSurface': ShaderTokenType.PREVIEW_SURFACE,         'UsdPrimvarReader_float2': ShaderTokenType.UV_COORDINATES,         'UsdUVTexture': ShaderTokenType.UV_TEXTURE,     }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0440\u043e\u043a):<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def read_material(data, counter):     current_line = data[counter.line]     name = read_name(current_line)     shaders = []     outputs = []     while True:         counter.inc()         current_line = data[counter.line]         if current_line.startswith(ParseConstants.token):             outputs.append(read_mat_info(current_line))         elif current_line.startswith(ParseConstants.shader):             shaders.append(read_shader(data, counter))         elif current_line == '{':             continue         elif current_line == '}':             break         else:             raise_parse_error(current_line)     return Material(         name=name,         shaders=shaders,         outputs=outputs,     )<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u043d\u0430\u0431\u043e\u0440 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0438 \u043d\u0430\u0431\u043e\u0440 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 3D-\u0441\u0446\u0435\u043d\u0443.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 Blender \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044a\u0435\u043a\u0442 bpy. \u041f\u043e\u0437\u0430\u0431\u0430\u0432\u0438\u043b\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430:<\/p>\n<pre><code class=\"python\">def remove_mat_dummy():     bpy.ops.object.select_all(action='DESELECT') # \u0421\u043d\u0438\u043c\u0430\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u043d\u0430\u0440\u043e\u043a\u043e\u043c \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043b\u0438\u0448\u043d\u0435\u0433\u043e      bpy.data.objects['materials_dummy'].select_set(True) # \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442     bpy.ops.object.delete() # \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f<\/code><\/pre>\n<p>\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c xform \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043d\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def import_xform(xform, materials, parent_matrix, parent=None):     matrix = xform.matrix4d * parent_matrix     if len(xform.meshes) == 0:         if len(xform.children) == 0:             return         obj = create_empty_object(xform.name)         add_to_default_collection(obj)         if parent is not None:             obj.parent = parent         import_xforms(xform.children, materials, matrix, obj)     else:         # todo read uvs         for mesh in xform.meshes:             obj = create_mesh_object(mesh.name)             add_to_default_collection(obj)             add_mesh_data(obj, mesh, materials, matrix)             if parent is not None:                 obj.parent = parent             import_xforms(xform.children, materials, matrix, obj)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0430\u043c\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0432 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438: \u0438\u043c\u043f\u043e\u0440\u0442 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432.<\/p>\n<h3>\u0418\u043c\u043f\u043e\u0440\u0442 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438<\/h3>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439 \u0431\u044b\u043b\u0430 \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u043a Blender, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0441\u0441\u044b\u043b\u0430\u043b\u0441\u044f \u0432\u044b\u0448\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def add_mesh_data(obj, data, materials, parent_matrix):     # \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043b\u043e\u0442 \u0434\u043b\u044f uv-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442     for name, coordinates in data.text_coordinates.items():         obj.data.uv_layers.new(name=name)     # \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438     matrix = data.transform * parent_matrix     counts = data.face_vertex_count     indices = data.face_vertex_indices     verts = data.points          faces = []     smooth = []     index = 0     for count in counts:         # \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b. \u041f\u043e \u0441\u0443\u0442\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432: \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u043e\u0447\u0435\u043a \u0438 \u043c\u0430\u0441\u0441\u0438\u0432, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0442\u043e\u0447\u0435\u043a. \u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.          faces.append(tuple([indices[index + i] for i in range(count)]))         if len(normals) > 0:             smooth.append(len(set(normals[index + i] for i in range(count))) > 1)         else:             smooth.append(True)         index += count     bm = bmesh.new()     bm.from_mesh(obj.data)     # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u044b     v_base = len(bm.verts)     for vert in verts:         bm.verts.new(vert)     bm.verts.ensure_lookup_table()      # \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b     main_mat_index = 0     if data.material is not None:         main_mat_index = add_material_to_obj(obj, data.material, materials)      mat_indices = [main_mat_index for _ in range(len(faces))]     # \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430, \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c     for s in data.subsets:         if s.indices is not None and s.material is not None:             index = add_material_to_obj(obj, s.material, materials)             for i in s.indices:                 mat_indices[i] = index      # Add the Faces     for i, face in enumerate(faces):         if len(face) == len(set(face)):             f = bm.faces.new((bm.verts[i + v_base] for i in face))             f.material_index = mat_indices[i]             f.smooth = smooth[i]      # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c uv-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b     for name, coordinates in data.text_coordinates.items():         uv_indices = data.indices[name] if name in data.indices else data.face_vertex_indices         mapped_uv = [coordinates[i] for i in uv_indices]          obj.data.uv_layers.new(name=name)         uv_index = bm.loops.layers.uv[name]         index = 0         for f in bm.faces[-len(faces):]:             for i, l in enumerate(f.loops):                 if index + i &lt; len(mapped_uv):                     l[uv_index].uv = mapped_uv[index + i]                 else:                     l[uv_index].uv = (0.0, 0.0)             index += len(f.loops)      bm.to_mesh(obj.data)     bm.free()      # \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438     obj.data.transform(matrix=tuple(x for x in matrix.tolist()))     obj.data.update()     mat_indices.clear()<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>\u0418\u043c\u043f\u043e\u0440\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432\u00a0<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b BSDF_PRINCIPLED, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0433 \u0437\u0430\u0434\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0432\u043e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<ul>\n<li>\n<p>Base Color,<\/p>\n<\/li>\n<li>\n<p>Specular,<\/p>\n<\/li>\n<li>\n<p>Metallic,<\/p>\n<\/li>\n<li>\n<p>Roughness,<\/p>\n<\/li>\n<li>\n<p>Clearcoat,<\/p>\n<\/li>\n<li>\n<p>Clearcoat Roughness,<\/p>\n<\/li>\n<li>\n<p>Emissive,<\/p>\n<\/li>\n<li>\n<p>IOR,<\/p>\n<\/li>\n<li>\n<p>Opacity,<\/p>\n<\/li>\n<li>\n<p>Normal.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432 \u0441\u0446\u0435\u043d\u0435 (\u0441\u043a\u0440\u0438\u043d \u0441 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 blender, \u043d\u043e \u0441\u0443\u0442\u044c \u0442\u0430 \u0436\u0435):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/72b\/207\/7a9\/72b2077a9371a879318bc48593b0a5fe.png\" width=\"1600\" height=\"1067\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/72b\/207\/7a9\/72b2077a9371a879318bc48593b0a5fe.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u0440\u044b\u0432\u043a\u0438 \u0438\u0437 \u043a\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def create_material(material, ext_dir):     mat = bpy.data.materials.new(material.name) # \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b     mat.use_nodes = True # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u043e\u0434\u043e\u0432     for shader in material.shaders:         import_shader(mat, material.shaders, shader, ext_dir) # \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440     return mat   def import_shader(blend_material, shaders, shader, ext_dir):     bsdf_node = get_node_by_type(blend_material, 'BSDF_PRINCIPLED')      # \u0428\u0435\u0439\u0434\u0435\u0440\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u0442\u0440\u0451\u0445 \u0442\u0438\u043f\u043e\u0432:     # PREVIEW_SURFACE \u2014 \u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u0432\u0435\u043a\u0442\u043e\u0440;     # UV_TEXTURE \u2014 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0438\u043b\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430;     # UV_COORDINATES \u2014 uv-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b.     if shader.token_id == ShaderTokenType.PREVIEW_SURFACE:         import_base_preview_surface(blend_material, shaders, shader, bsdf_node, ext_dir)     elif shader.token_id == ShaderTokenType.UV_TEXTURE:         import_base_uv_texture(blend_material, shader, shaders, ext_dir)     elif shader.token_id == ShaderTokenType.UV_COORDINATES:         import_uv_coordinates(blend_material, shader)   def import_base_preview_surface(blend_material, shaders, shader, bsdf_node, ext_dir):     bsdf_node.name = shader.name     set_node_input(         blend_material=blend_material,         shaders=shaders,         node=bsdf_node,         input_desc=shader.diffuse_color,         desc='Color',         node_input_name='Base Color',         input_type=InfoType.COLOR3F,         ext_dir=ext_dir,     )     set_node_input(         blend_material=blend_material,         shaders=shaders,         node=bsdf_node,         input_desc=shader.specular,         desc='Specular',         node_input_name='Specular',         input_type=InfoType.COLOR3F,         ext_dir=ext_dir,     )     # \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0431\u0440\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445     #...   def set_node_input(blend_material, shaders, node, input_desc, desc, node_input_name, input_type, ext_dir):     if input_desc is not None:         if input_desc.info_type != input_type:             raise_import_error('%s type is %s instead of %s' % (desc, input_desc.info_type, input_type))          # \u0415\u0441\u043b\u0438 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0435\u0441\u0442\u044c connection \u2014 \u044d\u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 (\u0432 \u0447\u0451\u043c \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0438 UV-\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439? \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043c\u043d\u044e). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0434\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043d\u043e\u0434\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0432\u0432\u043e\u0434\u043e\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043d\u043e\u0434\u044b.         if input_desc.is_connection:             set_shader_input_texture(                 blend_material=blend_material,                 shaders=shaders,                 node=node,                 input_name=node_input_name,                 input_desc=input_desc,                 ext_dir=ext_dir,             )         else:             # \u0414\u043b\u044f \u0446\u0432\u0435\u0442\u0430, \u0447\u0438\u0441\u043b\u0430 \u0438\u043b\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435: \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u0432\u0432\u043e\u0434\u0435 \u043d\u043e\u0434\u044b, \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044f\u0441\u044c \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439             if input_desc.info_type == InfoType.COLOR3F:                 set_shader_input_value(node, node_input_name, ast.literal_eval(input_desc.value) + (1,))             elif input_desc.info_type in (InfoType.FLOAT, InfoType.NORMAL3F):                 set_shader_input_value(node, node_input_name, ast.literal_eval(input_desc.value))             else:                 # \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0434\u0430\u0435\u043c \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f, \u043a\u0430\u043a\u043e\u0439 \u0435\u0449\u0451 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438                 raise_import_error('Unsupported data type')<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435<\/h2>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u043d\u0435 \u0431\u044b\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. \u042f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043e\u0442\u043c\u0435\u0442\u043a\u0435 80-90% \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u2014 \u044d\u0442\u043e\u0433\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0434\u043b\u044f \u0444\u0438\u0447\u0438.\u00a0<\/p>\n<p>\u041d\u043e \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0438\u0434\u0435\u044e. \u0411\u044b\u0441\u0442\u0440\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u044b\u0441\u044f\u0447 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u0432, \u0441\u0442\u0438\u0440\u0430\u043b\u043e\u043a, \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u043c\u0435\u0431\u0435\u043b\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0430 \u0444\u0438\u0447\u0443 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0411\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u00ab\u043a\u043e\u0440\u043e\u0431\u043e\u043a\u00bb \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u00ab\u043f\u0440\u0438\u043c\u0435\u0440\u0438\u0442\u044c\u00bb \u0442\u043e\u0432\u0430\u0440 \u0443 \u0441\u0435\u0431\u044f \u0434\u043e\u043c\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u0430\u043c.<\/p>\n<p>\u042f \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e USDA-\u0444\u0430\u0439\u043b\u0430. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043b \u0444\u0430\u0439\u043b-\u0448\u0430\u0431\u043b\u043e\u043d, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u0441\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432\u0435\u0440\u0448\u0438\u043d \u0441\u0442\u043e\u044f\u0442 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">#usda 1.0 (     customLayerData = {         string creator = \"Yandex.Market. All rights reserved 2021\"     }     defaultPrim = \"Box\"     upAxis = \"Y\"     metersPerUnit = 1 )  def Xform \"Box\" (     assetInfo = {         string name = \"Box\"     }     kind = \"component\" ) {     def Scope \"Geom\" {         def Xform \"Root\"         {             def Mesh \"Cube\"             {                 uniform bool doubleSided = 1                 int[] faceVertexCounts = [4, 4, 4, 4, 4, 4]                 int[] faceVertexIndices = [0, 1, 3, 2, 2, 3, 7, 6, 6, 7, 5, 4, 4, 5, 1, 0, 2, 6, 4, 0, 7, 3, 1, 5]                 point3f[] points = [(-width, 0, 0), (-width, 0, length), (-width, height, 0), (-width, height, length), (width, 0, 0), (width, 0, length), (width, height, 0), (width, height, length)]                 normal3f[] primvars:normals = [(-1, 0, 0), (0, 1, 0), (1, 0, 0), (0, 0, 0), (0, 0, -1), (0, 0, 1)] (                     interpolation = \"faceVarying\"                 )                 int[] primvars:normals:indices = [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5]                 uniform token subdivisionScheme = \"none\"                 rel material:binding = &lt;\/Box\/Materials\/BoxMaterial>             }              def Mesh \"Plane1\"             {                 uniform bool doubleSided = 0                 float3[] extent = [(-0.5, 0, 0), (0.5, 1, 0.0001)]                 int[] faceVertexCounts = [3, 3]                 int[] faceVertexIndices = [0, 1, 3, 0, 3, 2]                 rel material:binding = &lt;\/Box\/Materials\/LogoMaterial>                 normal3f[] normals = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1)]                 point3f[] points = [(-plane1Left, plane1Bot, plane1Depth), (plane1Right, plane1Bot, plane1Depth), (-plane1Left, plane1Top, plane1Depth), (plane1Right, plane1Top, plane1Depth)]                 texCoord2f[] primvars:st = [(0, 0), (1, 0), (0, 1), (1, 1)] (                     interpolation = \"vertex\"                 )                 uniform token subdivisionScheme = \"none\"             }              def Mesh \"Plane2\"             {                 uniform bool doubleSided = 0                 float3[] extent = [(-0.5, 0, 0), (0.5, 1, 0.0001)]                 int[] faceVertexCounts = [3, 3]                 int[] faceVertexIndices = [0, 1, 3, 0, 3, 2]                 rel material:binding = &lt;\/Box\/Materials\/MLetterMaterial>                 normal3f[] normals = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1)]                 point3f[] points = [(-plane2Left, plane2Bot, plane2Depth), (plane2Right, plane2Bot, plane2Depth), (-plane2Left, plane2Top, plane2Depth), (plane2Right, plane2Top, plane2Depth)]                 texCoord2f[] primvars:st = [(0, 0), (1, 0), (0, 1), (1, 1)] (                     interpolation = \"vertex\"                 )                 uniform token subdivisionScheme = \"none\"             }              def Mesh \"Plane3\"             {                 uniform bool doubleSided = 0                 float3[] extent = [(-0.5, 0, 0), (0.5, 1, 0)]                 int[] faceVertexCounts = [3, 3]                 int[] faceVertexIndices = [0, 1, 3, 0, 3, 2]                 rel material:binding = &lt;\/Box\/Materials\/MTailMaterial>                 normal3f[] normals = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1)]                 point3f[] points = [(plane3Width, plane3Bot, plane3DepthClose), (plane3Width, plane3Bot, plane3DepthFar), (plane3Width, plane3Top, plane3DepthClose), (plane3Width, plane3Top, plane3DepthFar)]                 texCoord2f[] primvars:st = [(0, 0), (tex3, 0), (0, 1), (tex3, 1)] (                     interpolation = \"vertex\"                 )                 uniform token subdivisionScheme = \"none\"             }              def Mesh \"Plane4\"             {                 uniform bool doubleSided = 0                 float3[] extent = [(-0.5, 0, 0), (0.5, 1, 0)]                 int[] faceVertexCounts = [3, 3]                 int[] faceVertexIndices = [0, 1, 3, 0, 3, 2]                 rel material:binding = &lt;\/Box\/Materials\/PromoMaterial>                 normal3f[] normals = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1)]                 point3f[] points = [(-plane4Left, plane4Bot, plane4Depth), (plane4Right, plane4Bot, plane4Depth), (-plane4Left, plane4Top, plane4Depth), (plane4Right, plane4Top, plane4Depth)]                 texCoord2f[] primvars:st = [(0, 0), (1, 0), (0, 1), (1, 1)] (                     interpolation = \"vertex\"                 )                 uniform token subdivisionScheme = \"none\"             }         }     }      def Scope \"Materials\"     {         def Material \"MTailMaterial\"         {             token outputs:surface.connect = &lt;\/Box\/Materials\/MTailMaterial\/surfaceShader.outputs:surface>              def Shader \"surfaceShader\"             {                 uniform token info:id = \"UsdPreviewSurface\"                 color3f inputs:diffuseColor.connect = &lt;\/Box\/Materials\/MTailMaterial\/diffuseColor_opacity_texture.outputs:rgb>                 color3f inputs:emissiveColor = (0, 0, 0)                 float inputs:metallic = 0                 normal3f inputs:normal = (0, 0, 1)                 float inputs:occlusion = 1                 float inputs:opacity.connect = &lt;\/Box\/Materials\/MTailMaterial\/diffuseColor_opacity_texture.outputs:a>                 float inputs:roughness = 0.5                 token outputs:surface                 float inputs:opacityThreshold = 0.5             }              def Shader \"st_texCoordReader\"             {                 uniform token info:id = \"UsdPrimvarReader_float2\"                 token inputs:varname = \"st\"                 float2 outputs:result             }              def Shader \"diffuseColor_opacity_texture\"             {                 uniform token info:id = \"UsdUVTexture\"                 asset inputs:file = @textures\/m_tail.png@                 float2 inputs:st.connect = &lt;\/Box\/Materials\/MTailMaterial\/st_texCoordReader.outputs:result>                 token inputs:wrapS = \"clamp\"                 token inputs:wrapT = \"clamp\"                 float3 outputs:rgb                 float outputs:a             }         }          def Material \"MLetterMaterial\"         {             token outputs:surface.connect = &lt;\/Box\/Materials\/MLetterMaterial\/surfaceShader.outputs:surface>              def Shader \"surfaceShader\"             {                 uniform token info:id = \"UsdPreviewSurface\"                 color3f inputs:diffuseColor.connect = &lt;\/Box\/Materials\/MLetterMaterial\/diffuseColor_opacity_texture.outputs:rgb>                 color3f inputs:emissiveColor = (0, 0, 0)                 float inputs:metallic = 0                 normal3f inputs:normal = (0, 0, 1)                 float inputs:occlusion = 1                 float inputs:opacity.connect = &lt;\/Box\/Materials\/MLetterMaterial\/diffuseColor_opacity_texture.outputs:a>                 float inputs:roughness = 1.0                 token outputs:surface                 float inputs:opacityThreshold = 0.5             }              def Shader \"st_texCoordReader\"             {                 uniform token info:id = \"UsdPrimvarReader_float2\"                 token inputs:varname = \"st\"                 float2 outputs:result             }              def Shader \"diffuseColor_opacity_texture\"             {                 uniform token info:id = \"UsdUVTexture\"                 asset inputs:file = @textures\/m_letter.png@                 float2 inputs:st.connect = &lt;\/Box\/Materials\/MLetterMaterial\/st_texCoordReader.outputs:result>                 token inputs:wrapS = \"clamp\"                 token inputs:wrapT = \"clamp\"                 float3 outputs:rgb                 float outputs:a             }         }          def Material \"LogoMaterial\"         {             token outputs:surface.connect = &lt;\/Box\/Materials\/LogoMaterial\/surfaceShader.outputs:surface>              def Shader \"surfaceShader\"             {                 uniform token info:id = \"UsdPreviewSurface\"                 color3f inputs:diffuseColor.connect = &lt;\/Box\/Materials\/LogoMaterial\/diffuseColor_opacity_texture.outputs:rgb>                 color3f inputs:emissiveColor = (0, 0, 0)                 float inputs:metallic = 0                 normal3f inputs:normal = (1, 1, 1)                 float inputs:opacity.connect = &lt;\/Box\/Materials\/LogoMaterial\/diffuseColor_opacity_texture.outputs:a>                 float inputs:roughness = 1.0                 token outputs:surface                 float inputs:opacityThreshold = 0.5             }              def Shader \"st_texCoordReader\"             {                 uniform token info:id = \"UsdPrimvarReader_float2\"                 token inputs:varname = \"st\"                 float2 outputs:result             }              def Shader \"diffuseColor_opacity_texture\"             {                 uniform token info:id = \"UsdUVTexture\"                 asset inputs:file = @textures\/plane1Name@                 float2 inputs:st.connect = &lt;\/Box\/Materials\/LogoMaterial\/st_texCoordReader.outputs:result>                 token inputs:wrapS = \"clamp\"                 token inputs:wrapT = \"clamp\"                 float3 outputs:rgb                 float outputs:a             }         }          def Material \"PromoMaterial\"         {             token outputs:surface.connect = &lt;\/Box\/Materials\/PromoMaterial\/surfaceShader.outputs:surface>              def Shader \"surfaceShader\"             {                 uniform token info:id = \"UsdPreviewSurface\"                 color3f inputs:diffuseColor.connect = &lt;\/Box\/Materials\/PromoMaterial\/diffuseColor_opacity_texture.outputs:rgb>                 color3f inputs:emissiveColor = (0, 0, 0)                 float inputs:metallic = 0                 normal3f inputs:normal = (0, 0, 1)                 float inputs:occlusion = 1                 float inputs:opacity.connect = &lt;\/Box\/Materials\/PromoMaterial\/diffuseColor_opacity_texture.outputs:a>                 float inputs:roughness = 1.0                 token outputs:surface                 float inputs:opacityThreshold = 0.5             }              def Shader \"st_texCoordReader\"             {                 uniform token info:id = \"UsdPrimvarReader_float2\"                 token inputs:varname = \"st\"                 float2 outputs:result             }              def Shader \"diffuseColor_opacity_texture\"             {                 uniform token info:id = \"UsdUVTexture\"                 asset inputs:file = @textures\/promo.png@                 float2 inputs:st.connect = &lt;\/Box\/Materials\/PromoMaterial\/st_texCoordReader.outputs:result>                 token inputs:wrapS = \"clamp\"                 token inputs:wrapT = \"clamp\"                 float3 outputs:rgb                 float outputs:a             }         }          def Material \"BoxMaterial\"         {             token outputs:surface.connect = &lt;\/Box\/Materials\/BoxMaterial\/pbr.outputs:surface>              def Shader \"pbr\"             {                 token info:id = \"UsdPreviewSurface\"                 color3f inputs:diffuseColor = (boxRed, boxGreen, boxBlue)                 color3f inputs:emissiveColor = (0.01, 0.01, 0.01)                 float inputs:metallic = 0.4                 normal3f inputs:normal = (1, 1, 1)                 float inputs:occlusion = 1                 float inputs:opacity = boxOpacity                 float inputs:roughness = 0.3                 token outputs:surface                 float inputs:opacityThreshold = 0.2             }         }     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0410 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b \u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043d\u0430 Python \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432\u0435\u0440\u0448\u0438\u043d;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u043c \u0432 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438 \u0438 \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0445 \u043d\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0438 \u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u0438\u0442\u043e\u0433\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa6\/c1a\/8c1\/fa6c1a8c19b1fed994c1f548c5de0ac4.png\" width=\"1573\" height=\"1600\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fa6\/c1a\/8c1\/fa6c1a8c19b1fed994c1f548c5de0ac4.png\"\/><\/figure>\n<p>\u0418\u043c\u0435\u044f \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u0430\u0431\u0430\u0440\u0438\u0442\u043d\u044b\u0445 \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u0437\u0430 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0424\u0438\u0447\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0442\u043e\u0432\u0430\u0440\u044b \u0441 3D-\u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 \u0438 \u00ab\u043f\u0440\u0438\u043c\u0435\u0440\u0438\u0442\u044c\u00bb \u0443 \u0441\u0435\u0431\u044f \u0434\u043e\u043c\u0430. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0435\u0442\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u043e\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6df\/0af\/01c\/6df0af01c60156e16d6f023e8ccced12.png\" width=\"848\" height=\"610\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6df\/0af\/01c\/6df0af01c60156e16d6f023e8ccced12.png\"\/><\/figure>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043c\u0435\u0441\u044f\u0446 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a, \u044f \u0443\u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0432 Blender \u0432\u0435\u0440\u0441\u0438\u0438 3.0.1 \u0432 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0438\u043c\u043f\u043e\u0440\u0442 USDZ. \u0418\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b beta \u0432\u0435\u0440\u0441\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u2014 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043e\u043d\u0438 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438! \u0422\u0430\u043a \u0447\u0442\u043e, \u043f\u043e \u0441\u0443\u0442\u0438, \u043c\u043e\u044f \u043d\u0435\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430 \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0447\u0443\u0442\u043e\u0447\u043a\u0443 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0435\u0439. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f Blender \u0443\u043c\u0435\u0435\u0442 \u0438 \u0432 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b.<\/p>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434. \u042d\u0442\u043e \u0431\u044b\u043b \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u2014 \u0442\u043e\u0442 \u0440\u0435\u0434\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0447\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u0447\u0430, \u0442\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0435\u0451 \u0440\u0435\u0448\u0430\u0442\u044c. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0442\u0430\u043a\u0438\u043c \u0432\u044b\u0432\u043e\u0434\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u0431\u043e\u0439\u0442\u0435\u0441\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0442\u0440\u0435\u0441\u0441-\u0442\u0435\u0441\u0442 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u043d\u0430\u0432\u044b\u043a\u0430\u043c \u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u0443\u0447\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0431\u044b \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u043a\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438 \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0443 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443, \u044f \u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u0433\u043e\u0440\u0435\u043b \u0438 \u0443\u0448\u0435\u043b \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0430\u0439\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u042f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Pixar, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043c\u043d\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438. \u0411\u0435\u0437 \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u044f \u0431\u044b \u043d\u0435 \u0441\u043c\u043e\u0433 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u0441\u0440\u043e\u043a.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/yandex\/articles\/743496\/\"> https:\/\/habr.com\/ru\/companies\/yandex\/articles\/743496\/<\/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<figure class=\"full-width\"><\/figure>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0428\u0438\u043a\u043e, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u042f\u043d\u0434\u0435\u043a\u0441 \u041c\u0430\u0440\u043a\u0435\u0442\u0435 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0432 2021 \u0433\u043e\u0434\u0443. \u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0434 \u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0438\u043d\u043a\u043e\u043c \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0447\u0430\u0442\u0435: \u00ab\u041a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c \u0441 3D?\u00bb \u0410 \u044f, \u043f\u043e\u043a\u0430 \u0443\u0447\u0438\u043b\u0441\u044f \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0435, \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f 3D-\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0431\u0431\u0438, \u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0432\u043e \u044d\u0442\u043e, \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0441\u0432\u043e\u044e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443\u0440\u0443.<\/p>\n<p>\u0421\u0443\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u044b\u043b\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 AR (\u0442\u043e \u0435\u0441\u0442\u044c, \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c). \u041e\u043d\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0432\u0430\u0440 \u0441 \u041c\u0430\u0440\u043a\u0435\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u00ab\u043f\u0440\u0438\u043c\u0435\u0440\u0438\u0442\u044c\u00bb \u0432 \u0438\u043d\u0442\u0435\u0440\u044c\u0435\u0440. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043a\u0443\u043f\u0438\u0442\u044c \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440, \u043d\u043e \u0432\u0430\u043c \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043c\u0435\u0431\u0435\u043b\u044c\u044e \u0438 \u0432\u043b\u0435\u0437\u0435\u0442 \u043b\u0438 \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 \u0438\u043c\u0435\u044e\u0449\u0435\u0435\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.\u00a0<\/p>\n<p>\u041d\u0430 iOS \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0430 \u043d\u0430 Android \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0434\u0432\u043e\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f: \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u2014 \u0432\u0441\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c ARCore \u0438 \u0434\u0435\u043b\u043e\u0432. \u041d\u043e \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0435\u043a \u0431\u044b\u043b\u043e \u0432 USDZ-\u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0430 ArCore \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 \u043d\u0438\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0422\u043e \u0435\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 iOS \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u2014 GLB. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0441\u043a\u0430\u0447\u0430\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0438 \u043d\u0430\u0436\u043c\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00bb. \u041d\u0435 \u0442\u0443\u0442-\u0442\u043e \u0431\u044b\u043b\u043e.\u00a0<\/p>\n<p>\u0418 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u0438 \u0441 \u0447\u0435\u043c \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f Blender \u0438 Unreal Engine. \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0435\u0433\u043e \u043a\u043e\u0434.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u044b \u0438 \u043e\u0448\u0438\u0431\u043a\u0438<\/h2>\n<h3>\u041f\u043e\u0438\u0441\u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u043a\u0443, \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0451 \u043c\u0430\u043b\u043e\u0439 \u043a\u0440\u043e\u0432\u044c\u044e. \u0414\u0432\u0438\u0433\u0430\u043b\u0441\u044f \u044f \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443:<\/p>\n<ul>\n<li>\n<p>\u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>Blender;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0440\u0443\u0433\u0438\u0435 3D-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>Unreal Engine.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043d\u043b\u0430\u0439\u043d-\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u0430\u0431\u044b\u043c\u0438: \u043e\u043d\u0438 \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 5\u201410 \u043c\u0438\u043d\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>\u0414\u043b\u044f Blender \u0443\u0436\u0435 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d <a href=\"https:\/\/github.com\/robmcrosby\/BlenderUSDZ\"><u>\u043f\u043b\u0430\u0433\u0438\u043d<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c USDZ. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438 \u043f\u0430\u0434\u0430\u043b \u0438\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435. \u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0432 \u0447\u0451\u043c \u0436\u0435 \u0434\u0435\u043b\u043e. \u041d\u043e \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u044f \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u043b \u044d\u0442\u0443 \u0438\u0434\u0435\u044e.<\/p>\n<p>\u041f\u043e\u0438\u0441\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 3D-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438 \u0431\u044b \u0444\u043e\u0440\u043c\u0430\u0442 USDZ, \u043d\u0435 \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u0438\u0441\u044c \u0443\u0441\u043f\u0435\u0445\u043e\u043c. \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 3Ds Max \u0438 Maya \u043d\u0430\u0448\u0451\u043b \u0438\u043d\u0444\u0443, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0430\u043b\u044c\u0444\u0435 \u0438\u043b\u0438 \u0431\u0435\u0442\u0435, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u043e. \u0414\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u043f\u043e\u043c\u043d\u044e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0451\u043c \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043d\u0430 Linux, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u0442\u043e\u0436\u0435 \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<h3>Unreal Engine<\/h3>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c Unreal Engine. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442 USDZ (\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0432 \u0431\u0435\u0442\u0430-\u0432\u0435\u0440\u0441\u0438\u0438), \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0432\u0430\u044f \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0432\u044b\u0448\u043b\u0430 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443:<\/p>\n<ol>\n<li>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442 \u0444\u0430\u0439\u043b\u0430 USDZ \u0432 UnrealEngine.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><\/figure>\n<ol start=\"2\">\n<li>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 .obj \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><\/figure>\n<ol start=\"3\">\n<li>\n<p>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0442\u044b\u043a\u0430 \u0432 Blender.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><\/figure>\n<p>\u0427\u0435\u043c \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b: Unreal Engine \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u044f\u0436\u0451\u043b\u044b\u0439, \u043e\u043d \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0438 \u0432 \u043d\u0451\u043c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0430\u0445 \u043e\u043d \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0438\u043b\u0438 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c.<\/p>\n<figure class=\"full-width\"><\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0437\u0430\u0434\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0413\u0435\u0440\u0430\u043b\u044c\u0442<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u0417\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0442\u0440\u0438\u0446\u0435\u0440\u0430\u0442\u043e\u043f\u0441<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0433 \u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438 \u0438\u0437 USDZ \u0432 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<h3>\u0421\u043d\u043e\u0432\u0430 Blender<\/h3>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u043e\u043a\u043e\u043f\u0430\u0442\u044c \u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u043a Blender. \u042f \u043d\u0430\u0448\u0451\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u0442\u044c \u0432\u0441\u0435 \u043a\u0440\u0430\u0448\u0438 (\u0438\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435), \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0430\u0445 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e?<\/p>\n<figure class=\"full-width\">\n<div><figcaption><span class=\"habrahidden\">\u042d\u0442\u043e XBox One<\/span><\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption><span class=\"habrahidden\">\u0410 \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0432\u0438\u0437\u0438\u044f PlayStation 5<\/span><\/figcaption><\/div>\n<\/figure>\n<p>\u042f \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u0447\u0451\u0441\u044b\u0432\u0430\u0442\u044c GitHub \u0438 \u0432\u044b\u0448\u0435\u043b \u043d\u0430 <a href=\"https:\/\/github.com\/PixarAnimationStudios\/USD\"><u>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Pixar<\/u><\/a> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 USDZ. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0445.\u00a0<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043c\u043d\u0435 \u0443\u043b\u044b\u0431\u043d\u0443\u043b\u0430\u0441\u044c \u0443\u0434\u0430\u0447\u0430. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0441\u0440\u0435\u0434\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043c\u0435\u043d\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b USDView. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443 \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u043d\u0435\u0439.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043a Blender. \u0421\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u0432\u0435\u0447\u0435\u0440\u043e\u0432, \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0432 USDView, \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u043e\u043c \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u0435 \u0438 Blender, \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u041d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u043c\u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0435 (\u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043f\u043e\u0447\u0442\u0438 4 \u0434\u043d\u044f \u043d\u0430 \u044d\u0442\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438!) \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043c\u0430\u0442\u0440\u0438\u0446 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u043a\u043e\u0440\u0451\u0436\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c.\u00a0<\/p>\n<p>\u0420\u0443\u043a\u0430\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438 \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u0436\u0430\u0442\u044b\u0435 \u0441\u0440\u043e\u043a\u0438. \u0424\u0438\u043a\u0441 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043d\u043e\u044e \u0431\u044b\u043b \u043e\u0446\u0435\u043d\u0435\u043d \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u00ab\u0432\u0440\u043e\u0434\u0435 \u0438\u0437\u044f\u043d\u00bb \u043f\u043e <abbr class=\"habraabbr\" title=\"\" data-title=\"&lt;p>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f4\/735\/52e\/8f473552e551284f51d6b9eea187f1a0.png&#187; data-abbr=&#187;\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u0446\u0435\u043d\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438&#187; data-image-width=&#187;642&#8243; data-image-height=&#187;624&#8243;>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438<\/abbr>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u044d\u0442\u0443 \u0438\u0434\u0435\u044e.<\/p>\n<p>\u042f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0422\u043e\u0433\u0434\u0430 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0448\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440, \u0438\u0437\u0443\u0447\u0438\u0432 \u043a\u0438\u0448\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u043e \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u043e\u0436\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u00ab\u0432\u0440\u043e\u0434\u0435 \u0438\u0437\u044f\u043d\u00bb. \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u044f \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0434\u0435\u0438, \u043a\u0430\u043a \u044f \u043d\u0430\u0445\u043e\u0436\u0443 \u0432 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0441\u043e\u0444\u0442\u0438\u043d\u0443 Usdcat.<\/p>\n<p>\u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, Pixar \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>USDC \u2014 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u044e \u0438\u043d\u0444\u0443 \u043f\u043e \u0441\u0435\u0442\u043a\u0435 \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u0431\u0435\u0437 \u0442\u0435\u043a\u0441\u0442\u0443\u0440.<\/p>\n<\/li>\n<li>\n<p>USDA \u2014 \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 USDC, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>USD \u2014 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0442\u0430\u043a \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c.<\/p>\n<\/li>\n<li>\n<p>USDZ \u2014 \u043f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e zip-\u0430\u0440\u0445\u0438\u0432, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c USDC \u0438\u043b\u0438 USDA \u0444\u0430\u0439\u043b \u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u0432\u043e\u0442, Usdcat \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438.\u00a0<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u044f \u0441\u043e\u0431\u0440\u0430\u043b Blender \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043a\u0430\u043a \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f Python, \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430.<\/p>\n<h2>\u041a\u0430\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440<\/h2>\n<blockquote>\n<p><strong>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/strong> \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0451\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043a\u043e\u0434 \u043e\u0442 \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u043d\u0430 Python. \u0423\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0442 \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u044f \u0440\u0430\u0437\u0431\u0438\u043b \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430\u043f\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 USDZ-\u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f USDC \u0432 USDA.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 USDA, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0432 \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0451 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f Blender \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u0441 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 *.blend \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u0432 GLB.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u2014 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f Blender.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\"># \u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 def try_to_convert(input_file, blend_file, output_file, debug_file=None):     # \u0418\u0449\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 usdcat \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438     usd_cat = find_exe('usdcat')     # \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u0432 blender     create_empty_scene()     # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c usdcat, \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442     file_data = read_file(usd_cat, input_file)     # \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432 Blender     extracted_path = extract_file(input_file)     # \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u0442\u0430\u043a     save_data(file_data, debug_file)     # \u041f\u0430\u0440\u0441\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430     parsed_data = parse_data(file_data) # \u041d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0432\u043e\u0442 \u044d\u0442\u043e     # \u041f\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0448\u0435\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443     import_scene_data(parsed_data, extracted_path) # \u0438 \u044d\u0442\u043e     # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0448\u0438\u0431\u043e\u043a     save_scene(blend_file)     # \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432 glb     export_scene(output_file)     # \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b     clean(extracted_path)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430. \u0412 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 USDC\/USDZ\/USDA \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#usda 1.0 (     customLayerData = {         string creator = \"usdzconvert preview 0.62\"     }     defaultPrim = \"modul_01\"     metersPerUnit = 1     upAxis = \"Y\" )  def Xform \"modul_01\" (     assetInfo = {         string name = \"modul_01\"     }     kind = \"component\" ) def Scope \"Materials\"     {         def Material \"DVP_komod_2_Letta_Malta_modul_01\"         {             token outputs:surface.connect = &lt;\/modul_01\/Materials\/DVP_komod_2_Letta_Malta_modul_01\/surfaceShader.outputs:surface>              def Shader \"surfaceShader\"             {                 uniform token info:id = \"UsdPreviewSurface\"                 color3f inputs:diffuseColor.connect = &lt;\/modul_01\/Materials\/DVP_komod_2_Letta_Malta_modul_01\/diffuseColor_texture.outputs:rgb>                 float inputs:roughness = 1                 token outputs:surface             }             ...     }     ... def Scope \"Geom\"     {         def Mesh \"DVP_komod_2_Letta_Malta_modul_01\"         {             uniform bool doubleSided = 1             int[] faceVertexCounts = [3, 3,...]             rel material:binding = &lt;\/modul_01\/Materials\/DVP_komod_2_Letta_Malta_modul_01>             point3f[] points = [(-0.34295827, 0.2727909, -0.1854379), (0.3439359, 0.27179047, -0.1864381), ...]             normal3f[] primvars:normals = [(2.7196302e-7, 2.3841858e-7, 1), (1, -0.0000013478456, -1.2789769e-13), ...]             texCoord2f[] primvars:st = [(0.6426813, 0.66292274), (0.8511379, 0.32041615), ...]             uniform token subdivisionScheme = \"none\"             quatf xformOp:orient = (1, 0, 0, 0)             float3 xformOp:scale = (1, 1, 1)             double3 xformOp:translate = (0, 0, 0)             uniform token[] xformOpOrder = [\"xformOp:translate\", \"xformOp:orient\", \"xformOp:scale\"]         }         ...     }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u0447\u0442\u043e \u044f \u043e\u0431\u0440\u0430\u0442\u0438\u043b \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u0438:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u0446\u0435\u043d\u044b (\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b, \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u043e\u0441\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435).<\/p>\n<\/li>\n<li>\n<p>Xform \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 xform, \u0438\u043d\u0444\u0443 \u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>Scope \u2014 \u043f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 xform, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0438\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b).<\/p>\n<\/li>\n<li>\n<p>Mesh \u2014 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 (\u0432\u0441\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u0433\u0440\u0430\u043d\u0438, \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435), \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>Material \u2014 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e <\/p>\n<\/li>\n<\/ul>\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-349463","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349463","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=349463"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349463\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=349463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=349463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=349463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}