Последние публикации
  • Рендеринг баз

    #новый движок #matrixgame #графика

    Текущее состояние движка.

    Данная визуализация работает полностью на оригинальных ресурсах (папка Matrix).

    Что реализовано:

    • подгрузка всех необходимых ресурсов;
    • парсинг и обработка конфигов .cvo;
    • анимация текстур;
    • окраска по маскам во фракционные цвета.
  • Тест механизма привязок

    #новый движок #matrixgame #графика

    Пока что движок не умеет собирать роботов честно, так что этот экземпляр собран через CVO при помощи линков из предыдущего поста (и с применением некоторых читов).

  • Механизм привязок в композитных моделях

    Отдельные элементы могут привязываться к конкретным точкам.

    #новый движок #matrixgame #графика

    Как вам стало известно из предыдущих постов, MatrixGame имеет механизм сборки композитных моделей по текстовому (в формате BlockPar) конфигу с расширением .cvo.

    Самый сложный конфиг в игре принадлежит главной базе и выглядит примерно так (в этом варианте исправлены кое-какие проблемки, оригинальный немного более неуклюжий):

    Main {
        Model=b0.vo
        TextureGloss=b0_gloss
        TextureMask=b0_mask
        TextureBack=b0_back
        TextureBackScroll=0,0.00006
    }
    Main2 {
        Texture=b0_1
        Model=b0_0.vo
    }
    {
        Texture=b0_1
        Model=b0_radar.vo
    }
    {
        Texture=b0_1
        Model=b0_anim.vo
    }
    Platform {
        Id=1
        Texture=b0_1
        Model=b0_platform.vo
    }
    Left {
        Id=2
        Texture=b0_1
        Model=b0_left.vo
    }
    Right {
        Id=3
        Texture=b0_1
        Model=b0_right.vo
    }
    

    Каждый блок описывает часть этой композитной модели. Он может быть именованным или безымянным. Блоку можно назначить идентификационный номер через параметр Id.

    Элементу можно в параметрах прописать модель, текстуру (по умолчанию берётся одноимённая модели), свойства текстур, включая анимацию (свойство TextureBackScroll управляет скоростью изменения текстурных координат для назначенной в TextureBack текстуры подложки, указывается в единицах UV/мс).

    Но кроме перечисленных вариантов параметров также есть параметр Link, который не используется ни в одной оригинальной модели. Он позволяет привязывать кусок композитной модели к другому через матрицы, точки привязки.

    Матрицы – это стандартный механизм формата .vo для размещения корпуса на шасси, головы на корпусе, прикрепления оружия или отрисовки фонариков. Но в этих кейсах от матрицы используется только позиционная компонента, повороты задаются программно. Тогда как механизм Link, по идее, должен поддерживать позиционирование с поворотом.

    Синтаксис параметра:

    Link=Parent,LinkPoint
    

    Здесь Parent может быть названием блока или его числовым id, LinkPoint – название или id матрицы. Элемент, которому прописали Link, своим ориджином (локальным нулём координат) привязывается к указанной точке на родителе.

    Сами матрицы назначаются модели при моделировании и экспорте. А исходники экпортера моделей для 3ds Max 2024 можно найти здесь. Возможно, о нём будет отдельная статья или серия статей.

  • Визуализация точек крепления

    #новый движок #matrixgame #графика

    Визуализация точек крепления. На них вешаются другие модули, оружие, фонарики или, как в случае с матрицами на «ступнях» пневматики – отображение спецэффектов.

  • Что не так с анимациями в MatrixGame?

    Как работают анимации в движке планетарных битв.

    #новый движок #matrixgame #анимации

    В отличии от современных игр, в которых за движения моделей отвечают скелет и привязки, движок планетарных битв использует покадровые вершинные (вертексные) анимации, примерно как в Quake 2.

    Для тех лет это стандарт, база и основа. Скелетные анимации были дорогими по вычислительным ресурсам по сравнению с практически бесплатными вершинными. Платить, однако, приходится местом на диске – в отличие от той же Quake 2, где в файлах MD2 хранилась дельта (разница) положения вершин (и, насколько помню, вообще использовалось много разных оптимизаций, включая индексированные значения, почти как в GIF), в моделях формата VO покадрово запекаются вертексы целиком.

    Компенсируется такая растрата сжатием zlib и малым количеством анимированных моделек.

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

    Контроллера анимаций в привичном виде в движке нет. Из доступных модификаторов есть только управление скоростью воспроизведения, что используется в модельках шасси. Тем не менее, в движке есть машина состояний для управления переключениями анимаций шасси – эти состояния как раз и перечислены в посте про демонстрацию их переключения.

    Как было упомянуто ранее, для анимированной модели каждый кадр сохраняется как полноценная копия всех её вершин, только в изменённом положении. Как же поступать с моделями, в которых нужно анимировать только отдельный кусочек, как, например, радар у главной базы? Ради этих нескольких вертексов пересохранять и перерисовывать всю геометрию целиком? Нет, как раз для решения этой проблемы и ввели композитные модели с разделением на части, тестирование работы которых демонстрировалось в предыдущем посте. Анимированный кусочек выделяется в отдельный файл VO и цельная модель собирается из таких кусочков по конфигу CVO.

    Также в моделях запекаются положения точек соединения (матриц), которые синхронизируются с геометрией. Таким образом место сочленения шасси и корпуса, например, никуда не «съезжает» при воспроизведении анимации.

    Про интересный факт относительно этих самых матриц и конфигов CVO будет отдельный пост.


    Так что же, собственно, не так с анимациями в MatrixGame? Всё так, для уровня начала XXI века. Но на текущий момент они довольно сильно технологически устарели. Будет ли что-то с этим сделано в нашем проекте? Посмотрим. Планы есть, но не хочу ничего загадывать наперёд. Следите за развитием.