.[ ČeskéHry.cz ].
Geometry instancing - vykreslení mnoho stejných objektů DX9

 
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
xtopi



Založen: 11. 08. 2007
Příspěvky: 24
Bydliště: La republica Checa

PříspěvekZaslal: 25. září 2007, 02:22:47    Předmět: Geometry instancing - vykreslení mnoho stejných objektů DX9 Odpovědět s citátem

mám tu zase něco, vykresluhu hodně stejných objektů. tak jsem se poohlídnul po samplech z DX SDK. tam je např. hardware geometry instancing (nebo např. shader instancing) technika. Což se mi zdálo jako super, v domění, že budu mít jeden indexovanej objekt (vertex + index buffer), no a ten pak 100x vykreslím na jinou pozici "jedním voláním" nejaký metody. Ale jaký bylo moje překvapení, že to sice jednou metodou vykreslím, ale stejně ten objekt musím mít 100x ve VB uloženej, k čemu to pak je? Řekněte mi, že to není pravda Smile
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: 25. září 2007, 07:08:19    Předmět: Odpovědět s citátem

Hola amigo,

bohužel Tě budu muset zklamat - je to pravda Wink Geometrii musíš mít ve vertex bufferu tolikrát, kolik objektů budeš vykreslovat v jedné dávce (to je dáno podílem počtu volných konstant ve vertex shaderu ku velikosti per-object dat) - navíc každý vertex budeš muset doplnit o jedno číslo, které Ti bude říkat, ke kterému objektu daný vertex patří (toto číslo použiješ ve vertex shaderu jako index do pole per-object konstant).

Tahle technika je dobrá k tomu, když vykresluješ hodně menších objektů se stejnou geometrií. Právě u těch menší objektů bude totiž efektivita instancingu největší, protože jeho hlavním smyslem je eliminovat overhead při volání kreslících metod, který je právě u malých objektů největší (ten overhead).
Ale i u větších objektů bych se o paměťový nároky geometrie moc nebál - většinou Ti stejně nejvíc sežerou textury a geometrie je oproti tomu prd Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
xtopi



Založen: 11. 08. 2007
Příspěvky: 24
Bydliště: La republica Checa

PříspěvekZaslal: 25. září 2007, 16:29:37    Předmět: Odpovědět s citátem

dík, žes mi potrvdil nejhorší obavy Smile Je to teda fakt zklamání, no ale koukal sem na instancing sample z DX10 a myslim, že tam to je už jinak, a bude stačit jen jeden objekt v paměti, ale jistej si tim nejsem, protoze dx10 kód vypadá tak trochu jinak než DX9 takže se v něm neorientuju Smile Ale těšim se až si všichni koupí dx10 grafárny a visty Smile
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: 25. září 2007, 16:34:30    Předmět: Odpovědět s citátem

Jojo, v DX10 by to snad mělo jít bez více kopií. Ale i s těma kopie v tom fakt nevidim moc problém, protože Ti to v paměti skoro nic nezabere...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
vassa



Založen: 15. 08. 2007
Příspěvky: 7
Bydliště: Kolín

PříspěvekZaslal: 30. září 2007, 22:52:12    Předmět: Geometry a shader instancing Odpovědět s citátem

Mám pocit že mluvíte o dvou věcech.
Shader instancing se používá u SM2 (shader model), jde o to co si popsal. V jednom VB musíš mít uložno např. 100x to co chceš vykreslit + index do pole s pozicí (index se dá uložit natř. do souřadnice w)
Geometry instancing je v SM3, kde (myslim) že do jednoho proudu dat uložíš VB s jedním objektem a počtem kolikrát ho chceš vykreslit a např. do druhýho proudu dat uložíš pozice vykreslovaných objektů, ale tyto pozice musí být nahrány do vlastního VB, posíláš tedy 2 VB. Docela dobře je to popsaný v Samplech a DirectX SDK
a u SM4 (DirectX10) jsem to nějak nezkoumal takže nevim.
Vassa
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 1. říjen 2007, 07:18:50    Předmět: Odpovědět s citátem

No jasně, je to tak. Shader instancing je na SM2.0 i na SM1.1 (ale tam nemá kvůli malému počtu dostupných konstant moc význam), hardware instancing je od SM3.0. V těch samplech je to jasně napsaný.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
xtopi



Založen: 11. 08. 2007
Příspěvky: 24
Bydliště: La republica Checa

PříspěvekZaslal: 1. říjen 2007, 22:16:53    Předmět: Re: Geometry a shader instancing Odpovědět s citátem

vassa napsal:
Mám pocit že mluvíte o dvou věcech.
...

jasny, ale jak u shader tak i u hardware instancing musis mit vykreslovanej objekt nakopirovanej x-krat ve VB, o to mi slo.
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: 2. říjen 2007, 08:51:39    Předmět: Odpovědět s citátem

No když se podíváš do DX SDK na odstavec "Drawing Indexed Geometry" v kapitole "Efficiently Drawing Multiple Instances of Geometry", tak tam se použivají jedny vertexy pro všechny instance...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
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