Skip to content

Instantly share code, notes, and snippets.

@HurricanKai
Last active January 19, 2021 10:25
Show Gist options
  • Save HurricanKai/084001487bbe2560dda6935dbe336534 to your computer and use it in GitHub Desktop.
Save HurricanKai/084001487bbe2560dda6935dbe336534 to your computer and use it in GitHub Desktop.
Videre - Projektbeschreibung

Videre - Eine wissenschaftliche Rendering engine

(Ich empfehle diesen Text hier zu lesen)

Videre ist eine simple Vulkan-basierte Darstellungsbibliothek (Rendering engine), die eine einfache, aber effektive API verfügbar macht.

Videre kann von Programmierern ohne Grafik-Erfahrung für Prototypen, wissenschaftliche Darstellungen, etc. verwendet werden.

Videre basiert auf Silk.NET

Architektur

(Disclaimer: Videre ist noch stark in der Entwicklung. Größere Änderungen sind zu erwarten.)

Der Kern besteht aus der Engine Klasse. Diese Klasse initialisiert Vulkan, sucht ein Physisches Gerät (Grafikkarte), u.v.m.

Engine erstellt ein RenderGraph Objekt aus einem RenderGraphBuilder. Dieses Graph-Objekt wird benutzt, um Command Buffers zu füllen. Der RenderGraph definiert daher, wie und was dargestellt wird. RenderGraph lehnt sich noch sehr an Vulkan an und präzises Wissen über Vulkan ist nötig, um ihn zu füllen.

Durch die Engine und RenderGraph Klassen kann die Scene3D Klasse erstellt werden, welche stärker abstrahiert und das einfache Zeichnen von geometrischen Primitiven in 3D (Würfel, Kugel, etc.) auf dem Bildschirm erlaubt.

Vulkan

Videre ist mein erstes Projekt mit Vulkan. Ich habe praktisch alles von Grund auf gelernt.

Die Vulkan API ist riesig, und praktisch nichts ist optional: Vulkan API Diagram

Vulkan ist per design sehr expressiv, nichts wird dem Zufall überlassen. [Die Spezifikation](Vulkan® 1.2.166 - A Specification (with all registered Vulkan extensions) (khronos.org) definiert praktisch alle möglichen Nutzungsweisen. Trotzdem ist Performance ein wichtiges Ziel, dadurch wird die API sehr groß, da jedes kleine Performance feature genau spezifiziert ist.

Vulkan wird von Khronos veröffentlicht, was ein Industriekonsortium aus 150 Hardware entwickelnden Firmen, u.a. Intel, AMD und Nvidia. Khronos veröffentlicht neben Vulkan ANARI, WebGL, glTF, NNEF, OpenVX, SPIR, SPIR-V, SYCL, OpenVG, 3D Commerce, OpenXR, OpenCL, OpenGL, OpenGL ES, OpenGL SC und mehr, alle mit Fokus auf (Grafik)hardware für 3D Graphik, Virtual & Argumented Reality, Parallel Computing, Neural Networks und Vision Processing.

Vulkan benutze ich per Silk.NET was ich auch mit entwickle. Silk.NET stellt "bindings" zur Verfügung, eine Art Übersetzungsschicht zwischen C#, die Sprache meiner Wahl, und C und C++, welche Treiber, Khronos Standards, etc. verwenden.

Es wird erkennbar das Vulkan- und Grafikandwendungen allgemein hoch komplex sind, deswegen sind Bibliotheken wie Videre essentiell für Personen die Grafiken erstellen wollen, ohne dass die Grafikprogrammierung Hauptziel ist (zum Beispiel für Prototypen, wissenschaftliche Darstellungen, etc.).

Zukünftige Arbeit

Ich werde diverse Wissenschaftliche darstellungen aus dem Bereich der Physik erstellen. Dementsprechend werden zielgerichtete Verbesserungen an Videre durchgeführt. Zuerst plane ich Felder zu visualisieren, d.h. Graviatationsfelder, elektrische Felder, eventuell magnetische Felder. Außerdem werde ich einen Blick auf die Navier-Stokes-Gleichungen (Impulsgleichungen von Strömungen) werfen, da diese interessante visualisierungen hervorbringen.

Quellen

Die ersten Lernschritte wurden mit Vulkan Tutorial (vulkan-tutorial.com) gemacht, was alles in kleinen, einigermaßen verständlichen Schritten erklärt.

Daraufhin habe ich den Vulkan Discord besucht, von wo ich den wesentlich komplexeren, aber auch genaueren Vulkan Guide (vkguide.dev) empfohlen bekommen habe.

Mittlerweile arbeite ich hauptsächlich mit der Vulkan® 1.2.166 Specification (with all registered Vulkan extensions) (khronos.org), die nicht nur Spezifikation, sondern auch Erklärung beinhaltet. Diese habe ich allerdings nicht ansatzweise komplett gelesen. Selbst mit nur den KHR Extension sind das 1900+ Seiten.

Der Intel Guide "API without Secrets: The Practical Approach to Vulkan* (intel.com)" ist ebenfalls sehr hilfreich.

Einige weitere sehr hilfreiche Ressourcen sind:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment