Как процедурно (создать) вырастить художественное (2D) дерево в реальном времени (L-System?)


20

Недавно я запрограммировал модуль L-системы , он заинтересовал меня еще больше. Я тоже наркоман Plants vs Zombies, мне очень понравилась концепция Древа Мудрости. Хотелось бы создать подобное процедурное искусство просто для удовольствия и узнать больше.

Вопрос: Как я должен подходить к процессу создания художественного дерева (2d, возможно, с фиксированной камерой / перспективой) динамически?

В идеале я хотел бы начать с растения (только стебель с листом) и динамически выращивать его, используя некоторое влияние (ввод / действие пользователя) на его структуру. Эти влияния могут привести к разному типу ветвления, изгибам в ветвях, их распространению, расположению плодов, цвету цветов и т. Д. Хотите, чтобы это было действительно полно жизни / духа. :)

Растения против Зомби: Древо мудрости Было бы здорово динамически вырастить подобное дерево, но с гораздо большим количеством вариаций и анимаций.

Мое прошлое: Программист, использовал несколько игровых движков (Ogre3d, cocos2d, unity). На самом деле не был запрограммирован напрямую с использованием openGL, пытаясь это исправить :).

Я готов потратить значительное время. Пожалуйста, дайте мне знать об API? и как такой эксперт, как вы, решил бы эту проблему?

Почему 2D? Я думаю, что решить проблему проще, если учитывать только 2 измерения.

Художественные вдохновения:

Только дерево, с плодами и листьями, без кустов на дне

Большое дерево (видимые ветви, зеленые листья, цветы, фрукты и т.д.) , на левой стороне , позади обезьяны.

PixelJunk's Eden (вдохновение в стиле арт).

Процедурно генерируемая яблоня с использованием фракталов

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

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


2
Возможно, у меня нет ответа для вас, но я бы определенно хотел посмотреть, к чему это приведет. Потрясающая концепция!
Bloodyaugust

Отличный вопрос, я давно интересовался L-Systems, но ничего не сделал с таким интересом :)
Лютер


1
@ Стефен, просто чтобы вы знали, что этот вопрос относится к 2011 году, и пользователь задал ему Student/Student/Programmer
некую задачу,

@lalan Пожалуйста, вносите только те изменения, которые важны для вопроса, тот факт, что вы больше не являетесь студентом, не является существенным изменением или причиной для редактирования.
MichaelHouse

Ответы:



8

Несколько идей для вашей «игры»:

  • Сначала запросите у пользователя имя для своего дерева. Используйте это имя, чтобы создать начальное число для алгоритма. Так что у каждого имени будет свое уникальное дерево. Семя также может влиять на тип листвы и плод дерева.
  • Вы могли бы реализовать своего рода « тамагочи дерева », где дерево становится больше и приятнее, чем больше его заботит пользователь (удобрения, вода и т. Д.)
  • Создайте список рекордов самых высоких деревьев. Другой идеей было бы показать высоты и имена других пользователей рядом с вашим деревом. Таким образом, вы можете сравнить высоту своего дерева напрямую с другими пользователями. Посмотрите это видео в качестве примера. Облака показывают высоту, которую достигли другие пользователи.

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

Поскольку у вас есть опыт работы с Ogre3D, Unitiy и cocos2d, вы можете пойти дальше и реализовать это (не нужно начинать изучать OpenGL сейчас, IMHO). Лично я бы выбрал cocos2d и релиз для iPad и / или iPhone, чтобы каждый мог носить свое дерево с мобильным устройством.


1
По этой игре я бы просто играл с L-Systems в социальном / конкурентном плане.
deft_code

1
Спасибо, что указали мне на ветку gamedev. Хорошие идеи, тамагочи и goo-tower. Мобильное приложение было бы действительно здорово. нашел видео плагина 3DS Max - довольно крутая ссылка ..
lal

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.