VSG 3D File Format
Very Simple Geometry (VSG) — это облегчённый, удобочитаемый формат файлов, предназначенный для компактного и эффективного хранения данных 3D-сеток. Формат был создан пользователем Stan0033 и реализован на языке программирования C#.
VSG разработан для максимально простого парсинга и записи, что делает его подходящим для образовательных целей, прототипирования и небольших движков 3D-рендеринга.
Обзор[править | править код]
Формат VSG представляет 3D-сетки с помощью однострочной текстовой структуры. Каждая сетка заключается в угловые скобки `<...>` и состоит из трёх частей, разделённых символами вертикальной черты (`|`):
- **Данные вершин**: Плоский список чисел с плавающей запятой, описывающих атрибуты вершин (позиция, нормаль, UV-координаты).
- **Индексы треугольников**: Список целых чисел, представляющих индексы вершин треугольников.
- **Цвет**: RGB-цвет всей сетки, заданный тремя числами с плавающей запятой.
Формат делает упор на простоту и компактность, а не на гибкость. В отличие от Wavefront .obj, который также является простым и широко распространённым текстовым форматом для 3D-геометрии, VSG поддерживает только базовые геометрические данные и один цвет на сетку. Это упрощает реализацию и ускоряет парсинг, но снижает универсальность.
Спецификация формата[править | править код]
Каждая сетка определяется структурой:
``` <данные_вершин|индексы_треугольников|цвет> ```
- **Данные вершин**: Группы из 8 чисел с плавающей запятой на вершину:
- `X Y Z NX NY NZ U V` где: - `X Y Z` — координаты позиции вершины, - `NX NY NZ` — векторы нормалей, - `U V` — текстурные координаты.
- **Индексы треугольников**: Группы из 3 целых чисел на треугольник, ссылающихся на индексы из списка вершин.
- **Цвет**: Три числа с плавающей запятой, представляющие RGB-цвет сетки.
Пример[править | править код]
``` <0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 0 1 1|0 1 2|255 255 255> ```
Этот пример описывает:
- 3 вершины с полными данными позиции, нормалей и UV-координат,
- 1 треугольник с индексами 0, 1 и 2,
- белый цвет (255, 255, 255).
Особенности[править | править код]
- Минималистичный и удобочитаемый,
- Однострочное определение сетки,
- Быстрый парсинг и загрузка,
- Отсутствие зависимостей и метаданных,
- Простота реализации на любом языке программирования.
Импорт/экспорт в OBJ[править | править код]
Эталонная реализация включает поддержку импорта и экспорта в формат Wavefront .obj. Это обеспечивает совместимость с распространёнными инструментами 3D-моделирования и позволяет конвертировать между VSG и другими 3D-форматами через OBJ.
Поддерживаемые функции OBJ:
- Позиции вершин (`v`),
- Нормали (`vn`),
- Текстурные координаты (`vt`),
- Определения треугольных граней (`f`),
- Несколько объектов (`o`).
Цветовые данные не поддерживаются в OBJ, поэтому цвета VSG не сохраняются при экспорте.
Пример использования[править | править код]
Пример на C#, демонстрирующий загрузку и сохранение модели с использованием реализации VSG в EZGLib:
```csharp // создание модели var model = new VerySimpleGeometry.VSG_Model();
// загрузка из файла string path = VerySimpleGeometry.SelectVsgOrObjFile(); if (path.Length > 0) {
if (Path.GetExtension(path).ToLower() == ".vsg")
{
model.Load(path);
}
else if (Path.GetExtension(path).ToLower() == ".obj")
{
model.LoadOBJ(path);
}
}
// сохранение модели string savePath = SaveVsgOrObjFile(); if (savePath.Length > 0) {
if (Path.GetExtension(savePath).ToLower() == ".vsg")
{
model.Save(savePath);
}
else if (Path.GetExtension(savePath).ToLower() == ".obj")
{
model.WriteOBJ(savePath);
}
} ```
Ограничения[править | править код]
Формат VSG создан для простоты и намеренно исключает многие функции более сложных форматов:
- Нет поддержки материалов, шейдеров или текстур,
- Нет анимации или скиннинга,
- Нет иерархии сцен или графов,
- Нет расширяемости или поддержки метаданных.
Применение[править | править код]
VSG предназначен для:
- Образовательных целей,
- Процедурной генерации геометрии,
- Облегчённых движков рендеринга,
- Тестирования и отладки геометрии.
Реализации[править | править код]
Эталонная реализация написана на языке C# и доступна в составе библиотеки EZGLib.
- **Репозиторий GitHub**:
- **Скачивание .dll**:
См. также[править | править код]
- Wavefront .obj,
- STL (формат файла),
- glTF,
- PLY (формат файла).