Archiv für die Kategorie ‘World-Editor’

Bald geht es endlich mit dem World-Editor weiter…

Freitag, 24. September 2010

So, Freunde! Es ist zwar wahr, dass hier nicht gerade viel passiert und dies leider auch ein wenig die tatsächliche Entwicklung widerspiegelt, die im Hintergrund stattfindet. Jedoch bin ich nicht ganz untätig. Das geplante und bereits schon einmal angesprochene XML-System ist fertig und bereits integriert: GUI-Elemente müssen jetzt nicht immer zwangsläufig im eigentlichen Code programmiert werden, sondern lassen sich nun über eine Spezifikation in XML definieren. Lediglich für die Logik muss dann noch ausführbarer Programmcode her, der aber gerne alternativ zu C++ auch in Ernie-Script verfasst werden kann.

Ansonsten beschäftige ich mich gerade mit einer kleinen Zusatzkomponente, die es unterstützt, mehrere kleinere Grafikdateien zu laden und diese möglichst “platzsparend angeordnet” in eine große Textur zu packen. Den Grund hierfür erkläre ich euch natürlich: Fakt ist, dass ein ständiger Wechsel des “States” der Grafikkarte enormen negativen Einfluss auf die Performance nimmt. Das bedeutet, je seltener der Zustand der Grafikkarte geändert wird — z.B. durch das Wechseln der aktuellen Textur oder Setzen von Shader-Optionen —, desto schneller läuft das gesamte Spiel. Also bietet es sich an, häufig verwendete Pixelgrafiken gebündelt in eine Textur bzw. ein paar wenige Texturen zu packen, weil somit die aktuell gesetzte Textur nicht unbedingt gewechelt werden muss, wenn verschiedene Grafiken dargestellt werden sollen. Gut, gar kein Problem: Ich nehme mir ein Bildbearbeitungsprogramm und klatsche die Grafiken einfach neben- und untereinander in diese Textur in Form einer größeren Pixelgrafik. Blöd wird es erst, wenn plötzlich unvorhergesehen viele neue Grafiken hinzukommen. Jedesmal muss die Textur manuell bearbeitet oder vielleicht sogar eine weitere Textur angelegt werden. Das muss ja nicht nur über ein beliebiges Bildbearbeitungsprogramm mühselig aktuell gehalten werden, sondern entsprechende Texturen und die Koordinaten der einzelnen Bilderchen innerhalb der Texturen müssen im Programmcode gepflegt und verwaltet werden. Der Trick ist also, dies alles zu automatisieren.

Insbesondere für den World-Editor, der ja seit ca. einem Jahr die eigentliche Hauptbaustelle darstellt, werden viele kleine Bilderchen benötigt, die die verschiedensten Bearbeitungs- und Einstellungsmöglichkeiten repräsentieren — vergleichbar mit den Toolbars und Shortcut-Leisten üblicher Computerprogramme, wie sie wohl so gut wie jeder kennt. Wenn es jetzt bald losgeht, dass ich hier zack-auf-zack neue Features dem World-Editor hinzufügen werde, dann muss ich mich so nicht mehr um eine geeignete Organisation der kleinen Grafiken kümmern. Das passiert alles automatisch. Die Grafiken bleiben dann sogar in ihren Originaldateien erhalten und sind leicht austauschbar und vor allem erweiterbar.

Hierfür muss ich jetzt noch ein paar Zeilen Code schreiben. Ganz trivial ist die Lösung des Problems übrigens nicht. Das Stichwort hierzu ist “Bin-Packing” bzw. “2D-Bin-Packing”, wofür es eine überschaubare Anzahl an ganz vernünftigen Ansätzen, aber leider keine “Killer-Lösung” gibt. Das Problem ist nämlich NP-hart und selbst die Branchen, in denen die Kohle steckt, haben mit dem Finden einer jeweils geeigneten Lösung zu kämpfen — z.B. um ein möglichst optimales Design eines Mikrochips zu realisieren oder einen LKW möglichst “geeignet” zu beladen, wofür jeweils Bin-Packing-Algorithmen angewendet werden. Ich bediene mich jedoch einer relativ einfachen Variante des 2D-Bin-Packings. Entsprechende Funktionalität kann ich ja bei Bedarf später noch optimieren.

TIGHT GANG!!

Geburtstag

Freitag, 27. November 2009

Heute ist ein ganz besonderer Tag, denn Elsa und Cyber haben wieder beide Geburtstag. Cyber spricht ja nicht gerne über sein Alter, aber Elsa wird heute 30. Ein kluger Kopf mit entsprechenden Hintergrundinformationen kann somit auch auf Cybers Alter schließen.

Sehr viel über die beiden zu berichten gibt es darüberhinaus leider nicht, außer natürlich, dass beide enorm auf viele teure Geburtstagsgeschenke abfahren, das ist ganz klar. Aber das wissen ja eh alle.

Mein Geschenk an Elsa und Cyber ist ein Materialeigenschafteneditor. Dieser ist dazu da, um Texturen verschiedener Art mit Farben und Shadern zu kombinieren und diese Kombinationen als “Materialen” zu speichern. Die über den Materialeigenschafteneditor gepflegten Materialien können dann verwendet werden, um sie einzelnen Objekten in der Spielwelt zuzuweisen. Die Texturen der Materialien nehmen dabei verschiedene Rollen ein, z.B. gibt es eine Textur, die die eigentlichen Pixelinformationen des jeweils darzustellenden Objekts enthält. Weitere, optionale Texturen enthalten Informationen über die Oberflächenbeschaffenheit (z.B. in welcher Richtung das Licht reflektiert wird). Die Texturen werden dann mit spezifizierten Farben gemischt, um generische Texturen individuell wiederverwenden zu können. Über die Auswahl einer konkreten Shader-Combo wird angegeben, in welcher Art und Weise die Textur- und Farbinformationen dann letztlich zur Darstellung kombiniert werden.

Es ist mir etwas peinlich, denn der Materialeigenschafteneditor ist noch gar nicht ganz fertig. Aber das merken Elsa und Cyber heute sowieso nicht, hahaha. Also hab ich noch ein wenig Zeit. Aber hier ist ein erster Screenshot:

World-Editor: Erster Screenshot

Freitag, 06. November 2009

Heute gibt es den ersten Screenshot vom World-Editor zu sehen. Besonders umfangreich ist das Werkzeugarsenal des World-Editors bisher noch nicht. Aber das wird es erstens bald sein und zweitens kann man bereits “Blöcke” platzieren, auf denen Cyber dann später rumlaufen und -springen wird, sowie von der Undo/Redo-Funktionalität Gebrauch machen:

Im Screenshot mag der Inhalt des World-Editors noch recht langweilig aussehen. Das liegt daran, dass die “Welt” im World-Editor auf Basis ganz simpler Techniken visualisiert wird und das bislang noch ohne individuelle Texturen der Blöcke. Erstens, weil es wenig sinnvoll ist, den World-Editor mit raffinierten Rendering-Techniken auszustatten, weil, zweitens, durch die schlichte Darstellung der Überblick erhalten bleibt und so der Anwender nicht durch ein völlig überladenes Grafikgeballer in den Wahnsinn getrieben wird. Schließlich müssen die “Welten” ja wie auf einem Reißbrett regelrecht konstruiert werden. Hübsch aussehen müssen sie erst später, wenn Cyber sich in ihnen rumtreiben wird. Dann werden sie mit anderen Techniken und ausgefeilten Raffinessen dargestellt. Das sieht dann richtig geil aus — hoffentlich! Yeah, Baby!