Unity 備忘録テクニック(Unity エディタのメニュー 5)




皆さんこんにちは、プロクラスの野間です。

前回は Script で 3D のモデルを作りました。
でも、多くの場合、既存の箱や球ではなく色々な形を作ってみたいのではないでしょうか。
普段は別途3Dのモデリングソフトを使って作るわけですが、今は流れ的にプログラムで色々やるようにしていますので、今回もやはりプログラム(Script)で何とかしてみたいと思います。
そのためには色々と事前知識が必要になります。

■事前知識が色々必要となります

漠然とした質問となりますが、3Dのモデルがどのように構成されているかご存知でしょうか?
・・・の前に、2Dの図形がどのように構成されているかを先に考えて見ます。
なぜ3Dの話をしているのに今更2Dの話をするかって?
それは2Dと3Dはとてもとても深い関係にあるためです。(ほぼ同じ考えで作られています)
まぁ、だまされたと思って2Dを考えてみてください。

■2Dで図形描画

2Dで三角形や四角形を描く時に必ず使うものがあります。
それは位置を指定するために使われるもの・・・「座標」です!
みなさん、(小)中・高校で使いましたよね?座標。あれです。
座標は位置を指定するのに非常に優れた力を発揮します。
例えば、文章で三角形の描画を説明して、10人が10人共同じ絵が描ける様にできるでしょうか?
これは非常に困難であるといわざるを得ません。特にプログラムでは10人が10人共同じ結果になるように指定する必要がありますので、文章のみで説明するのは使えません。

ですが、座標を使った場合はどうでしょうか。
もちろん人がやる場合は方眼紙や定規等が必要となりますが、相手はコンピュータです。画面は方眼紙でできているようなものですし、直線を引くなんてお手の物です。もちろん、座標の数え間違いなんてありえません。

では、実際に座標を使って三角形を指定するにはどうするかというと、単純に頂点の座標を指定すれば三角形になります。
具体的にいきましょう、3点の座標を例として示します。座標を表現する場合、2つの数字をカンマで区切って表示することが多く、また、その順序も x,y の順で指定します。
例)とある三角形 (0,0) – (0,5) – (5,5)
頂点を3つ指定された場合、この3点を線で結べば三角形が出来上がります。
如何でしょう?どのような三角形かイメージできませんか?

004

■3Dで図形描画

さて、ここまでくれば想像がつくかと思いますが、3Dで図形を描画するためには2Dと同じように座標を使って表現します。
2Dと違うところは x,y ではなく、x,y,z の3つである点です。
表現方法も同じで、カンマで区切って表示することが多く、順序も x,y,z で記述します。

先の図形と同じ三角形を3Dの座標で指定すると次のようになります。
例)とある三角形 (0,0,0) – (0,5,0) – (5,5,0)

この三角形は z 座標が全て 0 になっていますので、2Dで描画したものと同じように見えることでしょう。
このような図形をポリゴンと呼びます。
ポリゴン(polygon)は普通に存在している英単語で、辞書を見てみると「多角形」の事だそうです。
ですので、実は3Dだけでなく2Dでもポリゴンです。

005

名前が多角形ですので、ポリゴンは本来「多角」なのですが、実のところコンピュータの3Dでは三角形で扱うことが多いです。

006
それにはもちろん理由があるのですが・・・これはまた機会があったらやることにします。

ここでは「3Dの描画は多くの場合がポリゴンと呼ばれる多角形で描画されており、それは座標(x,y,z)を頂点として指定された情報で表現されている」事を理解していただければOKです。

この頂点座標を線で結び、中身を塗りつぶしたものが3Dで使っているポリゴンと呼ばれるものです。

■Unity で扱うためには・・・

では頂点をどんどん指定していけば3D描画される・・・訳ではなく、少しややこしい管理方式になっています。
その方法は、頂点一覧と面情報の2つです。(この用語(面情報)は私が勝手に作ったものです)
頂点一覧とは読んで字のごとく、ちょうてんがずら~っと描いてあるものです。
先の(0,0,0) – (0,5,0) – (5,5,0)は頂点リストと呼べますね。

番号1:(0,0,0)

番号2:(0,5,0)

番号3:(5,5,0)
ただ、面を表現するためにはこれらの点をどのように「繋ぐ」かの情報が必要となります。
この「繋ぐ」を表現する方法としては、頂点一覧の?番目で指定します。
つまり、1,2,3 とすることにより、三角形がかけます。2,3,1 なんて指定もできますね。

最低限の情報として、この頂点一覧と面情報(頂点がどのようにつながっているか)の情報でポリゴンが表現されます。
何故こんな回りくどい管理になっているかって?利点は幾つかありますがちょっと今回の例では説明し難いので、今は「そんなもの」だと思って進んでください。色々使っているとこの管理じゃないと無理だよね~って思う事になります。

実はもう一つ最低限の事前知識が必要になるのですが、ちょっとこのまま進みます。(実際に体験してからの方が理解しやすいため先に表示してから体験してみましょう)
次回は実際に三角形を表示する Script を書きます。