Сгенерированные трехмерные сетки

16

Я еще не нашел вопрос по этим вопросам, поправьте меня, если я ошибаюсь.

Деревья (и фауна в целом) распространены в играх. Из-за их характера, они являются хорошим кандидатом на процедурное поколение.

Конечно, есть SpeedTree , если вы можете себе это позволить; насколько я могу судить, это не дает возможности генерировать ваши древовидные сетки во время выполнения. Тогда есть SnappyTree , генератор дерева на основе webgl, основанный на proctree.js, который составляет около 500 строк javascript.

Можно использовать любой из вышеперечисленных (или какой-то другой генератор деревьев, на который я не наткнулся), чтобы заранее создать несколько десятков сеток деревьев - или смоделировать их с нуля в 3d моделировщике - и затем случайно отразить / масштабировать их для нескольких других вариантов. ..

Но я бы предпочел иметь бесплатный, связываемый генератор сеток деревьев.

Возможные решения:

  • Перенесите proctree.js на c ++ и работайте с лицензией с открытым исходным кодом (похоже, gpl, поэтому может быть выполнимо; автор также может захотеть сотрудничать, чтобы сделать лицензию еще более бесплатной).
  • Ролл мой на основе L-систем.
  • Не беспокойтесь, просто используйте созданные в автономном режиме деревья.
  • Используйте другой метод, который я еще не нашел.

Обновление 2015 : закончилось портирование proctree.js на c ++ https://github.com/jarikomppa/proctree

Яри ​​Комппа
источник
5
Для самостоятельной работы я бы порекомендовал книгу «Алгоритмическая красота растений» Прусинкевича и Линденмейера, которая доступна по адресу алгоритмикуbotany.org/ papers/#abop . В книге и на сайте также содержится множество научных работ по созданию виртуальной ботаники.
Exilyth
Я создал онлайн инструмент под названием 3DFlora с WebGL. Он имеет более 80 параметров и позволяет загружать результаты в виде файла obj. С его помощью вы можете создать практически любой вид растений. Проверьте это здесь: 3dflora.sina-s.com
user2002741

Ответы:

12

Я проделал немалую работу в этой области, хотя большинство моих демонстраций старше:

(flash 2010)
http://genesisbbs.com/appstem.html (щелкните и перетащите мышь)
http://genesisbbs.com/appstem2.html
(directX 2006)
http://vimeo.com/5206795

Я настоятельно рекомендую вам сделать это самостоятельно, если вы делаете это ради развлечения. Вам почти наверняка нужно будет работать с кватернионами . Понимать их очень сложно, но вам не нужно слишком углубляться, чтобы их использовать. Представьте кватернион как вектор с дополнительным компонентом: вращением. Если вы хотите, чтобы ваши растения крутились и поворачивались по мере роста, им понадобятся кватернионы.

Другие вещи для изучения:
фигуры Лихтенберга
Лапласовы диаграммы роста
Вороного
Алгоритмы ближайшего соседа (Google google)

Я (лично) не рекомендовал бы использовать L-системы, кроме как, возможно, диктовать грамматику того, где и где растет, т.е. [семя -> [корень] / [ствол-> ветвь -> [цветок / лист]]. L-системы не годятся для реагирования на такие внешние воздействия, как направление солнечного света, гравитация, препятствия и т. Д.

Что касается скорости, одно дерево может быть сгенерировано в реальном времени. Однако в целях памяти и производительности вы, вероятно, захотите сгенерировать только небольшой набор деревьев и немного их скопировать, если вы имеете дело с лесами.

Большинство существующих генераторов деревьев не так уж велики (ИМХО), кроме мощных генераторов, используемых для Maya и подобных.

Я также очень, очень рекомендую использовать воксели для создания дерева (затем при необходимости скину с сеткой). Преимущество вокселей в том, что вы можете легко моделировать алгоритмы роста, используя такие вещи, как рост Лапласа и различные автоматы (не игра жизни Конвея, но другие правила дают интересные результаты).

Гаван Вулери
источник
3

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

При этом, вы можете взглянуть на ngPlant . Он включает в себя приложение для моделирования процедурных деревьев GPL, но библиотеки, выполняющие всю тяжелую работу, лицензированы BSD. Это написано на C ++.

Для рендеринга леса существует (лицензированный MIT) Paged Geometry для движка рендеринга Ogre .

Тапио
источник
3

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

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

Если вы подумаете об этой проблеме на секунду, то можете найти счастливую среду - как насчет того, чтобы сгенерировать несколько разных частей дерева, стволов, ветвей, листьев и т. Д., Но все они объединяются по модульному принципу, как дерево lego. Тогда у вас может быть много комбинаций и, следовательно, несколько совершенно уникальных деревьев, но вы также можете скопировать все эти части для более быстрой игры.

SirYakalot
источник
Помимо кусочной идеи, этот ответ не добавляет ничего нового.
Яри ​​Комппа
3
всегда приятно, когда ОП так благодарен. Для сайта QandA в вашем посте явно отсутствует вопрос. Кроме того, этот ответ напрямую касается ваших пунктов.
SirYakalot
Да, был там сам, извиняюсь.
Яри ​​Комппа
1

Я наткнулся на дерево [d] некоторое время назад ... Я использовал его только для небольшого количества времени, чтобы протестировать проект, но это было только потому, что я остановил разработку - этот инструмент предоставляет вам широкий спектр вариантов генератора, с которыми можно поиграть и Насколько я помню, довольно быстро. Ссылка ниже.

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

Лучше всего использовать TreeD бесплатно, и вы можете включать деревья, которые вы создаете, в свои собственные проекты, коммерческие или бесплатные, если они не являются пакетами моделей, пакетами текстур, генераторами 3D-моделей или генераторами текстур.

Далин Сейврайт
источник
Приятно видеть другие бесплатные генераторы, даже если они в формате библиотеки.
Яри ​​Комппа
1

Это изящное небольшое решение, и я использовал его в проекте и могу сказать, что он достаточно быстр, чтобы генерировать деревья на лету, почему игра запускается. Это, конечно, не подробно, но если вы избавитесь от рекламных щитов, это может быть довольно аккуратно.

http://ltrees.codeplex.com/

Майк
источник
Похоже, хорошее решение для пользователей XNA.
Яри ​​Комппа