Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Tom Atom
Založen: 22. 10. 2013 Příspěvky: 19
|
Zaslal: 30. duben 2014, 17:18:49 Předmět: Vykresleni grafu sceny a batchovani |
|
|
Ahoj,
mam nejake zkusenosti s 2D hrami a chtel bych zkusit i neco ve 3D. Zatim operuji s OpenGL a vim, ze je dobre minimalizovat pocet draw callu. Vetsina spritu ve 2D je quad ze dvou trojuhelniku. Za tim ucelem batchuju vsechny sprity do virtualnich "kyblicku". Kazdy kyblicek ma svuj shader a kdyz potrebuji kyblicek vykreslit, tak zavolam vykresleni a vse se vykresli jednim volanim.
Ve 3D svete plati pro OpenGL to same, ale nejaka "minimalni" jednotka je tam objekt a ne quad. Kazdy objek ma jinou transformacni matici. Pokud budu prolezat graf sceny a kyblickovat objekty podle spolecnych sharderu nebo textur, tak pri vykresleni treba 5ti stejnych objektu na 5ti mistech ve svete skonci tyto v jednom kyblicku. Ale tim asi zadny draw call neusetrim, ze? Protoze kazdy bude mit jinou transformaci tak ja budu muset vyslat 5 draw callu vzdy s nastavenim nejake uniform matice v shaderu? Je to tak? Nebo si to vykladam spatne?
Napada me i treba pokud budu mit skeletalni aminaci, tak mi asi bude stacit jeden shader a jedna textura, ale budu muset zavolat X draw callu pro kazdou cast modelu? Nebo se v praxi udela transformace jednotlivych casti v CPU, takze mi vznikne model v nove pozici a ten se cely najednou predhodi grafickemu cipu, ktery uz ho na jeden zatah vykresli? To by asi bylo pomale a navic by ten model musel furt litat pres sbernici? |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 30. duben 2014, 18:32:53 Předmět: Re: Vykresleni grafu sceny a batchovani |
|
|
Tom Atom napsal: |
Napada me i treba pokud budu mit skeletalni aminaci, tak mi asi bude stacit jeden shader a jedna textura, ale budu muset zavolat X draw callu pro kazdou cast modelu? Nebo se v praxi udela transformace jednotlivych casti v CPU, takze mi vznikne model v nove pozici a ten se cely najednou predhodi grafickemu cipu, ktery uz ho na jeden zatah vykresli? To by asi bylo pomale a navic by ten model musel furt litat pres sbernici? |
Čau,
Na skeletální animaci ti stačí měnit n uniform matic, model se nemění,máš per-vertex atributy, kam zabalíš indexy matic a váhy (často se omezí max. počet na vertex, třeba 4 je fajn
Suma vah je vždy 1. CPU pak jenom počítá interpolace quaternionů (nlerp) a pozic (tj. mezi framy animace nebo mezi skeletony více animací).
Z toho ve výsledku vytáhneš matice a pošleš do shaderu (finální matice, tj. transformované podle hierarchie).
Části potřebuješ řešit jenom v případě, že máš moc kostí (počet uniformů je omezený) nebo máš různé části s různými materiály. |
|
Návrat nahoru |
|
|
Tom Atom
Založen: 22. 10. 2013 Příspěvky: 19
|
Zaslal: 30. duben 2014, 18:59:06 Předmět: |
|
|
dekuji za odpoved. Existuje nejaky nastroj, ktery by rovnou vyprodukoval k modelu a jeho vrcholum ty vahy a indexy na matice? Prip. je to v nejakem formatu? Myslim, ze treba v .OBJ to neni, ale asi by ho slo upravit tak, aby to tam bylo... |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 30. duben 2014, 19:20:43 Předmět: |
|
|
Tom Atom napsal: |
dekuji za odpoved. Existuje nejaky nastroj, ktery by rovnou vyprodukoval k modelu a jeho vrcholum ty vahy a indexy na matice? Prip. je to v nejakem formatu? Myslim, ze treba v .OBJ to neni, ale asi by ho slo upravit tak, aby to tam bylo... |
No většinou máš export-pluginy do modelerů.
Pro kdysi populární md5 formát (doom3) je dnes dost těžké najít něco, co funguje.
Ale můžeš si stáhnout třeba assimp a napsat si vlastní exporter, případně si napsat vlastní plugin do modeleru.
Ono to je ještě trochu složitější, základ modelu je v tzv. bind pose, potřebuješ znát hierarchii kostí a transformace bind pose => bone. Plus samozřejmě animace.
obj je jednoduchý formát, ale hodí se pouze na statické modely. |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
|
Návrat nahoru |
|
|
|