Zurück FunOrb Central: Teil 3 - FunOrb-Grafik

Projekttagebuch-Banner - FunOrb Central

22.07.2009 - FunOrb-Grafik

Ein Teil der neuen Technologien, die wir in FunOrb Central einbauen, besteht aus Verbesserungen an den Grafik-Softwarebibliotheken.

Momentan laufen alle FunOrb-Spiele im Software-Grafikmodus. Dabei werden alle Grafiken vom Prozessor des Rechners berechnet, der die Bilder Pixel für Pixel aufbaut.

Dadurch haben die Grafiker für unsere FunOrb-Spiele sehr viel mehr Freiheiten und wenig Probleme mit der Geschwindigkeit, in der die Spiele laufen. Leider unterliegen unsere Spiele damit einem sogenannten 'fill-rate limit', sodass jedes geänderte Pixel durch eine Zeile Java-Quelltext angestoßen werden muss. Die Performance unserer Spiele wird also größtenteils dadurch beeinflusst, wie viele Pixel wir für jeden Frame benötigen.

Das beeinflusst unter anderem auch die Auflösung, in der unsere Spiele dargestellt werden können. Gehen wir davon aus, dass ein normales FunOrb-Spiel mit einer Auflösung von 640x480 Pixeln dargestellt wird (also insgesamt 300.000 Pixel) und mein Computer in der Lage ist, das Bild pro Sekunde 30 mal neu aufzubauen (30 FPS). Dementsprechend kann mein Computer ungefähr 9.000.000 Pixel pro Sekunde setzen/zeichnen. (Damit garantieren wir, dass jedes Pixel einmal gesetzt werden kann, obwohl das oft nicht möglich ist.)

Jetzt skalieren wir das Ganze mal. Die nächste Standardauflösung ist 800x600. Um unser Spiel jetzt auf dem Bildschirm darzustellen, müssen 500.000 Pixel pro Frame gesetzt werden. Durch das Leistungsbudget meines Rechners (9.000.000 Pixel pro Sekunde) sinken meine FPS also auf 19 - was natürlich ein bisschen langsam wird. Bei der nächsten Auflösung (1024x768) sinken meine FPS auf 12 und bei den heutzutage standardmäßigen Auflösungen (1680x1050 - 5FPS) wird alles unerträglich zähflüssig.

Durchkreuzte Pläne (in hoher Auflösung)
Durchkreuzte Pläne (in hoher Auflösung)
Hier könnt ihr eine größere Version dieses Bilds sehen.

Um unsere FunOrb-Spiele also an die höheren Auflösungen anzupassen, müssen wir eine andere Herangehensweise ausprobieren. Viele neuen Rechner haben einen GPU (Grafikprozessor), mit dessen Hilfe Grafiken schneller berechnet werden können. Damit können moderne Spiele (wie RuneScape HD) auch in hohen Auflösungen blitzschnell dargestellt werden. Das möchten wir natürlich auch für unsere FunOrb-Spiele, die im Central laufen werden, erreichen.

Der Hauptvorteil dieser Hardwarebeschleunigung (wie GPUs) ist natürlich, dass sie dem CPU Arbeit abnimmt. Bei 'Kickabout League' beispielsweise könnte der GPU die Arbeit übernehmen, alle Pixel der Bodentextur auf dem Bildschirm darzustellen, während der CPU die Berechnungen des Ballphysik übernimmt. Da der GPU eine spezielle Hardware ist und somit nicht dem Mehraufwand eines Betriebssystems oder einer Java-Umgebung unterliegt, kann er viel mehr Frames pro Sekunde berechnen.

Wir würden jetzt gerne unsere Spiele so anpassen, dass sie höhere Auflösungen (angefangen mit 800x600) unterstützen. Außerdem möchten wir, dass unsere Spiele den Breitbildmodus (Widescreen) unterstützen.

Kickabout League im Breitbildmodus
Hier ein Beispiel für Kickabout League im Breitbildmodus
Hier seht ihr das komplette Bild.

Ihr könnt euch bestimmt schon denken, warum wir das bisher noch nicht getan haben. Es gibt nämlich zwei grundsätzliche Probleme mit Hardwarebeschleunigung, auch wenn diese technisch möglich ist. Viele der heutzutage üblichen GPUs unterliegen sogenannten 'fixed-functions' - das heißt, dass sie nur eine bestimmte Anzahl an Operationen ohne Performanceverlust ausführen können (im Gegensatz zu CPUs, die man so programmieren kann, dass sie eine fast unbegrenzte Anzahl berechnen können). Bei vielen Spielen sollte das problemlos funktionieren, wie 'Arkanisten' beispielsweise, bei dem nur ein paar Sprites auf dem Schirm dargestellt werden müssen, was durchaus im Rahmen der üblichen Beschleuniger liegt. Bei 'Sternenkanone' ist das beispielsweise ganz anders, da in diesem Spiel viele Effekte (Skizzierung, Blurring, Leuchteffekte, etc.) benutzt werden. In einem solchen Fall müssen wir uns überlegen, ob wir die bereits vorhanden Effekte leicht portieren können, oder ob sie angepasst werden müssen, um die zusätzliche Hardwarebeschleunigung zu unterstützen.

Natürlich spielt auch Kompatibilität eine Rolle. Falls ihr euch jemals die Java-Optionen auf der FunOrb-Webseite angesehen habt, werdet ihr festgestellt haben, dass es ein signiertes und ein unsigniertes Applet gibt. Diese Applets haben natürlich ein bisschen Einfluss auf die Performance eures Rechners, beispielsweise, ob eine Hardwarebeschleunigung benutzt werden darf oder nicht. Spieler, die das signierte Applet nicht benutzen können (beispielsweise aufgrund von Sicherheitsmaßnahmen am Arbeitsplatz oder in Internet-Cafes), oder deren Hardware nicht gut genug ist, müssen natürlich trotzdem reibungslos spielen können, sodass zusätzliche Entwicklungszeit für das Design, die Entwicklung und das Testen notwendig ist.

Die Vorteile sind es jedenfalls wert. Es ist uns höchstwahrscheinlich nicht möglich, alle Spiele mit der Veröffentlichung von FunOrb Central an die höheren Auflösungen anzupassen, aber die Fundamente wurden gelegt. Ich freue mich schon darauf, unsere Spiele mit schönen Auflösungen zu spielen und gleichzeitig mehr Details einbauen zu können. Wie ihr am Beispiel der Bilder für 'Kickabout League' und 'Durchkreuzte Pläne' sehen könnt, wird es sich lohnen.

Mod Artifice
FunOrb-Entwickler


Zurück zum Anfang