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č
|
Zaslal: 6. prosinec 2018, 16:18:58 Předmět: (OpenGL) sortování drawcallů na gpu |
|
|
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 |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 8. prosinec 2018, 21:49:13 Předmět: |
|
|
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 |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 11. prosinec 2018, 08:58:52 Předmět: |
|
|
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 |
|
|
|
|
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