Бұл жазба автоматты түрде аударылған. Бастапқы тіл: Орысша
Ойын анимацияларымен жұмыс істегенде, тіпті тәжірибелі аниматорлар қателіктер мен қателіктер жібереді. G5 Games осындай мәселелерден аулақ болуды үйренді. Ол өз тәжірибесімен бөліскісі келеді Михаил Шлыков, Spine аниматоры. Spine-мен жұмыс істеген 8 жыл ішінде ол анимацияны біріктірудің негізгі қателіктерін және оларды шешу жолдарын анықтады.
Қолданылатын ойын қозғалтқышы мен анимациялық редакторға қарамастан, кез-келген жобада анимацияның өнімділігі мен дисплейіне қатысты мәселелер туындауы мүмкін. Біз Spine анимацияларын ойын қозғалтқышына біріктіру кезінде жиі кездесетін мәселелер туралы сөйлесеміз, сонымен қатар анимацияларды оңтайландырудың негізгі әдістерін ұсынамыз. Бұл мақала анимацияларды экспорттаумен айналысатын Spine аниматорларына да, ойын қозғалтқыштарындағы анимациялармен жұмыс істейтін әзірлеушілерге де пайдалы болады. Сипатталған принциптердің көпшілігі Spine-ден басқа анимациялық редакторларға да қатысты.
Қаңқа 2D анимациясын жасау үшін Spine, DragonBones, Blender COA Tools, Rive және кірістірілген Unity редакторы жиі қолданылады. Мұндай анимацияның басты артықшылығы-суреттерді бірнеше рет пайдалану мүмкіндігі, бұл жедел жадта сақталған графика көлемін үнемдеуге мүмкіндік береді. Бұл идея ресурстарды пайдалануды барынша оңтайландырудың негізінде жатыр. Қазірдің өзінде қатысқан элементтерді қайта пайдалану анимациялардың көрнекі тартымдылығын сіз жасаған графиканың көлемін арттырмай арттыруға мүмкіндік береді.
Бұл мысалда жарылыс анимациясы тек төрт кескіннің көмегімен жасалады.
Таңдалған редакторға қарамастан, ережелердің жиынтығы бар, оларды сақтау қателіктермен күресуге уақыт жоғалтпауға көмектеседі.
- Жобаның атауы және тәртібі
Операциялық жүйеде анимациялық файлдарды сақтаудың барлық элементтерінің, аттачменттерінің және жолдарының атаулары әрқашан латын тілінде, Бос орындар мен арнайы белгілерсіз болуы керек. Әр түрлі қозғалтқыштар әр түрлі кодтаумен жұмыс істей алады, бірақ латын – бұл барлық жерде қолданылатын әмбебап атау әдісі.
Сонымен қатар, жобадағы тәртіпті сақтау және элементтерге оңай оқылатын атаулар беру маңызды. Бұл бастапқы файлдарды басқа аниматорларға тасымалдауды жеңілдетеді және болашақта Spine-дегі кез келген алдыңғы жобаңызға оралу қажет болса, өзіңіз үшін жұмысты жеңілдетеді. Сіз оны ұзақ уақыт өткеннен кейін де тезірек және оңай басқара аласыз.
- Суреттерді сақтау жолдары
Экспорт кезінде аттачменттерді жоғалтудың себептерінің бірі абсолютті жолдар болып табылады. Атласқа орау дұрыс болуы үшін суреттер қалтасына салыстырмалы жолды көрсету ұсынылады.
- Суреттермен және олардың метадеректерімен жұмыс
Жұмысты бастамас бұрын графикалық редакторда кездейсоқ жасалған пайдаланылмаған бос орындардың бар-жоғын әрдайым тексеріп отыру керек. Тіпті бір кездейсоқ мөлдір пиксель графикамен жұмыс істеуді қиындатып, соңғы Атластың өлшемдері мен салмағын арттыруы мүмкін. Атлас өлшемін азайтудың бір жолы-көпбұрышты қаптама, онда суреттер олардың тор өлшемдерінің шекараларын ескере отырып оралады.
Атласты ораудың бұл әдісі үшін барлық аттракциондар торға айналады және оның көмегімен бос жерлер кесіледі. Бұл жобадағы үшбұрыштардың көбеюіне әкеледі, оларды жеке-жеке бақылау және дұрыс орау әдісін таңдау керек.
PNG кескіндеріндегі метадеректер Атластың салмағын едәуір арттырып, осындай графикамен жұмыс істегенде омыртқадағы фриздерге әкелуі мүмкін. Photoshop to Spine сценарийінің ескі нұсқалары метадеректерді PNG-ге жазды, егер бұл функция Photoshop-та әдепкі бойынша өшірілмеген болса. Экспортталғаннан кейін PNG кескіндерінің салмағын ескеру және тексеру керек.
- Бастапқы графиканың өлшемі
Көбінесе бастапқы графика анимация үшін көбірек ажыратымдылықта беріледі. Анимациямен қосымша әрекеттерді азайту үшін қозғалтқышта қандай соңғы өлшем қолданылатынын алдын ала білу маңызды. Бұл анимация жасалғаннан кейін қаңқа өлшемі мен экспортталатын графиканың Spine-ге сәйкес келуіне жол бермейді. Графикалық редактордан экспортталғанға дейін графиканың өлшемін өзгерту қазірдің өзінде реттелген ригті қайта жасаудан әлдеқайда оңай.
Майкл әртүрлі ойын қозғалтқыштарымен жұмыс істеді – Unity, Pixie, Godot, Cocos Creator, сондай-ақ G5 Games-те реттелетін қозғалтқыш. Осы уақыт ішінде ол Spine элементтерінің өнімділікке әсер етуінің әмбебап рейтингін анықтады.
1-маскалар
Маскаларды пайдалану кезінде ең көп ресурстарды қажет ететін процесс-Draw Call құру-бұл визуалды көрсету үшін графикалық API сұранысы. Осы кезде экранда көрсетілетін барлық деректер жиналады және талданады, ал есептеулер CPU және GPU жағында орындалады. Жүктеменің көп бөлігі сұранысқа дайындық процесінде болады. Жобада масканың болуы екі қосымша сурет сұрауын тудырады. Маска нүктелерінің саны және оның анимациясы сұраныстардың өзінен және жасырын кескін аумағынан айырмашылығы өнімділікке әрең әсер етеді.
2-араластыру режимдері
Ойын қозғалтқыштары кескін түстерін көбейту арқылы әртүрлі жұмыс істейді, сондықтан қалыпты емес режимдердің әсері әртүрлі болуы мүмкін. Егер Additive, Multiply және Screen режимдері бар слоттар болса, қосымша сурет сұрауы жасалады. Осы сәттегі жүктеме мөлшері осы режимдерді қолданатын кескіндердің ауданына байланысты.
3-меш шыңдарының Саны
Әр нүктенің өзіндік координаттары бар және тормен әрекеттескен сайын бұл координаттар жеке сүйек сияқты әрекет етеді. Әрбір аттачмент, тіпті торға айналмаса да, 4 шыңға ие, сондықтан шыңдар санының артуы қозғалтқышта қосымша есептеулерге әкеледі, бұл процессорды жүктейді. А тор нүктелерінің қолмен деформациясы, сүйектерге байланбай, тор шыңдарының әрқайсысы үшін бөлек уақыт сызығын жасауға әкеледі. Торлармен жұмыс істеудің қосымша мүмкіндігі Linked mesh болып табылады, ол торлар үшін жаңа уақыт сызықтарын жасамай немесе оларды CPU жағында қайта есептемей-ақ бірдей өлшемдегі кескіндер үшін тор күйін мұра етуге мүмкіндік береді.
4 — Bounding Box
Көптеген қозғалтқыштарда, Bounding Box болмаған кезде, ол әр анимациялық кадр үшін динамикалық түрде жасалады, бұл өнімділікке қатты әсер етеді. Сондықтан Bounding Box-ты Spine-де қолмен жасаған дұрыс. Сонымен қатар, Bounding Box-тың болуы анимациялық нысанды экраннан шыққан кезде жадтан шығаруға мүмкіндік береді, бұл өнімділікті арттырады.
5 — Constraints
Қозғалтқыштағы FK және IK констрейндері сүйектердің орналасуына әсер ететін математикалық құрылым болып табылады. Олардың болуы процессорға қосымша есептеулер қосады. Өнімділікке әсер ете отырып, констраиндердің әрқайсысын он қосымша сүйекпен салыстыруға болады.
6-Жолдар
Қозғалтқыш жағында жол-бұл сегменттердің әрқайсысы төрт нүктеден тұратын текше Безье қисығы. Құрылысқа CPU қатысады, бірақ қисықтар сүйектердің орналасуымен бірдей құрылыс принципін қолданады, тек визуалды бейнелеуде және қосымша қисық басқару элементтерінде айырмашылықтар бар.
7-сүйектер
Сүйек-бұл кеңістікте қозғалатын және координаттарды бақылау үшін қозғалтқышқа деректерді жібере алатын минималды есептеу бірлігі. Әрбір сүйек CPU өңдеу үшін деректерді қосады: сүйектер неғұрлым көп болса, соғұрлым көп деректер массивімен жұмыс істеу керек.
8-терілер
Мұқабалар пайдаланылған аттачмент жиынтығының визуалды дисплейі болып табылады. Қозғалтқыш жағында олар аттракциондар мен сүйектерді, сондай-ақ олардың қасиеттерін ауыстыру үшін маркерлер қосады.
9-слоттар
Слоттар-аттачменттерді сақтауға арналған контейнерлер. Слоттар сүйексіз қозғала алмайтындықтан, олар ең аз ресурстарды қажет етеді. Негізгі жүктеме GPU-ға түседі, өйткені кеңістікте қозғалуға арналған уақыт сызықтары жасалмайды.
Анимацияны экспорттамас бұрын, барлық артық және пайдаланылмаған элементтердің (сүйектер, слоттар, аттачменттер, фондық файлдар, қосымша пайдаланылмаған анимациялар) Spine жобасынан және кескін қалтасынан жойылғанына көз жеткізу керек.
Жасалған Атластың мөлшері екіге еселік болуы керек. Егер анимация мобильді құрылғыларда пайдалану үшін жасалса, оның өлшемі ұзын жағында 2048 пиксельден аспауы керек. Бұл шектеу Apple құрылғыларында ұзын жағында 2048 пиксельден астам кескіндерді көрсете алмауымен байланысты.
Экспортталғаннан кейін жиі кездесетін графикалық мәселелердің бірі-PNG кескіндерінің айналасындағы артефактілер, мысалы, қара соққылар және мөлдір пиксельдері бар ақ жарқылдар.
Мұның себебі жобадағы Альфа материалының режимдері мен экспортталған анимацияның сәйкес келмеуінде жатыр. Альфаның жұмыс режиміне Premultiply alpha және Bleed параметрлері жауап береді. Экспорттау кезінде опция ойын қозғалтқышындағы жоба параметрлеріне байланысты таңдалуы керек.
Экспорттау кезінде графикалық артефактілердің тағы бір түрі — кескінді кесудің өткір сызықтары. Мұның себебі суреттерде шегіністердің болмауы болуы мүмкін. Бұл X және Y осьтеріндегі шегіністерді ұлғайту арқылы түзетіледі.
Анимацияның дұрыс көрсетілмеуі анимацияны тазарту мүмкіндігінен туындауы мүмкін. Бұл мүмкіндік анимацияның артық кілттерін автоматты түрде жояды, бұл анимацияны айтарлықтай оңтайландырады. Алайда, кейде бұл Аттракциондардың дұрыс көрсетілмеуіне немесе сүйектердің дұрыс орналаспауына әкелуі мүмкін. Бұл анимацияны ауыстырған кезде сүйек күйінің тұқым қуалауына байланысты. Күй мұрагері ойын қозғалтқышында реттеледі және бұл мәселе әрқашан әзірлеушімен талқылануы керек.
Анимацияны құру кезінде оңтайландыру басты мақсат болмауы керек, өйткені анимациялардың көркемдік экспрессивтілігі басқаша зардап шегеді және біз өзімізді қолданылатын құралдармен шектей бастаймыз. Тиісті себептерсіз ештеңені оңтайландырудың қажеті жоқ, әйтпесе бұл уақытты ысырап етеді. Мәселеге ақылмен қарау керек және алдын-ала шекті мәндерді анықтау керек. Егер рұқсат етілген мәндерден асып кетсе және нақты өнімділік проблемалары болса, оңтайландыруға күш жұмсау керек. Кейде тіпті эффектілері бар өте ауыр анимациялар жақсы көрінеді және сахнада одан басқа ештеңе болмаса, өнімділікке әсер етпейді.
Сондықтан, біз нақты өнімділік проблемалары бар соңғы кезеңде оңтайландыруды бастауға кеңес береміз, қолданылатын құралдарға балама тауып, элементтерді азайту арқылы өнімділікті арттырамыз.
Артықты жою-оңтайландырудың негізгі әдісі. Көбінесе Ригада біз Риганың ұтқырлығы мен үлкен мүмкіндіктерін арттыру үшін күрделі құрылымдар жасаймыз. Қажетті анимацияларды жасағаннан кейін, біз ригтің барлық мүмкіндіктерін пайдалана алмауымыз мүмкін. Бұл жағдайда өнімділікті арттыру үшін ригті жеңілдетіңіз.
- Жалған қосу режимі
Кейде кескіндерді араластыру режимдерін пайдалану мүмкіндігі шектеулі және балама нұсқаларды табуға тура келеді. Мұндай жағдайларда эффектілер пісірілген қосымша аттачменттерді пайдалану көмектеседі. Әдіс additive эффектісі негізгі объектінің шекарасынан шықпаған кезде қолданылады. Ол үшін setup режимінде қажетті аттачменттерге қабаттасу әсері қолданылады және PNG ретінде экспортталады. Кейін additive режимі бар аттачменттер бұрын алынған суреттермен ауыстырылады, бірақ қалыпты режимде.
- Артық тор нүктелерін жою
Торлы Ригада қисықтардың тегістігін және графикамен жұмыс істеу кезінде үлкен мүмкіндіктерді арттыру үшін нүктелер жиі жасалады. Бірақ анимациядан кейін тор оңайырақ болуы мүмкін екен. Егер біз кез-келген нүктені алып тастасақ, визуалды түрде ешқандай айырмашылық жоқ. Артық нүктелерді жою анимацияның жұмысына оң әсер етеді.
- Анимациядағы аттачменттерді өшіру
Аттачментті жасыру және оны мөлдірлікке апару қажет болған жағдайда, тек мөлдір қалдырмай, бұл аттчментті әрқашан өшіру керек. Бұл жадты босатуға және GPU-дағы жүктемені азайтуға мүмкіндік береді, өйткені тіпті мөлдірлікке енгізілген аттачмент рендерингті есептеуге қатысады және әр сурет сұрауында өңделеді.
- Кадрларды қысқарту
Анимациядағы секвенцияларды қолдана отырып, көбінесе жоғары секвенция мен төмен кадр арасындағы айырмашылық мобильді құрылғыларда аз байқалады. Сондықтан секвенцияның артық кадрларын алып тастау атласты азайтып қана қоймай, өнімділікті арттырады. Анимацияның тегіс болуы үшін секвенция кадрларын тормен бұрмалауға немесе кәдімгі контейнер ретінде секвенциядан шығаруға және сүйектермен анимациялауға болады — оларды үлкейту, жылжыту және еңкейту.
- Фондық графика мен эффектілердің өлшемін азайту
Қатты фондық кескіндерді және бұлыңғыр жиектері бар кескіндерді (бұлттар, жарқылдар, жарық сәулелері, көлеңкелер және т.б.) екі немесе одан да көп есе азайтуға болады, олардың өлшемін spine-дегі скейлмен қалпына келтіруге болады. Бұл Атластың көлемін азайтуға және жедел жады мен сақталған құрылыс графикасының көлемін босатуға мүмкіндік береді.
- Экспорттау форматын таңдау
Жобаны қалыптастыру кезеңінде экспортталатын анимация форматына артықшылық екілік форматқа берілуі керек .skel. Форматтан айырмашылығы .json оның көлемі аз және қозғалтқыш тезірек оқиды. Әрбір анимация кілті-объектілердің орналасуы мен қасиеттерін анықтайтын сандар жиынтығы. Екілік жүйедегі бір Сан-бұл 4 байт ақпарат .json форматы-8-9 байт. Анимация кезінде осы мәндерге бірнеше рет жүгінген кезде айырмашылық айтарлықтай болуы мүмкін.
Әзірлеушілермен және суретшілермен қарым-қатынас жасау, сондай-ақ барлық мүмкін шектеулер мен талаптарды анықтау сапалы анимацияларды құруда шешуші рөл атқарады. Командамен тығыз қарым-қатынас ықтимал мәселелер мен талаптарды алдын-ала анықтауға көмектеседі, бұл көптеген қателіктерден аулақ болуға және жұмыс уақытының едәуір мөлшерін үнемдеуге мүмкіндік береді. Жұмыстың осы маңызды аспектісін назардан тыс қалдырмаңыз және сіздің жобаларыңыз сәтті және тиімді болады.
G5 компаниясы жаңа жобаларды кеңейтуге және құруға ұмтылады. Біз әрқашан жаңа суретшілерді іздейміз. Егер сіз дамып келе жатқан ойын саласында өзіңізді сынап көргіңіз келсе, бізге қосылыңыз!
При работе с игровыми анимациями даже опытные аниматоры допускают ошибки и баги. В G5 Games научились избегать подобных проблем. Своим опытом хочет поделиться Михаил Шлыков, Spine-аниматор. За 8 лет работы со Spine он определил главные ошибки интеграции анимации и пути их решения.
Проблемы с производительностью и отображением анимаций могут возникнуть в любом проекте, независимо от используемого игрового движка и анимационного редактора. Мы расскажем о часто встречающихся проблемах при интеграции Spine-анимаций в игровой движок, а также предложим базовые методы оптимизации анимаций. Эта статья будет полезна как Spine-аниматорам, занимающимся экспортом анимаций, так и разработчикам, работающим с анимациями в игровых движках. Многие из описанных принципов также применимы к другим редакторам анимации, помимо Spine.
Для создания скелетной 2D-анимации часто используют Spine, DragonBones, Blender COA Tools, Rive и встроенный редактор Unity. Основным преимуществом такой анимации является возможность многократно использовать изображения, что позволяет экономить объем графики, хранимой в оперативной памяти. Эта идея лежит в основе максимальной оптимизации использования ресурсов. Повторное использование уже задействованных элементов позволяет повысить визуальную привлекательность анимаций без увеличения объема создаваемой графики.
В данном примере анимация взрыва создана с использованием всего четырех изображений.
Независимо от выбранного редактора, существует набор правил, соблюдение которых поможет вам заранее избежать трат времени на борьбу с багами.
- Нейминг и порядок проекта
Имена всех элементов, аттачментов и путей хранения анимационных файлов в операционной системе всегда должны быть на латинице, без пробелов и спецсимволов. Разные движки могут работать с разными кодировками, но латиница – это универсальный метод нейминга, поддерживаемый везде.
Кроме того, важно следить за порядком в проекте и давать элементам легко читаемые названия. Это облегчит передачу исходных файлов другим аниматорам и упростит работу вам самим, если в будущем придется вернуться к какому-либо своему предыдущему проекту в Spine. Вы сможете быстрее и легче ориентироваться в нем даже спустя продолжительное время.
- Пути хранения изображений
Одной из причин потери аттачментов при экспорте являются абсолютные пути. Чтобы упаковка в атлас была корректной, рекомендуется указывать относительный путь к папке с изображениями.
- Работа с изображениями и их метаданными
Перед началом работы всегда следует проверять графику на наличие неиспользуемых пустых пространств, случайно созданных в графическом редакторе. Даже один случайный полупрозрачный пиксель может усложнить работу с графикой и увеличить размеры и вес итогового атласа. Один из способов уменьшения размеров атласа — полигональная упаковка, при которой изображения пакуются с учетом границ размера их меша.
Для этого метода упаковки атласа все аттачменты преобразуются в меш и с его помощью обрезаются пустые зоны. Этот приведет к увеличению количества треугольников в проекте, что следует контролировать и выбирать подходящий способ упаковки индивидуально.
Метаданные в PNG-изображениях могут значительно увеличить вес атласа и привести к фризам в Spine при работе с такой графикой. Старые версии скрипта Photoshop to Spine записывали метаданные в PNG, если эта функция не была отключена в Photoshop по умолчанию. Этот момент следует учитывать и проверять вес PNG-изображений после экспорта.
- Размер исходной графики
Часто исходная графика предоставляется для анимации в большем разрешении. Чтобы минимизировать лишние действия с анимацией, важно заранее узнать, какой итоговый размер будет использоваться в движке. Это позволит избежать подгонки размера скелета и экспортируемой графики в Spine после создания анимации. Изменить размер графики до экспорта из графического редактора гораздо проще, чем переделывать уже настроенный риг.
Михаил работал с разными игровыми движками – Unity, Pixie, Godot, Cocos Creator, а также с кастомным движком в G5 Games. За это время он выявил свой универсальный рейтинг влияния элементов Spine на производительность.
1 — Маски
Наиболее ресурсозатратным процессом при использовании масок является создание Draw Call — это запрос к графическому API на рендеринг визуала. В этот момент происходит сбор и анализ всех данных для отображения на экране, а вычисления выполняются на стороне CPU и GPU. Большая часть нагрузки приходится на сам процесс подготовки к запросу. Наличие маски в проекте генерирует два дополнительных запроса на отрисовку. Количество точек маски и её анимация почти не влияют на производительность, в отличие от самих запросов и площади скрываемых изображений.
2 — Режимы наложения
Игровые движки по-разному работают с умножением цветов изображений, поэтому влияние режимов, отличных от Normal, может различаться. При наличии слотов с режимами Additive, Multiply и Screen создается дополнительный запрос на отрисовку. Степень нагрузки в этот момент зависит от площади изображений, использующих эти режимы.
3 — Количество вершин меша
Каждая точка имеет свои собственные координаты, и при каждом взаимодействии с мешем эти координаты ведут себя как отдельная кость. Каждый аттачмент, даже не превращенный в меш, имеет 4 вершины, поэтому увеличение количества вершин приводит к дополнительным расчетам в движке, нагружая CPU. А ручная деформация точек меша, без привязки к костям, ведет к созданию отдельного таймлайна для каждой из вершин меша. Дополнительной возможностью в работе с мешами является Linked mesh, который позволяет наследовать состояние меша для изображений одинакового размера, не создавая новых таймлайнов для мешей и не просчитывая их заново на стороне CPU.
4 — Bounding Box
В большинстве движков, при отсутствии Bounding Box он генерируется динамически для каждого кадра анимации, что сильно влияет на производительность. Поэтому лучше создавать Bounding Box вручную в Spine. Кроме того, наличие Bounding Box позволяет выгружать из памяти анимированный объект в момент его выхода за пределы экрана, что также повышает производительность.
5 — Constraints
FK и IK констрейны в движке представляют собой математическую конструкцию, влияющую на положение костей. Их наличие добавляет дополнительные вычисления на CPU. По влиянию на производительность каждый из констрейнов сравним с десятью дополнительными костями.
6 — Пути
На стороне движка путь – это кубическая кривая Безье, каждый из отрезков которой строится по четырем точкам. Построение задействует CPU, но кривые используют тот же принцип построения, что и положение костей, с отличиями только в визуальном представлении и дополнительных элементах управления кривой.
7 — Кости
Кость является минимальной вычислительной единицей, которая может перемещаться в пространстве и передавать данные движку для отслеживания координат. Каждая кость добавляет данные для обработки CPU: чем больше костей, тем с большим массивом данных приходится работать.
8 — Скины
Скины представляют собой визуальное отображение используемого набора аттачментов. На стороне движка они добавляют маркеры для переключения аттачментов и костей, а также их свойств.
9 — Слоты
Слоты — это контейнеры для хранения аттачментов. Поскольку слоты не могут перемещаться без костей, они требуют минимального количества ресурсов. Основная нагрузка ложится на GPU, так как таймлайны для перемещения в пространстве не создаются.
Перед экспортом анимации следует убедиться, что все лишние и неиспользуемые элементы (кости, слоты, аттачменты, файлы бэкграунда, дополнительные неиспользуемые анимации) удалены из проекта Spine и из папки с изображениями.
Размер создаваемого атласа должен быть кратен двум. Если анимация создается для использования на мобильных устройствах, размер не должен превышать 2048 пикселей по длинной стороне. Это ограничение связано с невозможностью отображения изображений более 2048 пикселей по длинной стороне на устройствах Apple.
Одной из частых проблем с графикой после экспорта являются артефакты вокруг PNG-изображений, такие как черные обводки и белые свечения с полупрозрачными пикселями.
Причина этого кроется в несоответствии режимов альфы материала в проекте и экспортированной анимации. За режим работы альфы отвечают параметры Premultiply Alpha и Bleed. Вариант при экспорте следует выбирать в зависимости от настроек проекта в игровом движке.
Еще один тип графических артефактов при экспорте — это резкие линии обрезки изображения. Причиной может стать отсутствие отступов у изображений. Это исправляется увеличением отступов по осям X и Y.
Некорректное отображение анимации может быть вызвано функцией Clean Up анимации. Эта функция автоматически удаляет лишние ключи анимации, что значительно оптимизирует анимацию. Однако иногда она может привести к некорректному отображению аттачментов или неверному положению костей. Это происходит из-за наследования состояния костей при переключении анимации. Наследование состояний настраивается в игровом движке, и этот вопрос всегда следует обсуждать с разработчиком.
Оптимизация не должна быть главной целью при создании анимации, потому что иначе страдает художественная выразительность анимаций, и мы начинаем ограничивать себя в используемых средствах. Не нужно что-либо оптимизировать без должных причин, иначе это станет пустой тратой времени. Следует разумно подходить к проблеме и заранее определять предельные значения, за которые не следует заходить. При превышении допустимых значений и реальных проблемах с производительностью следует тратить силы на оптимизацию. Иногда даже очень нагружающая анимация с эффектами хорошо выглядит и не влияет на производительность, если на сцене ничего другого нет, кроме неё.
Поэтому рекомендуем приступать к оптимизации уже на конечном этапе при реальных проблемах с производительностью, находя альтернативы используемым средствам и повышая производительность за счет сокращения элементов.
Удаление лишнего — это базовый способ оптимизации. Часто при риге мы создаем более сложные структуры для увеличения подвижности и больших возможностей рига. Однако после создания необходимых анимаций мы можем не использовать все возможности рига. В этом случае упрощаем риг для повышения производительности.
- Фейковый add режим
Иногда возможности использования режимов наложения изображений ограничены и приходится находить альтернативы. В таких случаях поможет использование дополнительных аттачментов, в которых запечены эффекты. Способ применим, когда эффект additive не выходит за границы основного объекта. Для этого в режиме SETUP на необходимые аттачменты применяется эффект наложения и производится экспорт как PNG. После аттачменты с режимом additive заменяются на полученные ранее изображения, но уже в режиме normal.
- Удаление лишних точек меша
При риге меша часто создаются точки для повышения плавности изгибов и больших возможностей при работе с графикой. Но после анимации оказывается, что меш мог быть проще. Визуально нет никаких отличий, если мы удалим какие-либо точки. Удаление лишних точек положительно повлияет на производительность анимации.
- Отключение аттачментов в анимации
В случаях, когда нужно скрыть аттачмент и увести его в прозрачность, всегда следует отключать этот аттачмент, а не просто оставлять прозрачным. Это позволит освободить память и снизить нагрузку на GPU, так как даже уведенный в прозрачность аттачмент участвует в расчете рендеринга и обрабатывается при каждом запросе на отрисовку.
- Сокращение кадров секвенций
Используя секвенции в анимации, довольно часто разница между высоким фреймрейтом секвенции и низким мало заметна на мобильных устройствах. Поэтому удаление лишних кадров секвенции не только уменьшит атлас, но и повысит производительность. Для большей плавности анимации кадры секвенции можно искажать мешем, либо вытаскивать из секвенции как обычный контейнер и анимировать костями — увеличивая, перемещая и наклоняя их.
- Уменьшение размера графики фона и эффектов
Однотонные изображения фона и изображения с размытыми краями (облака, свечения, лучи света, тени и так далее) можно уменьшать в два и более раза, восстанавливая их размер скейлом в Spine. Это дает возможность уменьшить размер атласа и освободить оперативную память и объем хранимой графики билда.
- Выбор формата экспорта
На стадии формирования проекта предпочтения по экспортируемому формату анимации следует отдавать двоичному формату .skel. В отличие от формата .json он имеет меньшие объемы и быстрее считывается движком. Каждый ключ анимации – это набор чисел, определяющий положение и свойства объектов. Одно число в двоичной системе – это 4 байта информации, когда в .json формате это 8-9 байт. При многократном обращении к этим значениям во время анимации разница может быть значительной.
Общение с разработчиками и художниками, а также выяснение всех возможных ограничений и требований играют ключевую роль в создании качественных анимаций. Тесное взаимодействие с командой помогает заранее определить потенциальные проблемы и требования, что позволяет избежать множества ошибок и сэкономить значительное количество рабочего времени. Не пренебрегайте этим важным аспектом работы, и ваши проекты будут успешными и эффективными.
Компания G5 стремится к расширению и созданию свежих проектов. Мы всегда в поиске новых художников. Если вы хотите попробовать себя в развивающейся игровой сфере, присоединяйтесь к нам!