Raspberry Pi 3 にシャットダウン/リブート/再開ボタンを追加する
概要
Raspberry Pi 3にシャットダウン、およびその他のボタンを追加してみました。 この記事での自動起動の設定方法は、Ubuntu MATE16.04およびRaspbian Jessie(要はsystemdのある環境)に対応しています。それより以前のバージョンのOSであれば、rc.local という設定ファイルを使う手法のほうが有効かとおもいます。なお、pythonスクリプトそのものは他のバージョンにも対応すると思います。
※自分はUbuntu MATEで試しています。Raspbian Jessieについては未確認でして、動作しない場合はお知らせください。
twitter.comRaspberry pi 3にシャットダウンボタンつけたった。
— はむ! (@hammmm) 2016年11月13日
持ち出し時とかにネットつないでsshでshutdownとかしなくて済むので便利。赤ボタンがシャットダウン、黄ボタンがリブート、緑ボタンがシャットダウン後の復帰(GPIO3)。aitendoの薄膜スイッチがぴったり。 pic.twitter.com/e9arM7HPdR
https://twitter.com/hammmm/status/797662568697344000
なぜシャットダウンボタンが必要なのか?
Raspberry Piを外に持ち出して使おうと思ったときの1つの問題点として、「シャットダウンできない」という問題があります。
いきなり電源ケーブル(マイクロUSB)を抜けば良くない?
ラズパイをシャットダウンせずに電源を抜くと、SDカードが壊れて動かなくなる可能性が一定(利用状況にもよりますが数%程度)あります。 ラズパイのOSであるLinuxは絶えずファイルシステムにデータを読み書きしており、特に書き込みが中途半端な状態で突然電源が切れると、SDカードのデータの状態そのものが不安定となり、読み込みできない状態になってしまうことがあります。
なお、いきなり電源ケーブルを抜いても問題ないようにする方法が一応あり、それはファイルシステムをREAD ONLY(書き込み不可)にするというものです。書き込みできなければ破壊も起こりません。場合によってはそれもアリですが、そうすると後から編集等もしづらくなりますので、良し悪しかと思います。
一般的なシャットダウン方法について
一般的に、シャットダウンする方法は以下の方法があります。
方法 | 説明 | 接続するもの | 重量 |
---|---|---|---|
GUI | マウス操作でGUIメニューから | HDMIモニタ,USBマウス/キーボード | 1kg |
CUI | ターミナルで sudo shutdown -h now等 | HDMIモニタ,USBキーボード | 800g |
ssh | ネットでつないでsudo shutdown -h now 等 | wifiアクセスポイント(テザリング等)、ノートPC | 1.5kg |
重さもありますが、いろいろ接続したり準備も必要です。 そこで、今回の方法ならほとんど重さの追加もなく、ボタン一発で簡単にシャットダウンできるようになります!
今回のシャットダウンボタンの実装方法について
Raspberry Piには、「GPIO」という、電気工作などに使える汎用の入力ピンがありますが、ここにボタンなどを接続すると、プログラムからボタンのON/OFFを読み取ることができます。 そこで、常時実行しているプログラムで、ボタンの状態を監視してあげて、ボタンが押されたらシャットダウンコマンドを発行するようにしてあげます。
再開ボタンについて
シャットダウンボタンと再開ボタンは全く異なる仕組みで動作します。
http://elinux.org/RPI_safe_mode によれば、GPIO3をGNDに落とすと(GPIO3とGNDを一時的に接続すると)、シャットダウン後の状態から再起動させることができるそうですので、これを利用してみます。
ただし、注意として、GPIO3はデバイスとのI2C通信に利用するピンと同じピンなので、I2Cデバイスと共存させたい場合は分岐させるなど工夫が必要と思います。
なお、シャットダウンボタンと違い、再開ボタンについては、動作のためにソフトウェアのインストールは不要です。
材料
- Raspberry Pi 3 (2やタイプBなどでもいけると思いますが、未テストです)
- ボタン: aitendoの薄膜スイッチ 3ボタンタイプ www.aitendo.com
- ケーブル: aitendoのオス-メス ジャンパワイヤ 4本分 www.aitendo.com
- OS: Ubuntu MATE (16.04) または Raspbian Jessie
Theta Sやウェブカメラをラズパイ上のgstreamer+HLSでストリーミング配信してGearVRとかで再生
- 概要
- HLSとは?
- 対応プレイヤー
- HLS配信の難しいところ
- HLSとは?
- 実装
- 今回の手法
- 前提
- gstreamerをインストール
- ストリーミング実行
- Theta S向け
- 解説
- h.264対応USBウェブカメラ向け
- その他のUSBウェブカメラ向け
- gstreamer動作確認
- ウェブサーバー(nginx)設定
- ブラウザ再生向けhtmlファイル
- 再生方法
- Unity,VLC(ウェブブラウザ以外)
- ウェブブラウザの場合
- Tips
- Theta S + gstreamerでのframerate指定がやばい
- できなかったこと
概要
前回mjpegをmjpegストリーマーで配信する方法を紹介しましたが、少なくともUnity上ではfpsがあまり出ない欠点がありました。
今回は、Raspberry Pi 2でWebCamやTheta S(live view)からの動画を、gstreamerというソフトウェアを使ってHLS(HTTP Live Streaming)方式でストリーミング配信する方法です。
- メリット
- デメリット
- 現状では録画時間と再生時間の間に30~60秒前後の大きなラグが生じる
前回と同じような構成で配信できます。
HLSとは?
HTTP Live Streamingの略で、Appleが定めた、httpだけでストリーミングを行うための仕様です。> HTTP Live Streaming (HLS) - Apple Developer
以下は自分の今の認識ですが、仕様からするとおかしいところがあるかもしれません。
Apacheやnginxといった一般的なウェブサーバーで以下のファイルを配信することで、ストリーミング配信を実現できます。
-
- 中に実際のストリームファイルへのリンクURLが書いてある。
連番のストリームファイル(stream00001.ts, stream00002.tsのような連番ファイル)
- こちらに動画が数秒分ずつ入っている。
gstreamer等を使って、新しい連番ストリームファイルを生成して、ファイルを置くたびに.m3u8ファイルを書き換えていくことで、プレイヤーが最新の情報を取得できるようにしておきます。
これを再生する動画プレイヤー側は、まず.m3u8ファイルを読み込んで、ストリームファイルへのリンクを取得し、さらにリンクをたどってストリームを取得します。m3u8には複数のストリームファイルが書かれているので、順番に読んでいくことができます。定期的にm3u8ファイルを読み込み直すと、更新された情報を得ることができ、さらに新しい連番ストリームファイルを得ることができます。
対応プレイヤー
ブラウザ系 (htmlファイル)
ブラウザ上で再生するためにはvideoタグが書かれたhtmlファイルも一緒においておく必要があります。
直接起動
HLS配信の難しいところ
m3u8をネットから読めるようにウェブサーバーに置くまでは良いですが、.m3u8の中に書かれたストリームファイルのURLもちゃんと読める場所(ホスト、アドレス)を示している必要があります。 たとえばですが、Bonjourが有効な環境で読める なんとか.local といったアドレスを.m3u8 の中のURLに入れてしまうと、Bonjourが無効な環境では再生できなくなってしまいます。 なお、EasyMovieTextureでは、m3u8ファイル内のストリームURIについて、 /stream/stream00001.ts のようにホスト名を省略することが可能でした。他のプレイヤーでは対応していない可能性がありますが、一応仕様的にはアリっぽいです。(※後述「手法A」)
実装
今回の手法
- gstreamerのhlssinkを利用して.m3u8ファイルと.tsファイル群を生成します。
- 重い処理であるh.264へのエンコードに、OpenMaxアクセラレーションを利用するomxh264encを利用します。
- nginxをdockerコンテナで起動し、HTTP配信を担わせます。
前提
以前の記事で書いたような、HypriotOSを入れた状態を想定していますが、通常のRaspbianからでも実行可能と思います。(dockerまわりは自分でなんとかする方向ということで)
gstreamerをインストール
sudo apt-get update sudo apt-get install gstreamer1.0-*
ストリーミング実行
Theta S向け
準備
前回と同様、THETA SをLIVE VIEWモードで起動して、ラズパイにUSB接続してください。そこで、/dev/video0 というデバイスが現れているかどうかを確認してください。
手法A : ストリームファイルをホスト名抜きのパス指定する方法
最後のplaylist= のところがホスト名を除外したパスになっています。AndroidやiOSのVLCではこの方法でいけます。この時点でホスト名とか意識しなくて良い分、楽といえます。仕様上もPlaylist(m3u8)に対して相対指定ができると書いてあるので良さそうです。
mkdir /var/www/stream sudo gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720 ! jpegdec ! omxh264enc target-bitrate=2000000 control-rate=variable ! video/x-h264,profile=baseline ! h264parse ! mpegtsmux ! hlssink max-files=8 target-duration=5 location=/var/www/stream/segment%05d.ts playlist-location=/var/www/stream/output.m3u8 playlist-root=/stream/
mkdir /var/www/stream sudo gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720 ! jpegdec ! omxh264enc target-bitrate=2000000 control-rate=variable ! video/x-h264,profile=baseline ! h264parse ! mpegtsmux ! hlssink max-files=8 target-duration=5 location=/var/www/stream/segment%05d.ts playlist-location=/var/www/stream/output.m3u8 playlist-root=http://(ラズパイのホスト名またはIPアドレス)/stream/続きを読む
THETA Sのmjpegをラズパイで受けてLANでUnityに配信する方法
はじめに
ラズパイでMJPG-Streamerを使って、THETA SのmjpgライブビューをLAN内に配信して、ブラウザやUnityでそれを受けて再生する話です。
RICOH THETA Advent Calendar 2015 LT大会!で以下のデモをした時の手法です。
懇親会の片隅でこんな感じのものをデモらせてもらっていました。THETA+ラズパイとGearVRを同じLANにつないでストリーミングしてテレイグ的なもの。体験していただいた方もそうでない方もありがとうございました! #thetalt pic.twitter.com/qm1fCLCQvb
— はむ! (@hammmm) January 27, 2016
とはいえ、今回の方式は以下の問題があり、実用的かというと微妙ではあります。
- Unityでの利用時にfpsが低い(これはラズパイ側の問題ではなく、主に受信側Assetのデコードが遅いため)
- 遅延が大きくなりがち(数秒程度)
- Android(Gear VR)で動かす場合にIP指定になり、いちいちIPを調べたりと面倒
でも誰かの役に立つかなということで公開しておきます。
ラズパイでMJPG-Streamerを動かす (docker利用)
まず、前回記事の手順でRaspberry Pi 2でHypriotを動かした状態を前提とします。
※なお、Hypriotでなくても、dockerがインストール済みで、UVC(USBカメラ)のドライバが入っていれば良いはずです。標準raspbianからの動作は未確認です。
そして、sshでラズパイに入ります。
$ ssh pi@pihost.local
以下の手順を実行してください。
- THETA SをLIVEモードで起動する
- THETA SをラズパイのUSBポートにつなぐ
ls /dev
として/dev/video0
というデバイス(カメラデバイス)ができているのを確認。なければTHETA Sの状態やUSB接続を確認する。docker run -p 8080:8080 -v /dev:/dev --privileged mhamanaka/rpi-mjpg-streamer-uvc:0.1
を実行する
すると、dockerイメージをダウンロードして、さらに自動的にmjpg-streamerが起動して配信がはじまります。
ラズパイのホスト名がpihost.local
だとすると、ブラウザで
http://pihost.local:8080/
にアクセスすれば、このようなmjpg-streamer の操作画面が見られます。
また、mjpeg配信のURLは
http://pihost.local:8080/?action=stream
のようになります。
※ なお、なんたら.local
はBonjourに対応していないと解決できないので、Bonjourの入っていないマシン(Windows,Android等)からアクセスする場合は、ホスト名のかわりにローカルIPで指定してください。(「ラズパイIPの調べ方」の項参照)
Docker Hubのrpi-mjpg-streamer-uvcページはこちら。
続きを読むHypriot(Raspberry Pi)でBUFFALO WI-U2-433DM (RealTekチップ) Wifiドングルを動かす方法
BUFFALO WI-U2-433DM は、Realtek8812AUを搭載しており、IEEE802.11ac,a,n,g,b に対応しているという、わりとハイスペックなUSB Wi-Fiドングルなのですが、これをHypriotなRaspberry Pi 2で動かそうとしてちょっと苦労したのでメモ。
ちなみに、 PLANEX GW-USNano2 であればHypriotのデフォルトで入っているので(この記事のような)面倒がないです。
概要
基本の流れはここに書かれています。 Realtek wireless chipset: install the right driver - Easy Linux tips project (Realtek RTL8812AU chipset (0bda:8812)の項)
こちらのリポジトリのドライバをインストールします。 GitHub - abperiasamy/rtl8812AU_8821AU_linux: rtl8812AU_8821AU linux kernel driver for AC1200 (801.11ac) Wireless Dual-Band USB Adapter
準備
$ sudo apt-get update $ sudo apt-get install -y linux-headers-$(uname -r) build-essential git linux-image-rpi-rpfv linux-headers-rpi-rpfv dkms bc $ cd $ git clone https://github.com/abperiasamy/rtl8812AU_8821AU_linux $ cd rtl8812AU_8821AU_linux/
Makefileの修正
Makefileを編集します。以下のような部分を見つけてください。
CONFIG_PLATFORM_I386_PC = y CONFIG_PLATFORM_ANDROID_X86 = n CONFIG_PLATFORM_JB_X86 = n CONFIG_PLATFORM_ARM_S3C2K4 = n CONFIG_PLATFORM_ARM_PXA2XX = n CONFIG_PLATFORM_ARM_S3C6K4 = n CONFIG_PLATFORM_ARM_RPI = n CONFIG_PLATFORM_MIPS_RMI = n CONFIG_PLATFORM_RTD2880B = n
これを以下のようにしてください。
CONFIG_PLATFORM_I386_PC = n # y -> n に変更 CONFIG_PLATFORM_ANDROID_X86 = n CONFIG_PLATFORM_JB_X86 = n CONFIG_PLATFORM_ARM_S3C2K4 = n CONFIG_PLATFORM_ARM_PXA2XX = n CONFIG_PLATFORM_ARM_S3C6K4 = n CONFIG_PLATFORM_ARM_RPI = y # n -> y に変更 CONFIG_PLATFORM_MIPS_RMI = n CONFIG_PLATFORM_RTD2880B = n
make
$ make make ARCH=arm CROSS_COMPILE= -C /lib/modules/4.1.12-hypriotos-v7+/build M=/home/pi/rtl8812AU_8821AU_linux modules make[1]: Entering directory '/usr/src/linux-headers-4.1.12-hypriotos-v7+' CC [M] /home/pi/rtl8812AU_8821AU_linux/core/rtw_cmd.o ./scripts/recordmcount: 1: ./scripts/recordmcount: Syntax error: end of file unexpected scripts/Makefile.build:258: recipe for target '/home/pi/rtl8812AU_8821AU_linux/core/rtw_cmd.o' failed make[2]: *** [/home/pi/rtl8812AU_8821AU_linux/core/rtw_cmd.o] Error 2 Makefile:1384: recipe for target '_module_/home/pi/rtl8812AU_8821AU_linux' failed make[1]: *** [_module_/home/pi/rtl8812AU_8821AU_linux] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.1.12-hypriotos-v7+' Makefile:1049: recipe for target 'modules' failed make: *** [modules] Error 2
あれ?エラーだ。 というわけで、対策します。 ちなみに、ここでエラーがなければ 「では、インストール。」の項目に進んでしまって構いません。
続きを読むDocker海賊Hypriotを使ってRaspberry Pi上でゼロから任意アプリを15分で起動する方法
概要
HypriotというLinux Distributionを15分ぐらいでラズパイにインストールして、Dockerで楽にアプリを動かしたり、環境構築したりしようっていう話です。 問題が発生しない限り、ラズパイにキーボードやディスプレイをつける必要もないです。
※15分かどうかはダウンロード速度に主に依存するので、15分ですまなくてもどうかお許しください。
用意するもの
- Raspberry Pi 2
- Wifiドングル(USB接続, Raspberry Piと互換性のあるもの)
- Mac OS Xのマシン + マイクロSDカードリーダ・ライタ
- SSID, パスワードがわかっているWifiアクセスポイント
Raspberry Pi 2 を動かしていて不満なポイントは?
以下のようなことです。
- apt-get等でインストールにかかる時間が馬鹿にならない。
- バージョンの問題等で失敗することも多く、ごそごそ修正する羽目になる
- しばらく環境をいじっていると、どこをどういじったかわからなくなり、クリーンな状態からどうすれば、動かしたいアプリの実行環境になるのか、完全には把握できなくなる。
- (きっちりシャットダウンせずに)電源抜き差しすることでSDカードが壊れやすく、壊れると上記理由で復活が面倒でガッカリする
Dockerの利用
上記の問題点は最近話題のDockerでおおかた解決可能なものです。環境セットアップをDockerfileの形で書いて残しておくこと、イメージをビルドしたら、docker hub等のリポジトリにアップロードしておくことが必要ですが、それさえできれば、以下のようなメリットが得られます。
- dockerだけ入った素の環境から、 docker run 一発で高速、自動的にアプリの動作環境が再現できる
- Dockerfileがあれば、どう作られたかは明らか
- 公式を含む、他の人が作ったDockerイメージも流用、派生できるため、大きなモジュールのインストールに時間を割く必要もない。
便利!
残る課題
しかしながら、Dockerだけでは解決しない問題があります。それは、Dockerを動かす環境自体を作るところも結構面倒ということです。少なくとも、以下のようなものが必要でしょう。
面倒だ!
Hypriot! (はいぷらいおっと?はいぷりおっと?)
そこで、HypriotというLinux Distributionの出番です。
公式: Docker Pirates ARMed with explosive stuff · Docker Pirates ARMed with explosive stuff
Hypriotのとくちょう
- ロゴがドクロマークで怖そう。
- 公式サイトの構成がイマイチで情報を探しにくい(汗)
- RaspberryPi (ARM)で動作するDebian系Linuxディストリビューション (基本はRaspbianらしいです)
- 余分なプログラムが入っておらずサイズが小さい
- Wifi, Bonjour (avahi), ssh等がセットアップ済みのイメージが用意されており、Wifiドングルさえ挿しておけば起動後、即sshで外部からのコントロールが可能
- 最新のDocker/Docker Machineが入っており、すぐにDockerを利用できる。
まあ、要するにDockerに最適化された楽ちんなRaspberry Pi向けLinuxです。
※ ちなみに、ドクロの下にでかでかと "Docker Pirates ARMed with explosive stuff" とか書いてありますが、直訳すると 「爆発物を装備(ARM)したDocker海賊」みたいな感じで、Dockerと、Raspberry PiのCPUアーキテクチャであるARMをうまくひっかけつつカッチョいい感じのイメージにしたかったという意思がひしひしと伝わってきます。一部タイトルに頂きましたw
Hypriotのインストール手順 (Mac OS X向け)
今回はflashという名前の、hypriotが用意したスクリプトを使います。 このスクリプトは、Mac OS XとLinux向けになっています。
Windowsの場合は、残念ながらこのスクリプトは使えません。 別の方法でSDカードにイメージを書き込んで、occidentalis.txtを手動で修正するなどしてください。
GitHub - hypriot/flash: Command line script to flash SD card images for the Raspberry Pi
続きを読むTHETA SからOculus RiftへUSBライブストリーミング with Unity (Skybox編)
先日、以下の記事を公開しましたが、VRDMに参加したとき エーエフ @afjk01 さんに伺って、もう1つ手法(Skybox)があることがわかりましたので、今回はそちらの方法を紹介します。
概要
Unity内に配置したカメラにSkyboxを設定して、そのSkyboxにTheta Sのライブ動画を流し込むことで、前回の記事と同様にTheta Sの360度ライブ動画を背景にすることができます。Oculus Rift向けとしていますが、Unityの設定でvirtual realityのフラグをONにしているだけですから、他の用途にも利用可能と思います。
今回もまた!Noraさんのご提供されているシェーダー(Stereoarts Homepage)を利用しています。感謝は是非Noraさんに!
今回のプロジェクトをUnity上で動かすとこんなかんじです。
ダウンロード
ソースコード(Unity 5.3.0f4向け):
https://bitbucket.org/mhama/thetaoculuslivestreaming
実行ファイル(Windows向けexe, Oculus runtime 0.8対応):
Theta S+Oculus DK2 でライブ動画(skybox - BowlRoll
自分で設定する場合の手順
- Main CameraにSkyboxコンポーネントを追加する。
- Skyboxコンポーネントのインスペクタ内のCustom Skybox項目に、Noraさんのパッケージ内にあるThetaRealtimeSkyboxマテリアルをセットする。
- WebCamDrawerスクリプトをAssets内にコピーする。
- AddComponentでWebCamDrawerスクリプトを追加する。
これだけです!前回以上に簡単ですね。しかも球体でカメラを囲んだりする必要がなく、シーンを編集するときに邪魔になりにくいのも嬉しいですね。一方で、多少とも何か表示状況をコントロールしたいとなったときに、触りにくいというデメリットはあるかもしれません。
正直今回はNoraさんのシェーダの使い方だけですが、以上です。
THETA SからOculus RiftへUSBライブストリーミング with Unity (Sphere編)
Theta SにはUSB接続でウェブカメラのように使える機能があるのですが、これを使って、Oculus Rift DK2でリアルタイム閲覧する方法について書きます。
(2015/12/23追記)
- 本記事では球体にライブ動画を貼り付けていますが、Skyboxに貼り付けることで同様の効果を得る方法がありましたので、以下の記事で紹介しています。
何が楽しいの?
- 見回すと自分がいる、とか
- 人間という身体ごとは入れない場所に入ったような体験をする、とか
例:「レゴの家に入ってみたい!」 - いつもとは異なる視点から外界を眺めてみる、とか
例:「背の高い人はいつもどういう風景を見ているんだろう?」
といった要は「テレイグジスタンス」ごっこができるツールになります。
参考にさせて頂いたページ
-
Stereoarts Homepage (Noraさん)
- @warapuri さんの高精細天球モデル
内側を向いた細かいポリゴンの天球モデルを公開します。 https://t.co/Wd6Osuqm6X Unityで全天動画等を作りたい場合、これを使ってくださいね〜
— 伊藤周 (@warapuri) 2014, 6月 23
感謝です!
ダウンロード
ソースコード(Unity v5.22プロジェクト): https://bitbucket.org/mhama/thetaoculuslivestreaming
Windows向けexe:
Theta S+Oculus DK2 でライブストリーミング(2 - BowlRoll
内容
- Noraさんのシェーダを使わせて頂きました。 (Assets/ThetaShaderPackディレクトリ以下はNoraさんのzipの構成です)
- そのままでは標準のSphereに使うと反転してしまうため、シェーダにUVのUだけ左右反転するよう改造を行っています。(Theta/RealtimeEquirectangular)
- Assets/SphereModel 以下に @warapuri 氏の高精細天球モデルが入っています。
- そのほかは最低限のものだけ入っています。
自分で作る場合の手順
- シーンにSphereまたは@warapuri 氏の高精細天球モデルSherer100(scale=100,100,100 rotation=0,180,180 position=0,0,0)を配置
- 上記オブジェクトにNoraさんのシェーダ(改)のついたマテリアル「ThetaRealtimeEquirectanguler (Both)」を適用
- 上記オブジェクトにWebCamDrawerスクリプトを追加
- カメラをposition=0,0,0に移動
- Build SettingsでVirtual Reality SupportedとStereoscopic RenderingをONにする
(※Unity5.1以降のVRサポートを利用する場合) - 以上。
使い方
・上記zipを任意の場所に解凍します
・Theta SをUSB配信モードで起動します
・Theta SをUSBでPCに接続します
・Oculus Rift DK2を接続します
・ThetaOculusLiveStreaming.exeを起動します
注意
・終了ルーチンを入れていないので、終了するときはAlt+F4とかAlt+Tabとかで適当に終了してください! 入れました
・標準のSphereを利用している関係上歪みが目立ちます。より精細な球モデルを利用すればより良い絵になると思います。 @warapuri さんの高精細天球モデルで解消しました!感謝!
・今回はお手軽なUSB接続の手法を紹介しましたが、Theta SのHDMI出力をキャプチャできれば、より高精細のライブビュー画像が取得できます。
Enjoy!
履歴
2015/12/6 プログラムの修正(@warapuriさんの天球モデルを利用)
2015/12/6 ややわかりにくかったので題名微修正しました。
2015/12/23 Skyboxを利用した方法を別記事で書いたので、この記事はSphere編と改題しました。
2015/12/23 本記事で用いたシェーダ(ThetaRealtimeEquirectangular.shader)では、手前に物体を描画できないという特性になっていましたが、BitBucketに上げたソースコードでは調整してみました。