Як можна розпочати роботу з процесуального покоління?


147

Нещодавно в центрі уваги було залучено процесуальне покоління (від Spore, MMO тощо), і це здається цікавим / потужним методом програмування.

Мої запитання такі:

  • Чи знаєте ви про будь-які середні проекти, які використовують методи процедурного покоління?
  • Яка мова / клас мов найкраща для процесуального покоління?
  • Чи можете ви використовувати процедурну генерацію для "серйозного" коду? (тобто не гра)

1
Цікаво, чи не буде вам ця стаття від X-Team корисною? x-team.com/blog/…
Адам Джерард

Відповіді:


117

Напевно, слід почати з невеликої теорії та простих прикладів, таких як алгоритм переміщення середньої точки . Ви також повинні дізнатися трохи про Perlin Noise, якщо ви зацікавлені в створенні графіки. Я скористався цим, щоб розпочати роботу з моїм підсумковим проектом з генерації процедур.

Фрактали тісно пов'язані з процесуальним поколінням.

Terragen і SpeedTree покажуть вам дивовижні можливості генерації процедур.

Процедурна генерація - це техніка, яку можна використовувати будь-якою мовою (вона, безумовно, не обмежується процедурними мовами, такими як C, оскільки її можна використовувати в таких мовах OO, як Java, та логічних мовах, таких як Prolog). Добре розуміння рекурсії будь-якою мовою посилить ваше розуміння процесу покоління.

Що стосується «серйозного» чи неігрового коду, методи процедурного генерування використовуються для:

  • імітувати зростання міст з метою планування управління трафіком
  • для імітації росту судин
  • SpeedTree використовується у фільмах та архітектурних презентаціях

Цей Perlin Noise дуже нагадує фільтр "хмари" Photoshop.
подвійнийOrt

Перша ланка розірвана
Жан Карло Мачадо

Деякі музики Electro використовують для створення процедурного покоління
Poyda

50

Вікі для створення вмісту процесуального вмісту:

http://pcg.wikidot.com/

якщо те, що ви хочете, не існує, додайте його;)


11
Я не можу скопіювати тут всю вікі! Немає «суттєвої частини».
Мартін

12

Процедурна генерація вмісту тепер написана для GPU, тому вам потрібно знати мову шейдера. Це означає GLSL або HLSL. Це мови, прив'язані до OpenGL та DirectX відповідно.

Хоча мої особисті переваги стосуються Dx11 / HLSL через швидкість, простішу криву навчання та Франк Д Луна , OpenGL підтримується на більшості платформ.

Ви також повинні перевірити WebGL, якщо ви хочете перейти прямо до написання шейдерів, не витрачаючи (значного) часу, необхідного на налаштування ігрового двигуна OpenGL / DirectX.

Процедурний вміст починається з шуму.

Тож вам потрібно буде дізнатися про шум Перліна (та його наступника Simplex шум ).

Shadertoy - це чудова орієнтир для вивчення шейдерного програмування. Я рекомендую вам прийти до цього, як тільки ви дасте шейдерне кодування, перейдіть самі, оскільки код там не для математично кричущих, але саме так робиться процедурний вміст.

Шадертой був створений процедурним генієм Ініго Квілесом , продуктом демо-сцени, який працює в Pixar. У нього є кілька відео на YouTube ( чудовий приклад ) сеансів кодування в реальному часі, і я також можу рекомендувати їх.


17
Що ви маєте на увазі, що "генерування процедурного вмісту зараз все написано для GPU"? Ви просто говорите про такі речі, як травинки? Ви не маєте на увазі, наприклад, генерації карт чи міст для ігор, чи не так?
Дронз

2
Так, я думаю, що коментар "усіх" тут - це надмірна генералізація, але в області генерації ландшафтів (яка, напевно, є найпоширенішим видом), це корисна відповідь. Хоча я не можу уявити, хто хотів би переглядати когось, набравши код у відео.
Nate CK

1
Той, хто хоче навчитися писати складний код, наприклад, шейдери, або навчитися використовувати складні шаблони у своєму дизайні. І це просто дряпає поверхню.
Ультроман Такаман

"Процедурна генерація вмісту тепер написана для GPU, тому вам потрібно знати мову шейдера." просто неправдиво і на 100% вводити в оману. (Я роблю простий проект процесу генерації, я написав 0 рядків шейдерного коду в своєму житті)
зменшення активності

9

Якщо ви хочете прикладу тектоніки, ерозії, дощової тіні тощо, моделювання плит світового генератора, подивіться на: https://github.com/ftomassetti/lands

Крім того, є також симулятор еволюції цивілізацій:

https://github.com/ftomassetti/civs

Блог із цікавим ресурсом:

dungeonleague.com/

Зараз це покинуто, але ви повинні прочитати всі його публікації


Цікаві джерела.
SalahAdDin

8

Я не фахівець з цього питання, але можу спробувати внести кілька відповідей:

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

  2. AFAIK Я не думаю, що між мовами є велика різниця. Більшість коду, який ви бачите, буде в C / CPP, оскільки це все ще є офіційною мовою розробників ігор, але ви можете використовувати все, що завгодно ...

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

І невеличке зауваження - моє визначення, якщо процедурне покоління є чимось, що генерує безліч даних із невеликої кількості правил чи зразків та безлічі випадкових випадків, ваші результати можуть відрізнятися :)


8

Є чудова книга на тему:

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

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

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

Хоча це досить дорогий пакет, він має безкоштовну ліцензію на оцінку, яку можна використовувати як дуже приємний навчальний та / або інженерний інструмент.


7

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

http://en.wikipedia.org/wiki/Демосцен


3

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

далі слід розробити рішення про те, як створити цю геометрію крихітними, чіткими кроками. ви повинні визначити правила, які складають місто, що правдоподібно. якщо ви займаєтесь 3d моделюванням, вам доведеться переосмислити багато того, чого ви навчились, щоб комп'ютер міг виконувати ваші вказівки в будь-якій ситуації.

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

я бачив занадто багато "генераторів міста", які в основному складаються з ящиків випадкової форми з деякими текстурами вікон на них: (


3

(Більше 10 років потому ...)

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

Взагалі існує якась взаємодія з кількома правилами , крім того, ви можете додати трохи випадковості та логіки, поєднати всі ці методи ... Все дещо хаотичне, але не надто хаотичне може дати цікаві результати.

Ось кілька помітних методів:

Кілька ігор, відомих своїм процедурним поколінням:

Відеоурок про процесуальне покоління сухопутних земель .

Конференція з генерації процедурного контенту для ігор, має безліч відео на тему: все процедурне

Весело.

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