Процедуральный Рим не за день строился (Часть 1)

Когда-то, в стародавние времена месяца два назад, я думал начать вести блог о моих потугах на поприще геймдева. Я учусь на гейм арт специальности в универе и прошлый семестр был реально тяжёлый. Во время каникул с мотивацией и настроением было плохо, вот я чёт и решил, что может какой-то вывод в форме блога поможет. Реально помогло начало нового семестра с новыми проектами. Настолько помогло, что после вступительного поста я про блог не вспоминал. Хотя работы было проделано немало. Итак, шо мы тут делаем.

Процедуральный Рим не за день строился (Часть 1)

А вы что думали, мне на гейм арт специальности дадут делать групповой проект в виде обычной игры? Смешные вы. Да, сперва у нас групповой проект. Нам дали список на выбор, их там много разных было, но 95% это всякие контрактные проекты с какими-то левыми и нередко серьёзными учреждениями: VR сноркелинг, простенькая стратегия для исторического музея под названием "1302", "Fire Escape" про эвакуацию из горящего здания, такие вещи. Пара игр есть, но там либо рогалики, либо артхаус по-моему. Самый смешной для меня проект это "Life in Prison Cell", в котором надо сделать симуляцию тяжёлой жизни европейского заключенного. Я глянул фотку их камеры, я ща в общаге также живу. ))

Процедуральный Рим не за день строился (Часть 1)

Мы должны были из списка пикнуть три и выставить приоритет личный. И они пытались нас расскидать оптимально. Потом статистику показали, всем очень хотелось делать тюрячку, без шуток. 50% хотело моделить бичпакеты и заточки. )

Среди проектов был "Otiv tram sim", который шёл в комплекте со стеной технического текста, там процент заявок был самый низкий. Меня туда учитель сослал, как будто в Сибирь гонит. Такой типа позвал меня и девчонку ещё без групп и такой: "Ну смотрите, мне нужен художник на трамваи. Я хочу быть честным". Глупец не знал, что трамваи были моим третьим пиком. После тюрячки и пожара правда, что тоже о чём-то да говорит, наверное.

Карочь, суть проекта. У компании есть ИИ для управления трамваями. Ща они его юзают для безопасной стыковки, когда он на стоянку приезжает, ибо там система старая требовала двух людей и одного из них постоянно эти трамваи давили. Да, я тут спасаю жизни. Да, смерти кондукторов при парковке трамваев достаточно обыдены, чтобы потребовать технического решения. Что тут скажешь, мы живём в удивительном мире. Но вообще в итоге компания хочет уйти в сторону полностью автоматизированных трамваев на этой же системе.

Для обучения этого ИИ они захотели себе симулятор Тесла стайл. На Анриле. Типа город из демки Матрицы + Airsim функционал, чтобы выдавал данные для обучения сразу с сегментацией.

Процедуральный Рим не за день строился (Часть 1)

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

Пока программисты ебались с Airsimом и его переносом между версиями, мы думали, какой подход будем юзать для генерации. Матрица была самым очевидным примером, если говорить про Анрил. Проблема в том, что Матрица использует американскую планировку улиц, поверх которой можно играть в крестики-нолики. Куча перпендикулярных линий, простая структура.

Процедуральный Рим не за день строился (Часть 1)

В этом время Гент такой.

Процедуральный Рим не за день строился (Часть 1)

... Ну ёбаны в рот. И эт не ток Гент, в Бельгии все города такие. А мы делаем город для бельгийцев. Вопрос с софтом не стоял, мы кроме как в Гудини в душе не ебём, как такое делать. Наверное какой-нибудь сумасшедший может чёт сделать чисто на блюпринтах, но на то он и сумасшедший. Но вот насчёт планировки просто слизать Матрицу мы б не смогли, их методу пришлось бы кардинально переделывать. А, к слову об их методе, если кто не знал, в комплекте с Matrix City Sample на Unreal Marketplace идёт zip с Гудини файлами, использованными для генерации. Так что вы можете сгенерировать свой город. Ну, если заставите эту херовину работать. Об этом ещё скажу.

Процедуральный Рим не за день строился (Часть 1)

Акио (топ гудинист из художников, нас трое, включая меня) предложил юзать Open Street Maps как основу. В гудини есть экспериментальный нод, который импортирует .osm файлы и трансформит их в геометрию разного рода с кучей зашитых доп данных типа адресов, типов зданий и тд. Данных дофига, но 95% из них абсолютно бесполезные. В том числе из-за того что OSM пополняется самими пользователями, насколько я понял, из-за чего данные в большом количестве столбцов неполные.

Процедуральный Рим не за день строился (Часть 1)
Вы можете заметить по длине палочки для скролинга снизу, какое количество столбцов вам ещё не видно
Вы можете заметить по длине палочки для скролинга снизу, какое количество столбцов вам ещё не видно
Сколько мы оставили
Сколько мы оставили

Этот импорт шёл в комплекте с огромным количеством головной боли в виде случайно нарезанных кривых, наслаивающихся и дублирующихся, которые здесь показывают дороги. Слава богу, что не я занимался дорогами. Хотя пару нодов на VEX я помог сделать. Вроде почистили, теперь удобоваримо. Я пока до этих дорог так и не добрался, занимался другими вещами.

Ещё между делом я на этапе прототипов для решения ряда проблем на импорте пробовал конвертировать .osm в .ai (adobe illustrator формат), что в плане чистоты результата, к слову, было вполне прилично. Так что в теории вы можете нарисовать / загенерить карту с помощью SD в минималистичном стиле и в формате вектора оно очень точно переносит контуры в Houdini. А потом инструментами можно конвентировать это дело в 3д карту. У нас из-за OSM это дело приносило свои проблемы, так что не стали использовать, но просто к сведению.

После импорта и чистки данных, мы разбиваем результат на несколько частей и пропускаем через различные Houdini Digital Assets. К примеру, вот как выглядит результат HDA для создания тротуаров. Работает оно по принципу: генерим дороги из кривых, делаем из них маску на heightfield, блюрим её чутка, конвертим heightfield в полигоны, удаляем маску, чистим края островков.

Процедуральный Рим не за день строился (Часть 1)
Процедуральный Рим не за день строился (Часть 1)
Процедуральный Рим не за день строился (Часть 1)
Процедуральный Рим не за день строился (Часть 1)
Процедуральный Рим не за день строился (Часть 1)
Процедуральный Рим не за день строился (Часть 1)

Я, к слову, не помню, нужен ли ещё здесь этот for each, по-моему он и без него прогонит нормально теперь. Ща поставил без него считать. Действительно не нужен, слушайте.

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

Процедуральный Рим не за день строился (Часть 1)

И дальше у каждого биома есть свой HDA. Я кучу времени потратил на генерацию зданий, наконец оно работает (пока не очень красиво из-за плейсхолдер ассетов, но работает). Пока есть только два стиля, но оно теперь всё держится на таблицах, то есть можно довольно быстро добавить хоть 10, хоть 20, прост это пока во временном проекте, нет смысла это сетапить всё. Куски не процедуральные в гудини, а просто модулярный набор можно внутри анрила подцепить, настроить и можешь хоть мегаскансов напихать туда. Из хорошего оно генерит облако точек очень быстро. 20-30 секунд на вот этот здоровый кусок, может даже быстрее. И всё уже инстансами, уникальной геометрии нет. Но работы ещё очень много, крыши, которые будут ужасным головняком, тримы, набрать все 14 стилей по плану, текстуры процедуральные и тд. Просто задача теперь заставить всё это работать вместе в одном уровне, поэтому оно оставлено в состоянии "работает". Я в следующий раз напишу о зданиях, а то чёт подустал уже строчить. Там в основе экспериментальный buildings_from_pattern, ток сетап не по туторам с титаном, ибо теперь этот сетап больше не работает, и я внёс чутка изменений в код самого нода.

Процедуральный Рим не за день строился (Часть 1)
Процедуральный Рим не за день строился (Часть 1)
2727
6 комментариев

Комментарий недоступен

2

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

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

2

Спасибо на добром слове. Команда хорошая + жпт платный сильно жизнь упрощают. Про пообщаться буду иметь ввиду, но здесь универ ноулайферов, реально устаешь говорить ток о геймдеве. Даже прост про игры поговорить это уже достижение, тут далеко не все имеют кругозор в этом плане. Но идея про выживач на машине мне понравилась, которую ты в августе постил. Тем более, я так понял, ты хотел не прост херачилово постоянное, а со спокойными сегментами тоже. Чёт из этого вышло или не срослось?

Пока программисты ебались с Airsimомфу, это совсем лишнее

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

1