自作した3DCGのソフトの技術の改正を行いたいのですが、その前に3DCGの基礎が分からないとよく分からないところが多いので、その基礎を振り替えようとこの記事を書こうと思います。
1.まず、2DCGから振り返る
まず、3DCGの本格的解説の前に、2DCGの基礎を振り替えようと思います。
要はコンピュータ上で2Dの画像はどう処理されるのか?という話で多くの方が御存知の内容だと思います。
まず、2Dの画像はピクセルと呼ばれる小さな粒粒の塊によってできています。プログラム上では基本的に2次元配列で表される物です。この2次元配列を処理してPC画面上に表示しているわけです。
それで、2DCGはこの3DCGの概念を発展させたもの・・・ではなく、全く基礎から違っています。
2.3DCGは配列ではなくポリゴンと呼ばれ鵜多角形の塊で表されます。
3DCGは配列ではなくポリゴンと呼ばれる多角形の塊で表されます。
イメージとしてはレゴブロックでなく、このマグビルドという玩具をイメージすると一番わかりやすいです。ペーパークラフトのようなものという言い換えも出来ます。
このような多角形のブロックが3次元空間に配置されており、これらを組み合わせて3DCGは成り立っています。
なお、全ての多角形は三角形で表すことができるので基本的に三角形の組み合わせで3DCGは成り立っています。
3.何故ピクセルの拡張ではなくポリゴンという単位で成り立っているのか?
ここで「ブロックの組み合わせで表示した方が人間にとって理解しやすくて扱いやすいのではないか?2次元配列で扱っていたものを3次元配列で扱って表示した方が早いのではないか?」と疑問に思った人もいると思います。
確かにMinecraftのように3次元配列で3DCGを表現する方法はあります。この手法はボクセルと呼ばれますが、現在はポリゴンの方が圧倒的に主流です。
要因はいろいろあると思いますが、おそらくこういうのが要因だと思います
- 処理が軽い。3次元配列だと中身のデータも用意する必要があり、非常にデータが重くなるが、ポリゴンだと中身のデータまで必要なく、処理が圧倒的に軽く済む
- 回転の計算の処理がコンピュータにとって非常に簡単で済む(※人間にとっては行列などを扱う必要があるので理解するのは難しいです)
- 拡大縮小に強い。ボクセルだと拡大した時に荒っぽく見えてしまうがポリゴンはそれがない
4.余談。3DCGをポリゴンで表せるのなら2DCGも同じことができるのではないか?
余談です。もしかしたら「3DCGはポリゴンと呼ばれる多角形で表せることが分かった。なら2D画像でもポリゴンを使って表すことは可能ではないか?」と思った方がいるかもしれません。
まさにその通りで、2D画像をピクセルではなくポリゴンの組み合わせで表現することは可能です。
この方法論はAnother World(旧タイトル:Outer World)で使用されました。開発者によると処理が軽くなり、fpsが向上するなどの効果があったのだそうです。
さらに言いますとウェブページなどに使われるSVG形式の画像がこれに近い概念です。SVGはポリゴンの概念に加えて曲線や円の概念を組み合わせて成り立っています。
ただ、作成や編集が難しいためかピクセル方式程主流になっていないのが現状です。
この「ポリゴンは作成や編集が難しい」という話は後の解説で重要な話となります。