【完全保存版】モダンOpenGLをゼロからマスターするための神リソース「Learn OpenGL」が最高すぎる
Learn OpenGL, extensive tutorial resource for learning Modern OpenGL
Learn OpenGL, extensive tutorial resource for learning Modern OpenGL
モダンOpenGLを習得したいなら、まずはここから始めるべきです。「Learn OpenGL」は、基礎から応用までを網羅した非常に質の高いチュートリアルサイトです。グラフィックスプログラミングの学習にこれ以上ないほど丁寧な解説が揃っているので、OpenGLの習得を目指すエンジニアは必見です。
いやー、懐かしい!6、7年前にこのチュートリアルを使って、LWJGL(Minecraftが使っているのと同じフレームワーク)でJava製のMinecraftクローン、「Mindacraft」を作ったんだ。このチュートリアルがOpenGLを学ぶ上で飛び抜けて役に立つリソースだったことは今でも鮮明に覚えてる。しかも、ポインタやバッファを直接扱える言語で書かれていたっていうね!(JavaでOpenGLを使うのは、大量のラッパークラス越しにポインタやバッファを操作しないといけないからすごく奇妙な感じになるんだ。Rustにunsafeがないのにunsafeを使ってるような気分だよ)
学んだ知識を活かしたいなら、Sokol [0] とか SDL-GPU API [1] を使うのがおすすめ。Sokolの方が高レベルな抽象化だけど、どちらも使えるよ。それ以外なら、learn openglは本当に入門として最高だね。
[0] https://github.com/floooh/sokol (https://github.com/floooh/sokol)
[1] https://wiki.libsdl.org/SDL3/CategoryGPU (https://wiki.libsdl.org/SDL3/CategoryGPU)
グラフィックスプログラミングの唯一無二のバイブルだね。コンピュータグラフィックスを学び始めるなら、とにかくサイト全体を読み込んで、例題を一つずつこなしていくこと。少し古いOpenGLっていうAPIを使っていることなんて全く問題じゃない。大事なのは、変で難解なハードウェアやドライバの詳細じゃなくて、まずは描画の基本を学ぶことだから!
一通り学んだ後は、GPUでよりローカルな計算処理をやりたければCUDAを学ぶといい(悪いけど、CUDAが良すぎるからNVIDIAのカードを買うべきだよ)。もし何か作りたくて、OpenGLよりもイケてるクロスプラットフォームなグラフィックスAPIを使いたいならSDL3をおすすめするよ。(macOS専用アプリならMetalもかなり良いAPIだ)
VulkanやDX12は今のところ欠陥だらけのAPIで、不必要に複雑だし、最近のハードウェアの性能特性にも合っていない(このブログ記事を参照:https://www.sebastianaaltonen.com/blog/no-graphics-api )。とはいえ、ゲーム業界やニッチな分野でコンピュータグラフィックスのキャリアを積みたいなら、現場で使われているこれらのAPIの経験は有利に働くはず。まあ、ぶっちゃけグラフィックスの求人市場は今ひどい状態だけどね。(一番大きかったのは自社エンジンを持つトリプルAのゲーム会社だったけど、今やゲーム業界自体が崩壊しかけているし……)
今の時代、GLはもう一つのインターフェースになっていて、実装は入れ替わってもこのインターフェースだけは死なないね。スタートするには今でも一番シンプルだし、ブラウザ(WebGL)がこのAPIで書かれたコードの移植性を求めているからね。
前はシェーダーが全然理解できなかったんだ。チュートリアル通りに単純な式を書いたら、画面にいろんな不思議なものが表示されてびっくりしたよ。
あれは、すべてのピクセルに対して順番に実行されるコードを書いているだけなんだって気づいたら、理解するのがぐっと楽になった。
昔、Dreamcast向けにプログラミングしてた時、NeHeのチュートリアルでOpenGLを学んだのを思い出したよ :)
ユタ大学のCem Yukselによるインタラクティブコンピュータグラフィックスの講義動画も、無料で最高のリソースだよ。 https://www.youtube.com/playlist?list=PLplnkTzzqsZS3R5DjmCQs... (https://www.youtube.com/playlist?list=PLplnkTzzqsZS3R5DjmCQsqupu43oS9CFN)
ゲームをして育った身からすると、OpenGLでプログラミングすることほど報われる分野はないと思うよ。趣味でエンジンを作るような開発のことね。普段仕事でWebやクラウドばかりやってるエンジニアにとっては、ほとんどセラピーみたいなもんだから。
M1 Macでこのコースを修了することってできるのかな?
もし本当に第一原理から学びたいなら、グラフィックスAPIを使わずにソフトウェアレンダラーを書いてみることをおすすめするよ。コースを探しているなら [1] を見てみて。次に、そのソフトウェアレンダラーを拡張して3Dキャラクターモデル(objファイルで十分)を表示できるようにして、[1] でも扱われているスケルトンアニメーションをCPUで動かしてみて。Quakeのmd5meshとmd5animファイルを使って、[2] からスケルトンアニメーションを描画すれば、レンダリングパイプラインの基礎がしっかり身につくはず。
そこまでやってからModern OpenGLを触れば、パイプラインのどこが固定で、どこがプログラマブルなのかが直感的に理解できるはずだよ。3D専用に設計されたハードウェア上で動くわけだからね。同じ仕組みが計算処理にも流用できるし、そこからAIやMLの世界にもつながっていく。これが終わったら、GPUのハードウェアアーキテクチャについて調べてみるといい(ベンダーロックされているから資料は少ないけど、『Real-Time Rendering』などの本に章がある)。そうすれば、なぜVulkanやDX12、Metalが流行っていて、OpenGLが非推奨になったのかが分かるはずだ。
[1] https://pikuma.com/courses/learn-3d-computer-graphics-progra... (https://pikuma.com/courses/learn-3d-computer-graphics-programming)
[2] http://tfc.duke.free.fr/coding/md5-specs-en.html (http://tfc.duke.free.fr/coding/md5-specs-en.html)