2017-04-07[n年前へ]
■OpenFOAMの流体シミュレーション世界、手持ちのスマホで没入体験してみよう!
以前、OpenFOAMを使ってシミュレーション計算した、秋葉原の街全体に吹く空気流。その時は、Oculusで没入的に眺めてみた。今日は、スマホで普通にVR没入体験できるよう、スマホ用アプリケーション化してみた。
最初は、最近公開されたばかりのUnity 5.6のネイティブなVR機器サポートを使おうと思ったのだけれど、iOS向けのビルドでリンカエラーが出て回避できなかったので、Unity 5.5.3f1+Google VR SDK for Unity v1.0.3で仕立ててみました。
2017-04-08[n年前へ]
■2人で対決する「決闘」、自分が生き残る確率は50パーセントで正しいか?
2人が対決する決闘、生き残る確率と殺される確率、一体何パーセント?…この確率問題が意外に興味深かったので、『2人で対決する「決闘」、自分が生き残る確率は50パーセントで正しいか?』を書いてみる。
2017-04-15[n年前へ]
■続 OpenFOAMの流体シミュレーション世界、手持ちのスマホで没入体験してみよう!
少し前、大規模な流体計算シミュレーションを行った結果の中に、スマホをVRデバイスとして入り込む…というOpenFOAMの流体シミュレーション世界、手持ちのスマホで没入体験してみよう!(を書いた。これを作るにいたったキッカケは、「秋葉原の街中全体を空気流計算するのは面白い」「けれど、ふつうの人が持ってないヘッドマウントディスプレイだけでしか見ることができないのはツマラナイ!」「空気流れる空に向かって飛んでみたい!」というコメントをもらったことだった。
このコメントは確かにその通りだ。1家に1台…ならぬ今や1人1台誰もが持っているスマホを使って流体シミュレーション世界に入り込む(没入体験する)ことができたなら、それは確かにとても面白いに違いない!というわけで、流体シミュレーション世界にスマホを使って没入体験するための作業をしてみたのです。
「秋葉原の街中全体を空気流計算するのは面白いけれど、ふつうの人が持ってないヘッドマウントディスプレイだけでしか見ることができないのはツマラナイ!」というコメントがもっともなのと同じように、「空気流れる空に向かって飛んでみたい!」というコメントも、確かにその通りとしか言いようがありません。
…というわけで、今日はその「空気流の中を飛び回りたい」という要望もに応えるための対応作業をしてみました。
そんな作業をしてみたら、偶然というものは恐ろしいもので、まさに今日は『第64回オープンCAE勉強会@関東(流体など)』が会場【秋葉原】で開催されています。
秋葉原を流れる空気を流体計算し、その場所に立ちVR/AR的に流体計算結果を眺めることができて、その秋葉原で今日まさに流体計算の集いが開かれている!?…というわけで、スマホで秋葉原空気流のVR表示を行う話を、今日は秋葉原で紹介してみました。
2017-04-18[n年前へ]
■たった2枚のスマホ写真から、自動でリアルなCG素材を作ってみよう!?
スマホを使って、(スマホ付属のライト点灯有無による)2枚の撮影画像から対象物の素材情報(反射特性や凹凸分布)をキャプチャする研究があります。原理は単純で、一般的に照明光が方向性を持つ普通の環境下で撮影した写真からは、同じ方向を向く領域が抽出できるし、照明ライトを点けた写真からは、(撮影画像内の各領域に対する)照明方向と撮影方向がわかるので、それらを組み合わせると、色んな情報がわかるよね!という内容です。…その研究内容が、最近NVIDIAサイトで最近WEBサービス(Photo To Material: 2shot)化されました。
これは面白そう!というわけで、使ってみた結果が下のようになります。左2枚の写真が、黒皮的な素材をスマホで撮影した画像で、右の画像がWEBサービス(Photo To Material: 2shot)で生成された素材データを使ってCGレンダリングした画像です。…わかりにくいかもしれませんが、たった2枚のスマホ撮影画像から、対象物の色や3次元形状などが得られていることがわかります。
ためしに、畳をスマホで撮影して・その撮影画像から生成した素材データを使ってCGレンダリングを行ってみると、下の画像のようになります。…わかりにくいかもしれませんが、3次元情報や色やさまざまな情報が得られていることがわかります。
処理可能な撮影対象は、(規則的である必要は無いのですが)似たような模様が繰り返されているパターンに限られます。けれど、目の前にある素材を「記録」して「CGなどで使ってみたくなる」ことも多い…かもしれません。そんな時、このNVIDIAのサービスはとても役立つに違いない!というわけで、もう少し遊んでみようと思います。
2017-04-23[n年前へ]
■Ricoh Theta用の極座標自動ステージを作ってみよう!(その心は、どちらもRなθと解きます)
これまで、今や誰もが持ち歩いているスマホを使った手持ち移動撮影で、大径レンズを取り付けたカメラにような画像を作り出してみたり(「手持ちスマホ撮影動画からの超巨大開口レンズ撮影」に挑戦してみよう!? )、あるいは、全天周を撮影することができるRicoh Theta Sカメラを使って、ありとあらゆる情報を手に入れてみようと遊んでみたりしてきました(Ricoh ThetaSで全天周/HDR/立体動画の撮影に挑戦してみる、Ricoh Theta S 撮影動画で3次元の世界を撮影してみよう!?)。
今日は、それらの続きをやってみよう!というわけで、全天周カメラRicoh Theta用の極座標自動ステージを作って、いくつかの撮影&後処理を行ってみました。
まず、左下は試行錯誤的に作っている(途中の)自動制御ステージです。ステージを動かして違う場所から撮影した写真を使えば、もちろん立体的な映像を作り出すことができます。…というわけで、試しに作った立体視用画像が右下の画像です。
2つの視点から見た映像を並べれば立体的な映像を感じることができるのと同様に、複数視点からの撮影画像を解析すれば、立体的な世界を再現することができます。…というわけで、自動制御ステージに載せたTheta Sで撮影した画像から生成してみた3次元映像が、下に貼り付けた動画です。
…と、Ricoh Theta用の極座標自動ステージを作りながら、ふとと気付いたことがあります。それは、もしかしたら、あまり目的思考がなく、Ricoh Thetaを使ったRθな極座標系ステージを作ってみたかっただけかもしれない…ということです。(その心は、どちらもRなθと解きます)
2017-04-30[n年前へ]
■スマホ(BLE)から動かせる街中スナップ用の(Ricoh Theta S用)2軸自動制御アームを作ってみる。
先週、Ricoh Theta用の極座標自動アームを作った。それを旅先で持ち歩き・街中で2軸アームを 動かしつつ気軽なスナップ写真を撮るために、今日は「ステージ制御をスマホ(iPhone)からできる」ようにしてみました。作戦は、iPhoneとアーム制御ボード間をBluetooth(BLE)で繋ぎ、iPhone上で動くPython環境(Pythonista)から制御アームとRicoh Theta Sを同期制御するという仕組みです。
先週組んだアームはMakeblockのパーツを使っているので、その制御に使ってる(Makeblock製の)ArduinoボードにBluetooth I/Fを繋ぎ、ドキュメントとiOSアプリのLightBlue Explorerで制御ボードにアクセスしてみると、servicesのFFE1中にあるcharacteristics FFE3 に書き込みを行えば、制御ボードに情報を渡すことができることがわかります。…というわけで、「iPad + Pythonista(iOSで動くPython) + BLEで、Genuino101のLチカをしてみた。」を参考に、Makeblock(Arduino UNO)ボードに(適当に俺ルールで決めた5byte一組の)コマンドをiPhone(Pythonista)から送りつけ、そのコマンドをもとに2軸アームを動かしてみることにしました。
というわけで、スマホから制御できる「Ricoh Theta S+制御アーム」を持ち歩き、山道で撮影した(円筒表面上の48枚の)画像から、試しに生成してみたた3次元風景が下の動画です。Ricoh Theta S自体は、全天周撮影を行うカメラですが、それを閉曲面状の複数点で撮影することで、3次元な全天周世界を復元したり、周囲の見た目を再現したり(ライトフィールド)することができます。
ちなみに、iOS Pythonista ( Python ) からの制御コードは、上記参考コードをもとにして、たとえば下のような感じにしています。
def did_discover_services(self, p, error): for s in p.services: print(s.uuid) if 'FFE1' in s.uuid: p.discover_characteristics(s) def did_discover_characteristics(self, s, error): if 'FFE1' in s.uuid: for c in s.characteristics: if 'FFE3' in c.uuid: self.myProcedureWithTheta(c)その上で、(上記コードのmyProcedureWithThetaとしたような部分で)適当なコマンドや値をMakeblock Arduinoボードに渡す(そしてその情報をもとにアームのモータなどを動かす)ことで、持ち歩き用の自動制御アーム付き三脚のできあがり!というわけです。
self.peripheral.write_characteristic_value( c, cmd, False) self.peripheral.write_characteristic_value( c, bytes([step]), False)