hibitの技術系メモ

数学とか3Dとか翻訳とか

クロースコンポーネントが爆発する/縮む時の対処法

クロースコンポーネント爆発事件

 アバター制作において、時にボーンだけでは表現が難しい場合があります。服がたるむ様子などがその代表的な例でしょう。そのような時にUnityのクロースコンポーネントは強力な武器になります。

f:id:hibit_at:20180910205656p:plain

 使い方も簡単です。このようにピン止め部分を指定して、コライダーを別途指定して…

f:id:hibit_at:20180910204228g:plain

 爆発しとるやないか!

 なぜこのようなことが起こってしまったのでしょうか。

解決策

f:id:hibit_at:20180910205800p:plain

 結論から言うと、Blender(Maya使ったことないですけど、多分Mayaでも出来るでしょう)で「回転と拡縮の適用」をすれば直ります。ある程度実験した結果、どうやらボーンヒエラルキーの中にオブジェクトが位置付けられると、強制的に位置やスケールが指定されてしまうようです。普段は「元の拡大率」が表に出ることはないのですが、なぜかクロースコンポーネントを適用した時だけ元の拡大率に戻ろうとするムーブをしてしまうみたいです。私は経験がないですが、恐らく同様の理由で「縮む」時もこの対策が有効かと思われます。

f:id:hibit_at:20180910210409g:plain

 和解した! 俺はクロースと和解したぞ!

補足

 Blenderで編集を加えた時はUnity上ではなく、エクスプローラ上でファイルを置き換えると、Unity上でやった操作を残したままfbxファイルだけ置き換えることができます。初心者の頃はいちいちPrefabを消して一から作り直してました……。

f:id:hibit_at:20180910210512p:plain

 皆様も良きUnityライフを。

Substance Painter(2018)を用いたみたま式肌ベイク法

 人物の3Dモデルを作るにあたって、肌のテクスチャを描くのはめんどくさい作業です。そんな時には、ゆきのみたまさんがあげていた、サブスタ(Substance Painter)を使った方法が役に立つのですが、

 自分が使っているバージョンと違っているせいか、用語が違っていたりするので解説・注釈をしていきます。同じ症状に陥っている方のために、注釈や操作ガイドをまとめておくことにしました。なお、自分が使っているSubstance Painterのバージョンは2018です。

 まず、テクスチャを塗るサンプルを用意します。

f:id:hibit_at:20180908191904p:plain  サブディビジョンをかけたスザンヌちゃんです。サブスタは適当にUV開いてもなんとかなるのでUV展開もスマートUV展開で一発です。この手抜きが後で悲劇を生むことになるとは知る由もなかった……(伏線)。

 サブスタを開きます。

f:id:hibit_at:20180908192326p:plain  サブスタを初めて触った人はひょっとしたらここで戸惑うかもしれないので注釈ですが、サブスタでは、右の赤丸部分にあるボタンでウィンドウを管理します(ツールバーからでもできまけど)。

  • Texture Set List
  • Texture Set Settings
  • レイヤ(なぜこれだけカタカナ?)
  • Properties
  • Display Settings
  • Shader Settings
  • History

 の7種類ありますが、使うのは

  • レイヤ
  • Properties

 の2種類だけですので、削ったり足したりして今のうちに整理しておきましょう。

f:id:hibit_at:20180908193028p:plain  ここのボタンでアンロック!

f:id:hibit_at:20180908193120p:plain  こうなればよろし。

 スザンヌを読み込みます。

f:id:hibit_at:20180908193431p:plain  fbxをドラッグ&ドロップで読み込みます。「プロジェクト構成」というメッセージボックスが出てきますが、何も考えずにOK押して大丈夫です。そしてまた例によって赤丸部分に注目してほしいのですが、今はここが「マテリアル」になっていると思います。これは「ベースカラー+ラフネス+ノーマル+ハイト」のチャンネルを足して物理的な演算をした後のプレビューになります。Unityに持っていく場合、例えばStandardシェーダーで各チャンネルを使うような場合ならこのプレビューを使う必要はありますが、トゥーン系シェーダーでテクスチャ1枚だけ使う場合はむしろ邪魔です。ベースカラーだけ分かればいいので、この部分を「Base Color」にします。

f:id:hibit_at:20180908194151p:plain

 次はベイクします。さっき「レイヤ」と「Properties」しか使わないと言ったな、アレは嘘だ。一回だけ「Texture Set Settings」を使います。

f:id:hibit_at:20180908201027p:plain  これで「Bake Mesh Maps」を押します。いろいろメッセージボックスが出てきますが、脳死状態でOKを押し続けていれば大丈夫です。

 次は塗りつぶしレイヤを追加します。

f:id:hibit_at:20180908201157p:plain

 次はそのレイヤにフィルタを加えます。

f:id:hibit_at:20180908201430p:plain  後はみたまさんの動画通りに

  • Baked Lighting
  • Histgram Scan
  • HSL Perceptive(みたまさんの動画だと「HLS」になっているので、注意!)
  • Gradient

 を加えれば大丈夫です。

 Gradientについて注釈を加えると、初期状態だと

f:id:hibit_at:20180908201731p:plain  こんな感じになって3色指定しなければいけない状態になってると思います。「みたまさんの動画だと2色だったのになぜ?」となるかもしれませんが、これは色の下にあるバー(Color 1 Positionとか)が0, 0.5, 1という並びになっていることが原因で、要はこの位置でグラデーションを区切っている訳です。2色にしたいならColor1のポジションを0、Color2のポジションを1にすれば大丈夫です。奇抜な色にしたいとかがない限り、2色で十分だと思います。さあこれで大丈夫、最後の仕上げにGradientのPropertiesの中にある「Input Transformation」から「Blur Intensity」を調整して影をぼかして…

f:id:hibit_at:20180908202138p:plain  グラデーションが途切れ途切れになっとるやないかワレ!

 どうやら、グラデーションの境目にブラーをかけるとUVマップの継ぎ目で途切れ途切れになってしまうという仕様のようです。南無。

解決策1

 綺麗にシームを入れましょう。以上。

解決策2

 Histgram Scanフィルターではこのような症状は起こらないので、ここの「Contrast」の項目でブラーをかけるのもアリです。

f:id:hibit_at:20180908202617p:plain

解決策2の補足

「クソUV」と名高いライトマップで実験してみましたが、ライトマップだとこの方法でもさすがにダメなようです。

f:id:hibit_at:20180908202909p:plain

 皆さんもサブスタを駆使してよい3Dライフを。