Пеннивайз - Танцующий Клоун
Создано в Blender 3D 2.79
Создано в Blender 3D 2.79
Привет Пикабу. Как и обещал, решил рассказать вам свою историю становления в конкретной отрасли.
Я увлекаюсь разработкой игр, и это дело нравится мне уже почти 10 лет, но за все это время так и не вышло создать чего-то стоящего. Поэтому, хотел бы поделиться своим удачным и не очень опытом. Думаю, он может пригодиться тем, кто только в начале пути, и поможет не наступать те же грабли в течение долгих лет :)
Я разбил текст на подглавы, дабы было удобнее пропускать неинтересные детали. Ведь текста очень много, а я ценю ваше время. Поехали!
ДЕТСКИЕ МЕЧТАНИЯ ИЛИ СКАЗ О "ДОХЛОЙ ЛОШАДИ"
Итак, начнем с самого начала.
Компьютер у нас в семье появился довольно рано (мне еще и трех лет не исполнилось), но вот интернета не было еще очень долгое время. Вскоре появились и игры, которые мне сразу понравились даже больше чем обычные игрушки, да и кому оно не нравилось в детстве? Хотя «играть» в моем возрасте – это конечно, громкое слово. Первые три года я просто наблюдал, как играла моя старшая сестра, и лишь потом уже начались первые самостоятельные попытки, хотя игры покупали все еще для нее. Выбора у меня особо не было, ведь друзей с ПК не имел, да и жили мы в деревне, где купить хотя бы пиратку было невозможно.
Так что, довольно интересная игрушка под названием Little Big Adventure 2 (хотя мы с сестрой называли ее просто по имени главного героя - Твинсена), первые годы была нашим единственным фаворитом. Спустя годы у родственников также появились свои компьютеры и более серьезные игры. Это помогло мне узнать про существование GTA, Far Cry, Need For Speed и других, как мне тогда казалось, сверхсовременных игр, что было правдой в сравнении с нашей коллекцией :) Таким образом, с NFS (на тот момент, это был Underground) и началась моя большая любовь к играм, как к чему то прекрасному и серьезному. Да только не судьба ей была продлиться долго, ведь как помнят бывалые геймеры, тема стритрейсинга и слава серии в целом начала подходить к концу уже в 2007 с выходом ProStreet, а через два года, с появлением Shift, я и вовсе потерял надежды.
Мне нравились стритрейсинг и тюнинг авто, но серия с каждым годом лишалась этого все больше, а хороших аналогов на ПК толком не было. Вот тогда то и появилась безумная идея «а почему бы не сделать это мне?». Конечно, тогда мне было всего 10 лет, и я понятия не имел, насколько это сложно, но желание создать что-то свое началось именно оттуда.
В те времена, интернета у нас все еще не было (забегая вперед, его и до сих пор здесь нет, но спасибо 4G и мобильному безлимиту, что хоть как то выручает), так что единственным источником моих знаний был журнал «ПК Просто» - забавный самоучитель по всем основам мира IT, который бережно складывался мною в три большие папки, что шли в комплекте. Вот там то и был очень вкратце описан процесс геймдева, который меня вдохновил. Вернее, в статье речь шла больше про 3d-графику в играх с примерами соответствующих пакетов, но так уж совпало, что моя сестра на тот момент училась на архитектора, так что название 3ds Max было на слуху.
В университете сестру не учили этому 3d-пакету, хотя его знание и добавляло баллов к своим проектам. Так что, в один прекрасный день, ей приобрели книги-самоучители, дабы изучать его самой. Но времени у нее на них так и не нашлось, а вот меня тема зацепила.
И все же перед этим, используя ужасно медленное и дорогое 2G соединение, я решил наконец загуглить «Как создать свою игру», да только меня тут же постигли две напасти. Во-первых, на дворе был конец 2008-го: время, когда большинство софта, включая движки, не было доступно простым смертным, а лицензирование стоило миллионы долларов. Во-вторых, я элементарно плохо гуглил и быстро сдался, ограничившись одним-двумя поисковыми результатами, ведь, как я узнал спустя много лет, всем известный Unity уже тогда существовал на рынке за скромную сумму.
Так или иначе, все что я нагуглил для разработки – какой-то очень странный «игровой редактор» с примитивной графикой на уровне 90-х, название которого вспомнить не удалось. В тот же момент маме было выдано задание: найти сие чудо игровой разработки во время следующей поездки в город. Поиски конечно, результатов не дали, но уже тогда я догадывался, что этот софт ужасно устарел и скорее всего, в продаже его не найти.
Так и начались мои попытки сделать что-то свое. Я начал изучение 3ds Max по самоучителю, и неправильно поняв содержание той первой статьи, подумал, что данный пакет моделирования является еще и игровым движком. Поэтому забавно конечно, сейчас вспоминать, как я пробовал создавать целые игровые уровни с ландшафтами, ничего не смысля в текстурировании и вытягивая горы из маленьких вершинок вручную.
Тем не менее, уже тогда у меня появилась идея игры: гоночного симулятора в родном Казахстане, с упором на реализм окружения и геймплей с захватом территорий в стиле Need for Speed: Carbon. К этому подстегивал еще тот момент, что тогда в продажу вышла первая игра от соотечественников – Astana Racer. Она была очень простенькая и короткая, что даже рассмешило российских блоггеров. Так что, желание попробовать создать своего «убийцу жанра» только усилилось, и даже был поставлен срок – 2012 год. Смешно, но я верил в этот срок так, что даже задумал следующую игру после этой: шутер, с сюжетом о войне против пришельцев на Марсе, срок которой был намечен уже на 2014.
Такой настрой продолжался чуть меньше пары лет. За это время я закончил самоучитель для начинающих и счел себя «гуру 3d», но из-за недостатка знаний, а также завышенной самооценки (что часто отбивала у меня желание гуглить то, в чем я не разбираюсь) решил отложить разработку «великих игр» до лучших времен.
На следующий год, однако, я удачно приобрел выпуск журнала “PC Игры” и, там обнаружилась очень важная новость – Crytek выпускает бесплатный редактор FreeSDK для своего движка CryEngine (на котором создали Far Cry и Crysis) и разрешает делать на нем игры за 25% от продаж. Это вернуло мне мотивацию и веру в себя. Сестра как раз тогда переехала в город, что дало мне доступ к нормальному интернету и возможности скачать «чудо-инструмент» вместе с уроками к нему. Да только вот первые месяцы движок был очень сырой и имел еще более слабое сообщество. Так что, толковых уроков в сети просто не нашлось, а многие были от Crysis 2 Mod SDK, который тоже именовался, как CryEngine 3, поэтому я смотрел уроки по нему, даже не догадываясь, что это другой инструмент. И все же, с большим трудом я сделал свой первый остров «с горами, пальмами и врагами», который до сих пор пылится на старом жестком диске. Только вот результат меня совершенно не радовал, а сделать лучше не хватало знаний. Таким образом, я впервые решил окончательно похоронить свою детскую мечту.
Здесь должен быть скриншот этого уровня, но его нет, потому что у меня спустя столько лет перестал запускаться FreeSDK и даже версии с интернета не помогают.
А МОЖЕТ В ПОХОЖИХ СФЕРАХ ЛЕГЧЕ?
Были в то время у меня и другие хобби, с чуть лучшим результатом, поэтому мое внимание перешло туда. Рождались они из все той же страсти – огромного желания создавать что-то свое, масштабное. Так что, меня вдохновляло все вокруг: в раннем детстве я видел, как мой старший двоюродный брат занимался созданием электронной музыки (которая тогда была совсем в новинку) и даже был диджеем на школьных дискотеках, а чуть позже мне довелось посмотреть мультфильм «В Гости к Робинсонам». Таким образом, под впечатлением от этих вещей появились два моих еще более забавных хобби - «диджей» и «изобретатель». Помнится, я даже ответил первым из них на вопрос «Кем ты хочешь стать, когда вырастишь?», когда его задали в первом классе :)
К музыке я возвращался не раз, хотя особых успехов и не достигал, а вот с «изобретениями» тема была интереснее. Как и с играми, я был по-детски наивен, и не понимал насколько сложно изобрести что-то в наше время, но зато нашел единомышленника – друга детства, что жил рядом с моей бабушкой и был чуть старше меня. Вместе мы фантазировали об этом много лет, и даже пытались что-то сделать, вызывая лишь легкую усмешку моего дедушки, который является классическим технарем. Наши потуги закончились даже раньше, чем мое желание «войти в геймдев», но тут в стране появился 3G, а в мире появился Kickstarter – и я понял, что теперь я мог бы создать действительно реальный продукт.
Впервые я подошел к делу с той серьезностью, которой ранее не было, и начал воплощать свою идею в жизнь. Я «изобрел» устройство на Windows, аналог которого через полгода анонсировала Valve и назвала его Steam Machines. Вот только у меня не было живого прототипа, а лишь дизайны (спасибо знаниям в 3ds Max) и воодушевляющие речи. Но зато, упорным штудированием сети я узнал многое про маркетинг, производство и даже нашел посредников для запуска компании. К счастью, я также нашел еще и толковых людей, которые отговорили меня от этой затеи, понимая, что знаний у меня 0. На этом мои хобби и завершились, а вот любовь к играм не пропала.
Реальный рендер моейубийцыконсоли
Параллельно, на волне хайпа видео-обзоров всего подряд, я занимался созданием своих «мнений об играх», за которые мне до сих пор стыдно, ведь поначалу звук и видео записывался на дешевый телефон, а все это дело выкладывалось в 360р. Неудивительно, что за эти писклявые мнения я получал одни дизлайки. Однако уже тогда я понимал, что так дело не пойдет и мне повезло посотрудничать для новых видео с взрослым парнем по имени Артем, который до этого делал обзоры на одноименном канале с 3 цифрами в конце (если ты это читаешь, привет, напиши мне, контакты знаешь). Артем оказался очень интересной и разносторонней личностью, знающей о многом. К его мнению хотелось прислушиваться. И вот в тот момент он дал совет, что раз была мечта, то надо воплощать ее в жизнь, тем более я уже стал взрослее и умнее.
Обзоры мы тогда уже забросили, и так начался мой «полноценный» путь в геймдев.
ПРАВИЛЬНЫЙ ПОДХОД К ДЕЛУ
Сейчас, об этом уже смешно и грустно вспоминать. Но именно тогда, весной 2013 года, у меня были самые верные представления о том, как начать заниматься разработкой игр, которые в итоге поменялись, но не будем забегать вперед.
Итак, «изобретатель» из меня вышел никудышный, музыкант тоже так себе, поэтому уверенности, что я крутой гейм девелопер уже не было. Я понял, что мне нужно поучиться на практике, помочь кому-нибудь сделать их игру, и уже тогда будет ясно, потяну ли я проект самостоятельно.
Про то, что такое портфолио и зачем оно нужно – я еще не знал, но у меня было упорство, а это действительно правильное качество. К тому моменту у движка CryEngine, было свое большое сообщество разработчиков, которое раньше так и называлось – CryDev. Большинство интересных проектов тогда только начиналось, а движок действительно был лидером среди бесплатных инструментов. Так я и стал мониторить страницы проектов в разделе Games.
Я писал практически каждому разработчику с просьбой взять меня к себе, указывая, что я знаю 3d и вообще весь такой хороший. Отвечали немногие, но одна команда все же согласилась.
Вот этот проект. Их страница до сих пор доступна для просмотра.
Пафосное название и простенькие скриншоты уже тогда вызывали сомнения, но выбора у меня не было. Лидером оказался некий Andreas из Дании, который устроил процессы управления, прямо как в ААА студии. Имелись все позиции из крупных студий, менеджеры, продюсеры, и даже деление на Senior и Junior. У игры имелся простенький диздок и уже тогда был договор о неразглашении, хотя конечно никакой юридической силы он не имел. Команда оказалась довольно большой (около 20 человек), и по несколько раз в неделю у нас проводились совещания в скайпе, на которых я мало что понимал, ведь язык еще знал плохо.
Один из концептов игры от Realistic Game Studios
Сама игра тогда была в очень ранней стадии разработки.
Что мы делаем – не было ясно никому. Но задания выдавались всей команде с удивительной частотой. Тогда то мне и дали понять, все мои навыки из самоучителей были бесполезными! Впервые я узнал, что оказывается между простым моделированием и моделированием для игр есть колоссальная разница. Удивительно, что я сразу не вылетел. Пара человек из студии были добры ко мне и познакомили со всеми нюансами, вроде hi-poly/low-poly и normal map. Так я начал делать первые модели, но все равно не понимал зачем.
Andreas очень обрадовался, что я из Казахстана, и попросил сделать несколько фотографий, которые я ему и отправил (в основном это были горы и горные леса). В последствие, он даже умудрился заявить на них свои авторские, но весь юмор был в другом. Оказывается, по сюжету, действия игры развернутся в этой стране, и они будут о том, как обезумевшие жители Кавказа захватили ВЕСЬ Казахстан, а теперь лишь войска НАТО в силах нас спасти. Конечно, тут не найдется слов описать, как меня рассмешило это описание, что мне выдали под грифом «строжайшей секретности». Я попытался переубедить парня и сделать все хоть как то близким к реальности, на что получил оскорбления и скорое исключение под предлогом отсутствия опыта.
Остальная команда тоже была не рада участию. Andreas выдавал задания, вроде моделирования кровати, дерева или даже велосипеда в то время, когда у нас не было еще никакой локации вообще, ни города, ни степи, ничего, даже геймплея… Но зато нам нужна была модель велосипеда :)
Все это, на волне личной обиды и мести, помогло мне склонить к уходу более 2/3 команды за один день. Треть из них согласилась следовать за мной, а треть во главе с менеджером, который оказался умным русскоязычным парнем, отправилось в самый перспективный, по их мнению, проект – Miscreated (который тогда только начинали разрабатывать). Они также были готовы видеть в команде и меня, но… Мое ЧСВ снова взяло вверх, и я решил вернуться к изначальной мечте – свой проект любой ценой.
ЭМОЦИИ И ПРИНЦИПЫ - НАМ НЕ ТОВАРИЩ
Примерно с началом желания разрабатывать игры, у меня также было желание «придумывать сюжеты» к ним, вернее рассказы, и вот здесь успехи были чуть лучше: несколько незаконченных, но все же более менее продуманных рассказов, что я записывал в обычных тетрадях (рекордом было 110 тетрадных страниц). Так что, на вопрос «какую игру делаем?» - я уже знал ответ. И если пару месяцев назад, я отдавал себе отчет, что без опыта и на энтузиазме ее никогда не сделаю, то после недавних событий – все это, как рукой сняло :)
Наша официальная обложка
Но вернемся к теме. Какой он? Проект мечты? Конечно же очень масштабный! Рассказ повествовал о типичном военном пост-апокале. Проклятые Штаты все же захватили СНГ в недалеком будущем, как и все «предрекали», но местные повстанцы все никак не успокоятся. Вокруг них, собственно, и крутится сюжет. Про то, что была такая игра, как Homefront, я узнал только месяц спустя, но не отчаялся, ведь я хотел предложить открытый мир – аж целый город (родной Алматы)! В общем, примерно все те идеи, которые потом украли придумали в Homefront 2.
Но что нужно для такого проекта? Конечно же соответственная команда! На энтузиазме? Да, ведь есть упорство! И если раньше я думал, что это был глупый поступок, то сейчас понимаю, что с таким подходом возможно все, главное знать, что ты делаешь и чего хочешь достичь. И что же я сделал? А все просто, не зная других сайтов, снова пошел на CryDev и отправил более сотни уникальных (!) сообщений всем, более менее толковым 3d художникам и прочим ребятам. Мне повезло, тогда был расцвет движка, и очень много талантливых людей делали на нем себе работы в портфолио. Таким образом из сотни мне ответили чуть больше 20, и больше половины – согласились. При чем, среди них был даже сотрудник британского Codemasters!
Одни из концептов к игре. Художник - Pandu Mahardika
Но одного упорства было мало, надо было как то этими людьми еще и управлять, да и вообще иметь хотя бы точный концепт проекта. Так, у игры появился продюсер, из нашего же города (хотя в живую мы так ни разу и не виделись), который знал язык и понимал довольно хорошо этапы разработки игр. Так я узнал про необходимость концепт-арта, раскадровок, более подробных диздоков и т.п. Но все за меня решать не могли, и профессионалы, видя что ничего из этого не выгорит, вскоре покинули нас.
Так остался костяк команды из новичков и ребят, ушедших от Andreas’a вместе со мной. В разработке я понимал не много больше моего бывшего «босса», так что начал наступать на похожие грабли, хотя и чуть мягче. Не имея точного сюжета под рукой, решено было реализовать одну эффектную миссию, даже не будучи уверенным, что хотя бы что-то из нее пойдет в продакшн. Но сказано – сделано. Ведь есть упорство, а еще появились неплохие художники. Так у нас появилась локация «склад», где нужно было совершить диверсию и украсть оружие (а потом эффектная погоня, ну в общем все, как вы любите в Call of Duty). И сделать то ее сделали, но опыт у многих был ужасный, так что и локация вышла немного красивой лишь благодаря движку.
Со временем продюсер не выдержал моей ЧСВ-шной «гениальности» и покинул команду, а я выложил проект на тематический форум, где увидел шквал критики. Так я поумерил свой пыл. Однако в то же время начал общаться с другими ребятами, уже из РФ, которые пилили свой sci-fi проект, но были заинтересованы в том, чтобы довести проект до конца. Так у нас и родилось пари «если до октября у кого-то из нас будет куда больше прогресса, то тот проект совместно и делаем». Разумеется, мое упорство и низкосортный труд взяли вверх.
Скриншот итоговой версии Склада
НАЧАЛО ДОЛГОСТРОЯ
Так мы и объединили усилия, но для работы уже над новым проектом, понимая что старые теперь не спасти. И именно этот новый проект формально находится «в разработке» (хоть он и сменил множество форм) все эти годы, которым посвящен заголовок.
Однако этот рассказ уже для следующих постов, ведь там оказалось даже больше граблей, с которыми сталкивались далеко не все.
Так что, кому интересно, следите за продолжением.
А я снова попробую вернуться в привычный график (пост в 2 недели), т.к. закончил новый проект, что отнимал все свободное время :)
Всем хорошего времяпровождения!
Всем привет!
На днях я выложил свою новую игру - демо версию ремейка игра Darkwood в трёхмерной реализации.
Игра делалась на Unity с декабря прошлого года. Сюжет достаточно короткий и включает только часть "Пролог" из оригинала. Буду рад любым комментариям :)
Скачать можно здесь:
https://gamejolt.com/games/darkwood3d/349803
И здесь:
Мои жалкие попытки сделать карту для Tower Defence, вышло не очень хорошо, но лучше чем я думал.
Ну и напоследок - пара скриншотов из игры с этой картой
Знаю что простенько, но так уж получилось.
Моделировал в Blender, рендерил в Unity.
Страница игры в Steam: https://store.steampowered.com/app/838640/
Это простенький Tower Defence, вдохновлённый такими играми как Master Of Defence и GreenTD.
P.S. Для тех, кто на меня подписан из-за модели Дома Тёплых Ветров из скайрима - она не заброшена, просто времени нету, как сделаю сразу выложу. С процессом конечно-же.
Не буду долго тянуть с продолжением, дабы не упустить вдохновение и снова не отложить написание поста в долгий ящик.
В предыдущем посте я постарался рассказать, в каких случаях можно отказаться от использования карты нормалей. Однако же, стоит признать, что в случае с "большой" современной геймдев иднустрией, 99% ассетов так или иначе требуют наличия вышеуказанной текстуры. А значит, единственное, что нам остается - это разобраться, как получить качественную нормалку.
Под словом "качественная" я понимаю не только отсутствие артефактов при шейдинге (ибо это само собой разумеется), но и, во-первых, возможность работать с текстурой в дальнейшем, и, во-вторых, возможность при необходимости использовать её для других ассетов.
Основа хорошей нормалки лежит в правильной подготовке low poly. Вообще, существует золотое правило: low poly и без нормалки должна шейдиться корректно. Зависит это от двух основных моментов:
1. Триангуляция
2. Вертексные нормали
Начнем по порядку и поговорим о триангуляции. Важно помнить, что ни один софт по работе с 3D не воспринимает ни один вид полигонов кроме треугольников. Во вьюпорте вы можете видеть и четырехугольники, и пяти, и шести и сколькоугодноугольники. Софт же воспринимает всю модель исключительно как набор трисов. Соответственно, шейдинг модели также будет учитывать наличие треугольников. Для того, чтобы лучше понять тему, возьмем следующий объект:
Это просто углубление в плоскости, на которое накинута одна smooth group. Как мы можем видеть, во вьюпорте эта модель состоит из четырехугольников, однако, шейдится она как состоящая из треугольников. Для наглядности давайте отключим сетку:
Любой четырехугольник имеет два варианта триангуляции, зависящих от того, какие углы соединить. В случае с моделью, разбитой на четырехугольники, мы просто оставляем выбор варианта за софтом. С одной стороны, в этом нет ничего плохого. Карта нормалей спокойно компенсирует артефакт триангуляции. С другой...
Чтобы обнаружить скрытую угрозу, предлагаю вручную триангулировать наш объект в обоих вариантах:
Теперь давайте запечем нормалку. Берем high poly:
Запекать мы будем на low poly с триангуляцией варианта 1. Включаем текстуры, смотрим на low poly с вариантом 1:
Идеально. Как и предполагалось, карта нормалей отлично компенсировала искажения, все поверхности ровные, все хорошо. Но теперь давайте используем ту же карту нормалей в low poly со вторым вариантом триангуляции:
Для тех, кто по прежнему не до конца понял суть проблемы, давайте расскажу. Когда вы работаете с моделью, состоящей из четырехугольников, вы оставляете за софтом право самостоятельно распоряжаться триангуляцией. И софт это делает. Например, вы подготовили low poly, high poly и решили все это запечь. В этот момент софт фиксирует свой вариант триангуляции и компенсирует те нормали, которые он сам и решил. Потом наступает момент, когда вы выгружаете модель в движок. А вот мнение движка по поводу того, как будет выглядеть триангуляция, может разительно отличаться от мнения 3D софта. И, в этом случае, в движке мы получим то, что видим на последнем скриншоте. Артефакты. Тут может помочь только ручная ретриангуляция объекта, что в случае с ассетами на десятки тысяч полигонов может свести вас с ума.
При этом, избежать этого довольно просто. Перед экспортом модель должна быть принудительно триангулирована. И для запекания, и для движка должна использоваться та же самая модель с одинаковой триангуляцией.
Некоторые товарищи, кстати, любят накинуть компенсирующие лупы на low poly перед запеканием, а после со спокойным сердцем их удалить. Так вот. Делать этого не нужно. Любая коррекция сетки после запекания приведет к неверной компенсаци нормалкой. В итоге, объект будет выглядеть не так, как вы запланировали изначально.
Теперь давайте перейдем к вертексным нормалям. Это еще один из столпов правильного шейдинга.
Для разбора возьмем следующий объект:
На нем, по-прежнему, используется одна smooth group. Давайте отключим сетку и посмотрим, как шейдится наш объект.
Нам прекрасно видны изломы по триангуляции, но, как мы помним, карта нормалей отлично справится с компенсацией этих изломов. Собственно, что мы и наблюдаем:
Давайте взглянем на получившуюся карту нормалей:
Мы видим, как нормалка компенсирует переходы и по итогу дает нам ровную поверхность. Для большинства случаев данный вариант вполне себе подойдет, тем более, что изначально мы не оставили софту возможности триангулировать поверхность как-то иначе. Однако, проблема проявится, если нам необходимо будет использовать часть текстуры с данного объекта на другом, отличающимся по форме. Что же делать?
Ответ кроется в настройке вертексных нормалей. Давайте включим их отображение на нашем объекте:
Отлично видно, что нормали направлены в разные стороны. При этом, наш объект имеет относительно ровные формы. Порой, у более сложных объектов нормали вообще могут устраивать дикую пьяную потасовку. Чтобы это исправить, нам следует на плоских поверхностях направить вертексные нормали в одном направлении. Вот так:
Шейдинг low poly при такой настройке будет выглядеть следующим образом:
А нормалка станет выглядеть вот так:
Как мы видим, не считая фасок на гранях, мы имеем почти ровную нормалку. Если настроить вертексные нормали еще и у high poly, то мы и вовсе получим чистую карту нормалей. А это значит, что мы спокойно сможем использовать ее на других ассетах. Плюс на ровных поверхностях это решает проблему с триангуляцией.
Эпилог
Ну, вот, пожалуй и все. Вроде, я рассказал все, что планировал. За время написания этих постов на меня подписалось 270 человек. Довольно неплохое число, учитывая "непрофильность" ресурса. Как бы то ни было, мне очень приятно, что тема интересна большому количеству людей. Это значит, что желание развивать свои навыки у кого-то да есть. Простите, что иногда посты не были структурированы, что приходилось подолгу их ждать, что чукча, в конце концов, не писатель) Надеюсь, что из этих 270 человек, хотя бы двое будут использовать мои советы в своих работах, а главное продолжат искать новые знания везде, где только можно и станет рано или поздно крутым 3Dшником.
Серия "Работа над ошибками в 3D" завершена, но я с удовольствием отвечу на интересующие вас вопросы, которые вы зададите в комментах, ибо я по прежнему остаюсь пикабушником)
Огромное вам всем спасибо за внимание! Любите то что вы делаете и стремитесь делать это хорошо!
С уважением, Fajargo. Специально для Pikabu
И, наконец-то, здравствуйте, товарищи!
Моя прокрастинация достигла своей пиковой точки, и я решился-таки закончить серию постов, в которой мы разбираем самые распространенные ошибки начинающих 3D художников.
В этот раз я не буду давать ссылки на предыдущие посты (да простят меня SMM-щики). Если вас интересует данная тема, просто заходите в мой профиль. Там вы без труда найдете все, что я успел написать. И, если вы не знакомы с моим "творчеством", то перед прочтением этого поста рекомендую ознакомиться с предыдущими. Многое станет понятнее.
Полетели!
Сегодня нам предстоит углубиться в крайне неоднозначную тему запекания карты нормалей. Постараемся разобраться, когда это стоит делать, стоит ли вообще, и как это сделать правильно.
Начать разбор данной темы мне бы хотелось с ответа на вопрос в комментарии в одном из предыдущих постов:
"Тогда хотелось бы что бы рассказали про нужность запека нормалей. Множество людей сейчас бездумно лепят хайполи, и после пекут нормали и др по 4 к в саб пайнтере и довольные кичится, не думая о том, что 1 такая текстура забивает 10% памяти даже топовой видеокарты. При этом если посмотреть на модели (в частности пропсы) от больших компаний(тот же Дайс, 4a games), то на пропсах будут заметно, что никто им не делал уникальную юв и никто не пек нормали. Это просто проекция куба для юв и 1 материал для всех пропсов деревянного, металлического или др. типа. Единственные места, где были запеки - это оружие и персонажи, те то, что всегда в кадре.
Так хотелось бы услышать где и когда нужно печь карты, а когда лучше избежать этого, когда лучше сделать фаски, а когда лучше избежать и того и другого."
Как по мне, так это действительно очень важный вопрос. Прежде чем что-то делать, всегда стоит понять, зачем это делать. Так что, давайте по порядку.
Первым делом предлагаю вспомнить основной смысл карты нормалей: показать те детали, которые дорого показывать геометрией. В их число входят: фаски, небольшие выступы и впадины, общий рельеф и фактура материала. В их число, конечно же, стоит добавить "выравнивание" поверхности, т.е. показать поверхность более гладкой, чем она есть на самом деле. Соответственно, эти задачи можно разделить на две категории: работа с фактурой и работа с формой. Рельеф и неровности мы можем отнести к "фактурным", а фаски и выравнивание - к формообразующим.
Запомним это. Чуть позже мы вернемся к каждой их этих категорий.
Теперь нам необходимо вспомнить еще один важный аспект: нормаль - это не волшебство, а конкретный параметр, который содержит любая геометрия и без всяких текстурных карт. При этом карта нормалей служит только лишь для передачи информации о нормалях от high poly к low poly. Для большего понимания моей писанины вот вам картинка:
Как мы видим, серьезных отличий в отображении данных объектов не заметно даже при учете того, что low poly не использует карту нормалей. Нам достаточно "родных" нормалей объекта. Для того чтобы еще лучше продемонстрировать свою мысль, я покажу вам карту нормалей, которая получится, если мы запечем наш high poly:
Кроме еле заметных полос на гранях мы видим совершенно чистую карту нормалей. Говорит это о том, что в данной ситуации использовать "нормалку" вообще бессмысленно. И без того сомнительная выгода от ее использования начисто стирается весом карты и ресурсами на ее просчеты.
Возвращаясь к вопросу, с которого мы начали, мы видим, что в данной ситуации мы с легкостью можем "положить" на использование формообразующей "нормалки". Это сэкономит нам кучу нервов, времени и ресурсов при итоговой оптимизации.
Плюс это освобождает нам руки при повторном использовании фактурных материалов. Есть ли смысл уникально запекать каждое здание, если один и тот же материал кирпичной кладки мы используем на 30% архитектуры уровня? Нет. Есть ли смысл плодить кучу материалов, ссылающихся на одну и ту же по сути текстуру, если мы можем использовать один? Нет.
Отсюда-то и возникает вывод. Многие начинающие артисты упираются в паплайн: UV, затем бейкаем, затем текстурим. При этом профессиональный пайплайн с легкостью и без зазрения совести подгоняет UV нового объекта под бесшовный материал, а зачастую и под уникальный материал другого ассета, если на некоторых участках объекта текстура повторяется. Работа с "реальными" нормалями может сильно упростить жизнь при оптимизации проекта.
Тут стоит сделать небольшое отступление и поговорить о внесении разнообразия в ассет, который использует "чужие" текстуры. Тут существует два пути. Первый - это использование смешения материалов за счет vertex color. Этот путь используется преимущественно в архитектуре. Более подробно можно об этом посмотреть тут:
http://www.gdcvault.com/play/1023965/Building-Beauclair-Capi...
Никогда не устану давать ссылку на данный материал, ибо очень подробно и доходчиво разжеван пример использования описываемого подхода.
Второй путь - это декали. Тут тоже нет ничего особенного. Вы просто добавляете геометрией различные плашки с текстурой сколов, наклеек, кусков ржавчины и тому подобных вещей, если нужно, обрезая их картой альфы (прозрачностью). Таким образом, вы, например, можете сделать деревянный ящик, оверлапнув все его стороны в один шелл, а потом разнообразив его деталями.
И еще одно крохотное отступление: да, использование текстур от другого ассета вызывает больше draw call, да, прозрачность - это дополнительная нагрузка на видеокарту, да, добавление плашек с декалями повышает количество вертексов на объекте. Да, вы видели статью/ролик, что в 2007 году такой херни геймдевелоперы себе не позволяли. И, все же, в реальной работе вам всегда приходится искать оптимальное решение для каждого ассета. Нет никаких точных директив, как поступать в том или ином случае. Поиск баланса - это ваша основная задача. Точка.
Закончив с лирикой, вернемся к основной теме и закончим с формообразующей картой нормалей. Следующим аспектом формообразования являются более сложные объекты. Давайте вспомним наш высокополигональный чеснок. Чеснок является довольно сложным объектом с точки зрения формы. При этом потратить на него много полигонов мы не можем. Значит, вывод прост: печём? Но, нет. Тут стоит вспомнить, по какой причине мы не выделяем на него много полигонов. Никто этот чеснок в отрыве от общих декораций не увидит. Никому нафиг не нужны его плавные формы, а значит, и тратить ресурсы на нормалку мы тоже не будем. Вообще, отличным примером подобных решений по отказу от использования всего и вся является Ведьмак 3. Серьезно. После прочтения статьи поиграйте в него, рассмотрите нюансы окружения. Нет нормалки на половине ассетов? Ага. Неприкрытые hard edges то тут то там? Ага) И чем дальше в лес, тем шире жопа) Однако. Вспомните свои первые впечатления от картинки Ведьмака. Не знаю как у вас, а у меня было что-то вроде:
А теперь вспомните, что бюджет на разработку Ведьмака 3 в два, а то и в три раза меньше, чем большинства ААА игр. Этим, кстати, многие любили тыкать в самых крутых издателей. Так вот, как мы видим, снова никакой магии. Время = деньги. И чем меньше денег, тем меньше времени. Времени на разработку движка, который смог бы лучше оптимизировать ресурсы игры, времени на создание контента, плюс необходимость повторно использовать все и вся. И мое почтение CD Projekt: свои силы они сконцентрировали в очень правильном направлении, не раскидываясь своими ресурсами на детализацию того, на что игрок вообще не посмотрит, при этом, усиливая общие эффекты, отвлекая игрока от того, что сделано посредственно.
Что-то меня снова унесло в сторону) Давайте же подытожим. Если говорить о формообразующей нормалке, то реальная необходимость ее использования появляется только на основных ассетах (персонажи, оружие и т.п.) и на более-менее крупных объектах со сложной формой. В остальных случаях лучше обойтись без нее и сконцентрироваться на фактуре. К ней и переходим.
Конечно же, вы можете сказать, что уж при создании фактуры нам никак не обойтись без нормалки. Но не торопитесь. Говоря о фактуре и рельефе, мы на радость олдфагам переберемся в старые добрые времена, когда о карте нормалей (да даже о примитивном bump) в игровой индустрии только мечтали. Зачем? Давайте по порядку.
Начнем с PBR. Уверен, что большинство знают, что это (если нет, то прям немедленно в гугл!!!), однако, нас интересует одно из основных отличий PBR от "классической" схемы рендеринга и текстуринга. Заключается оно в карте цвета. Фишка в том, что в отличие от классической карты цвета в PBR используется Diffuse (Albedo) или Base Color. Единственная информация, которую несут эти карты - это, как вы поняли, цвет. Никаких бликов, затенений и тому подобной шелухи. Все вышеперечисленное уже формирует шейдер на основании информации с нормалки, specular, roughness, AO и т.д. Классическая же карта цвета несет в себе всю информацию не только о цвете, но и о свете (речь не о тенях, но о некоем аналоге specular + AO). Т.е. то, что PBR решает с помощью кучи карт, "классика" решает одной. Конечно же, с помощью классики вы не получите фотореалистичный результат при динамическом освещении, но есть одна область, в которой классика до сих пор ощущает себя прекрасно и вольготно. Речь, конечно же, о мультяшной стилизации. Тут вступают в силу те же приемы, что и в живописи. Ведь увидеть рельеф и глубину на картине вы можете, несмотря на наличие одной лишь карты. Собственно, карты цвета. Так же и здесь. Знаменитая Blizzard, если мне не изменяет память, до Overwatch вообще не использовала карту нормалей. А многие современные игры начали использовать стилизацию (хотя многим это не нравится), несмотря на то, что PBR достиг невероятных высот. Почему же? Ответ у нас в кармане. С появлением смартфонов и первых 3D игр на них вопрос жесточайшей оптимизации стряхнул с себя пыль и с новой силой начал косить нервы разработчиков, которые хотели ворваться на этот молодой на тот момент рынок. Вес игры из второстепенного параметра превратился чуть ли не в основной. Ибо мало кому придет в голову скачивать игру весом 5-6 Гб на свой мобильник. Тут-то и пришлось вспомнить старые дедовские методы. И, как выяснилось, это было отличным решением. Одна карта вместо 4-5. Прекрасно. По ходу вскрылся еще один крайне интересный нюанс. Стилизация стареет гораздо медленнее, чем игры со сверхреалистичной графикой. Этот факт в дальнейшем сподвиг многих на сочетание стилизованной картинки и PBR шейдера.
Все это словоблудие, в общем-то, призвано для одной простой цели. Поселить в вас мысль о том, что порой оптимизация закладывается в игру на самых ранних стадиях. Выбор стилистики - это не просто вопрос восприятия картинки игроком, формирования атмосферы и т.д. Это еще и простой технический вопрос. Как сделать картинку лучше, используя меньше ресурсов.
Я надеюсь, что теперь решать вопрос о целесообразности использования карты нормалей вам станет легче. А в следующем посте, который станет последним в этой серии, я расскажу о некоторых нюансах запекания нормалки, когда вопрос был однозначно решен в пользу ее необходимости.
Спасибо за внимание!
Моделирование небольшой Low Poly сценки в ускоренном в 10 раз виде. Просто интересная залипаловка
Тёмный портал на кладбище
Движок - Unity3d
Моделировал в Blender
Ссылку на скачивание в хорошем качестве скину в комментариях чтобы не сочли за рекламу