ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4439142
Jetzt (Chat):
38 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
DirectX API
[D3D9] Übergang von einem Objekt zum anderen (morphing)
Normal
AutorThema
DomiOh Offline
ZFX'ler


Registriert seit:
08.10.2002

Nordrhein-Westfalen
[D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Hallo,

ich habe mir eine Testversion eines Programms runtergeladen, mit dem man Gesichter erstellen kann.

Dieses Programm speichert einem nach der Erstellung ein Low-Poly-Mesh des Gesichts ab und dazu noch Low-Poly-Meshs verschiedener Mimiken (z.B. Lächeln, Lachen, Wut, etc...) Diese liegen immer als komplette Meshs vor (im .OBJ oder .3DS oder ASC - Format)

Wie kann ich es nun realisieren, dass dieses Gesicht in die jeweilige Mimik "morpht" ?

Es wäre doch etwas zu langsam, jeden einzigen Vertex vom einen Objekt in das andere per CPU zu interpolieren, oder wäre das eurer Meinung nach ok?
Jedes Mesh hat etwa 1200 Vertices.
14.01.2009, 22:41:21 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: [D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Es gibt im SDK für genau diesen Zweck das SparseMorphTargets Sample.

Das Beispiel basiert zwar auf D3D10, aber das Konzept vor allem auf Alpha-Blending und darum sollte es – natürlich umständlicher, langsamer und möglicherweise auch mit Einschränkungen (kA wie es mit Präzision und den Texturmaßen sowie der Vertex-Struktur aussieht) – unter Shader Model 3.0 realisierbar sein.

Wie genau, kann ich dir aber nicht sagen. Hoffe, ich konnte trotzdem helfen.

Gruß, Ky

1 Mal gendert, zuletzt am 14.01.2009, 23:00:30 Uhr von Krishty.
14.01.2009, 22:59:39 Uhr
DomiOh Offline
ZFX'ler


Registriert seit:
08.10.2002

Nordrhein-Westfalen
Re: [D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Nunja, aber sowas muss ja auch irgendwie unter DX9 zu realisieren sein...

Eine Idee die mir gerade so durch den Kopf geht wäre, die beiden Modelle miteinander zu vergleichen und nur die Vertices zu interpolieren, die auch tatsächlich verändert werden
14.01.2009, 23:19:29 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: [D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Natürlich ist es möglich, schreibe ich doch. Nur eben unbequem.

Ich weiß nicht, wie man unter D3D9 Vertex-Daten als Texturen und umgekehrt nutzen kann. Zur Not ein wenig die Rohdaten rumkopieren … denn im schlimmsten Fall (nämlich wenn du es auf der CPU machst) musst du die Daten eh über den Bus schieben, und dann bist du mit der GPU immernoch schneller, weil du dir die Interpolation sparst.

Displacement-Mapping hat man doch auch unter SM 3.0 hingekriegt, das ist ja quasi gleich – Vertex-Positionen aus einer Textur laden eben.

2 Mal gendert, zuletzt am 14.01.2009, 23:29:29 Uhr von Krishty.
14.01.2009, 23:26:34 Uhr
6SidedDice Offline
Job-Moderator


Registriert seit:
16.10.2002

Nordrhein-Westfalen
161010163
Re: [D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Also mein erster Gedanke ist, das es einem animierten Model bzw. Skinned Mesh gar nicht unähnlich ist, oder? Nur das man statt ein Bone für mehrere Vertexe, eben ein Bone für jeden Vertex hat. Und 100-120 Bones sollte nicht alzuviel sein.
Ist aber auch nur so eine Idee
15.01.2009, 10:15:21 Uhr
jumphigh Offline
ZFX'ler


Registriert seit:
30.06.2004

Thüringen
221436197 andreas_heyer@hotmail.com
Re: [D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Was ist denn mit Vertex Tweening?
16.01.2009, 02:08:11 Uhr
www.high-and-heyer.de
Virus Offline
ZFX'ler


Registriert seit:
20.09.2002

Berlin
173804662 TVirusK
Re: [D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Du kannst doch einfach jedem vertex noch nen Differenz-Vektor speichern (also die Differenz zwischen 2 Positionen), um im Vertexshader dazu angeben, wieviel gemorpht werden muss (0.0-1.0) - pos+=diff*morph_value.

Das kan also bequem im Vertexshader berechen, die Frage ist nur ob das dann auch gut aussieht, wenn sich die Vertieces linear bewegen - kommt halt auf die differenzen an nehm ich an, wenn es nicht so weit ist, sollte es gehen.

1 Mal gendert, zuletzt am 16.01.2009, 10:32:58 Uhr von Virus.
16.01.2009, 10:21:16 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: [D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Zitat von Virus:
Du kannst doch einfach jedem vertex noch nen Differenz-Vektor speichern (also die Differenz zwischen 2 Positionen), um im Vertexshader dazu angeben, wieviel gemorpht werden muss (0.0-1.0) - pos+=diff*morph_value.
Wenn er aber nun 20 Gesichtsausdrücke hat, muss er entweder die doppelte Datenmenge in den VRAM laden oder den Puffer doch wieder dynamisch auf der CPU zusammen setzen. Nur mit einem Delta für die Position ist es ja nicht getan, die Normalen (und im Falle von Normal-Mapping auch die Tangenten) müssen ja ebenfalls zwischen zwei Keys interpoliert werden.

Zitat von jumphigh:
Was ist denn mit Vertex Tweening?
Das ist in der Tat was man hier braucht … wie sieht es denn mit dem Hardware-Support aus?

1 Mal gendert, zuletzt am 16.01.2009, 11:02:48 Uhr von Krishty.
16.01.2009, 11:02:28 Uhr
jumphigh Offline
ZFX'ler


Registriert seit:
30.06.2004

Thüringen
221436197 andreas_heyer@hotmail.com
Re: [D3D9] Übergang von einem Objekt zum anderen (morphing)Nach oben.
Zitat von Krishty:

Zitat von jumphigh:
Was ist denn mit Vertex Tweening?
Das ist in der Tat was man hier braucht … wie sieht es denn mit dem Hardware-Support aus?


Mhm, also gab es nicht dieses Tweening-Sample mit dem Delphin im SDK? Das muss mittlerweile Jahre her sein und lief auf meiner alten Radeon 9500 Pro (R300) ohne Probleme. Sollte das also wirklich noch eine HW-Frage sein?

MfG
Andreas
17.01.2009, 15:36:56 Uhr
www.high-and-heyer.de
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel