Realistic Eye Movementsを設定する

Realistic Eye Movements

https://assetstore.unity.com/packages/tools/animation/realistic-eye-movements-29168

3Dキャラクターの目の動きを設定するアセット

 

以前ジッター設定して目の動きの重要性を改めて思い知らされた。

このアセットは目の動きだけじゃなくて、プレイヤーが近づいたときに恥ずかしがって少し目をそらす、みたいな動きも再現できる。

今後3Dモデル設定するときは必ずつけるように誓った。

 

前提

VRoidで設定。(UniVRM準備)
アイドルアニメーション設定済み。

 

設定方法

参考:https://www.youtube.com/watch?v=LtQld_TvhWc

公式ドキュメント:https://docs.google.com/document/d/1b91EBehAyq_7GpTTxRHp1M5UbHfDQQ9CBektQgedXUg/edit?usp=sharing

 

3Dモデルのルートに下記スクリプトをアタッチ

EyeAndHeadAnimator.cs

LookTargetController.cs

 

まずはEyeAndHeadAnimatorで目の可動範囲などを設定

Setupから

EyeControl:MecanimEyeBones
EyelidControl:BlendShapes

(Eyelidはまぶた)

Select:Eyesボタンを押すと目に該当するオブジェクトを選択してくれる

 

Eyes open, head and eyes straight:目があいてる状態を設定。基本的には初期状態のままSaveボタンを押せば良い。

Eye closed,looking straight:目が閉じてる状態を設定。

FaceオブジェクトのSkinnedMeshRendererで目が閉じた状態にしてSaveボタンを押す。

Eyes open, head and eyes straightのLoadボタンを押すと目を開いた初期状態に戻せる。

Looking up:上を見た状態を設定。

目のオブジェクトのRotationを変更しSaveボタン。

あとは同じようにLookingdown、LookingLeft、LookingRightも設定してSaveボタンを押していく。

※LookingLeftは3Dからキャラみて左。

 

最低限のセットアップはこれで完了。

再生すると良い感じに動く。

基本はどこでもないところを見て、たまにプレイヤー(カメラ)と視線が合うような制御になってる。

Draw Sightlines In Editorをチェックすると、視線が正確にどこに向いているかを確認できる。

 

この設定を使いまわせるようにExportボタンでアセットを保存しておくと、次からはImportボタンで読み込めるので便利。また3Dモデルをランタイムで読み込む場合にも適用できるようになる。

それ以外の項目は基本的に初期値でいい感じに動いてくれるし、自動でHeadTransfromなど取ってきてくれるので触る必要がなかった。

Eyelidsにあるまばたきの間隔だけ調整する

まばたき

ドキュメントを見ると一般的に女性の方が男性より瞬きが多いらしい
(男性:1分間に約12回、女性:1分間に約19回)

ということは女の子モデルでは以下の設定になる

Min Next Blink Time: 2.5秒
Max Next Blink Time : 4.0秒

これで平均すると 約3.16秒ごとに瞬きが発生し、1分間に約19回 瞬くようになる

 


FinalIKと併用

目と連動して頭も動くのでそれだけでも十分なのだが、上半身は動かないので合わせて動かしたい場合FinalIKを併用して動かすことができる。

FinalIKと併用する際の設定

AnimationRigingでも出来そうな気もする

①キャラクターに FinalIK の LookAtIK コンポーネントを追加する。
HeadWeightは1に設定。EyesWeightは初期値1だけどRealisticEyeMovements側で制御してくれる。
SpineはUpperChestを指定しておくといい感じになる。Spineを指定すると上半身が反ってしまう。

②Project Settings で「REM_USE_FINAL_IK」シンボルを定義する

シンボルが定義されてないと項目が出てこない

Project Settings を開く
Player タブ内の Other Settings にある Scripting Define Symbols に REM_USE_FINAL_IK という文字を追加し、Applay。

③EyeAndHeadAnimatorのHead Control を「Final IK」に設定する

HeadWeightは1に設定

上半身も動いてくれる


 

LookTargetControllの設定

これが付いていることでキャラクターはぼんやりとランダムな方向(ほぼ正面に近い方向)を見回し、プレイヤーが視界に入っている場合は時々プレイヤーの方を見る。

赤文字の箇所だけ設定すれば良さそう。

 

各項目の説明

PointsOfInterest:対象(プレイヤー)を見ていないときに注目するポイント設定。
ここに登録されたものからランダムに1つのオブジェクトを一定時間見つめた後、別のオブジェクトへ視線が移る。

LookAtPlayerRatio:対象(プレイヤー)を見る割合。

0.3なら30%の確率で対象を見る、残り70%はランダムな方向を見る。

StareBackFactor:プレイヤーの視線にどれだけ敏感に反応するか。

設定しても反応速度は変わらず。バグ?

Notice Player Distance:対象が指定の距離に入ったタイミングで気づいて視線を向けるかどうか。

例えば2を設定すると2m範囲に入ったタイミングで視線を向けてくれる。
範囲外でも対象を見るし、範囲に入った後も視線を外したりはする。

 

PersonalSpaceDistance:視線をそらす距離。
指定した範囲に入ると視線を合わせてくれなくなる。

ドキュメントでは「恥ずかしがる動作で利用」ってあって、OnLookAwayFromShynessのイベントにも関連してるんだけど、目の動きも無くなって、ずっとそっぽ向いて動かなくなるので設定しない方が良さそう。むしろ「怒りからくる無視」の場合にしか使え無さそう。

MinLookTime:最小視線時間
MaxLookTime:最長視線時間

Third Person Player Eye Center:注視対象。

defaultでメインカメラを注視対象(プレイヤー)として扱っているため、プレイヤー以外の注視させたいオブジェクトを指定する。

Keep Target Even When Lost:対象が視界から外れても見続けようとするか。

有効にすると、キャラクターは注視対象が視界から外れた(例えば、キャラクターの背後に回った)後も、可能な限り 頭や目を動かして見続けようとする。

Avoid Looking Through Player:注視対象より奥にあるターゲットを避ける。

プレイヤーの背後にあるオブジェクトを見ている場合、プレイヤーから見ると視線が合っているかのように見えることがある。この設定を有効にすることで、そうした不自然な視線を防ぐことができるらしい。

 

 

 

 

関連記事




コメントを残す

※コメントは承認後に表示されます。
 コメントを公開されたくない場合、名前の後に「:非公開」とつけてください。