Sollten neue Grafikprogrammierer Vulkan anstelle von OpenGL lernen?


53

Aus dem Wiki : "Die Vulkan-API wurde ursprünglich von Khrono als" OpenGL-Initiative der nächsten Generation "bezeichnet." Es handelt sich um eine grundsätzliche Neugestaltung, um OpenGL und OpenGL ES zu einer gemeinsamen API zu vereinen, die nicht rückwärts geht. " kompatibel mit bestehenden OpenGL - Versionen ".

Sollten diejenigen, die sich jetzt mit Grafikprogrammierung befassen, besser in der Lage sein, Vulkan anstelle von OpenGL zu lernen? Es scheint, dass sie dem gleichen Zweck dienen werden.


1
Wenn Sie etwas in einer API tun können, können Sie es in jeder anderen API tun. Die Art und Weise, wie dies getan wird, hängt von der API ab.
A --- B

Antworten:


33

Kaum!

Dies scheint in etwa der Frage zu entsprechen, ob neue Programmierer C ++ anstelle von C lernen sollen oder ob neue Künstler digitales Malen anstelle von physischem Malen lernen sollen.

Insbesondere, weil es NICHT abwärtskompatibel ist, wären Grafikprogrammierer dumm, die in der Branche am häufigsten verwendete Grafik-API auszuschließen, einfach weil es eine neue gibt. Außerdem macht OpenGL verschiedene Dinge anders. Es ist durchaus möglich, dass sich ein Unternehmen zu Beginn des Spiels für OpenGL gegenüber Vulkan entscheidet, und dass es sich nicht für jemanden interessiert, der OpenGL nicht kennt, unabhängig davon, ob er Vulkan kennt oder nicht.

Spezialisierung ist selten eine marktfähige Fähigkeit.

Für diejenigen, die ihre Fähigkeiten nicht als solche vermarkten müssen, wie Indie-Entwickler, wäre es noch törichter, ein Tool aus ihrer Toolbox zu entfernen. Ein Indie-Entwickler ist noch mehr auf Flexibilität angewiesen und in der Lage zu entscheiden, was funktioniert und was finanziert wird. Die Spezialisierung auf Vulkan schränkt Ihre Möglichkeiten nur ein.

Spezialisierung ist selten ein effizientes Paradigma.


2
Gute Antwort, erinnerte mich daran: elise.com/quotes/heinlein_-_specialization_is_for_insects
Will

7
Diese C ++ - Analogie ist unangemessen. Vulkan ist eine neue API der nächsten Generation, die von den Entwicklern von OpenGL entwickelt wurde. C ++ ist ein etablierter, meist abwärtskompatibler Konkurrent zu C.
Moby Disk

Diese Einzelheiten sind für die Analogie irrelevant.
mHurley

6
Die Behauptung, Spezialisierung sei ineffizient oder nicht marktfähig, ist unglaublich naiv. Ein Übersetzer, der alle fünf Wörter in jeder einzelnen gesprochenen Sprache kennt, ist nutzlos. Die Leute werden Übersetzer einstellen, die eine kleine Anzahl von Sprachen beherrschen (oder sich darauf spezialisiert haben). Jetzt über -specializing ist problematisch. Ein Übersetzer, der eine Sprache vollständig beherrscht und nur diese Sprache kennt, ist auch kein nützlicher Übersetzer. Und Entwickler (Indie oder andere) müssen darauf achten, nicht die ganze Zeit mit dem Erlernen neuer Tools zu verbringen. Schließlich müssen sie tatsächlich etwas machen, um etwas zu verkaufen, damit sie nicht bankrott gehen
8bittree

Nur um klar zu sein, ich bin nicht unbedingt anderer Meinung als Sie in Bezug auf OpenGL und Vulkan. Dies ist möglicherweise ein Fall, in dem das Lernen von beiden anstelle von nur Vulkan die bessere Wahl ist.
8bittree

40

Wenn Sie jetzt loslegen und die GPU-Arbeit erledigen möchten (anstatt immer eine Game-Engine wie Unity zu verwenden), sollten Sie auf jeden Fall Vulkan lernen. Vielleicht solltest du GL später auch lernen, aber es gibt ein paar Gründe, Vulkan-first zu denken.

  1. GL und GLES wurden vor vielen Jahren entwickelt, als GPUs ganz anders arbeiteten. (Der offensichtlichste Unterschied sind Draw Calls im Sofortmodus im Vergleich zu Kacheln und Befehlswarteschlangen.) Der GL ermutigt Sie, im Sofortmodus zu denken, und verfügt über eine Menge veralteter Cruft. Vulkan bietet Programmiermodelle, die der Funktionsweise moderner GPUs sehr viel näher kommen. Wenn Sie also Vulkan lernen, haben Sie ein besseres Verständnis dafür, wie die Technologie wirklich funktioniert und was effizient und was ineffizient ist. Ich sehe viele Leute, die mit GL oder GLES angefangen haben und sofort schlechte Angewohnheiten haben, wie separate Draw Calls pro Objekt, anstatt VBOs zu verwenden, oder noch schlimmer, Anzeigelisten. Für GL-Programmierer ist es schwierig herauszufinden, was nicht mehr gefördert wird.

  2. Es ist viel einfacher, von Vulkan zu GL oder GLES zu wechseln als umgekehrt. Vulkan macht eine Reihe von Dingen explizit, die im GL verborgen oder unvorhersehbar waren, z. B. die Kontrolle des gemeinsamen Zugriffs, die Freigabe und den Rendering-Status. Dies erhöht die Komplexität des Treibers auf die Anwendung. Auf diese Weise erhält die Anwendung jedoch die Kontrolle und es wird einfacher, vorhersehbare Leistung und Kompatibilität zwischen verschiedenen GPU-Anbietern zu erzielen. Wenn Sie Code haben, der in Vulkan funktioniert, ist es ziemlich einfach, diesen auf GL oder GLES zu portieren, und Sie haben am Ende etwas, das gute GL / GLES-Gewohnheiten verwendet. Wenn Sie Code haben, der in GL oder GLES funktioniert, müssen Sie fast von vorne anfangen, damit er in Vulkan effizient funktioniert. Dies gilt insbesondere, wenn er in einem älteren Stil geschrieben wurde (siehe Punkt 1).

Zuerst war ich besorgt, dass es viel schwerer ist, gegen Vulkan zu programmieren, und dass es für erfahrene Entwickler in größeren Unternehmen in Ordnung wäre, aber ein großes Hindernis für Indies und Hobbyisten. Ich stellte diese Frage einigen Mitgliedern der Arbeitsgruppe und sie sagten, sie hätten Datenpunkte von Leuten, mit denen sie gesprochen haben und die bereits nach Vulkan gezogen sind. Diese Leute reichen von Entwicklern bei Epic, die an der UE4-Integration arbeiten, bis zu Bastlern von Spielen. Ihre Erfahrung war, dass das Erlernen von Konzepten und längerem Boilerplate-Code für den Einstieg (dh das Erreichen eines Dreiecks auf dem Bildschirm) nicht allzu kompliziert war, selbst für die Indies. Aber nachdem sie in dieser Phase angekommen waren, fanden sie es viel einfacher, eine echte, versendbare Anwendung aufzubauen. weil (a) das Verhalten zwischen den Implementierungen der verschiedenen Anbieter viel vorhersehbarer ist und (b) das Erreichen einer guten Leistung mit allen aktivierten Effekten nicht so viel Versuch und Irrtum beinhaltete. Mit diesen Erfahrungen von echten Entwicklern haben sie mich überzeugt, dass das Programmieren gegen Vulkan auch für Anfänger in der Graphik rentabel ist und dass die Gesamtkomplexität geringer ist, wenn Sie das Tutorial hinter sich lassen und anfangen, Demos oder Anwendungen zu erstellen, die Sie anderen Leuten geben können.

Wie andere gesagt haben: GL ist auf vielen Plattformen verfügbar, WebGL ist ein nützlicher Übermittlungsmechanismus, es gibt eine Menge existierender Software, die GL verwendet, und es gibt viele Arbeitgeber, die für diese Fähigkeit einstellen. Es wird noch einige Jahre dauern, bis Vulkan ein Ökosystem aufgebaut hat. Aus diesen Gründen wäre es dumm, das Erlernen von GL gänzlich auszuschließen. Trotzdem haben Sie es viel leichter und werden ein besserer GL-Programmierer (und ein besserer GPU-Programmierer im Allgemeinen), wenn Sie mit etwas beginnen, das Ihnen hilft, die GPU zu verstehen, anstatt zu verstehen, wie sie funktioniert vor 20 Jahren.

Natürlich gibt es noch eine Option. Ich weiß nicht, ob dies speziell für Sie relevant ist, aber ich denke, ich sollte es trotzdem für die anderen Besucher sagen.

Um ein Indie-Games-Entwickler oder ein Game-Designer zu sein oder VR-Erfahrungen zu sammeln, müssen Sie weder Vulkan noch GL lernen. Viele Leute beginnen mit einer Spiele-Engine (Unity oder UE4 sind im Moment sehr beliebt). Wenn Sie eine solche Engine verwenden, können Sie sich auf das Erlebnis konzentrieren, das Sie erstellen möchten, anstatt auf die Technologie, die dahinter steckt. Dadurch werden die Unterschiede zwischen GL und Vulkan vor Ihnen verborgen, und Sie müssen sich keine Gedanken darüber machen, welche auf Ihrer Plattform unterstützt werden. Hier erfahren Sie mehr über 3D-Koordinaten, -Transformationen, -Beleuchtung und -Animation, ohne sich sofort mit allen wichtigen Details befassen zu müssen. Einige Spiel- oder VR-Studios arbeiten nur in einer Engine und haben überhaupt keinen Vollzeit-GL-Experten. Sogar in größeren Studios, die ihre eigenen Motoren schreiben, sind die Leute, die die Grafikprogrammierung machen, eine Minderheit.

Das Erlernen der Details zur Interaktion mit einer GPU ist sicherlich eine nützliche Fähigkeit, die viele Arbeitgeber zu schätzen wissen, aber Sie sollten nicht das Gefühl haben, dies lernen zu müssen, um in die 3D-Programmierung einzusteigen. und selbst wenn du es weißt, wird es nicht unbedingt etwas sein, das du jeden Tag benutzt.


2
Ich bin etwas anderer Meinung. Für erfahrene Entwickler hat sich die Implementierung von Vulkan (und DX12) als sehr schwierig erwiesen. Mit all der Kraft, die Vulkan Ihnen gibt, ist es sehr, sehr einfach, sich in den Fuß zu schießen. Darüber hinaus benötigt Vulkan viel mehr Code für Boilerplates. Für jemanden, der nur etwas über GPU-Programmierung lernt, denke ich, dass Vulkan sehr überwältigend sein wird.
RichieSams

2
@RichieSams Ich glaube nicht, dass du "implementieren" gemeint hast. Nur der GPU-Anbieter muss Vulkan implementieren, und es ist viel einfacher als die Implementierung von OpenGL. (Glauben Sie mir, ich habe es geschafft!) Unter der Annahme, dass es schwierig ist, sich in die Vulkan WG zu integrieren oder dagegen zu programmieren, habe ich einen Absatz mit einigen Informationen hinzugefügt, die ich aus der Vulkan WG gelernt habe.
Dan Hulme

Richtig. Implementieren ist vielleicht eine schlechte Wortwahl. Ich wollte "verwenden" in Ihrem Programm. Aber ich mag deine Änderungen. Gut ausgedrückt
RichieSams

@DanHulme - Ich bin überrascht von Ihrem Kommentar "GL ermutigt Sie, im Sofortmodus zu denken". Ich dachte das galt nur für frühe OpenGL Versionen?
ToolmakerSteve

1
@ToolmakerSteve Die OpenGL-Arbeitsgruppe hat viel Arbeit in das Hinzufügen von Parallelität und Batch-Schreibvorgängen gesteckt, sodass Sie Ihr Programm auf eine Weise ausdrücken können, die für das Kacheln / Zurückstellen von Implementierungen geeignet ist. Aber es ist immer noch ein Fundament, das im Zeitalter des unmittelbaren Modus gelegt wurde, weshalb diese Leute beschlossen, einen Neuanfang in Vulkan zu brauchen. Und ich sehe immer noch viele neue Benutzer, die mit GL beginnen und ein mentales Modell für die Funktionsweise von Implementierungen im Sofortmodus bilden.
Dan Hulme

26

Beim Lernen der Grafikprogrammierung geht es um mehr als nur um das Lernen von APIs. Es geht darum zu lernen, wie Grafiken funktionieren. Vertex-Transformationen, Beleuchtungsmodelle, Schattentechniken, Textur-Mapping, verzögertes Rendern usw. Diese haben absolut nichts mit der API zu tun, mit der Sie sie implementieren.

Die Frage lautet also: Möchten Sie lernen, wie man eine API verwendet? Oder möchten Sie Grafiken lernen ?

Um mit hardwarebeschleunigten Grafiken arbeiten zu können, müssen Sie lernen, wie Sie mit einer API auf diese Hardware zugreifen. Sobald Sie jedoch die Möglichkeit haben, mit dem System zu kommunizieren, konzentriert sich Ihr Grafiklernen nicht mehr auf die Aufgaben der API, sondern auf Grafikkonzepte. Beleuchtung, Schatten, Bump-Mapping usw.

Wenn Sie Grafikkonzepte erlernen möchten, verbringen Sie weniger Zeit mit der API, als mit dem Erlernen von Grafikkonzepten . Das Kompilieren von Shadern hat nichts mit Grafiken zu tun. Sie wissen auch nicht, wie Sie Uniformen versenden, Scheitelpunktdaten in Puffer hochladen usw. Dies sind Tools und wichtige Tools für die Ausführung von Grafiken.

Aber sie sind eigentlich keine Grafikkonzepte. Sie sind ein Mittel zum Zweck.

Es erfordert viel Arbeit und Lernen mit Vulkan, bis Sie den Punkt erreichen, an dem Sie mit dem Erlernen von Grafikkonzepten beginnen können. Die Weitergabe von Daten an Shader erfordert eine explizite Speicherverwaltung und eine explizite Synchronisierung des Zugriffs. Und so weiter.

Das Erreichen dieses Punktes mit OpenGL erfordert dagegen weniger Arbeit. Und ja, ich spreche von modernen, Shader-basierten OpenGL-Kernprofilen.

Vergleichen Sie einfach, was nötig ist, um etwas so einfaches wie das Löschen des Bildschirms zu tun. In Vulkan erfordert dies zumindest einige Kenntnisse über eine Vielzahl von Konzepten: Befehlspuffer, Gerätewarteschlangen, Speicherobjekte, Abbilder und die verschiedenen WSI-Konstrukte.

In OpenGL ... es ist drei Funktionen: glClearColor, glClearund die plattformspezifischen Swap puffert Anruf. Wenn Sie moderneres OpenGL verwenden, können Sie es auf zwei glClearBufferuivreduzieren : und Puffer austauschen. Sie müssen nicht wissen, was ein Framebuffer ist oder woher sein Image stammt. Sie löschen es und tauschen die Puffer aus.

Da sich OpenGL viel vor Ihnen verbirgt, ist es weniger aufwendig, den Punkt zu erreichen, an dem Sie tatsächlich Grafiken lernen, als die Schnittstelle zur Grafikhardware zu erlernen.

Darüber hinaus ist OpenGL eine (relativ) sichere API. Es wird normalerweise Fehler ausgeben, wenn Sie etwas falsch machen. Vulkan ist nicht. Während es Debugging-Ebenen gibt, mit denen Sie helfen können, sagt Ihnen die Vulkan-Kern-API fast nichts, es sei denn, ein Hardwarefehler liegt vor. Wenn Sie etwas falsch machen, können Sie Müll rendern oder die GPU zum Absturz bringen.

In Verbindung mit der Komplexität von Vulkan wird es sehr leicht, versehentlich das Falsche zu tun. Wenn Sie vergessen, eine Textur auf das richtige Layout einzustellen, funktioniert dies möglicherweise in einer Implementierung, in einer anderen jedoch nicht. Das Vergessen eines Synchronisationspunkts kann manchmal funktionieren, aber dann plötzlich ohne ersichtlichen Grund fehlschlagen. Und so weiter.


Das Erlernen von Grafiken ist jedoch mehr als das Erlernen grafischer Techniken. Es gibt insbesondere einen Bereich, in dem Vulkan gewinnt.

Grafische Leistung .

Um ein 3D-Grafikprogrammierer zu sein, ist normalerweise eine Vorstellung davon erforderlich, wie Sie Ihren Code optimieren können. Und hier wird es zum Problem, wenn OpenGL Informationen versteckt und Dinge hinter Ihrem Rücken tut.

Das OpenGL-Speichermodell ist synchron. Die Implementierung darf Befehle asynchron ausgeben, solange der Benutzer den Unterschied nicht feststellen kann. Wenn Sie also ein Image rendern und versuchen, es zu lesen, muss die Implementierung ein explizites Synchronisationsereignis zwischen diesen beiden Tasks ausgeben.

Um jedoch eine Leistung in OpenGL zu erzielen, müssen Sie wissen, dass Implementierungen dies tun, damit Sie dies vermeiden können . Sie müssen erkennen, wo die Implementierung heimlich Synchronisierungsereignisse ausgibt, und dann Ihren Code neu schreiben, um sie so weit wie möglich zu vermeiden. Die API selbst macht dies jedoch nicht deutlich. Sie müssen dieses Wissen von irgendwoher erlangt haben.

Mit Vulkan ... sind Sie derjenige, der diese Synchronisationsereignisse ausgeben muss. Daher Sie müssen sich der Tatsache bewusst sein , dass die Hardware nicht ausgeführt Befehle synchron. Sie müssen wissen, wann Sie diese Ereignisse ausgeben müssen, und daher müssen Sie sich darüber im Klaren sein, dass sie Ihr Programm wahrscheinlich verlangsamen werden. Sie tun also alles, um sie zu vermeiden.

Eine explizite API wie Vulkan zwingt Sie dazu, solche Leistungsentscheidungen zu treffen. Wenn Sie die Vulkan-API kennenlernen, haben Sie bereits eine gute Vorstellung davon, welche Dinge langsam und welche schnell sein werden.

Wenn Sie einige Framebuffer-Arbeiten ausführen müssen, die Sie zwingen, einen neuen Renderpass zu erstellen, stehen die Chancen gut, dass dieser langsamer ist, als wenn Sie ihn in einen separaten Subpass eines Renderpasses einpassen könnten. Das bedeutet nicht, dass Sie das nicht tun können, aber die API teilt Ihnen im Voraus mit, dass dies zu einem Leistungsproblem führen kann.

In OpenGL lädt Sie die API grundsätzlich dazu ein, Ihre Framebuffer-Anhänge nach Belieben zu ändern. Es gibt keine Anleitung, welche Änderungen schnell oder langsam sein werden.

In diesem Fall können Sie mit Vulkan besser lernen, wie Sie Grafiken schneller machen können. Und es wird Ihnen sicherlich dabei helfen, den CPU-Overhead zu reduzieren.

Es wird noch viel länger dauern, bis Sie den Punkt erreichen, an dem Sie grafische Rendering-Techniken erlernen können.


1
Ich bin froh, dass Sie dies gepostet haben, denn es macht einige Ideen sehr deutlich, die ich in meiner Antwort zögerte auszudrücken: Das Erlernen der Konzepte ist am wichtigsten. Ich denke, wir unterscheiden uns darin, dass Sie den GL ermutigen, weil es einfacher ist, anzufangen, während ich denke, dass die Leichtigkeit des Einstiegs das Risiko birgt, Dinge auf traditionelle Weise zu tun. In GL ist es ziemlich schwer zu wissen, was die "moderne GL-Sprache" ist, verglichen mit der Programmierung in einem alten Stil. Wenn Sie von niemandem aufgefordert werden, VAOs anstelle eines separaten Zeichnungsaufrufs pro Grundelement zu verwenden, ist es viel schwieriger, diesen Fehler später zu verlernen.
Dan Hulme

1
@DanHulme: Es geht nur darum, die richtigen Lernmaterialien zu verwenden. Es gibt viele solcher Materialien im Internet, die moderne Redewendungen verwenden. Niemand sollte jemals versuchen, Grafiken nur durch Lesen eines Referenzhandbuchs oder einer Spezifikation zu erlernen.
Nicol Bolas

Sie lassen es ganz einfach klingen! Trotzdem sehe ich immer noch, wie Programmierer mit Grafiken anfangen - einige von ihnen sind in anderen Bereichen sehr kompetent - und Legacy-Funktionen verwenden und nichts über die Leistungsmerkmale lernen. Es ist wirklich schwer, das in Vulkan falsch zu verstehen, weil es teure Dinge teuer aussehen lässt . Jedenfalls brauchen wir uns nicht zu streiten. Ich stimme Ihrem Hauptpunkt zu: Das Erlernen der Konzepte ist am wichtigsten, und Sie können dies ohne Vulkan oder GL tun.
Dan Hulme

@DanHulme: " Es ist wirklich schwer, das in Vulkan falsch zu machen. " Weil du zu beschäftigt bist, alles andere falsch zu machen;) Außerdem ist es in Vulkan immer noch ziemlich einfach, die Leistung falsch zu machen. Unnötige Synchronisation. Nur das "allgemeine" Bildlayout verwenden. Subpässe nicht nutzen. Häufige Pipelineänderungen. Und so weiter. Ganz zu schweigen davon, dass sich verschiedene Anbieter nicht einmal einig sind, wie Vulkan am besten eingesetzt werden soll.
Nicol Bolas

2
@DanHulme: Wie einfach es ist, modernes OpenGL zu verwenden, ich gebe mein Bestes , um es einfach zu machen . Wenn die Leute darauf bestehen, von Müllseiten wie NeHe zu lernen oder zufällige Dokumentationen zu lesen, kann das niemandem helfen. Sie können Pferde zum Wasser führen, aber Sie können sie nicht trinken lassen.
Nicol Bolas

7

Der primäre Reiz von OpenGL (zumindest für mich) ist, dass es auf vielen Plattformen funktioniert. Derzeit funktioniert Vulkan nicht unter OSX und Apple hat eine konkurrierende API namens Metal. Es ist sehr wahrscheinlich, dass es einige Zeit dauert, bis Apple Vulkan unterstützt, und wenn dies der Fall ist, wird der Vulkan-Support möglicherweise nur die neueste Hardware unterstützen. OpenGL unterstützt bereits die meiste Hardware und wird dies auch weiterhin tun.


Ich wette, wenn OSX jemals Vulkan unterstützen würde, würde es nur einen kleinen Teil davon unterstützen, und das würde auch die Grafik-API der nächsten Generation für Webbrowser werden. OpenGL ist immer noch viel einfacher zu bedienen (bis zu einem gewissen Grad natürlich) als Vulkan, was Vulkan an Einfachheit gegenüber dem Rendern von Pipelines gewinnt, verliert es bei der expliziten Behandlung vieler anderer
Dinge

1
Der @DarioOO OpenGL-Sofortmodus ist viel einfacher zu verwenden als der Modus, den Sie nicht als Sofortmodus bezeichnen. Dies wird jedoch nicht empfohlen.
user253751

1
@Gavin: Es sollte beachtet werden, dass OpenGL-Versionen 4.2 oder höher auch unter OSX nicht unterstützt werden. Also , wenn Sie etwas verwenden möchten kürzlich von OpenGL auf OSX, Sie können es nicht. Und es ist sehr unwahrscheinlich, dass Apple spätere OpenGL-Versionen übernimmt. Die Apple-Plattform ist All-in-Metal, Cross-Plattform ist also ein Reinfall.
Nicol Bolas

Apple wird Vulkan niemals unterstützen, es sei denn, sie sind dazu gezwungen, und die Wirtschaftlichkeit ist ziemlich einfach. Durch den Einstieg in den Metal hoffen sie, Entwickler mobiler Spiele zu gewinnen, die mehr benötigen, als GLES2 bieten kann, aber nicht über die Ressourcen verfügen, um ihre Spiele sowohl für Vulkan als auch für den Metal zu schreiben. Sie sind bereit, dafür das winzige Gaming-Ökosystem des Mac zu opfern, insbesondere wenn iOS-Entwickler auch im Mac App Store erscheinen.
Jonathan Baldwin

Vulkan arbeitet jetzt unter macOS (früher OS X): moltengl.com
Alexander

4

Es hängt davon ab, was Sie tun möchten. Wenn Sie das Programmieren von Grafiken nur für sich selbst lernen möchten, spielt es keine Rolle, für was Sie sich entscheiden.

Wenn Sie an professionelle Arbeit denken, empfehle ich Vulkan. Es ist näher an der Hardware und ich denke, dass das Wissen darüber, was Hardware tut, für Grafikprogrammierer wichtig ist.

Vulkan ist näher an der Hardware, da OpenGL eine Menge Dinge unter der Haube erledigt, die Sie in Vulkan manuell erledigen, z. B. die Ausführung einer Befehlswarteschlange. Auch die Speicherverwaltung hängt von der Anwendung und nicht vom Treiber ab. Sie müssen sich darum kümmern, Speicher zuzuweisen uniforms(Variable, die Sie von der CPU an die GPU übergeben) und diese zu verfolgen. Sie müssen sich um mehr Sorgen machen, aber es gibt Ihnen auch mehr Freiheit bei der Verwendung des Speichers. Es kann beängstigend und überwältigend klingen, ist es aber nicht. Es ist nur die nächste API, die Sie lernen müssen.

Das Verständnis dieser Dinge hilft auch dabei, die Funktionsweise der GPU zu verstehen. Was ermöglicht es Ihnen, einige Optimierungen sowohl auf Vulkan als auch auf OpenGL durchzuführen.

Und noch eine Sache, die mir einfällt, wenn Sie anfangen, Grafikprogrammierung zu lernen, wahrscheinlich, wenn Sie einen Job als ein Vulkan suchen, wird dies populärer sein (vielleicht populärer als OpenGL). Soweit ich weiß, schreiben die meisten Unternehmen, die einige Grafik-APIs verwenden, eigene Funktionen, sodass die Möglichkeit besteht, dass Sie im Job weder in OpenGL noch in Vulkan schreiben, aber Kenntnisse über die GPU immer nützlich sind.


2

Ich bin jetzt seit ein paar Monaten mit der Grafikprogrammierung beschäftigt.

Im Moment bin ich noch in der High School und ich kann Ihnen sagen, dass ich fast immer danach suche, plattformübergreifende Anwendungen zu entwickeln. Dies ist in der Tat mein größtes Problem mit Vulkan - Es ist nicht für alle Plattformen geeignet. Ich arbeite mit OpenGL in Java und habe seit über 6 Monaten.

Ein weiteres Problem, das ich habe, ist mit Vulkans Behauptungen, wie es behauptet, besser zu sein. OpenGL aktualisiert ihre Website sicherlich nicht sehr oft. Sie veröffentlichen ständig Updates und ich freue mich immer auf neue Updates, die schneller laufen oder mit neuer Hardware besser funktionieren.

Obwohl ich hauptsächlich mit OpenGL arbeite, verstehe ich die Grundprinzipien von DirectX und Vulkan. Ich arbeite nicht viel mit ihnen, besonders nicht mit Vulkan, da es sehr schwer zu erlernen ist und für die Programmierung nicht so gut strukturiert ist wie OpenGl und DirectX.

Abschließend möchte ich hinzufügen, dass die Spezialisierung auf ein einzelnes Gebiet, wie ich hauptsächlich Java und OpenGL verwende, nicht erstaunlich marktfähig ist. Wenn ich bei einem Unternehmen arbeiten wollte, das Spiele herstellt, würde OpenGL zum größten Teil nur dazu verwendet, Spiele für die Linux- und Android-Entwicklung und möglicherweise für OSX zu entwickeln. DirectX für Windows und Konsolen <Welches Vulkan in einigen Fällen ersetzen kann.

Ich kann nicht ewig auf OpenGL-Updates warten und werde es auch nicht tun. Aber ich bevorzuge die Entwicklung.


" Ein weiteres Problem, das ich habe, ist, dass Vulkan behauptet, besser zu sein. " Vulkan behauptet nicht, etwas zu sein. Es ist nur eine API; es kann keine Ansprüche geltend machen.
Nicol Bolas

Weißt du, dass Vulkan und GL größtenteils von denselben Leuten hergestellt werden?
Dan Hulme

Ja, ich will. Ich bevorzuge immer noch GL
Winter Roberts

2

Ich möchte Ihnen meine Grafik-Einsteigerperspektive zum Thema geben. Was ich (in vielen Jahren als Ingenieur auf einem anderen Gebiet) erkannt habe, ist, dass die grundlegenden Konzepte der wichtigste Teil sind. Sobald Sie ein solides Verständnis für diese haben, ist das Erlernen der letzten glänzenden neuen API der am wenigsten schwierige Teil. Ich weiß nicht, ob Sie ein junger Hobby sind, der versucht, den neuen Skyrim zu programmieren, oder ob Sie einen Job im CG-Bereich suchen.

Ich sage Ihnen, was meiner Meinung nach der beste Ansatz ist , um Computergrafik "wie ein Profi" zu lernen.

  1. Lernen Sie lineare Algebra und Geometrie wie ein Profi. Vergessen Sie ohne dies jede schicke API oder Grafik
  2. Kaufen Sie ein gutes Buch über Computergrafik (z. B. Grundlagen der Computergrafik )
  3. Richten Sie während des Studiums des Buches eine Programmierumgebung ein, in der Sie ein Bild zeichnen und die Algorithmen implementieren können! Es kann Java 2D oder C ++ und SDL oder sogar Python und Pygame sein, je nachdem, worauf es ankommt. Zu diesem Zeitpunkt müssen Sie Ihre sich drehenden strukturierten Zahnräder mit mehreren Kameraansichten zum Laufen bringen, bevor Sie versuchen, 10000 FPS zu erzielen
  4. Nehmen Sie es jetzt mit OpenGL, Vulkan oder DirectX auf und wiederholen Sie Ihr ausgefallenes Beispiel (siehe oben).

Sich Gedanken über die Leistung zu machen, bevor Sie verstehen, wie man eine Linie zeichnet, ist wie sich Gedanken über die Aerodynamik Ihres Autos zu machen, bevor Sie den Führerschein erhalten.


0

Ich bin in C ++ ohne formale Ausbildung Autodidakt und habe in den letzten 15 Jahren sowohl OpenGL 1.0 bis Modern OpenGL als auch DirectX 9c, 10 und 11 gelernt. Ich bin noch nicht in DirectX 12 eingestiegen und wollte es versuche meine Hand bei Vulkan. Ich habe nur ein paar grundlegende Tutorials absolviert, um mit Vulkan ein einfaches Dreieck oder einen einfachen sich drehenden Würfel zu zeichnen. Wie bei DirectX 11 und OpenGL 3.3+ habe ich voll funktionsfähige 3D-Game-Engines geschrieben und sie sogar zum Erstellen einfacher Spiele verwendet.

Ich muss sagen, dass es von der Gesamtumgebung der Person abhängt, die lernt. Wenn Sie sich gerade erst mit der 3D-Grafikprogrammierung beschäftigen, sollten Sie zunächst einmal OpenGL oder DirectX 11 ausprobieren, da es eine Vielzahl von Tutorials, Ressourcen, Beispielen und bereits funktionierenden Anwendungen gibt. Das Erlernen von 3D-Grafiken ist kein einfaches Thema.

Wenn wir uns vom Programmieraspekt entfernen und uns nur auf den Begriff konzentrieren, welche Techniken verwendet werden, die die verschiedenen Ebenen der Mathematik betreffen, die zu Datensätzen, Datenstrukturen und Algorithmen führen; Es gibt eine Menge, die Sie zuerst kennen und verstehen müssen, bevor Sie überhaupt versuchen können, eine 3D-Game-Engine zu erstellen oder eine vorhandene effektiv zu nutzen.

Wenn Sie die Mathematik und Theorie dahinter bereits verstehen und über Programmiererfahrung verfügen, können Sie bereits vorhandene APIs, Bibliotheken und Anwendungen wie Unity oder Unreal Engine verwenden und einfach den Quellcode und die Skripte schreiben, die Sie zum Funktionieren Ihrer Anwendung benötigen .

Nach meinem eigenen Verständnis und meiner Auffassung ist dies der Fall, wenn Sie ein schnelles Spiel nur zum Zweck des Aufbaus eines Spiels erstellen möchten. Verwenden Sie bereits vorhandene Rahmenwerke, die Ihre Produktionszeit erheblich verkürzen würden. Wenn Sie jedoch die Funktionsweise von Game Engines / Physics Engines / Animation Engines und Simulatoren verstehen und selbst erstellen möchten, können Sie hier zwischen der Auswahl einer API wie DirectX wählen. OpenGL oder Vulkan. Einer der bestimmenden Faktoren hierbei wäre auch Ihr vorhandenes Programmierwissen. Was ich damit meine, ist, wenn Sie nichts über Multithreading, synchrone vs. asynchrone Aufrufe, Speicherzäune, Datenrennen, Semaphoren und Parallelität (parallele Programmierung) wissen.

Ich erwähne dies, weil Sie nicht wissen, wie Sie Ihren Speicher zusammen mit Ihren Threads und der Zugriffszeit richtig verwalten. Vulkan wird dich in den Arsch beißen! Wo OpenGL und DirectX Ihre Hand durch den Verbrauch von viel mehr CPU-Leistung halten.

Wenn Sie nun gute Programmierkenntnisse haben und über die folgenden mathematischen Hintergründe verfügen, die alle Stufen der Algebra, Geometrie, Trigonometrie, Booleschen Algebra, Wahrscheinlichkeit, Statistik, Vektor-Matrix-basierte Algebra, Kalkül I, II usw. umfassen. Unendlich (lol). Vektorrechnung, Lineare Algebra, Lineare Gleichungssysteme, Analytische Geometrie mit Vektorrechnung, Zahl- und Mengenlehre, Datensätze und Strukturen, Computeranalyse, Computergestütztes und Algorithmisches Design. Dann können Sie sich mit den Konzepten befassen, die für die Erstellung einer tatsächlichen Spiel-Engine erforderlich sind, und dies ohne jegliche angewandte Mathematik oder physikalische Gleichungen, die Sie benötigen. Sobald Sie über ausreichende Programmiererfahrung verfügen, insbesondere über Speicherverwaltung und Zeigerarithmetik, können Sie mit der Erstellung Ihrer Game Engine beginnen.

Die Sache hier ist also, dass Sie alle Aspekte verstehen müssen, die erforderlich sind, um eine Game Engine zu erstellen, damit Sie erweiterte Grafikprogrammierung durchführen können. Wenn Sie nur 2D-Grafiken erstellen, ist das Leben nicht allzu schwer, da dies in Python ohne die oben genannten APIs möglich ist! Wenn Sie es jedoch ernst meinen und eine leistungsstarke Game Engine entwickeln möchten, die mit vielen Funktionen ausgestattet ist, können Sie entweder C oder C ++ wählen und entweder OpenGL, Direct X oder Vulkan verwenden. Jeder von ihnen wäre in Ordnung. Wenn Sie die Engine von Grund auf neu erstellen und die "effizienteste" laufende Engine mit dem geringsten Ressourcenaufwand suchen, sollten Sie Vulkan wählen. Aber wenn Sie diesen Weg gehen, sollten Sie zumindest alles wissen, was ich oben erwähnt hatte, und einige!

Wie Sie sehen, richtet sich Vulkan nicht wirklich an Programmieranfänger in diesem Bereich. Sie müssen über umfassende Kenntnisse der Mathematik, der Programmierparadigmen, der verschiedenen Arten von Datensätzen und Algorithmen verfügen, einschließlich Threading, Speichersynchronisation und paralleler Programmierung. Und selbst dann muss die Anwendung nur ein einfaches 2D-Dreieck auf den Bildschirm laden. Was in etwa 100 Codezeilen in OpenGL oder 250 Codezeilen in DirectX möglich ist, erfordert in Vulkan fast 1.000 Codezeilen!

Vulkan überlässt alles Ihnen, da Sie für alle Aspekte der Verwendung von Vulkan in Ihrer Anwendung verantwortlich sind. Es gibt kein Halten der Hand, es behindert Sie nicht, Sie können sich in den Fuß schießen oder Sie können sich aufhängen, kaufen Sie eine rekursive Schlinge!

Das soll nicht heißen, dass Anfänger oder Neulinge auf diesem Gebiet kein Vulkan lernen sollten, aber ich würde ihnen Folgendes vorschlagen: Lernen Sie zuerst genug von OpenGL und / oder DirectX, um Ihre Füße nass zu machen und zu sehen, wie man Die Basisanwendung ist so aufgebaut, dass sie ein einfaches Dreieck oder einen sich drehenden Würfel darstellt. Machen Sie sich mit ihren APIs und ihren wiederkehrenden Mustern ihrer Strukturen vertraut. Während Sie lernen, dass Sie Vulkan parallel lernen können, können Sie auf diese Weise sehen, wie jeder der drei die gleiche Aufgabe erfüllt, aber wie sie es anders machen. Dann können Sie auch die Ergebnisse zwischen den verschiedenen APIs und von vergleichen Dort können Sie dann eine Auswahl treffen, die Ihnen am besten gefällt. Diese Methode würde Ihnen auch ein anderes Tool in Ihre Toolbox geben, und Sie könnten sogar Ihre Anwendung schreiben, um alle 3 zu unterstützen und die "

Letztendlich liegt es an dieser Person, zu entscheiden, welchen Weg sie einschlagen möchte, und von da an wird ihr Erfolg durch ihr Engagement, ständiges Studium, harte Arbeit, Versuch und Irrtum und vor allem durch ihr Versagen bestimmt. Wenn Sie nicht scheitern, sind Sie nicht erfolgreich! Sie sind nur erfolgreich, wenn Sie gescheitert sind, Ihre Fehler gefunden, behoben, fortgefahren und wieder aufgestanden sind und alles noch einmal gemacht haben!


-1

Sie sollten zuerst OpenGL lernen, da dies der Standard für Grafiken auf so vielen Plattformen ist.

Selbst wenn es eine neuere Bibliothek gibt, ist es sehr wichtig, die Grundlagen zu verstehen und mit einer Sprache zu arbeiten, die in der gesamten Branche verwendet wird ... Zumal Vulkan seit einiger Zeit nicht mehr in großen Unternehmen verwendet wird.

  1. Niemand möchte sich sofort anpassen und sich schließlich mit einem instabilen Framework / einer instabilen Bibliothek anlegen.

  2. Sie müssten ihre derzeitigen Open-GL-Programmierer einstellen / umschulen, und das ist nicht erforderlich.


Außerdem habe ich gehört, dass OpenGL und Vulkan nicht genau dasselbe sind. Ich habe gehört, Vulkan ist eine niedrigere API-Ebene und näher am Maschinencode als OpenGL.

Diese Antwort, die ich gerade gefunden habe, scheint viele gute Informationen zu haben

https://gamedev.stackexchange.com/questions/96014/what-is-vulkan-and-how-does-it-differ-from-opengl


Eine andere Sache, die berücksichtigt werden muss, ist das Problem, das mit OpenGL 1 aufgetreten ist.

OpenGL 1 zu OpenGL 2 hatte MAJOR-Änderungen, und da viele Leute OpenGL1 verwendeten und es von der Hardware unterstützt wurde, muss in einigen Anwendungen / Engines eine starke Abwärtskompatibilität implementiert werden, und manchmal ist es für die Entwickler sehr schmerzhaft, diese weiterhin zu unterstützen .

Neben der Unterstützung veränderte sich die Sprache so sehr, dass man neue Sachen lernen musste.

Dies ist bei Frameworks wie JavaFX (von 1.x bis 2.x) und Play! Framework (auch 1.x bis 2.x). Komplette Änderungen am Framework, was bedeutet, dass wir alles neu lernen müssen ... alles ...


Warten Sie also im Wesentlichen, bis Vulkan STABIL ist. Das heißt warten bis wahrscheinlich der 2.0 Patch. IT bedeutet nicht, dass Sie nichts über die Grundlagen von Vulkan lernen können, sondern nur, dass sich dies ändern könnte. Ich würde davon ausgehen, dass eine Gruppe wie Kronos von Anfang an eine sehr stabile API bereitstellen würde, zumal an Vulkan mehrere Nvidia- und AMD-Ingenieure arbeiten, darunter eine hochrangige Nvidia-Person, die das Projekt anscheinend überwacht, sowie The base of Mantle. Wie bei jeder Software werden wir, die Programmierer, von Anfang an sehen, wie gut sie funktioniert, aber viele sind vorsichtig und warten ab, was passiert.


Vulkan ist gerade stabil. Ihre Analogie zwischen GL 1.0 und 2.0 ist passend. Wenn Sie jetzt mit GL beginnen, bedeutet dies, dass Sie sechs Monate nach Erscheinen von GL 2.0 mit dem Erlernen von GL 1.0 beginnen.
Dan Hulme

1
Vulkan könnte "stabil" sein, es bedeutet nicht, dass sich Dinge nicht ändern werden. Dies ist die Natur der Sprachen, die ich in den letzten Jahren zwei Mal an Sprachen geändert habe. Woher wissen wir also, dass dies Vulkan nicht passieren würde? Sie sagen im Grunde, dass das Lernen von OpenGL eine Verschwendung ist, und das ist falsch. Offenbar ist OpenGL tot und wird nicht mehr verwendet ... Auch falsch. Außerdem bin ich nicht der einzige, der glaubt, dass Vulkan Stabilitätsprobleme haben könnte. Möglicherweise nicht, aber mit jeder neuen Sprache suchen Sie danach.
XaolingBao

1
Natürlich werden sich die Dinge ändern, und die Arbeitsgruppe arbeitet bereits an neuen Funktionen für eine nächste Spezifikationsversion (ssh, das hast du nicht von mir gehört). Stabil bedeutet, dass diese Dinge die Spezifikation ergänzen und die Dinge, die Sie heute darüber erfahren, auch in zwei Jahren noch gültig sind. OTOH, die Dinge, die Sie heute über GL lernen, passen bereits schlecht zu der Funktionsweise von GPUs: genau wie das Erlernen von Pipelines mit festen Funktionen in einer programmierbaren Shader-Welt. Wenn Sie meine Antwort lesen, sehen Sie, dass ich es nicht für eine Verschwendung halte, jetzt GL zu lernen. Aber "Vulkan ist zu neu" ist kein guter Grund, es abzuwerten.
Dan Hulme

1
@Lasagna: " Es ist so, dass es Änderungen unterworfen ist, nicht viele Unternehmen werden sich sofort daran gewöhnen , es zu verwenden. " Valve. Epos. Einheit. Alle von ihnen haben viel investiert, um ihre Motoren auf Vulkan laufen zu lassen. CryTech und Id ignorieren das auch nicht. Ihre Aussage entspricht also nicht den Tatsachen.
Nicol Bolas

2
@Lasagna: " Nur weil es in 3D-Engines adaptiert wird, heißt das nicht, dass Unternehmen ihre Projekte in dieses Modul investieren " ... 3D-Engines gelten also nicht als "Projekte"? Zählt DOTA2 als "Projekt"? Denn es hat Unterstützung für Vulkan jetzt . Gilt Samsungs Smartphones und Tablets als "Projekt"? Weil sie es in die Benutzeroberfläche integrieren wollen. Die Realität ist, dass viele Leute bereit sind, "diejenige zu sein, die eine neue Plattform ausprobiert", wenn diese Plattform sie bekommt, was sie brauchen.
Nicol Bolas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.