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

2015年5月28日木曜日

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

BlenderもバージョンアップしたのでSDユニティちゃんのインポート手順を再度整理&メモ。





環境

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

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




準備

SDユニティちゃんのFBXファイルはUnity Packageで配布されているので、

  • 「SDユニティちゃん 3Dモデルデータ」を公式サイトからダウンロード
  • Unityでプロジェクト作成、Packageをインポート
  • 使うFBXファイルを確認 
  • BlenderでFBXファイルをインポート

の、ような手順で進みます。




■3Dモデルデータのダウンロード

公式サイトへ行き3Dモデルデータをダウンロード。

→ 公式サイト: http://unity-chan.com/contents/guideline/


キャラクター利用ガイドラインを読み、同意できればDOWNLOADページへ進む。

「SDユニティちゃん 3Dモデルデータ」をみつけてパッケージファイル(SD_unitychan.unitypackage)をダウンロードする。





■Unityでパッケージをインポート

Unityを起動。空プロジェクトを作成。

メニューバーから、

Assets > Import Package > Custom Package

にてパッケージファイル SD_unitychan.unitypackage を指定。




ダイアログが開くので右下の Importボタン をクリック。

インポートに成功していれば、Assets欄に UnityChan のフォルダができる。





■インポートに使うFBXファイルを確認

Assets欄の UnityChan のフォルダから階層をたどって、
  • Assets/UnityChan /SD_unitychan/Models 
まで展開。

右欄に見える SD_unitychan_humanoid の上で右クリックメニューから、Show in Explorer をクリック。

エクスプローラーが自動起動して開いたフォルダ内の、
  • ファイル SD_unitychan_humanoid.fbx
これをBlenderでインポートして使うので、ここでのエクスプローラーのフォルダ位置を覚えておきます。



また同じフォルダ内の、
  • フォルダ Textures
配下にテクスチャ類が入ってます。

Blenderで SD_unitychan_humanoid.fbx をインポート直後のマテリアルはここのテクスチャを参照しています。

※このUnityプロジェクトは残しておく方が楽です。消す場合は Texturesフォルダのコピーとマテリアルのテクスチャ参照を手動で要設定。
※又は、FBXファイルとTexturesフォルダを予めどこかにコピーしておいた後に、Blenderでインポートする等。





Blenderにインポート

Blenderを起動。
メニューバー File > Import > FBX (.fbx) でインポート画面へ。



ファイル SD_unitychan_humanoid.fbx を指定。
左列のオプションは以下のような感じで。
Automatic Bone Orientationにチェック入れを忘れずに。


インポート後の状態。

この段階で一応インポートはできています。

※Unity上で既存Unityちゃんのアニメーションコントローラで一応動かせます。
※髪などのアニメーションはUnity上で別途ユレモノ設定が必要。

※この段階ではマテリアルの設定が不完全なのでテクスチャ類はまだ見えていません。



一応少し調整をしていきます。




階層の調整

インポート直後は2つのObjectがOutlinerに見えます。
これを入れ子にします。

Outliner上で Character1_ReferenceMesh_SD_unitychan へドラッグ&ドロップします。

操作のポイントは行の左の小さなアイコンをつかんで、ドロップ先もアイコンの上にするとやりやすいです。



ここで一旦Blender作業用のフォルダを決めてSave(blend形式)しておきます。
File > Save as でファイル名指定で保存)

追記: この作業は動作上必須ではないですが、UnityとBlender上で見やすくなるので。




向きの調整

これもUnityでは動作上必須ではないですが、一応作業しておきます。


インポートしたモデル(SD Unityちゃん)をBlender上でよく見てみると、
  • 3DView で Object Modeだと直立している(問題無し)。
  • Pose Modeでは直立(問題無し)。
  • Edit Modeにすると前方に90度倒れる(問題点)。
    メッシュ、アーマチュア(ボーン)共に倒れる
    (問題点)

ということで、Edit Modeで向きが90度倒れる問題を調整してみます。


  1. 3D Viewウィンドウ で Object Modeにする

  2. 真横からモデルを見る
    テンキー3押し。
    遠近(Perspective)で見えている場合はテンキー5押しで垂直視点にする(Ortho)。



  3. Pose Mode で アーマチュアのみ全選択
    3D View上でアーマチュアを右クリック選択、
    (又はOutliner上で SD_unitychan 配下の Pose を CTRLクリック等)。
    その後 Pose Modeにする。
     Aキー押しで アーマチュアを全選択状態にする(1回~数回押しで確認)。



  4. Rest Position を現在位置で再設定する
    3D Viewウィンドウのメニューバーから、Pose > Apply > Apply Pose as Rest Pose
    又は、3D View上で CTAL-A > Apply > Apply Pose as Rest Pose


  5. この段階でアーマチュアは倒れなくなりますが、メッシュが90度前に倒れます


  6. 3DView上でObject Mode でアーマチュアのみを選択。
    選択マーカー(赤青緑のXYZを示す矢印)がモデルの足元付近にあることを確認。


  7. 3Dカーソルを選択マーカー位置へ移動する。
    3D View上で SHIFT+Sキー押し > Cursor to Selected。


  8. Pivot Pointを3D Cursorにする
    3D Viewメニュー > Pivot Point > 3D Cursor


  9. メッシュを90度回転する
    Outliner上で Mesh_SD_unitychan のツリーを展開し、下方にスクロール。
    6つのメッシュがあることを確認します。
    ( _Fhair、_Fhair2、_body、_eye、_head、_face)


    _face以外を 1つずつ90度回転させていきます。

    以下 _body の手順です、他4つも同様手順で90度回転します。
    ※ここまでの作業での3D Cursorの位置、Pivot Pointを3DCursor設定等が済んでいないとうまく回転しません。

    1. Outliner上で _body を左クリックで選択する。
    2. 3DView上で Edit Modeにする。
      TABキー押し、又はメニューバーでの操作で。
    3. メッシュを全選択する。
      Aキー押し。
    4. メッシュを90度回転
      Rキー押し > 9キー押し > 0キー押し ※数字キーはテンキーではない方を使う。


    5. 他、_Fhair、_Fhair2、_head、_eye の4つも同様手順で90度回転を行います。
      ※大きいメッシュからやると良いです。_eye等の小さいメッシュが隠れていて確認しにくいので。

これで Edit Modeでも前に90度倒れなくなります。




追補1

調査が甘いかもしれませんがついでにメモ。
(間違いもあるかもしれません)
  • Blenderのアーマチュアは上(先端)が必ずローカル軸のY+の向きに固定
    Blenderの仕様らしいです(Octahedraでとんがってる方がY+)。
    SDユニティちゃんをインポートした際、アーマチュアのXYZの向きは合っていても、この仕様で先端(とんがり)がY+に向くのでおかしく見えます。
    そこで Automatic Bone Orientation にチェックを入れてインポートするとアーマチュア個々の回転で向きを補正をしてくれるという対策。

    Rest PositionでY+側に倒れこんだ状態になるのもこの辺の差異の影響ではないかと推察

  • SDユニティちゃんの元のボーンは上(先端)がZ+
    多分Z+が先端(な気がします)なのでBlenderの仕様もあいまって向きの補正が必要になるようです。

  • Blender の Rest Position
    Rest Position はアーマチュアを最初に作成しはじめた際の基本的な配置で、アニメーションやその他のアーマチュアに関係するものはこの状態を基点にしているようです。
    作業が進んだ状況でいじると、付随していろんなものがずれてとんでもないコトになるらしいので要注意。
    よってインポート直後の段階で、直立状態を Rest Positon に再設定しておく、というのが前項の作業です。

  • 座標系の違い
    BlenderはOpenGL系(右手系)でDirectX系(左手系)とXYZの軸の取り方が異なるので変換を要する、なるほど面倒;。





追補2

Blenderのバージョンによるインポート状況が少しややこしいことになっています。

SDユニティちゃんの Generic版 と Humanoid版 のFBXファイルをインポートしてみた状況が下図。


ver2.74ではHumanoid版はうまく読見込めてますが、Generic版はメッシュ部分が90度倒れてます。ver2.73aでは逆です。
(Blender2.73より古い版ではうまくインポートできない/特定条件化でのみインポート可能などさらにややこしい)


ver2.73aでGenericをインポートして作業しても一応使えてましたが、記事中では再度最新ver2.74でHumanoid版をインポートして使っています。

2014年12月29日月曜日

SDユニティちゃんをBlenderでImportしてみる

SDユニティちゃんが公開されましたね!きゃわいい!

早速Blenderでインポートを試してみたメモ。



■Blender2.72b以前

2014/12/29時点の公式リリース版Blender 2.72b(及び以前版)ではうまくFBXでImportできません。

顔だけになったりおかしいことに。



■Blender2.73 Test Build1以降

Blender 2.73 Test build1だと一応インポートできました。
ちょっとボーンのマーカーの向きがおかしい気もしますが。FBXのImpoter設定はこんな感じ。



FBX Importerの設定で「Automatic Bone Orientation」をオンにするとボーンらしくインポートできる。





どちらの設定でインポートしてもアニメーションの作成等には支障がなさそうなので、この際深く気にしなくてもいいかもしれない。
足のボーンマーカーの大きさも違ったりしますが気にしなければ多分OK!(アバウトさも肝要♪。




■Blender2.73 RC

追記:2015/1時点で2.73が正式リリースされているのでそちらを使う方が良いでしょう。
2014/12/29時点で2.73RC版がでています。
これでもインポートができることを確認。TestBuild1よりこちらのほうが良いかもしれない。

どちらにしても現行の正式リリース版ではまだインポートできないようです。
(RC版は一応正式リリース前版)。

とりあえずBlender上でアニメーション作成&再生はできることを確認。
Blenderからアニメーション込みでFBXでExport。



Unityでインポート、アニメーションプレビューもできた。










とりあえずBlenderでアニメくらいは作れそうです。


2014年12月20日土曜日

SubStance Painterを買ってみた

STEAM で安かったので SubStance Painter を買ってみた。


日本円で 4949円。


昔STEAMでの支払いはUSDだったはず。
ここ1年位?の間に請求額面が登録国リージョンの通貨になった様子(?)。


以下、素人目線での雑感。

■試した動作環境


Windows7x64
Blender 2.72b x64
Unity 4.6.0f3
PC: CPU i3-2130 3.4GHz(Sandy Bridge) / RAM 16GB / HDD 5TB / SSD 128GB
GPU: Geforce 550Ti



■購入前検討


本家HP: allegorithmicSUBSTANCE PAINTER


最初公式動画等を見た感じでは、ノーマルマップの作成に強そう?みたいな第一印象。

とりあえずトライアル版が無料利用できるので試してみました。

思うに購入前にはトライアル版での動作確認を強く推奨な気がします。

  • グラボの機能を積極的に使ってるらしい
    GPUとの相性がでやすいかもと推察。

  • グラボドライバをアップデートしろと警告がでる
    最新版ないしは、かなり最新寄りのドライバVerを具体的にコンソール画面で指定してきます。
    警告無視でも一応使えましたが。

2014/12/19時点でnVidiaドライバパッケージ344.48以降を導入するように警告がでたのでアップデート。
ちなみに最新は344.75ですがこの版は画面色調があからさまに変わってしまう問題が出たので344.48に戻しました。これはSubStanceだけでなくUnity他でも色変化するのでnVidiaのドライバの問題だと思います。





■SubStance Painter って何ができるの?


最初 SubStande Designer と Painter の違いがよくわからず。

Painterは「塗り」に特化みたいですね。Designerはノードとかいろいろ扱えるような感じ?

インディーズパック(Designer等も同梱)も安いと思いましたがとりあえず Painter のみを購入。


思うに肝は「マテリアル」ぽいですねこれ。

さまざまな質感のマテリアルがプリセットされており、それを利用することで高品位な「塗り」ができる。
(2Dだと Filter Forge をたまに使ってますが、さらに強力な3D版的な印象)



■使ってみた


一応トライアル版でも出力ができないだけで機能は一通り使えます。
しかしやはり実際出力して使ってみないと・・・ですね。


私的環境においてとりあえず試行してみた感じを以下に。
(一応3D系のこの手のツールは不慣れな為、最初結構とまどった)


□ Blenderでモデリング

練習用に2つのObjectで構成。
1つのObjectは複数マテリアル割り当て
(モデルは自作の適当なものなので見栄えが悪いですが気にしない方向で)





□ Blenderでモデルをエクスポート

OBJ形式が良いようです。
SubStance Painter はFBXを読めませんでした。
海外フォーラムなどでもFBXでは読めない、OBJが無難と言った書込も散見されます。


□ SubStance Painter で Objファイルを読む

File > New。開いたダイアログの右上のSelectでObjファイル指定。
(なぜかこの開き方が最初わかりにくかった)。



□ SubStance Painter で塗り塗り

「なんとなく」わかる感じのGUI。ちょっとBlenderにも似てる。
マテリアル選択、ブラシ選択、ブラシ強度等々。


塗る際の面境界はBlender上で割り当てたマテリアル面単位(TextureSets)となっており、それを選択する画面が左にあります。


□ SubStance Painter で エクスポート

CTRL+SHIFT+Eでエクスポートのダイアログを開く。
出力フォーマットなどを指定してテクスチャをエクスポート


テクスチャ/ノーマルマップは各TextureSets単位(Blenderのマテリアル単位)で出力される。なのでこのままではUnity上で貼りにくい(マテリアルが多数あるので)。

ここで1枚に合成したテクスチャ/ノーマルマップの出力方法がわからなかった(できない?)。出力できればそのままUnityに持っていけると思ったが・・・。
やむなくBlender上で再度ベイクすることに。

※追記1: Unity4/5で使うなら素直に各エクスポートのプリセットを使う方が楽です。
※追記2: 色選択マスクを使うと、Blenderでモデリング>SubStance Painterでマテリアル付け>Unity持ち込みとワークフローがすっきりする感じ。 参考: 色選択マスク ~ SubStance Painter




□ Blenderのマテリアルでテクスチャを設定

テクスチャ、ノーマルマップを設定。
スペキュラは今回未設定。
各マテリアルにSubStance Painter出力のテクスチャ/ノーマルマップを設定。




□ Blenderでテクスチャ、ノーマルマップをベイク&保存

テクスチャ、ノーマルマップを各々1枚にベイク&保存。
ノーマルマップのベイクをするとSubStance Painterとは少し異なる結果になる(再演算してる?。
単純に1枚に合成できればいいのでテクスチャ扱いで合成すれば多分同じ結果でノーマルマップもベイクできそうな気がする。



□ Unityでテクスチャ、ノーマルマップをインポート

全く同じとまではいかないがUnity上でそれなりな感じで見える。
(シェーダー次第でまた見え方も変わりそう?)







作業フロー的には SubStance Painter はテクスチャ/ノーマルマップ/スペキュラ作成に特化した部分と考えれば良さそう。
今までここはフォトショップやBlender上でプロシージャル・テクスチャやノードでやっていた部分なのでうまく併用すれば面白そう。


ただ、複数マテリアルをテクスチャ1枚で出力はできないのかな?という点は気になる(要勉強?
ひょっとするとソコは SubStance Designer 使ってクダサイなのか・・・。


とりあえず Blender と併用でも充分使えそうなことは確認できた感じ。

4949円なら良い買い物だった気はします。


そしてSubStance Designerも気になる・・・(笑

2014年8月12日火曜日

UnityChanをBlenderでインポート/エクスポート試行

UnityちゃんをBlenderでインポート/エクスポートしてみたメモ。

試行錯誤中なので、間違い/思い違いを含む可能性有りです。




環境

  • Windows7x64
  • Blender2.70a
  • UnityChan Ver1.2

問題点


Blender標準のFBXインポーターだと全くインポートできない。

有志提供によるプラグイン Bos FBX Importer/Exporter を使うと一応できた。



※追記:Blender2.72aでは標準搭載のImporterで読み込めます。逆にBosが動作しなくなくなりました。BlenderのFBXプラグインが大幅に機能対応したようです。


現状 Bos FBX Importer/Exporter を利用するのが良さそう。

追記:.blendファイルでUnityへの直接読込は試していません。
    情報としては2.67では問題があるとのこと。  
  
 

できたこと/できなかったこと等々

Bos FBX Importer/Exporter を利用して試行。

  • UnityChanのモデルをBlenderでインポートできた
     
  • ボーンはインポートできる
    Armatureの設定がされた状態になる。
    → Good!。
     
  • 一部のパーツはボーンから外れる
    頭部連動の目、眉など。(UnityChanの設計上そうなってる感じ?プラグイン云々とは別の話しかもしれない?)。
     
  • Weight Paint はインポートされないもインポートされる。
    そもそもUnityでHumanoid型で設定するのでWeightデータが存在していない?
    Vertex Group紐付けで存在。ただWeight0の無関係部位も全てずらっと存在している感じ。

  • マテリアルは存在はするが中身はない
    マテリアル、テクスチャ貼り付けは全て手動で行う必要有り。

Bos FBX Importer/Exporterの入手&インストール



サイトblenderfbx よりダウンロード。
※Win32/64専用なので注意

動作の為に UmConvも必要なのでダウンロード。
同梱Readme_jaにBlenderへのインストール方法明記有り。

Bos FBX Importer/Exporter はBlenderのプラグイン形式。
UmConvは手動でBlenderのインストールフォルダにコピーする必要があるので注意。

 

その他メモ

  •  メッシュとボーンの紐付けはVertex Group
    Blenderではよくあるパターンなのでわかりやすい
    • Blender上ではVertex GroupでWeightエリア名とメッシュを関連付け
      メッシュ修正後は適当に該当するVertex GroupにAssignすれば良い。
      ※Assign漏れがあると、Unity上でそこだけ尖ったりおかしくなる。
       そういう場合はまずVertex GroupでAssign漏れを疑ってみる。

       
    • Unity上のHumanoid~ConfigでWeightエリア名とボーンを関連付け
      既存UnityChanモデルから読み込み&コピーで関連付け完了できる。
      → 楽ちん。

      既存UnityChanモデルから読み込みではうまくいかない。
      Create From This Model で生成でうまくいった。
       
  • 頭部連動の目、眉などがボーンの階層構造に無い
    Blenderでエクスポート、Unityにインポート後、目、眉などはボーンとの親子関係位置の手動調整要。※EYE_DEFとかEL_DEFとか。
    (一度インポート&位置調整&プレハブ化、以後FBX更新毎での調整作業を回避)
    手足アニメにのみなら関係なし。
    表情のShapeアニメは同梱Animator、スクリプトのままでは動かせず。

     
  • 手動で階層構造調整
    Unityへインポート後、Character1_Reference や root_mesh の階層構造が無い。
    手動で GameObject追加、リネーム。既存Unityちゃんと同じ階層構造になるように手動調整。
    → 既存UnityChanと互換を保ちつつ、BlenderでExportが現状困難そうな予感。
     
  • Blender上でアニメーションを作る用途だと自前で適当にWeight付けが必要。
    手足など基本部位のみで良ければ元Weight利用で。
    Rigfy有効化、AutoWeightで概ねなんとかなるかも?→Autoのみではきつい。面倒。
    簡単なアニメーション作成くらいなら、UnityChanに似た体型の手持ちのアバターを使った方が早いという考えも。
     
  • マテリアル名
    BlenderからBos FBXでエクスポート、Unityでインポートした際、マテリアル名はBlenderで扱っているテクスチャのファイル名になる。
    ※Blender上のマテリアル名でも、テクスチャイメージ名でもなく、実ファイル名
    UnityChanのマテリアル名と一致しなくなる為、いろいろと面倒なことになる。

    テクスチャのファイル名を書き換えると一見回避できるが、複数マテリアルで1テクスチャを使用しているのでやっぱり破綻する。

    どのみち初回はテクスチャを手動設定しなけばならないので、そこでやるしかない様子。(微妙に苦行)

テストで少しメッシュを修正、Unityにインポート、UnityChan同梱のデモスクリプトで動かしてみた。
  • 各種ポーズ → OK
  • 目パチ → OK
  • 髪 → 現状ポーズに連動せず、動かない → 現状の課題
  • 目の視線移動 → 未確認。もともと無いようだ。
原本では二の腕、脇下等々が服下にあり、低コスト化でメッシュが存在しない。
とりあえず適当にメッシュ処理したので激しい動きでは破綻する部分が。

まじめに動かすにはもっと丁寧にメッシュ修正作業をする必要がありそう。




追記:
UnityChan を BlenderでImport、メッシュ加工&Exportでいろいろ試行。
(Mayaを使えばいろいろ幸せな気が・・・する; 学生なら無料版が使えますね今は)

  • 手足アニメーション(ポーズ)
    Armatureによるアニメーション(髪は含まず=Humanoid型の範囲外?)。
    Blender上で Import(Bos FBX)、メッシュ加工、Export(Bos FBX)で普通に作業可。
    メッシュ~ArmatureアサインはVertex Group。
    髪、顔アニメが必要なければ配布物(スクリプト、アニメ等)との互換動作の確保も容易。
     
  • 顔のモーフ
    Shape制御(口、眉、まぶた)。
    BlenderでImport/Export(Bos FBX)は一応できてる。できてるがオリジナルとは若干異なるデータ階層(?)になってしまうのか、配布物のAnimator、スクリプトそのままでは制御不能(メカニム経由)。
    Shapeデータ自体はUnity上に一応Importされてる。自前でスクリプトを書いて制御すれば一通り顔アニメは制御可能(Legacy的な制御?)。
    → メカニム経由での制御がまだうまくいってない(要追試)。
     
  • 髪のアニメーション
    既存アニメーションでの髪アニメはとりあえず断念。
    配布物のアニメーションを利用しようと試みたが、
    • Humanoid型でCreate From This Model で生成すると、
      手足の基本アニメは動く。髪は動かない。
    • 既存UnityChanのModelのAvatar読込&プレハブ上でデータ階層再配置
      髪は一応動く。手足はめちゃくちゃに崩れる。
    BlenderでExportすると髪ボーンの階層がズレる(?)のか、そもそも既存アニメと互換がなくなるような感じ。Unity上でHumanoid型で生成すると基本部分だけは互換が取れてるような感じ?
    (多分・・・Mayaなら問題なくできるんじゃないかと妄想)。
     
  • 髪の揺れモノ駆動
    Vet1.2からダイナミックUnityChanが同梱。
    「揺れモノ」制御のスクリプト類が付属。
    添付Documentを見る感じ、これは使えそうな気がする(未テスト)。テスト済。現状この方式が最適解な気がします。
    シドニア的な何かを感じます(謎)。これは良い。
    ダイナミックUnityChanでは髪のボーンアニメは使ってないような気がする&かなり見栄えが良い。髪は揺れモノ駆動でいいかもしれない(ただし負荷は上がる)。
    Androidで実際ゲーム等に使える負荷レベルなのかはなんともいえない所。がんばればなんとかそれなりに動く。
    (負荷増分を他で削ればなんとかなるか?という妄想)

2014年7月1日火曜日

BlenderでExport~Unity Import時のメモ


Unity用にモデルをBlenderで作成して、Export、Importする際のメモ


縮尺とか向きとかすぐ忘れるのでまとめて書いておく。
(作業上絶対こうしなくてはいけないわけではないです。自分用メモです)

Blender側

モデリング

Blenderの長さ単位1mは、Unityの1mと想定してモデリングする。





  1. ScaleはXYZ全て1.0でロックしておく
    UnityではScale値がいろいろ関与してくるので1.0にロックしておくといろいろ幸せ。
    親子関係で複数Objectでモデルを構成しつつ、Unity内で子をスクリプト制御する際、Unityでは移動/拡大単位がScale値を乗じたものになる。スクリプトから制御時にやっかいなので1.0に固定するクセをつける。
    しかしあらゆるBlenderの編集機能から完全にロックしきれるわけではない。
    たまに油断すると変わっていたりするので注意(Object ModeでApplyするModifier等)。
    普通にEdit Modeにて頂点編集で拡大、縮小していればまず問題ない。
     
  2. 向きの確認はLocalで
    Objectの前後左右向きとXYZ軸向きの確認はLocalで見る。
     
  3. Blender上でのObjectの向き
    +Zを前
    +Xを左
    +Yを上
    としておく。
    FBX Export時の指定と関係してくるので、作業上こう決めておく。

Export形式

  • Collada
    BlenderのExpoterではアニメーションを複数同梱できなかった。
    Collada仕様上はできるらしい。
    他の3Dツールでも対応は少ないようなので、マイナーと思われる。
    単純なモデリングなら特に支障なく使える。
     
  • FBX
    複数アニメーションも同梱可能(確認済)
    Export対象も指定できたり、使いやすいと思われる。
    以降、UnityへのExportはFBX前提。

FBXでExport




  • Selected Object
    予め選択済みのObjectのみをExportする際チェック入れ。
    だいたいこれをよく使う。
     
  • Scale
    1.0にする。
    このScale値はUnity上のScale値の値になる。
     
  • Forward
    -Z Forward にする。
    ※前項で決めたBlender上でのObjectの向きと関連。
     
  • Up
    Y Up
    ※前項で決めたBlender上でのObjectの向きと関連。
     
  • Empty / Camera / Lamp / Armature / Mesh
    Meshにチェック入れ。
    アニメーションも同梱するような場合は、Armatureにもチェック入れ。
    他はチェック無し。(Camera、LampなどはExportすることは無いので)
     
  • Apply Modifier
    チェックを入れておく。
    各ModifierをApplyせずとも、結果をExportできるので便利。
    Modifier未使用でチェック入れても特に問題にはならない。

Unity側

Import



  •  Scale Factor
    0.5 とする。
    これでBlender上とUnity上でObjectサイズが整合。
 



  • Objectの向き
    Local軸で見る。
    FBX Export時に Forward/Upの指定しているので整合。
     
  •  Scale
    FBX Exportで 1.0 としたので1となる。







2014年6月18日水曜日

アニメーション付メッシュをBlenderでExport, UnityでImport

アニメーションを付与したメッシュをBlenderでExport、UnityでImportする際のメモ。

目的

非人型形状のメッシュモデルをアニメーション駆動する。
(多間接な有機物や無機物等)




使用環境

Windows7x64
Unity 4.3.4.f1
Blender2.70a




Unityでインポートできる形式

ユーザーズマニュアルによると、
  • Maya(.mb、.ma)
  • Cinema 4D(.c4d)
  • Autodesk(.fbx)
などとある。
.bvh形式はUnityにドラッグ&ドロップにて読み込みはできたが、実際利用可能なのかは未確認。




メッシュモデルとアニメーションの作成

Blenderで作成。
Blender上でのモデルとアニメーションの作成方法については割愛。

サンプル用に簡単なドアのモデルを作成。
アニメーションはOpenとCloseの2つを作成。




メッシュとアニメーションのエクスポート

人型の場合はアニメーションを使いまわす可能性があるのでメッシュモデルから分離しておく方が有利なこともある。

非人型の有機物/無機物等の、あまりアニメーションの可搬性がない(そのメッシュ専用のアニメーション)モデルを今回は想定するので分離しないほうが都合が良さそうと考える。

今回はメッシュと複数アニメーションを同梱できる.fbx形式でExportした。
※ちなみにCollada形式では1つのアニメーションしか付与できなかった。
  1. Objectを選択状態にする。
  2. File > Export >  Autodesk FBX (.fbx)
  3. 各欄を設定してExport(Door.fbx とした)
    1. Selected Objects:
      選択したObjectのみをExport対象とする。
    2. Scale: 1.00
      サイズの整合はUnityのインポーター側で行うことにする。
    3. Forward: -Z Forward
      BlenderとUnityでのZ軸方向の違いを補正。
    4. Up: Y Up
      BlenderとUnityでのY軸方向の違いを補正。
    5. Armature/Mesh:
      メッシュとArmatureをExport対象に含める。(ArmatureはObjectとAnimationの関連付けに必要)
    6. Include Animation:
      アニメーションをExportに含める。




.blendファイルをUnityのAssetに置かない私的理由

今回のサンプルでは行っていないが、実際の作業ではノーマルマップを生成する都合上、ハイポリゴンモデルとローポリゴンモデルが1つの.blendファイルに含んでいる場合がある。
(作業上Bakeが楽な為)

この.blend ファイルをUnityのAssetに配置すると、ローポリモデルだけでなくハイポリモデルもUnityは読み込んでしまう。
これがうっとおしいので.fbxでエクスポート/インポートを試してみた。




Unityでfbxファイルをインポート

BlenderでExportした Door.fbx をUnityのAssetsにドラッグ&ドロップする。

アニメーション確認

アニメーション(Open/Close)もきちんとインポートされており、Inspector上で個々のアニメーション動作の確認ができる。



モデルサイズの整合性

しかしこのままではモデルの大きさが整合せず、非常に小さいサイズになってしまう。

Inspector内の Model > Scale Factor の値がデフォルトでは 0.01 となっている。
これを 0.5に修正して、Applyをクリックする。
これでBlender上での1.0単位とUnity上での1.0単位が整合する。
※BlenderからExportする際のScale値にも関係する。上記はそのScale値を 1.00 としている場合。
※追記:Blender側のObject自体のScale値も1.0に固定したほうが何かと良い。参考記事→「
Blenderでモデリング時のTransform Scale


アニメーションの設定

Inspector内の Rig > Animation Type をLegacyに変更してApply。
※Blenderで作成したアニメーションはLegacyに設定しないとダメらしい?。インポート時UnityのConsoleにてLegacyに設定しろとログが流れる。

これによりHierarchyにドラッグ&ドロップした際に自動的に Animationコンポーネントが追加された状態になる。
なお且つAnimationコンポーネントのAnimations欄に全アニメーションがElementsに自動登録されている。


※ちなみにテクスチャは別途Unityにドラッグ&ドロップして、手動で貼り付ける。
先にテクスチャを/Resource/Assets/Texture配下にインポートしてからfbxファイルをインポートすると自動的に貼ってくれたりする。
この辺は自動認識で貼らせる規則性等がUnityにはある様子なので利用すると少し楽ができる。




シーンにドアを配置

シーンにDoorを配置する。

この状態で Play実行すると Play Automatically に設定されているアニメーションが(スクリプトが無くても)自動起動する。







スクリプトからアニメーションを駆動

準備

スクリプトからのみアニメーションを制御するようにしてみる。
先のPlay実行時のアニメーション自動実行を止める為、Animation欄の Play Automaticallyのチェックをはずす。

スクリプト(C#)


関数 animation.Play() を使う。引数にアニメーション名を渡すだけ。


using UnityEngine;
using System.Collections;

public class DoorTest : MonoBehaviour {

    void Start () {
        animation.Play("Open");
    }
}

サンプル






上記サンプルプロジェクト保管庫(GitHub)
https://github.com/maruton/Sample_AramtureDoor

サイト右列下方の「Download ZIP」からダウンロード可能。
※Unity5化済み。




感想など

.fbx形式便利です。 (一応世間ではデファクトスタンダード?)

なんとなく過去のしがらみ(?)の都合上ColladaでExportすることが多かったのですが、複数アニメーションに関してはColladaではうまくいかず。
やはり.fbx形式を使うべきなのか。

ハイポリ/ローポリを.blendファイルに共存させる必要がなければ、.blendファイルをAssetsに放り込んでしまえばもっと楽かもしれない。

人型アバターのアニメーションが例としては多いが、無機物などでも結構使い道はあるかも?

※過去に別プラットフォームにて多段間接をクォータニング計算でスクリプト駆動したことがありますが、計算が面倒&誤差がでると目もあてられないので、アニメーションで実装は楽で良いと思います。

2014年1月14日火曜日

BlenderでUnity用にモデリングする際のTransform Scale

Unityで使うモデルをBlenderで作成する際に少々気を付けることがある。

Blender上でのTransform欄のScaleをX,Y,Z全て1.0に保つと幸せになれる(謎
1.0にしないととんでもなく面倒になる。

どういうことかというと以下に例を。


Blender上で TransformのScaleを

  X=1, Y=1, Z=0.5

で作成したとする。

UnityのAssetsにモデルをドラッグ&ドロップするとこれはZが2倍の大きさになってインポートされる。
つまりUnityインポート後のScaleは

  X=1, Y=1, Z=1

になる。
この際ご丁寧にきちんと1.0に正規化してくれるので、Blender上でのScaleが1ではない場合は拡大/縮小されてしまう。

その為にUnity上で手動でScaleを0.5に修正すればBlender上のサイズと同じにはできる。


できるがこれが罠!


これはUnity公式サイトのリファレンスでも、ScaleはXYZ全て1.0とすることを推奨している。




【Scaleを1にしないと何が起きるか?】

Unity上でオブジェクトに親子リンク関係を作ったときにいろいろ面倒になる。
Unityでは簡単にオブジェクトのヒエラルキーの階層で親子設定ができる。
この時、子のScale,Position等全てが親のScaleを基にした比率で掛けられる。

ということは例えば、非リンク時の親がScale Z=0.2、子がScale Z=0.5 だとリンク後の子のScale Zは、

  0.5 / 0/2 = 2.5

となる(あってるかな?

そして、Scaleだけならまだしも、距離=Positionも各軸毎にScaleの比率で変換されてわけがわからなくなる。

※RayCastなどは照射距離をグローバル距離で指定するが、その際にリンクしていると全く距離単位が異なる為面倒なことになる。 一旦リンクを外せばよいが。


と、いうことでBlenderでUnity用にモデリングする際は、

  TransformのScale X,Y,Zは全て1.0を維持すると幸せになれる


である。

つまりBlenderでObjectモードでの大きさの変更(Scale)をしないように注意する。
形状の変更はEditモードでメッシュを操作して行うようにすれば良い。
追記:Object ModeでScaleを「変更できないように」nキーを押したパネル内でScaleをロック(鍵マーク)してしまえば良い。これでScale由来の操作は全て利かなくなる。


もし、ヤッチャッタ場合は、Scale値をメモした後にX軸なら、

  エディットモードにてAで頂点全選択。
  S X メモしたX軸の数値

として、X軸をScale分拡大する。
その後、

  Scale Xを1.0にする。

と同じサイズにできる。
ただし非常に細かいことを言うとBlenderの数値設定上、若干小数点誤差はでると思われる。



Unityで親子リンクは使えないと困るし、スクリプトで制御するにしても位置単位がおかしくなるので、Scaleを1.0で統一するのは結構重要かもしれない。



どうもUnity+Blender使いは国内ではかなり少数なのか、情報が少ないのが難点。