Нескінченна карта зациклена

Треба зробити нескінченну карту, досить велику, при переході за "межу" персонаж повинен з'явитися на іншому кінці (непомітно). Карта примітивна, без ландшафту, без стін і стелі. На карті, наприклад будуть стовпи, або ящики (все одноманітно), які майже не загороджують вид. Дальність огляду середня, освітленість слабка. Ще на карті будуть динамічні об'єкти (які можна переміщати, дрібні, з фізикою). Можливий мультиплеер. Дія відбувається уві сні, в фантазії, коротше не в реалі.
У мене є кілька рішень:
1) розбити карту на шматки і за кордон карти додати копії шматків. копіювати і динамічні об'єкти на ці шматки. При переході кордону телепортувати рр в початок. (Мінусів багато, складність в реалізації, витратність, зростаюча складність)
2) зробити кордон у вигляді пелени або туману. (Ідеально, але треба зробити красиво)
3) Зробити стінки кордону у вигляді зеракала. (Хз як)
Чи є більш елегантні рішення? Як реалізовані портали в Portal? Думаю, теж за допомогою копіювання кімнати.

Як реалізовані портали в Portal? Думаю, теж за допомогою копіювання кімнати.


Ні ви що? Прямо так, за допомогою порталів.

Я не знаю як точно це зроблено в Source, але можу припустити як влаштовані портали в Unreal Engine (н-р мод Nameless Mod до Deus Ex).
Весь рівень будується з адитивною геометрії. Ви додаєте в сцену прямокутні порожні області (кімнати, вулиця) і тверді блоки (будівлі, колони), перед запуском сцени потрібно виконати її Build (або порталізацію). Причому тверді блоки вже виступають в якості коллайдеров фізичного движка.
Порталізація зводиться до визначення перетину створених Брашей і розбиття ігрового простору на маленькі кімнатки простої форми. Ці кімнатки називаються осередками (cell) а переходи між ними - порталами (portals). Таке розбиття ігрового простору використовується як Occlusion Culling в Unity - рендерится тільки вміст тих осередків, які межують з осередком в к-й знаходиться гравець, а також осередків, чиї портали видно з граничних осередків. При вході в портал змінюється поточна комірка і, след-но - список її порталів і граничних осередків.

Так ось, "портали" в Unreal Engine напевно (не можу ручатися точно) були зроблені шляхом додавання вручну додаткового порталу в процесі порталізаціі. Додавалася ще одна грань між осередками, але на відміну від нормального процесу порталізаціі 2 з'єднуються осередки знаходилися далеко один від одного, в різних частинах карти. Сусідство осередків в даному випадку не потрібно, в порталі просто вказувалися номери осередки A і B. У результаті в кімнаті A гравець міг бачити через портал кімнату B і навпаки. Так забезпечувалася природна підтримка порталів з боку ігрового движка.

У Source сцена також будується на основі первинної геометрії (порожні та тверді браши), тому цілком можливо що портали влаштовані так само, як в Unreal Engine, тільки замість статичного додавання порталу використовується додавання динамічне.

Створення сцени в Unity засноване геометрії складних мешів з окремими фізичними коллайдера, тому спроба розбити простір на комірки призведе до їх величезній кількості. Загалом, використання порталізаціі рівня в Unity ні до чого доброго не приведе.
Для створення замкнутого світу швидше за все доведеться створювати дзеркало на кордоні світу, а при вході в нього - телепортувати гравця в протилежну частину сцени.

Потрібна допомога? Самі, самі, самі, самі, самі. робимо все самі

artk писал (а): 1) розбити карту на шматки і за кордон карти додати копії шматків. копіювати і динамічні об'єкти на ці шматки. При переході кордону телепортувати рр в початок. (Мінусів багато, складність в реалізації, витратність, зростаюча складність)


Не зовсім зрозумів, що і куди ви копіювати збираєтеся. А просто розбиття на шматки і переміщення / підстановка потрібного шматка в потрібне місце хіба не підходить?

Як реалізовані портали в Portal? Думаю, теж за допомогою копіювання кімнати.


Сумніваюся. В Portal портали можуть бути створені під будь-яким кутом, в тому числі і не перпендикулярно площині поверхні. Притому в налаштуваннях можна задати і кількість "відображень" в порталах. Реалізувати таке шляхом копіювання вельми заморотно.
Може вони до кожного порталу (всього їх 2) прив'язують кілька render texture, а потім послідовно Рендер в них

Belfegnar_ писал (а): Не зовсім зрозумів, що і куди ви копіювати збираєтеся. А просто розбиття на шматки і переміщення / підстановка потрібного шматка в потрібне місце хіба не підходить?

Схожі статті