Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 31. červenec 2013, 19:43:43 Předmět: OpenGL :: picking |
|
|
Tak si tak píšu na papír, co do Sollertie všechno potřebuji a napadlo mě, že jsem ještě neudělal picking ve scéně. Objekty, které půjdou sebrat budu řešit mimo scénu, ale občas by nebylo špatné mít možnost použít jako "interaktor" statický objekt scény.
Jak řešit picking?
1) Picking v OpenGL
2) Picking bounding boxů
3) Paprsek vs. kolizní geometrie
4) Alternativní metoda, o které mi nejprve musíte něco říci
Picking v OpenGL bude řešit i pickování velkých a nebo "klikatých" objektů per-pixel i se zákryvem, ale chce to jinou projekční matici (projection*pick)...vzhledem k tomu, že pak musím renderovat scénu 2x (i když pro picking bez shaderů a textur), tak se mi to moc nelíbí (hlavně z důvodu, že potřebuji provádět picking téměř každý snímek, resp. při pohybu myši)...
Picking přes bounding boxy je v pohodě, bohužel neřeší to per-pixel výběr s překryvem...
Nevím, jestli se mi vyplatí buildovat kolizní geometrii pro celou scénu...
Tak nevím... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 31. červenec 2013, 19:51:35 Předmět: |
|
|
Hm, co pustit od pozice kamery paprsek do mista, kam ukazuje kurzor a nejdriv zjistit kolidujici bundingboxy a ty pak projet po trianglech, kolize trianglu a paprsku seradit a zjistit, kteremu objektu patri kolize, ktera je nejblize kamere? |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 31. červenec 2013, 19:52:58 Předmět: |
|
|
satik napsal: |
Hm, co pustit od pozice kamery paprsek do mista, kam ukazuje kurzor a nejdriv zjistit kolidujici bundingboxy a ty pak projet po trianglech, kolize trianglu a paprsku seradit a zjistit, kteremu objektu patri kolize, ktera je nejblize kamere? |
No to je varinta 3 (kolizní geometrie v enginu tohle v podstatě dělá + používá KD stromy na dělení prostoru). _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 31. červenec 2013, 20:55:10 Předmět: |
|
|
Přesně to jsem řešil 14 dní zpátky
1) jsem zavrhnul - malý výkon, musím tam něco dobastlovat a měnit rendering
2) to jsem nakonec zvolil
3) záleží, co s tím chceš "pickovat". Ale dělat per-triangle test pro velké modely mi přijde overkill.
4) Šel by picking na úrovni per-pixel a asi docela zdarma, pokud bys měl deferred rendering. Bez něj by to vyžadovalo 1 render scény navíc. Každému objektu přidělím ID (takže max 32bit) a vyrenderuju je s barvou toho ID. Pak se jen podívám do textury na jaké barvě je kurzor a voilá.. mam objekt. _________________ Perry.cz |
|
Návrat nahoru |
|
|
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 31. červenec 2013, 21:14:47 Předmět: |
|
|
Resil bych vyrenderovanim objektu ktere lze vybirat do maleho render targetu (se depth bufferem) a to tak ze kazdy objekt bych vyrenderoval unikatni barvou (optimalne barvy rozhazet co nejdale od sebe) za pomoci "flat" shaderu (tj. renderovat jen ciste barvu a neresit zadne osvetlovani apod..). Tim se vyresi i prekryvani techto objektu a mnoho problemu ve kterych by ciste geometricke reseni bylo zrejme komplikovane. Pak staci z teto textury (mela by mit vypnuty antialiasing a co nejjednodussi filtrovani) vycist barvu jen v konkretnim bode a dohledat ktery objekt ji ma prirazenou. Vyrenderovat maly render buffer s extremne primitivnim shaderem by melo byt dostatecne rychle. Pokud jsou objekty hi-poly tak si lze predem pripravit low-poly (staci decimovat mesh v 3d modeleru - nemusi to byt rucni prace) a kreslit jen tyhle low-poly..
Rozhodne bych kvuli pozadavku na picking neprepisoval celou pipeline na deferred shading (uff!).
Navic by slo pekne zkombinovat s geometrickym reseni. Napriklad vyrenderovat buffer jen kdyz se postavicka zastavi protoze pri behu postaci geometricky pristup (napr. obb/sphere raycasting) - to uz jsou ale uvahy ktere zavisi na hre a co se v ni deje atd..
Naposledy upravil quas4 dne 31. červenec 2013, 21:34:48, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 31. červenec 2013, 21:20:25 Předmět: |
|
|
2/3) alebo 4) podla perryho. Naimplementovat cislo 3 sa bude aj tak hodit na vsetko mozne a naimplementovat cislo 4 (G-buffer) sa aj tak bude tiez hodit na vsetko mozne A nemusi to byt 32 bitov, 16 alebo menej bitov urcite postaci kazdemu (alebo to bolo 640 kB? ) _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 31. červenec 2013, 22:48:23 Předmět: |
|
|
Nakonec jsem implementoval variantu 3, vzhledem k tomu, že mám kolizní geometrii hodně optimalizovanou. Nejprve jsem zkusil KD stromy, ale ukázalo se, že na delší paprsky je lepší můj modifikovaný Octree. Takže teď stačí nastavit atribut rendereru "pickable", kde číslo znamená:
0 - nelze piknout
1 - lze piknout
2 - blokuje picking
Ještě by bylo fajn, když nechám zmizet nějaký objekt a je nastaven na blokování pickingu, tak aby ho blokovat přestal. I když se spíš budu snažit v Sollertii umístit objekty tak, aby šli vždy dobře picknout... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 1. srpen 2013, 00:45:56 Předmět: |
|
|
citace: |
Nejprve jsem zkusil KD stromy, ale ukázalo se, že na delší paprsky je lepší můj modifikovaný Octree |
Jak buildíš ty KD-trees? -> Protože při jakékoliv nenaivní heuristice pro KD-trees zpravidla musí být rychlejší než Octrees (a to jakkoliv modifikované), jsou totiž minimální reprezentací spaciální hierarchie scény (minimální = nejrychlejší).
Přičemž naivní KD-tree (e.g. split in the middle of longest axis) by ti měl dát stejně kvalitní strom jako klasický Octree. Median splitting by měl vyjít o něco lépe. A jakýkoliv SAH ti dá řádově lepší výkon.
Samozřejmě předpokládám, že traversal je maximálně optimalizovaný standardní stack-based. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 1. srpen 2013, 09:09:59 Předmět: |
|
|
Vilem Otte napsal: |
citace: |
Nejprve jsem zkusil KD stromy, ale ukázalo se, že na delší paprsky je lepší můj modifikovaný Octree |
Jak buildíš ty KD-trees? -> Protože při jakékoliv nenaivní heuristice pro KD-trees zpravidla musí být rychlejší než Octrees (a to jakkoliv modifikované), jsou totiž minimální reprezentací spaciální hierarchie scény (minimální = nejrychlejší).
Přičemž naivní KD-tree (e.g. split in the middle of longest axis) by ti měl dát stejně kvalitní strom jako klasický Octree. Median splitting by měl vyjít o něco lépe. A jakýkoliv SAH ti dá řádově lepší výkon.
Samozřejmě předpokládám, že traversal je maximálně optimalizovaný standardní stack-based. |
Spočítám si medián z vrcholů v nejdelší ose a podle něj to rozdělím. Ono, co si budeme povídat, ten můj modifikovaný octree už toho moc společného s Octree nemá (konstruuji ho stejně jako octree, ale upravuji potom ještě výsledné boxy, některé třeba úplně vyřadím). _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 1. srpen 2013, 09:28:09 Předmět: |
|
|
Ad varianta 1): Můžeš rendrovat pouze 1 pixel. Když předtim uděláš i "frustum culling" tak vlastně nebudeš rendrovat skoro nic. Je to rychlý dost ;-). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 1. srpen 2013, 09:29:11 Předmět: |
|
|
Zkusil jsem udělat stejnou modifikaci u KD stromů, jako u toho mého Octree a teď je mnohem lepší. Podle statistiky vybere mnohem méně trojúhelníků a mnohem logičtěji...
Hm... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 1. srpen 2013, 09:45:28 Předmět: |
|
|
A co Query objekty? Dají se použít? Jsou až od GL3, takže pro VODU na nic, ale už dlouho mi to vrtá hlavou. Myslím, že by to mělo jít v kombinaci s tím, co psal semo. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
|