Pull to refresh

Хабраразум подскажи…

Reading time 1 min
Views 876
Lumber room
Я знаю, тут не любят такие неинформативные топики. Он будет прятаться за забором персонального блога.

Пытаюсь какое-то время найти информацию по Shape Grammars и их реализацию. Это в продолжение поста про L-Systems. Есть задача процедурного параметрического моделирования двумерных и трехмерных объектов, в частности космических кораблей. Знаете, такие огромные штуковины с кучей мелких деталей из фильмов, которые в вакууме летают с таким звуком «пш-ш-ш-ш-ш-ш-ш»? И взрываются там же так красиво «бдыщ-щ-щ-щ». Они идеальные кандидаты для процедурного моделирования. Например, вот такие картинки удалось нарыть.

Первая, вторая, третья.

Интересует как теория, так и практика.

Из теории было найдено не так много, в основном некие тезисы и научные работы в коротеньких PDFках.

По практике, народ генерирует города: один, два. Или вот довольно простая реализация практически того, что мне нужно.

Пока что рассматриваю создание плагина к Houdini на Python под свои нужды.

Любая информация будет полезна.

P.S. про рандомное увеличение деталей, как например есть плагин для макса, я знаю и пробовал. К сожалению вылетело из головы название. Делит полигоны на части, extrude их на разную высоту и так далее. Нужно контролируемая правилами генерация.
Total votes 23: ↑15 and ↓8 +7
Comments 25

Применение процедурных генераторов в создании контента для real-time 3D приложений: Часть 1. Oil Rush

Reading time 18 min
Views 107K
UNIGINE corporate blog Working with 3D-graphics *
Игра Oil Rush


В данной статье, состоящей из двух частей, речь пойдёт об использовании возможностей процедурных генераторов при создании контента для компьютерной игры Oil Rush и бенчмарка Valley (выйдет в феврале), разработанных на нашем собственном движке Unigine.
Читать дальше →
Total votes 239: ↑238 and ↓1 +237
Comments 41

Применение процедурных генераторов в создании контента для real-time 3D приложений: Часть 2. Valley Benchmark

Reading time 13 min
Views 75K
UNIGINE corporate blog Working with 3D-graphics *
Бенчмарк Valley


Это вторая и заключительная часть статьи, посвященной процедурным методам производства контента для 3D приложений. Первую часть Вы можете найти здесь.

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

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

В этот раз речь пойдёт о том, какими средствами и приёмами мы пользовались при создании бенчмарка Valley, чтобы в максимально сжатые сроки произвести большое количество фотореалистичного контента.
Читать дальше →
Total votes 133: ↑133 and ↓0 +133
Comments 53

Процедурная генерация планов помещений

Reading time 7 min
Views 70K
Game development *Algorithms *Unity3D *

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

По процедурной генерации планов помещений есть много, очень много статей. Вот ещё пяток ссылок на статьи. Только исходников ни к одной из них нет.

В этой статье я расскажу о том, как я реализовал на Unity3d один простой метод генерации, который приводит к хорошим результатам и легко модифицируется. С картинками и исходниками.
Читать дальше →
Total votes 99: ↑97 and ↓2 +95
Comments 29

Процедурная генерация трёхмерных моделей

Reading time 9 min
Views 69K
Game development *Algorithms *Unity3D *


Процедурная генерация — замечательная штука! Интереснее всего работать именно с графикой, особенно трёхмерной — сразу видно результат. Всего пары инструкций достаточно, чтобы создать облако треугольников как на картинке выше.

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

На примере движка Unity и C# я покажу как можно работать с моделями и превращать текст в графику. Большинство приводимого кода легко портируется на другие фреймфорки и языки.

Треугольник


Начнём с простейшей формы — треугольника. В Unity и во многих других движках используется популярный способ описания моделей: с помощью массивов вершин, треугольников и нормалей. Дополнительно для текстурирования используются uv-координаты вершин. Для работы с моделями есть класс Mesh, в котором для каждого набора данных имеется отдельный массив. В Mesh.vertices хранятся координаты вершин, в Mesh.triangles — индексы вершин группами по три. А в Mesh.normals и Mesh.uv лежат векторы нормалей и координаты uv-карт, индексы которых должны совпадать с индексами соответствующих вершин, т. е. порядок в массивах должен быть одинаковым. Покажу на примере, чтобы было понятнее.
Читать дальше →
Total votes 35: ↑26 and ↓9 +17
Comments 7

Процедурный генератор хрущёвок

Reading time 9 min
Views 109K
Game development *Algorithms *Unity3D *
Сидел я как-то дома, читал статью про хрущёвки и восторгался гением архитектора. Потом меня отпустило, и я подумал, что унылость и однообразие хрущёвок очень легко можно описать математически. Прямые углы, равные интервалы, минимум украшений — что может быть проще?

На самом деле, у хрущёвок существует несколько десятков модификаций, но некая основа, сущность хрущёвки всё равно прослеживается.

В общем, недолго думая, я сел и написал генератор хрущёвок на C# под Unity3d. Под катом описание работы алгоритма и размышления на тему uv-карт, сабмешей и шейдеров.
Читать дальше →
Total votes 271: ↑264 and ↓7 +257
Comments 90

Школьная геометрия и Unity3D

Reading time 5 min
Views 22K
«Кельник» corporate blog Unity3D *
В предыдущей статье мы рассказали о «Планоплане», нашем онлайн-планировщике и дизайнере квартир. С небольшим отрывом в опросе победила тема о школьной геометрии в «Планоплане» и Unity3D, о чём с удовольствием и рассказываем.

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


Какая такая школьная геометрия?
Total votes 17: ↑14 and ↓3 +11
Comments 3

Процедурная генерация текстур планет на основе алгоритма Diamond-Square, часть 1

Reading time 14 min
Views 41K
Programming *Game development *Algorithms *C# *Unity3D *
Tutorial
image

Доброго времени суток. Как со мной бывает, как только я разобрался в каком-то сложном для себя вопросе, я сразу хочу рассказать всем решение. Поэтому решил написать серию из двух статей по такой интересной теме, как процедурная генерация. А конкретнее, я буду рассказывать про генерацию текстур планет. В этот раз я подготовился основательнее и постараюсь сделать материал качественнее, чем в моем предыдущем посте «Простая система событий в Unity» (кстати, спасибо всем за ответные посты). Прежде чем продолжить, хочу обратить ваше внимание на несколько моментов:

1) Этот генератор не претендует на реалистичность, и писал я его для того, чтобы сгенерировать уникальные текстуры для сотни маленьких шариков, которые занимают 10% экрана и к тому же прикрыты облаками.
2) Чисто технический момент: я пишу на C# под Unity3d, так что думать о том, как выводить в изображение с приемлимой скоростью вам придется самим, для каждого языка и платформы свои способы.

Читать дальше →
Total votes 34: ↑31 and ↓3 +28
Comments 21

Генерация текстур планет с помощью алгоритма Fault Formation

Reading time 2 min
Views 17K
Open source *Python *Programming *Game development *Algorithms *

Возможно, кто-то помнит замечательную олдскульную космическую игру Star Control 2. В свое время меня поразила огромная звездная карта с неизведанными планетами, которые предстояло исследовать на фоне разворачивающейся глобальной катастрофы. С тех пор как авторами были опубликованы исходные коды, игра была портирована под новым именем The Ur-Quan Masters на большинство современных платформ.

Покопавшись в исходниках, я обнаружил простой алгоритм, генерирующий текстуры планет, и написал программу на Python, позволяющую генерировать аналогичные текстуры.
Читать дальше →
Total votes 29: ↑27 and ↓2 +25
Comments 12

Процедурно генерируемые карты мира на Unity C#, часть 1

Reading time 5 min
Views 64K
Game development *Algorithms *C# *Unity3D *
Tutorial
Translation
image

В этом цикле статей мы научимся создавать процедурно генерируемые карты мира с помощью Unity и C#. Цикл будет состоять из четырех статей.
Читать дальше →
Total votes 27: ↑24 and ↓3 +21
Comments 6

Процедурно генерируемые карты мира на Unity C#, часть 2

Reading time 7 min
Views 22K
Game development *Algorithms *C# *Unity3D *
Tutorial
Translation
image

Это вторая статья из цикла о процедурно генерируемых с помощью Unity и C# картах мира. Цикл будет состоять из четырех статей.
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Comments 4

Процедурно генерируемые карты мира на Unity C#, часть 3

Reading time 13 min
Views 19K
Game development *Algorithms *C# *Unity3D *
Tutorial
Translation
image

Это третья статья из цикла о процедурно генерируемых с помощью Unity и C# картах мира. Цикл будет состоять из четырех статей.
Читать дальше →
Total votes 35: ↑34 and ↓1 +33
Comments 1

Процедурно генерируемые карты мира на Unity C#, часть 4 (трафик)

Reading time 9 min
Views 28K
Game development *Algorithms *C# *Unity3D *
Tutorial
Translation
image

Это последняя статья из цикла о процедурно генерируемых с помощью Unity и C# картах мира. Осторожно, под катом 7 МБ картинок.
Читать дальше →
Total votes 31: ↑29 and ↓2 +27
Comments 10

Процедурная генерация уровней для игр-головоломок

Reading time 9 min
Views 31K
Game development *Algorithms *
Translation


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

Здорово было бы найти способ заставить компьютер сэкономить вам время и решить проблемы, о которых я сказал выше… И именно тут на помощь приходит процедурная генерация!
Читать дальше →
Total votes 44: ↑41 and ↓3 +38
Comments 14

Реверс-инжиниринг процедурной генерации в No Man's Sky

Reading time 20 min
Views 42K
Game development *Reverse engineering *
Translation


No Man’s Sky — это игра про исследование космоса, в которой используется технология процедурной генерации игрового окружения и ресурсов (текстур, моделей, рельефа и т.д.). Я был в восторге, когда объявили о её разработке в 2013 году, не только из-за самой игры, но в основном из-за возможности изучить игровые файлы и узнать, как она работает. После выпуска игра получила самые противоречивые отзывы, но мне всё равно интересно, что же происходит у неё внутри.

Если вы установите игру, то увидите, что по объёму она очень невелика, и это действительно так. Основная причина этого в том, что игра работает с очень ограниченным набором ресурсов и с помощью процедурной генерации создаёт на их основе буквально сотни вариантов. Я сосредоточусь на контенте, связанном с 3D-моделями игры, потому что для меня они всегда наиболее интересны. Статья будет разделена на три основные категории: геометрия, текстуры и анимации.
Total votes 92: ↑91 and ↓1 +90
Comments 39

NaNoGenMo: как компьютеры пишут новеллы

Reading time 9 min
Views 10K
Programming *Algorithms *Natural Language Processing *
Sandbox

Ноябрь считается месяцем литературного творчества. Каждый год в интернете проходит мероприятие NaNoWriMo (National Novel Writing Month). Участники должны до конца месяца написать новеллу длиной не менее 50000 слов. За 17 лет в нем поучаствовали больше 20000 человек.


В 2013 году у программистов появилось аналогичное соревнование — NaNoGenMo (National Novel Generation Month). Задача NaNoGenMo — написать программу, которая сгенерирует новеллу длиной 50000 слов или больше. При этом требования к новелле довольно слабые — подойдет любой текст достаточной длины. Как вы увидите, это может быть сборник рассказов, пьеса, кулинарная книга, словарь или туристический путеводитель. На самом деле, произведение не обязано даже быть текстовым.


image

Графическая новелла «Сгенерированный детектив»

Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Comments 5

Процедурная растительность на OpenGL и GLSL

Reading time 18 min
Views 24K
Game development *Mathematics *
Sandbox
В этом посте я хотел бы рассказать об использовании аппаратной тесселяции и геометрического шейдера для генерации большого количества геометрии на основе минимальных входных данных. Надеюсь, пост будет полезен тем, кто имеет начальное представление о программировании шейдеров, но ещё не познал всю мощь программируемого графического конвейера. Это не руководство по шейдерам для начинающих, поэтому многие моменты их работы заметены под ковёр или снабжены ссылкой на соответствующую документацию.



Повествование будет вестись на примере небольшой демки, которая генерирует сцену как на картинке выше. Мы пройдём увлекательное путешествие от подготовки данных на CPU до записи значений цвета на выход фрагментного шейдера.
Читать дальше →
Total votes 52: ↑51 and ↓1 +50
Comments 17

Вплетение нарратива в процедурные миры

Reading time 17 min
Views 15K
Game development *
Translation
image

Уже в течение трёх лет я веду блог разработки моего нового roguelike-проекта. Истории игры в нём уделено довольно мало обсуждений, что отражает её малую информативную роль и важность в процессе разработки альфа-версии. На самом деле за посредственной и избитой научно-фантастической историей 7DRL, изложенной в версии для гейм-джема, последовал перезапуск проекта в 2013 году, и первое растягивание сроков разработки произошло только из-за воплощения уникальной детализированной истории. Всё, происходившее позже, тем или иным образом служит для поддержки нарратива.

Теперь, когда эта часть мира Cogmind оформилась и близка к завершению, я хотел бы исследовать новую территорию, и порассуждать о том, как и зачем интегрировать элементы истории в жанр, традиционно небогатый на сюжет.
Читать дальше →
Total votes 32: ↑32 and ↓0 +32
Comments 24

Важно то, что внутри: о процедурной генерации органов

Reading time 5 min
Views 10K
Game development *
Translation
image

(Дисклеймер переводчика: на всякий случай не советую читать эту статью во время еды.)

Когда я начинаю участвовать в геймджемах, то вхожу в режим «максимального ускорения», который обычно заканчивается ужасными понедельниками на работе после бессонных ночей. Чем старше становлюсь, тем сложнее для меня набраться энтузиазма для участия. К счастью, PROCJAM очень расслабленный, что идеально мне подходит. Кроме того, читерство там совершенно не запрещено, поэтому я мог, например, вернуть из небытия мой генератор органов, над которым я работал несколько месяцев назад для Bestiarium и создать свой прототип на его основе.
Total votes 33: ↑30 and ↓3 +27
Comments 2

Gen Jam 2016: процедурно генерируемые спрайты

Reading time 4 min
Views 19K
Game development *C# *
Translation
GenJam 2016

19 ноября 2016 года в Сан-Франциско прошёл первый ежегодный Gen Jam (геймджем по процедурной генерации). Идея была в том, чтобы за субботу создать генератор графики, «объект, создающий объекты», если вам угодно.

Я создал программу, рисующую спрайты персонажей в удивительном стиле набора 16-битных спрайтов Кристофера «Oryx» Барретта из Oryx Design Lab. Посмотрите на примеры того, что делает программа:

image
Читать дальше →
Total votes 46: ↑45 and ↓1 +44
Comments 29