新しいグラフィックプログラマは、OpenGLではなくVulkanを学習すべきですか?


53

wikiから:「Vulkan APIは当初Khronoによって「次世代OpenGLイニシアチブ」と呼ばれていました」、そしてそれは「OpenGLとOpenGL ESを後方にならない1つの共通APIに統合するための根拠のある再設計努力です」既存のOpenGLバージョンとの互換性」。

それでは、OpenGLの代わりにVulkanを学習するために、グラフィックプログラミングを始めようとしている人たちにもっと役立つべきでしょうか?彼らは同じ目的を果たすようです。


1
1つのAPIで何かを実行できる場合は、他のAPIでも実行できます。実行方法はAPIに依存します。
A --- B

回答:


33

ほとんどない!

これは、「新しいプログラマがCではなくC ++を学ぶべきか」や「新しいアーティストが物理的な絵画ではなくデジタル絵画を学ぶべきか」と尋ねるようなものです。

特に、下位互換性がないため、グラフィックプログラマーは業界で最も一般的なグラフィックスAPIを除外するのは愚かです。新しいグラフィックスAPIがあるからです。さらに、OpenGLの動作は異なります。特にゲームの早い段階で、企業がVulkanよりもOpenGLを選択する可能性が高く、Vulkanを知っているかどうかに関係なく、OpenGLを知らない人には興味がありません。

専門化が市場性のあるスキルになることはめったにありません。

インディーデベロッパーのようにスキルを売り込む必要がない人にとっては、ツールボックスからツールを削除するのはさらに愚かなことです。独立系開発者は、柔軟性にさらに依存しており、資金を調達するものよりも、機能するものを選択することができます。Vulkanに特化すると、選択肢が制限されます。

専門化が効率的なパラダイムになることはめったにありません。


2
:答えは良い、これを思い出しelise.com/quotes/heinlein_-_specialization_is_for_insects
ウィル

7
このC ++の類推は不適切です。Vulkanは、OpenGLの作成者によって開発された新しい次世代APIです。C ++はCに確立され、主に下位互換性競合である
モビーディスク

これらの詳細は、類推のポイントとは無関係です。
-mHurley

6
専門化が非効率的または市場性がないと主張するのは信じられないほど素朴です。すべての話された言語の5つの単語すべてを知っている翻訳者は役に立たないので、少数の言語をマスターした(別名)翻訳者を雇います。今 -specializing ある問題。1つの言語を完全に習得し、その言語のみを知っている翻訳者も有用な翻訳者ではありません。そして、開発者(インディーまたはその他)は、新しいツールの学習にすべての時間を費やさないように注意する必要があります。最終的に彼らは、彼らが破産しないように、実際に何かを売るために作る必要があります
-8bittree

明確にするために、OpenGLとVulkanに関して必ずしもあなたに反対するわけではありません。これは、Vulkanだけでなく両方を学習するほうが良い選択である可能性が高いです。
8ビットツリー

40

今すぐ始めて、GPUの作業をしたい場合(Unityなどのゲームエンジンを常に使用するのではなく)、Vulkanを学ぶことから始める必要があります。GLも後で学習する必要があるかもしれませんが、Vulkanを最初に考える理由はいくつかあります。

  1. GLとGLESは、GPUがまったく異なる動作をする何年も前に設計されました。(最も明らかな違いは、イミディエイトモードのドローコールとタイリングおよびコマンドキューです。)GLは、イミディエイトモードスタイルで考えることを推奨し、多くのレガシーな問題を抱えています。Vulkanは、現代のGPUの動作に非常に近いプログラミングモデルを提供しているため、Vulkanを学習すれば、テクノロジーが実際にどのように機能し、何が効率的で何が非効率かをより深く理解できます。GLまたはGLESを使い始めて、VBOを使用する代わりにオブジェクトごとに個別の描画呼び出しを発行する、またはさらに悪いことに表示リストを使用するなど、すぐに悪い習慣に陥る人がたくさんいます。GLプログラマーにとって、推奨されなくなったものを見つけるのは困難です。

  2. VulkanからGLまたはGLESへの移行は、その逆よりもはるかに簡単です。Vulkanでは、同時実行制御、共有、状態のレンダリングなど、GLに隠されているか予測不可能な多くのことを明示的にしています。ドライバーからアプリケーションに多くの複雑さを押し上げますが、そうすることで、アプリケーションに制御を与え、異なるGPUベンダー間の予測可能なパフォーマンスと互換性を簡単に得ることができます。Vulkanで動作するコードがある場合、代わりにGLまたはGLESに移植するのは非常に簡単で、最終的にはGL / GLESの適切な習慣を使用したものになります。GLまたはGLESで動作するコードがある場合は、Vulkanで効率的に動作させるために、特に最初からやり直す必要があります。特にレガシースタイルで記述されている場合(ポイント1を参照)。

最初は、Vulkanのプログラミングがはるかに難しく、大企業の経験豊富な開発者にとっては問題ないが、インディーズや愛好家にとって大きな障壁になることを懸念していました。私はこの質問をワーキンググループの一部のメンバーに投げかけました。彼らは、彼らがすでにバルカンに引っ越した人と話をした人々からいくつかのデータポイントを持っていると言いました。これらの人々は、UE4の統合に取り組んでいるEpicの開発者から、趣味のゲーム開発者までさまざまです。彼らの経験では、はじめに(つまり、画面上に三角形が1つになる)、より多くの概念を学習し、定型コードを長くする必要がありましたが、インディーズにとってもそれほど複雑ではありませんでした。しかし、その段階に到達した後、彼らは実際の出荷可能なアプリケーションを構築する方がはるかに簡単であることがわかりました。(a)さまざまなベンダーの実装間で動​​作がはるかに予測可能であり、(b)すべての効果がオンになった状態で良好に機能するものに到達するために、試行錯誤が必要なかったためです。実際の開発者からのこれらの経験により、Vulkanに対するプログラミングはグラフィックの初心者でも実行可能であり、チュートリアルを終えて他の人に提供できるデモやアプリケーションの構築を開始すれば、全体的な複雑さは軽減されると確信しました。

他の人が言っているように:GLは多くのプラットフォームで利用でき、WebGLは素晴らしい配信メカニズムであり、GLを使用する既存のソフトウェアがたくさんあり、そのスキルのために多くの雇用者が雇われています。Vulkanが成長し、エコシステムを開発している間、今後数年は続くでしょう。これらの理由により、GLの学習を完全に除外するのは愚かなことです。それでも、GPUの仕組みを理解するのではなく、GPUを理解するのに役立つものから始めれば、はるかに簡単な時間を過ごし、より良いGLプログラマー(そして一般的にはより良いGPUプログラマー)になります。 20年前。

もちろん、もう1つのオプションがあります。これが特にあなたに関係があるかどうかはわかりませんが、とにかく他の訪問者にそれを言うべきだと思います。

インディーズゲームの開発者、ゲームデザイナー、またはVR体験をするために、VulkanやGLを学ぶ必要はありません。多くの人がゲームエンジンを使い始めています(UnityまたはUE4は現在人気があります)。そのようなエンジンを使用すると、その背後にあるテクノロジーではなく、作成したいエクスペリエンスに集中できます。GLとVulkanの違いを隠すことができ、プラットフォームでサポートされているものを心配する必要はありません。ざらざらした詳細を一度に処理することなく、3D座標、変換、照明、アニメーションについて学習できます。一部のゲームまたはVRスタジオはエンジンでのみ動作し、フルタイムのGLエキスパートがまったくいません。独自のエンジンを作成する大規模なスタジオでも、グラフィックプログラミングを行う人は少数です。

GPUとやり取りする方法の詳細について学ぶことは確かに有用なスキルであり、多くの雇用主が高く評価するスキルですが、3Dプログラミングに入るためにそれを学ぶ必要があると感じるべきではありません。たとえそれを知っていても、必ずしも毎日使用するものではありません。


2
私はややそう思わない。Vulkan(およびDX12)は、経験豊富な開発者にとって、実装が非常に難しいことが実証されています。Vulkanが提供するすべてのパワーを使用すると、足で自分を撃つのは非常に簡単です。さらに、Vulkanにはさらに多くの定型コードが必要です。GPUプログラミングについて学んだばかりの人にとって、Vulkanは非常に圧倒的だと思う傾向があります。
-RichieSams

2
@RichieSamsあなたは「実装」を意味しているとは思わない。GPUベンダーのみがVulkanを実装する必要があり、OpenGLを実装するよりもはるかに簡単です。(信じてください、私はそれをやった!)しかし、あなたがそれと統合することまたはそれに対してプログラムするのが難しいことを意味すると仮定して、私はVulkan WGから学んだいくつかの情報を含む段落を追加しました。
ダンハルム

正しい。実装は、おそらく不適切な単語の選択です。プログラムで「使用する」ことを意味しました。しかし、私はあなたの編集が好きです。よく言え
ば-RichieSams

@DanHulme-「GLは、イミディエイトモードスタイルで考えることを奨励しています」というコメントに驚いています。これは初期の OpenGLバージョンにのみ当てはまると思いましたか?
ToolmakerSteve

1
@ToolmakerSteve OpenGL WGは、同時実行とバッチ書き込みの追加に多くの作業を費やしているので、タイル化/遅延実装に適した方法でプログラムを表現できます。しかし、それはいまだにイミディエイトモード時代に設定された基盤であるため、これらの人々は、バルカンでの新たなスタートが必要であると判断しました。そして、私はまだGLから始めて、実装がどのように機能するかの即時モードのメンタルモデルを形成している多くの新しいユーザーを見ています。
ダンハルム

26

グラフィックスプログラミングの学習は、単なるAPIの学習以上のものです。グラフィックの仕組みを学ぶことです。頂点変換、ライティングモデル、シャドウテクニック、テクスチャマッピング、遅延レンダリングなど。これらは、実装に使用するAPIとはまったく関係ありません。

質問はこれです:APIの使用方法を学びたいですか?それとも、グラフィックスを学びたいですか?

ハードウェアアクセラレーショングラフィックスを使用するには、APIを使用してそのハードウェアにアクセスする方法を学習する必要があります。しかし、システムとのインターフェースをとれるようになると、グラフィックスの学習はAPIがあなたのために何をするかということに集中するのをやめ、代わりにグラフィックスの概念に集中します。照明、影、バンプマッピングなど

グラフィックの概念を学ぶことが目標である場合、APIで費やしている時間は、グラフィックの概念の学習に費やしていない時間です。シェーダーのコンパイル方法は、グラフィックスとは関係ありません。また、ユニフォームを送信する方法、頂点データをバッファにアップロードする方法などもありません。これらはツールであり、グラフィックス作業を行うための重要なツールです。

しかし、実際にはグラフィックスの概念ではありません。それらは目的を達成するための手段です。

それは取る多くの作業をして、あなたがグラフィックスの概念を学習を開始する準備が整いました地点に到達する前に、バルカンで学習します。データをシェーダーに渡すには、明示的なメモリ管理とアクセスの明示的な同期が必要です。などなど。

対照的に、OpenGLでそのポイントに到達するのに必要な作業は少なくなります。はい、私は最新のシェーダーベースのコアプロファイルOpenGLについて話している。

画面をクリアするだけの簡単なことを行うのに必要なことを比較してください。Vulkanでは、コマンドバッファー、デバイスキュー、メモリオブジェクト、イメージ、さまざまなWSI構造など、多数の概念を少なくともある程度理解する必要があります。

OpenGL ... glClearColorではglClear、3つの関数:、、およびプラットフォーム固有のスワップバッファー呼び出しです。より最新のOpenGLを使用している場合は、2つまで減らすことができglClearBufferuivます。バッファを交換します。フレームバッファが何であるか、またはその画像がどこから来たのかを知る必要はありません。クリアしてバッファを交換します。

OpenGLは多くのことを隠しているので、グラフィックスハードウェアへのインターフェイスを学習するのではなく、実際にグラフィックスを学習しているポイントに到達するための労力がはるかに少なくて済みます。

さらに、OpenGLは(比較的)安全なAPIです。通常、何か間違ったことをするとエラーが発生します。バルカンは違います。役立つデバッグレイヤーがありますが、Vulkan APIのコアはハードウェアの障害がない限りほとんど何も通知しません。何か間違っていると、ガベージレンダリングが発生したり、GPUがクラッシュしたりする可能性があります。

Vulkanの複雑さと相まって、誤って間違ったことをすることは非常に簡単になります。テクスチャを適切なレイアウトに設定することを忘れると、ある実装では機能しますが、別の実装では機能しません。同期ポイントを忘れることは時々機能するかもしれませんが、その後、一見何の理由もなく突然失敗します。などなど。


言われていることはすべて、グラフィック技術を学ぶことよりもグラフィックを学ぶことの方が多くあります。特に、バルカンが勝つ分野が1つあります。

グラフィカルなパフォーマンス

通常、3Dグラフィックプログラマーになるには、コードを最適化する方法についてある程度のアイデアが必要です。そして、OpenGLが情報を隠し、背後で物事を行うことが問題になるのはここです。

OpenGLメモリモデルは同期です。実装は、ユーザーが違いを認識できない限り、非同期にコマンドを発行できます。そのため、何らかのイメージにレンダリングしてからそれを読み取ろうとすると、実装はこれら2つのタスク間で明示的な同期イベントを発行する必要があります。

しかし、OpenGLでパフォーマンスを実現するには、実装がこれを行うことを知って、それを回避できるようにする必要があります。実装が同期イベントを密かに発行している場所を認識し、コードを書き直して可能な限り回避する必要があります。しかし、API自体はこれを明らかにしません。どこかからこの知識を得ている必要があります。

Vulkan を使用すると、これらの同期イベントを発行する必要があります。したがって、ハードウェアがコマンドを同期的に実行しないという事実に注意する必要あります。これらのイベントをいつ発行する必要があるかを知っておく必要があります。したがって、おそらくプログラムの速度が低下することに注意する必要があります。だから、あなたはそれらを避けるためにあなたができるすべてをします。

Vulkanのような明示的なAPIを使用すると、こうしたパフォーマンスの決定を行う必要があります。したがって、Vulkan APIを学習すれば、どのようなものが遅くなり、どのようなものが速くなるかについて、すでに十分なアイデアを持っています。

新しいレンダーパスを作成せざるを得ないフレームバッファーの作業を行う必要がある場合は、レンダーパスの別のサブパスに収めることができる場合よりも遅くなる可能性が高くなります。それができないという意味ではありませんが、APIはパフォーマンスの問題を引き起こす可能性があることを前もって通知します。

OpenGLでは、APIは基本的にフレームバッファの添付ファイルを自由に変更するように誘います。どの変更が速いか遅いかについてのガイダンスはありません。

したがって、その場合、Vulkanを学習することで、グラフィックスを高速化する方法をよりよく学ぶことができます。そして、それは確かにCPUオーバーヘッドを削減するのに役立ちます。

グラフィカルレンダリングテクニックを学ぶことができるようになるまでには、さらに時間がかかります。


1
これを投稿してくれてうれしいです。なぜなら、この答えで表現するのをheしていたアイデアを非常に明確にしているからです。コンセプトを学ぶことが最も重要だということです。私たちが違うのは、始めるのが簡単だからGLを奨励することだと思いますが、始めるのが簡単なことはレガシーな方法で物事を行うリスクをもたらすと思います。レガシースタイルのプログラミングと比較して、GLで「現代のGLイディオム」が何であるかを知ることは非常に困難です。プリミティブごとに個別の描画呼び出しの代わりにVAOを使用するように誰も指示しない場合、後でその間違いを学習するのは非常に困難です。
ダンハルム

1
@DanHulme:それはすべて、適切な学習教材を使用することの問題です。オンラインで現代のイディオムを使用するこのような資料がたくさんあります。リファレンスマニュアルや仕様書を読むだけで、グラフィックの学習を試みることはできません。
ニコルボーラス

本当に簡単に聞こえます!それでも、プログラマーはグラフィックスを始めており(一部のプログラマーは他の分野で非常に有能です)、レガシー機能を使用し、パフォーマンス特性について何も学習していません。高価なもの高価に見えるので、Vulkanでそれを間違えるのは本当に難しいです。とにかく、私たちは議論する必要はありません。私はあなたの主な点に同意します:概念を学ぶことは最も重要であり、あなたはVulkanまたはGLなしでそれをすることができます。
ダンハルム

@DanHulme:「それは、バルカンにその間違ったを取得することは本当に難しいあなたはあまりにも忙しい取得しているので、」他のすべて間違っている;)また、それはバルカンにおけるパフォーマンス間違っを取得するにはかなり簡単、まだです。不要な同期。「一般的な」画像レイアウトのみを使用します。サブパスを利用しない。パイプラインの頻繁な変更。などなど。言うまでもなく、さまざまなベンダーは、Vulkanの最適な使用方法についても同意していません。
ニコルボーラス

2
@DanHulme:最新のOpenGLを使用するのがいかに簡単かについては、簡単にするために最善尽くします。人々がNeHeのようなごみサイトから学ぶこと、またはランダムなドキュメントを読むことを主張する場合、それは誰も助けることができないものです。馬を水に導くことはできますが、飲ませることはできません。
ニコルボーラス

7

OpenGLの最大の魅力は(少なくとも私にとって)、多くのプラットフォームで動作することです。現在、VulkanはOSXでは動作せず、AppleにはMetalと呼ばれる競合するAPIがあります。AppleがVulkanをサポートするまでにはしばらく時間がかかる可能性が非常に高く、サポートする場合、Vulkanのサポートは最新のハードウェアに限定される可能性があります。OpenGLはすでにほとんどのハードウェアをサポートしており、引き続きサポートします。


OSXがVulkanをサポートする場合、ごく一部のサブセットのみをサポートし、それがWebブラウザーの次世代グラフィックスAPIになることは間違いないでしょう。バルカン、パイプラインのレンダリングよりもシンプルでバルカンが得たものは、他の多くのものを明示的に処理すると失われます
GameDeveloper

1
@DarioOO OpenGLイミディエイトモードは、イミディエイトモードではなく、何でも呼び出すよりも簡単に使用できますが、お勧めしません。
user253751

1
@Gavin:OpenGLバージョン4.2以降もOSXではサポートされていないことに注意してください。したがって、OSXでOpenGLの最新のものを使用したい場合は使用できません。そして、Appleはそれ以降のOpenGLバージョンを採用する可能性は非常に低いです。AppleプラットフォームはMetalにオールインしているため、クロスプラットフォームはいずれにせよ不利です。
ニコルボーラス

Appleは、強制されない限りVulkanをサポートせず、その経済性は非常に単純です。すべてMetalに進むことで、GLES2が提供できる以上のものを必要とするが、VulkanとMetalの両方にゲームを書くためのリソースを持っていないモバイルゲーム開発者を閉じ込めたいと考えています。特にiOS開発者がMac App Storeでリリースする場合、Macの小さなゲームエコシステムを犠牲にする用意があります。
ジョナサンボールドウィン

VulkanがmacOS(以前のOS X)で動作するようになりました:moltengl.com-
アレクサンダー

4

何をしたいかによって異なります。自分だけのためにグラフィックプログラミングを学びたい場合は、何を選択してもかまいません。

プロの仕事を考えているなら、バルカンをお勧めします。ハードウェアに近いため、グラフィックプログラマーにとってハードウェアの機能に関する知識は重要だと思います。

Vulkanはハードウェアにより近くなっています。OpenGLは、Vulkanではコマンドキューの実行など、手動で行う多くの機能を内部で実行するためです。また、メモリ管理はドライバーではなくアプリケーション次第です。メモリの割り当てuniforms(CPUからGPUに渡す変数)、それらの追跡について心配する必要があります。心配することはたくさんありますが、メモリ使用の自由度も高まります。怖くて圧倒されるかもしれませんが、実際はそうではありません。学ぶ必要があるのは次のAPIだけです。

このことを理解することは、GPUの仕組みを理解するのにも役立ちます。VulkanとOpenGLの両方でいくつかの最適化を行うことができます。

そしてもう1つ思い浮かぶのは、おそらくVulkanの1つとして仕事を探しているときにグラフィックプログラミングを学び始めているのであれば、より人気がある(おそらくOpenGLよりも人気がある)ことです。また、私が知っている限りでは、いくつかのグラフィックスAPIを使用している企業のほとんどは、独自の関数を記述しているため、ジョブではOpenGLやVulkanで記述しない可能性がありますが、GPUに関する知識は常に役立ちます。


2

私はここ数か月間、グラフィックスプログラミングに「参加」しています。

現在、私はまだ高校に在籍しており、クロスプラットフォームアプリケーションの開発をほぼ常に検討していると言えます。これは実際、Vulkanでの私の最大の問題です。すべてのプラットフォームで動作するように開発されているわけではありません。JavaでOpenGLを使用しており、6か月以上使用しています。

私が抱えているもう1つの問題は、Vulkanの主張にあります。OpenGLは確かにWebサイトを頻繁に更新していません。彼らは継続的にアップデートをリリースし続けており、私は常に、より高速に動作するか、新しいハードウェアでより良く動作する新しいアップデートを楽しみにしています。

そうは言っても、私はほとんどOpenGLで作業していますが、DirectXとVulkanの基本原則を理解しています。特にVulkanは、学ぶのが非常に難しく、プログラミングのためにOpenGlやDirectXほど構造化されていないので、私は彼らと広範囲には働きません。

最後に、私が主にJavaを使用し、OpenGLがスタンドアロンで驚くほど市場性がないように、単一の分野に特化したものを追加したいと思います。ゲームを作っている会社に就職したい場合、ほとんどの場合、OpenGLはLinuxおよびAndroid開発用のゲームを作成するためだけに使用されます。DirectX for Windows and Consoles <場合によってはVulkanが置き換えることができるもの。

OpenGLのアップデートを永遠に我慢することはできません。しかし、開発することは私の好みです。


私が抱えているもう1つの問題は、Vulkanの主張にあります。それがより良いと主張する方法です。」Vulkanは何も主張していません。これは単なるAPIです。主張することはできません。
ニコルボーラス

VulkanとGLはほとんど同じ人によって作られていることに気付いていますか?
ダンハルム

はい、そうです。私はまだGLを好む
冬のロバーツ

2

このテーマに関するグラフィック初心者向けの視点をお伝えしたいと思います。私が気付いたのは(長年、別の分野でエンジニアとして働いていた)、基本的な概念が最も重要な部分であるということです。それらをしっかりと理解したら、最後の光沢のある新しいAPIを学ぶことは最も難しい部分です。あなたが新しいSkyrimをプログラムしようとしている若い趣味なのか、CG分野で仕事を探しているのかはわかりません。

は、コンピューターグラフィックスを「プロのように」学ぶことが最善の方法だと思います。

  1. プロのような線形代数と幾何学を学びます。これがなければ、派手なAPIやグラフィックスは忘れてください
  2. コンピューターグラフィックスに関する優れた本を購入する(例:コンピューターグラフィックスの基礎
  3. この本を勉強しながら、画像を描画してアルゴリズムを実装できるようなものを使ってプログラミング環境をセットアップしてください!重要なのは、Java 2DまたはC ++とSDL、またはPythonとPygameです。この段階では、10000 FPSを取得する前に、複数のカメラビューで回転するテクスチャギアを起動して実行する必要があります。
  4. 次に、OpenGL、Vulkan、またはDirectXを使用して、空想的な例を繰り返します(上記を参照)。

線を引く方法を理解する前にパフォーマンスを心配し始めることは、運転免許証を取得する前に車の空力を心配するようなものです。


0

私は正式な教育を受けずにC ++で自習しており、過去15年間、OpenGL 1.0からModern OpenGLとDirectX 9c、10および11の両方を学びました。バルカンで私の手を試してください。Vulkanを使用して単純な三角形または単純な回転する立方体を描くための基本的なチュートリアルをいくつか完了しました。DirectX 11およびOpenGL 3.3+と同様に、完全に機能する3Dゲームエンジンを作成し、それらを使用して単純なゲームを構築しました。

私はそれが学習している人の全体的な環境に依存していると言わざるを得ないでしょう。3Dグラフィックプログラミングを始めたばかりの場合は、たくさんのチュートリアル、リソース、例、すでに動作しているアプリケーションがあるため、OpenGLまたはDirectX 11に飛び込むことをお勧めします。3Dグラフィックスを学ぶことは決して簡単なことではありません。

プログラミングの側面から離れて、データセットやデータ構造、アルゴリズムに至るさまざまなレベルの数学を含む、どのような手法が使用されているかという概念に焦点を当てる場合、3Dゲームエンジンを構築したり、既存のゲームエンジンを効果的に使用したりする前に、まず知って理解しなければならないことがたくさんあります。

背後にある数学と理論のすべてをすでに理解しており、プログラミングの経験がある場合は、UnityやUnreal Engineなどの既存のAPI、ライブラリ、アプリケーションを使用して、アプリケーションを動作させるために必要なソースコードとスクリプトを書くことができます。

したがって、ゲームを構築するためだけに簡単なゲームを構築しようとしているのであれば、私自身の理解と私がそれを見る方法からこれがそうです。制作時間が大幅に短縮される既存のフレームワークを使用してください。一方、ゲームエンジン/物理エンジン/アニメーションエンジンとシミュレーターがどのように設計されているのかを理解し、自分でビルドしたい場合は、DirectXなどのAPIを選択するか、 OpenGLまたはVulkan。ここでの決定要因の1つは、既存のプログラミング知識でもあります。つまり、マルチスレッド、同期呼び出しと非同期呼び出し、メモリフェンス、データ競合、セマフォ、および並列処理(並列プログラミング)について何も知らない場合、

スレッドとアクセス時間とともにメモリを適切に管理する方法がわからない場合、これについて言及します。バルカンはあなたをかみ傷にします!OpenGLとDirectXがずっと多くのCPUパワーを消費するまでずっとあなたの手を握っています。

プログラミングの知識レベルが適切であり、代数、幾何学、三角法、ブール代数、確率、統計、ベクトル-マトリックスベースの代数、計算I、IIなどのすべてのレベルを含む次の数学の背景がある場合インフィニティ(笑)。ベクトル計算、線形代数、線形方程式のシステム、多変数計算のベクトル計算による解析幾何学、数と集合の理論、データセットと構造、計算分析、計算およびアルゴリズム設計。その後、実際のゲームエンジンを作成するために必要な概念を理解できます。これには、必要な応用数学や物理方程式はありません。その背景と十分なプログラミング経験、特にメモリ管理とポインター演算を取得したら、ゲームエンジンの構築を開始できます。

したがって、ここで重要なことは、高度なグラフィックプログラミングを行うために、ゲームエンジンを作成するために必要なすべての側面を理解する必要があるということです。2Dグラフィックスだけを実行している場合、前述のAPIなしでPythonで実行できるので、人生はそれほど難しくありません!しかし、真剣になり、多くの機能セットを備えた堅牢な完全なパワーハウスゲームエンジンを設計したい場合、ここでの選択はCまたはC ++で、OpenGL、Direct XまたはVulkanを使用します。それらのどれでも大丈夫でしょう。エンジンを最初から構築していて、リソースオーバーヘッドが最小で最も「効率的な」実行中のエンジンを探している場合は、Vulkanを選択します。しかし、あなたがこのルートに行くなら、少なくとも私が上で言及したことといくつかを知っているべきです!

ご覧の通り、Vulkanはこの分野の初心者プログラマー向けではありません。数学、プログラミングパラダイム、スレッド化、メモリ同期、並列プログラミングなど、さまざまな種類のデータセットとアルゴリズムのすべてについて、広範な知識が必要です。そしてそれでも、アプリケーションが画面に単純な2D三角形をロードするようにするだけです。OpenGLの約100行のコードまたはDirectXの250行のコードで何ができるかは、Vulkanの約1,000行のコードを必要とします。

Vulkanは、アプリケーションでVulkanを使用する方法のすべての側面を担当するため、すべてをあなたに任せます。手に持っていない、邪魔にならない、足で自分自身を撃つ、または再帰的な縄を買って自分を掛けることができます!

さて、これは初心者やこの分野に慣れていない人はVulkanを学ぶべきではないということではありませんが、私が彼らに提案するのはこれです:まず、OpenGLやDirectXを十分に学んで、基本的なアプリケーションは、単純な三角形または回転する立方体をレンダリングするためだけに構成されています。APIとその構造の繰り返しパターンに精通します。並列でVulkanを学習できることを学びながら、このように3つのそれぞれが同じタスクを達成している方法を見ることができますが、異なる方法でそれを行う方法を知っているし、異なるAPIとの間で結果を比較することもできますそこから、どちらを優先するかを選択できます。この方法では、ツールボックスに別のツールが追加され、3つすべてをサポートするアプリケーションを作成して、

最終的に、どのルートを下りたいかを選択するのはその人次第であり、そこからの成功は、献身、絶え間ない研究、勤勉、試行錯誤、そして最も重要なことには失敗によって決まります。失敗しなければ成功しません!失敗し、間違いを見つけ、それを修正し、次に進み、戻って、もう一度やり直した場合にのみ成功します!


-1

多くのプラットフォームで、グラフィックスの標準であるOpenGLを最初に学習する必要があります。

新しいライブラリがあったとしても、基本を理解し、業界全体で使用されている言語で作業することは非常に重要です。特にVulkanはしばらくの間大企業で使用されないためです。

  1. 誰もすぐに適応して、安定していないフレームワーク/ライブラリで自分自身を台無しにすることを望みません。

  2. 現在のOpen-GLプログラマーを雇用/再訓練する必要があり、その必要はありません。


また、OpenGLとVulkanはまったく同じではないと聞いたことがあります。VulkanはOpenGLよりも低レベルのAPIであり、マシンコードに近いと聞きました。

私が見つけたこの答えには、たくさんの素晴らしい情報があるようです

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


考慮すべきもう1つのことは、OpenGL 1で発生した問題です。

OpenGL 1からOpenGL 2には大きな変更があり、多くの人がOpenGL1を使用しており、ハードウェアがそれをサポートしていたため、一部のアプリケーション/エンジンで実装するために後方互換性が必要であり、開発者がそれをサポートし続けるのは本当に苦痛です。

サポートに加えて、言語は大きく変化したため、新しいことを学ぶ必要がありました。

これは、JavaFX(1.xから2.x)およびPlay!などのフレームワークで発生しました。フレームワーク(1.xから2.xも)。フレームワークを完全に変更します。つまり、すべてを再学習する必要があります...


したがって、基本的には、Vulkanが安定するまで待つ必要があります。これは、おそらく2.0パッチがリリースされるまで待つことを意味します。ITは、Vulkanの基本について学ぶことができないという意味ではありませんが、これが変わる可能性があることを知っているだけです。Kronosのようなグループは最初から非常に安定したAPIを提供すると想定します。特に、Vulkanには複数のNvidiaとAMDのエンジニアがいます。ただし、他のソフトウェアと同様に、コーダーは最初からどれだけうまく機能するかを確認しますが、多くは慎重で何が起こるかを待っています。


バルカンは現在安定しています。GL 1.0 2.0のアナロジーは適切です。GLから始めることは、GL 2.0が発表されてから6か月後にGL 1.0の学習を始めるようなものです。
ダンハルム

1
Vulkanは「安定」しているかもしれませんが、物事は変わらないという意味ではありません。これは言語の性質であり、過去数年以内に言語に最近2つの変更を加えました。あなたは基本的にOpenGLを学ぶのは無駄だと言っているのですが、それは間違っています。OpenGLが死んでいるように見えるようになり、今後は使用されなくなります...また、falseです。また、バルカンが安定性の問題を抱えている可能性があると信じているのは私だけではありません。それはないかもしれませんが、新しい言語では、それがあなたが探しているものです。
XaolingBao

1
もちろん状況は変わり、ワーキンググループはすでに次の仕様バージョンの新機能に取り組んでいます(ssh、私から聞いたことはありませんでした)。安定とは、これらのものが仕様に追加されることを意味し、今日あなたがそれについて学ぶことは、今から2年後にも有効です。OTOH、GLについて今日学んでいることは、すでにGPUの動作方法にはあまりマッチしていません。プログラム可能なシェーダーの世界で固定機能パイプラインについて学ぶのと同じです。あなたが私の答えを読んだなら、あなたは今GLを学ぶことは無駄だとは思わないことがわかります。しかし、「Vulkan is too too new」はそれを割り引く正当な理由ではありません。
ダンハルム

1
@Lasagna:「変更される可能性があるため、すぐに使用できるようになる企業は多くありません」Valve。エピック。団結。それらはすべて、Vulkanでエンジンを動作させるために多額の投資をしています。CryTechとIdはそれを正確に無視していません。したがって、あなたの声明は事実と釣り合っていません。
ニコルボーラス

2
@Lasagna:「3Dエンジンに適応しているからといって、企業がプロジェクトに投資しているという意味ではありません」... 3Dエンジンは「プロジェクト」として認められませんか?DOTA2は「プロジェクト」としてカウントされますか?バルカンを今サポートしているからです。サムスンのスマートフォンとタブレットのラインは「プロジェクト」としてカウントされますか?彼らはそれをUIに組み込むことを検討しているからです。現実には、多くの人々が「新しいプラットフォームをテストする人」になろうとしているのです。そのプラットフォームが必要なものを手に入れたら。
ニコルボーラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.