PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Benutzung der GraKa mal ganz anders. Möglich?


SimonX
2003-05-11, 14:37:25
Hallo,

Gibt Möglichkeiten eine Graka für ganz andere Zwecke als Grafikrendering zu benutzen?

Ich weiss vom Amiga das dort mit dem Blitter z.b. Life gemacht werden konnte. Waren so 8 Blitter Operationen notwendig um einen Life schritt durchzuführen. Und das bei konstanter Performance, egal wieviel life-punkte schon lebten. (und das natürlich sehr schnell, weil vollständig in hardware ausgeführt)

Mit dem Blitter konnte man logische Operation wie z.B. AND, OR, NOT usw. auf 2 Source mit einem Ziel (wobei das Ziel auch logisch verwendet werden konnte) ausführen.

Wenn ich mir nun z.b. OpenGL anschaue, wie könnte ich ähnliches machen?

Z.b. würde ich gerne sowas wie: Welche Objekte sind in einem bestimmten Range um ein Objekt.
Das würde ich mit einer 2d map und punkten machen. Die Farbe wäre die Objekt-id. Dann würde ich einen Kreis als Maske über die Position des einen Objektes legen und dann irgendwie die übrigen gebliebenen Punkte anschaun. Das Problem hier ist, wie man die übrig gebliebnen Punkte findet ohne den ganzen Kreis abzusuchen.

Also meine Frage: Gibt es für moderne GraKas API's mit denen man logische Operation mit 3 sourcen und einem Ziel machen kann? Können Grakas das überhaupt?

Ich suche was, was man unter Linux verwenden kann. (also OpenGL, oder direkt an die Graka hardware)


TYI,

Simon.

nggalai
2003-05-11, 14:40:43
Passt hier glaub' besser rein.

93,
-Sascha.rb

SimonX
2003-05-11, 15:03:06
Glaube ich eigentlich nicht, da ich Wissen von Leuten brauch die sich mit Grafikrendering auskennen.

Das ist eine spezifische Frage, wie man sowas über OpenGL oder anderen API programmieren kann. Es hat nichts mit allgemeinen Technologygeschafel zutun.

SimonX
2003-05-11, 15:09:46
Also Grafik&Rendering scheint irgendwie nicht richtig zu sein. Da spricht ja keiner vom Programmieren.


Bitte nach

3DCenter Forum > S o f t w a r e - H i l f e F o r e n > Programmierung

moven.

Gibt es andere gute Foren, wo fähige Leute schreiben und antworten. Leider kann ich nicht mehr auf die Newsgroup comp.graphics.algorithms drauf, da ich keine News-Verbindung habe. Weiss jemand wie man da ran kommt?

Demirug
2003-05-11, 15:42:34
Technologie passt doch ganz gut. Es geht ja erst mal um die generelle Problematik.

In gewissen Bereichen kann man mit einer Grafikkarte auch irgendwelche anderen Dinge als das normale Rendern tun. Primär bieten sich da die Pixelshader an.

Die praktische Verwendbarkeit solcher Lösungen ist aber stark eingeschränkt. Für eine Operationen lohnt es sich nicht weil der Overhead für das kopieren der Daten zur Grafikkarte und das zurücklesen in keinem Verhältniss zum Gewinn an Rechenleistung darstellt.

In Anwendungen die nebenbei auch noch was richtiges rendern kann man das dann ganz vergessen da das zurücklesen hier zu einer Blockade führt.

SimonX
2003-05-11, 16:08:37
Was ich eigentlich machen will ist (wie in meiner alten Post geschrieben) einen nearest neighbar search (mit LOS) und das für einen Spiel-Server, der also sonst keine Grafik macht.

Ich denke mal anstatt einen BSP Tree dynamisch zu Verwalten läd man einfach eine abgespeckte Zone in die Graka und zeichnet die Szene aus sicht des Objekts für das man den LOS machen möchte.

Kann man den View so definieren, das man 360 Grad dem Bildschirm sieht?

Dann muss man nur noch die verschiedenen Farben zusammen sammeln und schon hat mal alle Objekte die sichbar sind.

Das kann man alles in low-res machen und müsste eigentlich sehr schnell sein, falls man schnell alle verschiedenen Farben sammeln kann und an die Applikation melden kann.

SimonX
2003-05-11, 16:44:02
Also, ich würde das wie folgt machen.

jeder Spieler oder Mob wird aus 6 Dreiecken dargestellt. Die Dreiecke bekommen genau eine Farbe. Die Farbe entspricht der Objekt-Id.

Ich habe eine GF3Ti200. Codecreature sagt mir das meine Graka so 10 Millionen Poly/s zeichenen kann. (mit pixel-shader, spiegelungen, texturen und licht)

Gehen wir mal von 2000 Spielern + 2000 Mobs aus. Dann kommen wir auf 24000 Polygone. Das würde bedeuten das wir pro Sekunde 416 totale line of sights berechnen können. Da diese Polygone aber keine Texturen haben und kein Licht usw. und da die Szene auf low-res brechnet wird gehe ich mal von einem Faktor 6 schneller aus. Das wären 2500 totale LOS/sec.

LOS müssen nur berechnet werden wenn Spieler/Mob was macht. Ein totales LOS gbit alle line of sights zu allen Mob/Spieler an und das muss auch nicht ständig gemacht werden. (nur wenn wirklich eine Aktion ausgeführt werden soll)

Wenn man den LOS zwischen einem Objekt und einem spezielle anderen haben will, dann kann man den View so einschränken und dann dürfte es noch viel schneller werden.

Ich denke schon, das die Verwendung von GraKa in Servern echt hilfreich ist. Das Beispiel oben ist ein absolutes Extrem. Ein grosses Szenario wäre vielleicht 200 Spieler + 200 Mobs und dann würde man auf 25000 totale LOS/sec kommen (40usec pro totalem LOS). Da kann keine CPU mithalten.

Vorraussetzung dafür wäre, das man schnell die verschieden Farben sammeln kann. Wie könnte man den Pixelshader dafür verwenden?

Demirug
2003-05-11, 16:53:39
Ich sehe da primär ein grosses Probleme.

Man müsste ja für jeden Spieler und Bot die Szene berechnen. das sind dann laut deinen Angaben so zwischen 400 und 1300+ Szenen die berechnet werden müssen. Eine 1 GHZ CPU schafft etwa 25000 Batches/s. Bei 500 zu prüfenden Objekten kommen wir auf gerade mal 50 Batches pro Object und Sekunde. Wenn man jetzt nur 10 mal pro Sekunde prüfen möchten bleiben pro Objekt gerade mal 5 Batches übrig. Damit kann man nun wirklich nichts mehr machen.

Daneben könnten sich noch abhängug von der Grafikkarte/Treiber andere Probleme ergeben.

Demirug
2003-05-11, 17:12:49
Originally posted by SimonX
Also, ich würde das wie folgt machen.

jeder Spieler oder Mob wird aus 6 Dreiecken dargestellt. Die Dreiecke bekommen genau eine Farbe. Die Farbe entspricht der Objekt-Id.

Ich habe eine GF3Ti200. Codecreature sagt mir das meine Graka so 10 Millionen Poly/s zeichenen kann. (mit pixel-shader, spiegelungen, texturen und licht)

Gehen wir mal von 2000 Spielern + 2000 Mobs aus. Dann kommen wir auf 24000 Polygone. Das würde bedeuten das wir pro Sekunde 416 totale line of sights berechnen können. Da diese Polygone aber keine Texturen haben und kein Licht usw. und da die Szene auf low-res brechnet wird gehe ich mal von einem Faktor 6 schneller aus. Das wären 2500 totale LOS/sec.

LOS müssen nur berechnet werden wenn Spieler/Mob was macht. Ein totales LOS gbit alle line of sights zu allen Mob/Spieler an und das muss auch nicht ständig gemacht werden. (nur wenn wirklich eine Aktion ausgeführt werden soll)

Wenn man den LOS zwischen einem Objekt und einem spezielle anderen haben will, dann kann man den View so einschränken und dann dürfte es noch viel schneller werden.

Ich denke schon, das die Verwendung von GraKa in Servern echt hilfreich ist. Das Beispiel oben ist ein absolutes Extrem. Ein grosses Szenario wäre vielleicht 200 Spieler + 200 Mobs und dann würde man auf 25000 totale LOS/sec kommen (40usec pro totalem LOS). Da kann keine CPU mithalten.

Vorraussetzung dafür wäre, das man schnell die verschieden Farben sammeln kann. Wie könnte man den Pixelshader dafür verwenden?

Das Zählen der Farben muss von der CPU gemacht werden und dazu muss der Buffer in den genrendert wurde zurück in den Hauptspeicher kopiert werden. Pixelshader nützen da derzeit leidern nichts.

Mit mal 6 hast du etwas zu grozügig gerechnet. Die ti200 dürfte eher so im Bereich von max 30 M Vertex/s liegen.

Bei deiner Optimierung gebe ich dir Grundsätzlich recht. Allerdings hängt es nicht davon ab ob der entsprechende Spieler/Bot selbst etwas tut sondern ob sich in seinem Sichtbarkeitsbereich etwas tut. Um eine Trivialprüfung kommt man also auf keinen Fall herum.