お風呂でスクリーンに浸かる! フロジェクションマッピングに挑戦

今年もProcessing Advent Calender 2013に参加しました。今回はごく単純なプロジェクションマッピングの話題です。やり方は工学ナビ:Processingで手抜きプロジェクションマッピングを見ていただければOK!

プロジェクションマッピングの歴史についてはいまさらプロジェクションマッピングを追う!の記事が分かりやすいですので、ぜひご覧ください。

――以上――

というわけにはいかないので続きます。

でも、これから紹介するものはそんな大層なものでもなく、Processingのわずかなプログラムとプロジェクター、そして風呂があればできる単純なものです。

風呂……そうです。風呂の水面に映像を投影する、俗にいう風呂ジェクションマッピングというやつですね。

プロジェクターはなんの湿気対策もなく素っ裸で配置するので、スリル満点というか、壊れそうなのが懸念でしたが、扉のそばだったのでそれほど湿気はありませんでした(短時間では)。

むしろ高い位置から投影するために椅子の上に三脚を乗せたりしてたのが危なかったです。以前、Kinectをカーテンレールから落として、こんな有り様にしてしまった戦いの記憶が蘇りました。

※今回、Kinectは使用しません。KinectをProcessingから使うサンプルゲームは遊んで作るスマホゲームプログラミングなどで解説してます(for Androidなのに)ので、興味がありましたらぜひ。

お風呂の水が透明な場合は、バスタブの底面や側面に映ります。

水面に映したい場合は、しずかちゃんの憧れる牛乳風呂にするとか、
薬用ソフレなどの入浴剤をたっぷり入れるなどして、なるべく白い面を作っておくと綺麗に表示されます。

スクリーンの角を右ドラッグ(Macの場合はCTRLを押しながらドラッグ)すると、
スクリーンの形状を変形して、お風呂の水面の形にあわせられます。
最初にプロジェクターでお風呂の水面全体が映るように三脚その他を駆使して頑張りましょう。

本来は真上から真下に向けて投影するのがベストですが、そうするのは設置が難しく、湯気、落下、感電、その他悲劇が待っているかもしれませんのでご注意を。

真っ暗にしなくても映ってるのは見えましたが、分かりやすいようにしてテスト。
水面が光ってること自体が新鮮です。

マウスドラッグでカラフルな球を描けます(座標は変形前の座標)。

(撮影時に使った前バージョンのプログラムはカラフルな箱でした)

なんてことはない、単に水面の色が変わったり、絵や模様が出たりするだけなのですが、
実際にお風呂で浸かってみると、なんか楽しいです。

スペースキーでモード切り替え。
「なにもしない→タイル状に白と赤の箱を表示→ランダムに箱を表示→ランダムに球を表示」
を繰り返します。

水面に絵が出るなんとも言えない違和感があり、自分がその中にいて色を触るとぐにゃぐにゃ変形したり、不思議な感覚です。

こういう銭湯があってもいいんじゃないかと思ったりしました。

※レーザーショーのある温泉施設とかはあります。

あと同時に窓シミュレーターのように壁にもバーチャルな窓を作ったり、地平線テープみたいな謎の空間にするのも面白そうです。

プログラム冒頭のIS_DEVをtrueにすると(デフォルトでtrue)、風呂の背景画像の上にスクリーンを変形して投影しているような、開発用のテストモードになります。

これを使うと、プロジェクターが無くてもプロジェクションしている気分に。

Bキーで背景画像切り替え。dataフォルダに入っているscreenBG0〜6の画像を順番に切り替えます。

プログラム冒頭のIS_FULLSCREENをtrueにすると(デフォルトはfalse)、
フルスクリーンでプログラムを起動します。
プログラムはESCキーまたはQキーで終了させられます。

Processingで書いたプログラムはこちら。250行ほどです。

最後に、動かしている様子を動画で簡単にご紹介。

クリスマスツリーの飾り付けのようにしたり、キラキラ輝く南の海のようにしたり、
青の洞窟のようにしたり、札束風呂にしたり、
溶岩風呂や、クリームシチュー、大理石に入浴したり、
ミクでも、目玉おやじでも、スライムでも好きなキャラと入浴したり
サメが追ってくるようにしたり、
人や血が湧き出てくるようなホラーテイストにしたり、
いろいろ応用できると思いますので、気が向いた方はぜひ。

enjoy it!

続報

2014年4月25日
フジテレビ・スーパーニュースでバージョンアップ版をお披露目しました。

2014年7月28日
風呂の水面+浴槽にも投影する、風呂ジェクションマッピング2を自宅で撮影して、
動画を公開しました。



Trackback(0)