Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Khaj
Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 5. říjen 2008, 07:25:15 Předmět: I základní animace můžou vypadat jako problém |
|
|
Zdravím, potřeboval bych poradit ohledně realizace animací.
Na toto téma jsem sice shlédl spoustu materiálů, ale žádný z nich neřeší můj problém - chci realizovat pouze animace předdefinované (stvořené grafikem), do kterých zbytek hry nezasahuje - tedy inverzní kinematika a controllery jsou zde trochu mimo.
Je potřeba, abych tento základ mohl využít všude (kde budu předpokládat, že pravidla hry neovlivňují animace), a zároveň aby mohl běžet plně na shaderech na grafické kartě.
No a zde přichází problémy - mám jít cestou Nvidie (vertex textury) anebo Ati (R2VB) ?
Byl by R2VB pomalý, kdyby se realizoval faktickým locknutím a kopírováním textura -> VB (před každým framem pro každým animovaný objekt) na Ne-Ati kartách?
Byly by pomalé pro změnu vertex textury, kdyby se emulovaly mimo vertex shader (za předepokladu, že v nich chci mít uložené animační matice) na Ne-NVidia kartách?
Stačí na tyto animace skinning (skládaných modelů), anebo bude někdy potřeba morfování (vertex blending)?
Jaké jsou Vaše zkušenosti s animacemi?
Jaký přístup používáte Vy?
Děkuji za všechny nápady a odpovědi. |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 5. říjen 2008, 09:56:24 Předmět: |
|
|
No já jsem implementoval skinned animation kompletně v shaderech a nepotřeboval jsem vertex textury ani R2VB. Vycházel jsem přitom ze samplu Skinned Mesh z DX SDK: http://msdn.microsoft.com/en-us/library/bb147387(VS.85).aspx
Trik je v tom, že u každého vertexu máš uložené indexy a váhy kostí (tedy matic - každá kost má přiřazenu jednu matici), které se mají pro daný vertex použít. Protože vertex může být ovlivňován klidně stovkou kostí, tak se to musí zjednodušit tím, že budeme uvažovat jen např. 4 kosti s nejvyšší vahou.
Takže u vertexu máš pak 4 * (1 int + 1 float). int je index kosti (matice), float je její váha. Do vertex shaderu si pak pošleš (přes konstantní registry) odpovídající pole matic, které indexuješ hodnotami z vertexu. Abys mohl vykreslovat v nějakých rozumných dávkách (a ne po jednom trojúhelníku), je potřeba sloučit do jedné dávky vertexy (resp. trojúhelníky), které jsou ovlivňovány stejnými kostmi (tedy používají stejné matice).
Když pak dojde k posunu animace, tak se pouze přepočítají matice (což se musí vždy dělat na CPU) a při vykreslování příslušné dávky vertexů se pouze nasype pole příslušných matic kostí do konstantních registrů vertex shaderu. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 5. říjen 2008, 10:00:45 Předmět: |
|
|
Vertex textury jdou i na ATI, je to spíš otázka toho, jak je ta či ona karta nová. Takže jestli chceš stejně bude nejlepší na starších (pomalejších) kartách nic neemulovat, ale rovnou to vypnout.
mimochodem, jsem trochu zmaten, o jaký animace ti vlastně jde? _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 5. říjen 2008, 10:14:00 Předmět: |
|
|
No já jsem to pochopil tak, že mu jde o obyčejné přehrávaní animací.
Jinak jestli použít skinned animace nebo morfování záleží na druhu animace...každá technika se hodí na něco jiného. |
|
Návrat nahoru |
|
|
Khaj
Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 5. říjen 2008, 10:48:27 Předmět: |
|
|
Ano jde mi jen o obyčejné přehrávání animací, ale nejasnosti mám v samotném návrhu animačního systému (chci ho prostě udělat jednou a pak používat pořád stejný, maximálně se zrychlujícími úpravami). Konkrétně mám tedy dva problémy (a při řešení kažého z nich mě napadne 10 otázek):
- co všechno přesunout na GPU ... a kdy už začínám být v tomhle ohledu paranoidní (přepočítávání matic - s R2VB nebo Vertex texturama by se to dělalo kompletně na GPU ... ale když vypnu Vertex textury a budu dělat animace JEN přez ně, tak na starších kartách animace nebudou )
- Vlastně nevím, co *všechno* budu kdy potřebovat => nerad bych (jak je mým zvykem) přepracovával tyto základní animace vždy, když dostanu nový nápad.
No a proto se ptám na Vaše zkušenosti ... teď například vím, že můj původní záměr - úplně ignorovat morfování - by se mi asi vymstil. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 5. říjen 2008, 11:13:46 Předmět: Re: I základní animace můžou vypadat jako problém |
|
|
Khaj napsal: |
controllery jsou zde trochu mimo |
Controllery (tak jak jsou třeba v enginu WildMagic) jsou jen zobecnením různých typů animací a nejsou vůbec mimo. Je to jen jeden z OOP přístupů k řešení libovolných animací.
Khaj napsal: |
No a zde přichází problémy - mám jít cestou Nvidie (vertex textury) anebo Ati (R2VB) ? |
Ani jedno z toho na animace nepotřebuješ. Předpočítáš si animační data a ve vertex shaderu uděláš zbytek práce.
Khaj napsal: |
Stačí na tyto animace skinning (skládaných modelů), anebo bude někdy potřeba morfování (vertex blending)? |
No tak skinning je svým způsobem i morfování mezi několika transformacema. Nechápu akorát tu poznámku o "skládaných modelech". U skinningu není problém mít jeden celistvý model, animují se jenom vertexy... _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Khaj
Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 5. říjen 2008, 17:04:08 Předmět: |
|
|
Mno tedy controllery mi prostě připadly trochu jako kanón na mouchu (a hlavně je problém přesunout je na grafárnu, nebo ne?).
Já vím že to jde bez VT a R2VB, ale nebude to pomalé?
Skiningem skládaných modelů jsem myslel hladké animace dvou různých a samostatných modelů složených v jednom objektu - např hlavy a trupu s krkem (jedna z věcí kterou určitě budu chtít využívat - skládání výsledného objektu z více modelů). |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 5. říjen 2008, 17:59:46 Předmět: |
|
|
Khaj napsal: |
Mno tedy controllery mi prostě připadly trochu jako kanón na mouchu (a hlavně je problém přesunout je na grafárnu, nebo ne?). |
Nepochopils. Controller je tohle:
kód: |
class IController
{
public:
virtual void update(double deltaTime) = 0;
}; |
Je to spíš něco jako návrhový vzor v herních enginech. Využít ho můžeš ale taky nemusíš a nic tě to nestojí. Je to jen způsob abstrakce objektů, které řeší animaci právě tímto způsobem. Jestli za tím bude funkce, která podle deltaTime nastaví parametry matice nebo počítá animaci kostry, je už jen implementační detail.
Khaj napsal: |
Já vím že to jde bez VT a R2VB, ale nebude to pomalé? |
EH? Ani jedno z toho nepotřebuješ, to sis s něčím asi popletl.
Khaj napsal: |
Skiningem skládaných modelů jsem myslel hladké animace dvou různých a samostatných modelů složených v jednom objektu - např hlavy a trupu s krkem (jedna z věcí kterou určitě budu chtít využívat - skládání výsledného objektu z více modelů). |
Tohle skinning není a skládat takhle modely stejně nedává smysl. Skinning animuje každý vertex samostatně a tedy se předpokládá, že z editoru dostaneš jen jediný hotový mesh (např. celou postavu) tzn. použiješ jeden vertex buffer a jeden draw-call, kde jednotlivé vertexy animuješ právě pomocí kostry. Dělat to jakkoliv složitěji je zbytečné a neefektivní. Proto se tomu říká "skinning", mapuješ kůži=skin (neboli model) na kostru. O nějakém spojování objektů nemůže být řeč. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
|