Делаем графику в Unity Лучше.
Всем привет, давно не писал и вот назрело. Как вы знаете, я завязал с тёмной стороной рендерингом в 3д максе и ушёл в коварный мир реалтайма, а именно в игровые движки и остановил свой выбор на Unity. Чаще всего по поводу моих игр слышу вопрос: «Это что, Unity?» Да, это Unity. И ничего магического в этом нет. В данной статье кроме лапши и воды я расскажу вам о том как сделать графику на юнити Лучше :)
За 2 года я сделал 12!!!! игр или ,точнее сказать, попыток сделать игру :) До финальной стадии дожили 3, ещё штук 5 находятся в законсервированном,но подающем надежды виде, а остальные, увы списаны в утиль! Но это отдельная история и её я вам расскажу, если данный пост наберет 10к просмотров, поэтому всем кому интересно - скидывайте ссылку друзьям и врагам, потому что набрать 10к можно только так :)) Поехали!
Самое главное что вы должны знать о графике — это то, из чего она состоит.
Графика строится из набора изображений, который смешивается друг с другом по определенному закону, который приближает визуализацию финального изображения к реальному (либо стилизованному, если так задумано). Так устроен любой рендерер(и корона и вирей и редшифт и октан и все все все) и движок Unity работает точно по такому же принципу. Если кратко, то берем базовые цвета поверхностей, перемножаем их с освещенностью, добавляем отражения и спекуляр. Это общеизвестные факты, но без них никуда, любой 3дшник должен это знать и использовать!
Казалось бы всё просто, сел и сделал красиво, но в реальности мало кто может добиться приличных результатов за короткий срок, всё потому что в юнити до сих пор нет некоторых очень важных элементов, которые позволяют это сделать быстро и главное надёжно.
Тени
В 2019 году мы имеем стандартные тени такого вида
Слева стандартные «Мягкие тени». Без боли на это смотреть невозможно.
Справа из ассетстора за деньги, называется NGSS. Речь идет о Реалтаймовых тенях, а не о запеченных.
Объемный свет
Нативного решения у юнити вообще нет, поэтому сравнивать не буду. Просто покажу, что есть несколько вариантов решений в ассетсторе на примере своей игры:
Есть бесплатный вариант AURA, есть платные решения. AURA мне по нескольким причинам не понравилась, в первую очередь из-за своей стабильности, поэтому я пользуюсь платным ассетом: HxVolumetricLighting.
Постобработка
У юнити есть есть PostProcessStackV2 и он в целом справляется со своей задачей, но кое чего всё равно не хватает, это хорошего AO, точнее HBAO+. Это ScreenSpace Ambient Occlusion, который не создает теней на объектах разнесенных по глубине.
Кроме самозатенения тут есть и очень интересная возможность Color Bleeding — эмуляция вторичного отражения света, которое добавляет картинке жизни, в простонародье - вторичка(от Древнегреческого Secondary GI).
Шейдеры
Ну и в конце концов не стандартными материалами едиными живём, шейдеры тоже нужно делать уникальные и для этого совсем не обязательно писать код, потому что есть Amplify Shader Editor, нодовый редактор, который может освоить любой 3дмаксер, майер, блендераст и прочие синемешники. :) без обид, блендер клёвый!
В частности можно сделать вот такой вот шейдер стекла из картинки выше, а на картинке ниже то, как он выглядит в редакторе:
Как вы могли заметить, это мало чем отличается от стандартных материал эдиторов популярных 3д пакетов, и на самом деле переход с них на редактор шейдеров в юнити очень прост, достаточно просто изучить список доступных нод, а принцип всего остально тот же самый. Но вы не представляете насколько классно после часов страданий ожиданий в 3дмаксике результатов настройки материала - видеть всё в режиме реального времени да ещё и вращать всё на одном месте камерой.
Для кого-то это покажется несущественным, но для меня наличие данных возможностей — единственное, что позволяет вообще делать графику на юнити, а не там где вы возможно подумали, потому что главное в Юнити это всё таки удобство и стоимость разработки с малым числом людей и бюджетом, а для нас — инди — это самое главное. Как известно: дьявол кроется в деталях и я перечислил те из них, которые считаю самыми важными. Всё остальное это уже стандартный подход: замоделить модельки, затекстурить модельки, сделать шейдер и т. п. По данной теме итак предостаточно информации.
Примеры были взяты из моей недавно выпущенной игры https://store.steampowered.com/app/1151430/Magnia/ поэтому, раз уж вы дочитали до этого момента - поддержите игру хотя бы добавлением в Вишлист:) Каждое такое действие помогает продвигаться игре вверх в анналах Стима, хотя это совершенно другая история, которую я могу рассказать, если вы не забыли про 10к просмотров и репостики :) Ну а если тема с юнити, никому не интересна, то так тому и быть! Всем адьёс!