Як я можу зробити «відпалий» 3D-рельєф, як перетинання тварин?


15

Перетинання тварин має унікальний спосіб прокрутки карти світу: Коли персонаж рухається вниз, світ котиться вгорі і знову, як би приклеєний до картонної трубки:

Перетинання тварин - це циліндровий світ

Це відео показує, як воно рухається.

Як я можу створити цей ефект?


1
Мені це не виглядає як ефект, це схоже на дуже простий тривимірний світ, який камера лише слідкує.
Джеймс

Злом гри може призвести до проблеми зіткнення, яка дозволяє зайти в океан, де закінчується світ. Ви можете бачити шматочки світу, винесені «зігнутою назад» в порожнечу за межі світу. Відео тут .
Анко

Відповіді:


6

Я трохи експериментував після гри Deathspank, що має подібний ефект. Хоча я ніколи не заглиблювався в нього достатньо, щоб побачити, чи можна його налаштувати на роботу дуже добре, одна можливість - просто змінити елементи у вашій вершинній шейдері на основі глибини. Функціонує відображення cos (глибини) на модифікацію осі Y. Ви можете налаштувати його таким чином, що світ не тільки опускається вдалині, але і якщо він ближче якоїсь глибини, завдяки чому світ відчуває себе особливо круглим. Ви можете зробити те ж саме для значення осі X, щоб зробити його більш сферичним. Я не впевнений, чи справді це роблять такі ігри; мої експерименти дали незадовільні результати, але я не сильно грав зі співвідношеннями, тому, можливо, це було так просто, як змінити швидкість випадання, щоб покращити її.


+1, тому що це я зробив би. Однак ви можете уточнити, що ви маєте на увазі під «глибиною». Це може бути відстань від камери або відстань від персонажа. Я думаю, було б добре експериментувати з обома.
DaleyPaley

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

5

Здається, це просто взяття «плоского світу» і відображення до циліндричних координат . По суті, обгортання світу циліндром. Я робив щось подібне з плоским світом, але я загортав його на сферу:

введіть тут опис зображення введіть тут опис зображення

Те, як я зробив це для сфери, схоже на те, як ви зробили це для циліндра. Виберіть відповідний радіус (ρ або "rho" у циліндричних координатах) для вашого світу. Для кожної вершини візьміть координати XZ свого світу (якщо вважати, що Y - висота), а потім переведіть на циліндричні координати, використовуючи XZ і радіус плюс Y. Якщо ви не додасте Y, ви отримаєте плоский циліндр. Потім перетворіть назад на декартові координати, щоб провести гру.


3
Ще одна річ, яку слід зазначити, світовий вимір Y у перетині тварин набагато більший, ніж окружність циліндра (лише за допомогою очного яблука, оскільки лінія горизонту дуже близька). Тому деяка частина карти світу обрізана лише на ті ділянки, які є найближчими до персонажа, і ця обрізана область обертається навколо цілого циліндра. Це схоже на обрізання 2D-карти на основі плитки лише на видимі частини.
ChrisC

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

5

Ви хочете перейти від планарного світу, до циліндричного.

Обертання навколо осі x (в однорідних координатах) виглядає так:

     | 1   0   0   0 |
Rx = | 0  ca  -sa  0 |
     | 0  sa   ca  0 |
     | 0   0    0  1 |

Де:

ca = cos(angle) and sa = sin(angle)

Щоб обчислити кут, подивіться на зображення. Пі / 2 скасовується, і вам залишається:

angle = offset_from_character.z - radius

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

new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)

обов'язково скиньте речі, що знаходяться над обрієм, інакше весь світ загорнеться.

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

сферичний світ

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