Редактор ландшафта ZSlice

в 13:04, , рубрики: Без рубрики

Редактор ландшафта ZSlice
Давно хочется рассказать о проекте ZSlice.
Редактор разрабатывается уже около 5 лет, пережил два прототипа и полное переписывание…
И всё ещё находится в стадии активной разработки.
Вероятно, я бы не созрел написать эту статью ещё несколько лет, пока редактор не будет на 100% вылизан и функционален. Но как верно заметили мои коллеги — этого не будет никогда. Поэтому идеалист внутри был слегка придушен, результатом чего стало написание этой статьи.

За последние несколько лет разработка игр серьёзно преобразилась. Ценность непосредственно кода игры значительно упала, а ценность контента, наоборот, выросла. В современном мире «написать» игру не представляется проблемой. Проблема — создать достаточное количество качественного контента.

В 2007 году волей случая я попал в компанию фанатов раллийного симулятора Richard Burns Rally.
Примерно за год работы мы сделали простенький раллийный движок. Из контента же у нас была одна машина и трэк в Новороссийске:
Редактор ландшафта ZSlice
Вот этот трэк делался примерно 3 месяца.
Слишком медленная разработка в итоге сказалась на энтузиазме, пошли тёрки внутри команды… В общем, проект так и не увидел свет, хотя его идейный вдохновитель, насколько мне известно, и сейчас ищет возможности завершить его.
Примерно в то же время пришло понимание, что заставлять моделлеров создавать трассы в 3ds Max или Blender — это негуманно. Инструмент не заточен под такие задачи и даже простой туториал по созданию дороги представляет из себя набор достаточно сложных и трудозатратных действий.
Начались неторопливые поиски редактора. Оказалось, что в свободном доступе полно редакторов, умеющих создавать ландшафт, но прокладывание дорог в них либо вообще отсутствует, либо находится на крайне ущербном уровне.
Приведу пример: ландшафт выравнивается под дорогой и на некотором расстоянии от неё. И дорога накладывается поверх в виде декали. Этим грешит даже совсем недавний Just Cause 2 (вы можете заметить, что ландшафт рядом с дорогой всегда строго соответствует геометрии дороги).
Меня не устроила такая ситуация и я начал создавать инструмент для редактирования ландшафтов. Не для того, чтобы составить конкуренцию уже существующим редакторам карты высот (конкурировать с ними практически нереально, взять хотя бы World Machine), а для того, чтобы решать единственную задачу — быстрое, удобное и качественное прокладывание дорог.

Первая версия редактора была прототипом, созданным с целью проверить свои идеи.
Но даже прототип уже позволял создавать вполне приличные ландшафты, хотя и с ограничениями.
Вот так выглядел первый прототип редактора непосредственно перед своей «смертью»:
Редактор ландшафта ZSlice
На скриншоте представлен ландшафт, созданный для игры «Шторм: Линия обороны», участвовавшей в конкурсе стратегий на gamedev.ru

Информация об игре Шторм: Линия обороны, если кому-то интересно

Видео с игрой, занявшей первое место. Просто не могу не упомянуть этот проект.


При просмотре видео ни на секунду не возникает ощущения, что игра сделана меньше чем за полгода одним человеком. Такому проекту и проиграть было не стыдно. :)
Впрочем, на этом конкурсе мы заняли в районе 10 места, и было много проектов, которым проиграть было стыдно. :(

Прототип позволил нам расширить понимание процессов управления ландшафтом. Например, всплыла очевидная проблема, которая не была заметна до реализации: стык двух блоков ландшафта очень сильно подвержен влиянию фильтрации. Надо не просто продублировать пиксели на соседний блок — бордюр должен быть в два пикселя толщиной, иначе в результате работы линейной фильтрации возникнет вот такая вот неприятность:
Редактор ландшафта ZSlice
В стратегии не очень заметно, но если мы делаем ландшафт для шутера, то это — уже весьма критичный артефакт.

Также при разработке второй версии мы учли, что максимум действий должны быть доступны снаружи, через API. Невозможно точно предсказать, какой функционал захочет иметь пользователь. Но это и не нужно. Достаточно дать доступ к API и пользователь сам создаст нужные инструменты.
Поэтому все кисти в редакторе из хардкода переехали во внешний плагин.
К сожалению, это тоже не совсем тривиальное дело.
И проблема здесь кроется в том самом бордюре, созданном для нормальной работы фильтрации на стыке блоков.
По факту получается так, что редактирование одной точки на стыке превращается в редактирование до 4 точек (в случае, если это угол-стык четырех блоков). При этом, снаружи это должно выглядеть как редактирование одной точки, чтобы не усложнять излишне процесс обработки.
В итоге API для инструментов стал чуть сложнее, чем хотелось бы и медленнее, чем мог бы быть.

Первый прототип работал с ландшафтом через стриминг. Поскольку одной из задач было создание редактора, способного обрабатывать гигантские площади, пришлось искать решение, которое позволит изменять такие ландшафты. И стриминг показался адекватным вариантом. Стриминг был полностью реализован, но практика использования показала, что это создаёт некоторые трудности. Не то чтобы это сильно раздражало… Но в условиях современной реальности, когда объёмы памяти постоянно увеличиваются и даже браузеру не зазорно жрать несколько гигабайт, усложнять инструмент и уменьшать удобство в целях экономии памяти просто не оправданно. Поэтому новая версия редактора переехала на 64-битный компилятор и потеряла возможность стриминга. Даже очень большие ландшафты умещаются в 5 гигабайт памяти. И это покрывает большинство потребностей. Ну, а 1% тех, кому нужны ландшафты 100х100 км, вынужден будет докупать несколько плашек оперативки в свою рабочую станцию. Впрочем, в настоящее время даже 32 гигабайта стоят вполне терпимых денег.

Редактор продолжает развиваться. Сейчас, с учётом нового опыта, речь идёт уже о переходе на третью версию редактора, опять-таки с полным переписыванием. Целью переписывания является универсализация работы с материалами и ускорение API.
Текущая версия остается LTS для тех клиентов, что сейчас ею пользуются.

Текущую версию редактора вы можете скачать по ссылке: www.dropbox.com/s/j08r1a2z095h9ai/ZSlice_build_2014_04_02.rar
Обращаю внимание, что это даже не бета, а версия, предназначенная для внутреннего использования. Соответственно, стабильность далека от идеала, а часть дополнительного функционала (например, расстановка растительности) только обозначена, но не реализована полноценно.
Редактор свободен для некоммерческого использования.

API и исходные коды кистей и экспортёров отправляются по запросу.

P.S. Конечно, изначальная идея сделать Ралли никуда не делась.
Собственно, редактор, во многом создается и развивается благодаря использованию его нашими клиентами и, конечно же, в проекте SRF Rally:
image

Автор: AllexIn

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js