Вход в систему

Логин:
Пароль:
Вход Зарегистрироваться Вспомнить   пароль
Информация на данной странице предоставлена нашим информационным партнером Игромания.ру

Нереальный Carmageddon

Автор: Павел Севец
Полный текст
    Эпиграф:
    Hang on to yer helmet...
    Слоган игры Carmageddon

   
UT2004 стал столь популярным во многом благодаря новому игровому режиму — Onslaught. У геймеров наконец-то появилась возможность не только пострелять из всевозможных пушек, но и поездить (и даже полетать!) на боевых машинах. Вот только многие по-прежнему недовольны слишком маленьким автопарком 2004-го. Проведя немало бессонных ночей в редакции, срезая друг другу головы (разумеется, в виртуальности) из зениток и лазеров, мы пришли к тому же выводу, что и герой небезызвестного мультфильма. Малофато будет! Малофато!
    А раз “малофато”, то единственный способ удовлетворить потребность в большем — сделать это большее своими руками. Поэтому сегодня мы займемся созданием нового транспортного средства для игры. Причем непростого. Приготовьтесь, фанаты Carmageddon, сегодня на вашей улице праздник — мы будем делать болид из “Кармы”. Настоящую машину смерти. Можно распинаться дальше, но вы лучше просто взгляните на скриншоты.
    Физический движок игры запросто просчитывает взаимодействия между различными объектами (и персонажами), тем самым давая волю буйной фантазии. Поэтому мы будем делать не просто брутальную машину, способную только стрелять из пушки по всему, что движется. Мы сделаем кар, способный сбивать противников. Устроим “нереальный кармагеддон”!
    Все упоминающиеся в статье файлы (*.psd и *.max) находятся на
наших CD/DVD.

Рис. 1 Концепт-арт машины.
    Что нам понадобится
   
Самое важное. Имейте в виду, что для четкого понимания того, что описано ниже, вам потребуется некоторое знание принципов работы в 3DMax. Для наших постоянных читателей — это не проблема. Для тех же, кто только-только начал читать наш журнал, сообщаем. Несколько номеров назад мы закончили публиковать в журнале цикл статей под общим названием “Игромодельер”, в которых детально рассказывали о том, как сделать новую модель для UT. Так вот — знаний, изложенных в этих материалах, более чем достаточно для понимания того, что описано в статьях цикла “Нереальный Carmageddon”. И мы выкладываем весь цикл “Игромодельер” на CD/DVD в раздел “Инфоблок”. Если вам что-то в сегодняшней статье будет непонятно, просто вставляете диск в привод, изучаете соответствующий материал и продолжаете моделировать машину.
    Для работы нам понадобятся 3Ds MAX 6, Photoshop 7/Cs, плагин ActorX для экспорта из “Макса” в UnrealED3 и, наконец, DDS-плагин для “Фотошопа”, позволяющий преобразовывать 32-битные изображения в специальный формат dds. Еще нам потребуется концептуальный набросок нашей машины (рис. 1), выполненный хотя бы в двух проекциях (сбоку, сверху).

Рис. 2
Законченная
модель с
правильно
настроенной
разверткой.
    Создание и настройка модели
   
Считаем, что модель у нас полностью симметрична относительно продольной вертикальной плоскости, поэтому и сеточный каркас, и текстура у нас симметричные. А значит — изготавливаем половину сетки, обтекстуриваем ее, тогда две такие половины после склеивания дадут нам целую модель.
    Модель, которую сделал я на основе своих концепт-артов, можно посмотреть в файле Model_Parts.max. Когда модель пребывает в виде набора отдельных объектов, она не будет корректно пониматься движком игры. Во-первых, на уровне элементов (Elements) присоединяем к каркасу корпуса все-все детали, кроме подвесок и колес. Во-вторых, производим перемасштабирование разверток всех объектов сцены. В моем случае текстур предполагается две штуки: одна — для корпуса, вторая — для всего остального. Поэтому развертку настраиваем для обеих текстур (Material_ID 1 и 2). После данных действий модель приобрела вид, как на рис. 2.
    Важный момент — масштаб нашей машины должен быть таковым, чтобы соответствовать по габаритам колес модели боевого кара Scorpion (с раскладывающимися в стороны лезвиями). Достигается это просто. Создаем цилиндр радиуса 24 Generic Units (если у вас в “Максе” стоит другая единица измерения, то перейти к GU можно в Customize/Units Setup), выделяем всю
Рис. 3 Глобальная и локальная
системы координат одного и
того же объекта.
машину и масштабируем до тех пор, пока диаметры цилиндра и колеса не совпадут.
    Результат вышеописанных действий находится в файле Model_Complete.max.

   
Настройка осей колес и подвесок
   
Поскольку при создании модели мы создавали зеркальную копию смоделированной половины, то и локальные оси координат объектов также зеркально отразились. И это может нам создать много проблем в игре, если ситуацию не исправить. Но дело поправимо!
    Давайте для начала разберемся, чем локальные координаты объекта отличаются от глобальных и что такое опорная точка объекта (pivot), т.к. многие начинающие моделлеры первые два понятия часто путают, а о втором просто не знают. Итак, вокруг опорной точки осуществляются все манипуляции над объектом — масштабирование, перемещение и вращение. Аналогом в природе является центр тяжести. В любой среде 3D-графики имеется некоторая глобальная система координат (ГСК, World Coordinate System), относительно которой и производятся все преобразования. Опорная точка определяет положение данного объекта (координаты {X,Y,Z}) в ГСК, так что с ним отождествляется локальная система координат (ЛСК, Local Coordinate System). Началом координат (нулем) в ЛСК является по умолчанию опорная точка, а
Рис. 4 Инструмент
коррекции опорной точки.
направления осей совпадают с направлениями осей ГСК. Как только мы объект повернули (переместили, промасштабировали) в ГСК, вместе с объектом будет трансформирована и ЛСК (рис. 3).
    Для коррекции локальных координат объектов в “Максе” существует специальный инструмент — в командной панели на вкладке Hierarchy в группе Adjust Pivot есть кнопка Affect Pivot Only (рис. 4). Нажатие этой кнопки включает режим модификации ЛСК, которая начинает при этом отображаться явно в виде тройки объемных стрелок. На рис. 5 показано, как с помощью данного инструмента меняется ЛСК подвески: ее опорная точка перемещается в место крепления к корпусу машины. Таким образом, локальная система координат подвески следующая: ось Z направлена вверх, ось Y — назад, а ось X — в сторону противоположного колеса.
    А теперь отвечу на вопрос, зачем все это нужно. Дело в том, что игра производит перемещения объектов именно относительно их опорных точек, а повороты — относительно осей ЛСК. Так что теперь, указав движку в качестве Y ось вращения, мы получаем корректное поведение подвески в игре. Об этом мы будем детально говорить при внедрении модели в игру во второй части статьи. Аналогично корректируем оставшиеся три подвески.
    Небольшое отступление о правом повороте. Мы везде рассматриваем фиксированный набор осей {X,Y,Z}, и порядок следования осей важен! Какую бы ось мы не выбрали в качестве оси вращения, оставшиеся две оси однозначно определяют правый поворот. Для того чтобы выяснить, как именно это происходит, рассмотрим три набора осей: {X,Y,Z}, {Y,Z,X}, {Z,X,Y}. Они образуют циклическую перестановку элементов набора осей, то есть если мы X “отрезаем” от первого
Рис. 5 Изменение положения
опорной точки у подвески
колеса.
списка, то “приклеиваем” обязательно в конец оставшегося списка! А вот каким замечательным свойством эти три набора обладают: оказывается, если мы выберем осью вращения X, то правый поворот происходит от Y к Z, если ось вращения — Y, то поворот — от Z к X, если ось вращения — Z, то поворот — от X к Y. Правило правого поворота нужно для того, чтобы контролировать на этапе создания модели, насколько корректно будет происходить анимация машины — повороты колес и подвесок в совокупности.
    С ЛСК колес связана отдельная история. На первый взгляд, все совершенно замечательно: локальные оси Z направлены друг к другу, а вращение относительно этих осей, в соответствии с правилом правого поворота (от X к Y), вроде бы правильное: колеса крутятся по ходу машины (красная стрелка на рис. 6). И такое положение осей можно было бы считать нормальным, если бы не одно “НО”: а как будут поворачиваться передние (направляющие) колеса, когда водитель крутит рулем?! И вовсе не трудно нам заметить, что поворачиваться они будут очень странно — друг к другу. Нормальные машины так ездить не умеют, значит — будем исправлять!
Рис. 6 Поворот
локальной системы
координат левого
колеса.
    Несложно понять, как расположить локальные оси левого колеса, чтобы оба колеса не только нормально вращались, но и естественным образом поворачивались при поворотах руля. Для этого поворачиваем ЛСК на 180 градусов относительно ее оси Z (рис. 6). Теперь водитель может спокойно крутить баранкой, не боясь аварий!
    Оси задних колес можно не менять, так как направляющими они не являются. Манипуляции с колесами наглядно показаны в файле Axes_Tweaking.max.

   
Связывание частей машины
   
Пока машина представлена как набор из четырех подвесок, четырех колес, корпуса и Dummy-объекта. “Пустышка” (Dummy) обозначает на корпусе машины место крепления огнестрельного оружия. Все части связываем вместе определенным образом с помощью инструмента Select and Link (рядом с кнопками Undo, Redo). Делаем простое действие — привязываем все упомянутые части к корпусу. Привязка делается так: щелкаем на объекте, который привязываем, левой кнопкой мышки и, удерживая кнопку нажатой, перемещаем курсор на объект, к которому привязываем, после чего кнопку мышки отпускаем. Важно: ни в коем случае не привязывайте колеса к подвескам!
    Для чего нужна привязка. Когда объект перемещается в пространстве, то все привязанные к нему другие объекты также перемещаются вместе с ним. В нашем случае это совершенно необходимо: разве может быть, чтобы корпус машины уехал, оставив собственные колеса позади?!
    Теперь, когда машина является цельным объектом, перемещаем опорную точку корпуса в его центр масс, а сам корпус — в начало координат — точку {0,0,0}. Чтобы последнюю операцию произвести наиболее легко, в режиме Select and Move кликаем правой кнопкой мышки на кнопке Select and Move и в появившемся окошке Transform Type-In в поля группы Absolute World вводим нули. Помимо этого нужно еще ориентировать корпус в пространстве особым
Рис. 7
Этапы
создания
текстур
машины.
образом: ось X у нас должна совпадать с направлением движения машины, а ось Z должна быть направлена вверх.
    Осталось сделать еще кое-что важное — дать нормальные осмысленные имена названиям деталей (если это не сделано на этапе моделлинга). Мой вариант именования:
    Корпус — Chassis.
    Передние левые колесо и подвеска — FrontLeftWheel и FLSuspension соответственно.
    Передние правые колесо и подвеска — FrontRightWheel и FRSuspension.
    Задние левые колесо и подвеска — RearLeftWheel и RLSuspension.
    Задние правые колесо и подвеска — RearRightWheel и RRSuspension.
Рис. 8 Слои финальной
текстуры корпуса.
    Dummy для пушки — WeaponAttachment.
    Теперь машина полностью готова к “покраске”!

   
Создание материала для модели
   
Качественно сделанная модель не гарантирует, что смотреться работа будет “на отлично”. Мы должны создать материал, соответствующий задумке, выглядящий по-настоящему правдоподобно. Вид четырехколесного монстра должен быть действительно пугающим (в хорошем смысле слова)!

    Создание слоев материала
   
Для начала разберемся, из каких слоев состоит поверхность нашей машины (рис. 7 и рис. 8).
    Базовый слой. Содержит основные цветовые составляющие поверхности. Как будто машину только что сняли с конвейера — только краска и серебристый металл. В моем случае корпус имеет оранжевый цвет, металл — серый, бампер — темно-коричневый. Создать подобное относительно нетрудно. Набросок текстуры делаем в уже знакомом нам Deep Paint 3D, после чего дорабатываем в “Фотошопе”. Особо изощряться на данном этапе не стоит, а главное, к чему стремиться, — наложить цвета ровно и не забыть нарисовать все-все мелкие детали.
    Слой износа. Наносится, как DarkLight/Overlay-слой, поверх базового. Служит для имитации признаков естественного механического износа: вмятин, царапин, сколов краски. Сделать такой слой также не составит большого труда. Идеальная среда создания такой карты —
Рис. 9 Рисование неровностей
поверхности.
Painter 7/8 (с помощью инструментов Impasto), но и стандартными средствами “Фотошопа” такой слой сделать можно. Для этого на нейтрально сером фоне (R=128,G=128,B=128) наносим разными кистями неровности поверхности. Градациями светлее нейтрального рисуем подсветки неровностей, а градациями темнее — тени неровности (рис. 9). Логика рисования повреждений нехитрая: все, что выступает над поверхностью, так или иначе обязательно царапается.
    Слой грязи (и ржавчины). Представляет собой Multiply-слой, создающий эффект грязной поверхности. Какие правила рисования грязи существуют. Во-первых, грязь и ржавчина имеют обыкновение скапливаться в углублениях поверхности (вмятины, места стыков). Во-вторых, грязь обильно покрывает заднюю
Рис. 10 Карта окружения типа
Latitude/Longitude.
часть машины, кто в этом сомневается, может понаблюдать за автомобилями на улице. Воздушные потоки, создаваемые машиной при движении, “впечатывают” в заднюю часть корпуса поднятую колесами в воздух грязь и пыль. В-третьих, днище машины обязательно будет грязнее всего остального. Как и в случае с моделью Erazer (см. “Игромодельер”), грязь лучше всего наносится кистями из набора Special Effect Brushes в Photoshop 7.
    Слой крови. Ну куда же без нее, у нас ведь не комбайн для выкапывания картошки, а настоящая машина смерти! А значит и корпус, и колеса красной субстанцией будут испачканы не меньше, чем грязью. Данный слой также наносится как Multiply. Правила рисования крови на корпусе следующие (слабонервным просьба данный абзац пропустить). Кровь сворачивается и засыхает очень быстро, при этом из красной становится бордово-коричневой. Кровь — субстанция полупрозрачная, а значит, через нее просвечивается цвет материала, который ею испачкан. Высохший слой крови толщиной более половины миллиметра абсолютно непрозрачен. Как кровь выглядит, знают все, а вот чем ее правильно рисовать, немногие. Скажу сразу, ни одна стандартная кисть “Фотошопа” для этого не подходит. Нам поможет набор специальных кистей (разработанных художником Angryblue), который обитает на нашем компакте и DVD. Наиболее правдоподобные эффекты получаются, если включить Angle Jitter в Shape Dynamics (Динамика кисти) и Scattering (Разброс). Эти параметры кисти можно найти во вкладке Brushes в правом верхнем углу интерфейса Photoshop 7.
Рис. 11 Кубическая
карта окружения в
формате Vertical Cross.
Рис. 12 Кубическая
карта окружения в
представлении UT2004.
    И грязь, и кровь лучше наносить кистями с включенным режимом “жидкой краски” WetEdges (тоже во вкладке Brushes). Этим достигается хороший эффект “многослойности” загрязнений.
    Получившиеся у меня слои можно детально изучить, заглянув в файлы Chassis.psd и Wheels.psd, а сцену для “Макса” — в файле Model_Textured.max.

    О картах окружения
   
Идея сохранять визуальное окружение некоторого объекта появилась еще в 70-х годах. В 1976 году Дж. Ф. Блинн и М. Э. Ньювелл опубликовали
совместную работу “Текстура и отражение в компьютерных изображениях”, и их изыскания остались бы не более чем интересными умозаключениями, если бы их разработка не попалась на глаза человеку из Голливуда. От теории до практической реализации прошло совсем ничего времени (по меркам тех лет): уже в 1986 году увидела свет кинолента “Полет навигатора”, где карты отражений использовались на полную катушку для имитации зеркальной поверхности инопланетного звездолета. Позднее, в 1991 году, идея карт окружения явила миру “Терминатора-2”, состоявшего из жидкого металла.
   
Способов изготовления таких карт несколько. Главный — использование зеркального шара, который фотографируется с разных сторон, но на одинаковом расстоянии объектива от цента шара. Затем в специальных программах несколько снимков “сводятся” в одно целое изображение, содержащее в себе все отразившееся в шаре. Это изображение может быть преобразовано и в другие форматы хранения, например VerticalCross.
    Сейчас изготовление карт окружения возможно и в домашних условиях. Для этого сцену “Макса” можно отрендерить, используя сферическую камеру и сохранив в формате High Dense Radiance Image (HDRI). Жаль, что в стандартные средства “Макса” такие возможности не входят, а доступны только с комплекте с коммерческими системами рендеринга вроде Brazil или final Render.

Рис. 13 Создание альфа-
канала.
    Кубические карты
   
Машина полностью раскрашена. Но есть еще один важный момент: краска машины обычно хоть немного блестит, а хромированные лезвия и зеркальная кабина просто обязаны отражать окружающие предметы. К счастью, и эта задача нам по плечу, потому что существует такое замечательное изобретение, как кубические карты.
    Посмотрели однажды умные люди на зеркальный шар и заметили, что в нем отражается все его окружающее пространство. И задались тогда они вопросом, а нельзя ли каким-то образом это окружение “сфотографировать”, так чтобы потом его можно было снова воссоздать при необходимости. О том, кто и когда до этого додумался, читайте на отдельном текстовом блоке. Нам же сейчас важен результат их изысканий — визуальное окружающее предмет пространство может быть сохранено в так называемую карту окружения (Environment Map), а потом восстановлено с целью имитации, например эффекта отражения.
    Карты окружения существуют в разных форматах, в зависимости от того, на какой объект (окружающий сцену) они потом накладываются. Если на сферу, то такая карта называется Latitude/Longitude Map (Карта широты/долготы) (рис. 10). Если на куб, то Cube Map (Кубическая карта).
    Движок UT2004 поддерживает кубические карты окружения, и мы этим сейчас воспользуемся для создания эффекта отражения на блестящих поверхностях нашей машины. На просторах интернета таких карт существует превеликое множество, как правило, в формате VerticalCross (рис. 11). Однако игра “не знает” такого формата. В UT2004 кубическая карта должна быть представлена в виде шести отдельных квадратных текстур, упорядоченных особым образом (рис. 12). Любая VerticalCross-карта легко приводится к такому виду в “Фотошопе” путем отрезания и поворотов отдельных квадратов, после чего каждый квадрат сохраняется в свой bmp-файл в указанном порядке.

   
Маски прозрачности
   
У нас есть две четырехслойные текстуры и кубическая карта отражения. Этого вполне достаточно для создания качественного материала, осталась самая малость — создать маски прозрачности, указывающие движку, какая часть текстуры насколько сильно блестит.
    Задача эта не особо сложная. Но и не такая простая, как может показаться, потому что контуры масок должны точно повторять контуры загрязнений. Поэтому нарисовать такие карты прозрачности вручную практически нереально. Есть другой выход: сформировать маски на основе самих слоев грязи и крови.
Рис. 14 Создание кубической
карты.
    Во-первых, слой механического износа “склеиваем” с базовым слоем. Во-вторых, делаем копию файла текстуры. В копии удаляем базовый слой, в стеке останутся только два слоя — кровь, наложенная на грязь в режиме Multiply. Эти два слоя тоже соединяем в один, после чего выполняем команду Image/Adjustment/Brightness-Contrast и уменьшаем контрастность данного слоя до предела. Что же мы в результате этого получили? Чем плотнее было загрязнение в некоторой области, тем темнее там получилась маска. Именно это и требовалось! Под данным слоем создаем еще один и заливаем его серым цветом (например (R=220,G=220,B=220)). Оба слоя снова “склеиваем” и производим цветовое инвертирование изображения.
    Открываем наш оригинальный файл с текстурой и на вкладке Channels (Каналы) кликаем Create new channel (Создать новый канал, рис. 13). Выделяем созданный альфа-канал и копируем в него нашу черно-белую маску. Теперь маска прозрачности является неотъемлемой частью текстуры!
    Когда обе текстуры подготовлены, их надо сохранить в dds-файлы с помощью маленького плагина от небезызвестной конторы nVidia. При сохранении единственная опция плагина, которую стоит изменить, это Save Format (Формат сохранения): нужно выбрать DXT5.

Рис. 15 Так в редакторе текстур
выглядят кубическая карта и
карта окружения.
    Импортирование материалов в UnrealEd
   
Перенос текстур в игру — процесс знакомый, но в нашем случае имеются несколько нюансов. Во-первых, при импортировании из dds-файлов нужно обязательно поставить галочку Alpha в диалоге импортера текстур, в противном случае — движок проигнорирует маски прозрачности. Во-вторых, при импортировании изображений кубической карты окружения надо не перепутать нумерацию, иначе вместо окружения получится головная боль. Последние также
Рис. 16 Список фрагментов
кубической карты.
желательно конвертировать в формат DXT1 (щелчок правой кнопкой мыши на текстуре, пункт Convert в контекстном меню) для уменьшения размера utx-файла текстур на диске.
    В моем случае, карта окружения — 6 текстур размером 512x512 и 2 текстуры машины размером 2048x2048.

    Создание композитного материала
   
В первую очередь конструируем кубическую карту из шести имеющихся фрагментов. Для этого идем во вкладке текстур в меню File/New. В открывшемся диалоговом окне (рис. 14) вводим имя utx-файла (Package), где лежат все наши текстуры. Поскольку моя машина называется “Мантикора”, то и архив текстур я назвал Manticore_Textures. В поле Name вводим имя кубической карты, у меня — Cubе2. Из выпадающего списка Material Class (Класс материала) обязательно выбираем пункт Cubemap.
Рис. 17 Настройка карты
окружения.
    В окошке материалов нашего набора текстур появился маленький прямоугольник с оранжевой границей (Рис. 15), это и есть кубическая карта. Выделяем его щелчком левой кнопки мышки (прямоугольник должен подсветиться серо-зеленым цветом), после чего кликаем правой кнопкой и в контекстном меню выбираем Properties. В группе Properties открывшего окна свойств находим свиток Cubemap, в нем еще список Faces (Рис. 16). Все 6 пунктов данного списка заполняем нашими импортированными фрагментами в соответствии с их порядком. Как ни странно, в UT200x понятия “cube map” и “environment map” различаются: последняя строится на основе кубической карты. Поэтому создаем еще один материал класса TexEnvMap, в его свойствах (Рис. 17) в поле Material вносим нашу кубическую карту, а в EnvMapTypeEM_WorldSpace. Последняя опция особо важна, так как если поставить любое другое значение, то отражение будет неестественным.
Рис. 18 Композитный материал
для корпуса машины.
    Карта окружения готова. Она послужит основой нашего материала машины. Создаем еще один материал класса Combiner для корпуса, который назовем CHASSIS_COMP . В его свойствах (Рис. 18) указываем значением поля CombineOperationCO_AlphaBlend_With_Mask, а поля AlphaOperationAO_Use_Mask. В качестве Material1 устанавливаем нашу карту окружения, в качестве Material2 и Mask — текстуру корпуса. Аналогично делаем материал для оставшихся частей машины, полученный материал назовем WHEEL_COMP.
    Все материалы для машины закончены, осталось импортировать из “Макса” в UnrealED саму модель и приладить их на нее.

Рис. 19 Внешний вид машины с
присоединенными материалами.
    Импортирование модели в игру
   
Процесс перенесения модели — самая легкая часть нашей работы. В “Максе” запускаем знакомый нам плагин ActorX, в поле output folder пишем путь, куда будет экспортирована модель, название которой, кстати, вводим ниже в поле mesh file name (в моем случае — Manticore), в свитке ActorX — Setup снимаем галочки all skin-type и bake smoothing groups. Теперь жмем кнопку Save mesh/refpose. Экспортер должен выдать единственное сообщение “Skin file Manticore.PSK written”.
    Теперь в UnrealED открываем вкладку Animations, кликаем File/Mesh Import и выбираем только что сделанный файл Manticore.PSK. В качестве Package Name пишем Manticore_Vehicle, а имя модели не меняем. Если все проходит успешно, то редактор выдает нам уведомление об успешном добавлении объекта: “new object: [Manticore]”. На сцене редактора появляется модель, пока без всяких текстур.
    Чтобы привязать текстуры к модели, в панели слева находим во вкладке Mesh свиток Material, там имеется как раз две строчки: на 0 ставим текстуру CHASSIS_COMP, а на 1WHEEL_COMP. И любуемся нашим сногсшибательным четырехколесным монстром (Рис. 19)!
    Нередко случается, что какая-то область корпуса не блестит совсем или, наоборот, блестит слишком сильно, в этом случае просто возвращаем к “Фотошопу” и корректируем маски прозрачности. На данном этапе также выискиваем и устраняем все баги геометрии модели, если такие обнаружатся.

    Кисти от Angryblue
   
Набор кистей художника Джастина Камерера c сайта angryblue.com представляет собой большой комплект “самых-самых” кровавых кистей, которые только можно найти в интернете. С их помощью можно нарисовать брызги, подтеки, пятна и даже отпечатки испачканных в “красненькой” пальцев! Набор кистей абсолютно незаменим в хозяйстве любого уважающего себя художника по текстурам, а новичкам в рисовании открывает поистине безграничные просторы для творчества. Кисти мы выкладываем для вас на компакт с любезного разрешения Джастина.

   
* * *
   
Мы узнали много нового и сделали устрашающего вида боевую машину. Но одним видом можно напугать либо трусливого, либо глупого врага, коими боты игры (и тем более живые оппоненты) не являются. Поэтому в следующей части материала мы научим игру “понимать” нашу модель как машину, а не просто набор полигонов, оборудуем ее мощным пулеметом и опробуем на поле виртуального боя!
Двери тут