Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

maumo

unregistriert

11

17.11.2010, 14:51

Tatsächlich wurden die Vertices im BlenderScript vortransformiert. Hm nun habe ich eine Lösung für Modelle mit einem Bone. Mit mehreren sieht das ganze aber wieder merkwürdig aus.

Wenn ich nun die Vertices beim Laden alle in die Bone-Spaces transformiere, bekomme ich bei 2 Bones irgendwelche merkwürdigen Formen:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
 

absoluteTransform = bone.Transform * parentAbsoluteMatrix;
 InverseBindMatrices[j] = Matrix.Invert(absoluteTransform);

...

Matrix m = InverseBindMatrices[vertices[i].BlendIndices0] * vertices[i].BlendWeight.X
+ InverseBindMatrices[vertices[i].BlendIndices1] * vertices[i].BlendWeight.Y
+ InverseBindMatrices[vertices[i].BlendIndices2] * vertices[i].BlendWeight.Z
+ InverseBindMatrices[vertices[i].BlendIndices3] * vertices[i].BlendWeight.W;

vertices[i].Position = Vector3.Transform(Vertices.Positions[i], m);
vertices[i].Normal = Vector3.Transform(Vertices.Normals[i], m);

...


Die Matrizen für den Shader berechne ich dann so:

C#-Quelltext

1
2
AbsoluteTransforms[bone.Index] = Transforms[bone.Index] * parentMatrix;
SkinTransforms[bone.Index] = AbsoluteTransforms[bone.Index


Wobei Transforms die relativen Transformen jeweils eines Frames beinhält.

Transformiere ich die Vertices zu beginn nicht, bekomme ich bei 2 Bones dass richtige Bild, wenn ich die Shader Matrizen so berechne:

C#-Quelltext

1
2
3
AbsoluteTransforms[bone.Index] = Transforms[bone.Index] * parentMatrix;
for (int i = 0; i < SkinTransforms.Length; i++)
    SkinTransforms[i] = Mesh.InverseBindMatrices[i] * AbsoluteTransforms[i];


Bei mehr als 2 Bones pro Vertex sieht das dann aber wieder anders aus.

maumo

unregistriert

12

18.11.2010, 09:45

Hi,

die Multiplikationsreihenfolge schien richtig zu sein, ich habe in meinem Blenderskript allerdings die Vertices vortransformiert, da in Blender ein anderes Koordinatensystem genutzt wird. Lasse ich das weg, funktioniert das ganze.

Danke!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

18.11.2010, 11:02

Geht jetzt alles, auch mit den Gewichten?

maumo

unregistriert

14

18.11.2010, 11:14

Bis jetzt sieht das gut aus. Habe aber nur simple Charakteranimationen getestet, ich erstelle mir gerade Laufanimationen.

Werbeanzeige