バーチャル3Dクリエイターの神部まゆみです(*^-^*)
今日はUnityの揺れものアセットのVertExmotionを買ったから、それについて書いておくよ。
備忘録がてらやりながら書いていくから、結構長くなるかも( ̄▽ ̄;)
あとGIF画像が多いからちょっとページの読み込みが重いかも?(・_・;)
気になるところだけ見てね。
ちなみにProじゃないほうのやつね。
動作させたUnityのバージョンは2020.1.1です。
VertExmotionの購入を検討している人は参考にしてね。
ーーーーーーーーーーーーーーーーーー
追記:
細かいパラメーター設定などは次の記事で書いてます。

ーーーーーーーーーーーーーーーーーーー
Pro版と通常版との違いは?
Pro版は、
・ランタイムとエディターのソースコードがある
・β版と次のバージョンの機能が含まれている
・サポートが優先される
みたいな感じっぽい。
私はソースコードとか見てもよくわかんないし、見ないと使えないようなら諦めちゃうと思うから、今は必要ないかな( ̄▽ ̄;)
胸とかを揺らすのに使いたいだけだから、新機能みたいなのは今のところ必要なさそう。ダイナミックボーンより微調整しやすい感じで揺れればいいかな。
サポートも英語だろうから、よくわからないしね( ̄▽ ̄;)
私の場合は、とりあえず通常版で十分かな。
買う前の懸念事項
ダイナミックボーンもあるのに、そもそもそんなに使うかな?
ダイナミックボーンは優秀なんだけど、ボーン仕込まないといけないのと、細かい動きには対応しにくいんだよね( ̄▽ ̄;)
衝突判定があると白い球体が逃げちゃって、パラメーター調整してもいい感じにならないことが多いような。
Pro版買って使わなくなったらちょっとアレだけど、通常版は一万円以下だからまぁいいかな。
ユニティちゃんトゥーンシェーダーが使えないっぽい? ※2018年の情報です
小林信行さんっていう頭のいいエンジニアの人が作った優秀なシェーダーを使わせてもらってるんだけど、なんかVertExmotionだと使えないっぽい?
VertExmotionはシェーダーで動作して見た目を動かす感じ?らしくて、使えるシェーダーが限られてくるみたい?
Twitterで検索したらそんなやりとりを見かけたからさ。
注:↓こちらのやりとりを参考にさせていただきました。
やってみましたが、VertExmotion.cgincにエラーが出力されてまして、シェーダーがコンパイルできない状態でした。そうなると先方の内部の問題なんで、僕のほうではすぐに対処はできないです。結構複雑なことをやってるので、カスタムシェーダー系にコレを組み込むのは難しそうです。ごめんなさい。 pic.twitter.com/ldTRj9Domc
— Nobuyuki Kobayashi (@nyaa_toraneko) May 16, 2018
ただ二年以上前の情報だから今はどうなのかわからないんだけど、このアセット検索してもあんまり情報がないみたい?
なんか上手いことやって導入してる人もいるっぽい?んだけど。
まぁダメなら他の対応してるシェーダーを使ったり、自分で作るしかないかな。
追記:なんか手を入れれば使えるみたいです。
こちらの頭のいい先輩が解説してくれてるみたい。参考にしてやってみます。

値段は税込71.50$!購入時7800円くらい
今まで買った中で一番高級なアセットかも( ̄▽ ̄;)。
でも、色々な場所を揺らして楽しめるなら安いものかな(笑)。
早速インポートしてみる
エラーが出たら嫌だなぁと思ったけど、普通にダウンロードしてインポートできたみたい。
とりあえずデモを動かしてみようかな
このアセット、あんまり日本語で詳しく解説してくれてるページがないんだよね。
とりあえずVertExmotionフォルダにあるDemoフォルダを開いて、デモを動かしてみることにするよ。
とりあえず、目についたデモを紹介していくよ。
Collision
これは「collision」フォルダに入ってたデモ。
ダイナミックボーンよりも割と微調整しやすそう?な印象。気のせい?
Dress
これは「Dress」ってフォルダに入ってたデモ。
回転させる機能?じゃなくて、「服もいい感じに揺らせられますよ!」みたいな感じ?まだいじってないから、現時点ではよくわかりません。
DropLeft
あとはこういうピタゴラスイッチ?みたいな凄そうなのとか…。
FaceDeform
顔の変形とかもできるみたい。
FishAnimation
魚のこういう動きも作れるみたい。なんか色々できそう。
Interactions
クリックすると凹ませたりすることもできるっぽい。ちょっと動作が重かったけど(^_^;)
Jellyfish
これは販売ページで見たやつかな。
ボタンを押すとVertExmotionのオンオフを切り替えられるんだけど、VertExmotionを使えばこんな感じの大きいゆるやかな動きもできるみたい。
Splash Demo
こんな感じの「べちゃっ」って感じのもできるみたい。
キリがないからこのへんでやめておくよ。
実際にセットアップしていく
こちらの作者さんの動画を参考にしながらやっていけばいけるかな。
こちらの先輩のページも参考になると思います。

適用したいオブジェクトにVertExmotionコンポーネントを追加する
とりあえずbodyオブジェクトに追加してみる。
そうするとVertExmotionのメニューが表示されて、「VertExmotionのシェーダーにしてください」みたいに言われる感じ?
bodyオブジェクトをVertExmotionのシェーダーに変える
なんかすごいたくさん入ってるみたい(;^_^A
とりあえず下から二番目のStandardにしてみたのがこれ。あれ、真っ黒Σ( ̄ロ ̄lll)
…じゃないな、後ろ見ると肌色が見えるけど、陰になってるから黒くなってるみたい。でもこれじゃちょっと黒すぎるね( ̄▽ ̄;)
……なんかいくつか試してみたけど、真っ黒になったり透明化したり、ちょっと合うのがないのかな?( ̄▽ ̄;)まだシェーダーとかよくわかんないし。
先にユニティちゃんトゥーンシェーダーを入れたほうが良さそう。
先にユニティちゃんトゥーンシェーダー2.0を入れる
こちらの頭のいい先輩のページを参考にさせていただきます。今回はこの人だけが頼りです( ̄▽ ̄;)

ちょっと引用させていただきます。
下準備
・VertExmotion.cgincをToon_DoubleShadeWithFeather.shaderがあるフォルダと同じフォルダにいれる
・Toon_DoubleShadeWithFeather.shader
UCTS_Outline.cginc
UCTS_DoubleShadeWithFeather.cginc
UCTS_ShadowCaster.cginc
をそれぞれ複製し、
Toon_DoubleShadeWithFeatherVert.shader
UCTS_OutlineVert.cginc
UCTS_DoubleShadeWithFeatherVert.cginc
UCTS_ShadowCasterVert.cginc
などの名前にする。Toon_DoubleShadeWithFeatherVert.shaderの修正
・アウトライン用ほか、いくつかPassがあるので、各Pass内でVertExmotion.cgincをincludeする。
またUCTS_Outline.cgincやUCTS_DoubleShadeWithFeather.cginc、UCTS_ShadowCaster.cgincのinclude部分は、それぞれVertexEmotion対応したものに書き換える。UCTS_OutlineVert.cginc、UCTS_DoubleShadeWithFeatherVert.cginc、UCTS_ShadowCasterVert.cgincの修正
・VertexInputにfloat4 color : COLOR;を追加
・vert処理の冒頭で、v.vertex = VertExmotion(v.vertex, v.color);を呼び出す
下準備
まずは、
VertExmotion.cgincをToon_DoubleShadeWithFeather.shaderがあるフォルダと同じフォルダにいれる
みたい。
VertExmotion.cginc っていうのはここにあった。VertExmotionフォルダにあるShaderフォルダ内。
Toon_DoubleShadeWithFeather.shader は、ユニティちゃんトゥーンシェーダーのシェーダーみたい(っていうか今使ってましたw)。Toon/Shaderに入ってたよ。
同じフォルダに入れるっていうか、複製すればいいのかな?移動させると不具合出そうだし複製にしておく。
これでいいのかな?ユニティちゃんトゥーンシェーダーのShaderフォルダの中にVertExmotion.cgincを入れればいい感じだと思う。
Toonフォルダ内の4つのファイルを複製して、名前を変更する
Toonフォルダ内の
- Toon_DoubleShadeWithFeather.shader
- UCTS_Outline.cginc
- UCTS_DoubleShadeWithFeather.cginc
- UCTS_ShadowCaster.cginc
この4つのファイルを複製して、VertExmotion用だと分かるように名前を変更すればいいみたい。
先輩が言うように、
- Toon_DoubleShadeWithFeatherVert.shader
- UCTS_OutlineVert.cginc
- UCTS_DoubleShadeWithFeatherVert.cginc
- UCTS_ShadowCasterVert.cginc
みたいにちょっと変えて、分かりやすくしておけばいいと思う。
…あれ、Unity内の複製ってどうやるんだっけ( ̄▽ ̄;)
とりあえず複製できればなんでもいいから、Unityフォルダ内から辿ってデスクトップにコピペして名前変更して、Unityに放り込んだよ。
Toon_DoubleShadeWithFeatherVert.shaderを修正する
げ、ソースいじるのかぁ…。
私はプログラム初心者ではないけど、Unityはこれまでプログラムいじらずにできることしかやってないんだよね( ̄▽ ̄;)
まぁ多分ファイル参照のパスを書き換えるとかそういうのだろうから、なんとかやってみるよ。
・アウトライン用ほか、いくつかPassがあるので、各Pass内でVertExmotion.cgincをincludeする。
またUCTS_Outline.cgincやUCTS_DoubleShadeWithFeather.cginc、UCTS_ShadowCaster.cgincのinclude部分は、それぞれVertexEmotion対応したものに書き換える。
一行目は…え、ちょっとわかりません。Passって何?偉い人?
とりあえず先に二行目をやっていこう。
ーーーーーーーーーーーーーーーーーーーーーーーーー
追記:
後から気付きましたが、先輩がPass部分のソースを書いてくれていたみたいなので、これをそのままコピペするか、該当部分だけ書き写せばいいと思います( ̄▽ ̄;)

以下は試行錯誤の記録。
ーーーーーーーーーーーーーーーーーーーーーーーーー
「またUCTS_Outline.cgincや~」の部分は、上でVert付きでリネームしたファイル名に書き換えればいいってことかな。
UCTS_Outline.cgincのincludeは、sublime textで開いたら175行目にあった。これをさっき書き換えたVert付きの名前に変えればいいのかな。
UCTS_DoubleShadeWithFeather.cgincは、206行目と236行目にあった。
UCTS_ShadowCaster.cgincは、261行目にあった。
アウトライン用ほか、いくつかPassがあるので、各Pass内でVertExmotion.cgincをincludeする。
#include “VertExmotion.cginc”
を各Pass内に追加すればいいんだと思う。
でも各パスってどこだろう?
…あ!そのままの意味なのか。
「Pass」でファイル内を検索したら普通に出たよ(笑)。
Passで括ってあるのは、156行目からのと、(Outlineって書いてあるからこれで合ってると思う)
179行目からのFORWARDってやつと、
210行目のFORWARD_DELTAってのと、
240行目のShadowCasterってやつ。これで最後かな。
多分、このPassの{ } の中に、#include “VertExmotion.cginc” を書けばいいんだろうね。
多分Passの{ }内ならどこでもいいんだろうけど、include文が書いてあるところと一緒に書いておけばいいかな。
じゃあ各pass内のinclude文の最後に書いておくよ。
- 166行目
- 196行目
- 229行目
- 257行目
に書いたよ。
UCTS_OutlineVert.cginc、UCTS_DoubleShadeWithFeatherVert.cginc、UCTS_ShadowCasterVert.cgincの修正
・VertexInputにfloat4 color : COLOR;を追加
・vert処理の冒頭で、v.vertex = VertExmotion(v.vertex, v.color);を呼び出す
ここさえできれば終わるか。
ここもなんか先輩が書いてくれてるみたいだから、そっちを参照したほうがよさげ。
3つとも同じ部分があるから、先輩のページに書いてある通りにコードを追加すればOK。
これで終わりらしい。動くのかな?
とりあえずVertExmotionコンポーネントを追加して、warnigが出てるところを「ignore~」なんとかとか書いてあるところにチェックを入れてたら、動かすところまではできた。
あれ、でもキューブをあてても動かないけど…?
これいくつか種類があるみたいだから、最適なのを選ばないとダメっぽい?
もう少し調べてからやろうかな。
センサー設定をすればいいのかな?
向かって左上の、筆アイコンの右の◎みたいなアイコンをクリックすると色々な設定メニューがあって、そこでセンサーの設定ができるっぽい。
先輩もセンサーで少し詰まったって書いてあるけど、確かに設定方法が少しわかりにくいのかも?( ̄▽ ̄;)
「Sensor Settings」でセンサーを移動させたり拡大縮小できるみたいだから、動かしたい部分に焦点を合わせていけばいいみたい。
センサーの範囲内なら、さっき塗ったウェイト?みたいなのが有効になるっぽい。
ちょっと覚えるまでクセがあるかも( ̄▽ ̄;)
…うーんでもこれでもゲーム画面でキューブあてても動かないなぁ…。
やっぱユニティちゃんトゥーンシェーダーは対応してないのかな?
衝突判定ができてないだけで、キャラを動かすとちゃんと揺れた!
すごいビヨンビヨンになってるけど(笑)。
じゃあちゃんとユニティちゃんトゥーンシェーダーは対応させられたってことだね。
あとはダイナミックボーンみたいに、当てるオブジェクト側でコライダー設定したり、当てられる側でもコライダーを指定する必要があるとか?
コライダーが変な位置にあったみたい( ̄▽ ̄;)
collider settings のradiusを大きくしたら、上に大きいコライダーが出現した(笑)。小さくて気付かなかっただけっぽい。
あれ、じゃあunityのデフォルト機能のコライダーでは反応しなくて、VertExmotion専用のコライダーってことかな?
cubeにVertExmotionのコライダーを追加したら動いた!
…と思ったけど、削除しても動いたw
collider settingsで設定したから良かったのかな?
box colliderに反応してるみたいだけど。
collider settingsでコライダーをセンサーの範囲内に置かないと反応しなくなるみたい。コライダーの位置によってセンサー内でも反応が変わるっぽい
collider settingsでピンクのコライダーを、オレンジ色のセンサー外に追放すると…
反応しなくなる。
ギリギリオレンジ色のセンサー内に配置すると…
揺れも少しで穏やかな感じになった?
ウェイトを塗ったほっぺドンピシャの位置に持っていくと…
もうほっぺごと持ってかれる感じに凄い揺れる(笑)。
なんかパワプロのミートカーソルを思い出した(笑)。
これで使い方合ってるのかわかんないけど、揺れを大きくするならジャストミートさせて、揺らしたくないなら空振りするみたいな感じかな?(笑)。
ーーーーーーーーーーーーーーーーーーーーーー
追記:
揺れの強さなどを設定してないだけでした( ̄▽ ̄;)
コライダーはウェイト塗ったあたりに普通に置くのが良さげ。
設定については次の記事で。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
とりあえず動いたので今回はこのあたりで終わっておきます
ぶっ続けで試行錯誤しながら書いたからすごい疲れたけど、理解できていく過程が楽しかったよ( ̄▽ ̄;)
とりあえずいい感じに使えそうなことが分かったから良かったです。
ユニティちゃんトゥーンシェーダーも動くみたいだし。
ボーンを仕込む必要もなく微調整も効くみたいなので、使いこなせればかなり使えそう。
もう少しいじってみて、他の部位も動かしてみたり、他のコンポーネントを追加して動かしてみたりしようと思います。
情報が少ないからこちらの先輩には本当に助けられました。

ありがとうございますm(__)m
これからやる人はこの先輩のページを先に見たほうがいいと思います(笑)。
追記:翌日また動かそうとしたら、動かなくなった(-_-;)
上で正常動作したUTS2のマテリアルをいじって微調整してたら動かなくなったから、原因はそれだと思う。
マテリアルを変えたら(別でUTS2で作っといたやつ)、またちゃんと動くようになったけど。
ちょっと原因がよくわからないんだけど、正常に動いたマテリアルはあんまりいじらないほうがいいかも?やるなら複製しておくとかしておけば安心かも。
解決した!複製して作った Toon_DoubleShadeWithFeatherVert.shader が適用できていなかったことが原因みたい
これの原因究明だけでほぼ半日くらい潰して、VertExmotionの作者さんに英文メール送って相談しようかと本気で悩んだんだけど(-_-;)
シェーダー選択画面ではToon_DoubleShadeWithFeatherVertが出ない?みたいだから、プロジェクトフォルダにあるToon_DoubleShadeWithFeatherVertを、直接Shader設定に放り込めばいいみたい。(赤丸で囲ってあるやつ)
直接Shaderの横のメニューをクリックして設定しようとしても、VertExmotionに対応させる前のデフォルトのToon_DoubleShadeWithFeatherしか出ないみたい↓。もしかしたらどこかにあるのか、なんかメニュー表示用の設定コードをいじらないといけないのかはわからないけど。
二つあるから二つとも選んでみたけど動かなかったから、これではないみたい。
今回設定したのは、Toon_DoubleShadeWithFeatherを複製してVertExmotionに対応させたToon_DoubleShadeWithFeatherVertのほうだから、そっちを適切に設定できていなかったことが原因みたい。
追記:センサー設定でペアレントするボーンが間違っていると動かないみたいなので注意!
ペアレントしたボーンにセンサーやコライダーが読み込まれて追従する感じ?みたい。
間違えて別のキャラのボーンを指定しちゃうと動かなかった。
キャラを複製してる場合は同名のボーンが出てきて紛らわしいので注意。
更に追記:ダイナミックボーンと併用はできたけど、動きが二つ分プラスされるから意図しない動作をする可能性があるかも
ダイナミックボーンで胸を揺らして、更につついて細かく胸を揉めるようにして…ってやってみたら一応併用はできたんだけど、キャラ本体を揺らした時に両方が発動するから、胸がかなり変形しちゃったね( ̄▽ ̄;)
VertExmotionのウェイト塗りの範囲が広すぎてダイナミックボーンで揺らすボーンのウェイトと被った場合、干渉しちゃうのか思ったように動作しなかった。乳首だけちょっと、とかならいけた。
一応動作はしてるのかもしれないけど、ウェイトが被ってると打ち消しあっちゃうからちょっと厳しいかも( ̄▽ ̄;)
これは胸の同じ部位に併用させた場合だから、同じbodyメッシュでも胸にダイナミックボーン、お腹にVertExmotionなら競合せず動作した。
うーん、胸とお尻はダイナミックボーンで大きく揺らしたほうがいいかな?
あと、VertExmotionのウェイトペイントモードに入ってから戻ると、マテリアル設定がおかしくなる(;^_^Aこれは最終的に動かす前に設定すればいいかな
顔だけUTS2で、睫毛とか眉毛とかのシェーダーはMTOONなんだけどそのせい?顔のUTS2シェーダーのマテリアルは変にならないんだよね。
でも眉毛とかのシェーダーをUTS2に変えてみたけど、ペイントモードにして戻ったら強制的にMTOONに戻されたし、このあたりの挙動はちょっとよくわからない。
まぁこんなにマテリアルが分かれてるのは顔だけだから、bodyとかは多分大丈夫そう。
顔なら動かすところなんてほっぺと口くらいだろうし。
ーーーーーーーーーーーーーーーーーーーー
追記:
細かい調整方法などを書きました。

ーーーーーーーーーーーーーーーーーーーー