7.8 KiB
VCM
Текстовый формат описания 3D моделей, являющийся заменой устаревшего свойства model-primitives.
Синтаксис:
@примитив атрибут (значение1,значение2,...) атрибут2 "значение3" {
@внутренний_примитив ...
}
Аналогичная структура в XML:
<примитив атрибут="значение1,значение2,..." атрибут2="значение3">
<внутренний_примитив .../>
</примитив>
В отличие от XML в корне может находиться несколько элементов.
На данный момент существует три вида примитивов: tri, box и rect, а также, part (описывает часть примитива, такую как, например, сторона куба).
Note
По-умолчанию текстурные координаты определяются размерами примитивов. При размерах более 1.0 результат не определён и может измениться в последующих обновлениях. Используйте
regionилиregion-scaleдля ручной настройки.
Примитивы
Свойства tri
Примитив описывает треугольник.
a- точка A. Пример:a (0,0,0)b- точка B. Пример:b (1,0,0)c- точка С. Пример:c (1,1,0)uv- нормализованные текстурные координаты точек (6 чисел, по 2 на точку). Пример:uv (0,0, 1,0, 1,1)texture- отображаемая текстура. По-умолчанию:$0. Пример:texture "blocks:sand"region- UV регион в границах выбранной текстуры, определяется позициями противоположных углов квадрата нормализованных текстурных координат. Пример:region (0,0,1,1)region-scaleвектор-множитель для UV региона. Пример:region-scale (0.5,1)shadingопределяет возможность затенения на примитиве. Пример:shading off
Текстурные координаты по-умолчанию не зависят от формы из размера, в отличие от других примитивов.
Свойства rect
Примитив описывает параллелограмм через векторы right и up.
from- точка начала примитива. Пример:from (0,0.5,0.125)right- вектор X, также определяющий ширину примитива. Пример:right (1,0,0)up- вектор Y, также определяющий высоту примитива. Пример:up (0,1,0)texture- отображаемая текстура. По-умолчанию:$0. Пример:texture "blocks:sand"region- UV регион в границах выбранной текстуры, определяется позициями противоположных углов. Пример:region (0,0,1,1)region-scaleвектор-множитель для автоматически выбранного UV региона. Пример:region-scale (0.5,1)shadingопределяет возможность затенения на примитиве. Пример:shading offflipотражает UV регион по горизонтали или вертикали. Пример:flip v
Свойства box
Примитив описывает прямоугольный параллелепипед.
from- точка начала примитива. Пример:from (0,0,0)to- противоположная от начала точка. Пример:to (1,1,1)origin- точка, относительно которой будет применено вращение. По-умолчанию: центр примитива. Пример:origin (0.5,0.5,0.5)rotate- вращение вокруг осей (x,y,z) в градусах, или кватернион (x,y,z,w). Пример:rotate (45,0,0)илиrotate (0.3826834, 0, 0, 0.9238795)texture- отображаемая текстура для всех сторон по-умолчанию.shadingопределяет возможность затенения на примитиве. Пример:shading offdeleteудаляет стороны по именам (top, bottom, east, west, north, south)
Свойства part (вложен в box)
Примитив описывает свойства сторон прямоугольного параллелепипеда с указанными тегами (top/bottom/north/south/east/west).
tags- определяет то, на какаие из сторон будут применены свойства. Пример:tags (top,bottom)texture- отображаемая текстура. По-умолчанию:$индекс_стороны.region- UV регион в границах выбранной текстуры, определяется позициями противоположных углов. Пример:region (0,0,1,1)region-scaleвектор-множитель для автоматически выбранного UV региона. Пример:region-scale (0.5,1)
Скелет
VCM позволяет описывать скелет модели. Для этого используется элемент @bone (кость).
Существует два вида костей:
- безымянные - используются только для трансформаций на влюженные примитивы, не попадает в итоговый скелет.
- именованные - будет включено в итоговый скелет. Имя указывается через атрибут
name.
Главная кость (root) создаётся автоматически для всей модели.
При наличии явно указанных костей модель будет разделена на несколько частей именованных в формате имя_модели.имя_кости.
Так как модель относится к ассетам и не имеет префикса, загруженный скелет получает имя модели, так же, без префикса.
Загруженный скелет можно использовать у сущности через свойство skeleton-name.
В списке пак/preload.json при указании параметра "squash": true vcm будет загружен как единая модель, без скелета.
Свойства bone
name- имя кости, при отсутствии которого кость будет "растворена" и не попадёт в итоговый скелет, при этом, трансформации будут применены.move- смещение вложенных элементов.scale- масштабирование вложенных элементов. Применяется перед смещением.rotate- вращение вложенных элементов вокруг осей (x,y,z) в градусах, или кватернион (x,y,z,w). Пример:rotate (45,0,0)илиrotate (0.3826834, 0, 0, 0.9238795)