Zu Vulkan direkt kann ich nicht viel sagen, wohl aber zu DX12 (was ja sehr sehr aehnlich ist).
Ich persoenlich halte Vulkan/DX12 fuer Hobbyprojekte ein wenig zu komplex, und man sollte sich sehr genau ueberlegen ob man es wirklich wirklich braucht. Es sei denn natuerlich man will es als Forsch- und Lernprojekt machen (das war meine Motivation).
Da ich deinen Wissensstand nicht genau kenne, versuche ich einfach mal meine persoenliche Erfahrung wiederzugeben.
Gruendsaetlich hat man mit Vulkan/DX12 viel mehr Freiheiten also mit OpenGL/DX11, ABER auch viel mehr Verantwortung. Viele Dinge die der Treiber bei den "alten" APIs gemacht hat muss man jezt selber machen. Ein Beispiel dafuer: Du bist selbst dafuer verantwortlich CPU und GPU zu synchronisieren und dass alle Daten da sind wenn die GPU sie braucht.
Damit man dass besser hinbekommt also OGL/DX11 sollte man:
1. Schon den einen oder anderen Renderer geschrieben haben und wissen wo die Bottlenecks sind
2. Gut verstehen wie die Grafikarte arbeitet.
mit einer trivialen Sync (z.B. einfach warten bis die aktuelle CommandList abgearbeitet ist wird man naemlich eher langsamer als schneller....) und der Vorteil den CPU overhead (der eh schon gering ist) zu verstecken in dem die GPU asynchron arbeitet ist dahin.
BTW: MultiGPU + Multithreaded Rendering verursacht maximal viele Konten im Gehirn (zumindest bei mir ;) ), sollte man aber von Anfang an beim Design im Hinterkopf haben wenn man es spaeter evtl mal einbauen will. Vor allem Multithreaded Rendering kann bei vielen darzustellenden Objekten hier nochmal einen gewaltigen Performanceboost bringen.
MultiGPU ist imo nur dann interessant wenn man wenig frameuebergreifenden Abhaengigkeiten hat, ansonsten bleibt nur profilen ob man damit wirklich schneller oder eher langsamer wird.
Der notwendige Quellcode (alleine fuer die Initialisation und das erste Dreieck) ist im Vergleich zu den alten APIs sehr sehr laenglich. Bedeutet man braucht ein gutes SW Design und eine gute Kapselung damit das ganze halbwegs uebersichtlich bleibt.
Ich selbst habe fuer mich als Ausgangspunkt die MiniEngine von den Microsoft Samples genommen (
https://github.com/microsoft/DirectX-Gr ... MiniEngine). Die ist in meinem Source zwar mittlerweile kaum wiederzuerkennen aber man kann gut einige Ideen und Konzepte abgucken.
Ein Grossteil sollte auch relativ einfach nach Vulkan portierbar sein dass man bei den API aufrufen teilweise nur das dx durch vk ersetzen muss ;)
Ein Portieren eines vorhandenen OpenGL oder DX11 Rendereres ist nicht sinnvoll da man damit nichts erreicht ausser einer hoeheren Komplexitaet.
Wenn dann sollte man von 0 beginnen um die Vorzuege der neuen API nutzen zu koennen.
Speicherverwaltung ist nochmal ein ganz eigenes Thema. Solange der vorhandene Grafikkartenspeicher nicht ueberschritten wird ist alles relative easy. Sobald man da aber drueber kommt und der Treiber zu swappen anfaengt ist die Performance im Keller. Dann muss man ein kluges Speichermanagement einbauen. Fuer DX12 gibt es da ein paar ganz brauchbare Hilfsbibliotheken, fuer Vulkan ka, im Zweifel selber machen.
Ausserdem wichtig von Anfang an: Profilen, Profilen und nochmal Profilen. Damit man von Anfang an sieht wer wann auf wen wartet. Hat man die effiziente Sync erst einmal verhauen ist es nur mit sehr viel Aufwand und Kopfschmerz wieder zu reparieren.
Alles in allem finde ich DX12 trotzdem eine ziemlich gelungene API, die Komplexitaet liegt nicht in der API an sich sondern daran dass man jetzt viele Dinge selber machen muss die einem bisher der Treiber abgenommen hat, dafuer hat man auch mehr Kontrolle.
Um Grafikprogramierung an sich zu lernen bzw. zu verstehen wuerde ich weder DX12 noch Vulkan empfehlen sondern nach wie vor die alten APIs. Wenn man natuerlich Dinge wie Raytracing nutzen will oder wie Schrompf viele Daten zur GPU schaufeln muss kommt man an den neuen APIs kaum vorbei. Da sind aber Dinge fuer die es aus meiner Sicht bereits eine gewisse Erfahrung braucht bevor man sie angeht.
Warum ich kein Vulkan nutze sondern DX12: ka ich entwickle privat seit jeher nur auf Windows und hab keinen Bock auf Multiplatform von daher war DX12 fuer mich einfach naheliegender, einen anderen Grund gibt es nicht.
Das war mal was mir aus dem Kopf dazu eingefallen ist, vielleicht faellt mir spaeter noch mehr ein.
Ich hoffe ich habe dich jezt nicht entmutigt, aber die Lernkurve ist wirklich sehr steil wenn man noch wenig Erfahrung im Bereich Rendererprogrammierung hat und bietet hier leider viel Potenzial fuer einen hohen Frustrationsgrad.
Wenn du noch Fragen hast melde dich einfach.