Работа с Deformers

Работа с деформаторами

Aspose.3D для .NET поддерживает две системы деформации: скелетная деформация via SkinDeformer and Bone, которые привязывают скелет к сетке для анимации персонажа, и морф-таргет деформация via MorphTargetDeformer, которая смешивает несколько форм сетки.


Скелетная деформация с SkinDeformer

SkinDeformer присоединяет набор объектов Bone к сетке. Каждая кость задаёт вес для каждой вершины, которую она влияет. Сетка деформируется, когда трансформы кости меняются.

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

var scene = new Scene();
var mesh = new Mesh("body");
Node meshNode = scene.RootNode.CreateChildNode("body", mesh);

// Create a SkinDeformer and attach it to the mesh
var skin = new SkinDeformer();
mesh.Deformers.Add(skin);

// Define a bone and assign per-vertex weights
var bone = new Bone("spine");
bone.BoneTransform = Matrix4.Identity;
bone.SetWeight(0, 1.0);
bone.SetWeight(1, 0.8);
skin.Bones.Add(bone);

Индексы вершин, передаваемые в SetWeight, должны быть действительными индексами в массиве контрольных точек сетки. Веса обычно нормализуются так, чтобы их сумма была 1.0 для всех костей, влияющих на вершину.


Деформация Morph Target

MorphTargetDeformer смешивает базовую сетку к одной или нескольким целевым формам. Каждый целевой объект представляет собой отдельную сетку с той же топологией, но с другими позициями вершин.

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

var scene = new Scene();
var baseMesh = new Mesh("face_neutral");
scene.RootNode.CreateChildNode("face", baseMesh);

// Target shape
var smileMesh = new Shape("face_smile");

// Attach a MorphTargetDeformer
var morph = new MorphTargetDeformer();
baseMesh.Deformers.Add(morph);

// Add a morph channel targeting the smile mesh
var smileChannel = new MorphTargetChannel("smile");
smileChannel.Targets.Add(smileMesh);
morph.Channels.Add(smileChannel);

// At runtime, set the blend weight (0.0 = base, 1.0 = full target)
smileChannel.SetWeight(smileMesh, 0.75);

API Quick Reference

MemberОписание:
new SkinDeformer()Создайте скелетный деформер для присоединения к мешу
skin.BonesIList<Bone> костей в этом деформере
new Bone(name)Создайте именованную кость
bone.SetWeight(vertexIndex, weight)Назначьте вес смешивания вершине
bone.BoneTransformМатрица смещения bind-pose для этой кости
new MorphTargetDeformer()Создать деформер целевого морфа
morph.ChannelsIList<MorphTargetChannel> каналов смешивания
new MorphTargetChannel(name)Создать именованный морф-канал
channel.ChannelWeightВес смешения: 0.0 = базовый, 1.0 = целевой
channel.SetWeight(target, weight)Устанавливает вес смешивания для целевой формы (target: Shape, weight: double)
mesh.DeformersКоллекция деформеров на сетке

См. также:

 Русский