2020年7月20日月曜日

DirectX12の魔導書を読んで

DirectX12の魔導書は,翔泳社より出版されている,国内唯一のDirectX12に関する書籍です.なお,同人であればすらりんラボさんやノースブレインさんが出している書籍があります.

書評を書くにあたって,軽く自分の経歴を書いておくと,とあるゲームでリードプログラマを務めたり,ゲームエンジンに携わったりしています.

誤解しないで欲しいので最初に言っておきますが,私はこの本は良い本だと思っています.

誰のための書籍か

ゲームエンジンで独自のシェーダも扱える昨今,ゲームを作ったり表現の研究をしたりしたいのであれば,DirectX12を自分で扱う必要はありません.

ゲームエンジンを作る側になるにしても,描画周りの専門家になりたいというのでなければ,DirectX12を知る必要はありません.

描画のみを扱っているので,ゲームを作れるようになるかというと,なりません.ゲームを作れるようになるには,他にも乗り越える壁があります.

だったら読まなくても良いや,と思った人には向かない書籍です.

ぶっちゃけてしまうと,本書は多くの人には不要な書籍です.しかし,知識というのは,いつどこでどう役立つか分からないものです.自分が直接扱うわけではなくとも,描画周りの専門家と話をするときに役立つことだってあるでしょう.

また,手を動かす前提の書籍なので,キャラクタアニメーションだったり,ポストプロセスなどが,理論では良く分からないから,実際に実装して理解を深めたい,という方にはオススメです.

著者の川野先生は専門学校の先生で,学生が少しでも分かりやすいように,と色々と工夫されているようで,本書もなるべく理解しやすいように,ちょっとずつコードを追加していける形でサンプルが作られています.誰かに描画周りについて説明する場合の参考にもなるでしょう.

まとめると,すぐに役立つ知識が欲しい人には向きません.将来を見据え,何でも学ぶ姿勢の人にこそ合う本です.

この本の利点

最大の利点は,やはりサンプルです.理解を深めるために良い例題やサンプルを用意できるか,というのが専門書の重要なポイントだと思います.

同じ内容を扱った色々な専門書があるのも,説明の仕方や,例題を変えることで,少しでも理解が深まる人が増えれば,と考えてのことだと思います.

本書のサンプルは,徐々に機能を足していき,ある程度足し終えれば,ちょっと書き換えるだけで,次の例を実装できるようになっており,手を動かしていると楽しくなってきます.

キャラクタが表示できるとちょっと楽しくなり,それを増やせるとさらに楽しくなり,さらにアニメーションが付くと,さらに楽しくなります.

人によっては,ポストエフェクトなどの方が楽しいかもしれません.

あまりコードを分けすぎず,コードを把握するのも多少は楽な作りになっているので,細かく分かれすぎていて,クラスの関係が良く分からない,といったこともありません.

また,ImGUIやEffekseerといったミドルウェアとの連携についての情報はあまり無いので,それだけでもお金を出す価値はある気がします.

この本の欠点

利点を述べた以上,欠点も述べておくべきでしょう.

あくまでも公式ドキュメントなどを元に著者が調査した結果であるため,一部の用語が間違っていたり,勘違いを含んでいたりします.

また,論文などを参照しているわけでもないので,理論面で正確ではない部分や,著者も良く分かっていないと書いてある場合もあります.

ただ,それらは本書のターゲットがそういった厳密さを求めている人というわけではないので,気になるのであれば自分で調べれば良いでしょう.

また,コードの書き方についても若干癖があるので,そのあたりは,本書を読めば,GitHubのあちこちにあるDirectX12のサンプルコードを読み解く力が多少はついていることでしょうから,これが正解と思うのではなく,他のコードも色々と読むのが良いと思います.

手を動かす場合の注意点

まず,この書籍を読み進めながら手を動かすには,入門書レベルのC++は理解していて,外部ライブラリを利用する方法も知っているか,調べて解決できて,エラーが出た場合もある程度は自力で調べたりデバッガを利用して解決できる能力が必要です.

Visual Studio 2017 15.5以降,標準に準拠する,というオプションがデフォルトでオンになっており,サンプルコードの一部がビルドエラーになります.

自力でエラーを修正するか,プロジェクトのプロパティから,C/C++を選び,言語から準拠モードをいいえに切り替えましょう.

書籍の説明はところどころに抜けがあったりして,以前に設定したパラメータを切り替えておかないと上手く動かない部分があったりします.WinMergeなどのテキスト比較ツールを利用して,サンプルコードの前の章のコードと比較して差分を確認するなどしながら進めましょう.

また,9章ではリファクタリングと言いつつ,大幅な書き換えもあるので,その辺で一度復習しておくのも手です.なお,その関係で9章と8章の差分を取るのは困難というか不可能に近いです.

正誤表やIssue,Twitterなどを活用しよう

文章の間違いを見つけた場合,翔泳社の書籍紹介ページから正誤表に飛ぶことが出来るので,正誤表を確認してみましょう.載っていなければ,気軽に間違いを送ってみましょう.本当に間違いであれば,ちゃんと正誤表に載せてもらえます.

また,DirectX12のようにハードウェアに近い処理を扱う場合,利用しているハードウェアやドライバの影響で動かないことなどもあるでしょう.
そういうときは,サンプルコードがGitHubに上がっているので,気軽にIssueとして投げてみましょう.
著者の川野先生は忙しくて対応できないようですが,それを見た他の人が何かしらアクションしてくれるかもしれません.

また,Twitterなどで#DirectX12の魔導書 のタグを付けてつぶやくなどしていると,バグなどがあった場合に,著者であったり経験者の方がサポートしてくれたりします.

最後に

他のレビューでもあるように,この書籍には誤字脱字や説明の間違いなどが多々ありますが,世の中の専門書というものを見てみると,当然のように正誤表があり,色々と間違っていたり,版を重ねた際に誤植するなどもあるので,そのあたりは気にしない方が良いでしょう.
その点だけを以て,この書籍が良くないと断じているのであれば,世の中の多くの専門書が良くないことになります.

そもそも,最近はUnreal Engine 4やUnityなど,ゲームエンジンに関する書籍は多く出ているものの,こういった根元の部分を扱う書籍は長らく出ていませんでした.

勉強したくても,古い情報を元にWeb上で色々と調べて,断片的な情報をつなぎ合わせて,情報を更新していくしかありませんでした.

ちょうどそういった,根元の部分を扱うような書籍が出ると良いな,という話をしていた頃にこの書籍が出版され,情報や前例が少ない中で出版までこぎ着けてくださった川野先生や翔泳社の方には感謝しかありません.

この後に続く,XAudio2などのサウンドを扱った書籍や,DirectInputやXInputなど入力周りを扱った書籍など,自分で根元から作ってみたい人向けの書籍が増えることを期待します.

0 件のコメント:

コメントを投稿