Чи слід вбудовувати в двигун інструменти для конвеєра вмісту?


10

Наскільки мінімальним повинен бути двигун ігор? Яка частина конвеєра вмісту повинна бути вбудована в двигун?

Деякі випадки використання, коли супер-движок може бути корисним:

  • Під час завантаження вмісту користувача користувачеві не потрібно упакувати свої текстури, двигун буде робити це під час завантаження.

  • Сценарій запитує шрифт набагато більшого розміру, ніж був попередньо згенерований, двигун міг би проаналізувати ttf файл оголошення, створити новий атлас текстури.

  • Ореол кузня .

Звичайно, нічого з цього не вільно. Для цього потрібні ваші інструменти конвеєрного вмісту, написані на C ++. Бібліотеки підтримки, які ви використовуєте в конвеєрі, потрібно зібрати для використання на пристрої. Це вимагає, щоб створення контенту не було баггі. І це, як правило, робить ваш двигун більшим і громіздким.
Які ще є плюси і мінуси?
Чи переважують плюси проти мінусів?

Деякі конкретні питання:

  • Чи повинен двигун вміти завантажувати різні формати зображень? Навантажувач лише для TGA - це досить простий код.

  • Що з аудіоформатами? Чи можливо підтримувати лише завантаження файлів WAV? А що з музичними файлами навколишнього середовища, які часто величезні.

  • Чи повинен двигун бути здатним до динамічного розбору TTF та генерації атласу?

  • Упаковка текстур

Відповіді:


11

Ігри Ноеля Льопіса з блогу зачіпали це нещодавно у публікації "Віддалене редагування ігор" . Вступний параграф:

Я давно прихильник мінімальних тривалостей гри. Все, що можна зробити в автономному режимі або окремим інструментом, має бути поза часом виконання. Це залишає ігрову архітектуру та код дуже худими та простими .

(Стаття настійно рекомендується прочитати, як і більшість матеріалів Ноеля, будь то на 100% чи згоден.)

Я вважаю, що ключовим тут є збереження складності поза двигуном. Ви все ще можете мати гнучкість, але це гнучкість у контентному конвеєрі. А ви отримуєте кращі показники, не витрачаючи часу на перетворення та переміщення даних.

Більш висока продуктивність може перетворитись на менший час ітерації, дивно, незважаючи на те, що втрачаються деякі з можливостей редагування двигуна: легше спробувати щось, якщо ви зможете завантажити гру за секунду.

Прийняття деяких положень " філософії Unix " допоможе вам зберегти вашу інструментальну мережу гнучкими: невеликий модульний конвеєр.

Моя особиста філософія: запишіть якомога більше даних у режимі офлайн, але надайте підтримку двигуна, щоб отримувати нові запечені дані в будь-який час. (Зверніть увагу, що ці нові дані не повинні вступати в гру до зручного моменту: натискається кнопка "оновити", починається наступний рівень, ви переходите до нової області, що б там не було. Ключ - пошук солодкої плями, яка мінімізує час ітерації з мінімальною складністю коду та зусиллям кодування.)

У нашій компанії більшість наших інструментів, що стикаються з виконавцями / дизайнерами, орієнтовані на проблеми інтерфейсу: простота маніпулювання окремими активами або їх партіями тощо. Іноді вони є лише сторонніми інструментами, як Photoshop або 3DS Max. Ці інструменти експортують у проміжний формат (часто xml, який посилається на вихідні двійкові дані, але не завжди). Проміжний формат підбирається за допомогою інструменту «data make», який дає змогу перетворити його на щось корисне та швидке завантаження для цільової платформи.

Переносність досягається додаванням додаткових інструментів створення резервних даних або розширенням наявних інструментів створення резервних даних, що має додаткову перевагу - невидимість для творців вмісту.

Тепер, за допомогою належних додаткових даних, ви можете змінити формат запеченого протягом декількох секунд; ваш двигун може павук або інструмент може павукувати, і тоді вони з’являться у вашій ресурсній системі, готові до перезавантаження, коли це зручно.

Інструменти - особливо дані, що роблять резервні, - це інструменти, які часто корінніші та гнучкіші, ніж код двигуна. Це нормально, оскільки їх простіше перефактувати / переписати, розширити та перевірити; у вас є специфікації для їх поведінки, і досить легко перевірити їх тестування порівняно з деяким кодом двигуна.

Моя думка щодо ваших питань:

Чи повинен двигун вміти завантажувати різні формати зображень? Навантажувач лише для TGA - це досить простий код.

(Окрім цього: навіть якщо ви використовуєте декодер TGA в двигуні, не вводите його в коди. Ви просто задаєте собі проблеми - є багато тонкощів з більшістю форматів зображень і безліч інструментів, які не дотримуються в точно визначеному форматі, напевно, не вказано. Вам найкраще знайти існуючий добре перевірений код бібліотеки для обробки зображень.)

Я мав би тут інструмент конвертувати з TGA у будь-який ваш внутрішній формат текстури, а також метадані.

Що з аудіоформатами? Чи можливо підтримувати лише завантаження файлів WAV? А що з музичними файлами навколишнього середовища, які часто величезні.

Тут ми використовуємо три формати: відслідковувана музика (.xm), ADPCM (.wav) та Speex (.spx). Це здебільшого тому, що ми знаходимось на портативних комп'ютерах, і ці формати дуже легкі для розшифровки.

Чи повинен двигун бути здатним до динамічного розбору TTF та генерації атласу? Упаковка текстур

Атласування - це важка проблема: дивіться відповіді свого останнього запитання . Це майже завжди варто робити офлайн.

Крім того, ви можете перетворити метадані на кожного персонажа в структуру, запечатану майже нульовим навантаженням.

На завершення ви можете прибрати та упакувати цей конвеєр разом із грою для спільноти мод. Ви завжди можете додати більше вихідних форматів. І ніщо не заважає вам усунути розрив між інструментами створення вмісту та двигуном у конкретних випадках; сподіваємось, ваш код випічки даних та павук / код передачі можуть бути відновлені до бібліотек, які з часом можуть використовуватися безпосередньо інструментами для створення вмісту в деяких випадках. Але я б не ставив це своєю першою метою обов'язково ... Просто пам’ятайте, що це буде кінцевою метою, і нехай це трохи вплине на ваш дизайн, і спершу перейдіть до низько висячих фруктів.


В якості оновлення ви можете розглянути можливість використання формату файлів KTX для текстур. Він має перевагу в тому, що він здебільшого "читає structі переходить" для більшості випадків використання GL (і з ваших коментарів це здається, що ви націлили на GL), залишаючись гнучким і чітким.

Накладні накладні заголовки KTX можуть бути трохи високими для повністю випечених даних, залежно від вашої цілі, і ви, можливо, захочете відмовитися від підтримки ендіанського обміну, залежно від вашої користувальної скриньки ... але це, принаймні, варто, щоб розглянути питання щодо дизайну.


Відмінний спасибі Я ніколи не думав будувати власний простий формат зображення. Чи є вже вбудована бібліотека мінімальної завантаження текстур. Потім знову це потік байтів із шириною, висотою та кодуванням (тобто GL_RGB555).
deft_code

1
Не стільки будуйте свій власний формат зображення, скільки наводьте зображення у точному форматі, якого прагне DirectX, GL або будь-який інший, який ви використовуєте. =) Що стосується бібліотек: там є тонна. Для інструментів я схильний просто використовувати бібліотечні матеріали ImageMagick ( imagemagick.org/script/index.php ) або навіть програми ... Код ImageMagick - це старошкільний і трохи некрасивий, але досить швидкий, гнучкий і дорогий -перевірений. Я впевнений, що в інших буде багато інших пропозицій; якщо ви використовуєте, наприклад, C # для свого інструментального ланцюжка, багато цього матеріалу вже буде вбудовано в .NET libs ...
linder

1
"Я впевнений, що у інших буде багато інших пропозицій" MFC! :) Або, можливо, OpenIL. Я думаю, що одним із важливих моментів щодо випічки активів у конкретні для платформи формати є те, що при додаванні більшої кількості вихідних форматів та більше платформ кількість комбінацій вибухне. Перетворення вихідних ресурсів у проміжний формат, а потім їх перетворення у формати, орієнтовані на платформу, зменшиться на кількість маршрутів конверсії. Додайте інший вихідний формат, просто запишіть перетворювач у проміжний формат. Додайте іншу платформу, додайте бейкер до цільового формату платформи.
Кріс Хоу

1
Я додам, що збереження складності поза двигуном не обов'язково означає, що функціонал недоступний для двигуна. Тримаючи його окремо, хоча це легко розлучитися з двигуном є ключовим. Я не можу наголосити настільки, наскільки корисно підтримувати гаряче завантаження активів, тобто перезавантажувати речі на ходу. Це теж може принести багато складності вашій системі, хоча ви хочете переконатися, що вона побудована таким чином, що грі не потрібно дбати про те, звідки беруться активи.
Даш-Том-Банг

3

Ваші запитання звучать дуже суб’єктивно і сильно залежать від того, хто ваша цільова аудиторія.

Давайте розглянемо ваш шрифт / ttf розбір питання. Якщо ви плануєте додавати власний шрифт в моддери, то, ймовірно, ви хочете зробити процес імпорту якомога менше кроків. Якщо ви додаєте до гри багато внутрішніх розмірів шрифтів / шрифтів, можливо, вам потрібен дещо складний інструмент, який художник може використовувати з невеликою підготовкою. Якщо ви збираєтеся робити це один раз внутрішньо, то час, який ви витратите на створення належного імпортера, ймовірно, буде менше, ніж витрачати час на написання інструментів для попередніх справ.

Це дійсно питання масштабу з усім іншим. Вбудовані інструменти варті зусиль, коли ви робите щось багато разів і хочете зменшити складність / помилки, що виникають в результаті цього. Кожен додатковий класифікатор, який ви додаєте (тобто текстури TGA лише замість імпорту, скажімо, PSD), приводить до більшого часу, витраченого кінцевим користувачем.

Пам'ятайте, що інструменти вмісту зазвичай використовуються менш технічно схильними (читайте: виконавцями). Особисто мені дуже подобається, як працює Unity, де ви можете просто перетягнути у вихідний файл (psd, 3ds, ttf, mp3, jpg, mov, що завгодно), і він автоматично перетворить його у свій внутрішній формат. Внутрішній формат в основному прихований від кінцевого користувача. Він також автоматично перетвориться, коли виявить, що файл вихідного файлу змінюється. Але це багато роботи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.