!!!独り言日記 !!Kadan 動画アップ(2014/03/27) {{youtube //www.youtube.com/embed/un1cTED0uok,width=700,height=393}} にて、開発中のモバイルアプリ「Kadan」の操作動画をアップしました。 android 4.4の動画キャプチャの試験もかねて。 以前の日記より、アイコンを少し変更したりしてます。 しかし、動的なゲームではないため、ちと物寂しい動画に(^_^;;。 PVで魅せる経験も積まないといけないですね<自分。 後、指のタップやドラッグ操作が動画キャプチャしただけだと分かりにくいのをいまさら把握。 動画はあくまでもどんなゲームかの紹介だけにして、チュートリアルは別途専用ページで書くかな。 !!Kadan (2014/03/23) 開発中のアプリの情報を公開。モバイルアプリ第一弾です。 プロジェクト名は「Kadan」というもので、スマートフォン/タブレット用のゲームになります。 {{ref_image kadan_01_20140323.jpg}} 4月あたりにgoogleに申請予定。iOS版はまだテストが足りていないのとUnity のiOS版のProライセンスを購入してないため、もう少し後になりそうです。 予定では100円(課金なし/広告なし)。 庭が与えられていて、そのまま放置すると草や木が勝手に生えてきます。この庭を管理するのがゲームの主旨。 草を刈って、もしくは木を切って貯めておくことで、後々アイテムに交換していきます。 草や木を切るのはタップもしくはドラッグ操作で行います。 で、ズームすると、、、 {{ref_image kadan_02_20140323.jpg}} はい、この日記で解説してた「カミキリムシ」がいますね。 こいつが草や木を食って邪魔をします。カミキリムシは雨上がりの後、どこからともなく飛んできます。 一定時間経つと雨が降ることがあり、雨が降った後は木が生えやすくなります。 {{ref_image kadan_03_20140323.jpg}} 草や木はブロックに交換することができまして、これを使って庭にブロックを配置していくことができます。 いわゆるエディットモードのようなもの。 {{ref_image kadan_04_20140323.jpg}} 草や木はボンと出るのではなくて、画面内で成長していきます。 この部分は少し技術デモ的な要素が入ってたり。 動画については近いうちにアップします。 androidの動画のキャプチャ方法調べているところなんですよ(^_^;; android 4.4(KitKat)ならできるようなので、、、。 !![Unity] 続続・モバイルでTransparentを使うか否か (2014/03/22) 手持ちの「Sony Tablet S」「Nexus 7」の実機で検証したところ、 ShaderでTransparentは使わないようにし、Meshの頂点・三角形数が増えてもいいので「RenderType"="Opaque"」で表現したほうが速度的には有利なことを確認。 どうしてもTransparentを使用する必要がある場合は、描画領域で見えている部分で極力面積が小さくなるようにする、となんとかなる感じでした。 もう少し調整してから、今作ってるアプリの情報を出していくようにします。 !!モーション付けの参考になる本 (2014/03/22) 3DCGでモーション付けをする際に虫や二足歩行など、動きについては過去の偉人たちが研究してくれているのを利用しましょう。 といっても、3DCG本ではなかなか解説がないような。 手持ちの本では *ロボットメカニクス - 構造と機械要素・機構 - (Ohmsha) *アニメ作画のきほん (WORKS CORPORATION) で、人や馬や虫などの足の運び方など参考になりました。 特に「アニメ作画のきほん」は参考になるかと思います。 !![Shade] 続続続続・ボーンを入れたアニメーション (2014/03/22) Shadeでのボーンの「自動で軸合わせ」Off時(変換行列を回転0にしている)に出る下画像のようなボーン、消す方法ないだろうか。 {{ref_image bone_rotate_04_20140322.png}} モーション付けの場合は参照しない(したくない)ので、ボーンのつながりが見えにくい、、、。 !![Shade] 続続続・ボーンを入れたアニメーション (2014/03/22) Shadeでボーンを配置する場合に、変換行列の回転とスケールが変化しないように *「自動で軸合わせ」をOffにする というのは1つ前の日記に書いた理由でこのように使います。 後もう1つ大事なこと。 人体や動物、昆虫などはUnityに渡す場合はスケール(形状を囲む大きさ)が大事です。 記述がややこしかった、変換行列のスケール値ではなくて形状の大きさのことです。 人体なら身長として1700mmとか。 Unity上では1.0メートル単位になります。Shadeは1.0ミリメートル単位。FBXは(変更可能ですが)1.0センチメートル単位。 このあたりでたいていこんがらがりますが、エクスポータ/インポータの単位の指定がある箇所で吸収してくれるかと思います(単位を持つFBX形式だと考慮してくれる場合が多い)。 また、「モデリングとボーンを配置後にボーンのスケールを後で変更しよう」とすると、 形状(ジオメトリ)はいいのですが、ボーン含むジョイントについては変換行列のスケールが(1, 1, 1)でなくなってしまいます。 解決策としては、モーションウィンドウでシーケンスOffにしてから対象ボーンのルートを選択して、右クリックのポップアップメニューで「すべてのジョイントをリセット」を行うという手があります。 が、できるだけボーンを指定する段階では、形状のスケール調整も終わっているほうが後で忘れることがなくてよいかと思います。 では、次回で虫のアニメーションに戻ります。 !![Shade] 続続・ボーンを入れたアニメーション (2014/03/22) ボーンの変換行列とアニメーションでの回転の関係が、FBXおよびUnityにわたるときにどう渡されているか検証のため、Maya 2014体験版でボーンのアニメーションでのフレームでの値を見てみました。 まずは、Shade側でboneA-boneBを親子にしたボーンを配置。 boneAを選択したときの情報ウィンドウ内の「変換行列」で回転Xを20とします。 {{ref_image bone_rotate_01_20140322.png}} 「ボーンジョイント属性」のオイラー角が(0, 0, 0)になっているのを確認。 この状態で、モーションウィンドウを出して0/20/40フレーム目で 0フレーム目 : boneAの回転 (0, 0, 0) 20フレーム目 : boneAの回転 (90, 0, 0) 40フレーム目 : boneAの回転 (0, 0, 0) と指定しました。 Shadeでのボーンのアニメーションは「回転」と「オフセット」で動きを与えます。 なお、Shadeでのボーンでは「スケール」アニメーション要素はありません。 「回転」はボーンの中心からの各XYZ軸での回転角度指定、「オフセット」はボーンの中心からの移動量、を指定します。 これは'''変換行列での姿勢からの相対量'''である点に注目してください(ボーンのローカル座標での数値です)。 これをFBXで出力し、Mayaに読み込みます。 boneAの回転Xがかかっているのを確認(なぜか20度ではなくて25.709)。 {{ref_image bone_rotate_02_20140322.png}} アニメーションのグラフエディタを表示。 {{ref_image bone_rotate_03_20140322.png}} グラフエディタウィンドウより移動と回転要素があるのがわかります。 それぞれXYZ要素ごとにグラフ化されてますね。 回転Xを選択すると、グラフが表示されます。 回転の開始は少なくとも0度からではないようです。20度くらい? 回転の山は90度よりも大きくて110度くらい。 これより、どうも回転要素はShadeで言う変換行列からの相対量ではなくて'''各ボーンのローカルでの絶対量'''であるようです。移動も同じ。 これが大事で、もし360度よりも大きな回転が加わったらどのような現象が起きるか? ツールによってまちまちなのですが、急な回転がかかったりねじれたり、が起こる可能性があります。 これらの混乱を回避するには「ボーンの変換行列の回転は(0, 0, 0)」にするのが無難であります。 他ツールとボーンを使ったアニメーションを行う場合は、 *ボーンの変換行列の回転は(0, 0, 0) *ボーンの変換行列のスケールは(1, 1, 1) とするのが安全かと思います。 Unityに渡す場合も同様。以下も参考になります。 http://docs-jp.unity3d.com/Documentation/Manual/Preparingacharacterfromscratch.html ちなみにUnityというかFBX構造では、角度は「XYZのオイラー角」指定です。 この場合は、せん断要素を含めることができない点にも注意してください。 ようは、スケールは誤解を生むので極力使わないほうがよいです(説明めんどくさい(^_^;;)。 このアニメーションにおける「移動」「回転」「スケール」要素は、FBX構造やMayaなど、ほとんどのツールではボーン(ジョイント)やポリゴンメッシュ形状、null形状含めてすべての形状に与えることができ、それぞれアニメーションのモーションカーブを与えることができます。 Shadeでこれが可能なのはジョイントやカメラのみ。この壁もツール間の相互変換では相容れないところですね。 追記: 形状の姿勢の変換行列としての「移動」「回転」「スケール」と、 アニメーション時の「移動」「回転」「スケール」は別のものです。前者は一度指定すると変化せず固定、後者はフレームによって値が変化することで動きをつけます。 Shadeだと、アニメーション時のボーンでの移動がOffset、回転がRotateになります。スケールは存在しないことになります。 !![Unity] 続・モバイルでTransparentを使うか否か (2014/03/21) ちと理解間違ってたかも。 Transparentを使う場合に、透過になる部分が多い際に不利、かな。 なので、Transparentを使うのはいいけど極力アルファがゼロの部分は面に乗らないようにクリップしてしまう、のが速度に貢献しそう。 追記: やっぱり、Transparent使用時にテクスチャ全体でアルファが1.0の場合でも時間がかかるか、、、。 !![Unity] モバイルでTransparentを使うか否か (2014/03/20) パーティクルもTransparentを使ってましたね。 Shaderでは標準である「Mobile/Particles/Addtives」などはモバイルでも利用できるように軽量化されてますが、Transparentを使用するのはやはり不利。 で、ここをTransparentを使用しないOpaqueにして雨とか火花とかで使ってるパーティクルを細長くしてそれっぽくしたら、このほうが軽い模様。 極力Transparentは排除していこう。ということで実装を置き直し中です。 このスライドが参考になります。 http://www.slideshare.net/MakotoItoh/unity-nagoya-seminar-shadowgun !![Unity] Unity Proでの「Profiler」 (2014/03/20) Unity Proの機能の「Profiler」で、Androidでの実行時のボトルネックを探ってました。 なお、速度を最適化(Profilerで調査)するためにUnity「Android Pro」版を追加で購入してます。 Draw Callは気をつけて最適化したのですが、まだ遅い部分が。で、Profilerで見ると「Render.TransparentGeometry」っぽいかなぁ。 Shader表現でアルファを持つテクスチャを多用し、ピクセル単位で抜いている箇所があります。これで木や葉っぱを表現。で、カメラを近づけるとかなり重くなる。 これを透過のないDiffuseに変えると軽くなることからも、transparentのshader使用が足引っ張るのかも。 なお、Androidで確認したものでPC上だとこの部分はほとんど影響なしです。GPUの性能だろうか、回避策はどうとろう、、、。 !![Shade] 続・ボーンを入れたアニメーション (2014/03/17) 今回の最終目的を先に出しておきます。 「カミキリムシを歩かせる」のをShadeからUnityにFBX形式で渡します。 歩行モーションはループ再生させるようにしてます。 ↓Shade上でのアニメーション {{h264player http://ft-lab.ne.jp/files/shade/shade_bug_walk.mp4,width=320,height=240}} ↓Unityでのアニメーション {{h264player http://ft-lab.ne.jp/files/shade/shade_unity_bug_walk.mp4,width=480,height=320}} モデリングしたカミキリムシのポリゴンメッシュに対して、「ボーン」を割り当ててます。 ボーン以外はジョイントは使用していません。というか、Unityに渡す目的の場合はボーンを使用します。それ以外は使わないほうがいいと思います。というのは、Unity含む他ツールでも互換性のあるアニメーションの仕組みが「ボーン」になりますので。 また、ボーンを入れる際はいくつかやらなければいけないことがあります。 以下、Shadeでの操作です。 !ボーンをシーンに配置する際の注意点 ツールボックスから「パート」-「ジョイント」-「ボーン」よりボーンを配置するモードになります。 このときにビューをドラッグして配置する前に、ツールパラメータより「ボーンの生成」の「自動で軸合わせ」のチェックボックスをOffにしてください。 これ、かなり大事。 {{ref_image shade_bone_01_20140317.png}} 「自動で軸合わせ」をOffにすると、ボーンを配置したときのボーン自身が持つ変換行列は回転/スケールがかからない状態になります。 Shadeの持つボーン基準のアニメーション用のOffset/Rotateの扱いは、他のツールやUnityで形状/アニメーションを読み込めるFBX内の構造とは少し異なります。 ということで、それの説明を後で入れます。 追記 : 2014/03/22の日記にて、これらを追加説明しました。 !ボーンを配置する ボーンは移動だけで配置し、回転とスケールが変更されていないかを形状情報ウィンドウ内の変換行列で確認します。マニピュレータでボーンを回転させたりスケーリングさせたりすると、当然ながら変換行列に回転/スケール要素が入りますので注意。 {{ref_image shade_bone_02_20140317.png}} ビュー上でドラッグして一回ボーンを配置し、後はコピー&ペーストで複製してボーンを追加していったほうがいいかもしれません。 はじめにルートとなるボーンをキャラクタの中心(重心)にしたい箇所におきます。ここでは「boneRoot」と命名。 ここから、首から頭にかけてのボーン、胴体から後ろ腹に向けてのボーン、と配置し、あご部分、足、羽、などにボーンを追加しました。 !![Shade] キャラクタを作る要素 (2014/03/16) 虫の場合は、上面図からのビューがあると黒光りするGのごとく気持ち悪いものですので あえて上面図は載せてないのでご了承を。 さて、キャラクタですが特にゲームで使用したい場合は *1形状は、1ポリゴンメッシュで構成 *1形状は、1つのマテリアル(マスターサーフェス)で構成 *1形状は、1つのテクスチャで構成 を心がけます。また、ポリゴンメッシュはルートの直下に配置しましょう。 原点位置は接地の中心となるように位置あわせしてます。 以下画像では接地を分かりやすくするために地面の板を配置してますが、これは最終的には削除します。 {{ref_image shade_bone_02_20140316.png}} UV&テクスチャは以下のように1枚に押し込めてます。 {{ref_image shade_bone_03_20140316.png}} モデリング途中では、体や頭や触角、足などはバラバラにモデリングすることになると思いますが、最終的には1つのポリゴンメッシュにマージしてしまいます。 この状態になってからボーンを当てはめます。 また、アニメーションを行う際の初期姿勢は以下の状態でニュートラルとしました。 人体でいえばTポーズに相当するものですね。 {{ref_image shade_bone_04_20140316.png}} !![Shade] ボーンを入れたアニメーション (2014/03/16) そろそろ徐々に情報を出していくことに。android/iOS用の開発はUnityで行ってます。 で、実際にモバイルアプリ(ゲーム)で使う3DデータはShadeで作成。 2Dのテクスチャや素材作成はSAIまたはPhotoShop(Elements)。 キャラクタで「カミキリムシ」がいるのですが、稼動できるようにボーンが仕込まれてます。 {{ref_image shade_bone_20140316.png}} 動作としては、羽を広げる(飛ぶ)/歩く/木をかじる、など。 ShadeからはFBXでアニメーション付きでエクスポートすると、Unity側に持って来れますがその前にShade側で *モデリング *テクスチャ作成(表面材質としてマテリアル割り当て) *ボーンを入れる *スキンの頂点ブレンド割り当て を行ってます。これらは結構敷居が高いですので(モデリング〜テクスチャ作成はすぐですが)、解説半ばで止まっている人体を行う前に「虫」で説明していくことにします。 と、今回は前振りだけ。 !!モバイルアプリ開発 (2014/03/15) スマホ/タブレットのアプリ開発(ゲームだけど)がようやく終盤に向けて収束してきたので、来週末あたりに一度タブレット上での操作ムービーを公開予定です。 3月末には申請にこぎつけることができるかな。 アプリ用サイトの構築やチュートリアルなど、準備を始めなければ。 一段落してから、途中で止まっていたShadeのモデリングチュートリアルやUnity開発の覚書など再開できればと思います。 今年は、年頭に立てた目標をなんとかクリアしたいところ。 !![Unity] Build SettingがPCでない場合は、lightmapのSky Lightのベイクは効かない? (2014/03/05) とりあえずメモ書き。Unity 4.3.4にて。 実機テストのためBuild SettingをAndrodにしているのですが、lightmapのSky Light Intensityを0.5とかにしてもベイク後の焼き付けられたテクスチャには何も反映されず。 Directional Lightの焼付けは反映されます。 ためしに、Build SettingをPCにSwitch PlatformするとSkyLightのベイクも反映されました。 不都合? !!Arduinoに関する覚書 (2014/03/01) Arduinoに関する覚書は「[[Arduino]]」に記載することにしました。 Arduino UNOは前に購入して少しいじってたのですが、Intel Galileoを買ったときは空白時間がかなり空いていてすっかり使い方とか忘れていたんです。 これじゃあまずい、ということでとりあえずメモ書きをと、、、。 Arduinoだけではブレッドボードやジャンパ線、抵抗、LEDなどいろいろそろえないといけないので、「Arduinoスターターキット」というのが個人的におススメです(以前日記に書いたかも、、、うろ覚え)。 千石電商で購入しました。 http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-0BPT 後、Arduinoとは関係ないですが Unity関連は別途Wikiに覚書を追記していってます。 http://ft-lab.ne.jp/cgi-bin-unity/wiki.cgi 今は、Unityでのモバイル開発がメイン。近々にリリース予定があるので黙々と開発でなかなかTips展開できてませんが、ノウハウは貯まってきました。 !!Intel Galileo(2014/03/01) まだ簡単なテストしかしてないですが「Intel Galileo」を購入しました。Arduino互換ボードです。 {{ref_image intel_galileo_20140301.jpg}} 写真上がGalileo、下はArduino UNO。 特徴として、このボード上で簡易版のLinuxが動作。LinuxはmicroSDからの起動。 Linux上ではPythonを使ってハードウェアサイドに命令を出せるようです。 グラフィック(HDMI出力とか)の命令はなし。なんだか発熱は高い感じ。 まだArduino含めてまともには没頭できてないので時間をとらないと、、、、。