workshop09

Top  Zurück  Weiter

Workshop 09: Entities

Entities sind 3D-Objekte, die sich in Ihre Level einfügen lassen. Es gibt vier verschiedene Entity-Typen: 'Modelle', 'Sprites', 'Map-Entities' und 'Terrain-Entities'. Im Kapitel Entities des Referenzhandbuches finden Sie eine detaillierte Liste ihrer Features und Unterschiede. Dieser Workshop gibt Ihnen einige Hinweise darauf, wonach Sie Ihre Entities auswählen sollten.

Modell-Entities

Ein Modell ist ein animiertes 3D-Objekt, welches als Datei mit der Extension ."mdl" gespeichert ist. Ein Modell besteht aus verschiedenen aneinander gefügten Dreiecken (auch als Flächen oder Polygone bekannt) sowie einer darübergespannten Haut oder "Skin" und wird mit der entsprechenden Modell-Software wie z. B. MED (frei als Download von Conitec's Webseite), 3D Studio Max, Maya, Lightwave, Milkshape usw. erstellt. Immer dann, wenn wir ein animiertes 3D-Objekt (für den Player, seine Feinde, einige Tiere etc.) brauchen, müssen wir dazu ein Modell nehmen. Wir sollten für sämtliche Personen in unserem Spiel Modelle verwenden.

Wenn Sie vorhaben, ein Spiel von kommerzieller Qualität zu entwickeln, brauchen Sie ein Polygon-Budget. Wenn nämlich jedes in Ihrem Spiel vorkommende Wesen zehntausende von Polygonen hat, brauchen Sie einen schnellen High-End PC, damit das Spiel läuft. Ok, Sie mögen einen schnellen Rechner haben, aber wie steht es mit Ihren Kunden? Werden die Ihr Spiel auf dem schnellsten und besten PC am Markt laufen lassen? Ich glaube eher nicht...

Es mag einem Neuling seltsam vorkommen, aber wir leben in keiner "perfekten" virtuellen Welt. Wenn Sie mit Ihrem Spiel also Geld verdienen wollen, müssen Sie es sorgfältig planen. Wie viele Monster sind gleichzeitig sichtbar? Soll ich für meine Bäume Modelle oder einfache 2D-Bilder nehmen? Brauche ich den echt gut aussehenden Explosionseffekt wirklich?

Lassen Sie mich doch gleich mal ein Testlevel auf diesem PC erstellen: es ist ein Pentium 4 mit 2GHz und einer GeForce4 TI 4200-Karte. Gut, ich habe ein Level mit 8 Kugeln von denen jede 10.000 Polygone hat, gemacht. Das ergibt zusammen 80.000 Polygone und die Frame-Rate ist ungefähr 30fps (Frames pro Sekunde) was gerade für einen Shooter ziemlich gut ist. Ich weiß, dass viele meiner potentiellen Kunden langsamere PCs haben, also setze ich mir ein Polygon-Budget von 30.000. Wenn ich nun ein 3D-Strategiespiel machen will und vorhabe, bis zu 50 Einheiten gleichzeitig auf dem Bildschirm sichtbar zu haben, sollten diese jeweils mit 30.000 : 50 = 600 Polygone auskommen; alles klar?

Es ist grundsätzlich eine gute Idee, die Anzahl der Polygone eines Modells (die Anzahl der Dreiecke) so gering wie möglich zu halten. Werfen wir einen Blick auf die Abbildung unten:

w09_01

Die beiden Soldaten sehen ziemlich gleich aus, aber der 'Modellbauer' hat es hingekriegt, beim rechten Modell 250 Polygone einzusparen. Dadurch kann ich 46 anstatt 33 Modelle von dieser Sorte in mein Level setzen und sie können alle gleichzeitig sichtbar sein!

Wichtiger Tipp: Nur die am Bildschirm sichtbaren Modelle haben in der Regel einen Einfluss auf die Frame-Rate. Wenn Sie also 300 Feinde in Ihrem Spiel haben, der Spieler aber nicht mehr als 10 auf einmal sieht, brauchen Sie sich keine Sorgen zu machen: die Engine denkt, es gäbe nur 10 Feinde und daher bleibt die Frame-Rate oben.

Ein Modell mit jeder Menge von Polygonen kann jeder machen, ein guter 'Modellbauer' aber kann ohne allzuviele Dreiecke ein eindrucksvoll aussehendes Modell gestalten. Sie sollten nicht vergessen, dass nicht nur die Charaktere wertvollen Speicherplatz verbrauchen: Ein Haus, ein Auto oder sonst eine Einheit im Level wird zusätzliche Resourcen verbrauchen. Die gute Nachricht: Acknex bietet die perfekten Tools mit deren Hilfe Sie Ihr Level optimieren können. Im Acknex User Magazin (AUM) finden Sie diverse Artikel und Code-Beispiele dazu.

Öffnen Sie im Modell-Editor (MED) irgendein Modell, wählen Sie File / Model Properties und Sie sehen seine Anzahl an Polygonen (Faces):

w09_02

 

Sprite Entities

Sprites sind nichts weiter als in einem Malprogramm erstellte 2D-Bilder. Es sind keine 3D-Objekte - stellen wir sie uns vorerst als extrem dünne Papierblätter vor. Sprites lassen sich für Panels, Strassenschilder, Gemälde, 2D-Spiele, Spezialeffekte usw. verwenden. Sogar als vorgetäuschte 3D-Objekte wie Bäume, Büsche, Gras etc. können wir sie einsetzen.

Erstellen Sie in Ihrem Lieblings-Malprogramm eine Bitmap und speichern Sie sie als pcx-, bmp-, tga- oder dds.-Datei in Ihrem Spiele-Ordner (derselbe in dem Ihre '.wmp'-Level-Datei gespeichert ist) ab. Nun können Sie Ihre Bitmap wie in der folgenden Abbildung ins Level laden:

w09_03

Ganz wie ein Panel mit gesetztem "overlay"-Flag, kann jeder Sprite auch durchsichtige Stellen haben. Für diese 'unsichtbaren' Stellen sollten RGB = 000 sein:

 w09_04

Nun wollen wir mal sehen, wie dieses Sprite in einem Testlevel aussieht:

w09_05

Wenn der Spieler nicht auf die Mauer klettern kann, braucht es kein Modell für die Vase, ein einfacher Sprite sieht genauso aus und verbraucht weniger Videospeicher.

Sprites können auf jeweils eine der folgenden Arten eingesetzt werden:

1) Ausgerichtete, orientierte Sprites, ganz so wie Bilder an einer Wand.

w09_06

Wenn ich im Level um ein ausgerichtetes Sprite herumgehe, sehe ich, dass es nichts weiter, als ein 2D-Objekt ist. Daher wäre es klug, so ein ausgerichtetes Sprite für ein Schild oder ein Gemälde an der Wand zu nehmen, vielleicht auch für einen Blutfleck auf dem Boden etc.

2) Sprites, die sich immer zum Spieler hindrehen.

w09_07

Das ist Ihr üblicher Sprite-Typus, der, den man zur Leistungsoptimierung schwächerer PCs als Fälschung eines 3D-Objekts nimmt. Sie können drumherumgehen so oft Sie wollen - es zeigt Ihnen ständig seine Vorderseite.

Wie erstellen wir einen normalen Sprite? Die Antwort ist leicht: in WED laden wir unseren Sprite ins Level und das war's! Schon haben wir einen gewöhnlichen Sprite, eine Fläche, die dem Spieler immer ihre Vorderseite zudreht.

Wie erstellen wir einen ausgerichteten Sprite? In WED fügen wir den Sprite ins Level ein und ändern dann einen oder mehrere seiner Winkel. So erhalten wir einen Sprite, der uns, je nachdem, wie die Werte für seine Winkel gesetzt sind, als Teppich, Gemälde oder sonst was dient. Klicken Sie in WED mit rechts auf den Sprite, gehen Sie auf "Objekt / Properties und dann auf Position:

w09_08

Die drei änderbaren Winkel sind rot eingekreist. Die (default-) Werte von 0, 0, 0 für "pan", "tilt" und "roll" werden von einem normalen (also nicht ausgerichteten!) Sprite verwendet. Richten Sie irgendeinen dieser Winkel aus und Sie verwandeln einen regulären in einen ausgerichteten Sprite. Sie könnten z. B."pan" auf 0.01 Grad setzen, 'tilt" auf 0.01 oder 67.005 und / oder "roll" auf 55.000 oder 255.000 Grad. Es klappt mit jedem Wert, allerdings sollten Sie sichergehen, dass Ihnen das, was in WED daraus wird, dann auch gefällt, .

Ein Letztes noch, ehe wir mit Map-Entities weitermachen: einige uralte 3D-Beschleuniger stellen Sprites, die größer als 256 x 256 Pixel sind, nicht dar. Wenn Sie also wollen, dass Ihr Spiel auch mit einer Voodoo2 oder Voodoo3-Karte läuft, sorgen Sie dafür, dass Ihre Sprites höchstens 256 x 256 Pixel haben!

Map Entities

Eine Map-Entity ist ein starres 3D-Objekt, das mit WED als separates Stück Level-Geometrie erstellt und als '.wmb'-Datei gespeichert wird. Map-Entities können als bewegliche Level-Teile oder solche, die insgesamt verschwinden, eingesetzt werden: Türen, durchbrechbare Wände, Plattformen, Aufzüge, Fahrzeuge... . Diese Entities sind nichts weiter als kleine, kompilierte Level-Maps, sie können also zur Laufzeit nicht größer oder kleiner werden - wenn Sie dieses Feature brauchen, nehmen Sie ein Modell oder ein Sprite. Sie können jede Level-Datei (z. B. eine einfache Tür) in eine Map-Entity verwandeln indem Sie die '.wmp'-Datei in WED laden oder dort erstellen, sie kompilieren und die '.wmp'- samt der so gewonnenen '.wmb'-Datei in den entsprechenden Level-Ordner kopieren. Im '\prefabs'-Ordner Ihres 3DGS-Verzeichnisses finden Sie jede Menge vorgefertigter Türen, Möbel, Fahrzeuge etc., die Sie kompilieren (build) können.

 

   

Terrain Entities

Ein Terrain besteht aus einer großen, auf ein aus Rechtecken bestehendes Gitter mit aufgespannten Textur, wobei die einzelnen Rechtecke mit Höhen-Werten versehen sind. Werfen Sie hierzu einen Blick auf die Abbildung unten:

w09_10

Die Textur, die das Terrain bedeckt, kann Strassen, Schnee, Felsen usw. beinhalten. Schauen wir uns das Terrain mit einer aufgespannten Textur an:

w09_13

Dieses Bild wurde innerhalb des Modell-Editors MED gemacht, im Spiel sieht das Terrain sogar noch besser aus!

Terrain-Entities lassen sich in MED mit dem Magnet-Tool erstellen oder Sie können von anderen Programmen (Bryce, Terragen etc.) erstellte Höhen-Maps importieren. Eine typische Höhen-Map ist ein Schwarzweiß-Bild, das in etwa so aussieht:

w09_11

Dieses Bild wird von MED in eine Terrain-Entity umgewandelt. Die weißen Bereiche haben größere Höhenwerte, während die dunkleren niedriger sind.

Terrain-Entities werden als .hmp-Dateien abgespeichert. Detaillierte Beschreibungen zu den verschiedenen Entity-Typen finden Sie In WED's Hilfe-Datei. Es gibt folgende Möglichkeiten, Entities zu generieren:

- indem man sie, wie in der folgenden Abbildung, per WED im Level plaziert:

w09_14

- indem man sie mithilfe einer ent-create-Anweisung während der Laufzeit im Level generiert und das sieht so aus:

ent_create ("drone.mdl",vector(100,100,100), start_drone); // generiere eine Drohne

- indem man im Skript eine ENTITY-Definition schreibt:

ENTITY* rocket_ent =
{
   type = "launcher.mdl";
   layer = 10;
   x = 100;
   y = -10;
   z = -10;
   flags2 = SHOW;

}

Wir werden den Code nicht besprechen, aber ich wollte, dass Sie ihn jetzt gleich sehen - es ist nicht so schwierig mit Entities zu arbeiten.

Warum sollten Sie eine Entity im Spiel generieren wollen, wenn Sie sie auch per WED ins Level einfügen können? Nun, vielleicht wollen Sie ja sichtbare Kugeln für Ihre Gewehre haben oder einen Partikelschwarm sobald die Kugel auf eine Wand trifft. Wenn Sie mit einer oder mehrerer Ihrer Waffen 100 Kugeln abfeuern wollen, wäre es nicht besonders klug, sie in Ihrem Level zu plazieren. Besser, Sie holen sie per "ent_create" wenn Sie sie brauchen.

Weiter: Aktionen


Mehr zum Thema: Gamestudio Handbuch ► Entities.