見出し画像

DirectX12学習まとめ

最近ずっとDirectX12学習を続けていました。当初目標としていたこともだいたい完了したので、これまでやったことのまとめをここに書き、一旦DirectX12学習を締めくくりたいと思います。

やったこと①:写経

以下の書籍をひたすら読んでサンプルコードをひたすら写経していました。

こちらの本はDirectX12(正確にはDirect3D12)の基礎的な書き方から、光学・色彩工学・PBRといった最近の3DCGレンダリング開発に必要な技術について書かれています。こちらの書籍に書いてあることが理解できれば、レンダリングエンジニアリングの初心者は卒業…でいいのかなと思います。初学者でも読めるようにはなっている…かと思いますが、難易度は低くありません。もし内容が難しい場合は他の本も参考にすると良いかと思います。

DirectX12については以下の本がおすすめです。

↓の本はDirectX12ですが、シェーディングやライティングの実装方法について書かれています

他、レンダリング自体について学びたい場合は以下の本が良いです。
↓の本はめちゃくちゃ高いですが、昨今のレンダリング技術について網羅的に書かれているため、わからないことがあったらとりあえずこの本を開いてみる…といった辞書的な使い方ができるので有用です。

↓は英語ですが、PBRを理解するために必要な理論(物理・光学など)がわかりやすく書かれています。わたくしはChatGPT3.5に手伝ってもらいながら読みました。

Background: Physics and Math of Shading

やったこと②:実践

以下のシーンを作成しました。

こちらはやったこと①で培った知識を使ってなにか作ってみよう、と思い立って作ったものです。以下のことを目標に作りました

  1. 複数のモデルを表示すること

  2. (技術を顕示するためではなく)作品として面白い見た目にすること

  3. PBRの効果がわかるようにすること

1.と2.についてはより実践的なシーンが作りたかった、という理由によるものです。3.は学習した内容を取り入れるという理由です。

そもそもなんでこんなことやったのか

うーん…正直に言ってしまうと「グラフィックスプログラマーなのにDirectX12の経験がない」というのがものすごくコンプレックスだったので、そのコンプレックスの解消のためにやった…ということになります😇

DirectX12を実装する機会がない

DirectX12やVulkanのようなAPIを直接操作するような仕事はなかなかないのです。ベテランのプログラマーの方にも聞いたのですが、昨今のゲーム開発・アプリケーション開発だとUnityやUnrealEngineで完結するため、DirectX12を直接触るような仕事はあまりないとのことです。UnityやUnrealEngineのようなゲームエンジンを作る仕事で(かつグラフィックス部分を担当するポジションで)あればDirectX12も使うと思います。

DirectX12ができないというコンプレックス

「じゃあDirectX12やる必要ないじゃないか」と思われるかもしれません。正直に言うと、わたくしもこの意見に真っ向から反対することができません…実際に実務でDirectX12を使わなくてもこれまでやってきましたし、周りのプログラマーの方も、DirectX12を知っている方は少数派かなと思います(もちろんポジションに寄ります)。
ただ…やはり凄腕と言われるグラフィックスプログラマーは(仕事で使っていなくても)DirectX12などのAPIは当然のように使いこなします。こういった方々を見ていると「DirectX12が使えない自分」が許せなくなっていくのです。

DirectX12をやってよかったか

先程も述べた通り、DirectX12のようなグラフィックスAPIを使うような仕事は少ないため「DirectX12を会得したことによる明確なメリット」みたいなものは明確に提示し辛いです。
「UnityやUnrealEngineの描画部分を拡張するときに必要」とか「ハイエンドなゲームを作る場合は必要」とか、メリットをあげようと思えばあげれなくはないですが、実感できるほどのメリットがあるかと言われると微妙な気がします。

しかし、コンプレックスはかなり解消されました。

反省

  1. インプットに偏りがち

  2. どうやって学習を続けていくか

今回の学習で1番問題だったのは「インプットに偏りすぎてアウトプット」が出せていないということでした。とにかく学習に時間がかかりすぎて、「学習したことを使ってなにか作る」といったことができなかったかなと。
まぁ…もともと「コンプレックス解消のため」「自分でもDirectX12を直接使うことのメリットを感じていない」という状態だったので、作品作りに繋がらないのは当然といえば当然かも知れません。
コンプレックスの方はだいぶ解消されたので、今後は作品つくりのための時間を増やしたほうがよさそうですね。

今回の学習により、ようやく3DCGプログラムのチュートリアルが終わった…というような感覚でいます。始まりの台地、もしくは始まりの空島を攻略し終わったところでしょうか(ゼルダ脳)。
ただ3DCGは奥が深いので、これからも学習は続けていきたいです。どうやって学習時間とモチベーションの確保をしていくかが課題ですね。

この記事が気に入ったらサポートをしてみませんか?