Ми раді оголосити про доступність 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");

The 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");

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 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 for .NET supports FBX імпорт та експорт в обох режимах: ASCII та бінарному.
  • 3MF є сучасним форматом 3D‑друку, який підтримує багаті метадані, матеріали та багатооб’єктові сцени в одному пакеті на основі ZIP.

Відомі обмеження

Scene.Render() є не підтримується у FOSS-версії. Виклик цього методу викличе a 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.