Vriodで作成したモデルをUnityにFBX形式で持っていきたかったのですが色々苦戦しました。その中で表情モーション(BlendShape)が変になってしまったのでその問題について解決しました。
<BlendShapeがおかしくなる>
表情がおかしくなる原因は主に2つあります。
1 顔の頂点を何らかの方法で弄ってしまった
>重複頂点削除
>頂点が変わってしまうモディファイア適用
>他の頂点との結合
これは明らかに自分のせいなのですが、知らなかったので痛い目を見ました。
特に、重複頂点の削除はなるだけデータを軽くしたい(特にゲーム制作で使う際)のでコレをするのが自分の癖になっています。
何も考えず重複頂点を削除したら表情モーションがぶっ壊れました。
また別の件では、顔と頭が別オブジェクトなのでウェイトペイントがおかしくなってしまいます。そのため、なるだけ頭と顔を結合したいのですが、頂点を顔側の物を残さないとダメみたいです。これもやってしまいがちですね。
ぶっ壊してしまったら何とかして元に戻すか、再インポートして作業をやり直しましょう。(ツライ)
2 Unity側が自動で法線を計算し、その結果がおかしくなっている
これは何がダメなのかわからず苦戦しました。
↓の画像でわかるでしょうか?ウチの看板娘ですが、口の周りが白くなっており、目尻のところも白いものが出てきています。
シェーダーがダメなのか、FBXの出力方法がダメなのか色々調べてみたんですが、うまくいきませんでした。アウトラインを色々弄ってみたりとか。それでやっとこさ直せました。
結論から言うとUnity側の設定でした。
どうやらUnity側で法線の計算を自動で行なっているらしく、BlendShapeで法線方向を指定していたりすると破綻するみたいです。
Vroidがデフォルトで搭載していてくれる表情モーションは法線方向を指定しているのかもしれません。(詳しくはわかりませんが、BlendShapeの法線がおかしくなるのは確かです)
Unity2018.3から?アップデートで自動計算を行うようになったらしく、それ以前のバージョンではならないかもしれません。逆にそれ以降の場合は注意が必要です。
これの直し方はFBXファイルのモデルタブをクリックして
Legacy Blend Shapes Normalsにチェックを入れてApplyすればOKです。
はい。綺麗な顔に戻りました。
こんな所に罠があるなんてなんてこったい。