Redpoll's 60




前書き

この講義は、3Dプログラミングに関する基本的な事柄を初学者向けに解説したものである。近年のコンピューターテクノロジーの発展により、一般向けのパソコンにおいても3次元空間におけるオブジェクトの運動をリアルタイムに描画することが当たり前となった。
いわゆる3DCG(3次元コンピューターグラフィックス)は、映画に代表されるプリレンダーの分野とゲームに代表されるリアルタイムの分野の2つに大別される。どちらの分野にも共通していることは、フレームと呼ばれる静止画像を1秒間に数10枚ずつスクリーンやディスプレイに連続的に出力して映像を作っていくという点である。
作られる映像は、プリレンダーの場合は事前に作成されたフレームを使用するが、リアルタイムの場合では文字通り映像を構成するフレームを1秒当たり何10枚もリアルタイムで生成していくのである。リアルタイムで膨大な量のフレームを生成するのはコンピューター側の仕事であるが、生成されるフレームの内容をどのようなものにするかといった最も重要な部分はプログラムに記述しなければならない。この講義で読者が学習することは、そういったリアルタイムの3Dコンテンツをプログラムでどのように実装するかということである。
近年の3DCG制作に使用される、いわゆるゲームエンジンやDCCツール(Digital Content Creation Tool)では、新規ユーザーに対してはプログラミング知識を前提にしていない。むしろ、プログラミングなしでどういったものが作れるのかをアピールする傾向がある。
しかし、この講義は現在のそういった方向性とは根本的に異なるものである。全章を通じての一貫した主題は、3D空間における基礎的なリアルタイムコンテンツをいかにしてプログラムで実装するかという点にある。つまり、この講義ではプログラミングしかやらないのである。
対象とする読者であるが、この講義は基本的に3Dプログラミングを仕事として選ぶ者に向けて書かれている。ただ単に興味があるとか、趣味を目的とした読者にはおすすめしない。
前提とする知識は C#の基礎と高校レベルの数学に対する充分な理解である。C#については知識がなくとも、Javaあるいは C++の知識でも通用するであろう (C#の独自機能をほとんど使っていないので、プログラム自体はJavaと見分けがつかないはずである)。3Dプログラミングは、その基礎として3D数学が土台にあり、3D数学とは入門的な範囲でいえば線形代数のごく一部が使われているに過ぎない。線形代数は高校数学の範囲ではないが、この講義で扱うような内容ならば、数学的な素養があれば前提知識がなくとも、この講義の解説で必要な理解は得られるであろう。
何より、入門領域においては3Dプログラミングの内容は数学というよりも、むしろ算数に近い。それは、そのほとんどが図で解説できるからである。数学に特徴的な抽象概念に対する理解というものが、入門領域の3Dプログラミングにおいては必要とはならないのである。この講義で扱う範囲でいえば、3Dプログラミングに関する解説はすべて図やアニメーションで解説できることである。そして、そういった解説の方が自然である。そういった意味で数学よりは算数に近いのである。したがって、理系の学生が読むような数学や物理の参考書を読み慣れている者であれば、この講義の内容は容易に理解できるであろう。
また、この講義では全章を通じてゲームエンジンであるUnityを使用するが、あらかじめ断っておかなければならないことは、Unityの'解説書'ではないということである。Unityを使用する関係上、Unityに関する多少の知識は得られるであろうが、あくまで第一の目的は3Dプログラミングである。むしろ、一般性を考慮してUnity独自のやり方を極力排している。例えば、Unity関連の解説ではエディター画面上のメニューやテキストフィールド、チェックボックスなどのGUIを通して適当な設定を行い、それと併用する形でプログラムを作成するという流れで進められる。プログラムの作成も行われるが、それと同じかあるいはそれ以上に各種のGUI経由の設定が大きなウェートを占めている。
しかし、この講義においては読者がUnity側に行う設定はほとんどない。極力そういった作業が起こらないように進められる。繰り返しになるが、この講義はプログラミングしかやらないのである。
最後に、この講義の内容を習得した読者がその先に進むにあたっての学習の手引きについて簡単に触れておこう。講義を開始する前に、こういった「その後の学習の指針」について述べるのはおかしく思われるかもしれないが、重要なことであるので一番最初に触れておくのである。
読者がこの講義の内容を習得し、その先を目指す際には、現場の開発者や研究者が読んだり書いたりするようなものと取り組んでいかなければいけない。もちろんその多くが英語の資料である。この講義を終えた場合には、次の'登れそうな山'を探すことを考えるのがおそらくは常識である。ここで忠告していることは、そういった山はないということである。
この講義をスラスラと読み進めることができたとしても、それは簡単なことしか扱っていないからである。その先に進むにあたって、この講義の内容を前提に考えてはいけない。現場の開発者や研究者が読むような資料には、この講義で展開されるような図やアニメーションを多用した'甘ったるい'解説はない。現場のエンジニアが分かるような'テンポ'で進められるのである。もし、本気で3Dプログラミングの世界を目指すのであれば、この点については考慮しておいたほうがよいだろう。
難所はその先から始まるのである。

        2020年  初夏
                          作者





© 2020-2023 Redpoll's 60 (All rights reserved)