openFrameworks0.8xをWindowsで触った感想

概要

ちょっとopenFrameworks(以下oFと略す)を触る機会があったので、得られた話をメモします。
バージョンは0.7xについては本も出ているのですが、最近の0.8x系の方がバグフィックスもされてて良いと思います。

僕自身も最初にoFを始めた時 http://trick7.com/2014/02/opneframeworks_memo/
こういった先達のメモがあるおかげでとっかかりになったので、それに末筆ながら追加するつもりで書きます。

目を通すと良い資料

環境

  • openFrameworks 0.8x
  • windows 7
  • VisualStudio 2012Pro
  • C++は、Effective C++を読んで「なるほど~~」って言ってるくらいの力量

ざっくり

標準で付いてくるAdd-onはともかく、他の事をしようと思うと、色々定番があったり、メンテされてない古いのがあったり、Macでしか動作確認してなくてwindowsだとメンテしないと動かなかったり(ハイ、oFはMacユーザー多いですね) するので、VisualStudio自体の使い方を聞ける、分かる環境でないとwindowsでは辛いと思います。
後方互換性とか、移植性とか、そういうのより、動くこと、カッコイイ物が作れるのが正義、みたいな感じは(Add-onによっては)かなり感じます。

Add-on

全体的な選び方と、それぞれのオススメを書きます。

選び方

http://ofxaddons.com/
のサイトを検索して、やりたいことに合わせて探します。 複数の候補があるときは

  • examplesが充実している方
  • リポジトリを見て、活発な方(issueが多いとか)

を選びましょう。
また候補が一つでも、ソースを見てみて嫌な予感がしたら、素直に自前で実装するというのも検討した方が良いように思います(高速でシリアル通信を行う場合、oFアドオンを探すより、他のライブラリを直接使ったほうが安定したりします)

GUI

ofxUIを勧めます。おそらく一番色々出来ます。
標準で付いてくるofxGUIは、基本的なパーツしかない上に、トグルとボタンのデザインが同じで、ユーザーに分かりにくいです。

OpenCV

ofxCvを絶対追加で使いましょう。楽に書けます。ofxOpenCvだけだと、チャラく書けないです。 物体検出とかエフェクトとか、思いつきそうなネタはofxCvにexampleで入ってたりして便利です。
ただ、依存先のOpenCVバージョンが2.3.1と恐ろしく古いので注意が必要です。自前で最新版にする等も検討する必要があります。

MultiWindow

MacだとofxSyphonが強そうですが、僕としてはofxMultiGLFWWindowがオススメです。windowsでも動きます。

https://github.com/charlesveasey/ofxMultiGLFWWindow

以前( http://izm-11.hatenablog.com/entry/2014/07/23/213158 )ofxFensterと戦いましたが、最近のoF環境ではofxMultiGLFWの方が作りが良いです。うまくGLFWを使っているのでコード量も少なく、処理を追いやすいです。

Kinect

WindowsではofxKinectNuiが一番安定していて、またKinectForWindowsとの相性も良いです。 いわゆるKinectSDKでやってることをそのまま書ける感じが良いです。 https://github.com/sadmb/ofxKinectNui

日本語表示

ofxTrueTypeFontUCの、fork先のこれが一番ハマりにくいです。 ofxUIと合わせて使う時には、ofxUI側のofxTrueType依存部分をこちらを参照するようにして、GUIに日本語を追加しています。

https://github.com/iniwap/ofxTrueTypeFontUC

Shader

標準のofShaderでも十分な気がします。glslの使い方を勉強する時も、このofShader越しに触った方が楽かもしれません。

最近困っている事

SF映画で学ぶインタフェースデザインを読んだ。面白いのでオススメしたい。

滅茶苦茶オススメなので布教エントリ書きます。

SF映画で学ぶインタフェースデザイン アイデアと想像力を鍛え上げるための141のレッスン

SF映画で学ぶインタフェースデザイン アイデアと想像力を鍛え上げるための141のレッスン

どんな本か

インタフェースはこの100年程の間に色々進化してて、その歴史を知る本みたいなのは、いっぱいあります。
そこから演繹的に未来のインタフェースを考えたりするのは凄く楽しいものです。

この本は、それぞれのインタフェースが「SF映画で」どの様に表現されて「現実に」実現したか、みたいな差分も一緒にインプット出来ます。 そうすると、上記のように現実の歴史から演繹するより、ズルが出来ます。つまり「未来を描いたSFのインタフェースを実現する方が、歴史から未来を想像するより簡単」です。

また、SF映画のインタフェースをそのまま実現すると問題になりそうな点や、実現する時にこうした方が良いのではないか、といった議論も注意深く書かれており、単なる紹介とtips集ではなく、読み物としても素晴らしいです。
以下、読んだ後の僕のtweetを埋め込んでおきます。

それぞれの人へ

原著を買った人へ

翻訳は品質が高いと思います。日本語の方が布教には便利ですので、是非コレクションに加えてください。

Kinect,LeapMotion,音声認識等に興味を持っている人へ

以下に軽く紹介していますが、全方位的に各種インタフェースを網羅しており、小手先の技術ではなく、「一般の人がどういう期待をしているか」「参考になる映画は何が有るか」「どういう点に注意を払うべきか」みたいな索引として非常に有益です。

インタフェース系の研究をしている人へ

SF映画を例に取ったサーベイ集として、類似の包括的な書籍は無いと思います。
デモを作る際に、どうすると一般の人にウケるか等も記載があり、おそらく確実に「元が取れます」。
インタフェースの論文を書くときの参考文献に、SF映画を引けたらカッコイイみたいな人にもオススメです(?)

その他の人へ

インタフェースに着目して映画を見るきっかけになるかもしれません。
また、それぞれの項における議論は、非常に注意深く進められています。
したがってこういった未来的なインタフェースについて、見たことの有る映画を元に話されているので、取っ付き易い本だと思います。

以下、もう少し詳しい本の紹介

セクション1

これは、個別のインタフェースごとの分類を行い、それぞれの定義と、代表的な映画での扱われ方、現実への参照と各種tipsや議論が行われています。

  • 機械式コントローラ
  • ビジュアルインタフェース
  • 立体投影
  • ジェスチャー(1951.地球の静止する日から遡ってます。素晴らしい!)
  • 音のインタフェース
  • 脳インタフェース
  • 拡張現実
  • 擬人化

セクション2

これは、特定のタスクごとの(SF映画での)実例です。セクション1での扱いがボトムアップであるなら、ここからはトップダウン的なアプローチです。

  • 通信
  • 学び
  • 医療
  • 性的行為

まとめ

  • SFの先へ

以下良い記述(後で僕が見返す用)

未来の技術について議論するためには、未来の技術を演繹的に定義しようとするより映画を参照するほうがより簡単です。 「Kinectは単なるゲーム向けインタフェースではなく、そう、ある種の『マイノリティ・リポート』のインタフェースなのです。」 というように。(P8)

機械式コントローラ

物理ボタンのつまみは、回すものだと自明に分かって素晴らしい。タッチパネル上に描画されたつまみは、意図せず触れて値が変わるかもしれない。

立体投影

立体投影システムを作って、対話コミュニケーションを行う時、縮小表示する時は目線位置を合わせて縮小すべき、目線の一致が行われないと問題が起きますね。
「半透明のペッパーズ・ゴースト方式は長い間見ていると(現実とディスプレイを常に区別するため)目が疲れる」と言うのは、例えば光学シースルーHMDのMoverioのコンテンツを作る上では留意すべきでしょう。

ジェスチャ

「物理的な操作はジェスチャーで、抽象的な操作は音声で」
飛行機の操縦をジェスチャで行う。可能そうに見える。ではイメルマン・ターンはどうやってジェスチャで表現する?

拡張現実

焦点距離の差をなくすことに言及していて素晴らしい。

擬人化

人間の代わりに動物を用いることで、対等な存在ではなく、ペットや案内役としてみなすといった、ユーザーの期待値を低くする効果もあります。 →メイドロボはドジでも良い!!!!

不気味の谷→システムが人間ではないことを明確に示す

ルクソー Jr.のランプは「人間的」とは何かの良い教材になる

アイアンマンのダミーはゴツイけど可愛い。みたいなのはファイアボールのゲデヒトニスもですね。

余談

この本が信頼できる根拠として「立体投影をホログラムとは呼ばない」と明言している事も付記しておきます:)

openFrameworksの複数モニタ対応、或いは楽しいofxFenster

概要

openFrameworksを用いたマルチディスプレイ上で動くアプリケーションを作るときに、定番のAdd-onとしてofxFensterがあります。
これは広く使われていますが、一度でもofxFensterを使った物を作った人は、大抵「ofxFensterにはお世話になったし苦しめられた」みたいな感想を持っていることが多いです。
中身としてはBlenderのGhost( http://www.letworyinteractive.com/blendercode/d5/d2e/GHOSTPage.html )とGLUTに依存しています。
openFrameworksから使えるマルチウィンドウシステム用のadd-onみたいな物です。

僕はそれほど詳しくないですが、歴史的な経緯を含めて調べたのでまとめておきます。

結論

ofAppGLFWWindow win;
win.setMultiDisplayFullscreen(true);
ofSetupOpenGL(&win, 1920+1920,1080+1080, OF_FULLSCREEN);

こんな感じで良い。無理にofxFensterとか使わなくても良いと思います。

ofxFensterの歴史

つらい…

-openframeworks0.74

openFrameworksが一気に普及して、add-onがワシャワシャ出てきた ofxFensterもバリバリと開発されてドンドンissue出て、ちゃんと(?)ワークアラウンドも整備された

0.8-

changed default window manager from GLUT to GLFW とeventシステム周りがちょっと変わったので、ofxFensterもissueいっぱい出て枯れてきた

最近

作者が「ヨッシャなんか破壊的変更してGhost非依存でGLFWベースに書き換えるわ!!!」 みたいな事言って書き換えている最中。usage examplesとかもほとんど空っぽになってるので今使うのはちょっと怖い。
作者が「まあ開発中に安定板使いたければghostブランチ作っておく。それ使って」みたいな事言っています。

windows上でopenFrameworks0.8以上でofxFensterを使う

安定板扱いなので、ghostブランチのheadから持ってくる https://github.com/underdoeg/ofxFenster/tree/ghost/

ここに含まれる依存ライブラリ(ghost.lib)のビルドしたコンパイラが古いままなのでghost.libをビルドし直す。 ghostは https://github.com/underdoeg/ghost からチェックアウトしてVS2012でビルドし直す。
後は無限にwindowが生成されたらこんな感じで書き換える。 https://github.com/underdoeg/ofxFenster/commit/42a080e1457c6fab9d8046f31305d93022d6c50f

この使おうとしているghostブランチの古いofxfensterはGLUT依存で、最近のopenFrameworksはGLFW依存なので、openFrameworksの本体のsetup()の早い段階でおまじないとして glewInit(); を呼んでおくと良い(例えばフレームバッファ確保しようとしてaccess violation例外が出たら、これをしないとダメ)

そしてissueを眺めて地雷踏まない事を祈ります。 https://github.com/underdoeg/ofxFenster/issues?state=open

結論

Windowsつらい
openFrameworks周りのエコシステム、ProjectGeneratorやadd-on等で非常に素晴らしいけど、バージョンアップに追従していけないadd-onとかで酷いことになる。RubyのBundler相当のものが欲しい。

Unityで街をでっちあげた後、それっぽく使えるようにセットアップする解説動画作った

概要

前回エントリを予想以上の方に見て頂けて、あれだけだと色々まだ設定した方が良い作法みたいなのが抜けているので、補足を兼ねてもう一個動画を撮ってみました。

  • Occlusion Culling
  • NavMesh
  • Map

を設定している16分程度の動画です。

誤字や脱字、文意が取れない場所や操作ミス等もありますがご容赦ください。
Unityは、スクリプティングについてはググれば日本語でも多くの情報があって、とても有り難いのですが、GUIでアレコレする方法については相対的に情報が少ないようです。
僕自身もUnityの勉強を初めた時、今回や前回の動画のような事が知りたかったので、操作手順が明らかである動画形式で作成しました。


Unity make large city locomotion tutorial (appendix ...

動画形式でのアップロード知見

  • 録画ソフトウェア…Bandicamが楽
  • キャプションソフトウェア…Windowsムービーメーカーが一番楽(ただ、白抜き文字が使えないので不便)
  • 撮り直し…面倒になってしまうことが多いので、一発撮りに頼ってしまう
  • 操作ミス…仕方がない

動画解説の悩んでいること

  • 訂正が容易でない(ニコニコ動画等だと投稿者コメントで訂正出来るが、容量制限が厳しい)
  • 意外と作るのに手間がかかる

こんな動画があったら良いなあと言う希望

こんなかんじの動画があったら、とても嬉しいです。もしご存知であれば twitterで教えてもらえると喜びます。

izm (izm) on Twitter

  • Unityのmecanimを使いこなしてる感じの動画(モーションを作る所とか、体の部位ごとのブレンディングとか)
  • ライトマップを使った豪華な見た目の作り方の動画(Unity5待ちでも良いかもしれません)
  • 街丸ごとをバラ売りの建物とかを組み合わせてセットアップする動画

Unityで街をでっち上げてUnityちゃんが走り回るまでを動画で作ってみた

Unityで広い街を走り回りたい

Unityを触り始めたころは、そんな風に思って、ドットインストールさんや、Youtubeに上がってるscreencastを見て勉強して記憶があります。

また、日本語の解説記事だと じくよろブログさんのMMD for Unityでミクさんとケロリン町を周るお話 http://eral.blog.eonet.jp/default/2013/10/mmd-for-unity-1-a42b.html にとてもお世話になりました。

ところで先週の土日にUnityちゃんゲームジャムと言うのがあって、そこで初心者の人に伺ったところ、日本語の本は多く出ていて、動画もドットインストールがあるけど、動画の方が凡ミスに気づけるので、良いとのことでした。

の解説動画があったら良いのかな。と思い、試しに録画してみました。

Unityちゃん&フリー素材の街で走り回るまでです。


Unity make large city locomotion tutorial

何分スクリーンキャスト自体をよく分かっていないので、フィードバックを頂けると嬉しいです。