.[ ČeskéHry.cz ].
I základní animace můžou vypadat jako problém

 
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
Khaj



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

PříspěvekZaslal: 5. říjen 2008, 07:25:15    Předmět: I základní animace můžou vypadat jako problém Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 5. říjen 2008, 09:56:24    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 5. říjen 2008, 10:00:45    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 5. říjen 2008, 10:14:00    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Khaj



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

PříspěvekZaslal: 5. říjen 2008, 10:48:27    Předmět: Odpovědět s citátem

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 Very Happy)

- 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.
Arrow 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 5. říjen 2008, 11:13:46    Předmět: Re: I základní animace můžou vypadat jako problém Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Khaj



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

PříspěvekZaslal: 5. říjen 2008, 17:04:08    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 5. říjen 2008, 17:59:46    Předmět: Odpovědět s citátem

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
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