Войти
ПрограммированиеФорумГрафика

Принципы генерации ландшафтов на сферической поверхности

Страницы: 1 2 3 4 Следующая »
#0
2:37, 17 янв 2017

Доброго времени суток. Не понимаю, как должна быть устроена генерация ландшафтов на сферической поверхности (то есть планет). Лобовой способ генерации "плоского" ландшафта: берем карту высот и вытягиваем в зависимости от цвета z-координату. Нагуглил вот такую штуку: http://mathproofs.blogspot.ru/2005/07/mapping-cube-to-sphere.html. Я правильно понимаю, что мы берем куб, на каждой грани генерируем ландшафт, а потом вот этим преобразованием проходимся по всем координатам и получаем сферу? Не будет ли это слишком накладно? Сходу кажется, что это ужасно неоптимально. И еще: не хочется ведь для каждой грани использовать одну и ту же карту высот. А сделать одну огромную - опять же жутко неоптимально, как мне кажется. Помогите советом, как это делается по-человечески?

#1
11:49, 17 янв 2017

Почему не оптимально? Ты же делаешь это не каждый кадр, а один раз при загрузке сцены/генерации части космоса.
Для каждой грани используется своя карта высот, в местах стыков ландшифт должен быть соответствующим.

#2
14:30, 17 янв 2017

kasom
Берём сферу и генерируем карту высот в полярных координатах.

#3
15:03, 17 янв 2017

Мизраэль
Не будет ли вычисление тригонометрии губительно сказываться на скорости генерации ландшафта?

#4
15:15, 17 янв 2017

kasom
в гугл земле и похожих сервисах данные карт хранятся в проекции Меркатора, чтобы пиксели были максимально квадратными.

#5
15:16, 17 янв 2017

kasom
> Не будет ли вычисление тригонометрии губительно сказываться на скорости
> генерации ландшафта?
Генерацию лучше делать оффлайн всё же, но если предполагается в реальном времени, то можно сделать высокополигональную геосферу и в рантайме её вершины передвигать. Тригонометрия там не нужна.

#6
15:19, 17 янв 2017

kasom
ещё важно, что в итоге хочется получить? простую мультяшную планету, как в Самогонках, большущую планету для стратегической игры или просто шарик для космосима. В последнем случае геометрией вообще можно не заморачиваться.

#7
15:27, 17 янв 2017

3d perlin noise

#8
15:30, 17 янв 2017

Мизраэль
Скорее "большущую планету для стратегической игры".

#9
15:50, 17 янв 2017

Мизраэль
> сделать высокополигональную геосферу и в рантайме её вершины передвигать
Подскажите пожалуйста, правильно ли я понял схему: генерируем сферу, получаем на выходе какой-то буфер вершин. Теперь для каждой вершины можем подсчитать значение 3D Simplex Noise (почти как предложил Battle Angel Alita) и передвинуть ее соответсвующим образом. Это все если в онлайне. Если хочу в офлайне, то можно просто заранее сделать все то же самое, а потом из файла подгрузить вершинный буфер. Верно?

#10
16:10, 17 янв 2017

Механизм генериции правильнее делать смешанным, и скорее всего без файлов. Во первых загрузка и декодирование файла может занять столько времени как и генерация, только если объект не модифицируется. Сам алгоритм генерации как 3d perlin noise не оптимален для просчета его в реальном времени для каждой вершины, но имеет место быть если это будет оригинальная оптимизированная альтернатива. Я например делал это в шейдере, а для физики это всего лишь один расчет (вершина) на персонажа. Также для генерации лучше использовать заранее посчитанный участок шума/слоя. С другой стороны при масштабировании поверхности лучше разделить расчет шума на отдельные подслои детализации и потом их смешивать для получения различных lod объектов, так нагрузка при генерации в реальном времени будет меньше в том числе для фонового синтеза.

3D Simplex Noise по скорости будет уступать 2D построенного через развертку.

#11
16:46, 17 янв 2017

foxes
> 2D построенного через развертку.
То есть лучше сгененировать 2D simplex noize, а потом отобразить его на сферу какой-нибудь проекцией Меркатора?

#12
16:52, 17 янв 2017

kasom
> То есть лучше сгененировать 2D simplex noize, а потом отобразить его на сферу какой-нибудь проекцией Меркатора?
Нет, потому что плоскость невозможно отобразить на сферу без растяжений или сжатий.
Кстати, для 2D случая, simplex не имеет смысла.

#13
18:08, 17 янв 2017

}:+()___ [Smile]
> Нет, потому что плоскость невозможно отобразить на сферу без растяжений или
> сжатий.

очередной шаблон

В случае с генерацией не будет ни каких сжатий и растяжений.
разница только в масштабе по горизонтали на cos(b).

L=atan2(v.x,v.z);
B=atan2(v.y,Length(v.xz));

noise.x=L*cos(B);
noise.y=B;

По этим координатам уже генерируется равномерный шум для сферы.

+ Аналог без каких либо искажений
#14
20:14, 17 янв 2017

Battle Angel Alita
> 3d perlin noise
+1

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.