Making Of "1924 Alfa Romeo P2".
Всем привет! Меня зовут Костя. Появилась тут возможность поделиться процессом создания, что ж попробую. На самом деле это почти первая (то есть третья) работа со всеми этими картами нормалей и эмбиент окклюжн и все такое. До недавнего времени я немало поработал промышленным дизайнером, моделил много, но текстурирование мое заканчивалось на планарном наложении логотипа. Но всегда было интересно и привлекало как люди делают потертости, царапины, грязь и тому подобное оживление моделей. Но так как я еще много времени уделял рисованию от руки и раскрашиванию в фотошопе, до нормального 3д не мог добраться. Но наступил момент когда я все-таки решился окунуться в это и расширить свои 3д умения. Я знал что есть такая вещь как Normalmap, но не понимал его механики, запекания еще какие-то, это был для меня темный лес. Ну а дальше были онлайн курсы и этот автомобиль как финальная работа. Ну и куча YouTube уроков, куда же без них. Так что тут я опишу скорее опыт новичка и какие уроки вынес из этого процесса. Надеюсь для кого-то это тоже окажется полезным.
Выбор объекта
И так, работа делалась как игровая модель по очень условному пайп-лайну (драфт-хайполи-лоуполи--запекание необходимых текстур-текстурирование-подача), без каких-то конкретных технических требований типа поликаунт, все достаточно свободно, поэтому я просто рассчитывал что бы это нормально смотрелось на рендере, но и оптимизировать сетку старался тоже.
При выборе объекта надо было рассчитывать на свои силы, но и что бы легко не было. Машины - это с детства болезнь и заканчивал я дизайн транспорта, поэтому выбор был очевиден. То что это будет автомобиль GrandPrix 30-x определилось сразу, но какой конкретно выбирал долго. В одном нравятся одни элементы, в другом другие... Моделить то хочется с удовольствием. Но и референсов должно хватать, так как додумывать что там творится с органами управления и подвеской вообще не хотелось. В итоге выбор сделан.
Моделлинг
Моделил в Maya, осилил за время курса, до этого по работе сидел в Modo, ну а начинал с 3DMax. Переход был безболезненный, основные инструменты полигонального моделирования везде одинаковые. Но в Maya мне развертка показалась лучше и не хотелось лишний раз перекидывать модель между софтом.
Моделил по чертежам - не нужно определять пропорции на глаз, но от всех бед это не спасает, да и чертежи эти достаточно условны и все на них не увидишь, поэтому процесс остается достаточно творческим. Казалось бы форма не такая и сложная, но исправлений по кузову было очень много, и как же долго их исправлять, когда поздно замечаешь ошибки уже наплодив полигонов. А если некорректный элемент связан с другим, то совсем настроение падает). Но тут надо смотреть насколько заметна некорректность. Иногда может это и не стоит потраченного времени. Поэтому вначале лучше хорошенько изучить форму, но и опять-таки нужен опыт на что обращать внимание. Я по чертежам моделил немного, что-то увидел что-то нет.
Что ж, определяем размер, расставляем проекции по местам и поехали.
Начинаем с крупных форм, от общего к частному. В данном случае кузов я начинал с куба. Включаем симметрию, нарезаем, двигаем точки, снова нарезаем и двигаем точки, пока не приходим к нужной форме.
Есть несимметричный вырез для водителя и пассажира, определяем границы где от симметрии. нам придется отказаться и эти разрезы я сразу решил сделать по границам кузовных панелей.
Из этапов моделлинга, для меня самый приятный это начало, энтузиазм зашкаливает).Нравится сам процесс, это как конструктор, но детали создаешь сам с нуля. Нравится как начинает вырисовываться силуэт.
Далее уточнение, детали, расположение элементов постоянные движения точек туда сюда, каждый элемент тянет за собой другие. В итоге получаем грубый набросок всех основных элементов. Ну и пришлось разобраться в логике спицовки колеса.
Из тех сложностей что помню: пришлось повозиться с передней частью. Сразу не обратил внимание на разницу радиусов спереди и в центре кузова. И передок оказался недостаточно сферическим, решетка ложилась на него как-то не так. Сейчас это кажется очевидным, а тогда я это заметил на более позднем этапе, после сабдива и удаления истории. Тогда меня спас инструмент Lattice. Во время работы глаз замыливается.. Еще отмечу что не все узлы замоделил, некоторые было плохо видно, а какие-то просто забываются из-за количества и возвращаться доделывать, когда уже идет развертка совсем не хочется. Хорошо бы наверное вести список и отмечать какие элементы сделаны, а какие нет. Потому что один или два раза приходилось возвращаться из текстуринга и проходить весь круг заново с компоновкой разверток, запеканием, так как забывал детали, без которых совсем никак. И это мрак. Вроде бы это были черные заглушки за радиаторной решеткой и где выхлопная труба входит в кузов. Без них машина просвечивалась насквозь. И тут уже стараешься обойтись малой кровью. Если можно найти закуток на развертке что бы приткнуть их, так как тексель для них не особо важен, они же просто черные и наложить их можно друг на друга, то хорошо. А если совсем нет места, тогда все перекомпоновывать и перезапекать.
Далее эта модель разветвляется. Начинаем из нее делать хайполи со всеми винтиками и фасками, кроме заклепок, их я решил потом в SubstancePainterдобавить. Этот этап моделлинга уже менее творческий. Добавляем полигоны, уточняем формы, разрезы. Что не знал как делать упрощал. Например сетку на радиаторной решетке заменил просто на прутья и разместил за каркасом решетки. Как замоделить оригинальную до сих пор не представляю.
Немного затронул Zbrush. Помял трубу там и добавил немного складок на сиденья. Но это тоже все в познавательном режиме, в этой программе конечно надо набивать руку.
Итак, хайполи есть.
Далее возвращаюсь к исходной модели (драфт) и начинаю продумывать лоуполи. Решать что будет геометрией на модели, а что будет отрабатывать карта нормалей. Выступающие жабры решаю оставить геометрией, а те что вдавлены внутрь запечь. Вообще хотелось как можно больше деталей оставить для карты нормалей, понравился мне этот эффект.
Добавляю полигонов, что бы было более менее кругло, а эджи не влияющие на силуэт по возможности удаляю. Некоторые замоделенные элементы получалось доработать и оставить для лоуполи, а некоторые проще было замоделить заново поверх хайполи. Какие-то элементы подвески объединял в одну геометрию, так как анимация не предусматривалась, но и колеса я уже не мог повернуть для красивого ракурса, а при рендере такое желание возникло.
HighpolyLowpoly
Так же при создании лоуполи я решил оставлять симметричные и повторяющиеся детали только в одном экземпляре, что бы при развертке потом не задумываться и не искать что разворачивать, а что нет. Забегая вперед скажу что и запечку NormalMap я так же делал с такой половинной моделью.
Развертка
Изначально я почему-то решил все запихнуть в один текстурный сет. Это была плохая идея. Деталей получилось очень много и очень много супер мелких, которые могли существовать только при 8К. Но текстурировать с 8K такое себе удовольствие. В общем полная ерунда. И я решил, что один сет это будет кузов, а второй все остальные части. И тогда в 4К это было более менее что-то приемлемое, что даже в относительно близких шотах 2560х1440 выглядело прилично.
Хоть мне и понравилась развертка в Maya, я еще решил попробовать UVLayout. Удобно там сделано что развернутые детали исчезают из окна и остаются только не развернутые. В ней я и разворачивал свою машину. Сама развертка деталей заняла не так много времени, достаточно механический медитативный процесс, но перед которым нужно хорошенько подумать и четко решить какие элементы будут повторяться, накладываться друг на друга (overlap) для экономии UVпространства.Тут я начал слишком экономить и только потом замечал что не могу использовать оверлапы в некоторых местах.
Например вот эту боковую часть кузова я хотел сделать симметричной и только уже после компоновки, то есть запаковки текстурного сета я понимаю что у меня тут в ambientocclusionкарте будет затемнение от выхлопной трубы, которое с другой стороны мне совсем не нужно. Вообще я тогда немало себе подстав сделал из-за этого AmbientOcclusion в повторяющихся элементах. Про это надо очень внимательно подумать вначале. Некоторые элементы приходилось сдвигать относительно их оригинального местоположения что бы не переделывать много.
Также было с капотом и треугольными стикерами на нем. Изначально я думал что могу отзеркалить пол капота и поэтому сделал стикеры с четырёхлистником отдельной геометрией, так как рисунок на них не зеркальный. Но потом я замечаю что у капота есть разрез с фаской и заклепками с одной стороны, а с другой где выхлопная труба это сплошная деталь с боковой панелью без всяких заклепок. Соответственно normalmapбудетразный. И все это происходит после очередной ручной компоновки. Я добавляю в развертку вторую половину капота, а стикеры так как их уже можно просто нарисовать на каждой детали капота и удалить их геометрию, я конечно забываю, и переделывать компоновку в 20-йраз уже нет сил и терпения. В итоге вместо экономии получил лишнюю геометрию и драгоценное UVпространство израсходовано нерационально. Но надо двигаться дальше).
Итак, имеем две развертки. Развертку с кузовом руками получилось разложить лучше – тексель (количество пикселей занимаемое деталью) получился выше. Развертка с остальными деталями вручную точно не вариант, особенно несколько раз, только автоматически. Но немного полоски по краям пришлось подвигать – привести к квадратному заполнению. Саму компоновку делал в Maya.
Кузов
Остальные части
Запекание текстур
Запекал по итогу в мармосете, но по некоторым причинам пришлось попробовать в разных программах. Вообще с самого начала этой работы надо мной все время висел груз мыслей о том, как я всю эту кучу деталей буду запекать. Это реально пугало. Надо было все разбить на группы непересекающихся элементов (мармосет позволяет не разносить все элементы друг от друга – это удобно). Ну главное начать. И на деле все оказалось не так страшно и долго.
Запечка NormalMap текстурного сета частей
Проблемы пришли с другой стороны. Импортирую я свои группы в мармосет, настраиваю все там опции, нажимаю бэйк и все зависает. Первая мысль: много объектов, большое разрешение и все такое. И начинаю суетиться по программам и они запекают, поэтому я решаю что проблемы точно в самого мармосета. Но в других программах тоже не все так просто, то одно не так, то другое.
Основная проблема конечно фаски, в каких-то местах ок, в каких то не очень и без опыта разбираться в каждой программе тоже не вариант. Возвращаюсь к мармосету, потому что до этого пару небольших работ запекалось там отлично. Начинаю импортировать не все группы сразу, а по одной. И да, некоторые запекаются. Короче я пришел к тому что в группе которая не запекается я начал импортировать по одному элементу и таким образом находил косячный элемент с проблемами в геометрии. Но когда делал автоматическую проверку на ошибки в Maya, то она мне толком ничего не показывала или я не видел, или не хотел видеть. В общем вручную находил толи задвоенные полигоны, толи эджи, толи точки, уже не помню. Находил немного, но мне хватило. И был еще такой момент, что вышли новые драйвера для Radeon,ну и я решил обновить их конечно и после этого мармосет вообще перестал печь от слова вообще, даже простой кубик, бейк и он просто зависает. Но это тоже почти сразу вычислилось и откатил я это дело обратно - помогло. Не знаю это только у меня такая проблема или общая. Инфы я про этот случай не нашел. Возможно дело еще в чем-то.
ВмармосетеязапекNormal,Thikness, Position и ID materials. AO вроде бы в SubstancePainter.Normal и особенно AO пришлось поправлять вручную в фотошопе, как я не сражался все равно были некорректные места, но тут дело опыта, что получилось исправлял как мог. Так же надо отметить что с такой моделью запечь Normalи AOза один заход уже не получится. В AOуже не нужны группы, там каждый элемент влияет на другой, и импортировать надо уже другую конфигурацию модели или бэйк группы организовывать по-другому. И не забываем при запечке сдвигать на развертке оверлапы на 1 в сторону, что бы ничего не запекалось друг на друга и не появлялись всякие артефакты.
Этот этап получился самый время и трудозатратный, но результатом я остался доволен учитывая все трудности с которыми пришлось столкнуться.
Лоуполи
NormalMap и AO
Текстурирование
Текстурирование уже более приятный процесс для меня, с каждым новым материалом моделька становится красивее и реалистичнее. Изначально при выборе референса я уже отметил пару акцентов оживления модели. Это то, что он будет неновый, немного грязный автомобиль, следы дыма на кузове от выхлопной трубы и трещины на коже сиденья.
Дальше тоже все поэтапно. Работал в metallic/roughness. Начал с кузова. Добавил слой с height и кисточкой нарисовал выступающие заклепки и кое-где неглубокие вмятины, как-будто заклепки приминают панели кузова к каркасу и еще пару мелких рельефов. Потом разбивка по цветам и сразу с цветом я накручивал примерный рафнес и металлик если он присутствовал в материале. Далее стикеры, логотипы, номера. Потом царапины, сколы, грязь, разводы. Логика добавление этих элементов у меня получилась простая. Сначала для каждого материала добавлял свои особенности, где ржавчину, где точки какие-то. А потом уже поверх все материалов общую грязь, пыль, как и в жизни в принципе. Пыли и грязи в итоге у меня получилось немного.. Когда есть хорошие референсы просто смотришь и пытаешься сделать похоже. Подбираешь гранжи, на них накладываешь другие гранжи, маски и все такое пока не будет похоже. Главное не упустить интересные детали на этих референсах. И из-за количества материалов бывает уже трудновато добавлять эти особенности и компьютеру тоже. Если было было что-то более сложное, наверное пришлось бы уже текстурировать частями. Например я долго ленился на протектор нанести мелкие прилипшие камушки, но потом сделал и не пожалел. Можно было бы и еще добавить чего-нибудь выразительного, но когда идей нет, то лучше двигаться дальше. Да и когда столько материалов, то вытягивать каждый элемент, как если бы это был отдельный объект я посчитал бессмысленным так как он все равно затеряется среди других. Особенно это касается интерьера. Но крупным элементам как кузов, сиденья, колеса конечно лучше уделить больше внимания. И следить что бы одни элементы не выбивались из других, равномерная деталировка и стилистика материалов. Но с хорошим референсом это не сложно.
Вариант настроенного материала для ручного тормоза.
Еще наверное посоветовал бы при настройке металлических материалов и неметаллических тоже, чаще переключать карты окружения. Я текстурировал всю машину с одним освещением, и потом при рендере с другим, обнаружил что выхлопная труба оказалась более блестящей, чем когда я ее настраивал, но решил что это не критично и оставил, ну то есть поленился.
Вообще я как-то увидел случайно в поиске среди других картинок скрин с потертым шлемом вроде бы рыцарским и он так реалистично выглядел и в тексте под ним было упоминание SubstancePainter. Это было первое знакомство с этой программой, хоть я и не понимал что в ней конкретно делают, но это был тогда какой-то знак). В общем хорошая, полезная программа!
Освещение и рендер
Карты из SubstancePainter экспортированы, идем обратно в мармосет, подгружаем карты в материал. Пробую ставить стандартное трехточечное освещение, но тут тоже опыта мало. Долго я крутил эти источники что бы прийти к более менее результату (до этого по работе просто кидал HDRи не парился). При выставлении света старался не терять основной объем кузова и что бы всякие мелкие детали типа вмятин, сколов тоже не терялись. То есть все над чем стараешься при текстурировании должно остаться заметным. И игра с теплым и холодным светом тоже помогает оживить картинку.
Финальные шоты я решил делать в Blender. Мармосет в плане отражений очень условный, то есть у меня на кузове или поверхности на чем стоит автомобиль отражалось только пол колеса или тень колес была без спиц. Но тут конечно дело опыта, можно и в мармосете сделать офигенно, просто мне было проще в Blender.
Схема освещения в Blender
Еще для себя было интересно научиться нормально вписывать автомобиль в фотку, все так же никак не доходили руки. Начал я тоже с мармосета, хотел легко отделаться но не получилось, перешел в Blender, там гибкости побольше будет.
Marmoset
Blender
Но на самом деле я так и не нашел подходящего фона для такой машины. Хотелось что-то вроде старых гаражей или с воротами на старой фабрике, потратил уйму времени, но так ничего и не подвернулось.
Финальные HDRIи фотки брал на hdrihaven.com.
В настройке освещения с фоном идеально конечно когда карта освещения является и фоновым изображением тогда со светом проблем почти нет. Ну а если не совпадает, ищем окружение хоть как-то похожее на фон, следим что бы направление освещения совпадало со светом на фоновом изображении и тени были более менее одинаковые. И удобно рендерить все отдельными слоями, тень, машину, ну и если машина например отражается в мокром асфальте, тоже отдельно отрендерить это отражение, и потом все это складывается вместе в фотошопе, отдельно покрутить, в общем лучше подогнать. Можно этот процесс оказывается сразу настроить в программе, в моем случае Blender, композитинг, что бы все это рендерилось, корректировалось и складывалось в одну картинку, тут кому как удобнее. Еще пробовал добавлять под машину плейн с изображением поверхности похожим на то что на фоновой картинке, если это например характерная плитка, тогда она отражается на кузове и машина лучше вписывается в фон. Плейн этот сам не рендерится, а только его отражение на машине.
Так по слоям вписывать объект в фон я пробовал впервые. Больше гибкости – лучше результат. Вообще хочется замоделить некий транспорт вместе с окружением уже без всяких фоновых картинок, но это уже другая история.
В заключении могу сказать очевидное, что делать такие работы (сложнее чем обычно) конечно полезно для прокачки. Я для себя во время этого процесса открыл много нового. Но и выдержку надо проявлять. Бывали моменты когда ложишься спать и думаешь скорее бы проснуться и приступить к работе, а бывало желание пропадало вовсе, и влиять на это могут очень разные причины. Мне в такие моменты помогало правило «сесть и хоть что-то начать делать» и я быстро втягивался. Потратил я на эту работу, моделлинг и текстуринг, два месяца. В следующий раз думаю можно было бы сделать раза в два быстрее. Ну и это была финальная работа на курсе, нужно было обязательно доделать. При самостоятельной работе отложить на потом очень легко. Дисциплина это хорошо, но делать с интересом и любимое занятие, намного продуктивнее. Поэтому желаю всем кто не нашел, найти свое направление, а то их тут многовато в 3д, нескончаемого энтузиазма и новых открытий!