# Grafik-Engine

Eine Grafik-Engine (wörtlich Grafik-Maschine, freier etwa: Grafiktriebwerk oder Grafikmodul) ist ein Teil eines Computerprogramms oder einer Computer-Hardware, eine sogenannte Engine, die für die Darstellung von Computergrafik zuständig ist. Meist handelt es sich dabei um möglichst realitätsgetreue 3D-Computergrafik, wie Gegenstände, Umwelt und Personen (Stichwort: Virtuelle Realität). Im Zusammenhang mit 3D-Computergrafik bezeichnet man die Grafik-Engine daher dann auch als 3D-Engine. Konkret handelt es sich dabei um einen integrierten oder extern gelagerten Programmcode, der parallel zum eigentlichen Spiel (siehe Spiel-Engine) für die Berechnung der Grafikschnittstelle zuständig ist.
Die Grafik-Engine wird häufig als Teil der Spiel-Engine verstanden, tatsächlich ist sie aber ausschließlich zur Berechnung der Anzeige zuständig, während der Begriff Game Engine die Basis des gesamten Spiels darstellt (Audio, Gameplay, Menüs usw.). Neben Spielen können auch andere Anwendungen, wie CAD- oder Geoanwendung und allgemein Visualisierungs-Software eine Grafik-Engine ansteuern.
Sie wird oft mit der Render-Engine verwechselt, welche nur die in der 3D-Welt vorhandenen Daten auf der Anzeige ausgibt.

## Funktion

Die Grafik-Engine bietet einem Programmierer eine große Palette von grafischen Funktionen und Effekten (geometrische Objektbeschreibung, Oberflächentexturen, Licht und Schatten (Shading), Transparenz, Spiegelungen usw.), so dass er für seine spezielle Anwendung diese nicht stets neu programmieren muss.
Insbesondere bei 3D-Computerspielen wie Ego-Shootern entscheidet die Qualität der Effekte ihrer jeweiligen Grafik-Engine maßgeblich über den kommerziellen Erfolg des Spiels, weswegen ihnen in diesem Bereich große Aufmerksamkeit zukommt.
Es gibt verschiedene Techniken, dreidimensionale Welten auf dem Computer darzustellen: Am häufigsten wird die 3D-Welt durch Polygone konstruiert, diese Flächen werden dann mit einer Art Tapete, der Textur überzogen. Hinzu kommen noch Partikeleffekte, die beispielsweise Nebel, Dreck, Feuer oder Wasser darstellen können. In fortgeschrittenen 3D-Engines werden die Texturen noch mit sogenannten Bumpmaps überzogen, die eine plastische Struktur verleihen.
Eine alternative Technik der visuellen Konstruktion von 3D-Welten ist die Voxel-Technik. Hier wird, etwa vergleichbar mit der Rastergrafik, Farbwert und Eigenschaft eines jeden Punktes der 3D-Welt in einem dreidimensionalen Datensatz gespeichert.
Die Endstufe des ganzen Visualisierungsprozesses ist die Render-Engine, die aus den Daten das eigentliche, am Bildschirm dargestellte Pixelbild erzeugt.

## Geschichte

Der Begriff wurde erst Mitte der 1980er Jahre gebräuchlich, als Lucasfilm Games ihre 3D fractal technology und Epyx ihre Freescape Engine zum ersten Mal in Spielen einsetzten. Die Freescape-Engine wurde auch von anderen Spieleherstellern verwendet. Anfang der 1990er Jahre fing Id Software an, seine Grafik-Engines für 3D-Grafik zu entwickeln und in größerem Umfang anderen Spieleherstellern gegen Lizenzgebühr zur Verfügung zu stellen. Diese konnten damit neue 3D-Spiele schneller entwickeln. 3D-Grafik benötigt sehr aufwändige Optimierungen und Berechnungen, und die Programmierer bei Id Software waren zu dieser Zeit auf diesen Gebieten führend.
Für viele Computerspiele werden 3D-Engines anderer Herstellern lizenziert, weil sich der Aufwand für die Entwicklung einer eigenen zeitgemäßen 3D-Grafik oft nicht lohnt. Ein Spiel kann dadurch deutlich schneller fertiggestellt werden und hat in der Regel auch eine bessere Grafik, als es bei einer kompletten Eigenproduktion der Fall wäre.

## Engines im Bereich Film und Computerspiel
### Film

Grafik-Engines für das Rendern von realistisch anmutenden Bildern und Animationen sind sehr viel komplexer als die für Spiele. So kann das Rendern eines einzigen Bildes, je nach Rechenleistung, mitunter mehrere Stunden in Anspruch nehmen. Grafisch aufwändige Filmszenen müssen daher häufig von dutzenden Computern gleichzeitig berechnet werden.
Die gängigste Renderersoftware ist:
* Mental Ray
* Pixar RenderMan
Mit Hilfe von Programmen wie Houdini, Maya, LightWave 3D, Cinema 4D, 3ds Max, Blender und ZBrush werden die Modelle (Personen, Effekte etc.) erstellt, die dann berechnet („gerendert“) werden, damit eine 3D-Grafik entsteht.
Ein Unterschied zu den Grafik-Engines von Spielen sind die physikalische Genauigkeit und viel aufwändigere Berechnungsverfahren wie Final Gathering, globale Beleuchtung, Kaustik, Raytracing. Vollkommen physikalisch korrekt ist allerdings keine Engine. Das Ziel ist es, die Bilder nur so aussehen zu lassen, „als ob“.
Der Einsatz solch komplexer Software reicht von Produktvisualisierungen, Architektur, Effekten bis hin zu vollkommen digitalen Filmen wie Final Fantasy VII: Advent Children, Findet Nemo oder die Effekte und Personen in Filmen wie Star Wars, Herr der Ringe und Matrix. Ohne die fortlaufende Entwicklung der Rendersoftware wären diese Filme nicht machbar gewesen.

### Computerspiel

Die Grafik-Engines zur Berechnung von Computerspielegrafik sind weit vielzähliger und entwickeln sich rasant.
Bei Computerspielen übernimmt die Grafikengine in der Regel auch die Physikberechnung. Ton und KI gehören jedoch nicht in das Aufgabenfeld der Grafik-Engine.
Aktuelle Engines sind z. B. id Tech 7 (Doom Eternal), Unreal Engine 5 (Lords of the Fallen, Senua’s Saga: Hellblade II), CryEngine V (Hunt: Showdown), Frostbite 3 (Battlefield 1, Star Wars: Battlefront), Source 2 (Counter-Strike 2, Dota 2) und Unity (Pokémon Go, Firewatch).
Eine große Schwierigkeit ist die begrenzte Rechenleistung. Bei der Herstellung eines Filmes darf das Erzeugen eines Einzelbildes mehrere Stunden oder länger dauern, während ein Einzelbild in einem Spiel im Bruchteil einer Sekunde berechnet sein muss. Die Spiel-Engines müssen also bestimmte Mindestanforderungen an die GPU und CPU stellen, um überhaupt zu funktionieren.

### Unterschiede Film und Spiel

Der Unterschied zwischen Spiel und Film zeigt sich beispielsweise am Film Final Fantasy und dem gleichnamigen Spiel. Ein Bild (1 Sekunde ~24 Bilder) wird beim Film bis zu 90 Stunden lang berechnet, für das Spiel müssen hingegen 24 Bilder in einer Sekunde berechnet werden. Grafik-Engines für Computerspiele richten daher ihr Hauptaugenmerk auf die Rechengeschwindigkeit und müssen im Gegensatz zum Film auf Realitätstreue und Genauigkeit verzichten. Die Grafik-Engines sind meist auch heute noch hinsichtlich Anforderungen und Einsatzgebieten getrennt.

### Der Trend zu weitergehenden Überlappungen zwischen Film und Spiel

Inzwischen gibt es den Trend, auch im Filmbereich immer mehr Echtzeit-Techniken zu benutzen, wie sie bisher nur in Spielen benutzt wurde. Grund hierfür ist nicht zuletzt, dass die Grafikkarten inzwischen so leistungsfähig sind, dass sie Berechnungen in Echtzeit ausführen können, die früher nur offline berechnet werden konnten.
Aus diesem Grund unterstützen heutzutage alle bekannten 3D-Modellierungsprogramme wie Maya, XSI und 3ds Max neben dem klassischen Offline-Rendering auch Echtzeit-Rendering („Vorschau“-Funktion), bei denen man das Ergebnis sofort sieht. Der Arbeitsablauf von Computergrafikern wird damit deutlich verbessert, da sie das Ergebnis von Änderungen schnell sehen und beurteilen können, anstatt Stunden warten zu müssen. Auch Grafik-Chip-Hersteller wie Nvidia investieren gezielt in diesen Bereich, etwa mit der Entwicklung und Marketing der Shader-Sprache Cg, welche in beiden Bereichen eingesetzt wird. Ähnliches gilt für die von Microsoft entwickelte Shader-Sprache HLSL. Rendering-Effekte, die in diesen Sprachen entwickelt werden, können damit – zumindest eingeschränkt, oder mit Nacharbeit – in beiden Bereichen genutzt werden. Zusammenfassend lässt sich sagen, dass sich die Techniken der Grafik-Engines für Computerspiele und Film immer weiter annähern.
Ein anderer Aspekt ist, dass die Arbeitsweisen, die zur Erstellung von Grafiken für Grafik-Engines benutzt werden, sich für Computerspiele und Filme immer weiter annähern.
* Früher gab es getrennte Programme zum Entwickeln von Computerspielen, etwa spezielle Level-Editoren. Inzwischen werden Programme wie Maya standardmäßig sowohl für Spiele als auch Filme benutzt. Die Grafik-Engines von Computer-Spielen und für Film arbeiten mit zunehmend ähnlichen Eingabedaten.
* Die benutzten Modellierungstechniken ähneln sich immer mehr. Während früher für Computerspiele die Welten oft aus einzelnen Polygonen zusammengesetzt wurden, werden inzwischen wie im Film Techniken wie Subdivision Surfaces und Texturen eingesetzt. Auch hier liegt die Ursache darin, dass sich die Techniken der zugrundeliegenden Grafik-Engines angenähert haben.
* Immer mehr Computergrafiker arbeiten in beiden Branchen. Beispielsweise hat id Software für Doom 3 gezielt Grafiker aus der Film-Industrie angeheuert. Andersherum haben die Grafiker des Computerspieles Final Fantasy später die Computergrafik des gleichnamigen Kinofilms erstellt.

## Meilensteine

Aus der Vielzahl an Grafik-Engines (die oft keinen eigenen Namen haben und den Namen des Spieles tragen, für das sie entwickelt wurden) stechen einige besonders hervor, welche in der nachfolgenden Übersichtstabelle aufgelistet sind.
Chronologische Übersicht der wichtigsten Grafik-Engines :
| Spielname | Engine | Unternehmen | Jahr |
| Driller | Freescape Engine | Incentive Software | 1987 |
| Wolfenstein 3D | Wolfenstein-3D-Engine | id Software | 1992 |
| Ultima Underworld: The Stygian Abyss | Ultima-Underworld-Engine | Blue Sky Productions | 1992 |
| Doom | Doom-Engine | id Software | 1993 |
| System Shock | System-Shock-Engine | Looking Glass Studios | 1994 |
| Quake | Quake-Engine (id Tech 1) | id Software | 1996 |
| Duke Nukem 3D | Build-Engine | 3D Realms | 1996 |
| Quake II | Quake-Engine (id Tech 2) | id Software | 1996 |
| Unreal | Unreal Engine | Epic Games | 1998 |
| Quake III Arena | Quake-III-Engine (id Tech 3) | id Software | 1999 |
| Unreal Tournament | Unreal Engine 1.5 | Epic Games | 1999 |
| Halo | Halo Engine | Bungie Studios | 2001 |
| Red Faction | GeoMod Engine | THQ | 2001 |
| The Elder Scrolls III: Morrowind | Gamebryo | Ubi Soft | 2002 |
| Unreal Tournament 2003 | Unreal Engine 2 | Epic Games | 2002 |
| Far Cry | CryEngine 1.0 | Crytek | 2004 |
| Unreal Tournament 2004 | Unreal Engine 2.5 | Epic Games | 2004 |
| Doom 3 | Doom-3-Engine (id Tech 4) | id Software | 2004 |
| Half-Life 2 | Source | Valve | 2004 |
| F.E.A.R. | Jupiter-Ex-Engine | Monolith Productions | 2005 |
| The Elder Scrolls IV: Oblivion | Gamebryo Engine | Bethesda Softworks | 2006 |
| Company of Heroes | Essence Engine | Relic Entertainment | 2006 |
| Gears of War | Unreal Engine 3 | Epic Games | 2006 |
| Crysis | CryEngine 2 | Crytek | 2007 |
| Unreal Tournament 3 | Unreal Engine 3 | Epic Games | 2007 |
| GTA IV | Rockstar Advanced Game Engine | Natural Motion | 2008 |
| Far Cry 2 | Dunia Engine | Ubisoft | 2008 |
| Uncharted 2: Among Thieves | Naughty Dogs Spielengine 2.0 | Naughty Dog | 2009 |
| Rage | id Tech 5 | id Software | 2011 |
| Battlefield 3 | Frostbite 2 Engine | DICE | 2011 |
| Gears of War 3 | Unreal Engine 3.5 | Epic Games | 2011 |
| Crysis 3 | CryEngine 3 | Crytek | 2013 |
| Eve: Valkyrie | Unreal Engine 4 | Epic Games | 2014 |
Populäre Grafik-Engines zumindest im Bereich der Ego-Shooter kamen in den letzten Jahren fast ausschließlich von id Software, Epic Games und Valve. Im Jahr 2004 schaffte außerdem das deutsche Unternehmen Crytek mit ihrer CryEngine 1.0, welche in Far Cry zum Einsatz kommt, den Durchbruch. Als weiteres deutsches Unternehmen schaffte es Spinor mit ihrer Shark 3D Engine, dass das darauf basierende Adventure-Spiel Dreamfall des norwegischen Unternehmens Funcom auf der E3 2004 mehrere Preise gewann.

## Kommerzielle

Folgende 3D-Engines sind für den kommerziellen Gebrauch veröffentlicht:
* 3DGM
* A7
* Blitz3D SDK
* Cipher
* CMORE3D
* CryEngine 1/2/3
* DB / DBPro
* Freescape Engine
* Frostbite-Engine
* Gamebryo (früher: Netimmerse)
* Inka3D (WebGL exporter für Maya)
* Jamagic
* Jupiter-Ex-Engine
* Mad F/X 1.0
* NuclearFusion mit NuclearBasic von NuclearGlory Entertainment Arts
* PR
* Quest3D
* QuickDraw 3D
* Radish
* RF
* SAGE-Engine
* Shark 3D
* Source
* Trinigy Vision
* TV3D
* Unity
* Unreal Engine
* Virtools

## Open-Source

Frei im Quellcode verfügbar sind folgende Engines:
* Axiom-Engine C# (.NET Portierung der Ogre-Engine)
* Blender Game-Engine
* CrystalSpace 3D Engine (Crystal Space ist nicht nur eine Rendering-Engine, sondern auch eine Spiel-Engine mit Netzwerkunterstützung, Kollisionserkennung, Objektverwaltung etc.)
* Cycles (Blender eigene 3D Engine)
* Doom-Engine
* Genesis 3D
* Horde3D (leichtgewichtige Render-Engine mit Next-Generation-Features)
* Irrlicht (reine Render-Engine)
* JMonkeyEngine (Java-basierte 3D-Spiel-Engine)
* Lightfeather 3D Engine
* Nebula Device
* OGRE (reine Render-Engine)
* OpenSceneGraph (reine Render-Engine)
* Panda3D
* PixelLight
* Quake-Engine
** DarkPlaces (stark modifizierte Variante)
* Quake-II-Engine
** Qfusion
** Quake II Max
** Quake II Evolved
* Quake-III-Engine
** ioquake3
* Sauerbraten Game Engine (3D-Engine)
* SFML (2D-Engine)
* Sparky-Engine (2D- und im Ansatz 3D-Engine)
* Stratagus (Engine für Echtzeitstrategiespiele)
* Spring (3D-Engine für Echtzeitstrategiespiele)
* Torque Game Engine
* Ultimate 3D (freie 3D-Engine für die kommerzielle Entwicklungsumgebung Game Maker)
* ZFX Community Engine

## Schnittstellen

Die verwendete Grafik-Engine hat großen Einfluss auf das Aussehen eines Computerspiels. Sie bestimmt z. B. wie viele Polygone dargestellt werden können oder ob DirectX, OpenGL oder eine andere Grafikschnittstelle benutzt wird.
Wichtig ist auch die verwendete DirectX Version. Erst ab DirectX 8 werden Pixel- und Vertex-Shader unterstützt, die u. a. für realistische Wasseroberflächen, Schatten und Charakteranimationen benötigt werden.
Die Grafik-Engine ist meist ein fester Bestandteil der Spiel-Engine und kann nicht einfach ausgetauscht werden. Manche Spiele für Windows besitzen sowohl eine DirectX- als auch eine OpenGL-Schnittstelle. Unter Linux ist dagegen ausschließlich OpenGL und Vulkan verfügbar. (DirectX ist unter Linux mit den Laufzeitumgebungen Wine bzw. Cedega verfügbar, jedoch funktionieren nicht alle Windows-Spiele mit Wine.) Das Betriebssystem für Macs, macOS, setzte ebenfalls ausschließlich auf OpenGL, bis Apple 2015 die eigene Grafikschnittstelle Metal in OS X El Capitan (Version 10.11) einführte. Seit macOS Catalina (Version 10.14, 2018) ist Metal 2 die primäre Grafik-Engine und ersetzt damit OpenGL vollständig, das in macOS zwar bestehen bleibt, aber nicht mehr weiterentwickelt wird.
Die OpenGL-Standardisierung hinkt zwar meist weit hinterher, aber mittels direkter Schnittstellen zu den Grafiktreibern sind neue Merkmale auch in alten Versionen verfügbar, in der Regel noch vor DirectX.