Процедурні планети, карти висоти та текстури


19

Зараз я працюю над генератором планетних процедур OpenGL. Я сподіваюся використовувати його для космічної RPG, що не дозволить гравцям опуститися на поверхню планети, тому я проігнорував все, що стосується ROAM. На даний момент я малюю кубик з VBO і відображаю на кулі.

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

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

Залишаючи плитку очевидною.

Хтось може порадити мені найкращий маршрут?

Будь-який внесок буде дуже вдячний.

Відповіді:


18

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

З урахуванням сказаного, те, що ви хочете, - це перетворити з довільної (x, y, z)в (u, v)координату, що тривіально. Жодна кубічна карта не потрібна.

alt текст

alt текст

  1. Кожен (u, v)тексель має висоту (карту висоти RGB = height) та положення (x, y, z) = pos.
  2. Знайти і нормалізувати становище, NORMAL(x, y, z) = N.
  3. Нова вершина = pos+N*height.

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

alt текст



1

Картографування висоти середньої точки переміщення - хороше місце для початку. ОП, чому ти вважаєш, що це не так?

ОП добре моделювати поверхню планети як кубічну карту, тому що будь-яка плоска карта (наприклад, проекція Меркатора) матиме спотворення, які є некрасивими та складними, по математиці.

Якби я був ОП, то спочатку забув би геометрию планети великого масштабу. Я б зробив кубічну карту, де кожне обличчя - 2 ** N + 1 пікселів (2,3,5,9,17,33 ...), а кожен тексель кодує висоту [0..N), де 0 - висота очікувана найнижча траншея і N - висота очікуваної найвищої гори планети.

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

Оскільки я рекурсивно генерую фрактальну висоту для середин ребер, я б переконався, що я поширюю вершини граней граней на іншу грань, яка їм ділиться.

Як тільки я закінчую, у мене є карта куба, де всі крайові текстилі подвоюються, а всі кутові текстилі - втричі. Не потрібно перетворювати його на звичайну карту - я б використовував алгоритм у роботі Мортена Мікельсена, щоб відображати нормали безпосередньо з карти висоти під час виконання.

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


1

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

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