Let’s play Kawaii dress-up with Daz Studio, and explain how to make a Kawaii image.

Daz Studio Unityにエクスポートしたアニメーションを再生する

今回はUnityにエクスポートしたDaz Studioで作ったアニメーションを、Unity上に持っていったDaz Studioのフィギュアで動かしてみるということをしてみます。
よって今回の説明は、Unityの操作説明となります。私の記事、「DazのアニメーションをUnityにエクスポート」の続きとなります。

Unity上の作業ポイント

  • アニメーションと一緒にUnityにエクスポートしたフィギュアをUnityのシーン上に配置します。この時、目と睫毛のマテリアルがうまく配置されないので、修正を加えます。
  • フィギュアをUnity上で使えるように設定します。Unityでフィギュアに設定を加えるときは、コンポーネントを追加するという形をとります。
  • フィギュアにアニメーションを設定します。まずアニメータを作成しフィギュアに適用し、アニメータの中にアニメーションを加えます。

シーンにエクスポートしたフィギュアを配置する

アセットの中にある、Dazからエクスポートしたフォルダを開きます。
ここではYuna_walk1というフォルダです。その中にあるYunaWalkというアイコン(FBXファイル)をヒエラルキーにドラックアンドドロップします。

※ヒエラルキー…シーン上に配置した3Dオブジェクトをすべて表示したエリア。

シーン上にYunaフィギュアが表示されます。

シーン…3Dオブジェクトを調整するためのエリアです。3D表示では、XYZの座標で表示されますので、オブジェクトの配置など調整をするのに便利です。新たなシーンを作成すると、照明とカメラが1個ずつ配置されています。
Game…再生した時にカメラで捉えた画像を表示するエリアです。

Gameで見ると後ろを向いているので、フィギュアのインスペクターのRotationのYに180と打ち込んで、フィギュアの向きを変えます。

インスペクター…3Dオブジェクトのプロパティです。

こちらを向きました。

それではシーンウインドウで読み込んだフィギュアを微調整します。まずフィギュアの細かい部分が見えるようにしたいので、シーン上でフィギュアが大きく見えるようにします。
これは、カメラでフィギュアを大きく捉えるということとは違います。
あくまで作業上、フィギュアを大きく映すだけです。

右上にある方位磁針のような座標を表す部分で、右がX、上がYになるようにします。(フィギュアが正面)
左上の手のマークを選択し、シーン上でマウスのホイールを回して、フィギュアを近づけます。

フィギュアを近づけたところで、目のマテリアルがおかしなことになっていることに気が付きます。
黒目がありません。その上、睫毛がなく、目の周りが黒く縁どられたようになっています。
こわいので、すぐになんとかします。

マテリアル…3Dオブジェクトの表面に配置された質感を表す画像ファイル

ヒエラルキーでフィギュアの階層を開き、フィギュア本体の名前で.shapeという拡張子が付いたところを選びます。
インスペクターにフィギュアの様々な部分のマテリアルが表示されます。
その中の
EyeMoisture
Cornea
この二か所のマテリアルを変更します。マテリアル名の名前の横の三角形をクリックすれば、マテリアル一覧が表示されます。

図のように、見た目からも黒目が表示されるとわかるマテリアルに変更します(たいがい、隣にあります。クリックすればOK)。
Cornea(角膜)も同じように変更してください。

目はまともになりました。

次にヒエラルキーでEyelashes.shape(睫毛のシェイプ)を選択し、表示されたインスペクターでEyelashesのマテリアルを変更します。

図のように選んでクリックします。

これで完璧にマテリアルが変更されました。

地面、カメラの配置

さてUnityは、3Dオブジェクトに重力(Rigidbody)や衝突(CoLider)などの設定をしますので、地面がないと重力をもったフィギュアは再生したとたんに下に落下します。
そこで地面になる3Dオブジェクトを配置します。

図のようにGameObjectメニューから、3D Object/Planeを選択します。

Planeのインスペクター(プロパティ)で、PositionをXYZ0にして、ScaleX100倍、Zを100倍にして広い地面を作成します。

Zが左横になるように画面を設定し、マウスホイールを回して画面を引き、カメラが見えるところまでもっていきます。
図のようにカメラを近づけます。青い矢印をドラッグするか、インスペクターのZの数値を0に近づけると、フィギュアが人物に寄ります。
この時、カメラプレビューが表示されますので、このビューを参考にしてよい位置までカメラを持っていきます。

図のように、調整します。

アニメーター・コントローラを作る

図のように、Assetsメニューから、Create/Animator Controllerを選択し、アセットの中にアニメーターコントローラを作成します。

Assetsメニュー…Unityではありとあらゆる部品をアセットと呼ばれるウインドウに収納、表示します。実態は単なるフォルダですが、Unityはこれをいちいち読み込みますので、新たにフォルダを作成してその中に部品を入れれば、その都度読み込みが始まります。

Animator Controller…Unityでは、さまざまなアニメーションを Animator Controllerで制御します。

ここではYuna_Walk1フォルダの中に作成しました。Act1という名前を付けました。

Dazからエクスポートしたアニメーションを、アニメータの中にドラッグします。
アニメータが表示されていない倍は、Windowメニューから開いてください。ここではGameウインドウの横に置いています。

アニメータコントローラの中に、Dazから持ってきたアニメーションを置きました。
EmptyからAnimationに矢印が引かれました。これは、Gameが再生されたとたんに、このアニメーションが再生されるということを表しています。

Unityでゲームを作る場合、ユーザの操作に応じてアニメーションが再生されなければなりません。
たとえばスペースキーを押したら歩き出すというようなことです。
そこで実際には、この矢印にパラメーターを設定し、プログラムでパラメーターを呼び出してアニメーションを再生するということをしています。上記の場合で言えば、矢印にwalkというパラメーターを設定し、プログラムにスペースキーが押されたら、Walkアニメーションをオンにし、スペースキーが離されたら Walkアニメーションをオフにするというような命令を書きます。

パラメーターもプログラムも加えなければ、Emptyから矢印のあるアニメーションは1回再生されて終わりになります。今回はDazのアニメーションをUnity上で動かすことをテーマにしているので、それでよいとします。

フィギュアに重力や当たり判定を付け加える

Unity上でフィギュアを動かすためには、フィギュアに重力や当たり判定を設定します。
この設定があるために、Unity上でフィギュアが現実世界のように生き生きと動くわけです。

まず、フィギュアにUnity上で動くためのリグを加えます。
ヒエラルキーでフィギュアを選択し、インスペクターのSelectボタンを押します。

開いたインスペクターでRigを選択。
Animation TypeでHumanoidを設定します。
そのままApplyしてください。

Add ComponentをクリックしてPhysicsをクリック。

Rigidbody(重力)コンポーネントを選びます。

次に同じPhysicsからCapsulu Colider(当たり判定)を選択します。

フィギュアに2つのコンポーネントが追加されました。

Capsule Coliderの値を図のように変更してください。
フィギュアは重力を持ち、地面の3Dオブジェクトと当たり判定をして、そこに留まります。
アニメーションをする際の微妙な設定となります。

先ほど作成した、アニメーターをコンポーネントに加えます。
Noneになっているので、右側の三角形をクリックして表示された中にある先ほど作成したコントローラを追加してください。

AC1を追加

これでゲームを開始すれば、いよいよDazから持ってきたアニメーションが動きますが、フィギュアのインスペクターのアニメーションタグを開いて、図のようにチェックをつけないと、フィギュアが宙に浮いていきます。
それは怖いので、最初にチェックを入れてください。

管理人のコメント

UnityでDazから持ってきたアニメーションを、Dazから持ってきたフィギュアで動かすために、こんなにも複雑な設定をしなければならないことがわかりました。

ではなぜわざわざUnityでアニメーションを動かす必要があるのでしょうか。
Dazのアニメーション機能でアニメを作成すればよいのではと思ってしまいます。
その理由は、レンダリングなしできれいなアニメーションを書き出せることです。
Dazで6秒のアニメーションを作成するのに、一晩かかったりします。DazのiLayの機能は強力ですが、書き出しにとても時間がかかります。

Unityの場合、HDRPというレンダリング技術を使って、ほぼリアルタイムにアニメーションを作成することができます。もちろんDazのILayよりは画質は落ちますが、それでも設定によってかなりきれいなアニメーションを書き出すことが可能です。この設定は次回紹介します。

また、Unityはゲーム作成ソフトなので、広大な舞台の中にフィギュアを配置します。
ですから、背景を含めた現実味のあるアニメーション作成がリアルタイムに可能になるわけです。
実際、Unityでアニメーションを作成している方は全世界にいます。ライオンキングもUnityで作られてたんですね。それを私たちが利用できるなんて、夢みたいな話ですね。

アニメーションの確認

ではGameウインドウから再生した画像が下記となります。
次回からはこのアニメーションに空の設定や照明の設定をして、HDRPならではの美しいレンダリングにしていきましょう。
また、カメラワークや録画の方法なども解説していきます。