HN 日本語サマリー

← 一覧へ戻る
プログラミング

グラフィックスプログラマーになるために学ぶべきこと

What to Learn to Be a Graphics Programmer (blog.demofox.org)

295 pointsby atan2155 コメント

要約

この記事では、グラフィックスプログラマーになるために必要なスキルセットについて解説しています。CPUとGPUの両方の側面を学び、現代のレンダリング技術やPBR(物理ベースレンダリング)の重要性、そして必要な数学的知識について詳しく説明しています。また、C++が業界標準言語であることも強調しています。

全文翻訳

グラフィックスプログラマーとして採用されるために何を知る必要があるかとよく聞かれるので、毎回再入力する代わりにリンクするページを作成する時期が来たと思いました。 私たちはLLMという奇妙な時代にいます。現在のMLはその誇大広告に応えられないと考えており、今後数年間で振り子はMLから少し離れていくでしょう。詐欺師たちは次に量子コンピューティングに移行するか、他のものを पंपアンドダンプするでしょう。しかし、ML自体はコンピュータサイエンスのツールボックスの中に位置しており、それが提供するフィッティングと最適化のテクニックを学ぶことは私見では価値があります。ベアメタルのビットについて学ぶことができるビデオを作成しましたが、学ぶ価値があるかどうかはあなた次第です。 Machine Learning For Game Developers https://www.youtube.com/watch?v=sTAqWRsEiy0 それ以外に:現代のレンダリングは、ある種の2つの仕事が1つになったようなものです。 CPU側の学習 – DirectX12、Vulkan、Metal、または同様の現代的な「明示的」API、およびアセットのロードやその他のサポートタスクをサポートするためのエンジンプログラミングを学ぶこと。 GPU側の学習 – 現代のライティングとシェーディングの数学、シャドウ、アンビエントオクルージョン、ポストエフェクトなどのレンダリングテクニック。また、GPUで何が速く、何が遅いかを理解し、リアルタイムでより良く動作するものを作る方法を知ること。 この2つのことを同時に学ぶのは非常に困難です。#2に焦点を当てたい場合は、#1にはOpenGL、WebGL、DirectX11、エンジン、または同様のよりシンプルなものを使用できます。#1に焦点を当てたい場合は、最初の三角形が画面に表示され、次にメッシュが画面に表示されるまで作業しますが、それが非常に美しいかどうかは心配しないでください。 #2の一部はパストレーサーを書くことです。パストレーシングは映画がレンダリングを行う方法であり、現代のリアルタイムレンダリング技術で近似しようとしているものです。パストレーサーを始めるのに最適な場所は、オンラインの無料書籍「Ray Tracing in One Weekend」です。多くの人がこれを使用しています。非常に分かりやすく、写真のようにリアルなレンダリングを作成する方法を示しています。 https://raytracing.github.io/books/RayTracingInOneWeekend.html #2の別の部分は、「物理ベースレンダリング」またはPBRを学ぶことです。これはライティング(主にスペキュラー)を適用する方法です。PBRは「原理に基づいている」もので、ルールに従えば良い結果が得られます。PBR以前は、人々はあらゆる種類のランダムな調整やハックを使ってライティングのためのランダムな方程式を書いていました。これにより、ある状況では良く見えるアセットを作ることができましたが、ライティングを変更すると暗すぎたり、光っているように見えたりしました。人々は異なるライティング条件のためにアセットの異なるバージョンを作成しなければならず、それは多くの時間と労力を要しました。 PBRを使用すると、アセットはデフォルトですべてのライティング条件でより良く見え、異なるバージョンを作成する時間と労力を節約できます。これは業界にとって大きな勝利でした。それでも、アセット作成の時間、費用、労力はゲーム開発における大きなボトルネックです。このページのPBRセクション(およびサブセクション)は、PBRへの素晴らしい入門です。 https://learnopengl.com/PBR/Theory ある時点でそれを超えて深く掘り下げたい場合は、Filamentのドキュメントを読むのが次の良いステップです。PBRを深く掘り下げると、多くの微積分と統計学が登場します。 https://google.github.io/filament/Filament.md.html その先には、有名なPBRTの書籍「Physically Based Rendering: From Theory To Implementation」があり、これもオンラインで無料で入手できます。 https://pbrt.org/ どのような数学を知る必要があるか疑問に思うかもしれません。上記の項目をこなせば、知る必要のある数学に出会うでしょうが、基本的には線形代数(行列乗算、外積、内積)、基本的な三角法、そして少しの微積分が本当に「必要」なすべてです。グラフィックス(およびゲーム開発全般)の面白い点は、必要な数学の量はかなり最小限であるにもかかわらず、使用できる数学の量は実質的に無限であるということです。アルゴリズム的にも同じことが言えます。リンクリスト、ハッシュテーブル、ソート、検索などの基本的な抽象データ型とアルゴリズムを知っておくべきです。多くの場合、最速のアルゴリズムは最も単純なものです。配列はリンクリストよりもはるかに高速です。ただし、より高度なアルゴリズムの概念を知っていると、本当に新しいカスタムなものが必要な場合に役立ちます。 ゲーム開発では、C++が学ぶべき言語です。一部の人々はRustを使用しており、Rustの使用が増えているかどうかは判断が難しいですが、パイの一部を占めており、人々が知っていることを期待する標準言語ではありません。WebGPUはWebGLにはなかった多くの機能を持ち、より本格的なプラットフォームになりつつあり、JavaScriptでCPU側の作業を行うことができます。しかし、WebGPUの求人募集はあまり見かけませんし、Web上でもWebGPUのコンテンツはあまり見かけません。CPU側のプログラミングに関しては、C++が圧倒的に学ぶべきことのようです。シェーダー言語に関しては、HLSLが最も一般的ですが、GLSLで作業する人もいます。シェーダーは、マルチプラットフォームゲームでは他のシェーダー言語にトランスパイルされることが多いです。 このページは、状況の変化や、ここで扱われていない質問があった場合に更新していきます。 エージェントに関するMLの補足コメント: 私は、現在のML技術が、彼らが販売しているほとんどの用途において「タスクに対応できる」とは考えていません。数学、論文、または馴染みのないアルゴリズムについてClaudeと話すことで、私はそれを利用しています。そのような状況では、それが作り話をしているかどうかは簡単にわかりますし、他の情報源で健全性チェックを行うのも簡単です。しかし、プログラミングにはあまり役立たないと感じています。なぜなら、たとえそれが意図したとおりに動作したとしても、それを理解するのに時間をかけなければコードを理解できないからです。その時点で、私は自分で書くべきだったと思います。「このファイルにバグはありますか?」といった、より小さなことは役立つと感じています。これは「はい」と返されれば調査できますし、「いいえ」と返されれば、尋ねるのに何のコストもかかりません。これらの技術的なことはさておき、人類はいつか実際の人間レベルの人工知能を作成し、それを超える方法を解明すると信じています。それが私の生涯で起こるかどうかはわかりませんが、私たちが最初に自分自身を破壊しない限り、いつか起こると信じています。その意味で、LLMのこの時代は、「本物が」後でやってくるための予行演習のようなものです。それが来たときに、私たちが正しい教訓を学び、より準備ができていることを願っています。 これを共有する:Xで共有(新しいウィンドウで開く)X Facebookで共有(新しいウィンドウで開く)Facebook 読み込み中… 関連 このエントリは未分類に投稿されました。パーマリンクをブックマークします。