И снова здравствуйте!
Учитывая тот факт, что первая часть моих разборов была больше заявкой о намерениях и содержала лишь самый примитивный пример оптимизации, то я решил не тянуть со второй частью. Куем пока горячо.
Часть 1
Совсем недавно на Пикабу я наткнулся на пост, в котором автор показывал процесс работы над ассетами для своего проекта. Модели и текстуры были довольно привлекательными, и я зашел посмотреть, о чем пишет автор.
В посте были не только рендеры и скриншоты из движка, но и рассказ о производстве ассетов.
И вот на примере одного из ассетов автор рассказывал об оптимизации. Учитывая то, что сама модель является весьма показательной, я решил использовать именно ее, с небольшими изменениями для наглядности метода.
Я очень надеюсь, что автор не сочтет мою критику обидной. Мне действительно понравились его работы, но всегда есть до чего до*баться к чему стремиться. И с вашего позволения я не стану давать ссылку на тот пост, дабы не противопоставлять работы. Такой цели и не стоит. Мы здесь только чтобы повышать качество. Погнали.
Итак, изначально была создана такая модель:
Автор решил использовать ее в качестве базовой и на ее основе сделать и low poly, и high poly. Все отлично. Темы high poly мы касаться не будем, поговорим только о низкополигональной сетке. Итак, после нехитрых манипуляций, базовый меш был оптимизирован до такого уровня:
Автор избавил модель от эджей, которые не влияют на геометрию. Все получилось хорошо, аккуратно и ровно. В моем случае у меня получилось 176 треугольников. Но что если...
По данному скриншоту сложно уловить мысль, но на следующем все становится понятнее:
Слева изначальная модель. Она представляет из себя единый меш. Все сочленения в ней сшиты. Во втором случае модель состоит из трех отдельных частей, которые никак друг с другом не связаны. И что же это дает? А дает это 132 полигона вместо изначальных 174. Таким образом мы срезали 25% полигонов.
Но ведь наверняка данный метод имеет недостатки. И точно - имеет. Качество запекания нормалки в данном случае несколько страдает. И чем меньше разрешение текстуры, тем более заметным это становится.
Однако, я скажу вам одну вещь, которую стоит помнить каждому, кто хочет создавать модели для игр. Gamedev 3D - это искусство обмана. У геймдева всегда серьезные ограничения. Бюджет на полигонаж, бюджет на вес, бюджет на качество текстур и т.д. Конечно, сегодня технологии шагнули далеко вперед и какая-нибудь захудалая бочка может иметь в разы больше полигонов чем главный герой начала эпохи 3D игр. Но это не значит, что можно раскидываться полигонажем, как вам заблагорассудится. У любого эджа должен быть смысл существования. Если модель, состоящая из 30 полигонов в игре смотрится так же, как модель из 150, то всегда стоит остановиться на меньшем. Также важно помнить, что большую часть ассетов игрок просто не заметит в игре. Он точно не будет разглядывать редиску, лежащую в углу погреба так же внимательно, как новый меч. А значит, высокодетализированный редис, на который ушла добрая половина полигонов всего погреба (и на который вы убили кучу времени, а значит, и денег) не имеет смысла. Так что розовой пирамидки скорее всего будет достаточно 🙂
Ну, и в завершение хочу подкрепить свои слова наглядным примером:
Вот те самые модели, но уже с запечённой нормалкой. Видите разницу?
Всем спасибо! Увидимся в следующем посте. В нем я расскажу, как еще можно было бы оптимизировать данную модель.