воскресенье, 11 декабря 2011 г.

fracplanet

Где-то год назад у меня была лаба по использованию генераторов ландшафтов. Как убеждённый линуксойд, я, конечно, попытался отыскать подобную софтину сначала у себя в портежах, а потом в гугле, но почти безрезультатно. Единственная, которая попалась так и не завелась. Но вот недавно здесь я таки нашёл одну штуку.


fracplanet


Программа написана на C++ и Qt с использованием boost, разумеется, использует OpenGL.

Из того, что она умеет:
  • генерирование планет, плоских поверхностей с 6, 4 и 3 гранями
  • настройки рек, снега, атмосферы, цветовой гаммы
  • сохранять файлы в форматах pov, blender и как текстуры ppm и pgm
Как это выглядит на практике:

В программе мы задаём шумы для генерации зели, seed'ы для генераторов случайных чисел, уровень снега и т.п. после чего получаем что-то вроде такого изображения в окне просмотра:

Настройки камеры довольно скромны. Если быть точнее, то их нет. Мы можем либо повращать сцену вокруг оси Z, либо войти в режим полёта. При этом ни остановить, ни задать необходимую позицию камере нельзя. При наличие конвертера в други форматы и отсутствии собственного движка для рендера это конечно не критично, но создаёт определённые неудобства.

fracplanet вообще не имеет собственного формата данных, т.е. сцену нельзя ни сохранить, ни удалить. Судя по документации, разработчики планируют это исправить.

На возможности fracplanet уже посмотрели, теперь хотелось бы посмотреть что получается после конвертации. Облом. Мой blender-2.5 и 2.6 так и не подхватили сгенерированный python-скрипт для блендера. pov я ниасилил, кроме того при запуске на сгенерированном файле он у меня падал, а KPovModeler так его и не открыл, но если верить разработчикам, после обработки должно получаться примерно следущее:

 Теперь немного о том, как оно написано. Конкретный алгоритм генерации земли они не указали, но судя по всему это просто какой-то из генераторов шумов, разбираться и смотреть какой именно - лень. Земля хранится в виде вершин! Довольно странное решение, ведь оно занимает кучу памяти и слабо масштабируемо. Соответственно, генерация рек происходит при помощи прохода по вершинам и выделения среди них соседей. Хотя я таких штук не писал, и не мне судить, но можно было либо по карте высот всё это расчитывать во время рендера, либо уж хотя бы нормальные объекты сделать, а не все реки в один массив кидать.

Про память я не зря упомянул - если задать слишком большую аппроксимацию, программа просто выкидывает std::bad_alloc. Считается всё на процессоре, на одном ядре, что довольно медленно. Кроме того, в окне просмотра отображаются все вершины, что очень тормозит и может тупо повиснуть.

Ну и напоследок про планы разработчиков: они таки хотят сделать нормальную камеру, научиться сохранять сцены, симулировать тектонические плиты, улучшить настройки облаков, добавить климатические зоны, сделать конвертацию в ещё несколько форматов.

Буду надеяться, у них всё получится.

Комментариев нет:

Отправить комментарий