Комментарии 14
Спасибо, было интересно.
Замечания - меши и треугольники кмк это вне рамок статьи.
Было бы интересно узнать как встраивать в такие лабиринты пустоты большей площади и соответственно зоны заполненные стенами. Сразу мне лично придумался вариант - на карте "рисуем" зоны пустот и стен, а при генерации просто не заходим в эти зоны.
Да, пустую зону можно сделать так - после генерации карты, случайным образом выбрать на ней область произвольного размера и соединить все клетки между собой, входящие в эту область. Аналогично для заполненных зон, только тогда, напротив, убирать соединения.
Касаемо замечания - я хотел охватить тему генерации лабиринтов как можно более полно, с кратким описанием генерации мешей и ссылкой на статью, где эта тема раскрывается далее. Возможно, кому-нибудь это будет полезным, кто ранее не изучал процедурную генерацию.
Тогда можно просто рандомом накидать зон, рандомом поставить ключевые точки (боссы там, сундуки, etc) и А* через ключевые точки искать путь. Но это уже не столько генерация, сколько реализация геймдизайна, который вне рамок статьи, хотя просто упомянуть можно.
Здесь также не описаны методы подсчёта uv-координат сетки, на такие лабиринты не получится наложить текстуру.
Хм, а разве в Unity нет какого-нибудь группового UVW-наложения (как в том же 3ds Max, например, через модификатор)?
Действительно интересно. Всё хочу "пощупать" Unity, но пока всё никак руки не доходят.
Я был не совсем точен. В цитате выше я имел ввиду, что, используя стандартный шейдер, не получится отобразить текстур, поскольку процедурная сетка не имеет UV-координат. Но в таком случае можно рендерить текстуру через трипланарный шейдер.
используя стандартный шейдер, не получится отобразить текстур, поскольку процедурная сетка не имеет UV-координат. Но в таком случае можно рендерить текстуру через трипланарный шейдер.
Да, спасибо, теперь понятнее.
А то я уж было испугался, что в принципе никак невозможно текстурить процедурные объекты. )
Увидел этот пост в ленте и я буквально БЛИН Я ЖЕ ДЕЛАЛ ЭТО В МАЙНКРАФТЕ 10 лет назад. У тебя какой-то слишком сложный код, не дочитал до конца ибо спринт к дедлайну закончил только вот, но поделюсь своей методикой.
Нашел где-то на англоязычных ресурсах статью и повторил следующее - берём залитый целиком массив и запускаем "крота" - он ходит в случайные не залитые стороны на два. Если все 4 стороны залиты, то телепортируемся в другое четное место. Если все позиции четные залиты, значит лабиринт готов. Как-то так. Смог это в плагине воплотить через вырезание блоков, а за основу брал бетонные блоки 101*101, всегда работало, был вход и выход.
Понастольгировал.
Это точно статья про генерацию лабиринта, а не про генерацию мешей рантайм без поддержки текстурирования и освещения?
ИМХО, было бы лучше 90% статьи про геометрию заменить на простенькую расстановку префабов стен/пола
А в идеале ещё и сделать в генерации дополнительные поля, описывающие тип клетки, чтобы было понятнее, что тут можно добавлять вариативность визуала/будущих механик и как расширять генератор объектов.
Я не описал расчёт uv-координат, поскольку не реализовывал его в игре, хотя, безусловно, это возможно сделать.
ИМХО, было бы лучше 90% статьи про геометрию заменить на простенькую расстановку префабов стен/пола
В игре я использую именно такой вариант потому, что в ней существуют другие формы лабиринтов - треугольные, шестиугольные и круглые. Если первые два ещё можно сформировать из примитивов, то с последним у меня сомнения. Но если брать общий случай, вне контекста игры, то вариант с префабами может быть альтернативой, по крайней мере для прямоугольных лабиринтов.
Как я реализовал процедурную генерацию лабиринтов в своей игре