[Projekt] Nano Engine
Verfasst: 26.06.2009, 11:15
Hallo ZFXler,
als neuer hier im Forum möchte ich ne kleine Vorstellung schreiben. Bin eigentlich angemeldet um ne Frage zu stellen (siehe irgendwann heute bei Grafikprogrammierung), aber damit ihr wißt mit was ihr es zu tun habt müßt ihr euch ne kleine Einleitung antun. Das ganze hier extra, weil ich den Frage-Thread clean halten wollte von unnötigen Details :-)
Wie wahrscheinlich fast jeder hier programmiere ich als Hobby ne kleine Spieleengine, d.h. etwas mehr ringsrum als nur ein Renderer. Der gesamte Code hat 3 Schichten; Kern, Engine, Spielcode. Und weils so klein ist heißt das ganze dann "Nano Engine".
Im Kern: Speichermanager zum Finden und automatischen Beseitigen von Lecks, ein paar File-Tools, Konsole, formatiere Log-Ausgabe; Containerklassen und die übliche Mathematik ( Vektoren, Matrizen, Ebenen, Quaternionen und so), Parser
Engine: Renderer, Welt-Handler ( Occlusion- und Frustum-Culling, Kollsionserkennung (Traces) ), Ressourcenbibliothek ( verwaltet Texturen, Materialien, Effekte, Modele ), Kamera, Entity-Manager, Oberflächen-Manager ( in Planung; Menüs, Fensteranzeigen )
Im großen und ganzen bilden der Renderer und die Bibliothek ein Gerüst für Deferred Shading: In einer Definitionsdatei werden Rendertargets, Materialeigenschaften, Postprocessing definiert; Materialien ordnen den möglichen Eigenschaften Werte zu und verknüpfen dies mit Effekten und Rendertargets. Dadurch kann der Engine-Anwender bestimmen, welche Werte in welchen Targets liegen, er schreibt die Shader selbst (natürlich schreibe ich auch welche, aber die kann man dann austauschen). Die Renderreihenfolge unterliegt jedoch gewissen Begrenzungen, die quasi Deferred Shading erzwingen: ein Pass für die Welt, einer für Objekte, dann die Lichter ( mit Passes für Welt und Objekte für Shadowmaps ); am Enden postprocessing laut User-Definition.
Die Definitionsdatei und Materialien werden in Pseudo-C geschrieben und zur Runtime übersetzt, Effekte sind HLSL-Effektdateien. Das heißt auch nach Compilieren des Spielcodes bleibt das Grafikgerüst flexibel; Einschränkungen finden sich bei der Benennung von Variablen, d.h. damit man eine WeltViewProjektionsmatrik o.ä. im Shader bekommt, muss man der einen bestimmten Namen zuweisen. Das ist glaube ich zu verkraften.
Screenshots gibts dann irgendwann wenn das ganze weniger Baustelle ist^^
Zukunftspläne:
- Terrain-Rendering
- Networking-/Multiplayer-Code
- persistente Server, für kleine Online-Gemeinden mit RPG-Elementen (d.h. persistente Charakterentwicklung, Inventare etc.)
- Indoor-Levelgenerator: Für instanzierte Bereichen in persistenten Welten, zufällige Generierung nach Vorgaben (Stil, Größe, Begrenzungen durch umliegende Welt etc.)
...Weil man ja mal Träumen darf. Wer bis hier gekommen ist, hat wohl echt Geduld :-)
MfG
Haiaiai
als neuer hier im Forum möchte ich ne kleine Vorstellung schreiben. Bin eigentlich angemeldet um ne Frage zu stellen (siehe irgendwann heute bei Grafikprogrammierung), aber damit ihr wißt mit was ihr es zu tun habt müßt ihr euch ne kleine Einleitung antun. Das ganze hier extra, weil ich den Frage-Thread clean halten wollte von unnötigen Details :-)
Wie wahrscheinlich fast jeder hier programmiere ich als Hobby ne kleine Spieleengine, d.h. etwas mehr ringsrum als nur ein Renderer. Der gesamte Code hat 3 Schichten; Kern, Engine, Spielcode. Und weils so klein ist heißt das ganze dann "Nano Engine".
Im Kern: Speichermanager zum Finden und automatischen Beseitigen von Lecks, ein paar File-Tools, Konsole, formatiere Log-Ausgabe; Containerklassen und die übliche Mathematik ( Vektoren, Matrizen, Ebenen, Quaternionen und so), Parser
Engine: Renderer, Welt-Handler ( Occlusion- und Frustum-Culling, Kollsionserkennung (Traces) ), Ressourcenbibliothek ( verwaltet Texturen, Materialien, Effekte, Modele ), Kamera, Entity-Manager, Oberflächen-Manager ( in Planung; Menüs, Fensteranzeigen )
Im großen und ganzen bilden der Renderer und die Bibliothek ein Gerüst für Deferred Shading: In einer Definitionsdatei werden Rendertargets, Materialeigenschaften, Postprocessing definiert; Materialien ordnen den möglichen Eigenschaften Werte zu und verknüpfen dies mit Effekten und Rendertargets. Dadurch kann der Engine-Anwender bestimmen, welche Werte in welchen Targets liegen, er schreibt die Shader selbst (natürlich schreibe ich auch welche, aber die kann man dann austauschen). Die Renderreihenfolge unterliegt jedoch gewissen Begrenzungen, die quasi Deferred Shading erzwingen: ein Pass für die Welt, einer für Objekte, dann die Lichter ( mit Passes für Welt und Objekte für Shadowmaps ); am Enden postprocessing laut User-Definition.
Die Definitionsdatei und Materialien werden in Pseudo-C geschrieben und zur Runtime übersetzt, Effekte sind HLSL-Effektdateien. Das heißt auch nach Compilieren des Spielcodes bleibt das Grafikgerüst flexibel; Einschränkungen finden sich bei der Benennung von Variablen, d.h. damit man eine WeltViewProjektionsmatrik o.ä. im Shader bekommt, muss man der einen bestimmten Namen zuweisen. Das ist glaube ich zu verkraften.
Screenshots gibts dann irgendwann wenn das ganze weniger Baustelle ist^^
Zukunftspläne:
- Terrain-Rendering
- Networking-/Multiplayer-Code
- persistente Server, für kleine Online-Gemeinden mit RPG-Elementen (d.h. persistente Charakterentwicklung, Inventare etc.)
- Indoor-Levelgenerator: Für instanzierte Bereichen in persistenten Welten, zufällige Generierung nach Vorgaben (Stil, Größe, Begrenzungen durch umliegende Welt etc.)
...Weil man ja mal Träumen darf. Wer bis hier gekommen ist, hat wohl echt Geduld :-)
MfG
Haiaiai