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
|
Zaslal: 25. září 2007, 02:22:47 Předmět: Geometry instancing - vykreslení mnoho stejných objektů DX9 |
|
|
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 |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 25. září 2007, 07:08:19 Předmět: |
|
|
Hola amigo,
bohužel Tě budu muset zklamat - je to pravda 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 |
|
Návrat nahoru |
|
|
xtopi
Založen: 11. 08. 2007 Příspěvky: 24 Bydliště: La republica Checa
|
Zaslal: 25. září 2007, 16:29:37 Předmět: |
|
|
dík, žes mi potrvdil nejhorší obavy 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 Ale těšim se až si všichni koupí dx10 grafárny a visty |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 25. září 2007, 16:34:30 Předmět: |
|
|
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 |
|
|
vassa
Založen: 15. 08. 2007 Příspěvky: 7 Bydliště: Kolín
|
Zaslal: 30. září 2007, 22:52:12 Předmět: Geometry a shader instancing |
|
|
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 |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 1. říjen 2007, 07:18:50 Předmět: |
|
|
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 |
|
|
xtopi
Založen: 11. 08. 2007 Příspěvky: 24 Bydliště: La republica Checa
|
Zaslal: 1. říjen 2007, 22:16:53 Předmět: Re: Geometry a shader instancing |
|
|
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 |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 2. říjen 2007, 08:51:39 Předmět: |
|
|
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 |
|
|
|