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 にしてしまうと、幾分高速化している気がします。


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版をインポートして使っています。

2015年5月25日月曜日

AdStirの広告配信

ちょっと AdStir の広告について、チラっと書いておきます。
結果的には AdStir の対応の早さが素晴らしいというコトですが。


当サイトでもAdStirの広告を貼っていますが、妙な広告が出ているのに気付きました。

こんなやつです。




よくあるちょっと悪質系な広告・・・ですね。

クリックして飛ぶと変なものをインストールさせられそうな・・・。

これが AdStir で配信されていたわけです。
※一応ブログがクラックされて表示している可能性も念の為確認。AdStirのタグ経由であることを確認。
※現在はAdStirで配信停止対応済みなので表示されません。タグ利用している方もだいじょうぶです。



AdStirの管理ページではこの広告のみを差し止めることはできないので、一時的にタグを外して対策。


そのまま外しておいても良かったわけですが・・・

ちょっと気になるのでAdStirの担当さんにメールしたわけです。
(深夜寝る前にメールしましたが、どのみち数日くらいか、ないしは返事はこないかな~と)



あくる朝、お詫びメールがきてましたっ、早っ∑( ̄△ ̄;)
タイムスタンプをみると、始業20分後かくらいですね多分。
いい仕事してます、対応速いです(-_☆)キラーン。
※ちなみに忍者Admaxのプラグイン不備の問い合わせは3時間位で返信きて早っ!と思っていましたが、今回翌朝とはいえ始業時間を考えると激早です!単純ですが早いというだけでユーザーの心を半分はわしづかみできます、人間そういうもんです!タブン!



一応適切な処理をしたとの旨、きちんとした文面でお詫びメールが返送されてきてました。
(記載要素にぬかりがなく、とてもしっかりした文面内容でした、良い仕事していると思います)

「サービスなのでアタリマエだろう」とか「そもそも悪質広告を出してるのがおかしい」とかの意見もありえそうですが、実際迅速にきちんと対応するというのは言うほど簡単でもないと思います。
※特に昨今はADネットワークを介して複雑になっているので大変そうです
※迅速さと作業精度は相反するものです。短時間で結果を第三者に提示するのは少なからず対応ミスへのプレッシャーもあるものです。


私的に問題発生時の対応力としてはかなり高く評価できると思います。

さすが老舗 AdStirといったところでしょうか?。
(良い人材がいるようです、うらやましい)




サービスの信頼性とは?


そもそも問題が「起きないこと」が最も望ましいわけですが、人間が扱うものはミスは必ず発生する可能性があります。

なので問題発生時の対応は当然想定の範囲なわけです。
しかし起きてもいないことにコストはかけたくないのが多くの会社の現実でもあるわけです。

ここで「どうせ起きるかどうかわからないのだから」と何も考えずに無視していると、実際に問題発生時に酷い目に合いやすいわけです。


いざ問題が発生したときにアタフタして適切に処置できないのではサービスとして怖いですよね。さらに被害が悪化する可能性もありえます。場合によっては問題を放置されることも珍しくありません。(過去いろいろな会社でこんなケースはあったような気がします・・・)

問題が発生しにくい運営管理も大事ですが、サービスの信頼性の本当の真価が問われるのは問題が起きた時だと思います。




と、いうわけで

当サイトでしばらくの期間悪質広告を目にしてしまった方もいるかもしれませんが、対応していただいたので今は大丈夫だと思います。

また、件の広告のせいで AdStir の広告タグを外していた方がいれば、もう戻しても安心だと思われます。


私的にAdStirはちょっと地味な印象がありますが、裏を返せば堅実な印象でもありますね。

2015年5月20日水曜日

TGitCache.exeのCPU占有率が高くなる現象

TortoiseGit利用でたまに高負荷になっているプロセス(TGitCache.exe)があった。

これについて少し調べたのでメモ。


環境


Windows7x64
TortoiseGit 1.8.14.0
Unity 5.0.1f1 personal


状況

  • Unityのプロジェクト管理にTortoiseGitを利用している(主にローカルにコミット)。
  • Unityで作業中等に、たまに予期せずCPU負荷が上昇するときがある。
    Quad CPUで1CPUがほぼ100%に張り付く状態がしばらく続く。
  • 古いバージョンのTortoiseGitでは全く同じ現象の不具合があったらしいがFix済みらしい。


推察

多分TortoiseGitが(正常動作で)キャシュ動作(?)している際にしばらく重くなるのかもしれない?(数分間位)。

プロジェクトフォルダの内容はさほど大きくない割りに、高負荷状態がしばらく続くので気になる。
※ひょっとするとテクスチャ等のリソース群のファイルサイズが大きいことも関係しているかも?


いずれにしても作業中に急にしばらく高負荷状態が続くのは気になります。


暫定対策

TortoiseGitのキャッシュ動作を止めることでとりあえず回避。

キャッシュを止めることでTortoiseGitの動作が遅くなる可能性もあるかもしれない。(コミット時など?)
(この辺は詳細未調査。不具合の可能性もなきにしもあらずなので時間消費は避けたい感じで)



次の方法でTortoiseGitのキャッシュを停止する。

エクスプローラかリポジトリのフォルダ上にて、

  右クリックメニュ->TortoiseGit>設定(S)

で、設定画面を開く。

画面左メニューツリーから「アイコンオーバーレイ」を選択。
画面右内から「状態キャッシュ」の欄をみつける。
元はその欄内の「デフォルト」ボタンにチェックが入っている。
これを「無し」のボタンにチェックを入れ、「適用」をクリックする。


一応これでキャッシュ動作が止まるらしい。
(タスクプロセス一覧に TGitCache.exe が出てこなくなる)


とりあえずこれで回避&様子見です。
(TortoiseGitの動作上は特に問題にはならない様子。単にキャッシュが停止するだけなので)

PC性能/環境によっては気にならない負荷かもしれないです。
デフォルトで特に問題なければいじる必要はないとは思います。


CPU負荷が気になる場合はちょっと設定を変えて試してみるのもいいかもしれません。





関連サイト:
https://code.google.com/p/tortoisegit/
Wiki git