世界を動かす技術を、日本語で。

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

概要

  • グラフィックスプログラマー として採用されるために必要な知識を整理
  • 機械学習(ML) の現状と将来性に対する見解
  • モダンレンダリング のCPU側とGPU側の学習ポイントを解説
  • ポートフォリオ作成 や必要な数学・プログラミング言語の選択肢を提示
  • MLの限界 と今後のAI発展に対する考察を述べる

グラフィックスプログラマーに必要な知識

  • モダンレンダリング技術 の習得
    • CPU側: DirectX12、Vulkan、Metal などの「明示的API」やエンジンプログラミング
    • GPU側: ライティング・シェーディングの数学、シャドウやポストエフェクト などのレンダリング技法
  • 学習の進め方
    • CPU側に集中:まず三角形やメッシュの描画を目標
    • GPU側に集中:OpenGL、WebGL、DirectX11など簡易APIや既存エンジンの活用
  • パストレーサーの実装
    • 映画のような フォトリアリスティックレンダリング 技術の基礎
    • オススメ教材:「 Ray Tracing in One Weekend」無料オンライン書籍(https://raytracing.github.io/books/RayTracingInOneWeekend.html)

物理ベースレンダリング(PBR)の理解

  • PBR(Physically Based Rendering) の導入
    • 原則に従えば、どんな照明条件でも資産が自然に見える
    • 以前は照明ごとに資産の作り直しが必要だったが、PBRで大幅に効率化
  • PBR学習リソース
    • 基礎解説:「 learnopengl.com PBRセクション」(https://learnopengl.com/PBR/Theory)
    • 応用:「 Filamentドキュメント」(https://google.github.io/filament/Filament.md.html)
    • 発展:「 PBRT本」(https://pbrt.org/)

ポートフォリオと実装例

  • ソースコード公開 の重要性
    • GitHub等にて、資産ロード・リアルタイムレンダリング・PBR・ユーザー操作カメラ等を備えたエンジン風プロジェクトの作成
    • C++DX12/Vulkan 等での実装が望ましい
  • パストレーサー の統合
    • フォトリアルな画像出力
    • リアルタイムPBRとの比較・検証
    • 差異の説明や改善案の提示でさらに高評価

数学・アルゴリズム・言語

  • 必要な数学
    • 線形代数(行列積、クロス積、ドット積)
    • 基本的な三角法
    • 最低限の微積分
  • アルゴリズム・データ構造
    • リンクリスト、ハッシュテーブル、ソート・探索などの抽象データ型
    • 高度なアルゴリズム知識は問題解決時に役立つ
  • プログラミング言語
    • C++ が標準。Rustも一部利用例あり
    • WebGPUも注目されつつあるが、現時点で主流ではない
    • シェーダー言語は HLSL が一般的、GLSLも一部で利用

機械学習(ML)とAIへの見解

  • MLの現状
    • 現状のMLは過剰な期待に応えられていない
    • 今後数年でMLブームは落ち着き、次は量子コンピューティング等に注目が移る可能性
    • ただし、 最適化やフィッティング技法 としてのMLは有用
  • ML技術の実用性
    • 論文やアルゴリズムの相談には役立つが、プログラミング支援には限定的
    • バグ検出などの小規模用途には有効
  • AIの未来
    • 真の「人間レベルAI」は将来的に実現可能と考える
    • 現在のLLM時代は、その準備段階(リハーサル)との認識

まとめ

  • グラフィックスプログラマー を目指すなら、 PBR・パストレーシング・モダンAPI・C++ を中心に、ポートフォリオ作成が重要
  • 数学やアルゴリズムは必要に応じて深堀り
  • ML・AI は過度な期待を避けつつ、技術の進化に柔軟に対応

Hackerたちの意見

基本的なデザイン原則や人間の知覚の特性についての言及がないのは、ちょっと驚きだね。僕の兄は90年代から00年代にかけて有名なコンピュータゲームのプロダクションアーティストをしていて、プログラマーやマネージャーが視覚的センスゼロで、アーティストの側を理解しようともしないことに文句を言ってたよ。グラフィックスは専門じゃないけど、音楽家、サウンドデザイナー、プロデューサーとして、僕が知ってる中で最も効果的で影響力のあるオーディオDSPコーダーたちは、音楽の基本や音の物理学・音響学、そして離散的なデジタルプロセスと私たちの知覚・解釈の間にある落とし穴を理解してるんだ。

君が言ってることに近い役割があって、それはテクニカルアーティストって呼ばれてるんだ(僕もそういう仕事をしてる)。グラフィックスプログラマーはアーティスティックな考え方を持ってると良いと思うけど、彼らは通常、かなり低レベルで作業するから、成功するためには必ずしも必要ではないんだよね。

これはクリエイティブ業界以外にも当てはまるよ。B2Bやエンタープライズソフトウェアを見てると、売り手がその業界のことを全然理解してないのが明らかだし、ユーザーがそのソフトウェアをどう考えてるかも分かってないことが多い。AIがその計算を少し変えたけど(少なくとも、そうなる可能性がある)、2000年代中頃の「コーディングを学ぼう」運動の大きな部分だったと思う。ソフトウェア開発を、既存の専門家の「製品」ではなく「機能」として扱うようになったから、彼らのドメインに最も詳しい人たちが実際にソフトウェアを作るようになったんだ。

音声でもこれをよく見るよね。予約する必要があるビットの量が…

(記事の著者)100%同意だね。他の人も言ってるけど、良いグラフィックスプログラマーはテクニカルアーティストやアーティストと一緒に働く。正直、グラフィックスプログラミングは、そういう人たちがやりたいことをできるようにするためのサービス的な役割が大きい。イニゴ・キレスがアーティストでもあるグラフィックスプログラマーの例として挙げられたけど、彼はパワーハウスでユニコーンだよね。個人的には音楽を演奏したり音声をプログラミングする方が好きで、それがDSPのことを学ぶ良い基盤になるんだ。例えば、レンダリングノイズを高周波に押し込むときに、ローパスフィルターがノイズ除去に効果的になるからね。

カーンアカデミーには、君が興味を持ちそうなグラフィックスプログラマーがたくさんいると思うよ。彼らはProcessing.jsを使ってる。 https://www.khanacademy.org/computing/computer-programming/b... この人はいいアートを持ってるよ: https://www.khanacademy.org/profile/kaid_1019042693170894950...

そしてこの人も: https://www.khanacademy.org/profile/kaid_9428127706426004539...

残念ながら、カーンアカデミーは古いアカウントを削除してるんだ: https://kap-archive.bhavjit.com/view?p=6177161966469120

今は誰にもグラフィックスプログラミングを勧めたくないな。2001年に始めたんだけど、その時にNvidiaの初代GeForce 1(「ギガテクスルシェーダーカード」)が発表されたんだ。それ以来、この分野はものすごいスピードと革新で発展してきて、驚かされるよ。25年前にできたことと比べると、今の技術は本当にすごい。ただ、そのすごさには大きな「しかし」がある。進化のスピードが本当に怖いんだ。NvidiaはAIベースのエフェクトを考案して、シーンやアセットに影響を与えるようになったけど、当時はリアルタイムでそんなことができるなんて思いもしなかった。今、この分野で「ちゃんとしたプロ」になるのが可能かどうかも分からない。別の言い方をすると、「今日のジョン・カーマックはどこにいる?」ってこと。彼はハードウェアからすべてを引き出すことで有名だったけど、今は彼のような人に競争上の優位性がないんだ(実際、彼は自分の遺産で生きてる)。それはこの分野が広すぎて、進化が早すぎて、次の人になるチャンスがないからなんだ。

グラフィックスプログラミングには、今の時代に非常に役立つ側面があるよ。行列代数のパイプラインや、「行列変換で考える」必要性は、機械学習の数学の基礎を築くための素晴らしくて視覚的に魅力的な方法なんだ。

JCはちょっと異端な存在だったけど、彼のイメージは主にプレイヤーやジャーナリストから来てるよね。開発者たちは後のidソフトのエンジンを使うのに苦労してたし(それがUEがその戦争に勝った理由の一部でもある)。グラフィックスやゲームプログラマーとして decent な生活を送るのに、JCである必要はないよ。

何かにハマって、他の人を discourage しようとする人が本当に嫌い。 「俺みたいになるな!人生を無駄にした」って、情熱を失った人の言うことはクソだよね。グラフィックスプログラミングから離れろって言うのは、明日のジョン・カーマックを引き寄せる方法じゃない。だから、別の視点を提案するよ。もしウェブアプリやKubernetesしかやってないなら、グラフィックスプログラミングに挑戦してみて。フィードバックサイクルは刺激的だし、普通のコンピュータがどれだけ速いかを実感できるよ。重要じゃないことを最適化することになるかもしれないけど、低レベルでの速さを学んでないと気づかないことが多いから。リソースはたくさんあるし、数学もそんなに難しくないよ。3Dモデリングが自分が必要だと思ってなかったクリエイティブな出口になるかもしれない。たとえ日常の仕事には全く関係なくても、プログラミングのアートを新しい視点で楽しむ方法を見つけるかもしれないし、Kubernetesには二度と触れないって決めて、次の5年間を自分のゲームエンジンを書くのに費やすかもしれない。そういうクレイジーな人たちがたくさんいるし、人生やゲーム開発に潰されてないホビイストのコミュニティは思ったよりも大きいよ。グラフィックスプログラミングのディスコードは、興味があればチェックするのにいい場所だよ。ぜひ行ってみて!

Hacker Newsで議論の続きを見る