Перейти к содержанию

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 (формат файла).

Внешние ссылки[править | править код]

Ссылки[править | править код]