.[ ČeskéHry.cz ].
(OpenGL) sortování drawcallů na gpu

 
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
]semo[



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

PříspěvekZaslal: 6. prosinec 2018, 16:18:58    Předmět: (OpenGL) sortování drawcallů na gpu Odpovědět s citátem

Pro particle systémy generuju na gpu draw elements commandy, který se budou kreslit pomocí glMultiDrawElementsIndirect respektive glMultiDrawElementsIndirectCount (GL_ARB_indirect_parameters). Ten buffer draw commandů bych potřeboval setřídit podle vzdálenosti, ale musí to být na gpu. Nemáte někod zkušenosti s nějakýma šikovnýma a jednoduchýma algoritmama pro tento účel? Případně jiný trik, jak zajistit korektní alfa blending particlů, alespoň na úrovni jednotlivých systémů?
_________________
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
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 8. prosinec 2018, 21:49:13    Předmět: Odpovědět s citátem

Záleží jak přesné to potřebuješ. Pokud nechceš vůbec sortovat, tak sample-alpha-to-coverage může pomoct:



Dokonce i se sample count 1 to je lepší než nic - ale pozor na pattern co pak uvidíš:



Tím se vyhneš sortování úplně, ale otázka je jak moc to půjde vidět u particlů (mě se to celkem osvědčuje u vegetace, zvláště když máš MSAA sample count vyšší, při 4x už je to dost dobré - ale může to zabolet na výkonu, pokud děláš MSAA správně s post-tonemapping resolve).

Případně, pro Order Independent Trasparency lze použít i depth peeling, ale tomu se chceš asi vyhnout, je to docela fillrate killer (zvláště pro deferred renderery s MSAA).

Jinak co se týče samotného re-orderu command bufferu, tak normálně lze použít compute shader, kam připojíš jako SRV command buffer kde máš všechny particly, a pak jako UAV připojíš druhý command buffer kde budou particly seřazeny.

Uvnitř můžeš buď použít merge sort (paralelní byl popsaný afaik v GPU Gems 2 - https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter46.html) nebo radix sort (ten jde najít celkem lehce např. - https://github.com/jakemco/gpu-radix-sort)
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
]semo[



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

PříspěvekZaslal: 11. prosinec 2018, 08:58:52    Předmět: Odpovědět s citátem

Nakonec asi použiju kolegovu starší implementaci bitonic sortu v compute shaderu. Jen se musím vypořádat s tím, že algoritmus potřebuje znát počet prvků na CPU straně, což ale neznám. Sortuju drawcally po GPU frustum cullingu.

U těch per-pixel technik (order independent transparency) se právě bojím fillratu, protože ten je v našem případě dost zásadní. Jinak by se mi to líbilo.
_________________
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
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