# CMORE3D

Die CMORE 3D Toolchain ist eine 3D-Grafik-Engine inklusive Editor, die von der CIRIC Software GmbH mit Sitz in Schrobenhausen, Deutschland entwickelt wurde. Speziell für Eingebettete Systeme und Mobilgeräte geschrieben, ist die CMORE 3D Toolchain sowohl für die Entwicklung von Smartphone-Apps als auch für andere Echtzeit-Grafik-Anwendungen geeignet. Sie bietet die Möglichkeit, cross-platform Anwendungen für Windows, Android, iOS und Blackberry sowohl in 2D als auch 3D zu entwickeln. Es steht eine kostenlose Version zur Verfügung die alle Funktionen enthält. Will man jedoch Assets, die per Editor erstellt wurden, auch im SDK nutzen, muss eine Vollversion erworben werden.

## Engine

Das CMORE-3D-SDK beinhaltet C++ Bibliotheken für alle unterstützten Plattformen, die entsprechenden Header-Dateien, Beispielprojekte für Visual Studio, Eclipse, Momentics und Xcode sowie eine ausführliche Dokumentation. Zusätzliche externe Bibliotheken werden nicht benötigt. Unterschiede in den Standardbibliotheken, Treibern und ggf. Dateiformaten werden von CMORE 3D ausgeglichen. Entwickelte Applikationen können ohne Änderungen für jede Plattform übersetzt und ausgeführt werden. CMORE 3D verwendet folgende Bibliotheken und liefert diese kompiliert für alle Zielplattformen mit aus: libjpeg, libpng, zLib, LibTIFF, DevIL, FreeType, Lua, PugiXML, GPC, OpenAL

### Grafik

Die verwendete Grafik-API ist je nach Zielplattform OpenGL 3.3 bis 4.4 oder OpenGL ES 2.0 oder 3.0. Der Renderer verwendet automatische Zustandssortierung um die Ein- und Umstellungszeiten der Render-Pipeline zu reduzieren. Shader werden je nach Grafikschnittstelle direkt in GLSL oder GLSL ES geschrieben und können beliebig angepasst werden. Der Shader-Präprozessor extrahiert benutzerdefinierte Variablen und stellt diese im Effektsystem und Editor zur Verfügung. Uniform-Buffer werden automatisch erkannt und verwaltet. Das Shader-Define-System stellt Hardware-Informationen zur Verfügung, die dazu genutzt werden können abhängig von GPU-Leistung und -Fähigkeiten spezialisierte Versionen bereitzustellen. Folgende Shader und Effektdateien werden in beiden Sprachvarianten mitgeliefert:
* Mischen von Single- und Multipass Rendering
* Render-To-Texture (Wasseroberfläche, Environment Maps)
* Dynamischer Schatten und Beleuchtungsmodelle (Phong, Blinn, Lambert)
* Bumpmapping und Normal Maps
* Deferred Shading
* Post-Effects (Blur, Desaturize, Night Vision, …)

### Asset Management

Für den Import von 2D/3D-Formaten, Audioformaten und Fonttypen stellt die CMORE 3D Engine einen Asset Manager zur Verfügung. Neben einem automatisch bereitgestellten Standardprofil, bietet der Asset Manager die Möglichkeit, spezielle Profile für jedes Asset zu erstellen. Diese können eingesetzt werden, um z. B. Leistungsunterschiede von Plattformen auszugleichen, das Aussehen einer Anwendung zu verändern oder sie für verschiedene Sprachen zu lokalisieren. 3D-Objekte können mit Modelling Tools wie zum Beispiel Maya, 3ds max oder Blender erstellt werden. CMORE 3D unterstützt als Austauschformate COLLADA in den Versionen 1.4 und 1.5 sowie FBX, 3DS, LWF und OBJ. Dabei werden je nach Umfang des jeweiligen Dateiformats sowohl Geometrie, Shader, Material- und Effektparameter sowie Animationen, Skelette und Skins als auch komplette Szenen, Lichtquellen und Kameras importiert. Durch die Verwendung der FreeType-Engine werden alle gängigen Fontformate auf den Zielplattformen unterstützt.

### Animation

Die CMORE 3D Engine verwendet eine Szenengraph-Abstraktion. Für die Darstellung einfacher Bewegungen werden hierarchische Animationen unterstützt. Dies ermöglicht die Rotation, Verschiebung und Skalierung eines oder mehrerer Objekte. Komplexe Bewegungen können mit Hilfe von Skelettanimationen umgesetzt werden. Die hauptsächlich zur Charakteranimation verwendete Technik des Skinnings steht auch für Animationen auf Mobilgeräten zur Verfügung. Durch die Möglichkeit, benutzerdefinierte Shader-Variablen an einzelne Objekte anzuhängen, kann jeder Parameter eines Objekts animiert werden. Zusätzlich kann der Benutzer individuelle Partikelsysteme erstellen, um Wetterbedingungen oder pyrotechnische Effekte zu visualisieren.

### Graphical User Interfaces

Grafische Benutzeroberflächen (GUIs) können im CMORE 3D Editor erstellt oder als PSD-Datei importiert werden. Der speziell entwickelte Importer für Photoshop-Dateien erlaubt es, komplette Panels mit Texten, Elementen, Layern und vorbereiteter Anbindung für die Bedienlogik zu übernehmen. Die importierten GUIs werden auf Tafeln im 3D-Raum angeordnet. Bestehen sie aus mehreren Layern, werden diese als teiltransparente Oberflächen entlang der Tiefenachse hintereinander gelegt.

### Sound

Für die Wiedergabe von Audio-Dateien nutzt die CMORE 3D Engine OpenAL. Dadurch ist auf Plattformen, die Mehrkanal-Tonausgabe unterstützen, eine 3D-Positionierung von Klangquellen möglich. Audio-Dateien können im WAV- oder Ogg-Vorbis-Format importiert werden.

### Scripting

Für Bedienlogik und Rapid Prototyping stellt die CMORE 3D Engine eine auf der Skriptsprache Lua basierende Skriptkomponente zur Verfügung. Skripte können im Editor geschrieben und getestet werden. Zusätzlich kann eine Click-Komponente zum Aufrufen einzelner Funktionen des Skripts angehängt werden.

### Prefabs

Um den Export und die Wiederverwendung erstellter Szenenobjekte zu erleichtern, können diese zu einem Prefab verbunden werden. Prefabs können per Drag & Drop beliebig oft in verschiedenen Szenen instanziiert werden. Durch die Verwendung einer Vererbungshierarchie werden Änderungen im Prefab zur Laufzeit von seinen Instanzen übernommen. Einzelne Eigenschaften einer Instanz können per Override-Mechanismus von diesem Verhalten ausgenommen werden. Ein Prefab kann wiederum aus einer Gruppe von Prefabs bestehen.

## Editor

Mithilfe des Editors können Grafik-, Sound- und 3D-Formate importiert und unter Verwendung der mitgelieferten Standard-Assets automatisch für die Anzeige auf den Zielgeräten vorbereitet sowie zu 2D/3D Szenen zusammengefügt werden. Einfache Objekte lassen sich direkt im Editor erstellen. Import und Konvertierung von Assets muss über den Editor geschehen um die Größe der Laufzeitbibliothek zu minimieren.

## Remote App

Via Remote App können im Editor erstellte Szenen per TCP/IP-Verbindung sowohl auf dem Entwicklungs-PC als auch auf den unterstützten Zielplattformen evaluiert werden. Integrierte Funktionen wie Skripte oder Komponentenlogik können getestet und Shader direkt auf dem Zielgerät editiert werden.

## Zielplattformen

Für folgende Plattformen kann mit der CMORE 3D Engine entwickelt werden:
* PC-Betriebssysteme:
** Windows, Apple Mac OS X (für iOS-Entwicklung, Xcode erforderlich, für den CMORE 3D Editor wird zusätzlich ein PC mit Windows benötigt)
* Mobile Geräte:
** iOS (iPhone, iPad und iPod), Android, BlackBerry 10, BlackBerry PlayBook
* Embedded Geräte:
** QNX, Windows CE, Embedded Linux (auf Anfrage)