ラベル Unity-Blender の投稿を表示しています。 すべての投稿を表示
ラベル Unity-Blender の投稿を表示しています。 すべての投稿を表示

2016年8月30日火曜日

Polygon Fill ~ SubStance Painter


SubStance Painterの Polygon Fill機能と Quick Mask機能で簡単にメッシュ面を塗る方法。

こんな感じのものを塗ってみます。




メッシュのエッジ線を境目にちょっと塗りたい時に便利です。

■環境

SubStance Painter2.3.0

OS: Windows10pro バージョン1607(Build 14393.82)
CPU: i7-6700K
MEM: 32GB
GPU: GeForce GTX960(4GB)

※Polygon Fill機能、Quick Mask機能はVer1.xでも同じだと思います。


■モデル

Blenderで適当に作った以下のモデルを使って作業していきます。
OBJ形式で出力しておきます。





■新規プロジェクト作成

SubStance Painter2.2を起動。
CTRL+Nで新規プロジェクト作成ダイアログを開く。
Mesh の Selectボタンから先のOBJファイルを選択。
他の欄も以下のように設定し OK で進む。



以下のような感じになります。
ここで最初からある LayersウィンドウのLayer1は削除しておきます。


File>Save as... で適当なファイル名で保存しておきます。



■作業

ベースのマテリアルを設定

  1. Fill Layerを作成(Fill Layer 1)。
  2. 作成したFill Layerを選択。
  3. Materialsウィンドウから、Plastic Glossy Pure を選択。
以下のようにモデル全体が青のマテリアルで塗りつぶされます。



Quick Mask、Polygon Fill で塗る色の準備


前項と同じ要領で Fill layer を追加(Fill Layer 2)、マテリアルに SciFi PVC Plasticを設定。

Fill Layer 2上で右クリック>Add black mask。
マスクに何も描かれていない為この時点でモデルには Fill layer 1が反映されます。


Quick Mask、Polygon Fill で塗る

Fill layer 2のマテリアルで塗っていきます。

  1. Fill layer 2の black mask の四角をクリックして選択状態にします。
  2. 左上のツールアイコンから、Polygon Fill アイコンをクリックして有効にします。
  3. すると3D Viewのモデルにメッシュのエッジ線が見えるようになります。 
  4. さらにProperties - Polygon Fillウィンドウの Polygon Fillアイコンをクリックして有効にします。


  1. 塗る際はProperties - Polygon FillウィンドウColorスライダをめいっぱい右に寄せて1.0にします。(逆に消す時は左に寄せて0.0にして使う)

  2. 右クリック+ALTでだいたい真横からみえる位置に回転、さらにSHIFTも押下すると視点が正確に真横にスナップします。右クリック+ALT+SHIFTで視点角度が90度単位でスナップ)。
  3. 3D view上でTキーを押すと「Using quick mask」と表示されます。

    モデルの中央のみを選択するようにマウスでクリック&ドラッグで四角く囲います。
    囲ったメッシュ面がblack maskに自動的に書き込まれ、Fill layer 2のマテリアルが適用されます。
  4. このとき奥のメッシュも全て囲い対象になってしまう為、4隅のポールも一部選択されてしまいます。
    Properties - Polygon FillウィンドウColorスライダをめいっぱい左に寄せて0.0にします。
    4隅ポールの塗られてしまった部分をマウスドラッグで横長の四角で囲います。




最終的に以下のように目的のメッシュ面のみに Fill layer 2を適用できる black maskが出来上がります。




この要領で、

  • Fill layer + black mask
  • Polygon Fill
  • Quick mask
を使うとSubStance Painter上の作業だけで任意のメッシュ面のみにマテリアルを適用できます。


ちょっと塗りたい&メッシュ面境界で良い場合は便利です。



以下、他も塗った状態。



塗り絵感覚なのが簡単で良いですね。


Unityにインポートするとこんな感じ。














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でインポートします。


    2015年5月29日金曜日

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

    SDユニティちゃんのアバターモデル(Blenderでインポート後)を、マテリアル経由でテクスチャ設定するメモ。





    環境

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

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




    前提

    前記事でBlendrにSDユニティちゃんのモデルデータ(SD_unitychan_humanoid.fbx)をインポートした状態から作業していきます。

    補足:Blenderで新規作成状態で配置されるランプのままだと暗くて見えにくいので、適当にHemiなどに変更してメッシュ面が見やすいようにしておくと良いです。





    メッシュパーツを確認

    マテリアルを設定するメッシュのパーツは全部で6つ。
    各Object名は以下の通り。
    • _Fhair   (前髪 左右分け)
    • _Fhair2  (前髪 中央)
    • _body    (手足体全体)
    • _eye     (目)
    • _face    (顔)
    • _head   (頭部、ツインテール髪、ツノ)
    ※Object名がアンダーバー( _ )で始まるように統一されているのが特徴。



    Blender上で Outliner ウィンドウにて、Mesh_SD_unitychan から下に展開していきます。

    Mesh_SD_unitychan > Character1_Reference




    下の方にスクロールすると先程の6つのメッシュObjectがあります。

    Outliner上で _body を左クリックすると 3D View上でもメッシュが選択状態になります。
    マテリアルも _body のものが選択状態になります。

    以後「を選択状態にする」といった場合は Outliner上から主に操作しています。




    作業方針

    SD Unityちゃんをインポートした状態で既にマテリアル名やテクスチャへの参照も一応インポートはされています。

    しかしBlender上でのテクスチャ類の細かい部分が自動設定されない為、3D View上で灰色になっている状況です。


    作業方針として以下のような感じで進めています。
    • マテリアルの質感設定などはデフォルトのまま使う。
    • テクスチャを見えるように設定する。
    • ノーマルマップが反映するように設定する。
    • スペキュラマップは使わない。
    • 環境マップは使わない。
    • 輪郭部の表現は使わない。(トゥーンシェーダー?というか、アニメ的な輪郭フチ取り)


    最低限のテクスチャとノーマルマップの設定のみを行う感じで作業します。

    ※Unity上で使用時にマテリアルは再設定するので。
    Blender上でSDユニティちゃんの動画を作る場合等ではまじめに設定要だとは思いますが。当面の目的から逸れるのでスペキュラ類は割愛しています。




    あと作業中はマテリアルが見えるように3D Viewを設定しておきます。
    (3D Viewメニューから、Viewport Shading を Material に設定)




    マテリアル設定

    まず_body のマテリアル設定をしてみます。


    _bodyにアサインされているマテリアルはdef_matskin_mat の2つ。
    • def_mat   → 衣服面のマテリアル。
      テクスチャ、ノーマルマップの設定を行う。
    • skin_mat  → スキン面のマテリアル。
      テクスチャの設定を行う。

    作業内容は各マテリアル内のテクスチャ設定欄で Color や Nomal map 指定を行うだけです。





    ■マテリアルの選択方法

    1. 3DView上で Object Modeにします。 
      3D View下部のメニューバー操作ないしはTABキー等。

    2. 3DView上で何も選択していない状態にします。
      Aキーを1~2回押す等で。

    3. Outliner上で _body を左クリックして選択状態にします。
      3DView上でもメッシュが選択状態になります。

    4. PropertiesウィンドウでMaterialを見る。
      2つのマテリアル def_matskin_mat がアサインされているのが見えます。

      ここで def_matskin_mat のマテリアルいずれかを選択する操作ができます。





    ■マテリアル内のテクスチャ設定

    マテリアル def_mat を設定していきます。

    1. マテリアル def_mat 選択する。

    2. テクスチャボタンを左クリック。


    3. テクスチャとノーマルマップのみを有効にする。
      utc_all2.tgautc_normal.tga の2つのみチェックを入れる。
      他の ~.tga のチェックは外す。
      ※FO_CLOTH1.tga は 服の輪郭用(?)。utc_spec.tga は 服のスペキュラ用。ENV2.tga は写りこみ用環境マップ。
      今回これらはBlender上では使わない。



    4. テクスチャの選択。
      utc_all2.tga の文字の上(又は左の小さいアイコン上)を左クリックして選択状態にする。
      ※選択状態になるとすぐ下の Preview に反映されます。


    5. InfluenceパネルDiffuse: Colorにチェックを入れる。
      ※Colorのチェック欄は下にスクロールしていくとあります。
      3DViewにテクスチャの色が反映されます


    6. ノーマルマップの選択
      utc_normal.tga の文字の上(又は左の小さいアイコン上)を左クリックして選択状態にする。
      ※選択状態になるとすぐ下の Previewに反映されます。


    7. Image SamplingパネルNormal Map にチェックを入れる。
      ※中ほどにスクロールしていくとあります。


    8. InfluenceパネルGeometry: Normalにチェックを入れる。
      ※下にスクロールしていくとあります。


    9. 服部分(def_mat)にテクスチャとノーマルマップが反映。




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


    要領はマテリアル def_mat の設定と同じなので詳細割愛です。
    作業の流れは以下の通り。

    1. マテリアル skin_matを選択する。

    2. テクスチャボタンをクリック。
      テクスチャのリストに以下の2つがある。
      • utc_all2.tga   →  同行内右端にチェックを入れる。(スキン部分)
      • FO_SKIN1.tga  → チェックは外す。(スキンの輪郭用なので使わない)

    3.  utc_all2.tga をクリックして選択。
      InfluenceパネルDiffuse: Colorにチェックを入れる。

    4. スキン部分が3DViewに反映されます。




    ■ _eye の設定

    1. マテリアルは mouth_mat のみ。
    2. テクスチャは utc_all2.tga のみにチェック入れ。FO_SKIN1.tga は使わない。
    3. utc_all2.tga を選択し、InfluenceパネルDiffuse: Colorにチェックを入れる。(目に色がのる)


    ■ _face の設定

    マテリアルは skin_matmouth_mat
    この2つのマテリアルは既に設定済みなのでそのまま(何もしない)。


    ■ _head の設定

    マテリアルは hair_matmouth_matnol_mat
    mouth_mat は既に設定済みなのでそのまま。

    1. マテリアル hair_mat を選択。

    2. テクスチャボタンをクリック。
      テクスチャのリストで以下のようにチェック入れ。
      • utc_all2.tga       → チェックを入れる。
      • FO_CLOTH1.tga  → チェックを外す。(輪郭用)
      • utc_spec.tga           → チェックを外す。(スペキュラ用)
      • utc_normal.tga    → チェックを入れる。
      • ENV2.tga               → チェックを外す。(写りこみ環境マップ用)

    3. utc_all2.tga をクリックして選択。
      InfluenceパネルDiffuse: Colorにチェックを入れる。(ツインテ髪に色がのる)

    4. utc_normal.tga をクリックして選択。
      • Image SamplingパネルNormal Mapにチェックを入れる。
      • InfluenceパネルGeometry: Normalにチェックを入れる。

    1. マテリアル nol_mat を選択。

    2. テクスチャボタンをクリック。
      テクスチャのリストで以下のようにチェック入れ。
      • utc_all2.tga       → チェックを入れる。
      • FO_CLOTH1.tga  → チェックを外す。(輪郭用)
      • utc_spec.tga        → チェックを外す。(スペキュラ用)
      • utc_normal.tga    → チェックを入れる。
      • ENV2.tga             → チェックを外す。(写りこみ環境マップ用)

    3. utc_all2.tga をクリックして選択。
      InfluenceパネルDiffuse: Colorにチェックを入れる。(ツインテ髪の一部に色がのる)

    4. utc_normal.tga をクリックして選択。
      • Image SamplingパネルNormal Mapにチェックを入れる。
      • InfluenceパネルGeometry: Normalにチェックを入れる。

    ■ _Fhair の設定

    マテリアルは hair_matnol_mat
    この2つのマテリアルは既に設定済みなのでそのまま(何もしない)。


    ■ _Fhair2の設定

    マテリアルは hair_matnol_mat
    この2つのマテリアルは既に設定済みなのでそのまま(何もしない)。




    これで一通りマテリアル経由でのテクスチャ設定が終了。
    3DViewのObjecet Modeにて、Viewport Shading: Material になっていれば以下のように見えます。




    これでSDユニティちゃんのアニメーション制作などもやりやすいですね!




    補足1

    ここまでの作業ではマテリアル経由でテクスチャを設定してます。

    3DViewのViewport Shading: を Texture で見たときは灰色のままです。

    UV/Image Editor でテクスチャを読み込めばテクスチャで見えるようになります。
    1. _bodyを選択。

    2.  3DView で Edit Modeにする。

    3. Aキーを押して、メッシュ全選択。

    4. UV/Image Editor上で、
      1. ALT+O押し。
      2. Textureフォルダ内の utc_all2.tga を選択して読み込む。

    5. Object Modeにする。
    これでテクスチャが見えるようになります。
    (ノーマルマップは見れません)

    同じ要領で残りの5つのメッシュにも貼りこめばOKです。


    ノーマルマップは見れないのですが、マテリアルで見るよりも若干軽い感じです。




    補足2

    状況とか使い方によりますが高速化重視と考える場合。

    Blender上でマテリアルを1つのみにしてしまいテクスチャは utc_all2.tga のみにしてノーマルマップも省いてしまうという思い切った軽量化もアリかも。
    これで1つのマテリアルを6つのメッシュで共用のみに。

    Blenderでfbxエクスポート、Unity上へインポート後、シェーダーは Unlit > Texture にしてしまうと、幾分高速化している気がします。