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

У цьому дописі розглядаються можливості бібліотеки, як розпочати роботу та куди рухатися далі.

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

Aspose.3D FOSS for .NET — це легка бібліотека для обробки 3D файлів, опублікована під MIT license. Вона надає 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.Converter --version 1.0.0

Ваше перше перетворення

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

using Aspose.ThreeD;

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

The Scene class є центральною точкою входу. Викличте 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");

The 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 моделі графа сцени.

Граф Сцени

Граф сцени є основою 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 – класичний матеріал лише з дифузним освітленням, що має компоненти кольору: навколишній, дифузний, емісивний та відбивний.
  • PhongMaterial – розширює Lambert, додаючи спекулярні підсвічування та блиск.
  • PbrMaterial – матеріал фізично‑заснованого рендерингу з базовим кольором, металевістю, шорсткістю, оклюзією та слотами текстур.

Математичні утиліти

Це Aspose.ThreeD простір імен включає основні математичні примітиви:

  • FVector3 – вектор з одинарною точністю, що складається з 3 компонентів, для позицій, напрямків та масштабу. Використовується в Transform.Translation і Transform.Scale.
  • Vector4 – вектор з одинарною точністю, що складається з 4 компонентів, для контрольних точок та нормалей.
  • 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 для .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.Converter на 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.