らぷとのメモ帳

VRChatとその周りに関することをメインに記事を書いています

3DCG : 違いの分かりにくいあれこれ

この記事は3DCGでの分かりにくい用語の説明をしています.

ぶっちゃけ自分もわかってないんですけどね.

モデル

かなりあいまいですが,3DCGのデータのことをモデルといいます. とくにメッシュが含まれているような,見た目がちゃんとある3DCGのデータをモデルといいます. 便利なのでよく使います.(例:そのアバターの素体モデルを読み込んで)

メッシュ, ポリゴン, オブジェクト

メッシュ

メッシュというのは頂点と面の集合です.

3DCGでは頂点とそれらをつないでできる面を利用して見た目を作っていくので,メッシュがなければ始まりません.

メッシュに頂点や面を追加したり,見た目の設定を加えることで作品を作っていきます.

f:id:rapt_vrc:20210604171828p:plain

オブジェクト

メッシュの入れ物です. メッシュ全体の設定とかを一緒に入れておけます.

オブジェクト同士に親子関係を持たせることができるので,メッシュ同士の複雑な関係を表現できます.

f:id:rapt_vrc:20210604171837p:plain

ポリゴン

一般に3つ以上の頂点と,それによって作られる面をポリゴンといいます. 簡単に言えば一つの面をポリゴンといいます.

三角面のこともポリゴンといってややこしいですが,特に三角面について言いたい場合は△とか三角面とかいいます. (例:△15000のアバター

blenderでは三角形の面を三角面, 四角形の面を四角面,それ以外をNゴンと言っています.

f:id:rapt_vrc:20210604171841p:plain 左から三角面,四角面,Nゴン

アーマチュア, スケルトン, ボーン

アーマチュア

ケルトンの入れ物です

f:id:rapt_vrc:20210604171810p:plain

ケルト

ボーンが構造を持って組みあわたっているものです. たとえば, 腰 (Hips) に両足と背骨がくっついていて,背骨に首と肩がくっついていて,みたいに構造になっています.

f:id:rapt_vrc:20210604171806p:plain

ボーン

ケルトンの構成要素です. こいつを回転させたりすることでポーズを作ることができます.

f:id:rapt_vrc:20210604171815p:plain

なお,Unityではどれもただのエンプティです.

マテリアル, テクスチャ, シェーダ

マテリアル

メッシュの質感を定義したデータです. たとえばどれくらいつるつるか,金属か,反射するか,色はどうか,透明かなどを定義しています.

実際にそれらの値(つるつる度とか)を受け取るのはシェーダです. マテリアルはどんなシェーダにどのような値を設定するのかを保存しているものと言えます.

メッシュには必ず一つ以上のマテリアルが必要です.そうでなければソフトウェアはメッシュを正しく描画できません. たいていはのぞんだ見た目にならないのですぐわかります.

ちなみに,一つのメッシュに複数のマテリアルを指定することもできます. 例えばナイフのメッシュがあったとして,柄の部分と刃の部分で別々の質感にするために2つのマテリアルを設定することがあります.

f:id:rapt_vrc:20210604171819p:plain マテリアルはシェーダに値を設定できる. たとえば「メタリック」は金属かどうかで,ここでは0なので非金属. 「粗さ」はそのまま粗さで,0が完全につるつる,1が完全にザラザラ.0.5なのでその中間.

f:id:rapt_vrc:20210604171832p:plain これもマテリアルの画面. ノードベースといって,複雑な設定をする場合はこちらのほうが見やすいためよく使われる. キャンバス内に使いたいシェーダや画像を自由に配置して,それらをつなげて設定を行う. 上の画像と同じことをここでは行っている.

テクスチャ

ただの画像です. マテリアルの色の設定で単色だけでなく,画像を指定できるものがあり,そこで使う画像をテクスチャと言います.

テクスチャがないマテリアルも普通にあります.逆にテクスチャが必須なマテリアルもあります.

色の設定だけでなく,つるつる度 (Smoothness)や凸凹度 (Normal) などもテクスチャで設定できることがあります.

メッシュのどの部分にテクスチャのどの部分を表示(利用)するかを決めるのがUVマップです.

ちなみに,つるつる度や金属 (Metallic) かもテクスチャで指定できるときがあり,それを利用すれば一つのマテリアルで複数の質感を同時に表現することもできます. ナイフなら,柄の部分と刃の部分の Smoothness や Metallic を別々にして一つのマテリアルで複数の質感を表現できます.

f:id:rapt_vrc:20210604171855p:plain ノードベースでテクスチャを設定している. 「ベースカラー」は基本的な色味を指定するもので,デフォルトでは単色だが,このように好きな画像を指定することができる. 画像はUVマップに従ってメッシュに貼り付けられることになる.

シェーダ

メッシュを描画するプログラムです. マテリアルには最低1つのシェーダを指定する必要があります. そうでないとメッシュを描画できませんからね.

プログラムなので,工夫すれば存在しないメッシュを描画時に生成したりできます. これがパーティクルとか言われてるやつです.

シェーダとマテリアルはお互いがなければ仕事ができないので, シェーダが先かマテリアルが先かは,卵が先か鶏が先かみたいな難しさがあります.

ただ,一つのマテリアルに複数のシェーダを仕込めることもあるので,やっぱりマテリアルが上か?

f:id:rapt_vrc:20210604171845p:plain

上のシェーダ(プリンシプルBSDF)は物理ベースレンダリング (PBR) をサポートしており,金属かどうか,つるつるか,屈折率はいくらか,などから見た目を設定します. 下のシェーダ(スペキュラー)はつるつる度とテカリの色のみから見た目を設定します. このように,シェーダによって受け取れる値の種類は異なり,マテリアルはシェーダへ入力する値を保存しています.

UVマップ

メッシュのどの部分にテクスチャのどの部分を表示(利用)するかを決めるのがUVマップです.

なんでUVなのかというと,紫外線ではなく座標軸の名前がU軸, V軸だからです. 2次元ならU軸はX軸(横), V軸はY軸(縦)に相当します. メッシュのある3次元空間でX, Y, Zが既に使われていて,UVマップでもX, Yを使っちゃうと,どっちのX, Yなのか紛らわしいので,同じ変数の仲間であるU, Vを使っているんだと思います.

次の画像を見てください.

f:id:rapt_vrc:20210604171901p:plain

メッシュの面とUVマップは1対1に対応していて,テクスチャのどの部分を表示するかを指定しています. blenderなどでUV展開を行うことで,UVマップを作成することができます. UVマップはメッシュ情報として出力され,Unityなどで利用されることになります.

見た目が思い通りにならない場合はUVマップがちゃんと設定されているかを確認してみましょう.

f:id:rapt_vrc:20210604171901p:plain UVマップが展開図と言われるゆえんがこれ. 綺麗なUVマップはしばしば展開図に相当する. ただし,わざとUVマップをゆがめて展開することでテクスチャの有効活用ができたりするので,単なる展開図とは異なる.

f:id:rapt_vrc:20210604171906p:plain UVチェッカーテクスチャを利用することでテクスチャの密度を確認できる. 例えば皮膚は多少粗くても問題ないが,瞳や眉毛は細かく書き込まれてないとボケっとしてしまうので密度を上げる.

さいごに

これからもどんどん増えていく予定です