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

cc9e89645a8c4e248f850317c8a15c38.pngДавно хочется рассказать о проекте ZSlice.

Редактор разрабатывается уже около 5 лет, пережил два прототипа и полное переписывание…И всё ещё находится в стадии активной разработки.

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

В 2007 году волей случая я попал в компанию фанатов раллийного симулятора Richard Burns Rally.

Примерно за год работы мы сделали простенький раллийный движок. Из контента же у нас была одна машина и трэк в Новороссийске:

e3085481c4b241d9bb00913cee3f2dd2.jpg

Вот этот трэк делался примерно 3 месяца.

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

Примерно в то же время пришло понимание, что заставлять моделлеров создавать трассы в 3ds Max или Blender — это негуманно. Инструмент не заточен под такие задачи и даже простой туториал по созданию дороги представляет из себя набор достаточно сложных и трудозатратных действий.

Начались неторопливые поиски редактора. Оказалось, что в свободном доступе полно редакторов, умеющих создавать ландшафт, но прокладывание дорог в них либо вообще отсутствует, либо находится на крайне ущербном уровне.

Приведу пример: ландшафт выравнивается под дорогой и на некотором расстоянии от неё. И дорога накладывается поверх в виде декали. Этим грешит даже совсем недавний Just Cause 2 (вы можете заметить, что ландшафт рядом с дорогой всегда строго соответствует геометрии дороги).Меня не устроила такая ситуация и я начал создавать инструмент для редактирования ландшафтов. Не для того, чтобы составить конкуренцию уже существующим редакторам карты высот (конкурировать с ними практически нереально, взять хотя бы World Machine), а для того, чтобы решать единственную задачу — быстрое, удобное и качественное прокладывание дорог.

Первая версия редактора была прототипом, созданным с целью проверить свои идеи.

Но даже прототип уже позволял создавать вполне приличные ландшафты, хотя и с ограничениями.

Вот так выглядел первый прототип редактора непосредственно перед своей «смертью»:

f05b54fa00c545719b517d621814feba.png

На скриншоте представлен ландшафт, созданный для игры «Шторм: Линия обороны», участвовавшей в конкурсе стратегий на gamedev.ru

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

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

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

52c679e2b1264393a6b0391be1c9187a.png

В стратегии не очень заметно, но если мы делаем ландшафт для шутера, то это — уже весьма критичный артефакт.

Также при разработке второй версии мы учли, что максимум действий должны быть доступны снаружи, через 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

© Habrahabr.ru