Fajargo

Fajargo

Пикабушник
1548 рейтинг 325 подписчиков 8 подписок 16 постов 10 в горячем
Награды:
10 лет на Пикабу
154

Работа над ошибками в 3D. Часть 3. Масштабируй ЭТО

Привет!


Продолжим начатое и будем разбирать частые просчеты при создании моделей для игр.


Часть 1

Часть 2


Поговорим об еще одном способе оптимизировать нашу модель. И в этом нам снова поможет наш добрый друг - цилиндр. Вот и он:

Этот цилиндр имеет 32 грани. Причем, на верхней и нижней его частях количество граней одинаково. Это связано с тем, что радиус "крышек" одинаков, а значит, разница в количестве граней бросится игроку в глаза. Так что, текущее его состояние оптимально. Но что, если верхняя его часть будет меньшего размера чем основание?

В этом случае одинаковое число граней на обеих "крышках" будет неоправданно. Почему? Во-первых, одинаковое число граней приведет к "бросанию в глаза". Меньшее расстояние между точками на верхней части создаст иллюзию более "круглого" круга. И на его фоне менее круглый нижний круг покажется слишком низкополигональным. Во-вторых, если форма выглядит достаточно круглой с нужного нам расстояния, то и незачем там находиться лишним полигонам. *слишком круглый абзац - удалить :)*


Если постараться обобщить и не вдаваться в крайности, редкие случаи и тому подобное, то мысль должна звучать так: Чем меньше объект, тем меньше на нем должно быть полигонов. Это же касается и элементов одного объекта. Если, к примеру, радиус одной окружности в рамках объекта меньше другой, то и количество граней у этой окружности должно быть меньше. Так говорил Заратустра.


Теперь посмотрим на примеры подобного типа оптимизации.


1. Внутренние окружности:

Как мы видим, внутренняя стенка "стакана" имеет меньшее количество граней, чем внешняя. При этом, внутреннее дно урезано еще больше. Это обосновано тем, что дно будет находиться дальше от глаз игрока. Да и увидеть его вряд ли получится. Ибо внутри все, скорее всего, будет затенено.


2. Перекрытые объекты:

В этом случае верхнее и нижнее кольца цилиндра имеют одинаковый размер, но, при этом, верх имеет меньшее число граней. Связано это с тем, что куб в игре перекроет верх цилиндра, и, если главный герой игры не может ползать, то эту часть он никогда и не увидит. А вот нижнюю, стоящую на земле - вполне. Таким образом, мы экономим на тех местах, которые игрок не увидит.


3. Кольца, трубы и т.п.

В данном случае мы видим, что можно экономить еще и тогда, когда игроку будет сложно определить форму объекта. Внутренняя часть кольца мало того, что имеет меньшее количество граней, так еще и сечение трубы не является равномерным. А все потому, что игрок никак не сможет определить степень округлости сечения, если не видит само сечение как в нашем случае. А после запекания нормали и тем более не сможет.


Есть еще множество примеров подобного усечения полигонажа, но общий принцип во всех схож. Меньше размер = меньше полигонаж.


В следующем посте поговорим про правильную топологию и оптимизацию сферических объектов.


Оставайтесь на связи :)

Показать полностью 6
138

Работа над ошибками в 3D. Часть 2. В единстве ли сила?

И снова здравствуйте!


Учитывая тот факт, что первая часть моих разборов была больше заявкой о намерениях и содержала лишь самый примитивный пример оптимизации, то я решил не тянуть со второй частью. Куем пока горячо.


Часть 1


Совсем недавно на Пикабу я наткнулся на пост, в котором автор показывал процесс работы над ассетами для своего проекта. Модели и текстуры были довольно привлекательными, и я зашел посмотреть, о чем пишет автор.


В посте были не только рендеры и скриншоты из движка, но и рассказ о производстве ассетов.

И вот на примере одного из ассетов автор рассказывал об оптимизации. Учитывая то, что сама модель является весьма показательной, я решил использовать именно ее, с небольшими изменениями для наглядности метода.


Я очень надеюсь, что автор не сочтет мою критику обидной. Мне действительно понравились его работы, но всегда есть до чего до*баться к чему стремиться. И с вашего позволения я не стану давать ссылку на тот пост, дабы не противопоставлять работы. Такой цели и не стоит. Мы здесь только чтобы повышать качество. Погнали.


Итак, изначально была создана такая модель:

Автор решил использовать ее в качестве базовой и на ее основе сделать и low poly, и high poly. Все отлично. Темы high poly мы касаться не будем, поговорим только о низкополигональной сетке. Итак, после нехитрых манипуляций, базовый меш был оптимизирован до такого уровня:

Автор избавил модель от эджей, которые не влияют на геометрию. Все получилось хорошо, аккуратно и ровно. В моем случае у меня получилось 176 треугольников. Но что если...

По данному скриншоту сложно уловить мысль, но на следующем все становится понятнее:

Слева изначальная модель. Она представляет из себя единый меш. Все сочленения в ней сшиты. Во втором случае модель состоит из трех отдельных частей, которые никак друг с другом не связаны. И что же это дает? А дает это 132 полигона вместо изначальных 174. Таким образом мы срезали 25% полигонов.


Но ведь наверняка данный метод имеет недостатки. И точно - имеет. Качество запекания нормалки в данном случае несколько страдает. И чем меньше разрешение текстуры, тем более заметным это становится.


Однако, я скажу вам одну вещь, которую стоит помнить каждому, кто хочет создавать модели для игр. Gamedev 3D - это искусство обмана. У геймдева всегда серьезные ограничения. Бюджет на полигонаж, бюджет на вес, бюджет на качество текстур и т.д. Конечно, сегодня технологии шагнули далеко вперед и какая-нибудь захудалая бочка может иметь в разы больше полигонов чем главный герой начала эпохи 3D игр.  Но это не значит, что можно раскидываться полигонажем, как вам заблагорассудится. У любого эджа должен быть смысл существования. Если модель, состоящая из 30 полигонов в игре смотрится так же, как модель из 150, то всегда стоит остановиться на меньшем. Также важно помнить, что большую часть ассетов игрок просто не заметит в игре. Он точно не будет разглядывать редиску, лежащую в углу погреба так же внимательно, как новый меч. А значит, высокодетализированный редис, на который ушла добрая половина полигонов всего погреба (и на который вы убили кучу времени, а значит, и денег) не имеет смысла. Так что розовой пирамидки скорее всего будет достаточно :)


Ну, и в завершение хочу подкрепить свои слова наглядным примером:

Вот те самые модели, но уже с запечённой нормалкой. Видите разницу?


Всем спасибо! Увидимся в следующем посте. В нем я расскажу, как еще можно было бы оптимизировать данную модель.

Показать полностью 5
82

Работа над ошибками в 3D. Часть 1. Вступление

Доброго всем того, что у вас там!


Довольно часто мне приходится изучать работы различных 3Dшников, обладающих разной степенью опыта, познаний и кривизны рук. И у многих из них я наблюдаю одни и те же ошибки, которые простительны новичкам, но при этом недопустимы в профессиональном арте. А самая большая проблема таких ошибок в том, что они имеют свойство закрепляться на подсознательном уровне, и расставаться с ними потом приходится долго, сложно и порой очень неприятным способом - многократно переделывать модель, пока результат не будет удовлетворять всем требованиям. Мне довелось испытать "изгнание диавола" на собственной шкуре, и именно поэтому я-таки решился написать серию постов, в которой разберу некоторые распространенные "косяки" и расскажу как их избежать. Я надеюсь, что эти советы помогут новичкам на их пути и сделают мир 3D лучше.


Пару слов о себе. Я 3D художник. Начинал я, как и все, самоучкой, потом прошел профессиональные курсы моделирования, работал над несколькими инди-проектами, и на сегодняшний день мое задничное шило привело меня на должность художника в студии, которая создает арт для крупнейших игровых проектов нашей планеты.


Эти посты будут писаться в основном для новичков, но не для тех, кто только вчера решил освоить 3D, а для тех, кто уже хоть сколько-нибудь разбирается в том, что он делает и для чего. Так что, о том, что такое vertex, UV, normal и т.п. я рассказывать не буду. Зато расскажу об оптимизации моделей, интересных нюансах запекания normal map, правилах упаковки UV и, может, еще что-нибудь интересное из последующих комментариев и вопросов.


Постов, как вы поняли из заголовка, будет несколько, ибо тема довольно обширна, но, чтобы не делать этот пустым, давайте разберем одну, пожалуй, самую элементарную, но при этом очень частую ошибку, которую я вижу как у новичков, так и довольно опытных людей (что странно).


Перед нами его величество цилиндр. А, в первую очередь, нас интересует его "крышка". На текущий момент она содержит 16 треугольников.

На первый взгляд, все нормально. С такой сеткой довольно удобно работать, и в большинстве случаев художники просто оставляют все в таком виде в финальной модели. Однако, у нас есть один вертекс, который ничего не привносит в форму. Зато он привносит лишние полигоны, которые на него опираются. Наша основная задача - избавиться от него.

В таком виде лишних полигонов уже не останется. Однако, и тут есть пара вещей, о которых стоит помнить. Во-первых, хочу сказать, что n-гоны имеют довольно скверную репутацию. Но это относится только к неровным поверхностям. В нашем случае абсолютно ровного полигона ничего страшного не произойдет, если мы оставим все именно в таком виде.

Но тут всплывает второй нюанс. Абсолютно все движки триангулируют импортируемую модель. Соответственно, при загрузке нашего цилиндра в UE4 или Unity мы получим следующий результат:

Подобный исход не является чем-то криминальным, однако, ситуаций, в которых слишком много эджей опираются на один вертекс, лучше избегать. Не буду вдаваться в подробности, но связано это в первую очередь с корректным шейдингом модели.


А значит, самым лучшим вариантом с точки зрения оптимизации модели и трудозатрат будет использовать следующий вариант:

С одной стороны, нам не приходится полностью резать поверхность, что экономит нам время, с другой - мы получаем лучший с точки зрения оптимизации полигонажа и вплоне приемлемый с точки зрения шейдинга результат. Так сетка будет выглядеть в движке после автоматической триангуляции:

Итого: после убийства центрального вертекса крышка цилиндра теряет 2 полигона. Причем это не зависит от количества сечений. Будь их 8 или 32, "крышка" всегда сбросит 2 треугольника.

Вывод: может показаться, что подобная оптимизация занимает больше времени, чем приносит реальной пользы. Но тут смею заметить, что 2 треугольника могут перерасти в сотни на одной только модели и в тысячи на уровне. Так что даже такой мелочью пренебрегать не стоит.


В следующем посте я расскажу о менее очевидной вещи, однако, несущей в себе гораздо больше проблем оптимизации.

Показать полностью 5
23

Моя новая работа - Thompson M1A1

Здравствуйте, друзья!


Решил поделиться с вами моей новой работой.


LowPoly GameReady Thompson M1A1


Делитесь своим впечатлением. Что не понравилось, что улучшить. Буду рад конструктиву)


Ну, и по ссылочке можно еще и посмотреть модель в 3D viewer'е - https://fajargo.artstation.com/

Показать полностью 5
18

Мое пятничное моделирование

Паладинский кувалдометр для измерения уровня интеллекта у всякой игровой нечисти.

Злой терьер тоже мой, и он проследит, чтобы вы слишком уж не увлекались минусами.

Показать полностью 4
Отличная работа, все прочитано!