Я сейчас кратенько расскажу чего именно мы будем делать. Сначала мы переконвертируем карту чтобы её можно было открыть в 3д максе, вытащим нужные нам текстуры, создадим HDRI карту для неба, декомпильнем модели с оружием и игроками, смоделируем карту в 3д максе и сделаем анимацию пули.
Нам понадобятся программы bsp Viewer, 3d Studio Max, Photoshop, Wally, hdr shop, Half-Life MDL Decompiler, Vray, Half-Life SMD Importer.
Геометрия карты. Текстуры
Переконвертируем карту в 3ds. Сразу же предупреждаю, что не все карты конвертируются. Например, карта de_inferno не конвертируется. Тогда придется все делать "на глаз". Запускаем bsp Viewer (можно воспользоваться любой другой программой, которая может переконвертировать bsp в 3ds), открываем выбранную карту (file -> open), экспортируем её в 3ds (file -> export -> 3Ds File) убираем все помеченные галочки, затем экспортируем из неё текстуры (file -> export -> Bitmaps). Bsp Viewer в 3D окне показывает только те текстуры которые включены в сам файл bsp, если в 3D окне отображаются не все текстуры, значит часть или даже все такстуры находятся в wad файле (например на карте de_train все текстуры находятся в файле cs_bdog.wad), находится он в папке сstrike, обычно файл с текстурами называется также как и карта, но бывают и исключения, в чем мы только что и убедились.
Открываем программу Wally, загружаем wad файл (file -> open) выделяем все текстуры из списка, щелкаем на первой и с зажатыми shift + Ctrl на последней, правой кнопкой мыши "Export..", появится окно, выбираем выходной формат JPEG.
Создаем небо
У нас есть макет карты на основе которой мы будем моделировать свой фрагмент и есть для неё текстуры. Теперь нам необходимо сделать небо, точнее создать HDRI (High Dynamic Range Image ) карту неба из уже имеющихся картинок. Само небо - это 6 картинок в формате *.tga, размером 256х256. .tga рисунки неба находятся в папке сstrikegfxenv. Имена всех шести рисунков одного неба одинаковы, за исключением последних двух букв названия. Это пример неба карты de_train:
TrainYardBk.tga - задняя сторона неба TrainYarddn.tga - нижняя сторона неба TrainYardft.tga - передняя сторона неба TrainYardlf.tga - левая сторона неба TrainYardrt.tga - правая сторона неба TrainYardup.tga - верхняя сторона неба
Две последние буквы в названии неба, как вы наверное уже догадались, означают положение рисунка на небе. То есть, указывают на сторону неба, на которой должно быть данное изображение. Вот так все просто и незамысловато...
Открываем все эти изображения в Photoshop"е, создаем новый документ высотой 1024 пикселей, шириной 768 пикселей и вставляем в него все шесть картинок неба и совмещаем так, чтобы получилось как на рисунке.Теперь сохраняем получившееся изображение и запускаем программу hdr shop, загружаем в неё сохраненное изображение (file -> open) или просто перетаскиваем в окно программы. появится окно "Specify camera Response..." жмем ок, затем идем в меню image -> panorama -> Panoramic transformations. В появившемся окне в левом меню "Format" выбираем "Cubic Environment(Vertical Cross)", в правом меню "Format" оставляем "Mirrored Ball", убираем галочку напротив Use Bilinear Interpolation (это важно иначе появятся вертикальные полоски) и жмем OK, создастся новое изображение такого типа как на рисунке. Теперь сохраняем (file -> save as) как Radiance format (*.HDR).
Модельки игроков и оружия
Нам потребуется программа Half-Life MDL Decompiler для того чтобы декомпилировать модельки игроков и оружия. Например нам нужны модельки leet и АК-47, копируем leet.mdl из соответствующей папок директории "cstrikemodelsplayer" в папку с программой. Приставка V_ перед названием модельки оружия означает, что эта моделька используется для отображения оружия от первого лица. Такая моделька самая детализированная. Находим модельку v_ak47.mdl в папке "cstrikemodels" и копируем, куда и первую. заходим в папку программы и запускаем файл decompile_all.bat, ждем пока что пройдут некоторые операции, и не появится надпись DONE, закрываем окно и удаляем скопированные модельки, в этой папке создались 3 папки с названиями моделей, которые мы декомпилировали. В каждой из этих папок лежат текстуры модельки в формате *.bmp ,файлик *.qc и множество файлов *.smd, дело в том, что в одном или нескольких SMD "лежит" сама моделька, а в остальных анимация для неё. Нам нужно сначала открыть SMD с моделькой, а потом поверх подгружать анимацию. Как же нам узнать в каком из этих файлов находится моделька? Очень просто надо открыть файлик *.qc в блокноте или другом текстовом редакторе.
Вот пример части qc файла модельки террориста leet"а.
//reference mesh(es) $body "studio" "arab"
Из этого следует что файл с моделькой называется arab.smd
Нам теперь надо импортнуть каждую из моделей в отдельный файл и сохранить, чтобы потом из этих файлов поместить модели в основной файл, в котором будет находиться смоделированная карта. Помещаем скрипт Half-Life SMD Importer в папочку "scriptsstartup" Запускаем 3д макс, идем в закладку Utilites (утилиты) в меню справа, и щелкаем на кнопке "MAXScripts", в открывшемся ниже меню выбираем скрипт "Half-Life SMD Importer". Ниже открывается ещё одна менюшка, нам то она и нужна. щелкаем на кнопочке "Import SMD" и открываем SMD файл с моделькой. Ждем покачто скрипт отобразит нам модельку и если нужно применяем к ней стандартнуйю анимацию, для этого ещё раз нажимаем на кнопку "Import SMD" и выбираем SMD с анимацией. Либо сами раставляем кости как надо. Удобнее будет сразу же выделить все элементы и сгруппировать (group -> group), для того чтобы в дальнейшем редактировать положения костей, открываем группу и редактируем (group -> open) а потом закрываем (group -> close). Для моделей с оружием я рекомендую сразу же удалять все кости и оставлять только каркас. Кости к оружию нам не пригодятся.
Моделирование самой карты
Это самая сложная и трудоёмкая часть урока. Она рассчитана на тех, у кого уже есть опыт работы в 3д максе. Запускаем 3D studio max. Теперь нам надо импортнуть модель карты. Жмем File -> Import и выбираем *.3ds файл, который экспортировали из программы bsp viewer. В появившемся окошке нажимаем OK. Как мы видим на рисунке, что модель карты отображается только в одном 3D окне, а в трех проекциях нет. Это небольшой глюк. Чтобы модель стала видна во всех проекциях, выделяем её и заходим во вкладку Modify, применяем модификатор "Poly select". Теперь нам надо избавиться от так называемых "Special faces", это вспомогательные объекты (браши) которые используются в картостроительстве, в игре многие из них мы не видим, на архитектуру карты они никак не влияют.
Нажимем на кнопку "Select by name" и выделяем все объекты, щелкнув на кнопочку "All", и с зажатым Ctrl щелкаем на самый первый объект "model_0000", далее щелкаем на кнопке Select, таким образом, получатся что мы выделили все объекты кроме основного "model_0000", и все их удаляем. Карту мы импортировали в 3д макс лишь для того чтобы легче и точнее можно было моделировать всю геометрию карты. В основном для моделирования будем использовать примитив BOX. В правой панельке идем во вкладку create -> gometry и выбираем примитив BOX. Построим первую стенку: в проекции Top смотрим, где находится стенка, и на её месте строим свою. Зажимаем левую кнопку мыши в одном из углов стенки, тащим до противоположного и отпускаем, затем ведем дальше, вытягиваем наш box в высоту и ещё раз щелкаем. Не обязательно сразу же вытягивать box точно в размер, его размеры потом можно изменить более точнее. В правой панельке меню щелкаем на вкладке Modify, ниже открываются параметры выделенного объекта, такие как длина, ширина и высота и ещё несколько не нужных нам параметров. Там мы можем уже точнее подогнать размеры box"а, чаще всего используются размеры кратные 16. Один box готов, надо его теперь покрыть текстурой. Открываем Material editor(нажимаем на кнопку "M" или на кнопку на которой нарисованы 4 сферы разных цветов в верхней панельке).
Материал для стен будем использовать стандартный (standart), щелкаем по квадратику напротив diffuse и в появившемся окне выбираем карту Bitmap, и далее выбираем необходимую текстуру из тех которые мы вытаскивали из карты или из файла текстур. Перетаскиваем слот с материалом на наш box, текстура по прежнему не видна, надо включить отображение текстуры на объекте, для этого щелкаем на кнопку с кубиком у которого стороны окрашены в бело синюю клеточку. Текстуру мы увидели, но она слишком сильно растянута. Чтобы это исправить применяем к объекту модификатор "UVW Map", в его настройках ставим точку напротив box, и вводим в поля ширины длины и высоты размеры используемой текстуры для данного объекта. Если вдруг текстура не стала такого размера которого нужно, то можно использовать U, V, W Tile (масштаб).
Рассмотрим пример моделирования арки над бомбплейсом. Создаем box как показано на рисунке. Во вкладке Modify выставляем параметр lenght seg на 5. Применяем модификатор Edit Mesh. Жмем на плюсик около названия модификатора и щелкаем по Vertex чтобы редактировать точки каркаса, выделяем точки и изменяем их положение (инструмент "select and move") так, чтобы было как на рисунке. Окрашивать текстурой также как и обычный box. Таким образом можно сделать практически любую геометрию, необходимую для моделирования карты, надо лишь только менять количество сегментов по высоте, ширине или длине в зависимости от необходимости. После того, как полностью смоделируем всю карту, чтобы нам не мешала первая модель карты, выделяем её, правой кнопкой и выбираем Hide Selection.
Есть ещё один момент, который я просто обязан вам рассказать, а именно то как окрашивать разные грани объекта разными текстурами, например ящик у которого все боковые грани одинаковые а крышка отличная. Для этого будем использовать материал Multi Sub Object, который может содержать в себе много разных материалов. У каждого подматериала есть свой порядковый номер (ID). Выделяем пустой слот в редакторе материалов, меняем материал на Multi Sub Object (щелкаем на кнопке правее имени материала и выбираем из списка материал который нужен), выставляем количество подматериалов сколько нужно и создаем сами подматериалы. Применяем модификатор Edit Poly, выбираем редактирование полигонов, идем в закладку Polygon Properties, выбираем грань(полигон) или несколько граней объекта и на против строчки Set ID ставим ID, который соответствует номеру нужного материала, также выделяем остальные грани и присваиваем нужный ID. Я рассказал все приемы, с помощью которых я моделировал свои сцены.
Расстановка моделей
После того как карта готова, надо в ней расставить модели. Для этого импортируем имеющиеся у нас модели, (file -> merge), выбираем проект с моделькой, в появившемся меню выбираем сгруппированные ранее модельки, жмем ОК. Она появляется в начале координат. Ставим её на нужное место, поворачиваем как надо (инструмент Select and rotate), если нужно изменяем позу. Делаем тоже самое со всеми моделями.
Моделирование модели пули
Пулю будем моделировать с помощью сплайнов. Заходим в закладку create -> shapes и выбираем элемент Line. Щелкаем в проекции Top, чтобы создать первую точку линии, ведем курсор и щелкаем ещё раз, и т.д. пока что не создадим зеркальную половину центральной проекции пули, после создания последней точки, щелкаем правой кнопкой, для того чтобы прекратить создавать точки. Применяем модификатор Lathe, этот модификатор поворачивает сплайн вокруг одной из осей (x, y, z) и создает поверхность. Выбираем осей вокруг, которой он будет вращать сплайн для пули (соответствующие кнопки в настройках модификатора) и изменяем положение оси (щелкаем на плюсик около названия и выбираем подобъект axis). Если вместо внешней стенки отображается внутренняя, то ставим галочку напротив Flip Normals. Изменяем параметр Segments на 48.
Точно подобрать ось не всегда удается, появляются отверстия на передней и задней части объекта, поэтому применяем ещё модификатор Cap holes. Он поможет решить эту проблему. Всё, наша пуля готова.
Анимация пули и камеры
Так же как мы подгружали модельки с игроками в основную сцену, подгружаем пулю. Размещаем ее там, где она будет начинать движение, затем щелкаем на кнопку Auto key для включения одноименного режима и создаем ключевой кадр. Переставляем ползунок времени на последний кадр и перетаскиваем нашу пулю в то место, где она должна заканчивать движение. Выключаем режим Auto Key и если надо поворачиваем пулю параллельно движению, чтобы не казалось, что она летит вбок. Если мы прокрутим ползунок, чтобы увидеть анимацию, то заметим, что пуля летит не равномерно, сначала ускоряется, потом замедляется. Для того чтобы это исправить выделяем пулю, открываем Curve editor(кнопочка левее таймлайна) выделяем все имеющиеся точки, отвечающие за анимацию позиции объекта, и щелкаем по кнопке Set tangents to linear.
Создаем камеру (create -> cameras -> target) в её настройках устанавливаем угол обзора (FOV) на 75 градусов, позиционируем её напротив пули а цель камеры в центре пули. Выбираем инструмент select and link, и связываем сначала цель с пулей, а потом и саму камеру с пулей.(щелкаем на объект который связывают и ведем до объекта с которым связывают и отпускаем ). Анимировать камеру можно также как и пулю, ключевыми кадрами.
Расстановка света
Заходим во вкладку create -> lights и создаем источник света Target Direct? Расставляем их в зависимости от того, где находится солнце на небе, в настройках источника света под надписью shadows ставим галочку напротив On. И значение HotspotBeam ставим примерно на 1500, чтобы площадь поверхности источника света накрывала всю карту. Можно проиграться со значением Multiplier, он отвечает за яркость освещения. Если какая ни будь часть карты слишком темная, можно создать еще один такой же источник света, но только выключив тени или создать источник Omni, но тоже без теней.
Материал для пули и неба
Для пули будем использовать не обычный материал, а поставляющийся вместе с внешним рендерером Vray’ем, называется он VrayMtl. Создаем слот с таким материалом. В настройках меняем параметр Reflection(отражение), изменяем оттенок серого цвета. чем ярче оттенок, тем лучше он будет отражать. Применяем материал к пуле. Еще нам нужно поставить карту окружения. Идем в меню rendering -> Environment и выбираем карту Vray HDRI. Заходим в редактор материалов, выделяем свободный слот, нажимаем на кнопку Get material(синий шар со стрелочкой), ставим галочку напротив Scene и ищем в списке только что примененную карту. Добавляем её в слот и в настройках указываем путь к HDRI карте, которую мы создавали, ставим галочку напротив Mirrored ball. В параметре Vert. Rotation ставим значение -90,0 (этот параметр отвечает за поворот неба по вертикали). Также можно проиграться со значением Multiplier.
Рендеринг
Рендерить будем внешним рендерером Vray’ем. Настройки самого рендерера я описывать не буду, просто выложу заготовку с настройками. Скачать её можно в конце урока. Настроим только вкладку Common. Запускаем окно рендеринга (f10) Настраиваем ширину и высоту выходного изображения. Ставим галочку напротив Active Time Segment, для рендеринга последовательности изображений, т.е видео, или Single для одного изображения. В Render Output выбираем файл(ы) в которые будет сохраняться конечный результат, для видео обязательно. Для того чтобы загрузить настройки, снизу в меню Preset выбираем Load Preset и указываем на заготовку с настройками.
|