Viele komplizierte Begriffe
Wie jedes Fachthema, bedient sich auch die ganze Spielentwicklung, verschiedenster Fachbegriffe. Als Einsteiger wird man förmlich davon erschlagen, teilweise verängstigt und tut sich sehr schwer… daher mal eine Erklärung der wichtigsten Begriffe und wie diese Dinge zusammen hängen.
Game-Engine
Ursprünglich bezeichnete dies einmal, einfach nur den Programmcode den ein Spieleentwickler erstellt hat, um leichter die absoluten Grunddinge eines Spiels leichter handhaben zu können. Und da hierin so viel Arbeit steckte, ohne das am eigentlichen Spiel gearbeitet wurde. Versuchten die Entwickler diesen Programmcode wiederverwendbar zu machen. Inzwischen enthalten die Game-Engines viel mehr. Sie sind zu einer halbwegs allumfassenden Spiele-Entwicklungsumgebung geworden (inkl. Programmierumgebung/Programmiersprache) und enthalten vorgefertigte Komponenten und Bausteine, für viele der typischen Arbeiten die beim Spieleprogrammieren anfallen. Dabei müssen diese Engines den schmalen Weg beschreiten zwischen „möglichst viel Arbeit für den Spieleentwickler vereinfachen“ und „möglichst vielseitig, um unterschiedlichste Arten von Spielen zu ermöglichen“. Doch nicht allen Engines gelingt dieser Kompromiss gleich gut.
Daher ist die Frage nach „mit welcher Engine mache ich mein Spiel?“ viel entscheidender (bzw. übergreifender) als die Frage „mit welcher Programmiersprache?“.
2D / 3D / 2.5D
Die ersten beiden sollten ziemlich klar sein.
Zu 2D läst sich noch sagen, üblicherweise ist damit ein Spiel gemeint das ohne 3DModelle abläuft, sondern bei dem alles (auch die Spielfigur inkl. Animationen etc.) kleine Bilder sind. Es ähnelt also sehr der Zeichentrick Technik. Aufgrund der Grafik haben diese Spiele ihren ganz eigenen Charm und Style und dieser ist sehr beliebt –> Pixel-Art
3D braucht wohl kaum eine Erklärung. Einzig: Dank der inzwischen sehr mächtigen Game-Engines, sind 3D Spiele nicht mehr viel schwieriger zu programmieren als 2D Spiele (ein Grundsatz der sehr lange Zeit galt, inzwischen aber immer weniger gilt).
2.5D … Dies bezeichnet ein 3D Spiel, bei dem jedoch die Kamera fest genagelt wird wie bei einem 2D Spiel und entsprechend auch die Sicht fest von Oben oder von Vorne auf die Spielwelt gerichtet ist. Zusammen mit Shader, Kamera und Licht Einstellungen, wird der Style eines 2D Spiels nachgemacht. Dies hat den Vorteil, dass nicht alle Grafiken von Hand gemalt werden müssen, sondern Animierte 3D Modelle verwendet werden können.
Zusammenhang: Objekte, Oberflächen, Textur, Lichter und die Kamera
Objekte bestehen aus einer Grundform (Geometrische Form) und einem „darüber gezogenem“ Bild (die Textur), welches dem Objekt die Farben gibt. Im Einfachsten Fall, z.B. einem Butten den der Spieler drücken kann oder ein Sprite/Bild in einem 2D Game, ist dieses Objekt einfach nur eine Quadratische Fläche. Kompliziertere Objekte, bestehen aus vielen solcher Flächen (Polygone). Doch auch wenn diese Objekte durch die Textur nun Farben haben, gibt erst das Licht, dem Objekt auch wirklich sein Erscheinen. Ohne Licht bleibt das Objekt/die Fläche dunkel. Die Kamera sagt nun dem Spiel, wo das Auge des Spielers ist, von dem aus er die Spielwelt sieht. Aus Blickrichtung der Kamera (und „Objektiv Einstellung“ / FOV) wird dann letztlich das Bild für den Bildschirm erzeugt. Dieses erzeugen/berechnen der Bilder, wird als das „Rendern“ bezeichnet, und erfolgt durch Shader Programme die auf der Grafikkarte in Shader Einheiten ablaufen.
Spawnen / NPCs / Spiele KI
NPCs sind „nicht Player Character“. Also alle die Spielfiguren (egal ob Tier, Mensch, Elf etc.) die NICHT von einem Menschlichen Spieler gesteuert werden, sondern durch den Computer. Die durch menschliche Spieler gesteuerten Spielfiguren/Avatare sind die PC (Player Character).
Wenn neue NPC’s frisch erzeugt werden, also z.B. dem Spieler als Kanonenfutter vor die Füße geworfen werden, dann bezeichnet man dieses erzeugen als „spawnen“.
Die Spiele KI, ist übrigens mehr schein als sein ;-) Da Spiele sehr schnell laufen müssen, bleibt oft einfach nicht genug Rechenleistung übrig, um die KI Entscheidungen genau zu simulieren. Meist wird einfach nur ein sehr simples System programmiert. Beispiel: Laufe von A nach B nach C und dann wieder zurück und wenn du einen Player (PC) siehst, dann greife ihn an. … und fertig ist die KI der Wache.
Textur / Bild-Datei
Dies sind die Grundlegenden Grafiken des Spiels. Es sind Bilder/Fotos wie du sie von überall kennst. Doch Texturen enthalten die Bilddaten so gespeichert, wie sie eine Grafikkarte am schnellste/optimalsten verarbeiten kann.
Texturen werden in einem Grafik Programm erstellt (z.B. Photoshop oder Krita) und als ganz normale Bild Datei gespeichert (bei JPG möglichst wenig komprimieren!).
Das Bild wird sozusagen zur Textur, indem es in die Game-Engine importiert wird.
Sprites
Die vielen kleinen Bildchen aus denen die 2D Spiele bestehen, werden in Sprites eingebettet. Eigentlich enthalten Sprites nur flache Bilder/Texturen ;-). Doch Sprites sind für 2D optimiert und bieten zusätzliche Techniken/Funktionen welche die Typischen Arbeiten in einem 2D Spiel unterstützen und vereinfachen.
3D Mesh
Ein 3D Mesh (Netz) besteht aus vielen Eckpunkten und diese Eckpunkte werden verbunden zu Flächen und ergeben dadurch die Form (ohne Farbe/Textur/Bild) der Objekte und Spielfiguren in einem 3D Spiel bzw. 2.5D Spiel.
Solche 3D Meshes werden in einem 3D Programm erstellt (z.B. Blender).
Vertex / Vertices
Dies ist der Name der Eckpunkte in einem 3D Mesh.
Edge
Werden in einem 3D Mesh, zwei Vertex / Vertices / Eckpunkte miteinander verbunden, so ergibt es eine Kante. Der Name dieser Kante ist „Edge“
Polygon / Face / Triangle / Tri
Werden drei oder noch mehr Vertex / Vertices / Eckpunkte miteinander verbunden, so ergibt dies eine Fläche. Dies Flächen werden Face bzw. Polygon genannt.
Für die Grafikkarte ist es am optimalsten, wenn ein Face/Polygon aus ganz genau 3 Vertices besteht. Diese können bei weitem am schnellsten verarbeitet werden. Mit Polygon meint man bei der Spielentwicklung normalerweise deswegen ein Face mit 3 Eckpunkten. Manchmal werde diese auch Triangle oder Tri genannt.
Faces mit 4 Eckpunkten lassen sich schon aufwändiger berechnen, sind aber noch „erträglich“, daher „schlucken“ Game-Engines solche Daten auch noch.
3D Programme zum Erstellen von 3D Modellen, verwenden häufig aber auch Faces/Polygone mit mehr als 4 Ecken. Doch da diese noch viel langsamer zum berechnen (der Beleuchtung etc.) sind, wandeln die Game-Engines diese Daten beim Import normalerweise automatisch um in Polygone mit 3 Ecken.
Die Anzahl der Polygone in einem 3D Modell / Mesh, ist ganz unterschiedlich. Bei der Spieleentwicklung sollte sehr darauf geachtet werden, dass die Modelle nur die nötigste Anzahl an Polygone haben um so gut auszusehen wie gewünscht. Und nicht viel viel mehr als nötig. Denn die Anzahl der Polygone hat einen sehr großen Einfluss darauf, wie flüssig das Spiel später laufen wird.
3D Modell / 3D Objekt
3D Model und Mesh werden irgendwie in eine Schubblade geworfen. Und daran ist eigentlich auch nichts Falsches.
Doch mit 3D Modell meint man normalerweise eine 3D Mesh Datei + dazugehörige Textur Bild-Datei(en). Denn auch wenn beides zusammen erst das fertige Modell ergibt und wirklich nach was schönem aussieht, sind dies Daten voneinander getrennt. Es sind verschiedene Dateien.
Das Mesh ist der Rahmen eines Autos. Die Texturen sind die farbig lackierten Bleche. Beides zusammen ergibt ein schönes Auto (das 3D Modell).
Bones
Wenn man nun ein 3D Modell / Mesh hat, welches nicht einfach irgendein Ding darstellt, sondern etwas Lebendes, also ein Tier oder Mensch etc. So möchte man normalerweise auch dass sich z.B. die Arme und Beine bewegen lassen. Also man möchte Gelenke haben, die man dann in einer Animation auf natürliche Art bewegen kann. Genau diese Gelenke sind die Bones.
Bones befinden sich innerhalb des 3D Mesh. Und jeder Eckpunkt (Vertex / Vertices) hat nun eine Information, an welchen Bone er wie stark gebunden ist. So könnte z.B. ein Vertex im Gesicht, mit 40% Gewichtung an den Nacken/Hals Bone gebunden sein und mit 60% an den Kopf-Bone. Wird nun der Kopf bewegt, so würde dieser Vertex (und damit auch das entsprechende Polygon) zum Teil der Kopf Bewegung folgen, zum Teil aber auch sich nach dem Hals richten. Insgesamt ergibt dies also den Effekt der sich dehnenden Haut.
Bones gehören also zum 3D Modell und sind meist auch in der gleichen Datei enthalten. Doch nur die wenigsten Modelle / Mesh brauchen Bones. Sondern nur eben die, welche sich wie ein Lebewesen verformen und bewegen lassen sollen.
Skinned Mesh
Dies ist ein ganz normales 3D Mesh das sich auch ganz normal benutzen lässt, doch es hat zusätzliche Informationen.
Wenn bei einem 3D Mesh die Vertices / Eckpunkte, eine Gewichtung enthalten wie stark sie an Bones gebunden sind, dann wird es durch diese zusätzliche Information zu einem Skinned Mesh. Für dich macht das nicht wirklich einen Unterschied. Doch die Game-Engine wird dies automatisch berücksichtigen und die zusätzlichen Möglichkeiten des Skinned Mesh nutzen.
Animation
Dies bezeichnet so ziemlich alles was sich in einem Spiel, auf wiederkehrende Art bewegt. z.B. ein sich drehender Deckenventilator, eine sich öffnende Türe, und eben auch Bewegungen der Spielfigur, Tiere etc.
Und so vielfältig die Animationen sind, so unterschiedlich sind auch die Arten und Möglichkeiten wie sie in einem Spiel erstellt werden. Im allereinfachsten Fall kann dies eine einzige Programmzeile sein wie diese:
transform.Rotate(0, 60*Time.deltaTime, 0);
Bis hin zu den wohl kompliziertesten Animationen: Natürliche Bewegungen eines Menschen, z.B. Lauf-Animation.
Diese zuletzt genannten Animationen, werden erstellt indem in einem 3D Programm (z.B. Blender) aus Bones die Gelenke nachgestellt werden, und dann diese Bones animiert/bewegt werden.
Diese Animation wird dann wieder in einer 3D-Datei gespeichert (kann zusammen mit dem 3D Mesh / Modell gespeichert werden, oder getrennt davon).
3D Datei
Dies ist ganz simpel die Datei, welche aus dem 3D Programm (z.B. Blender) heraus exportiert wird für die weitere Benutzung im Spiel.
Eine 3D Datei kann enthalten: Animationen, Bones, 3D Mesh (Polygone, Vertices etc.)
Diese Dinge können sowohl zusammen in einer Datei stecken als auch getrennt.
Die beiden verbreitetsten Formate sind FBX und OBJ. Wobei zunehmend FBX die Nase vorne hat, da es beim Austausch zwischen verschiedenen Programmen etwas weniger Probleme macht als OBJ. Allerdings, ganz egal welches Format, Probleme machen sie alle mehr oder weniger ;-)
Blit
Wenn die Grafikkarte einen ganzen Bildausschnitt von einer Textur in eine andere Textur kopiert (oder als Ziel, in die Bildschirm-Ausgabe) dann wird dieser Kopiervorgang, als Blit bezeichnet.
Ein „Blit“ ist extrem schnell!
Rendern
Wenn die Grafikkarte nicht einfach nur einen Bildausschnitt kopiert, sondern Pixel für Pixel irgendwelche Berechnungen macht (Beleuchtung, Farbe etc. bei 3D) dann wird der gesamte Vorgang als Rendern bezeichnet. Rendern ist also der Vorgang des „Berechnens und malen für die Ausgabe“
Shader
Das rendern/malen macht die Grafikkarte mit kleinen „Shader“ Programmen die direkt in der Grafikkarte ausgeführt werden. Diese kleinen Programme werden in speziellen Teilen des Grafikchips (den Shader Einheiten) ausgeführt. Wobei Spieleprogrammierer fast immer mit „Shader“, das kleine Programm meinen.
Diese Shader sind sehr vielseitig verwendbar und es lassen sich viele schöne spezielle Grafikeffekte mit ihnen machen. Aber auch für die ganz normale Darstellung von 3D Modellen, bestimmt der Shader ganz entscheidend, in welchem Style es dargestellt wird. So kann das gleiche 3D Modell eines Menschen, je nach Shader entweder recht realistisch aussehen, wie eine Comic Figur oder recht nahe an Pixel-Art herankommen.
Shader bestimmen auch, wie Schatten, oder Halb-Durchsichtige Objekte (z.B. Glasscheiben) berechnet und dargestellt werden.
Kurz gesagt, Shader bestimmen maßgeblich wie ein Spiel dargestellt wird, wie es wirkt und sie sind sehr wichtig.
Leider sind die Möglichkeiten eigene Shader zu erstellen bzw. die vorhandenen zu verändern, in den verschiedenen Game-Engines, auch sehr unterschiedlich. Es reicht von „ganz einfach und sehr mächtige/performante Möglichkeiten“, bis hin zu „nur schwer und mittels Operation am offenen Herz“.
Je nachdem welche Art von Spiel und welcher Grafikstiel angestrebt wird, können Shader für dich etwas ziemlich Unwichtiges sein mit denen du dich nie beschäftigen wirst, oder extrem wichtig werden.
NormalMap und BumpMap
Ein 3D Modell besteht aus dem Mesh (Polygone, Vertices, Edges) und der Textur (dem Bild welches als Haut über das Objekt drüber gezogen wird). Zusammen mit den Lichtern in der Spielwelt, berechnet nun der Shader, wie die Farben, Schatten, Glanzlichter usw. des Objekts aussehen.
Die Textur gibt dem Objekt die Farben und Struktur. So wird aus einer 5m x 5m großen Flachen Platte, und der Textur (Bild) von Pflastersteinen, etwas das aussieht wie eine Straße aus Pflastersteinen. Doch es bleibt eine Flache Platte. Nun könnte man natürlich mit sehr vielen Polygonen, im 3D Modell jeden Stein ausformen. Doch das würde die Polygonzahl extrem steigen lassen. Besonders wenn man dies mit allen möglichen Dingen macht (ein Wald voller Bäume, und die Rinde jedes Baums mittels Polygone eine Struktur geben). Es muss also eine andere Lösung her.
Und hier setzt die Idee der NormalMap und BumpMap an. Bei beiden handelt es sich um Bilder/Texturen. Und beide machen ziemlich das gleiche bzw. werden für die gleiche Idee benutzt. Und zwar sollen sie dem Shader zusätzliche Informationen darüber geben, wie die Struktur der Oberfläche ist.
NormalMap und BumpMap können entweder zusammen/gleichzeitig auf einem Objekt benutzt werden, oder nur eines davon. Meistens hängt es davon ab, was der Shader kann (manche Shader können keines davon, manche nur das eine, das andere oder beides) und ob man mit zu dem 3D Modell überhaupt eine NormalMap und/oder BumpMap hat.
Beides zusammen wirkt natürlich auch bisschen besser als nur eines davon, doch braucht auch mehr Rechenleistung. Meistens ist eines davon schon vollkommen ausreichend.
Die NormalMap erkennt man am komischen blau des Bildes. Die Farben geben Informationendarüber in welche Richtung die einzelnen Stellen des Bildes gedreht sind.
Die BumpMap ist ein weis/grau/schwarz Bild. Die Farben geben Information über die Höhenunterschiede in der Struktur.
Aus diesen Informationen, kann nun der Shader berechnen wie das Licht auf der Struktur, Schatten wirft bzw. Stellen die passend zum Licht stehen, heller erscheinen lassen. Dadurch wirkt ein Flaches Objekt, plötzlich viel realistischer und fast so als hätte es wirklich echte Struktur, Erhöhungen und Vertiefungen.
UV Map
Entgegen des Namens, handelt es sich hierbei nicht um ein Bild oder Textur. Und es ist auch keine eigenständige Datei. Doch es hat etwas mit der Textur des 3D Objekts zu tun ;-)
Die UV Map ist eine Karten Information. Ganz nach dem Vorbild der Landkarten oder wie beim Stadtplan. Die UV Map steckt im 3D Mesh. Während des erstellen des Modells im 3D Programm, wird dem Mesh diese UV Map Information mitgeteilt.
Und zwar sagt die UV Map, von wo die einzelnen Polygone, von der Textur ihr Bild beziehen sollen. Es ist sozusagen die Information „diese 15 Polygone welche den Mund der Figur formen, sollen von der Textur im oberen mittleren Bereich den Bildausschnitt verwenden, denn dort sind im Bild die Lippen abgebildet“.
3D Material
Alles Grafische in deinem Spiel, besteht nun also aus:
- 3D Mesh (selbst ein Sprit sind 2 Polygone, welche zusammen eine viereckige Fläche / Mesh ergeben.
- Textur (das Bild mit den eigentlichen Farben des Objekts)
- NormalMap und/oder BumpMap (evtl. falls vorhanden)
- Shader der aus diesen Dingen, die Farben, Licht etc. berechnet und somit ein schönes Objekt auf den Bildschirm malt.
Diese letzten 3 Dinge (Textur, Shader und evtl. NormalMap und BumpMap) werden nun zusammen gefasst. Wie ein Ordner in dem man alles zusammen packt. Und diese ergeben das Material. z.B. das Material „Weiser Marmor“.
Das ist nützlich, da sehr oft das gleiche Material, für verschiedene 3D Modelle verwendet wird. Stell dir vor du möchtest einen Raum mit Boden, Wände, Säulen und Decke, die alle aus dem gleichen Marmor bestehen sollen ;-)
Übrigens, diese Einstellungsmöglichkeiten welche du vielleicht bei dem Material findest für Glanzlicht, Rauheit/Glätte, Albedo Farbe usw…. dies sind die Einstellungen des ausgewählten Shaders. Hier siehst du unmittelbar, wie entscheidend der Shader ist für das Ergebnis wie die Grafik letztlich rüber kommt.
Physik Engine / Simulation
Zur Game-Engine gehört immer auch eine Physik Simulation. Je nach Engine und ggf. ob sie auf z.B. 2D spezialisiert ist etc. Ist die Physik Simulation mehr oder weniger stark ausgeprägt. Doch auch wenn diese meist sehr mächtig sind, bilden sie doch nur das ab, was wir alltäglich im normalen Leben so erleben. Also: Beschleunigung, Luftwiderstand, Gravitation und ggf. verbundene Dinge (Zahnräder, oder eine Stange welche etwas anderes anschieben). Dies alles erleichtert das Leben sehr!
Dennoch, besondere Dinge, die wir in unserem Alltagsleben nicht deutlich erleben, werden nicht Simuliert und müssten per Hand selber programmiert werden.
Rigid Body
Die ganzen grafischen Objekte, sind erst einmal genau nur das: Grafische Objekte. Sie sind wie eine Illusion, Hologramme in der Luft. Damit sie sich wie feste Körper verhalten, also z.B. die Physik Engine durch die Gravitation, etwas nach unten zieht, braucht es noch die Information „Rigid Body“. Dies sagt der Spiele Engine: Dieses Objekt ist so und so schwer, und hat den Luftwiderstand einer Feder, und es soll von der Gravitation angezogen werden.
Collider / Trigger
Wie bereits beim Rigid Body geschrieben, sind diese grafischen Objekte, erst einmal nur einfach etwas Optisches… Illusionen. … oft ist dies erwünscht, ebenso oft aber, will man das diese Objekte auch feste Hindernisse werden. Also, dass sie, wenn sie sich berühren, voneinander abprallen. Hierzu gibt es die Collider. Sie dienen dazu, dass Kollisionen der Objekte auch erkannt werden.
Doch Collider können auch als Auslöser, also als Sensoren (Trigger) verwendet werden. z.B. ein Auslöser auf dem Boden, und wenn der Spieler darüber läuft, wird dies erkannt und 30m weiter entfernt werden neue Gegner erzeugt die dann Richtung Spieler laufen.
RayCast
Manchmal möchtest du in deinem Spiel wissen: „Wenn ich gedanklich eine Linie ziehe von hier nach dort, treffe ich dann auf ein Objekt/Hindernis?“ … z.B. für den Schuss aus einer Waffe … oder du möchtest testen, ob der Computer-gesteuerte-Gegner, eine freie Sicht zum Spieler hat und diesen sehen kann, oder nicht?
Genau dafür gibt es RayCasts (in verschiedenen Arten). Sie ermöglichen es, auf sehr einfache Art, genau solche Dinge zu prüfen ;-)
Physik Material
So wie das 3D Material Information darüber gibt wie ein Objekt optisch aussieht, gibt ein Physik Material darüber Informationen wie die Oberfläche des Objekts sich Physikalisch verhält.
Das Physik Material ist jedoch eine ganz einfache Sache
Zum einen, sind diese etwas was du zusätzlich nutzen kannst (und oft gar nicht brauchst). Zum anderen, vereinfacht gesagt, ist das Physik Material kaum mehr als ein Schieberegler für „so rau bzw. rutschig ist diese Oberfläche“.
Dies ist nützlich z.B. für einen Eis Boden, auf der jedes Objekt das darauf liegt und bewegt wird, ewig lange rutscht bevor es von alleine langsamer wird und stehen bleibt. Oder eine Gummiartige Oberfläche, auf der alles praktisch unmittelbar abgebremst wird.
Partikel System
Zur Game-Engine gehört auch ein Partikel System. Größere Objekte, aus festen Körpern, lassen sich ziemlich gut durch 2D oder 3D Objekte, Flächen und Textur darstellen. Doch neben diesen großen / festen Objekten, will man oft auch so etwas wie Rauch oder Staub in der Luft, darstellen oder Feuer/Flammen, Magische Lichteffekte eines Zaubers usw.
Diese Dinge bestehen jedoch nicht aus einem 3D Modell das man vorher, wie ein Bildhauer bei einer Skulptur, formen/designen könnte. Sondern es ist etwas „nicht festes“, eben Partikel die irgendwie in der Luft glitzern oder (als Rauch/Staub) die Sicht irgendwie erschweren. Und solche Effekte bestehen oft aus bis zu mehreren Hundert einzelnen Partikeln. Genau hierfür gibt es nun das Partikel System. Dieses ist genau auf diese Aufgabe optimiert.
Partikel Systeme sind gar nicht sonderlich kompliziert und die ersten Effekte lassen sich in wenigen Minuten erstellen. Doch einen Effekt perfekt so hin zu bekommen um etwas ganz spezielles auch realistisch nach zu bilden, genauso wie man es sich vorgestellt hat, ist eine hohe Kunst und kann Stunden dauern
Dabei gilt: sowas wie Magie (also etwas zu dem man kein reales Vorbild hat) ist viel schneller/leichter gebastelt, als etwas von dem man eine sehr genau Vorstellung hat wie es „in Echt aussehen muss“ wie z.B. Flammen und Explosionen … die man dann wegen der Performance, auch mit „nur 30 Partikeln“ erstellen möchte und nicht mit 300 Partikeln. Denn das ist die 2. Sache: etwas mit sehr vielen Partikeln schön zu bekommen, ist viel leichter, als es ähnlich schön aber nur mit 1/10 der Partikel zu erstellen.