.[ ČeskéHry.cz ].
OpenGL :: picking

 
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
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 31. červenec 2013, 19:43:43    Předmět: OpenGL :: picking Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 31. červenec 2013, 19:51:35    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 31. červenec 2013, 19:52:58    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 31. červenec 2013, 20:55:10    Předmět: Odpovědět s citátem

Přesně to jsem řešil 14 dní zpátky Smile

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 31. červenec 2013, 21:14:47    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 31. červenec 2013, 21:20:25    Předmět: Odpovědět s citátem

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 Smile A nemusi to byt 32 bitov, 16 alebo menej bitov urcite postaci kazdemu (alebo to bolo 640 kB? Very Happy Very Happy)
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 31. červenec 2013, 22:48:23    Předmět: Odpovědět s citátem

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
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: 1. srpen 2013, 00:45:56    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 1. srpen 2013, 09:09:59    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 1. srpen 2013, 09:28:09    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 1. srpen 2013, 09:29:11    Předmět: Odpovědět s citátem

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... Razz
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1558

PříspěvekZaslal: 1. srpen 2013, 09:45:28    Předmět: Odpovědět s citátem

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
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