Основна теорія
Для роботи нам знадобиться X-Ray SDK.
Для початку, навіщо воно потрібне:
HOM - розшифровується як Hierarchical Occlusion Mapping, або мапінг ієрархічних відсікань. Що це означає: спрощено кажучи, за допомогою HOM можна підвищити продуктивність рендерингу складних рівнів на ~20%.
Як працює HOM: Не вдаючись у технічні подробиці, поясню спрощено: те, що закрито від гравця Occlusion'ом – процесор не обробляє, а відеокарта не рендерить – а значить, система економить свої ресурси, продуктивність при цьому, природно, зростає.
Сектори та портали: про них – читаємо тут – роз'яснено дуже просто та доступно. Можу лише додати, що у X-Ray 3D Engine, геометрія рівня у побудові секторів не бере участі, він використовує для цього HOM-об'єкти.
Висновок: Всі ці проблеми дозволяють майже дворазово підняти продуктивність системи, і вдячні користувачі з не дуже сильними комп'ютерами (а таких більшість), тягатимуть вас на руках за такий розкішний подарунок 😉
Lamp.gif Важливі моменти
1. Робити все це, актуально для справді складних і потужних карт, тому що не тільки підніме швидкість у результаті, а й дозволить напхати в карту більше будь-якої цікавої геометрії.
2. Викладені вище принципи, актуальні як сталкера, але й переважної більшості сучасних ігор. Наприклад, найкраще це вся справа з порталами та секторами продумано на іграх на движку Sourse (Half-Life 2 і т. д.)
Отже, приступаємо до креативу!
Припустимо, є у вас карта, на якій треба зробити все перераховане вище. Як це зробити, я поясню на прикладі старого доброго кубика, зробимо йому HOM, поставимо на карту і створимо портали з секторами.
Почнемо з HOM.
Ось наша карта, на ній кубик, треба для нього зробити HOM.
Щоб зробити HOM, скидаємо сцену і йдемо до Бібліотеки статичної геометрії, знаходимо там наш кубик. У мене він знаходиться за адресою editor\shadertest_box , ви можете заюзати свій.
Тепер, цей кубик, там же, в бібліотеці, експортуємо у формат LWO, щоб стерти всі налаштування матеріалів, на базі експортованого об'єкта ми і зробимо HOM, і матеріали з шейдерами йому ні до чого: обізвав я його shadertest_box_occ , (OCC - означає оклюдер , відсікач).
Все експортували. Тепер імпортуємо його назад, заходимо в налаштування об'єкта, у полі Object Type (тип об'єкта), змінюємо його тип зі Static на HOM , виходимо з налаштувань та зберігаємо зміни. Відразу - бачимо, вид нашого кубика - змінився, тепер - він став HOM-об'єктом.
Тепер - завантажуємо знову нашу карту, вибираємо режим "об'єкти", в самому низу, тиснемо кнопку "оновити список", щоб у ньому з'явився новий об'єкт, і додаємо наш оклюдер на карту як звичайний об'єкт.
Залишилося тільки "підігнати" (рухаючи, обертаючи і т.д ...) оклюдер під наявний кубик якомога точніше.
Всі! HOM-оклюдер для об'єкта успішно створено. Таким чином, можна (і необхідно) вчинити з усіма об'єктами на карті, але створювати оклюдери найкраще - ще в 3DSMax , у вигляді деяких "спрощених муляжів" для створюваних об'єктів. Хоча можна і оскільки я описав вище.
Сектори та портали необхідно генерувати після того, як складання картки закінчено, всі об'єкти на місці, оклюдери встановлені, і т.д. Коротше, перед самою прекомпіляцією. Робляться вони дуже просто, так як у SDK - можливості по них дуже убогі, а багато хто так і взагалі "тимчасово відключений". Але творити їх можна.
Отже:
Переходимо в режим Сектори та створюємо базові портали, натиснувши відповідну кнопку. Якщо об'єктів багато, доцільно перевірити на правильність однойменною кнопкою. Сектор створено.
Переходимо в режим "портали" та "обчислюємо всі портали".
Всі. Occlusion Mapping – зроблено, сектори створені, а портали до них обчислені. Дякую за увагу.
Важливе доповнення щодо створення секторів та порталів
Щоб створити сектори лише на рівні, необхідно спочатку підготувати геометрію в 3Д редакторі. Розбивка рівня на сектори провадиться по окремих мішах. Для цього в 3Д редакторі необхідно розбити геометрію на окремі міші, щоб потім у СДК зробити з кожного окремого міша сектор. При розбивці геометрії на частини необхідно дотримуватися теорії секторів. Після того, як розбили геометрію на окремі міші, необхідно експортувати її в ЦДК, також окремо кожен міш. Далі, у СДК починаємо створювати сектори. Для цього переходимо в меню секторів та натискаємо Add (чайник). З'являється додаткове меню. У ньому виділяємо Create New Single (From Mesh). І потім починаємо виділяти свої окремі міші. Кожен виділений міш і є окремим сектором. При виділенні можна встановити колір сектору.
Після того, як виділили та задали кольори всім своїм мішам. Натискаємо Create Default. Створюється базовий сектор.
Після цього переходимо до режиму порталів. І натискаємо Compute All Portals. Вискакує вікно, у якому натискаємо Yes.
Все тепер залишається чекати, коли всі портали вирахуються.
Тепер необхідно порушити питання про те, коли в секторі, що створюється, знаходяться об'єкти, які були додані в ЦДК. Адже вони не належать до міша, який ми створили в 3Д редакторі. І якщо з ними нічого не робити, то у грі вони стануть невидимими. Щоб цього не сталося, необхідно їх включити в цей сектор. Для цього у додатковому меню Секторів натискаємо +М, а потім Create New Single (From Mesh). І далі із затиснутою кнопкою Ctrl виділяємо всі об'єкти, які знаходяться всередині сектора, що створюється. Сектор треба також виділити.
Пояснювальна частина
Cектори/портали та HOM потрібні лише для покращення продуктивності.
Принцип роботи з / п, думаю, зрозумілий: сцена ділиться на деяку кількість обсягів (секторів), задаються вікна (портали), через які (і тільки через які) спостерігач може побачити нутрощі інших секторів.
Червоні області на картинці - портали, геометрія різних секторів забарвлюється по-різному, але дивіться налаштування LE.
Розбивка робиться в LE (підлозі) автоматично за умови правильно підготовленої геометрії. що це означає, можна зрозуміти за будь-якою декомпільованою з "-mode raw" картою (вибирайте невеликі на зразок mp_bath).
Ще варіант: mp_atp з ТЧ СДК. Достатньо замінити файли sector.part та portal.part на їх backup-копії (sector.~part та portal.~part відповідно).
HOM - незалежний від с/п механізм. Знову ж таки, прикладом може служити майже будь-яка декомпільована карта, лише намагайтеся мінімізувати кількість трикутників в HOM-об'єкті, одночасно максимізуючи площу, що закривається ними. Наприклад, немає жодної необхідності точно повторювати зріз пагорба, досить грубого наближення (див. сміттєві купи на звалищі).
Для ландшафту HOM навряд чи можна зробити відмінним від ручного способом, а для будівель є сенс спробувати вбудований у майку огрубатель геометрії.
Також треба відзначити дуже важливий нюанс для побудови секторів у єдиному просторі, без порталів вони не мають сенсу! За відсутності порталу, просто спостерігатимемо картину зникнення частини локації, якій був присвоєний сектор без порталу, власне, перейти на цю частину можна, але буде ховатися з уваги попередній сектор. Тобто це неправильно! А нюанс порталів в тому, що вони можуть будуватися тільки в тому місці, де два сектори перетинаються в одній площині і тільки, тобто, найпростіший спосіб розділу секторів є по дверній рамі або в іншому площинному отворі.
Як переконатися, що HOM корисний на цій карті? Скажімо, записавши демку обльоту карти і проганяючи її з level.hom і без.