Making Of "Бомбардировщик Марадер(Wh 40K)"
Здравствуйте, меня зовут Мезенцев Андрей. Мне 23 года, живу в городе Белгороде, работаю дизайнером в Белгородском государственном технологическом университете. Компьютерной графикой занимаюсь около 5 лет, а вот игровым моделированием меньше года. Мечтаю стать игровым моделлером и активно совершенствуюсь в этом направлении, результатом этого совершенствования является модель бомбардировщика для некоммерческого мода на игру X3 Terran Conflict, making of которой я представляю вашему вниманию.
Начнем с того что я не профессионал, с терминологией не знаком и все увиденное вами в этом making of - исключительно мой личный опыт. Люблю изобретать велосипед :)
Теперь к делу.
Работаю в программах 3ds max 2009/2010 (с V-ray и плагином textporter) и Photoshop CS2 (с плагинами для создания карт нормалей и работы с форматом .dds).
Такие программы как ZBrush, Mudbox, 3DPainter и другие значительно облегчают и ускоряют процесс создания модели, но, к сожалению, я ими еще не овладел, так что приходится работать с тем что есть.
Работу над моделью условно делю на этапы:
- 1. Подготовительный; 2. Моделирование; 3. Создание текстурной развертки; 4. Рисование текстур; 5. Завершающий
1. Подготовительный этап.
Как всегда я начал со сбора референсов, в моем случае это фотографии пластиковой модельки бомбардировщика для настольной игры. Кроме того мне удалось найти на него чертежи. Наличие чертежа уменьшает время на создание модели раза в полтора.
Игровое моделирование отличается от высокополигонального наличием множества ограничений и тонкостей, которые в hi-poly моделинге играют незначительную роль. Эти ограничения в основном налагаются используемым в игре движком, а так же местом и ролью модели в игре.
Первое ограничение, присутствующее во всех играх, это количество полигонов. Каждый движок имеет лимит на максимальное количество полигонов в кадре. И чем ближе к этому значению, тем больше ресурсов требуется на обработку графики и игра начинает тормозить, а если количество полигонов превысило этот лимит, то игра обычно зависает. Кроме того, в большинстве движков есть лимит на количество полигонов в одной модели. В зависимости от движка к модели могут предъявляться и другие дополнительные требования.
Далее текстуры. В игровых движках всегда есть ограничения на максимальное разрешение текстур, а так же на количество материалов, примененных к одной модели. Кроме того в каждом движке есть свои заморочки с использованием текстур и шейдеров и различные требования к ним, где то карты блеска цветные, а где то черно белые, где то 8 битная прозрачность а где то 2 битная, где то используются карты высот, а где то карты нормалей.
Перед началом работы необходимо подробно изучить возможности игрового движка, с которым предстоит работать, его ограничения и требования. Далее нужно понять, какое место занимает создаваемая модель в игре и на основе этих выводов определить, какой уровень детализации она будет иметь, что на ней следует делать полигонами, а что рисовать текстурами.
Моя модель создается для космического симулятора, поэтому первый уровень детализации (та модель которую видит игрок на близком расстоянии, почти в упор) следует сделать максимально детальным, тем не менее, более чем 20 000 полигонов на модель уделять нет смысла. Корабли аналогичных размеров, созданные самими разработчиками игры, имеют в среднем такое же количество полигонов. Все последующие уровни детализации (дополнительные модели которые загружаются по мере удаления самолета от игрока) следует сделать максимально простыми, оставляя по 40-30% полигонов от предыдущего уровня детализации.
На модель имеет смысл наложить только 2 материала, один материал (с шейдером металла) на весь корпус, а второй (с шейдером стекла) на иллюминаторы. Оптимальное разрешение текстур – 1024х1024, максимум 2048х2048, меньшее разрешение будет выглядеть размыто вблизи, а большее для игрока все равно не будет заметно, только память потратит.
2. Моделирование.
Я создал в 3д максе две плоскости, на которые наложил проекции моего чертежа. Я инвертировал цвета чертежа, потому что на темном фоне будут лучше видны грани модели.
Моделирование я начал с прямоугольника, на который наложил стандартный материал белого цвета с включенной галкой wire (сетка).
В самом моделинге ничего сверхъестественного нет, просто полигональное моделирование. Я не использую сплайны, булеан, NURMS и т.д. они дают лишние полигоны, которые потом приходится убирать. Главное правило, которым я руководствовался – использовать по возможности наименьшее количество полигонов. В рамках данного making of я не буду этот вопрос освещать, думаю советы по игровому моделированию можно найти в интернете, сам же я просто изучал чужие игровые модели.
Моделинг закончен, у меня получилось около 15000 полигонов, это много для стратегии например, но вполне оправданно для первого уровня детализации в космическм симуляторе, т.е. для той модели, которую игрок видит в непосредственной близости от себя.
Я не моделировал лопасти воздухозаборников потому что использую одну отдельную модель лопастей для всех имперских самолетов.
3 .Текстурная развертка
Первым делом я создал обычный материал с текстурной картой Checker (шашечки) со значением tiling например 32.
Далее применил к модели модификатор unwrap UVW и всю текстурную развертку делал с помощью него.
Шахматные клетки позволят увидеть деформации текстуры на модели. В идеале нужно, чтобы вся модель была покрыта квадратиками одинакового размера. Там где видны ромбики или прямоугольники - текстура деформирована, вытянута или сжата, а если размер квадратиков разный, значит, развертка не равномерна по масштабу.
В настройках модификатора я выбрал пункт Mapping -> Normal mapping ->Box mapping. Это автоматический алгоритм создания развертки, я всегда начинаю с него.
Далее я вручную выбирал отдельные детали на 3д модели и упорядочивал их текстурные координаты, это занудливая работа, но зато я имел полный контроль над тем, что делаю. Подробнее о создании текстурных разверток вы можете прочитать вот в этом уроке: http://www.render.ru/books/show_book.php?book_id=773.
На иллюминаторах размер квадратиков меньше, потому что там будет применена другая текстура с другим разрешением.
4. Рисование текстур
Первым делом я экспортировал текстурную развертку из 3д макса с помощью плагина texporter, оптимально сделать белые грани на черном фоне без всяких заливок. Текстуру лучше взять в 2-4 раза больше чем нужно для игры, а потом уменьшить ее до нужного размера.
Использование этого плагина – дело привычки, абсолютно аналогичного эффекта можно добиться, используя рендер в текстуру предварительно наложив на модель стандартный материал белого цвета, с галочкой wire(сетка) и включенным на максимум самосвечением.
Далее я перешел с этой разверткой в фотошоп и удалил с нее черный цвет, оставляя одни белые линии. Слой с разверткой я ставлю всегда верхним и рисую текстуру ориентируясь на него.
Следующим этапом я создал карту рассеянного освещения или как там она называется. Для этого использовал рендеринг в текстуру (render to texture) с v-ray. Следует помнить, что, если на одних текстурных координатах находятся две и более детали, то при рендеринге в текстуру на этом месте появятся артефакты. Поэтому я отделил (detach) от модели те части, которые находятся на одних текстурных координатах (всю зеркально отраженную половину модели и на оставшейся половине 2 из 3 автопушек на носу, 6 из 7 шлангов на двигателях, одну бомбу и т.д.) Эту задачу можно решить проще, просто не делая на одних координатах несколько деталей, но в этом случае не очень экономно используется пространство текстуры. Потом я включил V-ray (мне нравятся вот эти настройки http://www.render.ru/books/show_book.php?book_id=604 спасибо), наложил на модель (и ее отделенные части) белый материал VRayMtl и добавил VRayPhisicalCam (перед началом рендеринга надо выбрать активным вид из этой камеры, иначе получится бяка).
А далее есть два алгоритма. Первый: Помещаю модель центр коробки (Box) на которую наложен светящийся материал VRayLightMtl.
Второй: Без всяких Box’ов, просто включаю GL Environment в настройках V-Ray:: Environment.
Результаты получаются почти одинаковые, но первый вариант дает, по-моему более симпатичную картинку.
Получил что то вроде этого:
Далее, ориентируясь на текстурную развертку и по теням на карте рассеянного освещения, я нарисовал карту высот (bump map), тут все просто, о том, что это такое читайте в интернете.
Потом, в новом слое я нарисовал базовые цвета модели, а сверху этого слоя поместил с режимом soft-light тайловую текстуру поцарапанного металла (в интернете бесплатных текстур полно). Получилась поверхность вороненого металла, меди и серой краски с мелкими царапинками повсюду от долгой эксплуатации.
Получилось серо, тогда я добавил украшений в отдельном слое поверх слоя с базовым цветом. К этому слою с украшениями добавил маску прозрачности с теми же царапинами что и раньше. (получился эффект того, что яркая краска в некоторых местах ободралась обнажая металл)
Далее я скопировал слой с бамп мэппингом, поместил его поверх всех этих слоев с режимом наложения Overlay. Получилось вот так:
Кроме того я отделил небольшие выступающие части корпуса в новый слой и применил к ним стиль со следующими настройками:
При рисовании каждой текстуры я создаю множество дополнительных слоев с различными стилями и режимами наложения.
А далее пошла монотонная ручная работа, которую никакими стилями уже не сделать.
Я создал сверху слой под названием «Царапины» с обычным режимом наложения и на нем белым цветом, обычными кисточками нарисовал царапины и потертости на выступающих частях самолета, которые могут появиться в ходе его эксплуатации.
Потом еще один слой «Грязь» с режимом наложения Multiply. На нем я нарисовал черным цветом нагар на стволах оружия, и следы копоти на крыльях от выхлопных труб, темно коричневым грязь и светло коричневым потеки топлива.
Наконец текстура была готова:
Теперь нужно поверх поместить карту рассеянного освещения с режимом наложения multiply, хотя я настолько увлекся выделением теней вручную, что в ней почти отпал смысл, не повторяйте эту ошибку:)
Текстура диффузии готова, также я добавил ей в альфа канал прозрачность. На основе этого файла я сделал карту блеска. Для этого я отключил слой с рассеянным освещением, убрал нарисованные вручную тени, и слой с украшениями (на котором красные полоски, цифры и имперский орел)
Оставшиеся слои я слил вместе, обесцветил и повысил их контрастность используя layers. Я намеренно сделал ее почти черной – имперская техника красится матовой краской, так что блестеть будут только царапины и детали из меди.
Теперь нужно вернуться к бамп мэппингу. Я отключил слои с базовой покраской, с украшениями и слой с грязью (она не настолько толстым слоем покрывает самолет, что ее стоило бы делать объемной). А вот два слоя с царапинами (мелкие однородные и крупные, нарисованные вручную) я оставил, инвертировал их цвет и поставил им прозрачность примерно 20% (царапины то неглубокие, всего лишь ободрана краска). Далее слил все эти слои вместе и применил к ним плагин от Nvidia для создания карт нормалей.
Осталось сделать карту самосвечения. Для этого я нарисовал на черном фоне базовую карту самосвечения (цветные фары и лампочки, и скопировал их же в альфа канал), затем открыл в 3д максе тот файл, где я делал карту рассеянного освещения, убрал из него все источники света, создал материал типа blend, где в первый слой поставил VRayMtl с нарисованными ранее текстурами диффузии, бампа и блеска, а во второй слой поставил VRayLightMtl с моей базовой картой самосвечения и прозрачностью по альфа каналу. Потом применил этот материал к модели самолета и произвел рендеринг в текстуру.
Текстуры готовы.
5. Завершающий этап
На этом этапе я подготовил модель и текстуры к экспорту. Сделал уровни детализации модели (LOD) с помощью модификатора MultiRec, сохранил все текстуры в формате .dds, применил их к модели, создал в сцене вспомогателные объекты (места установки оружия, точки генерации частиц, камеру и т.д.) и наконец экспортировал модель в игру.
Все, работа закончена.
Спасибо за внимание, надеюсь было интересно :)