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



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

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

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

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

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

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



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

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

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

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

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

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

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

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



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


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


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


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



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

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

    Средняя зарплата в IT

    113 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 5 771 анкеты, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 8

      +10
      А где картинка, что умеет новый редактор?
        +1
        Имеется ввиду готовый крутой ландшафт?
        К сожалению показать что делают наши два клиента я не имею права, а сам рисовать не умею, чтобы сделать классный пример.
        0
        Хотелось бы спросить про игру Шторм: почему транспортники медленные? Не хотелось бы спорить, но если почитать того же Гаррисона, то транспортники штука вовсе не медленная, да и IRL они всего в два раза медленней истрибителей.
          0
          Да не особо они медленные. Скорость 80 против 125 у истребителя.
          0
          Если в 3DSMax ландшафт делать боль, то возможно какой-нибудь 3д-редактор с хорошими процедурными средствами (Houdini или уже умерший к сожалению XSI) вполне могли бы справиться с задачей. Там можно за весьма короткий срок (прототип можно и за час сделать) собрать какой-то ассет, который на вход будет принимать любую кривую (например безье), которую можно просто нарисовать руками или заимпортить откуда-то вроде Illustrator'а и строить по ней дорогу с любой детализацией, которая только захочется. При этом можно сделать логику, вроде «если дорога слишком высоко над землей, то построить подпорки, а если дорога уходит в землю, то выкопать туннель».

          У того же Houdini есть пока экспериментальная, но уже поддержка Unity3D, которая позволяет прямо внутри Unity на этапе редактирования проекта как-то менять процедурный ассет.

          vimeo.com/86457532 — вот что-то похожее с их канала Vimeo.
            0
            Я чего-то не понял, или на «видео с игрой, занявшей первое место», показан Homeworld?
              0
              Неа. Это полностью самостоятельная игра написанная с нуля на движке Xors3D за пол года фанатом игры Homeworld.
                0
                Тогда мне кажется, вы изначально были поставлены в неравные условия :) Ведь у него был уже и сюжет, и ресурсы, осталось написать всего лишь игровой движок. Ясен пень, что он занял первое место :) Хотя работа впечатляет, да.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое