{"id":484248,"date":"2026-06-19T09:41:39","date_gmt":"2026-06-19T09:41:39","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=484248"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=484248","title":{"rendered":"\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u043f\u044b \u043f\u043e-\u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443: \u043e\u0442 \u0441\u0442\u0430\u0439 \u0441\u043a\u0432\u043e\u0440\u0446\u043e\u0432 \u0434\u043e \u0442\u044b\u0441\u044f\u0447\u0438 \u044e\u043d\u0438\u0442\u043e\u0432 \u0432 \u043a\u0430\u0434\u0440\u0435"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u0440\u0438\u0448\u0430 \u0414\u044f\u0434\u0438\u0447\u0435\u043d\u043a\u043e, \u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c White Label Games. \u0423\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, AR\/VR \u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u043c \u0437\u0440\u0435\u043d\u0438\u0435\u043c \u2014 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044d\u0442\u043e \u0437\u0430\u043a\u0430\u0437\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430, \u043f\u043b\u044e\u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b \u043f\u043e \u0432\u0435\u0447\u0435\u0440\u0430\u043c, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0443\u043a\u0438.<\/p>\n<p>\u0421\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0432\u044b \u0441 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0432 \u0438\u0433\u0440\u0435 \u0443\u0436\u0435 \u0434\u0432\u0435\u0441\u0442\u0438 \u044e\u043d\u0438\u0442\u043e\u0432, \u0430 FPS \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0443\u0435\u0445\u0430\u043b, \u0445\u043e\u0442\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u0441\u0446\u0435\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0435\u0442? \u0418\u043b\u0438 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u043e\u0440\u0434\u0443 \u2014 \u043f\u043b\u043e\u0442\u043d\u0443\u044e, \u0441 \u0440\u0435\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u0443, \u043e\u0431\u0442\u0435\u043a\u0430\u044e\u0449\u0443\u044e \u0443\u043a\u0440\u044b\u0442\u0438\u044f \u2014 \u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0439\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043b\u0438\u0431\u043e \u0440\u0430\u0437\u0431\u0435\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u044b\u043b\u044c, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u043f\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0448\u0430\u0440\u0438\u043a \u0438 \u0435\u0434\u0435\u0442 \u0438\u043c \u043f\u043e \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u0435?<\/p>\n<p>\u0427\u0442\u043e\u0436, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u041a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0441\u043a\u0432\u043e\u0440\u0446\u043e\u0432 \u043d\u0430\u0434 \u0420\u0438\u043c\u043e\u043c \u0438 \u043f\u0440\u0438\u0447\u0451\u043c \u0442\u0443\u0442 \u043a\u043e\u0434, \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430 \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u0435\u0441\u0430\u043c\u0438, \u043a\u0430\u043a \u0441\u0435\u0442\u043a\u0430 \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u0435\u0442 O(N\u00b2) \u0438 \u0433\u0434\u0435 \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 ORCA \u0438 \u043a\u0430\u043a \u043e\u043d\u0430 \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435, \u043a\u0430\u043a steering behaviors \u0434\u0430\u044e\u0442 \u0430\u0433\u0435\u043d\u0442\u0443 \u0446\u0435\u043b\u044c \u0438 \u043e\u0431\u0445\u043e\u0434 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439, \u0438 \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0448\u0438\u043f\u043d\u0443\u0442\u044b\u0445 \u0438\u0433\u0440 \u043e\u0442 AC Unity \u0434\u043e World War Z.<\/p>\n<h3>\u0411\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u0445\u043e\u0434: \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c \u00abAI \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044e\u043d\u0438\u0442\u0430\u00bb<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043b\u0435\u0437\u0442\u044c \u0432 \u043a\u043e\u0434, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432 \u043f\u0440\u0438\u0440\u043e\u0434\u0435. \u0415\u0441\u043b\u0438 \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a \u0441\u043b\u043e\u0432\u043e\u00a0<em>murmuration<\/em>, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0433\u0438\u0444\u043a\u0438 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0445 \u0441\u0442\u0430\u0439 \u0441\u043a\u0432\u043e\u0440\u0446\u043e\u0432\u00a0<em>(Sturnus vulgaris)<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u0435\u043d\u044c\u044e \u043d\u0430\u0434 \u043a\u0440\u044b\u0448\u0430\u043c\u0438 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u2014 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0430\u0434 \u0420\u0438\u043c\u043e\u043c \u2014 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0436\u0438\u0434\u043a\u0438\u0435 \u043e\u0431\u043b\u0430\u043a\u0430 \u0438\u0437 \u0442\u044b\u0441\u044f\u0447 \u043f\u0442\u0438\u0446. \u0421\u0442\u0430\u044f \u0438\u0437\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f, \u0434\u0435\u043b\u0438\u0442\u0441\u044f, \u0441\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0441\u043e\u043a\u043e\u043b\u0430 \u0437\u0430 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041d\u0430 \u0432\u0438\u0434\u0435\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0443 \u0432\u0441\u0435\u0439 \u0441\u0442\u0430\u0438 \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u043c\u043e\u0437\u0433.<\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0440\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0430 \u043d\u0435\u0442 \u043b\u0438 \u0442\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430? \u041c\u043e\u0436\u0435\u0442, \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439 \u0441\u043a\u0432\u043e\u0440\u0435\u0446 \u0447\u0442\u043e-\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0443\u0435\u0442? \u041c\u043e\u0436\u0435\u0442, \u0435\u0441\u0442\u044c \u0432\u043e\u0436\u0430\u043a? \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u0430\u0435 \u043d\u0435\u0442. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0437\u044f\u0442\u0430\u044f \u043f\u0442\u0438\u0446\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u0430\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u043a\u0430\u0437\u043e\u0432 \u0441\u0432\u0435\u0440\u0445\u0443. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0442\u0430 \u0441\u0430\u043c\u0430\u044f\u00a0<strong>\u044d\u043c\u0435\u0440\u0434\u0436\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/strong>: \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435 \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u043c\u043e\u0437\u0433\u0430, \u0430 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/294\/a7d\/14f\/294a7d14fff0cdde3bbb819b84ef4286.png\" width=\"1376\" height=\"768\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/294\/a7d\/14f\/294a7d14fff0cdde3bbb819b84ef4286.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/294\/a7d\/14f\/294a7d14fff0cdde3bbb819b84ef4286.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u00a01987 \u0433\u043e\u0434\u0443 \u043d\u0430 SIGGRAPH \u0432\u044b\u0448\u043b\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u041a\u0440\u0435\u0439\u0433\u0430 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430 (Craig W. Reynolds) \u2014\u00a0<em>\u00abFlocks, herds and schools: A distributed behavioral model\u00bb<\/em>\u00a0(Computer Graphics 21(4):25\u201334). \u042d\u0442\u043e \u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430, \u0433\u0434\u0435 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043b\u0438\u00a0<strong>boids<\/strong>\u00a0\u2014\u00a0<em>\u00abbird-oid objects\u00bb<\/em>, \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0442\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0441\u0442\u0430\u044f. \u0422\u0435\u0440\u043c\u0438\u043d \u00abboids\u00bb \u0430\u0432\u0442\u043e\u0440 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0441\u0430\u043c \u043a\u0430\u043a \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u00abbird-oid\u00bb, \u0438 \u043e\u043d \u043f\u0440\u0438\u0436\u0438\u043b\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e \u0432\u044b \u0435\u0433\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0435 \u0432 \u043b\u044e\u0431\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043f\u043e \u0442\u043e\u043b\u043f\u0435.<\/p>\n<p>\u0418\u0434\u0435\u044f: \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0433\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043a \u043d\u0438\u043c \u0442\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u043c\u043e\u0437\u0433\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043f\u0442\u0438\u0446\u0430\u043c\u0438. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0430\u00a0<em>\u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430<\/em>. \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0442\u0430\u043a \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0442\u0438\u0446, \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0441\u0442\u0430\u044e. \u0410 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438 \u0442\u0430\u043a \u043b\u0435\u0442\u0430\u044e\u0442 \u0436\u0438\u0432\u044b\u0435 \u0441\u043a\u0432\u043e\u0440\u0446\u044b \u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0435\u0449\u0451 \u043b\u0435\u0442 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c.<\/p>\n<p>\u041e\u0442\u0432\u0435\u0442 \u0434\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044f 2008 \u0433\u043e\u0434\u0430 \u2014\u00a0<em>Ballerini et al., \u00abInteraction ruling animal collective behavior depends on topological rather than metric distance\u00bb<\/em>\u00a0(PNAS 105(4):1232\u20131237). \u0418\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0438\u0435 \u0444\u0438\u0437\u0438\u043a\u0438 \u0438 \u0431\u0438\u043e\u043b\u043e\u0433\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430\u0434 \u0440\u0438\u043c\u0441\u043a\u0438\u043c\u0438 \u043a\u0440\u044b\u0448\u0430\u043c\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0435\u0440\u0435\u043e\u043a\u0430\u043c\u0435\u0440, \u0441\u043d\u044f\u043b\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0430\u0438 \u0432 \u043f\u043e\u043b\u0451\u0442\u0435 \u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 3D-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0442\u0438\u0446\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435. \u0418 \u0437\u0430\u0434\u0430\u043b\u0438 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0441\u043e\u0441\u0435\u0434\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043f\u0442\u0438\u0446\u0430, \u2014 \u044d\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438\u00a0<strong>\u043f\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e<\/strong>\u00a0(\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435) \u0438\u043b\u0438\u00a0<strong>\u043f\u043e \u0447\u0438\u0441\u043b\u0443<\/strong>\u00a0(\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435)? \u0422\u043e \u0435\u0441\u0442\u044c \u00ab\u0432\u0441\u0435, \u043a\u0442\u043e \u0431\u043b\u0438\u0436\u0435 \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u0440\u043e\u0432\u00bb \u0438\u043b\u0438 \u00ab\u0441\u0435\u043c\u044c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445, \u043d\u0435\u0432\u0430\u0436\u043d\u043e \u043a\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e\u00bb?<\/p>\n<p>\u041e\u0442\u0432\u0435\u0442: \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u0442\u0438\u0446\u0430 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430\u00a0<strong>6\u20137 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439<\/strong>, \u0438 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u0438. \u0421\u0442\u0430\u044f \u0441\u0436\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0434 \u0430\u0442\u0430\u043a\u043e\u0439 \u0441\u043e\u043a\u043e\u043b\u0430 \u2014 \u0441\u043e\u0441\u0435\u0434\u0438 \u0441\u0442\u0430\u043b\u0438 \u0431\u043b\u0438\u0436\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438, \u043d\u043e \u0438\u0445 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u0435\u043c\u044c. \u0421\u0442\u0430\u044f \u0440\u0430\u0437\u043e\u0448\u043b\u0430\u0441\u044c \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u2014 \u0441\u043e\u0441\u0435\u0434\u0438 \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u0435\u043c\u044c.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0441. \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441 \u0432 1987-\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u00a0<strong>\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439<\/strong>\u00a0\u0440\u0430\u0434\u0438\u0443\u0441 \u2014 \u00ab\u0432\u0441\u0435, \u043a\u0442\u043e \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 R\u00bb. \u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u043e \u0443 \u0436\u0438\u0432\u044b\u0445 \u0441\u043a\u0432\u043e\u0440\u0446\u043e\u0432 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c, \u0438 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u043b\u0443\u0447\u0448\u0435: \u043e\u043d\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e \u043a \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u044e \u0446\u0435\u043b\u043e\u0439 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0441\u0438\u043b\u044c\u043d\u043e\u043c \u0441\u0436\u0430\u0442\u0438\u0438 \u2014 \u0440\u043e\u0432\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u0438\u0433\u0440\u0430\u0445 \u0438 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f\u0445 \u043f\u043e \u0441\u0435\u0439 \u0434\u0435\u043d\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014\u00a0<strong>\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435<\/strong>. \u042d\u0442\u043e \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435: \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u043e spatial hash. \u0425\u043e\u0442\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u2014 \u0431\u0435\u0440\u0451\u0442\u0435 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 (k \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439). \u0425\u043e\u0442\u0438\u0442\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u2014 \u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0435\u0441\u0442\u044c, \u043d\u043e \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430\u044f.<\/p>\n<p>\u0423 \u0440\u044b\u0431 \u0432 \u043a\u043e\u0441\u044f\u043a\u0435 \u0438 \u0443 \u0441\u0430\u0440\u0430\u043d\u0447\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u043d\u043e\u00a0<strong>\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0443 \u043d\u0438\u0445 \u0434\u0440\u0443\u0433\u043e\u0439<\/strong>: \u0443 \u0440\u044b\u0431 \u043f\u043e\u043c\u0438\u043c\u043e \u0437\u0440\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u0431\u043e\u043a\u043e\u0432\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u2014 \u043e\u0440\u0433\u0430\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u043e\u0432\u0438\u0442 \u0433\u0438\u0434\u0440\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0432 \u0432\u043e\u0434\u0435 (\u044d\u0442\u0438\u043c, \u043a\u0441\u0442\u0430\u0442\u0438, \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f Iain Couzin \u0432 \u041f\u0440\u0438\u043d\u0441\u0442\u043e\u043d\u0435). \u0410 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u043e\u043b\u043f\u0430 \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u043e\u0439, \u043b\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u043c \u0438 \u0442\u044b\u0441\u044f\u0447\u0435\u0439 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0449\u0435\u0439. \u0422\u0430\u043a \u0447\u0442\u043e boids \u2014 \u044d\u0442\u043e \u043f\u0440\u043e \u043f\u0442\u0438\u0446 \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u044e\u043d\u0438\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0438\u0437\u0438\u043a\u0430 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u043b\u043f\u044b.<\/p>\n<h3>\u0422\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430: separation, alignment, cohesion<\/h3>\n<p>\u041f\u0430\u0440\u0430\u0434\u043e\u043a\u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0441\u0442\u0430\u0438 \u044f \u0443\u0436\u0435 \u043f\u0440\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b: \u0432\u0441\u0435 \u043b\u0435\u0442\u044f\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e, \u043d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u043a\u0435\u043c \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442. \u041e\u0442\u043a\u0443\u0434\u0430 \u0442\u043e\u0433\u0434\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c? \u041e\u0442\u0432\u0435\u0442 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430: \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0433\u0435\u043d\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0442\u0440\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0443 \u043d\u0430 \u0445\u0432\u043e\u0441\u0442. \u041b\u0435\u0442\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0442\u0443 \u0436\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0447\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438. \u041d\u0435 \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u0442\u044c \u043e\u0442 \u0433\u0440\u0443\u043f\u043f\u044b. \u042d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0430\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443, \u0438\u00a0<strong>\u0431\u0430\u043b\u0430\u043d\u0441\u043e\u043c \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0439<\/strong>\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043a\u0430\u043a \u0441\u0442\u0430\u044e.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u2014 \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0430 \u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0430\u0433\u0435\u043d\u0442\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0451 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u0435\u0441\u0430\u043c\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0441\u0438\u043b\u0443.<\/p>\n<p><strong>Separation \u2014 \u00ab\u043d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0439 \u043d\u0430 \u043d\u043e\u0433\u0438\u00bb.<\/strong>\u00a0\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043b\u0438\u0437\u043a\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0442 \u043d\u0435\u0433\u043e \u043a \u043d\u0430\u043c. \u0427\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0441\u043e\u0441\u0435\u0434 \u2014 \u0442\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u0435\u0435. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e\u00a0<code>(self.pos - j.pos) \/ dist\u00b2<\/code>, \u0438\u043b\u0438, \u0447\u0442\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435,\u00a0<code>normalize(self.pos - j.pos) \/ dist<\/code>.<\/p>\n<p><strong>Alignment \u2014 \u00ab\u0441\u043c\u043e\u0442\u0440\u0438, \u043a\u0443\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u044f\u0442 \u0441\u043e\u0441\u0435\u0434\u0438\u00bb.<\/strong>\u00a0\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c \u0441\u0432\u043e\u044e \u043a \u043d\u0435\u0439:\u00a0<code>avg.vel - self.vel<\/code>. \u0411\u0435\u0437 alignment \u0441\u0442\u0430\u044f \u043b\u0435\u0442\u0438\u0442, \u043d\u043e \u043d\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043b\u0430\u043a\u0430 \u0442\u043e\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u0435\u0432\u0435\u043b\u044f\u0442\u0441\u044f. \u0421 \u043d\u0438\u043c \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0438\u0439\u00a0<em>heading<\/em>\u00a0\u0438 \u0447\u0451\u0442\u043a\u043e\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u00ab\u043a\u0443\u0434\u0430 \u043b\u0435\u0442\u0438\u043c\u00bb.<\/p>\n<p><strong>Cohesion \u2014 \u00ab\u043d\u0435 \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u0439\u00bb.<\/strong>\u00a0\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0446\u0435\u043d\u0442\u0440 \u043c\u0430\u0441\u0441 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0442\u044f\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0435\u043c\u0443:\u00a0<code>avg.pos - self.pos<\/code>. \u0411\u0435\u0437 cohesion \u0441\u0442\u0430\u044f \u043d\u0435 \u0441\u0446\u0435\u043f\u043b\u0435\u043d\u0430 \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u044b \u0438 \u043e\u0434\u0438\u043d\u043e\u0447\u0435\u043a.<\/p>\n<p>\u0412\u0441\u0435 \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u0441\u043e\u0441\u0435\u0434\u044f\u043c.\u00a0<\/p>\n<pre><code class=\"cs\">Vector3 sep = Vector3.zero, ali = Vector3.zero, coh = Vector3.zero;int count = 0;foreach (var other in neighbors) {    Vector3 d = transform.position - other.position;    float dist = d.magnitude;    if (dist &gt; 0f &amp;&amp; dist &lt; sepRadius)        sep += d.normalized \/ dist;   \/\/ \u0431\u043b\u0438\u0436\u0435 \u2192 \u0441\u0438\u043b\u044c\u043d\u0435\u0435    ali += other.velocity;    coh += other.position;    count++;}if (count &gt; 0) {    ali = (ali \/ count) - velocity;    coh = (coh \/ count) - transform.position;}velocity += wSep * sep + wAli * ali + wCoh * coh;velocity = Vector3.ClampMagnitude(velocity, maxSpeed);transform.position += velocity * Time.deltaTime;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441\u2014 \u044d\u0442\u043e\u00a0<code>d.normalized \/ dist<\/code>. \u041f\u043e \u0444\u043e\u0440\u043c\u0435 \u044d\u0442\u043e\u00a0<strong>\u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435<\/strong>, \u0447\u0442\u043e\u00a0<code>d \/ dist\u00b2<\/code>, \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u041f\u0435\u0440\u0432\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043d\u0430 \u044f\u0441\u043d\u0435\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043c\u044b\u0441\u043b: \u00ab\u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u0430, \u043f\u043e\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00bb.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0432\u0435\u0441\u0430 \u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445:<\/p>\n<ul>\n<li>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e separation.<\/strong>\u00a0\u0422\u043e\u043b\u043f\u0430 \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0442\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u0435\u0442 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u2014 \u0440\u0430\u0437\u043b\u0435\u0442\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043f\u044b\u043b\u044c. \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430: \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u0436\u0438\u0432\u043e\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e alignment.<\/strong>\u00a0\u0422\u043e\u043b\u043f\u0430 \u0438\u0434\u0451\u0442 \u0441\u0442\u0440\u043e\u0439\u043d\u043e, \u043d\u043e\u00a0<strong>\u043d\u0435 \u0441\u0446\u0435\u043f\u043b\u0435\u043d\u0430<\/strong>. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u044b, \u043d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043e\u0442\u0441\u0442\u0430\u0432\u0448\u0438\u0445. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0430\u0440\u0430\u0434, \u0430 \u043d\u0435 \u043d\u0430 \u0441\u0442\u0430\u044e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e cohesion.<\/strong>\u00a0\u0422\u043e\u043b\u043f\u0430 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u0447\u043a\u0443. \u0412\u0441\u0435 \u043f\u0440\u0438\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u0446\u0435\u043d\u0442\u0440\u0443, \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u043d\u0430 \u043d\u043e\u0433\u0438 (separation-\u0442\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d), \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u043f\u0443\u043b\u044c\u0441\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0440\u0438\u043a.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0441\u0435 \u0442\u0440\u0438 \u0432 \u0431\u0430\u043b\u0430\u043d\u0441\u0435.<\/strong>\u00a0\u0416\u0438\u0432\u0430\u044f \u0441\u0442\u0430\u044f. \u0422\u0430 \u0441\u0430\u043c\u0430\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0445\u043e\u0442\u0438\u043c.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/445\/284\/922\/445284922c75c3a527aae00db3f6bce3.png\" width=\"1024\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/445\/284\/922\/445284922c75c3a527aae00db3f6bce3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/445\/284\/922\/445284922c75c3a527aae00db3f6bce3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043f\u043e \u0432\u0435\u0441\u0430\u043c \u2014 \u0440\u0430\u0432\u043d\u044b\u0435\u00a0<code>wSep = wAli = wCoh = 1.0<\/code>, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0447\u0442\u043e \u0432\u0441\u0435 \u0442\u0440\u0438 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0436\u0438\u0432\u0443\u0442 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u0435. \u0414\u0430\u043b\u044c\u0448\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0435 \u043f\u043e\u0434 \u0441\u0432\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p>\u0413\u0434\u0435 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0433\u0440\u0430\u0445? \u041a\u043e\u0441\u044f\u043a\u0438 \u0440\u044b\u0431 \u0432 Subnautica \u2014 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0447\u0442\u0438 \u0447\u0438\u0441\u0442\u044b\u0445 boids: \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u0441\u0442\u0430\u044f \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f-\u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438 \u0448\u0430\u0440\u0430\u0445\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0438\u0433\u0440\u043e\u043a\u0430. \u041f\u0442\u0438\u0446\u044b \u0438 \u043f\u0440\u043e\u0447\u0430\u044f ambient-\u0444\u0430\u0443\u043d\u0430 \u0432 Far Cry \u0438 RDR2 \u2014 boids \u043f\u043e\u0432\u0435\u0440\u0445 spline-\u043f\u0430\u0442\u0440\u0443\u043b\u0435\u0439. \u041e\u0442\u0440\u044f\u0434\u044b \u0432 Total War \u2014 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 boids \u043f\u043e\u0432\u0435\u0440\u0445 \u0441\u0442\u0440\u043e\u0435\u0432\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u044b\u0445 boids \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u0442\u0430\u043c \u043d\u0435\u0442: \u043f\u043e\u0432\u0435\u0440\u0445 \u043b\u0435\u0436\u0430\u0442 flow fields \u0434\u043b\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, FSM \u0434\u043b\u044f \u0441\u043c\u0435\u043d\u044b \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u043b\u0432\u0435\u0440\u044b \u0434\u043b\u044f \u0442\u0435\u0441\u043d\u043e\u0439 \u0442\u043e\u043b\u043f\u044b. \u041d\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0439 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u0418 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u00abboids \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442\u00bb \u2014 \u0432 \u0434\u0435\u0432\u044f\u0442\u0438 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0437 \u0434\u0435\u0441\u044f\u0442\u0438 \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u043a\u0440\u0438\u0432\u044b\u0435 \u0432\u0435\u0441\u0430, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043b\u0438\u0431\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b \u043c\u043e\u043b\u0447\u0430 \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u043e\u0441\u044c \u0438\u0437-\u0437\u0430 \u0431\u0430\u0433\u0430.<\/p>\n<p>\u041d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043f\u043e\u043b\u0435 boids \u043b\u0435\u0442\u0430\u044e\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u041d\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0433\u0440\u0435, \u0432\u044b\u043b\u0435\u0437\u0430\u044e\u0442 \u0442\u0440\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0433\u0434\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0443\u0436\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442. \u0412\u00a0<strong>\u0443\u0437\u043a\u0438\u0445 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0430\u0445<\/strong>\u00a0\u0434\u0432\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 \u0437\u0430\u043b\u0438\u043f\u0430\u044e\u0442 \u2014 separation \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0442\u044c. \u041d\u0430\u00a0<strong>\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0430\u0433\u0435\u043d\u0442\u043e\u0432<\/strong>\u00a0\u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0443\u0431\u0438\u0432\u0430\u0435\u0442 FPS. \u0418 \u043a\u043e\u0433\u0434\u0430 \u044e\u043d\u0438\u0442\u0430\u043c \u043d\u0443\u0436\u043d\u043e\u00a0<strong>\u0438\u0434\u0442\u0438 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0446\u0435\u043b\u0438<\/strong>, \u0447\u0438\u0441\u0442\u044b\u0435 boids \u0435\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e\u0442. \u042d\u0442\u0438\u043c \u0442\u0440\u0451\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c \u0438 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b.<\/p>\n<h3>O(N\u00b2), spatial hash \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f<\/h3>\n<p>\u041e\u043a\u0435\u0439. \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u0432\u0435\u0441\u0430 \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f, \u0441\u0442\u0430\u044f \u043c\u0443\u0442\u0438\u0442\u0441\u044f. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442.<\/p>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0433\u0435\u043d\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u0442\u043e \u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0438, \u2014 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f. \u0421\u0430\u043c\u043e\u0435 \u043d\u0430\u0438\u0432\u043d\u043e\u0435 \u2014 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0430\u0433\u0435\u043d\u0442\u0430\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u042d\u0442\u043e\u00a0<code>O(N\u00b2)<\/code>\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u043a\u0430\u0434\u0440.<\/p>\n<p>\u041f\u0440\u0438\u043a\u0438\u043d\u0435\u043c \u0446\u0438\u0444\u0440\u044b. N=100 \u2014 \u0434\u0435\u0441\u044f\u0442\u044c \u0442\u044b\u0441\u044f\u0447 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a. N=500 \u2014 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430. N=1000 \u2014 \u043c\u0438\u043b\u043b\u0438\u043e\u043d. N=5000 \u2014 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043f\u044f\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438\u00a0<strong>\u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440<\/strong>, \u0430 \u043f\u0440\u0438 \u0448\u0435\u0441\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438 \u043a\u0430\u0434\u0440\u0430\u0445 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u044d\u0442\u043e \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0418 \u044d\u0442\u043e\u00a0<strong>\u0434\u043e<\/strong>\u00a0\u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451 \u2014 \u0440\u0435\u043d\u0434\u0435\u0440, \u0444\u0438\u0437\u0438\u043a\u0443.<\/p>\n<p>\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443 \u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430, \u0434\u0432\u0438\u0436\u043a\u0430, \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0449\u0435\u0439. \u041d\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043d\u044f\u0442\u0435\u043d: \u043f\u0440\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0435 \u043a\u0430\u0434\u0440\u0430 \u0432 16.7 \u043c\u0441 (\u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c 60 FPS) \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u2014 \u0443\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u0430\u044f \u0434\u043e\u043b\u044f. \u0410 \u043c\u044b \u0432\u0435\u0434\u044c \u0445\u043e\u0442\u0438\u043c \u0442\u044b\u0441\u044f\u0447\u0438 \u044e\u043d\u0438\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0441\u043e\u0442\u043d\u0438.<\/p>\n<p>\u0418\u0434\u0435\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u0415\u0441\u043b\u0438 \u0440\u0430\u0434\u0438\u0443\u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438\u00a0<code>r<\/code>\u00a0\u2014 \u044d\u0442\u043e, \u0441\u043a\u0430\u0436\u0435\u043c, \u043f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0442\u043e \u0430\u0433\u0435\u043d\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u0443\u0433\u043b\u0443 \u043a\u0430\u0440\u0442\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u043c. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u0445 \u043f\u0430\u0440\u0443 \u2014 \u043f\u0443\u0441\u0442\u0430\u044f \u0442\u0440\u0430\u0442\u0430. \u0422\u0430\u043a \u0447\u0442\u043e \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u043c\u0438\u0440 \u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u043a\u043b\u0435\u0442\u043e\u043a \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c\u00a0<code>cellSize \u00d7 cellSize<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0430\u0433\u0435\u043d\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0441\u0432\u043e\u044e \u043a\u043b\u0435\u0442\u043a\u0443. \u041a\u043e\u0433\u0434\u0430 \u0438\u0449\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0430\u0433\u0435\u043d\u0442\u0430 \u2014 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u043a\u043b\u0435\u0442\u043a\u0443 \u0438 \u0432\u043e\u0441\u0435\u043c\u044c \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445, \u0438\u0442\u043e\u0433\u043e \u0434\u0435\u0432\u044f\u0442\u044c \u043a\u043b\u0435\u0442\u043e\u043a \u0432 2D (\u0432 3D \u0438\u0445 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0441\u0435\u043c\u044c, \u043d\u043e \u0438\u0434\u0435\u044f \u0442\u0430 \u0436\u0435).<\/p>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0439 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043b\u0435\u0442\u043a\u0435 \u043b\u0435\u0436\u0438\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0434\u0435\u0441\u044f\u0442\u043e\u043a. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u0438\u0441\u043a \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0433\u0435\u043d\u0442\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043e\u0442\u043d\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a (\u0434\u0435\u0432\u044f\u0442\u044c \u043a\u043b\u0435\u0442\u043e\u043a \u043f\u043e \u0434\u0435\u0441\u044f\u0442\u044c) \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0435\u0432\u044f\u0442\u0438\u0441\u043e\u0442 \u0434\u0435\u0432\u044f\u043d\u043e\u0441\u0442\u0430 \u0434\u0435\u0432\u044f\u0442\u0438. \u041f\u0440\u0438 N=5000 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0430 \u043d\u0430 \u0434\u0432\u0430: \u0441\u043e\u0442\u043d\u044f \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447. \u0418 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u2014 \u043f\u0440\u0438 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0439 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e \u00ab\u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0443\u00bb \u043e\u0442 N \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u0449\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u00a0<code>O(N\u00b2)<\/code>\u00a0\u0434\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e\u00a0<code>O(N)<\/code>.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0443\u0442 \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u0435\u0442\u043a\u0438. \u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e:\u00a0<code>cellSize = r<\/code>. \u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043b\u0435\u0442\u043a\u0443 \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u2014 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435 3\u00d73, \u0430 5\u00d75 \u0438\u043b\u0438 7\u00d77, \u0438\u043d\u0430\u0447\u0435 \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0438 \u0432\u044b\u0433\u043e\u0434\u0430 \u0442\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043a\u043b\u0435\u0442\u043a\u0438 \u00ab\u0436\u0438\u0440\u043d\u044b\u0435\u00bb, \u0432 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0430\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432, \u0438 spatial hash \u0432\u044b\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 brute force \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0435\u0442\u043a\u0438. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435\u00a0<code>cellSize<\/code>\u00a0\u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044e\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043b\u0435\u0442\u043a\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c\u00a0<strong>5\u201320 \u0430\u0433\u0435\u043d\u0442\u043e\u0432<\/strong>. \u041c\u0435\u043d\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0443 \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u044a\u0435\u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442. \u0421\u043e\u0442\u043d\u044f \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0443 \u2014 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u043a\u043b\u0435\u0442\u043a\u0438 \u0441\u043d\u043e\u0432\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 O(N\u00b2).<\/p>\n<p>\u041a\u043e\u0434 \u043d\u0430 C# \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"cs\">\/\/ build: \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0434\u0440\u0430, \u043f\u043e\u0441\u043b\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0430\u0433\u0435\u043d\u0442\u043e\u0432var grid = new Dictionary&lt;Vector2Int, List&lt;Boid&gt;&gt;();foreach (var b in boids) {    var cell = new Vector2Int(        Mathf.FloorToInt(b.position.x \/ cellSize),        Mathf.FloorToInt(b.position.z \/ cellSize));    if (!grid.TryGetValue(cell, out var list))        grid[cell] = list = new List&lt;Boid&gt;();    list.Add(b);}\/\/ query: \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0433\u0435\u043d\u0442\u0430, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430List&lt;Boid&gt; Neighbors(Boid b) {    var result = new List&lt;Boid&gt;();    var c = CellOf(b);    for (int dx = -1; dx &lt;= 1; dx++)        for (int dy = -1; dy &lt;= 1; dy++) {            if (!grid.TryGetValue(c + new Vector2Int(dx, dy), out var list))                continue;            foreach (var other in list)                if ((b.position - other.position).sqrMagnitude &lt; r * r)                    result.Add(other);        }    return result;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0430\u043c\u0430 \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u0430\u044f \u2014 \u0435\u0451 \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0441 70-\u0445 \u0432 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0438 \u0441 80-\u0445 \u0432 \u043c\u043e\u043b\u0435\u043a\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0438\u0433\u0440 \u0438 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439 \u043e\u043f\u043e\u0440\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u2014\u00a0<em>Teschner et al. (2003), \u00abOptimized Spatial Hashing for Collision Detection of Deformable Objects\u00bb<\/em>\u00a0(VMV 2003). \u0423 \u0422\u0435\u0448\u043d\u0435\u0440\u0430 \u0441\u0435\u0442\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c\u00a0<strong>\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439<\/strong>: \u043a\u043b\u044e\u0447 \u043a\u043b\u0435\u0442\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0435\u0451 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u0430 \u043d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432, \u2014 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043c\u0438\u0440\u043e\u0432 \u0431\u0435\u0437 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446.<\/p>\n<p>\u0412 JS\/TypeScript \u044d\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0<code>Map&lt;number, Array&lt;Boid&gt;&gt;<\/code>\u00a0\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0410 \u0432\u043e\u0442 \u0432 Unity C# \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u0432 hot path \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u0438\u043d\u0430\u0447\u0435: \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u0432\u044b\u0439\u00a0<code>List<\/code>, \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u00a0<code>Dictionary<\/code>\u00a0\u2014 \u044d\u0442\u043e GC-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f. \u041d\u0430 \u043a\u0430\u0434\u0440 \u0438\u0445 \u0441\u043e\u0442\u043d\u0438, \u0438 \u043f\u0440\u0438\u00a0<code>N &gt; 1000<\/code>\u00a0\u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0434\u0440\u043e\u0432, \u0432\u044b\u0434\u0430\u0432\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u044b FPS. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014\u00a0<strong>\u0434\u0432\u0430 \u043f\u043b\u043e\u0441\u043a\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/strong>\u00a0\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430:\u00a0<code>cellHead[]<\/code>\u00a0\u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043b\u0435\u0442\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u043e\u0438\u0434\u0430,\u00a0<code>next[]<\/code>\u00a0\u2014 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u043e\u0438\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043a\u043b\u0435\u0442\u043a\u0435. \u0418\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e\u00a0<code>new<\/code>\u00a0\u0432 \u043a\u0430\u0434\u0440\u0435. \u041a\u043e\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u0432 Unity \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0434\u0430\u0451\u0442 \u043f\u044f\u0442\u0438-\u0434\u0435\u0441\u044f\u0442\u0438\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0437\u0430 \u0441\u0447\u0451\u0442 \u043d\u0443\u043b\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0438 \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0432 \u043a\u044d\u0448.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f4\/5a7\/cdf\/8f45a7cdf71816b4d5ae095aa730fa32.png\" width=\"1376\" height=\"768\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8f4\/5a7\/cdf\/8f45a7cdf71816b4d5ae095aa730fa32.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f4\/5a7\/cdf\/8f45a7cdf71816b4d5ae095aa730fa32.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>Uniform grid \u0445\u043e\u0440\u043e\u0448, \u043a\u043e\u0433\u0434\u0430 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u0430\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u044e\u043d\u0438\u0442\u043e\u0432 \u0441\u0431\u0438\u043b\u0430\u0441\u044c \u0432 \u043e\u0434\u0438\u043d \u0443\u0433\u043e\u043b \u043a\u0430\u0440\u0442\u044b \u2014 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0443\u044e \u043a\u043b\u0435\u0442\u043a\u0443, \u0438 \u0441\u0435\u0442\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0440\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 O(N\u00b2). \u041d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0435\u0441\u0442\u044c KD-tree, quadtree\/octree \u0438 BVH (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u2014 \u0441\u043a\u043e\u0440\u0435\u0435 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u0447\u0435\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0445 \u0430\u0433\u0435\u043d\u0442\u043e\u0432). \u041d\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0446\u0435\u043f\u0442\u0430 \u00ab\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 KD-tree\u00bb \u044f \u043d\u0435 \u0434\u0430\u043c: \u0434\u043b\u044f \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447 uniform grid \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0438 \u044d\u0442\u043e\u00a0<strong>\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435<\/strong>. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0443\u043f\u0451\u0440\u043b\u0438\u0441\u044c \u0432 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043f\u043e\u0434 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0446\u0435\u043d\u044b.<\/p>\n<h3>ORCA: \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u0434\u043d\u043e\u0433\u043e separation \u043c\u0430\u043b\u043e \u0432 \u0443\u0437\u043a\u043e\u043c \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435<\/h3>\n<p>\u0417\u0430 ORCA \u0441\u0442\u043e\u0438\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445. \u0418 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0432\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 RTS, \u0433\u0434\u0435 \u043f\u043b\u043e\u0442\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u044e\u043d\u0438\u0442\u043e\u0432 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0443\u0437\u043a\u0438\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0438 \u043d\u0435 \u0437\u0430\u043b\u0438\u043f\u0430\u0435\u0442.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 \u0447\u0438\u0441\u0442\u043e\u0433\u043e separation \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0434\u0432\u0443\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u0445 \u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435 \u0448\u0438\u0440\u0438\u043d\u043e\u0439 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0438\u0445 \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u0430. Separation \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432\u043f\u043b\u043e\u0442\u043d\u0443\u044e, \u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432\u0434\u043e\u043b\u044c \u043b\u0438\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u043f\u0440\u043e\u0442\u0438\u0432 \u0438\u0445 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u041e\u0431\u0430 \u0442\u043e\u0440\u043c\u043e\u0437\u044f\u0442, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0434\u043e \u043d\u0443\u043b\u044f, \u0430 \u0440\u0430\u0437\u043e\u0439\u0442\u0438\u0441\u044c \u043d\u0435\u0447\u0435\u043c: \u0441\u0442\u0435\u043d\u044b \u0440\u044f\u0434\u043e\u043c, \u0448\u0430\u0440\u0430\u0445\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043a\u0443\u0434\u0430. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u0442\u043e\u043b\u043a\u0430\u044e\u0442\u0441\u044f \u0438\u00a0<strong>\u0437\u0430\u043b\u0438\u043f\u0430\u044e\u0442<\/strong>, \u043b\u0438\u0431\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0437\u0443\u0442 \u0434\u0440\u0443\u0433 \u0441\u043a\u0432\u043e\u0437\u044c \u0434\u0440\u0443\u0433\u0430, \u043b\u0438\u0431\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0434\u0451\u0440\u0433\u0430\u0442\u044c\u0441\u044f \u2014 separation \u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f. \u0412 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0439 \u043f\u0430\u0440\u0435 \u044d\u0442\u043e \u043b\u0435\u0447\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u0440\u0443\u0442\u043a\u043e\u0439 \u0432\u0435\u0441\u043e\u0432. \u0412 \u0442\u043e\u043b\u043f\u0435 \u0438\u0437 \u0441\u043e\u0442\u043d\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u0445 \u043f\u0430\u0440 \u043a\u043e\u0440\u0438\u0434\u043e\u0440 \u0437\u0430\u043a\u0443\u043f\u043e\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u0432\u0435\u0441\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0432\u0441\u0442\u0430\u0451\u0442 \u043a\u043e\u043b\u043e\u043c.<\/p>\n<p>\u041a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: separation \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0<strong>\u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/strong>\u00a0\u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u043d\u0435\u0451 \u0434\u0432\u0430 \u0430\u0433\u0435\u043d\u0442\u0430, \u043b\u0435\u0442\u044f\u0449\u0438\u0445 \u043d\u0430\u0432\u0441\u0442\u0440\u0435\u0447\u0443, \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0440\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u0434\u0432\u0430 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0445 \u0432 \u0442\u0435\u0445 \u0436\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445. \u0410 \u044d\u0442\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u2014 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0438\u0447\u0435\u0433\u043e.<\/p>\n<p>\u0412 1998 \u0433\u043e\u0434\u0443 Paolo Fiorini \u0438 Zvi Shiller \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0443 \u0438\u043d\u0430\u0447\u0435 \u2014\u00a0<em>\u00abMotion planning in dynamic environments using velocity obstacles\u00bb<\/em>\u00a0(IJRR 17(7):760\u2013772). \u0418\u0434\u0435\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442: \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u043d\u0435 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0430 \u0432\u00a0<strong>\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439<\/strong>. \u0423 \u0430\u0433\u0435\u043d\u0442\u0430 \u0435\u0441\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435\u00a0<code>t<\/code>\u00a0\u0441\u0435\u043a\u0443\u043d\u0434, \u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c\u00a0<strong>velocity obstacle (VO)<\/strong>. \u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 2D \u044d\u0442\u043e \u043a\u043e\u043d\u0443\u0441, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u00ab\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430 \u043b\u0438 \u043c\u043e\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u00bb \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u00ab\u043b\u0435\u0436\u0443 \u043b\u0438 \u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0443\u0441\u0430\u00bb \u2014\u00a0<code>O(1)<\/code>\u00a0\u043d\u0430 \u043f\u0430\u0440\u0443.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b88\/24f\/907\/b8824f90736cb2be482b668e70cc8b58.png\" width=\"1376\" height=\"768\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b88\/24f\/907\/b8824f90736cb2be482b668e70cc8b58.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b88\/24f\/907\/b8824f90736cb2be482b668e70cc8b58.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0423 \u043d\u0430\u0438\u0432\u043d\u043e\u0433\u043e VO \u0435\u0441\u0442\u044c \u0437\u0430\u0441\u0430\u0434\u0430: \u0435\u0441\u043b\u0438 \u043e\u0431\u0430 \u0430\u0433\u0435\u043d\u0442\u0430 \u0441\u0447\u0438\u0442\u0430\u044e\u0442, \u0447\u0442\u043e \u0443\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0441\u0435\u0434, \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0438\u0434\u0451\u0442; \u0430 \u0435\u0441\u043b\u0438 \u043e\u0431\u0430 \u043f\u0440\u044b\u0433\u0430\u044e\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u2014 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f. \u0412 2008 \u0433\u043e\u0434\u0443 \u0433\u0440\u0443\u043f\u043f\u0430 \u0438\u0437 UNC Chapel Hill \u2014 Jur van den Berg, Ming Lin, Dinesh Manocha \u2014 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430\u00a0<em>\u00abReciprocal Velocity Obstacles for real-time multi-agent navigation\u00bb<\/em>\u00a0(ICRA 2008). \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u0432 \u0441\u043b\u043e\u0432\u0435\u00a0<strong>reciprocal<\/strong>: \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0433\u0435\u043d\u0442 \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0440\u043e\u0432\u043d\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0443\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044e, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f, \u0447\u0442\u043e \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0432\u043e\u0437\u044c\u043c\u0451\u0442 \u0441\u043e\u0441\u0435\u0434. \u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0441\u0434\u0432\u0438\u0433 \u0442\u043e\u0447\u043a\u0438 velocity obstacle, \u0438 \u043e\u043d\u043e \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0430\u0433\u0435\u043d\u0442\u043e\u0432. \u041a\u0441\u0442\u0430\u0442\u0438, \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 RVO-\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e avoidance \u0441\u0438\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 Unity NavMeshAgent.<\/p>\n<p>\u0410 \u0432 2011 \u0433\u043e\u0434\u0443 \u0442\u0430 \u0436\u0435 \u0433\u0440\u0443\u043f\u043f\u0430 (van den Berg, Guy, Lin, Manocha) \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u2014\u00a0<strong>ORCA<\/strong>,\u00a0<em>Optimal Reciprocal Collision Avoidance<\/em>\u00a0(Robotics Research, Springer Tracts 70:3\u201319). \u042d\u0442\u043e \u0442\u043e, \u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432 \u0442\u0440\u0438 \u0448\u0430\u0433\u0430:<\/p>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f\u00a0<strong>\u043f\u043e\u043b\u0443\u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c<\/strong>\u00a0\u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439, \u043e\u0442\u0434\u0435\u043b\u044f\u044e\u0449\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u2014 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c reciprocal-\u0441\u0434\u0432\u0438\u0433\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u0433\u0435\u043d\u0442\u0430 \u2014 \u044d\u0442\u043e\u00a0<strong>\u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435<\/strong>\u00a0\u0432\u0441\u0435\u0445 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u043b\u0443\u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0435\u0439. \u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u0432\u044b\u043f\u0443\u043a\u043b\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a: \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u0432\u0441\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0441\u0440\u0430\u0437\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u2014 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0430\u044f \u043a\u00a0<strong>preferred velocity<\/strong>\u00a0\u0442\u043e\u0447\u043a\u0430 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430. Preferred velocity \u2014 \u044d\u0442\u043e \u043a\u0430\u043a \u0430\u0433\u0435\u043d\u0442\u00a0<em>\u0445\u043e\u0442\u0435\u043b \u0431\u044b<\/em>\u00a0\u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f, \u043d\u0435 \u0431\u0443\u0434\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u044f\u043c\u043e \u043a \u0446\u0435\u043b\u0438).<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/033\/20a\/aa2\/03320aaa2038ac6fc6d65b95452f5ccf.png\" width=\"1200\" height=\"896\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/033\/20a\/aa2\/03320aaa2038ac6fc6d65b95452f5ccf.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/033\/20a\/aa2\/03320aaa2038ac6fc6d65b95452f5ccf.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410 \u0432\u043e\u0442 \u00ab\u043d\u0430\u0439\u0442\u0438 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0432\u044b\u043f\u0443\u043a\u043b\u043e\u043c \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435 \u043a \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435\u00bb \u2014 \u044d\u0442\u043e\u00a0<strong>\u0437\u0430\u0434\u0430\u0447\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/strong>\u00a0(LP) \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u0422\u0443\u0442 \u0440\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u043f\u043e\u0447\u0435\u043c\u0443 LP, \u0430 \u043d\u0435 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0439 \u0441\u043f\u0443\u0441\u043a? \u0423 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (<code>vx<\/code>,\u00a0<code>vy<\/code>) \u0438 \u0434\u0435\u0441\u044f\u0442\u043e\u043a-\u0434\u0440\u0443\u0433\u043e\u0439 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u0441\u043e\u0441\u0435\u0434\u0430. LP \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u00a0<code>O(K)<\/code>\u00a0(\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 Megiddo, 1984) \u2014 \u043a\u043e\u043f\u0435\u0435\u0447\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u0430\u044f \u0432 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0439 \u0441\u043f\u0443\u0441\u043a \u0431\u044b\u043b \u0431\u044b \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c, \u0431\u0435\u0437 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a \u0448\u0430\u0433\u0443 \u0438 \u0441\u043a\u043b\u043e\u043d\u043d\u044b\u043c \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u0442\u044c \u0432 \u043f\u043b\u043e\u0445\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. LP \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d, \u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d, \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u0435\u043d \u0438 \u0434\u0451\u0448\u0435\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u044f \u0438 \u0432\u044b\u0431\u0440\u0430\u043b\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e.<\/p>\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 ORCA \u0441 \u043d\u0443\u043b\u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u2014 \u043e\u043d \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0442\u0430\u043c, \u0433\u0434\u0435 \u0432\u0430\u043c, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0412\u00a0<strong>Unity NavMeshAgent<\/strong>\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 avoidance \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0442\u044f\u043d\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438-\u0441\u043e\u0442\u043d\u0438 \u0430\u0433\u0435\u043d\u0442\u043e\u0432.\u00a0<\/p>\n<p><a href=\"https:\/\/github.com\/recastnavigation\/recastnavigation\" rel=\"noopener noreferrer nofollow\"><strong>Recast\/Detour<\/strong>\u00a0<\/a>\u041c\u0438\u043a\u043a\u043e \u041c\u043e\u043d\u043e\u043d\u0435\u043d\u0430 \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 C++ \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442, \u0435\u0433\u043e Crowd-\u043c\u043e\u0434\u0443\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Unreal, Godot \u0438 \u043a\u0443\u0447\u0430 \u0438\u043d\u0434\u0438-\u0434\u0432\u0438\u0436\u043a\u043e\u0432. <\/p>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u0433\u0434\u0435 ORCA \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f. \u0412\u00a0<strong>\u0441\u0432\u0435\u0440\u0445\u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u0442\u043e\u043b\u043f\u0435<\/strong>\u00a0\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c, \u0438 \u0430\u0433\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0438\u0440\u0430\u044e\u0442 \u2014 \u0432 \u043f\u0440\u043e\u0434\u0435 \u044d\u0442\u043e \u043b\u0435\u0447\u0430\u0442 softer-\u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0438 flow fields, \u0447\u0442\u043e\u0431\u044b \u044e\u043d\u0438\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b \u0432 \u0431\u0435\u0437\u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u041f\u0440\u043e\u0442\u0438\u0432\u00a0<strong>\u043d\u0435\u0432\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442 \u0432 reciprocal (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437\u044a\u044f\u0440\u0451\u043d\u043d\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430), ORCA \u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u0443\u044e, \u00ab\u0437\u0430\u0441\u0442\u0435\u043d\u0447\u0438\u0432\u0443\u044e\u00bb \u043e\u0446\u0435\u043d\u043a\u0443. \u0410 \u043d\u0430\u00a0<strong>\u0442\u044b\u0441\u044f\u0447\u0430\u0445 \u0430\u0433\u0435\u043d\u0442\u043e\u0432<\/strong>\u00a05000 LP \u0432 \u043a\u0430\u0434\u0440 \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u043e\u0440\u043e\u0433\u043e, \u0438 \u0435\u0433\u043e \u0441\u0440\u0435\u0437\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 LOD AI: \u0434\u0430\u043b\u044c\u043d\u0438\u0435 \u0438\u0434\u0443\u0442 \u043f\u043e boids, \u0431\u043b\u0438\u0436\u043d\u0438\u0435 \u2014 \u0447\u0435\u0440\u0435\u0437 ORCA.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dc1\/e04\/4ae\/dc1e044ae4a6331b7b60b19e5247c0f9.png\" width=\"1376\" height=\"768\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/dc1\/e04\/4ae\/dc1e044ae4a6331b7b60b19e5247c0f9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dc1\/e04\/4ae\/dc1e044ae4a6331b7b60b19e5247c0f9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0426\u0435\u043b\u044c \u0438 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f: steering behaviors<\/h3>\n<p>\u041a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 avoidance \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0427\u0435\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442? \u0426\u0435\u043b\u0438. \u0427\u0438\u0441\u0442\u044b\u0435 boids \u043d\u0435 \u0437\u043d\u0430\u044e\u0442,\u00a0<strong>\u043a\u0443\u0434\u0430<\/strong>\u00a0\u0438\u0434\u0442\u0438, \u2014 \u043e\u043d\u0438 \u0443\u043c\u0435\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e \u0441 \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438. \u0410 \u044e\u043d\u0438\u0442\u0430\u043c \u043d\u0430\u0434\u043e \u0438\u0434\u0442\u0438 \u043d\u0430 \u0448\u0442\u0443\u0440\u043c, \u0440\u044b\u0431\u0430\u043c \u2014 \u043f\u043b\u044b\u0442\u044c \u043a \u043a\u043e\u0440\u043c\u0443, NPC \u2014 \u043f\u0430\u0442\u0440\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442.<\/p>\n<p>\u042d\u0442\u043e \u0437\u0430\u043a\u0440\u044b\u043b \u0441\u0430\u043c \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441 \u0432 1999 \u0433\u043e\u0434\u0443 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c \u043d\u0430 GDC\u00a0<em>\u00abSteering Behaviors for Autonomous Characters\u00bb<\/em>. \u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e \u0441\u0442\u0430\u044e, \u0430 \u043f\u0440\u043e\u00a0<strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439<\/strong>\u00a0\u0438 \u043d\u0430\u0431\u043e\u0440 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u0438\u0440\u043f\u0438\u0447\u0438\u043a\u043e\u0432 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f:\u00a0<code>seek<\/code>,\u00a0<code>flee<\/code>,\u00a0<code>arrive<\/code>,\u00a0<code>wander<\/code>,\u00a0<code>pursue<\/code>,\u00a0<code>evade<\/code>. \u0412\u0430\u0436\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c: \u044d\u0442\u0438 behaviors \u0437\u0430\u0434\u0430\u044e\u0442\u00a0<strong>preferred velocity<\/strong>\u00a0\u0430\u0433\u0435\u043d\u0442\u0430 \u2014 \u0430 \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0451 \u0432\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 boids-\u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 avoidance \u0447\u0435\u0440\u0435\u0437 ORCA. \u042d\u0442\u043e\u00a0<strong>\u0441\u043b\u043e\u0439 \u043d\u0430\u0434 \u0441\u043b\u043e\u0435\u043c<\/strong>.<\/p>\n<p>\u0421\u043a\u0430\u0436\u0435\u043c <code>seek<\/code>, \u0442\u044f\u043d\u0443\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430 \u043a \u0442\u043e\u0447\u043a\u0435:<\/p>\n<pre><code class=\"cs\">Vector3 desired = (target - transform.position).normalized * maxSpeed;Vector3 steering = desired - velocity;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0416\u0435\u043b\u0430\u0435\u043c\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043a \u0446\u0435\u043b\u0438, steering \u2014 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439. \u0421\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0435 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0435 \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e, \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0435.\u00a0<strong>Flee<\/strong>\u00a0\u2014 \u044d\u0442\u043e seek \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.\u00a0<strong>Arrive<\/strong>\u00a0\u2014 \u043a\u0430\u043a seek, \u043d\u043e \u0443 \u0446\u0435\u043b\u0438 \u0430\u0433\u0435\u043d\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442: \u0436\u0435\u043b\u0430\u0435\u043c\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438, \u0438 \u0432\u043d\u0443\u0442\u0440\u0438\u00a0<code>slowingRadius<\/code>\u00a0\u043e\u043d\u0430 \u043f\u0430\u0434\u0430\u0435\u0442 \u043a \u043d\u0443\u043b\u044e. \u0411\u0435\u0437 arrive \u0430\u0433\u0435\u043d\u0442 \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u0435\u0442 \u0441\u043a\u0432\u043e\u0437\u044c \u0446\u0435\u043b\u044c, \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u0435\u0442 \u2014 \u0438 \u043e\u0441\u0446\u0438\u043b\u043b\u0438\u0440\u0443\u0435\u0442:<\/p>\n<pre><code class=\"cs\">float d = (target - transform.position).magnitude;float speed = d &lt; slowingRadius    ? maxSpeed * (d \/ slowingRadius)    : maxSpeed;Vector3 desired = (target - transform.position).normalized * speed;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>Wander<\/strong>\u00a0\u2014 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0431\u043b\u0443\u0436\u0434\u0430\u043d\u0438\u0435 (\u0443 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430 \u2014 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0446\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0434\u0440\u0435\u0439\u0444\u0443\u044e\u0449\u0443\u044e \u043f\u043e \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434 \u0430\u0433\u0435\u043d\u0442\u043e\u043c). \u042d\u0442\u043e \u0434\u043b\u044f ambient-\u0444\u0430\u0443\u043d\u044b: \u0440\u044b\u0431\u043e\u043a \u0432 \u0430\u043a\u0432\u0430\u0440\u0438\u0443\u043c\u0435, \u0431\u0430\u0431\u043e\u0447\u0435\u043a \u043d\u0430 \u043b\u0443\u0436\u0430\u0439\u043a\u0435, \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043f\u0442\u0438\u0446 \u043d\u0430\u0434 \u043b\u0435\u0441\u043e\u043c. \u0410\u00a0<strong>pursue\/evade<\/strong>\u00a0\u2014 \u044d\u0442\u043e seek \u0438 flee, \u043d\u043e \u043a\u00a0<em>\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0431\u0443\u0434\u0443\u0449\u0435\u0439<\/em>\u00a0\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0446\u0435\u043b\u0438, \u0447\u0435\u0440\u0435\u0437 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0435\u0451 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0422\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0451\u043c \u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0438 \u0434\u043b\u044f \u043f\u0443\u043b\u0438 \u0432 \u0448\u0443\u0442\u0435\u0440\u0430\u0445, \u2014 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d0a\/9dd\/edd\/d0a9ddeddd75c883122e5594fb930798.png\" width=\"1024\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d0a\/9dd\/edd\/d0a9ddeddd75c883122e5594fb930798.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d0a\/9dd\/edd\/d0a9ddeddd75c883122e5594fb930798.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u2014 \u0441\u0442\u0440\u043e\u0439. \u0414\u043b\u044f \u043e\u0442\u0440\u044f\u0434\u043e\u0432 \u0432 RTS \u0438\u043b\u0438 Total War boids \u043c\u0430\u043b\u043e: \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u044e\u043d\u0438\u0442\u044b \u0434\u0435\u0440\u0436\u0430\u043b\u0438\u00a0<strong>\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e<\/strong>\u00a0(\u043b\u0438\u043d\u0438\u044f, \u043a\u043b\u0438\u043d, \u043a\u0430\u0440\u0435). \u041f\u043e\u0434\u0445\u043e\u0434 slot-based: \u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u00ab\u0441\u043b\u043e\u0442\u043e\u0432\u00bb-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u043e\u0442\u0440\u044f\u0434\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u044e\u043d\u0438\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0432 \u0441\u0432\u043e\u0439 \u0441\u043b\u043e\u0442 \u0438 \u0438\u0434\u0451\u0442 \u0432 \u043d\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 arrive, \u0430 separation \u043f\u043e\u0432\u0435\u0440\u0445 \u043c\u044f\u0433\u043a\u043e \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u0441\u0430\u043d\u0438\u044f. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0442\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0445, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b \u0441\u0442\u0440\u043e\u044f \u0431\u0435\u0437 \u0441\u043b\u043e\u043c\u0430 \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0442\u0443\u0442 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0418 \u0435\u0449\u0451 \u043c\u043e\u043c\u0435\u043d\u0442\u2014 \u043e\u0431\u0445\u043e\u0434 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439. ORCA \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0443\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435\u00a0<strong>\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0445<\/strong>\u00a0\u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430. \u0421\u0442\u0435\u043d\u044b, \u0434\u043e\u043c\u0430, \u0441\u043a\u0430\u043b\u044b \u2014 \u044d\u0442\u043e\u00a0<strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f<\/strong>\u00a0\u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0411\u0430\u0437\u043e\u0432\u043e \u2014 \u0440\u0435\u0439\u043a\u0430\u0441\u0442 \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0430, \u0435\u0441\u043b\u0438 \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435. \u041f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u043b\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (SDF): \u0442\u043e\u0433\u0434\u0430 \u00ab\u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u0441\u0442\u0435\u043d\u0435\u00bb \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0441\u044d\u043c\u043f\u043b \u0438\u0437 3D-\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b,\u00a0<code>O(1)<\/code>. \u0412 Unity \u0438 Unreal \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u0448\u0438\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u043d\u0430\u0432\u043c\u0435\u0448, \u0438 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0447\u0430\u0449\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u043e\u0442 \u043a\u0430\u043a \u0432\u0441\u0435 \u0441\u043b\u043e\u0438 \u0441\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u2014 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0433\u0435\u043d\u0442\u0430:<\/p>\n<ol>\n<li>\n<p><strong>Steering<\/strong>\u00a0\u0434\u0430\u0451\u0442 preferred velocity \u2014 \u043a\u0443\u0434\u0430 \u044f \u0445\u043e\u0447\u0443 (\u0432 seek-\u0446\u0435\u043b\u044c, \u043f\u043e wander, \u0432 slot).<\/p>\n<\/li>\n<li>\n<p><strong>Boids-\u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438<\/strong>\u00a0(separation\/alignment\/cohesion) \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u044e\u0442 \u0435\u0451 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u043e\u0439 \u0441 \u0432\u0435\u0441\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>ORCA<\/strong>\u00a0\u0431\u0435\u0440\u0451\u0442 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442 \u0435\u0451 \u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u044d\u043f \u043f\u043e\u00a0<\/strong><code><strong>maxSpeed<\/strong><\/code>\u00a0\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043f\u0440\u043e\u0434\u0435 \u043c\u0435\u0436\u0434\u0443 \u0448\u0430\u0433\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0435\u0449\u0451 \u0444\u0438\u043b\u044c\u0442\u0440\u044b: \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043f\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0441 \u0443\u0433\u043b\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u043c\u0435\u043d\u044b heading&#8217;\u0430, priority overrides (\u0431\u0435\u0433\u0443\u0449\u0438\u0439 \u0432 \u043f\u0430\u043d\u0438\u043a\u0435 \u0430\u0433\u0435\u043d\u0442 \u043b\u043e\u043c\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443). \u0418, \u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0442\u043e\u043b\u043f\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u043f\u0430\u0440\u0443 \u0447\u0430\u0441\u043e\u0432 \u043d\u0430 \u0447\u0438\u0441\u0442\u044b\u0445 boids, \u0430 \u0432\u043e\u0442 \u00ab\u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0442\u043e\u043b\u043f\u0430\u00bb \u0431\u0435\u0437 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u2014 \u044d\u0442\u043e \u043d\u0435\u0434\u0435\u043b\u0438 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0422\u0440\u0430\u0442\u044f\u0442\u0441\u044f \u044d\u0442\u0438 \u043d\u0435\u0434\u0435\u043b\u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0430 \u043d\u0430 \u043a\u0440\u0443\u0442\u043a\u0443 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0444\u0438\u043a\u0441 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432.<\/p>\n<h3>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c: \u0447\u0442\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u043f\u0440\u043e \u0438\u0433\u0440\u044b \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0442\u043e\u043b\u043f\u0430\u043c\u0438<\/h3>\n<p><strong>Assassin&#8217;s Creed Unity<\/strong>\u00a0(Ubisoft Montreal, 2014). \u041d\u0430 GDC 2015 \u0431\u044b\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u00abMassive Crowd on Assassin&#8217;s Creed Unity: AI Recycling\u00bb. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043e: \u0432 \u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u041f\u0430\u0440\u0438\u0436\u0435 \u043d\u0430 \u0441\u0446\u0435\u043d\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u043e\u00a0<strong>\u0434\u0435\u0441\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447<\/strong>\u00a0NPC, \u0438 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u043c LOD AI \u0441 recycling \u2014 NPC \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0437\u0430 \u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e \u0432 \u0437\u043e\u043d\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0423 \u0431\u043b\u0438\u0437\u043a\u0438\u0445 behavior tree \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439, \u0443 \u0434\u0430\u043b\u044c\u043d\u0438\u0445 \u2014 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0432\u043e\u0432\u0441\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u044f \u0442\u043e\u043b\u043f\u0430-\u0431\u0438\u043b\u043b\u0431\u043e\u0440\u0434. \u0427\u0442\u043e \u0437\u0430 avoidance \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u043e\u043b\u043f\u044b \u2014 \u0432 \u0434\u043e\u043a\u043b\u0430\u0434 \u043d\u0435 \u0432\u043e\u0448\u043b\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u043a\u0430.<\/p>\n<p><strong>World War Z<\/strong>\u00a0(Saber Interactive, 2019). Saber \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438 \u0441\u0432\u043e\u0439\u00a0<strong>Swarm Engine<\/strong>\u00a0\u2014 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u044b\u0441\u044f\u0447\u0438 \u0437\u043e\u043c\u0431\u0438 \u0442\u0435\u043a\u0443\u0442 \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e \u043a\u0430\u043a \u0436\u0438\u0434\u043a\u043e\u0441\u0442\u044c, \u043e\u0431\u0442\u0435\u043a\u0430\u044e\u0442 \u0443\u043a\u0440\u044b\u0442\u0438\u044f \u0438 \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0451\u043c\u0430\u0445. \u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e \u0441 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 boids + flow fields + ORCA-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 avoidance, \u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 LOD \u043d\u0430\u0440\u0443\u0436\u0443 \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0438 \u0443 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445:\u00a0<strong>Days Gone<\/strong>\u00a0(Bend, 2019) \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u043e\u0440\u0434\u0443 \u0434\u043e \u043f\u044f\u0442\u0438\u0441\u043e\u0442 \u0437\u043e\u043c\u0431\u0438 \u0441 AI Director, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0435\u0451 \u00ab\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435\u043c\u00bb;\u00a0<strong>Vermintide 2<\/strong>\u00a0(Fatshark, 2018) \u0434\u0435\u0440\u0436\u0438\u0442 60\u201380 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u0440\u044b\u0441, \u043a\u0430\u0436\u0434\u0430\u044f \u0441 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0431\u043e\u0435\u0432\u043e\u0433\u043e AI;\u00a0<strong>They Are Billions<\/strong>\u00a0(Numantian) \u0433\u043e\u043d\u044f\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u044b\u0441\u044f\u0447 \u043d\u0435\u0436\u0438\u0442\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u043c \u0434\u0432\u0438\u0436\u043a\u0435 \u0441 GPU-\u0440\u0435\u043d\u0434\u0435\u0440\u043e\u043c. \u0410 \u0432 RTS \u2014 StarCraft 2, Supreme Commander, Planetary Annihilation \u2014 \u0434\u043b\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0442\u0440\u044f\u0434\u043e\u0432 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u00a0<strong>flow fields<\/strong>\u00a0(\u044d\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 GDC-\u0434\u043e\u043a\u043b\u0430\u0434\u0430\u043c\u0438), \u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 avoidance \u0438\u0434\u0451\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445.<\/p>\n<p>\u0427\u0442\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u2014 \u043e\u0434\u0438\u043d \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d: \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f (flow fields \u0438\u043b\u0438 \u043d\u0430\u0432\u043c\u0435\u0448) + \u043f\u043e\u0438\u0441\u043a \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (spatial hash \u0438\u043b\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442) + \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f (boids-family) + \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 avoidance (ORCA-family \u0438\u043b\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430) + LOD AI \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0438\u0445 \u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0430\u0433\u0435\u043d\u0442\u043e\u0432. \u041f\u043e\u043b\u043d\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u043d\u0430\u0440\u0443\u0436\u0443 \u043d\u0435 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0438\u043a\u0442\u043e \u2014 \u044d\u0442\u043e \u043d\u043e\u0443-\u0445\u0430\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e-\u0433\u043e\u0434\u044b. \u041d\u043e \u0432\u0430\u0436\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u0441 \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 \u044d\u0442\u043e\u043c:\u00a0<strong>\u0442\u043e\u0442 \u0436\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u0438\u0440\u043f\u0438\u0447\u0435\u0439<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u044b\u0448\u0435, \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0438\u0433\u0440 \u0441 \u043c\u0430\u0441\u0441\u043e\u0432\u043a\u043e\u0439.<\/p>\n<h3>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0438 \u043a\u0443\u0434\u0430 \u043a\u043e\u043f\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435<\/h3>\n<p>\u0421\u043e\u0431\u0435\u0440\u0451\u043c \u0432 \u043e\u0434\u043d\u043e \u043c\u0435\u0441\u0442\u043e. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0442\u043e\u043b\u043f\u044b \u2014 \u044d\u0442\u043e \u043d\u0435 \u043e\u0434\u0438\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0451\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u043b\u043e\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u043f\u043e\u0440\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 (boids)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0437\u0433\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">Reynolds 1987<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0438 \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">Ballerini 2008<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Spatial hash<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0441\u043e\u0441\u0435\u0434\u0435\u0439, O(N\u00b2) \u2192 O(N)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Teschner et al. 2003<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Velocity Obstacles<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">Fiorini &amp; Shiller 1998<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Reciprocal VO<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u00ab\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">van den Berg et al. 2008<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORCA<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u0430\u0440\u0430\u043d\u0442\u0438\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 LP<\/p>\n<\/td>\n<td>\n<p align=\"left\">van den Berg et al. 2011<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Steering behaviors<\/p>\n<\/td>\n<td>\n<p align=\"left\">Seek, flee, arrive, wander, pursue, evade<\/p>\n<\/td>\n<td>\n<p align=\"left\">Reynolds 1999<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u043f\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u043d\u0443\u0436\u043d\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0442\u044b\u0441\u044f\u0447\u0438 \u044e\u043d\u0438\u0442\u043e\u0432 \u0432 Unity \u0431\u0435\u0437 \u0436\u0451\u0441\u0442\u043a\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u043e \u0436\u0435\u043b\u0435\u0437\u0443 \u2014 \u0431\u0435\u0440\u0438\u0442\u0435 NavMeshAgent \u0441 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c avoidance \u0438 Job System, \u044d\u0442\u043e \u0437\u0430\u043a\u0440\u043e\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u0432\u043e\u0441\u0435\u043c\u044c\u0434\u0435\u0441\u044f\u0442 \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u0438\u043b\u0438 \u043c\u043e\u0431\u0438\u043b\u0430 \u2014 DOTS + Burst + \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 spatial hash \u043d\u0430 \u043f\u043b\u043e\u0441\u043a\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 ORCA \u0441 \u043d\u0443\u043b\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>\u0427\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<ul>\n<li>\n<p><strong>Reynolds, C. W. (1987). Flocks, herds and schools.<\/strong>\u00a0SIGGRAPH &#8217;87, Computer Graphics 21(4):25\u201334 \u2014 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e boids,\u00a0<code>red3d.com\/cwr\/papers\/1987\/boids.html<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Reynolds, C. W. (1999). Steering Behaviors for Autonomous Characters.<\/strong>\u00a0GDC 1999,\u00a0<code>red3d.com\/cwr\/steer\/<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Ballerini et al. (2008).<\/strong>\u00a0PNAS 105(4):1232\u20131237, \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0438 \u0443 \u0441\u043a\u0432\u043e\u0440\u0446\u043e\u0432, DOI 10.1073\/pnas.0711437105.<\/p>\n<\/li>\n<li>\n<p><strong>Fiorini &amp; Shiller (1998).<\/strong>\u00a0IJRR 17(7):760\u2013772, \u043f\u0435\u0440\u0432\u044b\u0439 Velocity Obstacle.<\/p>\n<\/li>\n<li>\n<p><strong>van den Berg et al. (2008, 2011).<\/strong>\u00a0RVO (ICRA 2008) \u0438 ORCA (Springer Tracts 70:3\u201319), \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u2014\u00a0<code>gamma.cs.unc.edu\/RVO2\/<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Teschner et al. (2003).<\/strong>\u00a0Optimized Spatial Hashing, VMV 2003.<\/p>\n<\/li>\n<li>\n<p><strong>Mikko Mononen, recastnavigation<\/strong>\u00a0\u2014\u00a0<code>github.com\/recastnavigation\/recastnavigation<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Daniel Shiffman, Nature of Code, \u0433\u043b. 5<\/strong>\u00a0\u2014 \u043b\u0443\u0447\u0448\u0438\u0439 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043f\u043e boids \u0438 steering \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u0433\u0440\u044b. \u0418\u00a0<strong>Sebastian Lague, Coding Adventure: Boids<\/strong>\u00a0\u043d\u0430 YouTube \u2014 \u043b\u0443\u0447\u0448\u0438\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 GPU-\u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430. \u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0448\u0435\u0441\u0442\u044c \u0434\u0435\u043c\u043e\u043a \u0440\u0443\u043a\u0430\u043c\u0438, \u0430 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u043a\u0430\u0434\u0440\u044b, \u2014\u00a0<a href=\"https:\/\/dev-math.ru\/articles\/crowd\/\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u0443\u0442<\/a>. \u0410 \u0435\u0449\u0451 \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b\u00a0<a href=\"https:\/\/t.me\/easy_dev_math\" rel=\"noopener noreferrer nofollow\">\u00ab\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0432 \u0433\u0435\u0439\u043c\u0434\u0435\u0432\u0435 \u043f\u043e-\u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443\u00bb<\/a>, \u0433\u0434\u0435 \u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e \u0442\u0430\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438. \u0417\u0430\u0445\u043e\u0434\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<p>\u041c\u043e\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0423 \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0442\u0443\u0434\u0438\u0439 \u0441\u0432\u043e\u0438 \u043d\u044e\u0430\u043d\u0441\u044b, \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0435 \u0441\u043e\u043b\u0432\u0435\u0440\u044b \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0445\u0430\u043a\u0438. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u0441 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0435\u0439 \u0442\u043e\u043b\u043f\u044b \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0435 \u0438\u043b\u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445, \u2014 \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1049500\/\">https:\/\/habr.com\/ru\/articles\/1049500\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u0440\u0438\u0448\u0430 \u0414\u044f\u0434\u0438\u0447\u0435\u043d\u043a\u043e, \u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c White Label Games. \u0423\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, AR\/VR \u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u043c \u0437\u0440\u0435\u043d\u0438\u0435\u043c \u2014 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044d\u0442\u043e \u0437\u0430\u043a\u0430\u0437\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430, \u043f\u043b\u044e\u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b \u043f\u043e \u0432\u0435\u0447\u0435\u0440\u0430\u043c, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0443\u043a\u0438.\u0421\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0432\u044b \u0441 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0432 \u0438\u0433\u0440\u0435 \u0443\u0436\u0435 \u0434\u0432\u0435\u0441\u0442\u0438 \u044e\u043d\u0438\u0442\u043e\u0432, \u0430 FPS \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0443\u0435\u0445\u0430\u043b, \u0445\u043e\u0442\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u0441\u0446\u0435\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0435\u0442? \u0418\u043b\u0438 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u043e\u0440\u0434\u0443 \u2014 \u043f\u043b\u043e\u0442\u043d\u0443\u044e, \u0441 \u0440\u0435\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u0443, \u043e\u0431\u0442\u0435\u043a\u0430\u044e\u0449\u0443\u044e \u0443\u043a\u0440\u044b\u0442\u0438\u044f \u2014 \u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0439\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043b\u0438\u0431\u043e \u0440\u0430\u0437\u0431\u0435\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u044b\u043b\u044c, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u043f\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0448\u0430\u0440\u0438\u043a \u0438 \u0435\u0434\u0435\u0442 \u0438\u043c \u043f\u043e \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u0435?\u0427\u0442\u043e\u0436, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u041a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0441\u043a\u0432\u043e\u0440\u0446\u043e\u0432 \u043d\u0430\u0434 \u0420\u0438\u043c\u043e\u043c \u0438 \u043f\u0440\u0438\u0447\u0451\u043c \u0442\u0443\u0442 \u043a\u043e\u0434, \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430 \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u0435\u0441\u0430\u043c\u0438, \u043a\u0430\u043a \u0441\u0435\u0442\u043a\u0430 \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u0435\u0442 O(N\u00b2) \u0438 \u0433\u0434\u0435 \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 ORCA \u0438 \u043a\u0430\u043a \u043e\u043d\u0430 \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435, \u043a\u0430\u043a steering behaviors \u0434\u0430\u044e\u0442 \u0430\u0433\u0435\u043d\u0442\u0443 \u0446\u0435\u043b\u044c \u0438 \u043e\u0431\u0445\u043e\u0434 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439, \u0438 \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0448\u0438\u043f\u043d\u0443\u0442\u044b\u0445 \u0438\u0433\u0440 \u043e\u0442 AC Unity \u0434\u043e World War Z.\u0411\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u0445\u043e\u0434: \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c \u00abAI \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044e\u043d\u0438\u0442\u0430\u00bb\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043b\u0435\u0437\u0442\u044c \u0432 \u043a\u043e\u0434, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432 \u043f\u0440\u0438\u0440\u043e\u0434\u0435. \u0415\u0441\u043b\u0438 \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a \u0441\u043b\u043e\u0432\u043e\u00a0murmuration, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0433\u0438\u0444\u043a\u0438 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0445 \u0441\u0442\u0430\u0439 \u0441\u043a\u0432\u043e\u0440\u0446\u043e\u0432\u00a0(Sturnus vulgaris), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u0435\u043d\u044c\u044e \u043d\u0430\u0434 \u043a\u0440\u044b\u0448\u0430\u043c\u0438 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u2014 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0430\u0434 \u0420\u0438\u043c\u043e\u043c \u2014 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0436\u0438\u0434\u043a\u0438\u0435 \u043e\u0431\u043b\u0430\u043a\u0430 \u0438\u0437 \u0442\u044b\u0441\u044f\u0447 \u043f\u0442\u0438\u0446. \u0421\u0442\u0430\u044f \u0438\u0437\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f, \u0434\u0435\u043b\u0438\u0442\u0441\u044f, \u0441\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0441\u043e\u043a\u043e\u043b\u0430 \u0437\u0430 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041d\u0430 \u0432\u0438\u0434\u0435\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0443 \u0432\u0441\u0435\u0439 \u0441\u0442\u0430\u0438 \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u043c\u043e\u0437\u0433.\u0418 \u0442\u0443\u0442 \u0440\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0430 \u043d\u0435\u0442 \u043b\u0438 \u0442\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430? \u041c\u043e\u0436\u0435\u0442, \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439 \u0441\u043a\u0432\u043e\u0440\u0435\u0446 \u0447\u0442\u043e-\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0443\u0435\u0442? \u041c\u043e\u0436\u0435\u0442, \u0435\u0441\u0442\u044c \u0432\u043e\u0436\u0430\u043a? \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u0430\u0435 \u043d\u0435\u0442. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0437\u044f\u0442\u0430\u044f \u043f\u0442\u0438\u0446\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u0430\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u043a\u0430\u0437\u043e\u0432 \u0441\u0432\u0435\u0440\u0445\u0443. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0442\u0430 \u0441\u0430\u043c\u0430\u044f\u00a0\u044d\u043c\u0435\u0440\u0434\u0436\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c: \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435 \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u043c\u043e\u0437\u0433\u0430, \u0430 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438.\u00a01987 \u0433\u043e\u0434\u0443 \u043d\u0430 SIGGRAPH \u0432\u044b\u0448\u043b\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u041a\u0440\u0435\u0439\u0433\u0430 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430 (Craig W. Reynolds) \u2014\u00a0\u00abFlocks, herds and schools: A distributed behavioral model\u00bb\u00a0(Computer Graphics 21(4):25\u201334). \u042d\u0442\u043e \u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430, \u0433\u0434\u0435 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043b\u0438\u00a0boids\u00a0\u2014\u00a0\u00abbird-oid objects\u00bb, \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0442\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0441\u0442\u0430\u044f. \u0422\u0435\u0440\u043c\u0438\u043d \u00abboids\u00bb \u0430\u0432\u0442\u043e\u0440 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0441\u0430\u043c \u043a\u0430\u043a \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u00abbird-oid\u00bb, \u0438 \u043e\u043d \u043f\u0440\u0438\u0436\u0438\u043b\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e \u0432\u044b \u0435\u0433\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0435 \u0432 \u043b\u044e\u0431\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043f\u043e \u0442\u043e\u043b\u043f\u0435.\u0418\u0434\u0435\u044f: \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0433\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043a \u043d\u0438\u043c \u0442\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u043c\u043e\u0437\u0433\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043f\u0442\u0438\u0446\u0430\u043c\u0438. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f.\u041d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0430\u00a0\u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430. \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0442\u0430\u043a \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0442\u0438\u0446, \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0441\u0442\u0430\u044e. \u0410 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438 \u0442\u0430\u043a \u043b\u0435\u0442\u0430\u044e\u0442 \u0436\u0438\u0432\u044b\u0435 \u0441\u043a\u0432\u043e\u0440\u0446\u044b \u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0435\u0449\u0451 \u043b\u0435\u0442 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c.\u041e\u0442\u0432\u0435\u0442 \u0434\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044f 2008 \u0433\u043e\u0434\u0430 \u2014\u00a0Ballerini et al., \u00abInteraction ruling animal collective behavior depends on topological rather than metric distance\u00bb\u00a0(PNAS 105(4):1232\u20131237). \u0418\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0438\u0435 \u0444\u0438\u0437\u0438\u043a\u0438 \u0438 \u0431\u0438\u043e\u043b\u043e\u0433\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430\u0434 \u0440\u0438\u043c\u0441\u043a\u0438\u043c\u0438 \u043a\u0440\u044b\u0448\u0430\u043c\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0435\u0440\u0435\u043e\u043a\u0430\u043c\u0435\u0440, \u0441\u043d\u044f\u043b\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0430\u0438 \u0432 \u043f\u043e\u043b\u0451\u0442\u0435 \u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 3D-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0442\u0438\u0446\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435. \u0418 \u0437\u0430\u0434\u0430\u043b\u0438 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0441\u043e\u0441\u0435\u0434\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043f\u0442\u0438\u0446\u0430, \u2014 \u044d\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438\u00a0\u043f\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e\u00a0(\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435) \u0438\u043b\u0438\u00a0\u043f\u043e \u0447\u0438\u0441\u043b\u0443\u00a0(\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435)? \u0422\u043e \u0435\u0441\u0442\u044c \u00ab\u0432\u0441\u0435, \u043a\u0442\u043e \u0431\u043b\u0438\u0436\u0435 \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u0440\u043e\u0432\u00bb \u0438\u043b\u0438 \u00ab\u0441\u0435\u043c\u044c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445, \u043d\u0435\u0432\u0430\u0436\u043d\u043e \u043a\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e\u00bb?\u041e\u0442\u0432\u0435\u0442: \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u0442\u0438\u0446\u0430 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430\u00a06\u20137 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0438 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u0438. \u0421\u0442\u0430\u044f \u0441\u0436\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0434 \u0430\u0442\u0430\u043a\u043e\u0439 \u0441\u043e\u043a\u043e\u043b\u0430 \u2014 \u0441\u043e\u0441\u0435\u0434\u0438 \u0441\u0442\u0430\u043b\u0438 \u0431\u043b\u0438\u0436\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438, \u043d\u043e \u0438\u0445 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u0435\u043c\u044c. \u0421\u0442\u0430\u044f \u0440\u0430\u0437\u043e\u0448\u043b\u0430\u0441\u044c \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u2014 \u0441\u043e\u0441\u0435\u0434\u0438 \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u0435\u043c\u044c.\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0441. \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441 \u0432 1987-\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u00a0\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00a0\u0440\u0430\u0434\u0438\u0443\u0441 \u2014 \u00ab\u0432\u0441\u0435, \u043a\u0442\u043e \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 R\u00bb. \u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u043e \u0443 \u0436\u0438\u0432\u044b\u0445 \u0441\u043a\u0432\u043e\u0440\u0446\u043e\u0432 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c, \u0438 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u043b\u0443\u0447\u0448\u0435: \u043e\u043d\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e \u043a \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u044e \u0446\u0435\u043b\u043e\u0439 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0441\u0438\u043b\u044c\u043d\u043e\u043c \u0441\u0436\u0430\u0442\u0438\u0438 \u2014 \u0440\u043e\u0432\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e.\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u0438\u0433\u0440\u0430\u0445 \u0438 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f\u0445 \u043f\u043e \u0441\u0435\u0439 \u0434\u0435\u043d\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014\u00a0\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435. \u042d\u0442\u043e \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435: \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u043e spatial hash. \u0425\u043e\u0442\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u2014 \u0431\u0435\u0440\u0451\u0442\u0435 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 (k \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439). \u0425\u043e\u0442\u0438\u0442\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u2014 \u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0435\u0441\u0442\u044c, \u043d\u043e \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430\u044f.\u0423 \u0440\u044b\u0431 \u0432 \u043a\u043e\u0441\u044f\u043a\u0435 \u0438 \u0443 \u0441\u0430\u0440\u0430\u043d\u0447\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u043d\u043e\u00a0\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0443 \u043d\u0438\u0445 \u0434\u0440\u0443\u0433\u043e\u0439: \u0443 \u0440\u044b\u0431 \u043f\u043e\u043c\u0438\u043c\u043e \u0437\u0440\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u0431\u043e\u043a\u043e\u0432\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u2014 \u043e\u0440\u0433\u0430\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u043e\u0432\u0438\u0442 \u0433\u0438\u0434\u0440\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0432 \u0432\u043e\u0434\u0435 (\u044d\u0442\u0438\u043c, \u043a\u0441\u0442\u0430\u0442\u0438, \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f Iain Couzin \u0432 \u041f\u0440\u0438\u043d\u0441\u0442\u043e\u043d\u0435). \u0410 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u043e\u043b\u043f\u0430 \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u043e\u0439, \u043b\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u043c \u0438 \u0442\u044b\u0441\u044f\u0447\u0435\u0439 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0449\u0435\u0439. \u0422\u0430\u043a \u0447\u0442\u043e boids \u2014 \u044d\u0442\u043e \u043f\u0440\u043e \u043f\u0442\u0438\u0446 \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u044e\u043d\u0438\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0438\u0437\u0438\u043a\u0430 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u043b\u043f\u044b.\u0422\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430: separation, alignment, cohesion\u041f\u0430\u0440\u0430\u0434\u043e\u043a\u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0441\u0442\u0430\u0438 \u044f \u0443\u0436\u0435 \u043f\u0440\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b: \u0432\u0441\u0435 \u043b\u0435\u0442\u044f\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e, \u043d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u043a\u0435\u043c \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442. \u041e\u0442\u043a\u0443\u0434\u0430 \u0442\u043e\u0433\u0434\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c? \u041e\u0442\u0432\u0435\u0442 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430: \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0433\u0435\u043d\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0442\u0440\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0443 \u043d\u0430 \u0445\u0432\u043e\u0441\u0442. \u041b\u0435\u0442\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0442\u0443 \u0436\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0447\u0442\u043e \u0441\u043e\u0441\u0435\u0434\u0438. \u041d\u0435 \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u0442\u044c \u043e\u0442 \u0433\u0440\u0443\u043f\u043f\u044b. \u042d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0430\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443, \u0438\u00a0\u0431\u0430\u043b\u0430\u043d\u0441\u043e\u043c \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0439\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043a\u0430\u043a \u0441\u0442\u0430\u044e.\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u2014 \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0430 \u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0430\u0433\u0435\u043d\u0442\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0451 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u0435\u0441\u0430\u043c\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0441\u0438\u043b\u0443.Separation \u2014 \u00ab\u043d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0439 \u043d\u0430 \u043d\u043e\u0433\u0438\u00bb.\u00a0\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043b\u0438\u0437\u043a\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0442 \u043d\u0435\u0433\u043e \u043a \u043d\u0430\u043c. \u0427\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0441\u043e\u0441\u0435\u0434 \u2014 \u0442\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u0435\u0435. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e\u00a0(self.pos &#8212; j.pos) \/ dist\u00b2, \u0438\u043b\u0438, \u0447\u0442\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435,\u00a0normalize(self.pos &#8212; j.pos) \/ dist.Alignment \u2014 \u00ab\u0441\u043c\u043e\u0442\u0440\u0438, \u043a\u0443\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u044f\u0442 \u0441\u043e\u0441\u0435\u0434\u0438\u00bb.\u00a0\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c \u0441\u0432\u043e\u044e \u043a \u043d\u0435\u0439:\u00a0avg.vel &#8212; self.vel. \u0411\u0435\u0437 alignment \u0441\u0442\u0430\u044f \u043b\u0435\u0442\u0438\u0442, \u043d\u043e \u043d\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043b\u0430\u043a\u0430 \u0442\u043e\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u0435\u0432\u0435\u043b\u044f\u0442\u0441\u044f. \u0421 \u043d\u0438\u043c \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0438\u0439\u00a0heading\u00a0\u0438 \u0447\u0451\u0442\u043a\u043e\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u00ab\u043a\u0443\u0434\u0430 \u043b\u0435\u0442\u0438\u043c\u00bb.Cohesion \u2014 \u00ab\u043d\u0435 \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u0439\u00bb.\u00a0\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0446\u0435\u043d\u0442\u0440 \u043c\u0430\u0441\u0441 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0442\u044f\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0435\u043c\u0443:\u00a0avg.pos &#8212; self.pos. \u0411\u0435\u0437 cohesion \u0441\u0442\u0430\u044f \u043d\u0435 \u0441\u0446\u0435\u043f\u043b\u0435\u043d\u0430 \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u044b \u0438 \u043e\u0434\u0438\u043d\u043e\u0447\u0435\u043a.\u0412\u0441\u0435 \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u0441\u043e\u0441\u0435\u0434\u044f\u043c.\u00a0Vector3 sep = Vector3.zero, ali = Vector3.zero, coh = Vector3.zero;int count = 0;foreach (var other in neighbors) {    Vector3 d = transform.position &#8212; other.position;    float dist = d.magnitude;    if (dist &gt; 0f &amp;&amp; dist &lt; sepRadius)        sep += d.normalized \/ dist;   \/\/ \u0431\u043b\u0438\u0436\u0435 \u2192 \u0441\u0438\u043b\u044c\u043d\u0435\u0435    ali += other.velocity;    coh += other.position;    count++;}if (count &gt; 0) {    ali = (ali \/ count) &#8212; velocity;    coh = (coh \/ count) &#8212; transform.position;}velocity += wSep * sep + wAli * ali + wCoh * coh;velocity = Vector3.ClampMagnitude(velocity, maxSpeed);transform.position += velocity * Time.deltaTime;\u041e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441\u2014 \u044d\u0442\u043e\u00a0d.normalized \/ dist. \u041f\u043e \u0444\u043e\u0440\u043c\u0435 \u044d\u0442\u043e\u00a0\u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e\u00a0d \/ dist\u00b2, \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u041f\u0435\u0440\u0432\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043d\u0430 \u044f\u0441\u043d\u0435\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043c\u044b\u0441\u043b: \u00ab\u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u0430, \u043f\u043e\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00bb.\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0432\u0435\u0441\u0430 \u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445:\u0422\u043e\u043b\u044c\u043a\u043e separation.\u00a0\u0422\u043e\u043b\u043f\u0430 \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0442\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u0435\u0442 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u2014 \u0440\u0430\u0437\u043b\u0435\u0442\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043f\u044b\u043b\u044c. \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430: \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u0436\u0438\u0432\u043e\u0435.\u0422\u043e\u043b\u044c\u043a\u043e alignment.\u00a0\u0422\u043e\u043b\u043f\u0430 \u0438\u0434\u0451\u0442 \u0441\u0442\u0440\u043e\u0439\u043d\u043e, \u043d\u043e\u00a0\u043d\u0435 \u0441\u0446\u0435\u043f\u043b\u0435\u043d\u0430. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u044b, \u043d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043e\u0442\u0441\u0442\u0430\u0432\u0448\u0438\u0445. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0430\u0440\u0430\u0434, \u0430 \u043d\u0435 \u043d\u0430 \u0441\u0442\u0430\u044e.\u0422\u043e\u043b\u044c\u043a\u043e cohesion.\u00a0\u0422\u043e\u043b\u043f\u0430 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u0447\u043a\u0443. \u0412\u0441\u0435 \u043f\u0440\u0438\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u0446\u0435\u043d\u0442\u0440\u0443, \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u043d\u0430 \u043d\u043e\u0433\u0438 (separation-\u0442\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d), \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u043f\u0443\u043b\u044c\u0441\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0440\u0438\u043a.\u0412\u0441\u0435 \u0442\u0440\u0438 \u0432 \u0431\u0430\u043b\u0430\u043d\u0441\u0435.\u00a0\u0416\u0438\u0432\u0430\u044f \u0441\u0442\u0430\u044f. \u0422\u0430 \u0441\u0430\u043c\u0430\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0445\u043e\u0442\u0438\u043c.\u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043f\u043e \u0432\u0435\u0441\u0430\u043c \u2014 \u0440\u0430\u0432\u043d\u044b\u0435\u00a0wSep = wAli = wCoh = 1.0, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0447\u0442\u043e \u0432\u0441\u0435 \u0442\u0440\u0438 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0436\u0438\u0432\u0443\u0442 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u0435. \u0414\u0430\u043b\u044c\u0448\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0435 \u043f\u043e\u0434 \u0441\u0432\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443.\u0413\u0434\u0435 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0433\u0440\u0430\u0445? \u041a\u043e\u0441\u044f\u043a\u0438 \u0440\u044b\u0431 \u0432 Subnautica \u2014 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0447\u0442\u0438 \u0447\u0438\u0441\u0442\u044b\u0445 boids: \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u0441\u0442\u0430\u044f \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f-\u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438 \u0448\u0430\u0440\u0430\u0445\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0438\u0433\u0440\u043e\u043a\u0430. \u041f\u0442\u0438\u0446\u044b \u0438 \u043f\u0440\u043e\u0447\u0430\u044f ambient-\u0444\u0430\u0443\u043d\u0430 \u0432 Far Cry \u0438 RDR2 \u2014 boids \u043f\u043e\u0432\u0435\u0440\u0445 spline-\u043f\u0430\u0442\u0440\u0443\u043b\u0435\u0439. \u041e\u0442\u0440\u044f\u0434\u044b \u0432 Total War \u2014 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 boids \u043f\u043e\u0432\u0435\u0440\u0445 \u0441\u0442\u0440\u043e\u0435\u0432\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u044b\u0445 boids \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u0442\u0430\u043c \u043d\u0435\u0442: \u043f\u043e\u0432\u0435\u0440\u0445 \u043b\u0435\u0436\u0430\u0442 flow fields \u0434\u043b\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, FSM \u0434\u043b\u044f \u0441\u043c\u0435\u043d\u044b \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u043b\u0432\u0435\u0440\u044b \u0434\u043b\u044f \u0442\u0435\u0441\u043d\u043e\u0439 \u0442\u043e\u043b\u043f\u044b. \u041d\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0439 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0442\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u0418 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u00abboids \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442\u00bb \u2014 \u0432 \u0434\u0435\u0432\u044f\u0442\u0438 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0437 \u0434\u0435\u0441\u044f\u0442\u0438 \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u043a\u0440\u0438\u0432\u044b\u0435 \u0432\u0435\u0441\u0430, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043b\u0438\u0431\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b \u043c\u043e\u043b\u0447\u0430 \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u043e\u0441\u044c \u0438\u0437-\u0437\u0430 \u0431\u0430\u0433\u0430.\u041d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043f\u043e\u043b\u0435 boids \u043b\u0435\u0442\u0430\u044e\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u041d\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0433\u0440\u0435, \u0432\u044b\u043b\u0435\u0437\u0430\u044e\u0442 \u0442\u0440\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0433\u0434\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0443\u0436\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442. \u0412\u00a0\u0443\u0437\u043a\u0438\u0445 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0430\u0445\u00a0\u0434\u0432\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 \u0437\u0430\u043b\u0438\u043f\u0430\u044e\u0442 \u2014 separation \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0442\u044c. \u041d\u0430\u00a0\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0430\u0433\u0435\u043d\u0442\u043e\u0432\u00a0\u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0443\u0431\u0438\u0432\u0430\u0435\u0442 FPS. \u0418 \u043a\u043e\u0433\u0434\u0430 \u044e\u043d\u0438\u0442\u0430\u043c \u043d\u0443\u0436\u043d\u043e\u00a0\u0438\u0434\u0442\u0438 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0446\u0435\u043b\u0438, \u0447\u0438\u0441\u0442\u044b\u0435 boids \u0435\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e\u0442. \u042d\u0442\u0438\u043c \u0442\u0440\u0451\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c \u0438 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b.O(N\u00b2), spatial hash \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f\u041e\u043a\u0435\u0439. \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u0432\u0435\u0441\u0430 \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f, \u0441\u0442\u0430\u044f \u043c\u0443\u0442\u0438\u0442\u0441\u044f. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442.\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0433\u0435\u043d\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u0442\u043e \u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0438, \u2014 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0420\u0435\u0439\u043d\u043e\u043b\u044c\u0434\u0441\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f. \u0421\u0430\u043c\u043e\u0435 \u043d\u0430\u0438\u0432\u043d\u043e\u0435 \u2014 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0430\u0433\u0435\u043d\u0442\u0430\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u042d\u0442\u043e\u00a0O(N\u00b2)\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u043a\u0430\u0434\u0440.\u041f\u0440\u0438\u043a\u0438\u043d\u0435\u043c \u0446\u0438\u0444\u0440\u044b. N=100 \u2014 \u0434\u0435\u0441\u044f\u0442\u044c \u0442\u044b\u0441\u044f\u0447 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a. N=500 \u2014 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430. N=1000 \u2014 \u043c\u0438\u043b\u043b\u0438\u043e\u043d. N=5000 \u2014 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043f\u044f\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438\u00a0\u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440, \u0430 \u043f\u0440\u0438 \u0448\u0435\u0441\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438 \u043a\u0430\u0434\u0440\u0430\u0445 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u044d\u0442\u043e \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0418 \u044d\u0442\u043e\u00a0\u0434\u043e\u00a0\u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451 \u2014 \u0440\u0435\u043d\u0434\u0435\u0440, \u0444\u0438\u0437\u0438\u043a\u0443.\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443 \u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430, \u0434\u0432\u0438\u0436\u043a\u0430, \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0449\u0435\u0439. \u041d\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043d\u044f\u0442\u0435\u043d: \u043f\u0440\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0435 \u043a\u0430\u0434\u0440\u0430 \u0432 16.7 \u043c\u0441 (\u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c 60 FPS) \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u2014 \u0443\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u0430\u044f \u0434\u043e\u043b\u044f. \u0410 \u043c\u044b \u0432\u0435\u0434\u044c \u0445\u043e\u0442\u0438\u043c \u0442\u044b\u0441\u044f\u0447\u0438 \u044e\u043d\u0438\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0441\u043e\u0442\u043d\u0438.\u0418\u0434\u0435\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u0415\u0441\u043b\u0438 \u0440\u0430\u0434\u0438\u0443\u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438\u00a0r\u00a0\u2014 \u044d\u0442\u043e, \u0441\u043a\u0430\u0436\u0435\u043c, \u043f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0442\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-484248","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/484248","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=484248"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/484248\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=484248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=484248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=484248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}