Battlefield 2, частина 3. Установка 3D-моделей

Щоб побачити свої моделі в грі, потрібно їх виготовити, а потім підключити. На словах процес виглядає нескладно. Однак рідкісна гра дозволяє так запросто включати в себе сторонні предмети. Як правило, на шляху мододелов лежить безліч підводних каменів. Сьогодні ми з вами будемо встановлювати власноруч виготовлені моделі в Battlefield 2, що дозволить вам створювати свої власні повноцінні карти для цієї гри - якщо ви, звичайно, уважно вивчали статті циклу «Створення рівнів для Battlefield 2», опубліковані в минулому і позаминулому випусках «Манії ».

У комплект інструментарію для редагування Battlefield 2 (далі BF2) входять утиліти до графічного пакету Maya. Слів немає - хороший графічний редактор. Однак величезна армія шанувальників 3D Max залишилася не при справах (НЕ переучуватися ж заради такого випадку). На якийсь час з'явилися інструменти і для нього, однак незабаром зникли. З чуток, викладати їх в Мережу заборонила EA (кажуть, це пов'язано з великими недоробками, виявленими геймерами в процесі роботи). Проте використовувати 3D Max для роботи з BF2 можна. Тільки не безпосередньо, а через посередника - його молодшого брата Gmax!

Нам будуть потрібні для роботи:

1. Gmax версії 1.2.

2. Пакет інструментів до BF2 для Gmax, Battlefield2 Game Tools game pack.

Gmax - це безкоштовна версія 3D Max, призначена спеціально для початківців ігроразработчіков і шаловліворукіх геймерів (обидві утиліти забирайте з нашого DVD). Особливістю установки є необхідність реєстрації на сайті розповсюджувача. На це буде потрібно всього кілька хвилин і доступ до інтернету. Тільки після установки Gmax можна запускати інсталяційний файл інструментів для BF2. Програма інсталяції помістить на робочий стіл іконку запуску BF2 Gmax Gamepack. Завжди, коли збираєтеся працювати з моделями для BF2, запускайте Gmax через неї!

На підготовчому етапі робимо в 3D Max модель нескладної конфігурації (із стандартних примітивів). Вона потрібна нам лише для того, щоб освоїти процес установки. Крім цього створіть 3 копії моделі (використовуючи інструмент Clone з установкою Copy) і ні в якому разі не міняйте їх положення в просторі. Якщо назва оригіналу залежить тільки від вашої фантазії (у мене My_brusok), то ці копії повинні називатися зовсім виразно - Col0, Col1, Col2. Навіщо вони потрібні, стане зрозуміло трохи пізніше. А зараз конвертуємо все каркаси в Editable Poly і зберігаємо сцену в форматі .3DS.

Щоб побачити свої моделі в грі, потрібно їх виготовити, а потім підключити

Рис.1. Для роботи з моделями до BF2 потрібно встановити Gmax 1.2 і BF2 Gmax Tools.

Запускаємо Gmax і відкриваємо файл зі складу Gamepack - gmax \ gamepacks \ Battlefield2 \ scenes \ bf2GmaxExamples \ rawData \ Objects \ examples \ statics \ box01. На сцені з'явиться сіра непоказна коробка-box. Вона не така проста, як здається на перший погляд. Її хитромудрий пристрій можна побачити, відкривши повний список завантажених об'єктів (натиснувши на піктограму Select by Name). Простий примітив складається з безлічі компонентів: lod0, geom0_NoLightmap, root_staticmesh_box01, Box01__Anchor, Box01. Причому форму об'єкта визначає тільки останній з них, а всі інші ставляться до службових об'єктів двох типів Point Helper і Dummy. Це об'єкти-пустушки. Вони є простим куб з опорною точкою в центрі фігури. 3D Max їх використовує як складовий елемент ієрархічної ланцюжка для установки зв'язків між окремими складовими.

Завантажуємо в Gmax файл з нашою моделлю. Для цього скористаємося пунктом основного меню File / Import. У діалоговому вікні SelectFile to Import вибираємо тип файлу 3D Studio Mesh (* .3DS) і вказуємо збережену в цьому форматі сцену. Gmax запитає, яким чином виконати операцію: замінити всі повністю або ж включити імпортований об'єкт в поточну сцену? Нам потрібна коробка-box з файлу прикладу, тому відзначаємо пункт Merge objects with current scene і натискаємо ОК. Примітка: швидше за все, при цьому ви не побачите ніяких змін на екрані, що пов'язано з невідповідністю розмірів імпортованої моделі і об'єктів сцени Gmax.

Примітка: швидше за все, при цьому ви не побачите ніяких змін на екрані, що пов'язано з невідповідністю розмірів імпортованої моделі і об'єктів сцени Gmax

Рис.2. Підгонка розмірів моделі з 3D Max і BF2.

Необхідно підігнати розміри нашої моделі до стандартів BF2. Як правило, модель виявляється дуже маленькою навіть для того, щоб її побачити на екрані. Відкриваємо список іменованих компонентів сцени (кнопкою Select by Name). Затиснувши клавішу Ctrl, вибираємо зі списку всі додані в сцену деталі (в моєму випадку це My_brusok, Col0, Col1, Col2) і натискаємо Select. Виконуємо рівномірний масштабування за всіма координатним осях за допомогою інструменту Select and Uniform Scale (клацнувши по відповідній піктограмі, затискаємо ліву кнопку миші і рухаємо курсор по робочому полю, поки модель не з'явиться на екрані). Підігнавши розмір, переміщаємо її таким чином, щоб вона перебувала по відношенню до службових об'єктів приблизно на тому ж рівні, як і оригінальна коробка-box.

Потім видаляємо все зайве - залишаємо на сцені тільки складові частини нашої моделі. Оскільки без службових об'єктів обійтися не можна, створюємо для неї власний комплект. Виділяємо основний каркас, який буде у нас видимим (у мене MY_brusok). Вибираємо в основному меню пункт BF2 / BF2_Utilities, у вікні BF2-Utilities перевіряємо, що стоїть режим Static / Building, і натискаємо кнопку Run Wizard. Щоб докладніше дізнатися, які додаткові об'єкти були сформовані «чарівником», відкриємо вікно Select Objects. Там присутні geom0, lod0, MY_brusok_Anchor, root_staticMesh_ MY_brusok. Щоб структура виглядала наочніше, включіть у вікні опцію Display Subtree.

Щоб структура виглядала наочніше, включіть у вікні опцію Display Subtree

Рис.3.

Тепер прив'язуємо створені раніше копії (Col0, Col1, Col2) до нашої моделі. Створюємо копію lod0 (службової пустушки), для чого виділяємо lod0 в іменованому списку і вибираємо пункт основного меню Edit / Clone. В опціях, в групі Object, залишаємо Copy і набираємо ім'я нової пустушки - nonvis_. У дереві іменованого списку вона з'являється останньої, але на одному рівні з lod0 (див. Рис. 2). Тепер переходимо безпосередньо до зв'язування. Використовуючи виділення по імені (Select by Name), виділяємо перший невидимий каркас Col0. Закриваємо список і включаємо режим Select and Link однойменної піктограмою на панелі інструментів.

Знову відкриваємо вікно Select by Name (тепер воно називається Select Parent) і вибираємо пустушку nonvis_. Закриваємо вікно кнопкою Link, включаємо режим Select Object (піктограмою на панелі інструментів), відкриваємо іменований список (бачимо, що рядок Col0 перемістилася з початку списку в кінець, під nonvis_). Виділяємо наступний додатковий каркас, Col1, і точно так же пов'язуємо його з nonvis_. Те ж саме робимо з Col2. Коли все «невидимі» додаткові каркаси зберуться під пустушкою nonvis_, пов'язуємо її з основним, який геймери побачать в грі (у мене він називається MY_brusok).

Коли все «невидимі» додаткові каркаси зберуться під пустушкою nonvis_, пов'язуємо її з основним, який геймери побачать в грі (у мене він називається MY_brusok)

Рис.4.

Займемося текстурами. Деяка складність полягає в тому, що Gmax не підтримує роботу з форматом .dds, а саме в цьому форматі повинні зберігатися текстури для BF2. Тимчасово замінюємо цей формат на .tga. Знаходимо відповідну картинку з характерною текстурою (наприклад, бетонної стіни), відкриваємо її в Adobe Photoshop, обробляємо (приховуємо дефекти, подчищаем, підфарбовує), формуємо квадратне зображення (512х512 або 1024х1024 пікселів) і зберігаємо в файл .tga (з включеним альфа-каналом , 24 біта на піксель). Причому назва файлу повинна підкорятися певним правилам. На одну модель в BF2 доводиться цілий набір текстур. Основна (Base), яка відповідає за зовнішній вигляд предметів. Є текстура для відображення деталей поверхні (Detail - опуклості, впадинки, травинки). Використовується окрема картинка для додання об'єктам «зашмарканого» виду (Dirt). И це не все. Всього є 6 рівнів текстур на різні випадки. Гра розрізняє різні види текстур по префіксам в кінці назви. наприклад:

- імя_текстури_с.tga (основна, префікс _с);

- імя_текстури_de.tga (детальна, префікс _de);

- імя_текстури_di.tga ( «брудна», префікс _di);

- імя_текстури_deb.tga (bumpmap-карта, префікс _deb).

Рис.5.

Видимі об'єкти в BF2 повинні мати як мінімум 2 набору текстур (_c і _de). Для виготовлення детальної текстури завантажуємо в Adobe Photoshop картинку бетонної стіни (підійде і поверхню піску), сфотографований на близькій відстані, обробляємо її (підганяємо гаму під основну текстуру повзунками, що викликаються з меню Image / Adjustments / Color Balance, див. Рис. 3) і зберігаємо з таким же ім'ям, але з префіксом _de.

«Брудну» текстуру робимо так: дублюємо перший шар основної картинки (background), у вікні Layers повзунком Opacity встановлюємо прозорість в 80%, піпеткою (Eyedropper Tool) «підхоплюємо» колір самого темного ділянки текстури і залишаємо «брудні» сліди на дублікаті пензлем прозорістю (Opacity на панелі інструментів) в 30%. Зберігаємо результат у файл з ім'ям основний текстури, але з префіксом _di. Карта bump відмінно вийде з основного малюнка. Завантажуємо його в Adobe Photoshop і, регулюючи повзунками яскравість і контрастність (з меню Image / Adjustments / Brightness-Contrast), добиваємося виразною рельєфності малюнка. В результаті у нас для однієї моделі вийшов повний комплект з чотирьох різних текстур (див. Рис. 4). Перекладаємо їх в папку ... gmax \ gamepacks \ Battlefield2 \ textures.

Повертаємося в Gmax і створюємо на основі наших текстур нові матеріали. Виділяємо основний каркас (MY_brusok). Відкриваємо Material Editor, клацнувши ЛКМ по однойменній кнопці на панелі інструментів, натискаємо кнопку New і вибираємо в діалоговому вікні BF2 StaticMesh2. У групі StaticMesh Parameters вибираємо текстури (натискаючи на кнопки з назвою параметра) відповідно до префіксами:

Рис.6.

- Base, _c (у мене concgray_c.tga);

- Detail, _de (у мене concgray_de.tga);

- Dirt, _di (у мене concgray_di.tga);

- NDetail, _deb (у мене concgray_deb.tga).

Назвемо отриманий матеріал concrete: в грі існують різні типи матеріалів, і кожен має різні властивості (наприклад, до них можуть прив'язуватися певні звуки). Матеріал з такою назвою в грі є, тому ігровий движок знає, які ефекти повинні супроводжувати ходіння по предметам з такою поверхнею. Як тільки все картинки призначені, натискаємо кнопку Apply і застосовуємо матеріал до основного каркасу. Він негайно забарвлюється в кольори concrete (див. Рис. 5). Однак на ділі нам потрібно додати кожному каркасу (в тому числі і невидимим в грі Col0, Col1, Col2) проекційні координати, щоб текстури відображалися правильно. Крім того, якщо хоча б у одного каркаса НЕ буде проекційних координат - завантаження моделі призведе до аварійного завершення гри!

Виділяємо основний каркас (MY_brusok). На панелі параметрів (у правого краю екрану) вибираємо вкладку Modify, під рядком, в якій зазначено назву виділеного елемента сцени (перевіряємо, що це основний каркас), розкриваємо список Modifier List. Знаходимо в ньому рядок UVW Map і клацаємо по ній ЛФМ (у вікні завантажених модифікаторів з'явилася рядок UVW Mapping). Нижче, в свиті параметрів модифікатора Parameters, відзначаємо варіант накладення Box (найкращий для прямокутних моделей), в групі Channel стрілочками вибираємо перший канал (для основної текстури) і в самому низу свитка параметрів натискаємо кнопку Reset.

Нижче, в свиті параметрів модифікатора Parameters, відзначаємо варіант накладення Box (найкращий для прямокутних моделей), в групі Channel стрілочками вибираємо перший канал (для основної текстури) і в самому низу свитка параметрів натискаємо кнопку Reset

Рис.7. Застосовуємо модифікатор UVW Map.

Виділяємо рядок UVW Mapping у вікні модифікаторів, викликаємо правою кнопкою миші контекстне меню і вибираємо пункт Collapce All. У вікні попередження тиснемо кнопку Yes. Потім міняємо канал на другий (виставляємо цифру 2) і знову натискаємо Reset. Якщо використано більше 2 текстур (у нас 4), для кожної з них потрібно створити проекційну карту. Те ж саме потрібно зробити з «невидимими» каркасами (Col0, Col1, Col2) з єдиною відмінністю - для них досить однієї карти (якщо їх буде більше, аварійна ситуація в грі забезпечена). Текстуру їм можна призначити ту ж, що і для основної моделі.

Ми застосували модифікатор UVW Map, оскільки наша модель ідеально підходить для цього методу. Для моделей більш складної форми використовують модифікатор Unwrap UVW. У ньому за допомогою вбудованого редактора можна регулювати накладення текстур аж до окремих полігонів.

В принципі, ми зробили все необхідне для експорту моделі в гру:

- в 3D Max створили основний каркас, який бачитимуть геймери в грі;

- з нього отримали три копії, які залишаться невидимими для гравців, але за якими ігровий движок буде розраховувати взаємодію з іншими об'єктами (Col0 - зі снарядами, Col1 - з бійцями, Col2 - з технікою);

- переправили підсумковий файл в GMax (в форматі .3DS);

- отмасштабовані модель;

- додали до неї необхідні службові мітки-пустушки;

- створили матеріал і застосували його до видимого каркасу.

Рис.8.

Проробимо цю операцію, обравши пункт меню BF2 / BF2 Exporter.

1. Спочатку треба вказати, куди будуть відправлятися остаточні файли. В першу чергу це робоча папка mods, в якій знаходяться ресурси для модифікацій до BF2 (при установці редактора BF2Editor вона створюється автоматично). Шлях, звісно ж, у кожного буде свій, залежно від того, в якому місці на жорсткому диску встановлена ​​гра. Наприклад, С: \ Battlefield2 \ mods \ bf2.

2. Встановити цільові папки. Наприклад, / rawdata / і, нижче, / mods / bf2 /. Згодом сюди можна буде повернутися і додати папку з назвою свого мода.

Заповнюємо вікно Bf2 Export - Objects:

3. У рядку Objects sub-folder path вказуємо категорію, до якої належить встановлюється модель. Тут потрібно вводити не абстрактне опис, а конкретні ігрові папки. Щоб з ними визначитися, запускаємо BF2Editor, у вікні Select Startup MOD вибираємо bf2, встановлюємо режим ObjectEditor, на панелі Resources подвійним клацанням ЛКМ розкриваємо рядок bf2. Навпаки папки objects натискаємо по піктограммке із зображенням знака +. Перед нами розкриваються категорії об'єктів, завантажені в мод bf2 за замовчуванням. Оскільки присутні далеко не всі, додаємо відсутню - натискаємо в верхній частині панелі (Resources) жирний значок + синього кольору. З спливаючого меню вибираємо пункт Load Resources. Після цього на екран виводиться вікно Load, в якому вибираємо потрібну категорію і додаємо її кнопкою OK. В даному випадку нас цікавить рядок staticobjects. У ній дуже багато предметів, тому завантаження зажадає деякого часу. До речі, як тільки ви її виділяєте, внизу з'являється шлях до кожного файлу з категорії статичних об'єктів (суцільний стрічкою). Ви маєте можливість копіювати початок і подивитися, як прописані моделі в грі. А розкривши папку staticobjects у вікні Resources (після того як закінчиться завантаження), побачите внутрішню структуру. Наприклад, ми хочемо розмістити нашу модель в розділі _asia. Значить, у вікні експорту нам треба написати / staticobjects / _asia /.

Рис.9. Якщо у BF2Editor виникають проблеми з відображенням текстур, він покриває модель картинкою із зображенням Дядька Сема.

Трохи нижче заповнюємо поле Object Name (присвоюємо ім'я своєї моделі), наприклад MY_brusok.

4. Ставимо галочку в поле Prefix Sub-Parts During Export (щоб для нової папки в ресурсах використовувалося назву нашої моделі в якості префікса). Це необов'язково, однак - корисно.

Перш ніж починати процес експорту, перевіримо підготовлену модель на предмет фатальних помилок.

5. Закриваємо вікно Bf2 Export / Objects і в головному меню GMax вибираємо BF2 / BF2 Utilities. Розкриваємо перший список і вибираємо з нього рядок Fix Scene Image Paths. Натискаємо кнопку Run Util, яка розташована поруч. При виявленні якихось проблем на екран виводиться попередження про помилки, з яких можна зрозуміти, що з моделлю не так. Якщо ж все в порядку, то внизу, з правого боку екрану, з'явиться рядок Fixing Image paths ... Complete.

6. Зворотно повертаємося до процедури експорту (пункт меню BF2 / BF2 Exporter). На цей раз у нас вже все поля заповнені і ми відразу тиснемо кнопку Export Object. Рятувальна операція зажадає деякого часу.

Якщо експорт завершився вдало, закриваємо Gmax і переходимо до роботи з редактором гри. Запускаємо BF2Editor, завантажуємо в нього свій рівень і перемикається в режим LevelEditor. На панелі Resources розкриваємо вкладку bf2 - нашої моделі там немає. Як було описано вище, вибираємо пункт меню Load Resources, у вікні Load встановлюємо джерелом bf2. Відкриваємо категорію staticobjects / _asia і знаходимо в ній папку з назвою нашої моделі (див. Рис. 7), виділяємо її і натискаємо кнопку ОК. Тепер вона знаходиться в списку доступних для установки об'єктів нашого мода. Встановлюємо її на рівень і дивимося на отриманий результат.

Нас очікує невелике неприємний сюрприз - модель покрита картинкою із зображенням американського президента ... Ця текстура встановлюється грою за замовчуванням, якщо потрібний малюнок не був знайдений движком. Проблема в тому, що гра працює з форматом DDS, а наші текстури виконані в TGA. Щоб вирішити проблему, робимо дублікати файлів текстур в форматі DDS і розміщуємо їх в тій же папці. Потім повертаємося в Gmax, завантажуємо модель, відкриваємо Material Editor, знаходимо в ньому потрібний нам матеріал і вручну змінюємо розширення файлів з TGA на DDS (в Gmax текстури на моделі пропадуть, це нормально). Заново виконуємо експорт. Тепер з текстурами моделі все в порядку.

Так навіщо нам був потрібен 3D Max, якщо більшу частину роботи ми виконали в Gmax? Вся справа в можливостях. Все-таки у молодшого брата - Gmax - силоньок поменше. Так, прості моделі можна робити і в ньому. Але якщо захочеться більшого, ви тепер завжди можете виконати складне моделювання в 3D Max.

Gmax запитає, яким чином виконати операцію: замінити всі повністю або ж включити імпортований об'єкт в поточну сцену?
Так навіщо нам був потрібен 3D Max, якщо більшу частину роботи ми виконали в Gmax?