.[ ČeskéHry.cz ].
Skinning

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 7. srpen 2009, 18:05:49    Předmět: Skinning Odpovědět s citátem

Doufám že se teď neztrapním jako naposled, ale ještě není tolik Very Happy
Snažím se dostat z 3DS Max přes max sdk kostru a váhy. S váhama nemám problém, dostal jsem se k nim přes interface IGame, přesněji IGameSkin.

Nejsem si ale jist s transformacema. Dělám to tak, že si u každé kosti získám její LocalTM, tj. transformační matici, pronásobím ji se všemi rodičovskými kostmi (v pořadí od rodiče k potomku) a výsledek exportuji do svého formátu. Ještě bych měl říct že výslednou matici ukládám jako qvaternion a pozici mám zvlášť.

V programu pak pošlu data na gpu a v shaderu orotuji a posunu vrcholy podle dané váhy. Bál jsem se, že mám chybu v práci s kvaterniony, ale přijde mi že je to správě, protože když výslednou matici z posunu a kvaternionu složím je stejná.

Nenapadá někoho kde dělám chybu. Výsledek rozhodně není to co by měl být. Jaký je standardní postup pro export a zpracování skinnignu? Nenašel jsem moc použitelné literatury. Většinou se zabívá až výsledným skinningem, viz technika duálních kvaternionů a podobně.

Btw. neví někdo jakej v max sdk je rozdíl mezi localTM a worldTM. Nějak jsem to z dokumentace nepochopil. Rolling Eyes
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 8. srpen 2009, 02:04:13    Předmět: Odpovědět s citátem

3DS Max SDK nemám, svoje exportéry píši přes MaxScript (IMHO je to sice pomalejší ale běží na většině Maxů + kód si každý může prohlídnou, lehký přepis do C4D a dalších editačních SW).
Co popisuješ je správně - kvaternion i pozici musíš uložit zvlášť, co mě ale napadá že by mohlo být špatně - ukládáš si hierarchii kostí a provádíš skinning podle ní (snad jejpodstatnější část, protože Maxovy localTM jsou uložené AFAIK před tím než je ztransformuje rodič (a rodič, rodiče, atd.) ... že by taky rozdíl mezi localTM a worldTM?)?

Další věc ke kvaternionům (jenom taková poznámka) - kvaternion+pozice je lepší reprezentace 4x4 nebo 4x3 matic (7x32 bitů v paměti je méně než 16x32 nebo 12x32 bitů), také je lehčí pro procesor je transformovat (matice chtějí více operací). Takže výsledek z matic a z kvaternionů musí být vždy navzájem stejný (jinak je to chyba v programovém kódu Wink) ... tj. to co ti vyjde z matic musí být stejné s výsledkem kvaternionů.

A nakonec Pozn. Česky je to kvaternion, nikoliv qvaternion Wink
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 8. srpen 2009, 03:12:17    Předmět: Odpovědět s citátem

Vilem Otte napsal:
kvaternion+pozice je lepší reprezentace 4x4 nebo 4x3 matic (7x32 bitů v paměti je méně než 16x32 nebo 12x32 bitů), také je lehčí pro procesor je transformovat (matice chtějí více operací).

Matice nejsou o nic horší reprezentací než cokoliv jiného. Závisí na použití.

Mimochodem právě transformace pomocí quaternionů vyžaduje více operací, vzorec je "q^(-1) * (v_x, v_y, v_z, 1) * q", kde v je vektor, q je quaternion a * je násobení quaternionů. To po rozepsání dá 32 násobení, 12 sčítání a 12 odčítání. Při použití 3x3 matice dá vzorec "m * v" pouhých 9 násobení a 6 sčítání.

Quaterniony jsou lepší reprezentace jenom když je potřeba sféricky interpolovat. BTW nerad bych rozjížděl OT, ale zkoušel někdo ty duální quaterniony? Vyplatí se to?
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 8. srpen 2009, 09:47:28    Předmět: Odpovědět s citátem

Vilem Otte: Matice v exporteru pronásobím, takže v tom by být problém neměl.

Eosie: Quaterniony násobím dobře, pro jistotu jsem zkoušel i převod na matici a násobit maticí, ale výsledek byl stejný. Do GPU posílám quateriony a pozice, protože je to méně dat. Říkám si že je lepší posílat méně dat a víc počítat ve vertex shaderu, který se stejně nudí (program je určen primárně pro shader model 3, tj. bez unifikovaných shaderů)

Zkusím ještě exportovat pouze matice a pracovat jen s maticema, projistotu. Je to pro mě kapku záhada.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 8. srpen 2009, 11:13:46    Předmět: Odpovědět s citátem

citace:
Matice nejsou o nic horší reprezentací než cokoliv jiného. Závisí na použití.

Samozřejmě ... na použití závisí u všeho.

citace:
Quaterniony jsou lepší reprezentace jenom když je potřeba sféricky interpolovat.

Na tomto je založena většina modelů skinningu ... ale o tom co je lepší reprezentací čeho a kdy bychom se mohli dohadovat donekonečna a pořád by nikdo neměl pravdu Wink

A co se duálních kvaternionů týče, co se kvality týče tak bych řekl jak kde - např. při skinningu postav se tělo postavy deformuje přirozeněji, ovšem ne všude je to třeba (zase jsou o dost náročnější než matice, nebo kvaternion), jde o to najít kompromis mezi kvalitou a výkonem (i když pokud to člověk dneska napíše dobře - tak pro GPU skinning by to při shader model 4.0 neměl být problém, na CPU skinning už to bude chtít docela tvrdé optimalizace ... ono obecně CPU skinning zvláště u ray tracingu je sakra velký problém (když už člověk použije D3D nebo Ogl, tak ten GPU skinning udělá)).
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 9. srpen 2009, 17:36:56    Předmět: Odpovědět s citátem

Tak chyba byla opjet má nepozornost. Při posílání informací o kostech do gpu jsem házel špatnej pointer. Všem díky za pomoc.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Khaj



Založen: 16. 01. 2008
Příspěvky: 49

PříspěvekZaslal: 9. srpen 2009, 20:50:39    Předmět: Export kostry z 3DSMax Odpovědět s citátem

Ahoj, mohl bych poprosit o ten kod pro export?
Uz moc dlouho to mam jako sen, ale zatim se mi nikdy nepodarilo pobrat neco z 3ds maxu tak, abych to umel vyexportovat (krom klasickeho 3ds souboru).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 11. srpen 2009, 14:49:11    Předmět: Re: Export kostry z 3DSMax Odpovědět s citátem

Khaj napsal:
Ahoj, mohl bych poprosit o ten kod pro export?
Uz moc dlouho to mam jako sen, ale zatim se mi nikdy nepodarilo pobrat neco z 3ds maxu tak, abych to umel vyexportovat (krom klasickeho 3ds souboru).


Rád bych, ale licence projektu (komerčního) na kterém dělám mi neumožňuje zveřejnit zdojáky, obzvláště tedy ty, které se týkají formátu geometrie. Ale rozhodně doporučuji projít si IGameExporteru, které jsou přímo v MAX SDK, adresář:

samples/igame/export/

Je tam skoro vše, ale kdyby tě zajímali nějaké menší části, tak to snad poslat mohu, ale řekni si které.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna