Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 7. srpen 2009, 18:05:49 Předmět: Skinning |
|
|
Doufám že se teď neztrapním jako naposled, ale ještě není tolik
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.  |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 8. srpen 2009, 02:04:13 Předmět: |
|
|
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 ) ... tj. to co ti vyjde z matic musí být stejné s výsledkem kvaternionů.
A nakonec Pozn. Česky je to kvaternion, nikoliv qvaternion  _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 8. srpen 2009, 03:12:17 Předmět: |
|
|
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 |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 8. srpen 2009, 09:47:28 Předmět: |
|
|
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 |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 8. srpen 2009, 11:13:46 Předmět: |
|
|
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
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 |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 9. srpen 2009, 17:36:56 Předmět: |
|
|
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 |
|
 |
Khaj

Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 9. srpen 2009, 20:50:39 Předmět: Export kostry z 3DSMax |
|
|
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 |
|
 |
klapauciusk
Založen: 08. 08. 2007 Příspěvky: 76
|
Zaslal: 11. srpen 2009, 14:49:11 Předmět: Re: Export kostry z 3DSMax |
|
|
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 |
|
 |
|