あいてぃーとふぼふ

DroidForKinectSample限定公開!

以前の記事で作成したKinectアプリのサンプル「DroidForKinectSample」を、夏コミで配布しようと思っていたのですが、バージョンアップしたKinectのSDKに同様のサンプルが同梱されるようになったため、もうモチベーションが下がりニーズはないだろうと思い、公開を見送っておりました…(T△T)

ですが、ありがたいことに沢山のお問い合わせをいただいておりますので、同人誌をご購入いただいた方々を対象に、本サンプルのソースコードを公開させていただきます!ということで、まずは本サンプルのポイントから解説させていただきます~(≧▽≦)/

プロジェクトの構成は?

まずは、KinectのSDKに付属している純正のサンプルコード「Avateering-XNA」の構成をご覧ください(右図)。たくさんのソースコードがあって、何やらとても高度であろう印象を受けますが、私個人としては、こういうサンプルは読む気がしません。色々と機能を付加するのもいいですが、サンプルである以上、やはり理解しやすいことが大切だと思うのです…。

そこで、今回公開するサンプル「DroidForKinectSample」は、理解しやすいようにシンプルな構成にしています(左図)。とはいえ、膨大な行数のコードを無理やり集約しているわけではなく、余計な機能を極力省き、キネクトで3Dモデルを動かすために必要な処理のみを簡潔に実装しています。ちなみに、このサンプルは「Avateering-XNA」が公開される前に作成したものですので、アルゴリズムは異なるものの、プロジェクトの構成は偶然にもほとんど同一となっています。

まず「SkinnedModelPipeline」と「SkinnedModelWindows」は、純正のサンプルにも含まれているプロジェクトです。これらはもともと「スキニングモデル」というサンプルのソースコードを流用したものであり、人体の様に繋ぎ目のない関節を持つ3DモデルをXNAに取り込めるようにするためのプロジェクトです。今回利用するドロイド君の3Dモデルも、一部の関節に繋ぎ目がありませんので、これらのプロジェクトを利用します。

次に「DroidForKinectSampleContent」は、ドロイド君の3Dモデルを格納しています。この際、3Dモデルのプロパティから、先のプロジェクトで定義した「SkinnedModelProcessor」を指定します。

ということで、残る「DroidForKinectSample」がメインプロジェクトです。

DroidForKinectSampleプロジェクトの内容は?

まず「Program.cs」は、エントリーポイントを保持するだけのクラスです。次に「MainGame.cs」は、XNA経験者であればお馴染みのUpdateメソッドとDrawメソッドを定義したクラスです。この際に特筆すべきは、90行目付近で3Dモデルが持つボーンの番号を列挙体にマッピングしている点です。ボーンとは、3Dモデルを動かすために定義する骨の事であり、3Dモデルごとに異なるボーンの番号をここでマッピングすることで差異を吸収しています。

他にも「CameraHandler.cs」は、キーボードで視点を操作するためのクラスですので、不要なら削除しても問題ありません。また「SkeletonHelper.cs」は、キネクトの骨格データを左右反転させる(鏡で映したようにする)ためのクラスですので、削除したところでモデルの動きが左右逆になるだけの些細なクラスです。

ということで、肝となるのは「AvateerHandler.cs」です。

AvateerHandlerクラスの内容は?

AvateerHandlerクラスのAPIはシンプルで、UpdateメソッドとDrawメソッドがMainGameクラスから呼び出されるようになっています。この中で、キネクトの骨格追跡機能から得られる20個の「関節」の3次元座標を、3Dモデルの「ボーン」にマッピングして動かします。具体的には、隣接する2つの関節(例えば肩と肘、肘と手首など)とボーン(例えば上腕、前腕など)をswitch構文で関連付けて、ボーンの初期ポーズに関節の移動量を合成することで3Dモデルを動かします。マトリックスやクォータニオンなど、若干難しい技術を利用してはいるものの、コメントを含めても250行程度ですし、その内の100行くらいはswitch構文ですので、比較的読みやすいソースコードになっていると思います。

ただし、今回のサンプルはドロイド君の3Dモデルの初期ポーズ(両手両足を垂直に下した状態)を前提に作成しています。このため、各ボーンの初期ベクトルをVector3.Downに決め打ちで実装していますので、初期ポーズがドロイド君と異なる3Dモデルを利用する場合は、この初期ベクトルを修正する必要がある点に留意してください。

ドロイド君の3Dモデルは?

なお今回は、ソースコードの他にも、ドロイド君のボーン入り3Dモデルを同梱しています。3Dモデルは、「メタセコイア」というモデリングソフトで作成しており、Metasequoia専用のプラグインである「Keynote」を用いてボーンを設定しています。また、「FBXエクスポーター」 というプラグインにより、ボーン入りのFBXファイルに変換してXNAで利用します。ただし、これらのプラグインを利用するためには、有償のメタセコイア (5000円)を使用する必要があります。なお、キネクトから得られる関節の座標は20個となっていますので、キネクトで動かす3Dモデルを作成する場合は、このドロイド君の様に15本のボーン(=20個の関節)で構成するとマッピングしやすいです。

ダウンロードはこちらから!

ということで、同人誌をご購入いただいた方への感謝の気持ちを込めて、ソースコードと3Dモデルを公開させていただきます。ダウンロードしたファイルは自己解凍形式のEXEファイルで、パスワードを入力することで解凍できます。パスワードは、「デベロッパーズハウツー3」の最後が「何オチ」であったかを、漢字二文字で入力してください(最後のコマを参照)。なお、ソースコードを利用したことによる一切の責任は負いかねますので、あらかじめご了承ください。

DroidForKinectSampleをダウンロード

それでは、この度は同人誌をご購入いただき、誠にありがとうございました~!。゚(゚ノД`゚)゚。

コミックマーケット82!

大変遅ればせながら…「コミックマーケット82」お疲れ様でした~!≧∀≦)ノ

感謝感激です!

スペースにお越しいただいた方々には、心よりお礼申し上げます!。゚(゚ノД`゚)゚。前回よりも大勢の方にお越しいただき、もう本当に感謝してもしきれません!(*≧△≦*)…と同時に、申し訳ない気持ちで一杯だったりもします…orz

でも完成度が…

今回は印刷所の締め切りを2日オーバーしての入稿になってしまいました。このため、当日会場に行くまでは、新刊が間に合ったかどうかわからない状態だったのです。結局何とか間に合いはしたものの、解説も漫画も十分な完成度にすることができず、色々と後悔しきりです。もっとも、それは毎度のことなのですが…(;´Д`A

より良いものを!

それでも、手に取っていただいた皆様や、励ましの言葉をいただいた皆様のことを思うと、もう嬉しくて嬉しくて…やっぱり作ってよかったなぁ!という気持ちの方が強かったりします。
もう本当にありがとうございましたっ

ということで、次回こそは完璧に満足のいくモノを作りたいと思う次第です!もうアレですよ!何でしたら、既刊を2冊持ってきてくれた人(買ってくれた人)には、新刊をタダで配布してもいいんじゃなかろうか!? …くらいの心構えでおります!(`;ω;´)ゞ ただ、印刷代を安く抑えるためには早めに入稿しないといけないわけなのですが、技術的なテーマには旬があるのでギリギリまで着手できないというジレンマが…。
ぐぬぬ、どうしたものやら…

あ…あと、スケブは描き方をもっと勉強しておきます(T△T)ゴメンナサイ

コミックマーケット82にサークル参加します!

MOTO SQUARE SOLUTIONは、今年も真夏の聖戦「コミックマーケット82」にサークル参加致します~!≧∀≦)/

今年のテーマはキネクト!

世間一般的に旬なテーマとしてはWindows8なのかもしれませんが、旬なときに旬なものをやってもあんまり楽しくありません(私自身が)。なので、今回は「キネクト」をテーマにしたマンガで勝負したいと思います!なお、今までの既刊は「デベロッパーズハウツー」と言いながら、まったく開発者らしい内容ではなかったことに気が付きました@今更!そこで今回は、実装寄りの内容を大量に盛り込んだ内容にしようと画策中です。もちろん、キネクトの基礎の基礎から解説する予定ですので、C#の知識と少年ハートがあれば、どなたでも楽しんでいただける内容にしたいと思います~(≧ω≦)ノ

打倒窓辺の野望は続く…

当初は、日経ソフトウエアで連載させていただいた「インターン女子」の続編にしようと目論んでいました。けれど、夏コミでローザさんやメトロちゃんを描いてあげないと、二度と日の目を浴びることはないわけで…( TДT)そう考えたら何だか不憫で仕方がなくなく、今年もお二人にご登場いただきます。あ、あとゲイツさんも。特に今回はキネクト開発ということで、ローザさんには一肌も二肌も脱いでいただく予定ですので、是非ともご期待いただけましたら幸いです(*`∀´*)ムフフ

配布場所は2日目の西地区し-33a

ということで、開催日は「2012年8月11日(土)」、スペースは東京ビックサイトの「西 し-33a」となっております!詳細な場所はこちらのサイトでご確認いただくとわかりやすいと思います♪今回は初めての西館なので、いまからちょっと楽しみなんです!西館は東館よりも面積が小さいようなので、東館のような「戦場」ではなくこう…もう少しゆったりした雰囲気だと期待しているのですが…はてさて(;´Д`A ティーセットでも持って行って、コミケでおしゃれにティータイムと洒落込もうかしら?ξ〃▽〃)ξ

ということで、当日ご都合のよろしい方はぜひとも足をお運びいただけましたら感涙です!それでは、夏コミでお逢いしましょう~(*≧∀≦)ノ

Kinectでドロイド君を動かそう!(その2)

前回からはじめたこのシリーズも、いよいよ今回が最終回です!∑(´゚Д゚`;)
ということで、こんな感じのサンプルになりました~(*≧∀≦)ノ

普通に扱いやすいです!

本当はもう少し続く予定だったんですが、とりたてて問題もなく完成してしまいました(汗 もちろん、ご覧のように紆余曲折はあったんですが、原因はどれも計算ミスによるものだったので、割愛させていただきます。キネクト自体は驚くほど扱いやすく、それは「Kinect for Windows SDK」のAPIが扱いやすいということでもあります。ただ、まだまだ機能が少ないために全体像を把握しやすかったというのが一番の理由かもですね。APIの少ない今が習得のチャンスです♪

多少の不満はあるけれど!

それでも、キネクトに抱いた不満はいくつかあります。1つめは骨格情報のミラーリングがサポートされていないということです。ただし、これは実装側でデータを変換すれば(X座標を入れ替えれば)よいだけなので、大きな問題ではありません。2つめは、関節の情報が三次元座標だけということです。これも、関節の角度を実装側で割り出せばいいだけなので、やっぱり大きな問題ではありませんでした。けれど、欲を言えば関節の向きも取得できたら嬉しいです。この向きが取得できないと、前向きか後ろ向きかはもちろん、身体をくるりと一回転するような動きをトレースできません。もちろん、実装側で顔認識とか関節座標の履歴を保持すればどうにかできなくもなさそうですが、実装がカオスになりそうなので…(汗 3つめは、デバッグがしにくいことで、確認のたびにポーズをとるのは大変でした。でもこれは、今月末に公開予定のSDK v1.5で改善されるというお話ですので、今から楽しみにしています~(o*゚ー゚)o

それでもここまでできちゃいます!

自分の動きに合わせて、リアルタイムに3Dモデルが動くというのは、個人的にとても新鮮な感動です!惜しむらくはこれが…ドロイド君であって窓辺さんではないことですが…。このように、一見するとおぉ~な感じ(?)のキネクトアプリも、実装自体は大したことありません。これからリファクタリングを行いますが、コメントをふんだんに盛り込んだとしても500行には満たないかなと。リファクタリング中に気付いたことや思い出したことがあれば、またブログに書いていきたいと思います。とにかくもう、キネクトは本当に簡単で面白いです!
ネタに選んで大正解でした♪(。´ゝω・)

ソースコードは夏コミで!

このサンプルの3Dモデルとソースコードは夏コミの同人誌のオマケとして配布する予定(当選すれば)です。ぜひとも在庫の撲滅にご協力ください!他にもサンプルを作成したら、併せて配布しちゃいます。時間があれば、次は3Dスキャナーモドキを作ったり、音声認識を検証してみたいですね。

Kinectでドロイド君を動かそう!(その1)

今回からしばらくの間、「Kinect for Windows」を利用して、思い通りに3Dモデルを動かすサンプルの開発に挑戦してみたいと思います。いわゆるひとつの「モーションキャプチャー」的なサンプルです。できればホントは「窓辺さんの3Dモデル」を動かしたかったんですが…お高いので代わりのモデルを用意することにしました(´・ω・`)

ハイエンド・ドロイド!

ということで今回は、窓辺さんの代わりに「ドロイド君」の3Dモデルを動かすことにします!(*`Д´*)ノ でも、どうせなら普通のドロイド君では物足りません。そこで今回は、驚異の7000ポリゴンオーバーで作成したハイエンドなドロイド君…つまり「ハイエンド・ドロイド」を利用します~!なんということでしょう!曲面やエッジの成形にポリゴンを贅沢に使用しています。しかもこのドロイド君…スゴイのはポリゴン数だけではありませんよ?( ̄ー ̄)

スキニング・ドロイド!

何と!こいつ…動くぞKinectから取得できる骨格情報を参考に、ボーンを仕込んで動くようにしてみました。個人的なこだわりポイントは、頭と胴体の間に「首」となるポリゴンを仕込んだことです。これによって頭を動かすと首が口のように見えるので、なんだかとってもチャーミング♪最終的にKinectでこのポーズが取れれば目標達成です!

使えるものは流用すべし!

ご覧のようにこのドロイド君は、肘や膝が人間の肌みたいに「グニャリ」と動きます。こういう3Dモデルのことを「スキニングモデル」というんです。C#でスキニングモデルを扱う場合は、AppHubで公開されているXNAの「スキニング モデル」というサンプルを参考にすると便利です。今回もこのサンプルを一部参考にして、Kinectで3Dモデルを動かすサンプルを開発していきたいと思います。

意外と情報が少ない?

しかし…この手のサンプルってネットで全然公開されていないんですね。ネタがありきたりすぎるかと思っていましたが、意外とそうでもないみたいです。単純に骨格を描画しているサンプルはよく見かけるんですが、あれってあくまで2D画像として骨格を描画しているので、実はとっても簡単なんです。SDKのAPIには、骨格と画像をマッピングするAPIも用意されていますしね。けれど、骨格を3Dモデルにマッピングさせようとすると、一筋縄ではいきません。行列とか行列とか行列とか…考えただけでも面倒くさそうです…ノ乙(、ン、;)

なお、サンプルが完成した暁には、3Dモデルとソースコードを同人誌のオマケとして配布する予定ですので、在庫の撲滅にご協力ください♪

Kinect for Windowsを購入しました!

今度の夏コミ(当選すればですが…)のネタ用に「Kinect for Windows」を購入しちゃいました~♪(*≧∀≦)ノ

話題のNUIデバイス

Kinectは、マイクロソフトが開発したセンサータイプの入力デバイスです。手を触れずに、身振りや音声で操作することのできる「NUI(ナチュラル・ユーザ・インタフェース)」と呼ばれるタイプのアプリケーション開発に利用できます。Xbox360用のKinectが発売されたのは2010年11月なので、ずいぶん遅めのデビューになってしまいましたが、しばらくはこのKinectを検証していきたいと思います。

実売価格は2万円弱

「Kinect for Windows」の希望小売価格は2万4千800円です。ただし、発売から3か月ほど経過した現在は実売価格が2万円を下回るようになってきました。なにやら最近は「Kinect for Windowsスペシャルパック」といった、窓辺ななみさんとクラウディアさんの3Dモデルが同梱されているパックも発売されているみたいです。…が、ついでにDSP版のWindows7までついてくるので、お値段もお高いんですよねぇ。できれば上記の3Dモデルを検証に利用していきたかったのですが…さすがに趣味で出せる値段ではありませんのでションボリです(´・ω・`)

Kinectを夏コミのテーマに選んだ理由は…また別途お話しするとして、まずは開発環境の構築から始めて行きたいと思います!(ゝω・`)

GWの終わりから始まるモノ

ゴールデン・ウィークが終わった後から始まるものって…何だと思いますか?もちろん、仕事もそうですね~(T△T)でも、二次元と三次元の狭間に生きる我々にとって、もっと大切なことがあるはずです。それは…

今までの経験を活かして…

そうです、答えは夏コミの準備です。ご存じの通り、コミケにサークル(売り手)として参加できるかどうかは、抽選式になっています。夏コミの場合、当落が発表されるのは6月なので、まだ半月以上も先なのです。ですが、当落発表を待ってから動き始めると…たいがい痛い目を見ます。そこで今年は、GW明けから早々に夏コミの準備を始めることにしました!(`・ω・´)b

ネタはいろいろあるけれど…

ということで、現在は「ネタ」を思案中です。今年こそはしっかりと、開発者向けの同人誌を作成するのが目標です!幸いなことに、最近は色々な話題がありますので、ネタには全く事欠きません。例えば「Windows 8」と「Visual Studio 11」による「Metro style apps」あたりは旬なネタですよね~!ところが、私はスレートPCを持っていないので、これらの真価を検証することができません。

Windows 8の解像度って…

もちろん、スレートPCの中には安価なものもあるわけですが、Windows 8 でMetroアプリを利用する場合、選択肢は極端に限られます。そもそも、Windows 8における解像度の最低要件は「1024×768 (XGA)」だそうなので、比較的安価なスレートPCではこの要件を満たせません。さらに、Windows 8をタブレットとして使用する場合、上記の解像度にタブレット機能用のスナップ領域(?)を加算した「1366×768(FWXGA)」が最低要件となります。はふん。この条件を満たすスレートPCって、現状ではオイソレと買える値段じゃない(10万前後)んですよねぇ…。かといって、マルチタッチ対応ディスプレイとかで代用するのは、Windows 8やMetroアプリの方向性と少し違う気がしますし。

結局ふりだし!

ということで、これらのネタは引き続きアンテナを張りつつ、夏コミのネタには別の何かを考えないとマズそうです…orz