ラベル Unity-SDユニティちゃん の投稿を表示しています。 すべての投稿を表示
ラベル Unity-SDユニティちゃん の投稿を表示しています。 すべての投稿を表示

2015年6月9日火曜日

SDユニティちゃん活用その7 ~公式配布表情アニメと互換性を持たせてBlenderでエクスポート~

Blender経由でFBXエクスポート&UnityでFBXインポートしたSDユニティちゃんで、表情アニメを公式配布スクリプトで動作させるメモ。




環境

Windows7x64
Unity 5.0.1f1 Personal
Blender2.74(x64)
SDユニティちゃん 3Dモデルデータ Download ver1.0。(2015/5時点最新)

※作業中素材には『ユニティちゃんライセンス』で提供されるコンテンツを利用しています。





概要

顔の表情はシェイプアニメで作られています。
公式配布SDユニティちゃんのFBXファイルをBlenderでインポート&エクスポートすると、

シェイプアニメの、
  • 定義名
  • 並び順 
が変わってしまいます。

これが原因で公式配布のスクリプト(FaceUpdateや、まばたき)アニメーションからの表情制御が動作しなくなっています。


Blender上でこの辺を調整してエクスポートすれば、公式配布のスクリプト、アニメーション下でも表情が動きます。




Blenderで作業

Blender上で作業します。

Blenderを起動、公式配布のSDユニティちゃんのFBXファイルをインポートしておきます。
(参考: SDユニティちゃん活用その1 ~Blenderでインポート~

Humanoidモデルをインポートして使っていますが、シェイプアニメはGenericモデルでも同じだと思います。

  1. Outlinerウィンドウ上から、
  2. インポートしたモデルの階層を展開し、
  3. _faceオブジェクトを選択する。
  4. Propertiesウィンドウから、
  5. Object Dataをクリック
  6. Shape Keysパネルにシェイプキーの定義名一覧が表示。

図中のShape Keys一覧のように定義名、並び順を変更します。



Shake Keysの定義名の上でダブルクリックで名前を変更できます。
定義名を選択し、右にある上下ボタンで並び順を変更できます。



モデルをFBXエクスポートします。
(参考: SDユニティちゃん活用その3 ~Blenderでエクスポート~




Unityで作業


□インポート

Unity上で先程FBXエクスポートしたモデルをインポートします。
(参考: SDユニティちゃん活用その4 ~Blender出力のFBXファイルをUnityでインポート~)



□スクリプト設定

表情の動作確認に公式配布のFaceUpdateスクリプトを利用します。

インポートしたモデルにFaceUpdateスクリプトを追加、Inspectorからスクリプト内の変数を以下のように設定します。



Animatorにアニメーションコントローラ SD_unitychan_motion_humanoid を設定します。

AutoBlinkforSDスクリプトを追加します。(まばたき用)


これでUnityをPlayしてGUIボタンで表情の動作確認ができます。


※この辺の一連のスクリプト設定を自動化するスクリプト(C#)を書いたので後述します。何度か繰り返す場合は少し楽ができるかもしれません。




スクリプトで設定の自動化

以下のことを自動化するコードを書きました。

自動追加後の各スクリプトの持つ変数は、配布モデルの既定値に自動で初期化します。

  • Animatorにアニメーションコントローラ SD_unitychan_motion_humanoid を設定。
  • IdleChangerスクリプトを追加。
  • FaceUpdateスクリプトを追加。
    ※Animations配列のElementも設定します。
  • AutoBlinkforSDスクリプトを追加。
  • RandomWindスクリプトを追加。



□ダウンロード

C#ソースはGitHubに置いてあります。次のURLでサイトを開き、

https://github.com/maruton/Tools_for_SDUnityChan


右下付近の「Download.ZIP」でダウンロード&展開。

Setup_Animations_for_SDUnityChan.cs をUnityのAssetにドラッグ&ドロップして追加しておきます。



□利用方法

便宜上文中でモデルの呼称を以下のようにしています。

SD_unitychan_humanoid : 公式配布のPrefabsフォルダにあるモデル。
blender_SDUnityChan :  Blender経由でUnityにインポートしたモデル。


  1. SD_unitychan_humanoid がシーンにあることを確認
    もしなければシーンに配置します。

  2. blender_SDUnityChan をシーン上に配置。

  3. 空のGameObjectをシーンに配置。
    CTRL+SHIDT+N で空のGameObjectを追加できます。
    Setup_Animations_for_SDUnityChan を追加し、Inspector上の
    • Go_Original にシーン上の  SD_unitychan_humanoid をドラッグ&ドロップ。
    • Go_Target  にシーン上の blender_SDUnityChan をドラッグ&ドロップ。
  4. Unity を Play。
    START ~ COMPLETE とログウィンドウに表示されれば設定完了しています。
    ※もし ERROR や not found などが見える場合は、Go_Original、Go_Targetの設定やモデルに問題がある可能性があります。

  5. シーン上の blender_SDUnityChan をAssetにドラッグ&ドロップ。
    この状態で(UnityがPlay状態のまま)、シーン上の blender_SDUnityChan をAsset(フォルダ Assets/Blender_SDUnityChan/Prefab あたりに)にドラッグ&ドロップ。
    各種設定済み状態でAssetに保存されます。
    このモデル名を便宜上 blender_SDUnityChan 1 としておきます。
    ※名前はなんでも構いません。文中で区別する為です。

  6. Unity のPlayを停止。

  7. blender_SDUnityChan 1 をシーンに配置。
    Inspector上から以下のコンポーネントにチェックを入れてEnableに。
    • Animator。
    • AutoBlinkforSD
    • RandomWind


  8.  シーン上blender_SDUnityChan 1blender_SDUnityChan_FaceOKにリネーム。

  9. シーン上の blender_SDUnityChan_FaceOK をAsset(フォルダ Assets/Blender_SDUnityChan/Prefab あたりに)にドラッグ&ドロップ。

    以後このモデルを使えば、設定済み状態で使えます。

blender_SDUnityChan_FaceOKをシーンに配置してPlayします。
(他にSD_unitychan_humanoid 等のモデルはシーンに置かないで下さい)
GUIからいろいろボタン操作すると表情も動きます。


公式配布のアニメーション動作にも表情が連動します。

補足: ユレモノ設定(SDユニティちゃん活用その6 ~SDユニティちゃんにユレモノを自動設定する~)をしていない場合は、RandomWindスクリプトは外して下さい。Consoleウィンドウにエラー表示がでます。


2015年6月4日木曜日

SDユニティちゃん活用その6 ~SDユニティちゃんにユレモノを自動設定する~

BlenderでFBXエクスポート&UnityでFBXインポートしたSDユニティちゃんにユレモノ(服/髪揺れ)を設定するメモ。

今回はこれをスクリプトを用いて自動で設定します。






環境

Windows7x64
Unity 5.0.1f1 Personal
Blender2.74(x64)
SDユニティちゃん 3Dモデルデータ Download ver1.0。(2015/5時点最新)

※作業中素材には『ユニティちゃんライセンス』で提供されるコンテンツを利用しています。




前提

前記事まででBlenderでエクスポート&UnityでインポートしたSDユニティちゃんのモデルを使います。
Unityのプロジェクト状態も同様です。

参考:
SDユニティちゃん活用その1 ~Blenderでインポート~  
SDユニティちゃん活用その3 ~Blenderでエクスポート~
SDユニティちゃん活用その4 ~Blender出力のFBXファイルをUnityでインポート~




便宜上インポート後のAssetの位置は次のようにしています。

/Assets/Blender_SDUnityChan/blender_SDUnityChan



※作業上、配布原本のモデルと分けて識別する為、文中でこれを「Blender版SDユニティちゃん」と表記している場合があります。




ユレモノについて

公式配布のSDユニティちゃんは髪や服が揺れます。

しかしBlnederでFBXエクスポート&UnityでFBXインポートしたモデルは、そのままでは全く揺れません。


公式配布のPrefabsフォルダにあるSDユニティちゃんにはユレモノ関連の設定がされています。

自分でFBXファイルをインポートしたモデルはそれらが未設定です。
自分で追加設定すれば揺らすことができます。


しかし設定部位が結構多い為、インポートする度に手動で全て行うのは正直、



疲れます( ゚Д゚;)



と、いうことで自動でユレモノ設定するコード(C#)を書きました。




準備

前回までのブログで作成済みのUnityプロジェクトを開いている状態とします。

プロジェクトの状態を簡単に言うと、
  • 公式配布SDユニティちゃんのシーン SD_unitychan_humanoid を読込済み。
  • 前記事のBlenderで出力済みのSDユニティちゃんのFBXファイルをUnityでインポート済み。
と、いった感じです。


次のURLでサイトを開き(GitHub)、

https://github.com/maruton/Tools_for_SDUnityChan


右下付近の「Download.ZIP」でダウンロード&展開。

Setup_Yuremono_for_SDUnityChan.cs をUnityのAssetにドラッグ&ドロップして追加しておきます。




ユレモノ設定

便宜上各モデルの呼称を以下としています。

  • SD_unitychan_humanoid : 公式配布のPrefabsフォルダにあるモデル。
  • blender_SDUnityChan :  Blender経由でUnityにインポートしたモデル。
    (当ブログ記事で今までにインポートしたもの)




設定を行っていきます。
  1. SD_unitychan_humanoid がシーンにあることを確認
    もしなければシーンに配置します。
    Position <0,0,0>、Rotation <0,0,0>を確認。
    ※ずれていたら設定する。

  2. blender_SDUnityChan をシーン上に配置する。
    Position <0,0,0>、Rotation <0,0,0>を確認。
    ※ずれていたら設定する。

  3. blender_SDUnityChan のスクリプト IdleChanger をDisable
    もしも IdleChanger が未追加なら何もせず次のステップへ。
    既に IdleChanger が追加済みの場合は Inspector上からチェックを外す。


  4. シーン上blender_SDUnityChan のアニメーションコントローラ確認
    Inspector上Animator のController欄に SD_unitychan_motion_humanoid の設定を確認。
    なければ設定する。SD_unitychan_humanoidの設定と同じ)。
    Inspector上Animatorのチェックを外してDisableにする。

  5. 空のGameObjectをシーンに配置する。
    CTRL+SHIDT+N で空のGameObjectを追加。
    ダウンロード&展開済みの Setup_Yuremono_for_SDUnityChan をドラッグ&ドロップする。
    Setup_Yuremono_for_SDUnityChan の、
    • Go_Original へシーン上の  SD_unitychan_humanoid をドラッグ&ドロップする。
    • Go_Target  へシーン上の blender_SDUnityChan をドラッグ&ドロップする。

  6. Unity を Playする
    Consoleウィンドウに、 START: と表示された後、 COMPLETE:  と表示されたら設定が完了しています。
    ※ERROR とか not found などが表示されていた場合はシーン上のアバターの構造に問題があるか、 Setup_Yuremono_for_SDUnityChan の Go_Original と Go_Target の設定を再確認してください。

    だいたい一瞬で表示されます。 これでユレモノ自動設定が完了しています。

  7. シーン上の blender_SDUnityChan をAssetにドラッグ&ドロップ
    この状態で(UnityがPlay状態のまま)、シーン上の blender_SDUnityChan をAsset(フォルダ Assets/Blender_SDUnityChan/Prefab あたりに)にドラッグ&ドロップします。

    ユレモノ設定済み状態のままでAssetに保存されます。
    blender_SDUnityChan 1  とリネームします

  8. Unity のPlayを停止します。

  9. blender_SDUnityChan 1 をシーンに配置
    Inspector上から以下のコンポーネントにチェックを入れてEnableにします。

    • Animator
    • SpringManager  (スクリプト)
    • IdleChanger (スクリプト)

    IdleChanger
    が未追加の場合は追加します。

    シーン上の blender_SDUnityChan 1blender_SDUnityChan_yuremono にリネームします。


    • シーン上の blender_SDUnityChan_yuremono をAsset(フォルダ Assets/Blender_SDUnityChan/Prefab あたりに)にドラッグ&ドロップします。

      以後このモデルを使えば、ユレモノ設定済み状態で使えます。

    あとはシーン上の他のSDユニティちゃんのモデルを削除した上で、先程Assetに保存した、blender_SDUnityChan_yuremono をシーンに配置してUnity を Play。

    GUIボタンで NEXT、BACKを押すと、髪や服もゆれます♪ O(≧▽≦)O ワーイ♪


    Consoleに
    'blender_SDUnityChan_yuremono' AnimationEvent 'OnCallChangeFace' has no receiver! Are you missing a component?
    と表示されているのは、FaceUpdateスクリプトをコンポーネントに追加していない為です。追加すれば消えます。
    しかし現在追加しても表情は動きません。いずれこれも対策したいと思います。




    一応Android上でも動くことは確認していますが意味がなさそうなので、ユレモノ設定済みのモデルをAssetに拾ってから使う方が良いと思います。




    補足1


    スクリプトの動作は簡単に言うと SD_unitychan_humanoidblender_SDUnityChan を2つ並べて、クローン化してるようなものです。
    (実際は少し面倒なこともしてます)


    □ モデルの差異


    • SD_unitychan_humanoid : 公式配布のPrefabsフォルダにあるモデル。
    • blender_SDUnityChan :  Blender経由でUnityにインポートしたモデル。
      (当ブログ記事で今までにインポートしたもの)

    この2つのモデルにはObject構成にいろいろと差異があります。同一ではありません。



    一言でいえば「Blenderを経由している」ことに起因していると思いますが、大別すると2点。
    1. SD_unitychan_humanoidにはユレモノ対応する為のCollider用 Object等がある。blender_SDUnityChanには無い。

    2. BlenderでFBXファイル インポートした際、ローカル軸向きが強制的に補正されてボーンの先端が強制的にY+になる様子。Blenderの仕様の為、回避不能みたいです。
      これにより blender_SDUnityChanSD_unitychan_humanoid とは異なるローカル軸向きになってしまう子Objectがあります。

      さらにいわゆるXYZ軸向きの右手/左手云々な話しも絡んでます。
      (OpenGL系 vs DirectX系)

    この辺に対応しつつクローン化してる、という感じです。



    □ スクリプト

    公式配布パッケージに含まれている SpringManagerSpringBoneSpringCollider の3つがユレモノ用スクリプトです。

    ユレモノ用スクリプトは blender_SDUnityChanで不足しているObjectも参照しているので、まずは全てのObjectを存在させないとユレモノ用スクリプトを追加できません。

    なのでまずは双方の子Objectを全比較して不足分を抽出し blender_SDUnityChan に追加しています。
    追加した子ObjectのPositionを決定する為に、雛形のSD_unitychan_humanoid を同座標に置いて、ごにょごにょしています。


    ユレモノ接続の向き(ローカル軸)を、ユレモノ用スクリプトに設定するパラメータ(BoneAxis)があるのですが、前述通り双方のモデルでローカル軸の向きに違いがある為、雛形のSD_unitychan_humanoid からそのままコピーでは使えません。


    当初変換方法を考えて演算で導くつもりでしたが、面倒になったので blender_SDUnityChan 専用にデータテーブル化して片付けています

    ココが、

    SDユニティちゃん活用その1 ~Blenderでインポート~
    SDユニティちゃん活用その3 ~Blenderでエクスポート~

    の手順に合致してインポート/エクスポートしていないとズレる可能性がある要因です。


    子Objectの構造が整った後にユレモノ用スクリプトの追加していくわけですが、相互に参照し合う箇所がある為、単純に追加していくと途中でユレモノ用スクリプトが動作しなくなって詰みます。

    原本のユレモノ用スクリプトのコードには手を付けたくなかった為、追加する順番やスクリプトのRunningのDisable/Enableできりぬけています。


    普通サイズなユニティちゃんの時は汎用性を考えすぎた余りにボーン構造や揺れパラメータを全Object分テキストファイル出力、解析処理、設定時に読み込むなどで冗長になりすぎてました。
    しかも原本のユレモノ用スクリプトも改造していたのでボツ化。
    今回はシンプルに1スクリプトで実装。その分 blender_SDUnityChan 専用気味になっている結果です。





    補足2

    Blenderのインポートスケール、 エクスポートスケール、Unityでのインポート後のスケールを相互に調整しても全ての子Objectが公式配布のモデルと同じスケールにうまくできませんでした。
    (やり方がまだまずい可能性はありそうですが)
    公式配布元のFBXファイルは(多分)Mayaでエクスポートされている気配(?)で100倍云々の倍率もかかってるような点も絡みます。


    最も近い状態は、
    1. Blenderで100倍でインポート
    2. Blenderで1倍でエクスポート
    3.  Unityでインポート後、Scaleを0.01
    で、全子Objectのスケールは合うのですが、Faceがおかしくなります。
    またBlender上で100倍は扱いづらいので、これを0.01倍してもおかしくなります。

    この辺はまだまだ勉強不足感が否めません。 原因がわかればもう少しスマートに対応できるかもしれません。


    結果的に諸々の作業性も考えて各フェイズでのスケール値を決めた結果、しわよせがUnityインポート後の子Objectのスケールに寄っています。

    • body などのメッシュオブジェクトのスケール値が0.01になっている。
    • Character1_Reference オブジェクトのスケールが0.01になっている。
      この影響で配下の子Objectは全て0.01スケール。
    本来の公式配布モデルでは全て1.0スケールです。


    これの意味するところは、Unity上では Local Positionでの移動量にこのスケール値が関与しているということです。
    公式配布のものと100倍変わるということです。

    ここはちょっと気にいらないところですが、 Setup_Yuremono_for_SDUnityChan.cs ではこの倍率の影響を受けずに処理にしています。


    Unityのメカニムは賢くできていて、アニメーションはきちんと動作しています。
    角度にはスケールの影響がない様子なのと、子Objectのローカル軸向きの差異もHumanoidタイプ化で吸収してくれるようです、スバラシイ!メカニム。


    直接移動制御をしなければ影響はないだろう・・・という判断です。
    (仮に制御するとしても倍率を把握していればなんとかなる・・・と思います)



    実用性は

    作っておいて言うのもなんですが、あまりない気はしています(笑

    ちょっとやりたいことのワークフロー上、これができるとターンアラウンドが早い(ハズ)ので作ってみた感じです。



    2015年6月3日水曜日

    SDユニティちゃん活用その5 ~Unityでマテリアル設定~

    Blenderでエクスポート&UnityでインポートしたSDユニティちゃんのマテリアル設定するメモ。



    環境

    Windows7x64
    Unity 5.0.1f1 Personal
    Blender2.74(x64)
    SDユニティちゃん 3Dモデルデータ Download ver1.0。(2015/5時点最新)

    ※作業中素材には『ユニティちゃんライセンス』で提供されるコンテンツを利用しています。




    前提


    前記事まででBlenderでエクスポート&UnityでインポートしたSDユニティちゃんを使って作業していきます。




    前回までのUnityのAssetsへのインポート位置:フォルダ Assets/Blender_SDUnityChan
    Blenderからインポート済みモデル名: blender_SDUnityChan
    こんな感じです。


    作業上オリジナルモデルと分けて識別する為、Blenderからインポートしたモデルを文中「Blender版SDユニティちゃん」と表記している場合があります。




    Material/Texture準備

    オリジナルのマテリアルは極力いじらずに取っておきたいので、Blender版SDユニティちゃん用モデルのあるフォルダに別途コピーします。


    作業概要はインポート時に自動作成された フォルダMaterials を削除して、オリジナルのフォルダMaterialsとTexturesをBlender版SDユニティちゃんのあるフォルダ配下にコピー。

    コピー後もマテリアル内のテクスチャ参照はオリジナルのまま保持されているので、これをコピーしたテクスチャを参照するように変更します。


    ■現在のMaterialsフォルダを削除

    1. インポート時に自動作成されたフォルダMaterials を削除。
      ※削除すると一時的に割り当てのマテリアルがなくなるのでピンク色になります。



    ■MaterialとTextureフォルダをコピー

    1. コピー元オリジナルのフォルダMaterials、Textureをエクスプローラで開く
      • Unity上で Assets > UnityChan > SD_unitychan > Model の上で右クリックメニューで Show Explorer を選択。


      • エクスプローラ上でフォルダ Materials、Textures を確認。


    2. コピー先フォルダをエクスプローラで開く
      • Unity上で フォルダ Blender_SDUnityChan の上で右クリックメニューで Show Explorer を選択。


      • エクスプローラ上で フォルダ Blender_SDUnityChan を確認。


    3.  エクスプローラでオリジナルのフォルダMaterials と フォルダTextureを、フォルダごと フォルダ Blender_SDUnityChan へコピーする。

    4. Unity画面に戻り、コンバート処理が終わるまで待つ。
      Asset上で フォルダ Blender_SDUnityChan配下にフォルダMaterials、Texturesができていることを確認。



    ■マテリアルのテクスチャ参照先変更

    新しくコピーした Assets/BlenderUnityChan/Materials 配下には5つのマテリアルがあります。
    (マテリアル名: def_mathair_matmouth_matnol_matskin_mat


    この5つのマテリアルのテクスチャ参照先を変更します。

    例えばコピーしたマテリアル(Blender_SDUnityChan/Materials/def_mat)をクリックしてInspector上のdiffuseのテクスチャをクリックしてみると、


    オリジナルのテクスチャ(Assets/UnityChan/SD_unitychan/Models/Texture/utc_all2)を参照しています。

    これをコピーしたテクスチャ(Assets/Blender_SDUnityChan/Texture/utc_all2)を参照するように変更します。

    1. マテリアル選択
      def_mat  を選択して Inspectorに表示。


    2. テクスチャ設定
      Projectウィンドウ内で Assets/BlenderUnityChan/Textures  をクリックして選択。
      Inspectorに表示されているdef_matのテクスチャ設定欄に対応するテクスチャをドラッグ&ドロップする。
    同じ要領で残りの4つのマテリアル hair_matmouth_matnol_matskin_mat も設定していきます。
    ※テクスチャをドラッグ&ドロップする際、左クリックして選択してしまうとInspectorの表示がテクスチャのものに替わってしまいます。左クリックして離さずにドラッグ&ドロップしないとうまくいきません。


    作業ができたら、Asset/Blender_SDUnityChan/Materials/ 配下の5つのマテリアル、

    • def_mat
    • hair_mat
    • mouth_mat
    • nol_mat
    • skin_mat

    これをBlender版SDユニティちゃんに設定していきます。




    マテリアル設定

    シーンに配置したBlender版SDユニティちゃん(blender_SDUnityChan)にマテリアルを設定していきます。



    ■設定する6つのメッシュ

    シーン上の blender_SDUnityChan の階層下にある6つのメッシュ、

      _body_eye_Fhair_Fhair2_head_face

    に、各マテリアルを設定していきます。

    各メッシュに設定するマテリアルは以下の通り。
    • _body
      def_mat
      skin_mat


    • _eye
      mouth_mat

    • _Fhair
      hair_mat
      nol_mat


    • _Fhair2
      hair_mat
      nol_mat


    • _head
      hair_mat
      def_mat
      nol_mat


    • _face
      skin_mat
      mouth_mat




    ■マテリアルを設定

    まず _body を設定してみます。
    1. シーン上の blender_SDUnityChan_bodyをクリックして選択。
      Inspectorにコンポーネントの設定が表示されます。

    2. Projectウィンドウ内のフォルダ Assets/Blender_SDUnityChan/Materialsを選択。
      ※前項までで用意したマテリアルがこの中にあります。

    3. マテリアルをInspectorへドラッグ&ドロップして設定。
      def_mat を Skinned Mesh Renderer内MaterialsリストのElements0へ。
      skin_mat を Element1へ。
      ※Elements0から順に埋めていく感じで。


    この要領で他の5つのメッシュもマテリアル設定を行います。
    (前項の各メッシュへのマテリアル対応をみながら行うとやりやすい)



    _face だけは奥まったところにあります。
    blender_SDUnityChan > Character1_Reference > Character_Hips > Character_Spine > Character_Spine1 > Character_Spine2 > Character_Neck > Character_head > _face

    シーンウィンドウ上部の検索欄で _face と入力して表示させた方が早いかもしれません。


    全て設定できるとオリジナルSDユニティちゃんと同じような質感でシーン上で見えます。



    マテリアル設定し終わったシーン上の blender_SDUnityChan はドラッグ&ドロップでAssetsに保存しておきます。

    ここでは Assets/Blender_SDUnityChan/Prefab フォルダを作って、そこにドラッグ&ドロップで保存しています。(保存後はシーン上のblender_SDUnityChanは消しても大丈夫です)


    以後はこの Assets/Blender_SDUnityChan/Prefab/blender_SDUnityChan を使えばマテリアルは設定済みになっているという感じです。


    2015年6月2日火曜日

    SDユニティちゃん活用その4 ~Blender出力のFBXファイルをUnityでインポート~

    BlenderでエクスポートしたSDユニティちゃんのアバターモデルをUnityでインポートするメモ。



    環境

    Windows7x64
    Unity 5.0.1f1 Personal
    Blender2.74(x64)
    SDユニティちゃん 3Dモデルデータ Download ver1.0。(2015/5時点最新)

    ※作業中素材には『ユニティちゃんライセンス』で提供されるコンテンツを利用しています。




    前提

    前記事までの作業経過は、
    • 公式配布されている「SDユニティちゃん 3Dモデルデータ」からSDユニティちゃんのアバターモデルをBlenderでインポート。

    • Blender上でもテクスチャ/ノーマルマップが見えるように、マテリアル経由のテクスチャを設定。

    • BlenderでSDユニティちゃんのアバターモデルをFBXフォーマットでエクスポート(ボーン込み)。

    と、いうことでBlenderで出力済みのSDユニティちゃんアバターモデルをUnityでインポートします。

    ついでにHumanoidタイプとして、公式配布のアニメーションコントローラで簡単に動かしてみます。






    Unityでプロジェクト作成

    Unityを起動、プロジェクトを新規作成。
    公式配布の「SDユニティちゃん 3Dモデルデータ」をインポートしておきます。

    ※後で配布物に含まれているアニメーションを流用する為。
    ※既にインポート済みのプロジェクトが残っていればそれでもOK。




    Unityでインポート

    Unity上で作業します。

    • Assets 配下にインポートするフォルダを作成
      図中ではフォルダ名 Blender_SDUnityChan で作成。
      フォルダ Blender_SDUnityChan をクリックして選択状態にする。

       
    • Blenderでエクスポート済みのSDユニティちゃんのFBXファイルをフォルダ内にドラッグ&ドロップする。


    • インポート後
      自動的に Materialsフォルダが作成されてテクスチャが格納。
      テクスチャは貼られている状態。
      ※ノーマルマップは貼られていない。別途マテリアル調整する必要有。今はとりあえずこのまま。


    • 今回FBXファイルにアニメーションは同梱していないので Import Animation のチェックは外しておく(特にやる必要もないかもしれませんが一応)
      モデル選択 > Inspector > Animation > Import Animation チェック外し > Apply


    • リグのタイプをHumanoidに設定
      モデル選択 > Inspector > Rig > Humanoid > Apply
      ※公式配布のHumanoidタイプのアニメーション/コントローラが利用できるようになるので重要


    インポート&Humanoidタイプ設定完了。

    補足: Unity4系はModelのScale Factorのデフォルト値が 0.01でしたが、Unity5系ではデフォルト値 1 になっています。今回はデフォルト 1 のままいじっていません。
    4系でデフォルト値が 0.01となっていた理由は、MayaのFBXエクスポーターが100倍していた事に起因するらしい?。





    インポートしたSDユニティちゃんを動かす


    Blenderでエクスポート&UnityでインポートしたSDユニティちゃんをアニメーションさせてみます。


    アニメーションコントローラは「SDユニティちゃん 3Dモデルデータ」で配布されているHumanoidタイプSDユニティちゃんのものを使ってみます。


    具体的には、公式配布のプレハブ SD_unitychan_humanoid のコンポーネント Animator に使われている、アニメーションコントローラ SD_unitychan_motion_humanoid を使います。

    これをインポートした blender_SDUnityChan(BlenderでFBX出力したモデル)をシーンに配置して適用します。


    シーンも配布されているものを使ってみます。
    • シーンの読込
      シーン SD_unitychan_Humanoid をダブルクリックして読み込む。


    • インポートしたSDユニティちゃんをシーンに配置
      FBXファイルでインポートした blender_SDUnityChan をシーンに配置。



    • アニメーションコントローラ を確認
      シーンの SD_unitychan_humanoid をクリックして選択。
      Inspector > Animator の Controller の欄をクリック。
      Projectウィンドウにアニメーションコントローラ SD_unitychan_motion_humanoid が選択表示されます。


    • blender_SDUnityChan にアニメーションコントローラを設定
      アニメーションコントローラ SD_unitychan_motion_humanoidblender_SDUnityChan のAnimatorのControllerにドラッグ&ドロップ。


    • スクリプト IdleChangerblender_SDUnityChan に追加
      下図ではドラッグ&ドロップで追加しています。


    • SD_unitychan_humanoid のスクリプト IdleChanger をDisable
      ※操作ボタンが重なる為。


    UnityをPlayします。

    GUIの Next、Back ボタンを押すと blender_SDUnityChan がアニメーション動作します。

    これでメカニム経由で公式配布のアニメーションも blender_SDUnityChan で使えます。
    ※メカニムを自分で組み替えれば自由に制御可。


    コンソールに赤字でエラーらしきものがでていますが、これは FaceUpdate スクリプトを blender_SDUnityChan に追加していない為です。

    FaceUpdate スクリプトをドラッグ&ドロップで追加すれば一応エラーは消えますが、顔の表情は現段階では動きません。(これらもいずれ対策します)

    ここまででインポート、Humnanoidのアニメーション動作まではできました。
    今回はここまで。


    2015年6月1日月曜日

    SDユニティちゃん活用その3 ~Blenderでエクスポート~

    SDユニティちゃんのアバターモデルをBlenderでエクスポートするメモ。



    環境

    Windows7x64
    Unity 5.0.1f1 Personal
    Blender2.74(x64)
    SDユニティちゃん 3Dモデルデータ Download ver1.0。(2015/5時点最新)

    ※作業中素材には『ユニティちゃんライセンス』で提供されるコンテンツを利用しています。




    前提

    前記事まで作業後SDユニティちゃんをインポート済みから作業しています。





    Blenderでエクスポート


    SDユニティちゃんを選択状態にして、エクスポート。

    1. 念の為一旦、Objectを全表示、非選択状態にする
      1. 3D VIew上で、ALT+Hキー押し(全Object表示状態)。
      2. 3D View上でAキーを1回~2回押して、何も選択しない状態にする。

    2. SDユニティちゃんを選択
      1. Outliner上で Mesh_SD_unitychan を選択する
        Mesh_SD_unitychan 行の左のアイコンを CTRL+左クリック。
        ※ツリー下層も含めて全選択される。



    3. <0, 0, 0>座標に配置
      1. 3D View で Transformパネルの表示を確認。
        表示されていない時は3D View画面上で nキーを押して表示。
      2.  TransformパネルのLocation座標 X,Y,Zを0にする。

      ※<0, 0, 0>からずれていると、Unityでインポートした際にオフセットがかかる為。

    4. FBXエクスポート画面を開く。
      File > Export > FBX (.fbx)

    5. エクスポート
      左の Export FBXパネル を設定後、右の Export FBX ボタンをクリックでエクスポート。


      補足:
      • Add Leaf Bones にはチェックは入れない。
        入れるとボーン末端に余分にObjectが付与されるので。


    ファイル名の拡張子 .fbx でファイルを出力。

    このファイルを次回Unityでインポートします。