スキニングするために先端のジョイント(ボーン)は必要か?

スキニングとジョイント(ボーン)の関係

3Dモデルを作成したら、ジョイント(ボーン)を作成してスキニング作業に入ると思います。

ジョイント(ボーン)の移動や回転を行うと、メッシュの頂点はウェイトの度合いに従って変形します。

つまり制御点であるジョイント(ボーン)の数は、
少なければ少ないほど操作や設定がしやすい代わりに細やかな表現ができず、
多ければ多いほど細やかな表現が可能になる代わりに操作や設定が困難になります。

ですので、多くても少なくても駄目で、必要に応じて適切な配置をする必要があります。

先端にジョイント(ボーン)がある場合と無い場合

人間や機械を考えると関節部分に配置するのが普通ですが、参考書などでスキニングを説明するときにモデルの先端までジョイント(ボーン)を配置していることがあります。

それが下図の左側のモデルですね。

f:id:hildsoft:20170605022833j:plain

もちろん人間の爪の先端に関節なんてありませんので、右側のように先端のジョイントを作らない場合が多いと思います。

作ることで何かができなくなるわけではないのですが、恐らく使わないことが多いでしょう。

それなら先端にジョイント(ボーン)を作ることにどのような意味があるのでしょうか。

回転により先端部分を持ち上げる

f:id:hildsoft:20170605022837j:plain

左のジョイント(ボーン)は下から2番目を、右のジョイント(ボーン)は一番下をそれぞれ60度回転させたものです。

回転させたジョイント(ボーン)の付近でへこみ具合に若干の差はありますが、ウェイトの調整である程度吸収できるため、それほど大きな差は出ません。

先端をねじる

f:id:hildsoft:20170605022840j:plain

左のジョイント(ボーン)の先端をねじることで、メッシュの先端を変形できます。

では、右側はジョイント(ボーン)が無いので同じことができないのかというと、

f:id:hildsoft:20170605022843j:plain

こちらもある程度近い形状にまでは変形できるんですね。


しかし、角度を変えてみるとわかるのですが、

f:id:hildsoft:20170605022848j:plain

右側のメッシュはジョイント(ボーン)より下のメッシュを一括に扱うためどうしても平面的(固定形状)になってしまうのです。


f:id:hildsoft:20170605080956j:plain

上図は直方体にして一番上のジョイント(ボーン)以外を45度ずつねじったものです。

形状によっては連続的にねじると差を顕著に感じられます。

錘状なら先端に行くほど細くなるので、ねじることでの差を感じられなくなるでしょう。

この誤差を気にしなければ、ねじりに関しては先端のジョイント(ボーン)は不要になります。

先端を伸ばす

f:id:hildsoft:20170605024416j:plain

これは決定的に異なります。

ジョイント(ボーン)が無ければ先端を伸ばすことはできません。

ジョイント(ボーン)の大きさを調整することで全体のサイズを変更させたい場合などは、移動ではなく拡大縮小操作になるのでメッシュも合わせて動くため問題ありません。

先端を伸ばすのは関節以外での用途

関節としてジョイント(ボーン)を使う場合には伸ばす動作はしないので気づきにくいですが、いわゆる「揺れ物」のような操作を行う場合に使うことが多いです。

ばねが代表的ですが、伸縮性のあるものは端から端までジョイント(ボーン)を設定する必要があります。そうしないと末端だけが伸び縮みしないことになります。

揺れ物でも髪や布のような殆ど伸縮性のないものについて末端のジョイント(ボーン)が必要になるかは、細かくねじる表現が欲しいかどうかくらいの認識で良いと思います。

質量の位置

ゲームなどでは子ジョイントの位置から親ジョイントの回転を制御することがあるため、末端までジョイントを入れることがあります。

この場合末端のジョイントはウェイトを持ち、振り子の重りのような意味合いを持ちます。

位置決定用

盾や武器などの設定位置など体の動きに合わせて位置が変わるような物のために先端にジョイント(ボーン)を使用することもあります。
これについては小物の位置や回転を調整するために必要になるので直観的に必要だと理解できるかと思います。

フェイシャル用のボーンは皮膚の位置を調整するもので、モーションキャプチャーなどで1個ずつ調整することが多いでしょうから、必要な数だけ追加することになるでしょう。

まとめ

先端にジョイント(ボーン)を入れるかどうかは、先端だけを変形させたいかどうかを一つの判断基準にすると良いです。

ジョイントを増やしても良いのであれば、ウェイト設定時の目印にもなるので追加してもいいかもしれません。
また、物理演算のために設定することがあります。

小物を配置するために必要なジョイント(ボーン)もあります。

SubstancePainterでアルファ付きのテクスチャが上手く表示されない

今作っているキャラクターのテクスチャをSubstancePainterで作ろうとしていて問題にぶつかってしまいました・・・。

 

完全には解決はしていないけど、情報共有のためにアップします。

 

BaseColorにペイントソフトで作ったテクスチャを設定したのですが、

このテクスチャにアルファ値を設定していて、Unityで透過表示できるか実験したところアルファ値が消えて完全に不透明になるか、画像のように全体が半透明になりました。

元のファイルに一部しか透過を入れていないので、その部分だけを透明になることを期待していたのですが、上手くいきませんでした。

f:id:hildsoft:20170120222928p:plain

 

続きを読む

UnityのRenderer、Mesh、Material、Shaderの関係

描画周りの基礎知識。

 

本格的に勉強するとなるとマニュアルを見ないといけないけど、使う分にはこの程度知っておけばいいかな。

 

それぞれの簡単な説明

Renderer(レンダラー)

MeshRenderer、SkinnedMeshRendererなどがある

ボーンで形状変更するかどうかくらいを覚えておけば最初は大丈夫

コンポーネント

オブジェクトを描画するためのメイン処理&データ管理

 

Mesh(メッシュ)

オブジェクトの形状データ

ポリゴンと呼ばれてるものとの認識で十分

Unity上で手動で修正を加えることは殆どない

 

Material(マテリアル)

メッシュが形状なのに対して、マテリアルは質感のデータ

リアル系では最近はPBR(Physically-Based Rendering)が増えている

テクスチャを保持するのはここ

 

Shader(シェーダー)

Unity5.0で大きく変わった

StandardShader使っておけばとりあえずok

メッシュやマテリアルを元に、最終的にどう表現するかを決定する

 

関係

Renderer

MeshとMaterialのコピーインスタンスを保持

通常はこちらを使用するが、sharedMesh、sharedMaterialはコピー元のデータなので使用する場合は注意が必要

MeshもMaterialも差し替え可能(差し替えた後は破棄も忘れずに)

 

Mesh

Rendererから参照される

 

Material

Rendererから参照される

Shaderを1個参照する

 

Shader

Materialのデータを参照するので、同じShaderでもMaterialによって描画変更可能

 

小規模ゲーム作成にオススメの3Dツール

3Dツールっていろいろあるし、使う理由も人それぞれなので一概にどれが良いってのは言えないんですね。

 

統合型ソフト1本あれば事足りる時代もあったみたいですが、最近ではこだわった作品になればなるほど、1つのツールで完了することは無いので、ソフトごとに得意なところを使い分けるのが一般的になってきているようです。

 

需要の一例として私の用意した環境と、選定したときの判断を含めてオススメとして紹介します。

 

前提となる条件

  • UnityやUE4を対象に小規模ゲームの素材を作るためのもの
  • 目先の目標達成だけではなく、今後も見据えて勉強コストは用意する

 

選択したツール

続きを読む