Мы рады объявить о доступности Aspose.3D FOSS for .NET – бесплатная, открытая библиотека для работы с 3D форматами файлов в приложениях .NET. Создана как чистое решение на C# без нативных зависимостей, библиотека нацелена на .NET 10.0 и выше, что делает её доступной для широкого спектра проектов и сред.

В этом посте мы рассмотрим, что предлагает библиотека, как начать работу и какие дальнейшие шаги.

Что такое Aspose.3D FOSS for .NET?

Aspose.3D FOSS for .NET — это легковесная библиотека обработки 3D файлов, опубликованная под лицензией MIT. Она предоставляет API графа сцены, позволяющее загружать, исследовать, трансформировать и сохранять 3D модели в нескольких широко используемых форматах. Библиотека полностью написана на C# и не требует внешних нативных бинарных файлов или платформо-специфических конфигураций.

Исходный код доступен на GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

Ключевые особенности

  • Чистый C# – без P/Invoke, без нативных библиотек, без ограничений платформы.
  • .NET 10.0+ совместим.
  • Лицензировано по MIT – используйте в личных, коммерческих или проприетарных проектах без ограничений.
  • Архитектура графа сцены – знакомое дерево узлов, мешей, камер и материалов.
  • Поддержка нескольких форматов – читать и записывать файлы OBJ, STL, glTF 2.0, GLB, FBX, Collada и 3MF.

Быстрый старт

Установка через NuGet

Добавьте пакет NuGet в ваш проект:

dotnet add package Aspose.3D --version 26.1.0

Ваша первая конверсия

Самый простой сценарий использования — загрузить 3D‑файл в одном формате и сохранить его в другом. Ниже показана двухстрочная конверсия из OBJ в STL:

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");

Эта Scene класс является центральной точкой входа. Вызовите scene.Open() с путем к файлу, чтобы загрузить модель, затем вызовите Save() с целевым путем. Библиотека определяет формат по расширению файла.

Создание сцены с нуля

Вы также можете создавать сцены программно:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
var box = new Box(2, 2, 2);
var node = scene.RootNode.CreateChildNode("Box", box);

node.Transform.Translation = new FVector3(1, 2, 3);

scene.Save("scene.gltf");

Это создаёт новую сцену, добавляет примитив‑коробку как дочерний узел к корню, размещает её в координатах (1, 2, 3) и экспортирует результат в файл glTF.

Загрузка с параметрами, специфичными для формата

Когда требуется более тонкий контроль над процессом загрузки, каждый формат предоставляет отдельный класс параметров. Например, загрузка STL‑файла с явными параметрами:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

var scene = new Scene();
var opts = new StlLoadOptions();
scene.Open("part.stl", opts);

// Inspect the loaded scene
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);

// Re-export as OBJ
scene.Save("part.obj");

Эта scene.Open() метод принимает любой из типов параметров загрузки: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions, или TmfLoadOptions.

Обход графа сцены

После загрузки сцены вы можете пройтись по дереву узлов, чтобы исследовать или изменить его содержимое:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.gltf");

foreach (var child in scene.RootNode.ChildNodes)
{
    Console.WriteLine("Node: " + child.Name);
    Console.WriteLine("  Translation: " + child.Transform.Translation);

    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine("  Vertices: " + mesh.ControlPoints.Count);
    }
}

Такой подход полезен для отладки, создания отчётов о содержимом модели или выборочного изменения частей сцены перед повторным экспортом.

Применение трансформаций

Размещение узлов в 3D‑пространстве выполняется через Transform свойство у каждого Node:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();

var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);

var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
child.Transform.Scale = new FVector3(2, 2, 2);

// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance

scene.Save("transformed.gltf");

Трансформации следуют стандартной модели наследования «родитель‑дочерний»: мировая позиция дочернего узла является комбинацией его локальной трансформации и всех трансформаций предков вплоть до корня.

Что включено

Библиотека поставляется с ограниченным набором возможностей, разработанных вокруг модели 3D‑графа сцены.

Scene Graph

Сцена графа является основой API. Каждый 3D‑файл представляется в виде древовидной структуры:

КлассРоль
SceneКонтейнер верхнего уровня; корень графа сцены
NodeИменованная позиция в дереве; содержит трансформации и дочерние узлы
EntityАбстрактный базовый класс для визуальных объектов, привязанных к узлам
MeshПолигональная геометрия — вершины, грани, нормали
CameraОпределение виртуальной камеры
TransformЛокальный перенос, вращение и масштаб узла
GlobalTransformВычисленное преобразование в мировом пространстве

Встроенные примитивы

В издании .NET включены параметрические классы фигур, которые можно напрямую прикреплять к узлам или преобразовывать в Mesh:

  • Box – выровненный по осям прямоугольный параллелепипед с настраиваемой шириной, высотой и глубиной.
  • Sphere – параметрическая сфера с настраиваемым радиусом.
  • Цилиндр – параметрический цилиндр с настраиваемыми радиусами и высотой.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);

Материалы

Библиотека предоставляет несколько типов материалов:

  • LambertMaterial – классический материал только с диффузным освещением, включающий компоненты цвета: ambient, diffuse, emissive и reflective.
  • PhongMaterial – расширяет Lambert, добавляя спекулярные блики и блеск.
  • PbrMaterial – материал физически основанного рендеринга с базовым цветом, metallic, roughness, occlusion и слотами текстур.

Математические утилиты

Эта Aspose.ThreeD пространство имён включает основные математические примитивы:

  • FVector3 – вектор из трёх компонентов одинарной точности для позиций, направлений и масштаба. Используется в Transform.Translation и Transform.Scale.
  • Vector4 – вектор из четырёх компонентов одинарной точности для контрольных точек и нормалей.
  • Matrix4 – 4x4 матрица преобразования.
  • Quaternion – представление вращения. Используется в Transform.Rotation.
  • BoundingBox прямоугольный ограничивающий параллелепипед для пространственных запросов.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

Параметры загрузки и сохранения

Каждый формат имеет отдельные классы параметров, позволяющие управлять поведением импорта и экспорта:

ФорматПараметры загрузкиПараметры сохранения
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

Например, чтобы загрузить файл OBJ с инвертированием координат и нормализацией нормалей:

var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;

scene.Open("model.obj", opts);

Поддерживаемые форматы

В следующей таблице суммированы форматы, которые Aspose.3D FOSS for .NET может читать и записывать.

ФорматРасширениеИмпортЭкспортЗаметки
OBJ.objДаДаС материалами MTL
STL.stlДаДаБинарный + ASCII
glTF 2.0.gltfДаДаформат JSON
GLB.glbДаДаБинарный glTF
FBX.fbxДаДаРежимы ASCII и бинарные
Collada.daeДаДа
3MF.3mfДаДаформат 3D‑производства на основе ZIP

Руководство по выбору формата

Выбор подходящего формата зависит от вашего сценария использования:

  • OBJ идеален, когда вам нужна максимальная совместимость между 3D‑инструментами. Практически любое приложение для моделирования может читать и записывать OBJ. Он хорошо подходит для обмена сеточными данными, но передаёт только базовую информацию о материалах через сопутствующие файлы MTL.
  • STL является предпочтительным форматом для рабочих процессов 3D‑печати. Он сохраняет необработанную триангулированную геометрию без материалов и иерархии сцены, что именно ожидает программное обеспечение для нарезки.
  • glTF является современным стандартом для веб‑ и реального времени 3D. Он поддерживает материалы PBR, полные иерархии сцены и разработан для эффективной передачи. Используйте glTF при создании веб‑просмотрщиков или при работе с любой конвейерной системой рендеринга в реальном времени.
  • FBX глубоко интегрирован в рабочие процессы разработки игр и создания цифрового контента. Он поддерживает богатые данные сцены, включая иерархии и материалы. Aspose.3D FOSS для .NET поддерживает FBX импорт и экспорт в обоих режимах: ASCII и бинарном.
  • 3MF является современным форматом 3D‑печати, который поддерживает богатые метаданные, материалы и сцены с несколькими объектами в едином пакете на основе ZIP.

Известные ограничения

Scene.Render() является не поддерживается в версии FOSS. Вызов этого метода выбросит NotImplementedException. Библиотека предназначена для файловой 3D обработки – загрузки, манипулирования, трансформации и сохранения моделей – а не для рендеринга в реальном времени на дисплей.

Открытый исходный код и лицензирование

Aspose.3D FOSS для .NET выпущен под MIT License. Это означает, что вы свободны:

  • Используйте библиотеку в коммерческих и проприетарных приложениях.
  • Изменяйте исходный код в соответствии с вашими потребностями.
  • Распространяйте библиотеку как часть вашего собственного программного обеспечения.

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

Полный исходный код размещён на GitHub, и вклад приветствуется: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

Системные требования

ТребованиеПодробности
.NET версия10.0 or later
ЗависимостиНет (чистый C#)
ПлатформыЛюбая платформа, на которой работает .NET
Менеджер пакетовNuGet

Начало работы

Вот ресурсы, которые помогут вам быстро приступить к работе:

  • Документация – всесторонние руководства и пошаговые обзоры API доступны на Aspose.3D сайт документации.
  • База знаний – практические статьи‑руководства и советы по устранению неполадок в Aspose.3D KB.
  • Справочник API – подробная справка по классам и методам по Aspose.3D справка API.
  • Исходный код – просматривать и вносить вклад на GitHub.
  • NuGet – пакет опубликован как Aspose.3D в NuGet.

Распространённые сценарии использования

Вот несколько практических сценариев, где Aspose.3D FOSS для .NET хорошо подходит:

Конвейеры конвертации форматов

Многие команды получают 3D‑активы в одном формате, но им нужны в другом. Команда дизайнеров может работать с FBX, тогда как веб‑команда нуждается в glTF. Библиотека позволяет создавать автоматизированные конвейеры конвертации:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

// Convert all incoming FBX assets to GLB for the web team
var scene = new Scene();
scene.Open("asset.fbx");

scene.Save("asset.glb");

3D Model Inspection and Validation

Прежде чем интегрировать 3D‑актив в приложение, вы можете захотеть проверить его содержимое — подсчитать количество узлов, проверить геометрию или убедиться, что присутствуют ожидаемые элементы:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.obj");

int nodeCount = scene.RootNode.ChildNodes.Count;
Console.WriteLine("Top-level nodes: " + nodeCount);

foreach (var child in scene.RootNode.ChildNodes)
{
    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine(child.Name + ": "
            + mesh.ControlPoints.Count + " vertices");
    }
}

Сборка сцены

Вы можете загрузить несколько моделей и объединить их в одну сцену:

using Aspose.ThreeD;

var scene = new Scene();

var part1 = new Scene();
part1.Open("chassis.obj");

var part2 = new Scene();
part2.Open("wheels.obj");

// Add nodes from each part into the combined scene
foreach (var child in part1.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}
foreach (var child in part2.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}

scene.Save("assembled.gltf");

Что дальше

В предстоящих постах мы рассмотрим:

  • Подробный разбор ключевых возможностей API графа сцены, материалов и математических утилит.
  • Практическое руководство по работе с каждым поддерживаемым 3D‑форматом — OBJ, STL, glTF, FBX и 3MF — включая варианты загрузки/сохранения и шаблоны пакетного преобразования.

Следите за обновлениями, а также смело исследуйте библиотеку и делитесь своими отзывами на GitHub.