回転立体ディスプレイを作ろう④

3Dディスプレイ

前回、64×64のLEDマトリクスを回転させて立体表示をする、回転立体ディスプレイの進捗とこれからやることをピックアップしたわけですが、その後の改良を経てようやく「完成」と呼べる状態になったので報告します。

前回からの変更点

LEDディスプレイを回転軸からずらす

前回はLEDディスプレイの中心を回転軸に合わせていたのですが、今回は中心から少しずらして取り付けました。

これによって回転の重心が安定し、10rps(1秒間に10回転)の高速回転が実現、チカチカ感の少ないより自然な見た目になりました(人間の目は0.1秒ほどは残像として感じるので)。副次的な効果として、前回言及した「正面位置の描画が暗くなる」現象も改善され、正面でもしっかり表示されるようになりました。一方でトレードオフもあって、中心軸周りに「ずらした距離を半径とする円柱状、そしてその後ろ側の描画できないエリア」が発生しています。(どういうことかは前回参照)

立体表示用のデータをUnityで作れるようにする

以下のブログ記事を参照。Unity空間にものを配置して立体表示用のデータにスキャンできるようになりました。動画としてスキャンすることもできます。

LEDディスプレイを裏表の2面に配置

同じLEDディスプレイを裏側にも配置して、表側から180°回転した位置の画像を表示しています。これによってチカチカ感を減らし、明るさを上げる効果を期待しています。ただ、3D表示自体には必須ではないのと、これによってディスプレイの表示面の軸からの距離が大きくなる(=真ん中の表示されないエリアが増える)ので、裏目に出ている可能性はあります。(裏面だけに)

その他、前回からの改良点

・ディスプレイの上側に回転軸を取り付けて回転を安定化

・操作パネルをM5Stack CoreからM5 Dialに変更

・ダイアルを回すことで表示位置(向き)を回転できるように

・アクリルカバーを取り付け

本体スペック

本体サイズ:(幅)x(奥行)x(高さ)=150mmx150mmx230mm
表示エリアサイズ:(幅)x(奥行)x(高さ)=128mmx128mmx128mm
解像度:(直径)x(高さ)x(回転方向)=64x64x192 (ピッチ:2mm/pixel)
回転速度:最大12rps(720rpm)
動画のフレームレート:10fps(回転速度10rps以上の時)
色深度:8色(=RGB3bit、 黒、白、赤、青、緑、黄、マゼンタ、シアン)
※LEDディスプレイは本来高速で点滅させることで細かい色を表現しているので、点滅しながら回転する(位置が変わる)仕組みだと複雑な色を表現するのが難しい。

回転の動力+LEDディスプレイの給電につかったM5Roller485ユニット
回転速度を計測するためのホールセンサ(台座側には磁石が一つあり、回転の始点をホールセンサによって検出、そこから回転速度とLEDディスプレイの描画切り替えタイミングを計算している)
メイン制御はTeensy4.1を使用。LEDディスプレイ2枚の書き込み、SDカード・ホールセンサの読み込み、M5DialとのI2C通信を行っている。LEDディスプレイと一緒に回転している。

実際の表示

裸眼では残像効果のおかげで少しチカチカする程度で自然に見えるのですが、カメラで普通に映すと見たようには映りません。そのため、カメラ設定をいじって露光時間を0.1sに伸ばしています。

球体アニメーション…6色の球体が円柱空間内を移動するアニメーション。

初音ミク(みくみくにしてあげる♪)…MMDからUnityにモデルとモーションを移植して、さらに周囲にオーディオスペクトラムを実装しています。音楽は後付けです。

その他画像

回転していないとき(3Dオブジェクトの断面が高速に推移している)

映像コンテンツはUnityに配置すればいくらでも作れるので、もっと増やしたいですね

まとめ

ハード的な構成は今回でほぼ完成しています。次の検討として、パソコンからのリアルタイムレンダリングがあるのですが、今のTeensy4.1+M5Dial構成では不可能なので別のマイコンで作ることになるかと思います。

しばらくは3Dコンテンツを増やす方向で進めようかなと思います。

コメント

タイトルとURLをコピーしました