PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geometrie Instancing


Geldmann3
2012-01-08, 11:22:42
Kann mir jemand genauer erklären was diese Technik bewirkt und sie grob funktioniert?
Dieser Artikel (http://en.wikipedia.org/wiki/Geometry_instancing) sagt ja nicht gerade sehr viel darüber aus.

Mosher
2012-01-08, 12:09:07
Ist doch eigentlich gut beschrieben..
Du renderst Objekte, in denen sich wiederholende Strukturen vorkommen (Bäume, Gebäude..),indem du ein und das selbe Gitter mehrmals renderst. Dabei wird vermieden, dass die Struktur übermäßig periodisch wirkt.
Die gerenderten Gitter können sich ein einzelnen Parametern wie Farbe, Transparenz. etc. unterscheiden

Monger
2012-01-08, 12:10:39
Es gab mal ne schicke ATI Tech Demo dazu... leider finde ich auf der Originalseite nichts mehr, sondern nur noch Videos davon:

http://www.youtube.com/watch?v=dgoTMYYyDuU

Sinn der Geschichte ist halt, dass du den selben Mesh bzw. das selbe Model nur einmalig im Speicher hältst, und dann beliebig oft über den Screen duplizierst. Dann muss man noch die Animationen desynchronisieren, und man bekommt halbwegs organisch aussehende Massenszenen.

Coda
2012-01-08, 12:28:52
Du hast auch sonst den Mesh nur einmal im Speicher. Das ist eine reine Performance-Optimierung um Drawcalls zu sparen.

del_4901
2012-01-08, 13:59:20
Du hast auch sonst den Mesh nur einmal im Speicher. Das ist eine reine Performance-Optimierung um Drawcalls zu sparen.
Naja man kann auch komplexere Gegenstaende aus einfacheren Instances zusammenbauen in dem Fall spaart man schon Speicher. (Wandpanele, Pfeiler, etc.) Und man ist sogar ein kleinwenig teurer im Draw als wenn man die Objekte zusamengemerged haette. (fehlendes culling, kleiner overhead) die Einzelteile einzeln zu zeichnen waehre von vornherein keine Option gewesen.

Coda
2012-01-08, 14:04:03
Err, man kann das auch sonst mit dem gleichen Mesh machen?

del_4901
2012-01-08, 14:09:55
Err, man kann das auch sonst mit dem gleichen Mesh machen?
Beispiel: du willst 3 Haeuser zeichnen. Alle Gegenstaende, Mauern etc. einzeln zu zeichnen ist zu teuer. Deswegen fasst man die Teile der einzelnen Haeuser zusammen, was mehr Speicher kostet oder man zeichnet die Teile als gesamtes mit Instancing.

Coda
2012-01-08, 14:16:40
Letzteres kann ich auch ohne Instancing, nur langsamer.

Was genau hab ich anderes gesagt? Es ist eine Performance-Optimierung.

del_4901
2012-01-08, 14:22:11
Letzteres kann ich auch ohne Instancing, nur langsamer.

Was genau hab ich anderes gesagt? Es ist eine Performance-Optimierung.
Wenn du in der Produktion bist und ein Framelimit einhalten musst, dabei den Level auch nicht komplett umbauen moechstest, dann hast du nicht die Wahl alles einzeln zu zeichnen. Dann hast du die Wahl zw. mergen was schneller ist da besseres culling und weniger overhead aber mehr Speicher braucht. Und Instancing was weniger Speicher braucht, sich aber schlechter cullen laesst und einen kleinen overhead mitbringt.

decimad
2012-01-14, 10:16:05
Hallo,
ich stecke ja nun länger nicht mehr in der Materie drin, aber ich verstehe nicht, wie durch Mergen das Culling besser wird. Vielleicht deute ich aber das Wort "Mergen" nicht richtig.

Viele Grüße,
deci

del_4901
2012-01-14, 11:35:03
Hallo,
ich stecke ja nun länger nicht mehr in der Materie drin, aber ich verstehe nicht, wie durch Mergen das Culling besser wird. Vielleicht deute ich aber das Wort "Mergen" nicht richtig.

Viele Grüße,
deci
Der Unterschied besteht in den Objekten die zusammengefuehrt werden:

1. a) Einzelne Haeuser mergen:
- sind aus Ihren Grundbausteinen zusammengefuegt
- Panele, Tueren, Fenster etc.
- lassen sich auch einzeln cullen
- Speicher skaliert mit der Anzahl der Variationen
1. b) Mehrere dieser Haeuser lassen sich ueber instancing zeichnen
- Einschraenkung in den Variationen der Haeuser
- lassen sich nur in der Gruppe cullen
2) Grundbausteine instancen:
- Gruppen von Haeusern werden aus ihren Grundbausteinen zusammengesetzt, aber die Grundbausteine werden alle instanced gezeichnet
- man kann nur ganze Haeusergruppen cullen
- man hat mehr Variationsmöglichkeiten an Haeusern als mit (1.b)

(2) koennte man jetzt feingranularer gestallten indem man versucht nur Grundbausteine von einem Haus zusammenzufassen, allerdings lohnt sich instancen erst ab einer gewissen kritischen Masse (ca 10³) von Instances das koennte dazu fuehren das (1.b) gar nicht angewendet werden kann weil man gar nicht genug Haeuser hat. Wenn man jetzt (2) waehlt, dann kann es auch da passieren dass man mehr Last auf CPU hat als mit (1) wenn man immernoch zuwenig Instances zusammenkratzen kann. (2) ist auch immer etwas teuerer als (1) auf der GPU weil einzelne Hauser mit (1) geculled werden koennten. (2) ist dafuer aber viel guenstiger im Speicher als (1). (2) hat dann auch noch den Vorteil dass man die Hauser verschieden zusammen setzen kann und damit mehr Variationsmoeglichkeiten als mit (1.b) bekommt. Letzteres laesst sich auch mit (1.a) realisieren allerdings wird es dann ab einer bestimmten Anzahl an Variation teuer im Speicher.

Bei 2 Hausern wird man warscheinlich einfach nur (1.a) mergen. Und kann jedes fuer sich cullen.

Wenn man 1000 exakt gleiche Haeuser hat wuerde man instancen mit (1.b) hat aber die Gruppe als Ganzes zu zeichnen.

Wenn man 10 Variationen von Hausern hat die jede fuer sich aber aus 100 Einzelteilen zusammengesetzt werden dann wuerde man mit (2) instancen. Die zu cullenden Gruppen sind jeweils nur 10 Haeuser. Der Vorteil im Speicher koennte schon bei weniger Variationen signifikant werden.

Weder zu instancen und zu mergen ist manchmal keine Option weil die Haeuser so komplex sind oder soviele Haeuser vorhanden dass man einfach zuviele Drawcalls hat.

qu3x^
2012-01-14, 13:42:56
Netter Thread wollte schon immer mehr über Geometrieinstanzierung von eurer Seite höhren.