[ bondja @ 19.07.2012. 12:14 ] @
Da li neko ima iskustva (ne ono moglo bi ovo ili ono), vec realna iskustva, kako napraviti grad (sa npr 100-nu zgrada, kuca) u XNA?
Recimo da imam neke modele ulica, zgrada/kuca (nebitno), sa teksturama, pitanje je sta primeniti (koje tehnike iscrtavanja, koji "engine",
pristup) da bi nacrtali veci broj tih objekata, a da bi imali i dalje dobre performanse?

Primeri koda koji radi , bi bili vise nego dobrodosli (moze i link na sajt/forum) gde ste videli da je tako nesto napravljeno u XNA/C#.

Hvala

poz
[ tosa @ 19.07.2012. 12:17 ] @
100, pa i 1000+ objekata nije nikakav problem danas, probaj prvo pa napisi sta te muci, posalji neki screenshot ili nesto po cemu bi mogli da zakljucimo sta je problem.
[ bondja @ 19.07.2012. 13:44 ] @
Toso,
nije problem neka je i 10K zgrada/kuca, nego se raspitujem koji pristup da primenim, npr:

Occlusion Query (OcclusionQuery class)
Frustum Culling
QuadTree
Hardware instancing (mnogo istih modela)
Vertex Cashe (vertexi koji imaju istu texturu i normale, ali drugacije polozaje -crta ih GPU u 1 cugu)
------------------------------------------------------------
-BoundingSphere for each model
-BoundingFrustum for camera
-check kamera Bounding with model Sphere
------------------------------------------------------------
Group all objects that use the same texture/material properties together (and send to GPU)
The key is not minimising calls but minimising the amount of changes in state (textures/shaders etc) required across the scene.
------------------------------------------------------------

E sada ako neko ima iskustva u tome sta iskoristiti / iskombinovati od ovoga (ili ako postoji jos neki pristup) ?

Hvala

poz

PS.Dobro bi doslo i neko parce koda koje radi ispravno :D


[ tosa @ 19.07.2012. 13:58 ] @
Pa svakako ce ti trebati neki visibility culling. Posto je struktura relativno ravna (grad) onda je quad tree sasvim ok. Kada izolujes vidljive celije quad tree-a onda radis frustum culling za svaku kucu/zgradu/objekat.
Da li ces da koristis sfere ili AABB nije preterano vazno jer ce ti svakako broj vidljivih zgrada pasti drasticno. Pretpostavljam da nisu providne zgrade, tj. da nemas transparenciju - onda ih sortiras po udaljenosti od kamere i crtas od blize ka daljim, da bi lepo koristio Z buffer.
Ove ostale optimizacije su u redu svaka za sebe ali stvarno zavisi, pre svega, od podataka koliko svaka ima smisla. Ja ti predlazem da odradis prvo quad tree/frustum cull pa da onda vidis da li to radi dovoljno brzo - ako ne radi onda da vidimo sa cim radis (podaci).

Za kod ce morati neko drugi da se javi jer ne koristim C# :)
[ bondja @ 19.07.2012. 14:42 ] @
Hvala Toso!

"Ove ostale optimizacije su u redu svaka za sebe ali stvarno zavisi, pre svega, od podataka koliko svaka ima smisla" - pa to je, znaci najvise ce zavisiti od modela / tekstura koje imam...

Nisam pomenuo LOD - da se ucitavaju lakse teksture u zavisnosti od razdaljine - ovo ce da ubrza, ali ce mozda ruzno da izgleda... :(

Nadao sam se da postoji neki opstiji pristup, gde moze da se napravi poredjenje npr ovako nesto:

Npr imamo 1000 objekata koji treba da se iscrtaju, sledeci pristupi odreduju sta treba da se zaista i nacrta:

- quad tree - crtaj samo 120 objekata
- frustum culling - crtaj 90
- occlusion culling - crtaj 60
- LOD - crtaj 60, ali brze iscrtavanje (pitanje koliko)
- hardware instancing - brze ako ima vise istih objekata (a uglavnom ima)

Brojevi su onako nabacani, ali pokazuju koliko bi ove tehnike bile efikasne...

Ali ako svako ovo iscrtavanje zavisi od podataka (modela/tekstura), to znaci da cu morati da eksprimentisem :)

PS. nasao sam primere gde se crtaju tereni (primenjuju ove pristupe), ali nigde da se crta grad.
Ono sto je vazno napomenuti, da bi ipak trebalo da imam i sunce + senku!

poz

[Ovu poruku je menjao bondja dana 20.07.2012. u 09:13 GMT+1]