Subpixel Clock
Year: 2023
Type: installation
Overview
サブピクセルレンダリングは、液晶ディスプレイの1ピクセルがRGB3色の発光素子で構成されていることを利用した表現手法になる。通常、人間の目にはこの3色が混ざって1つの色として見えるけれど、十分に近づいて見ると、赤・緑・青それぞれの光が分離して見えてくる。この性質を使うと、見る距離によって異なる情報を表示することができる。
このプロジェクトでは、Raspberry Pi Zero 2 Wを8台、HyperPixel 4 Squareディスプレイを8台使って、サブピクセルレンダリングによる時計を制作した。8つのディスプレイを横一列に並べ、それぞれが時刻の各桁やコロンを表示する。離れて見ると普通の時計に見えるけれど、近づくと3Dのボクセル構造が浮かび上がってくる。
2023年10月5日から9日まで開催した「Every Subpixel Matters」展では、時間の経過とともに、透明な立方体のXYZ軸へ割り当てられたサブピクセルフォントがゆっくりと回転しながら変化するインスタレーションとして展示した。時計として時刻を表示すると同時に、展示空間の時間の流れを可視化し、サブピクセルというディスプレイの最小単位を立体的な構造として観察できるように設計した。

Prerequisites
ハードウェア
Raspberry Pi Zero 2 Wを8台、ディスプレイとしてHyperPixel 4 Squareを8台使っている。HyperPixel 4 Squareは720×720の正方形ディスプレイで、各桁を独立した正方形で表示したかったのと、Pi Zeroとの互換性があったのでこれを選んだ。アクリルのミニマルなケースは相樂さんに設計してもらい、壁に横一列で並べられるようにした。
8台すべてWi-Fiでネットワークに接続し、NTPで時刻を同期している。
ソフトウェア
- Python 3: メインの制御プログラム
- omxplayer: Raspberry Pi向けの軽量動画プレイヤー
- D-Bus: omxplayerの制御インターフェース
動画生成
表示する動画は、Unityで制作した「3D Subpixel Viewer」を使ってレンダリングし、画面録画で動画ファイルとして書き出した。
Approach
なぜ動画ベースなのか
Pi Zero 2 Wの性能では、サブピクセルの3Dボクセル構造をリアルタイムにレンダリングすることができない。そのため、あらかじめUnityで描画した映像を動画ファイルとして用意しておき、それを再生・シークする方式を採用した。
3D Subpixel Viewerの仕組み
Unityで作った3D Subpixel Viewerでは、透明なキューブを何層にも重ねてボクセル状に配置している。各ボクセルに色を付けることで、三方向(正面・左・右)から見たときにそれぞれ異なる数字が見えるようになる。単純に色を塗り分けるのではなく、複数の透明レイヤーの色が重なり合うことで文字が浮かび上がる仕組みになっている。
この3Dシーンを画面録画し、動画ファイルとして各Raspberry Piに配置した。
動画ファイルの構造
1つの動画ファイルの中に、数字の0から9、コロン、そしてフリーアニメーション用の映像が、それぞれ特定のタイムスタンプに収録されている。時刻が変わるたびに、対応するタイムスタンプへシークすることで表示を切り替える。
8プロセス並列 + D-Bus制御
8台のRaspberry Piそれぞれで1つのomxplayerプロセスが動いている。各プロセスはD-Busインターフェースを通じて制御され、時刻が変わるタイミングでSetPositionコマンドを発行して動画内の該当フレームへシークする。
omxplayerを選んだのは、Raspberry Piで使える動画プレイヤーの中で最も軽量で、D-Bus経由のプログラム制御に対応していたため。
Experiments
集中開発
核心部分の開発は、2023年9月30日の深夜から10月1日の早朝にかけて、約1日半で一気に進めた。展示の開始が10月5日だったので、かなりギリギリのスケジュールだった。展示開始の前日まで微調整を続けていたし、会期中にも手を入れている。
タイミング調整
最も苦労したのはタイミング調整になる。8台のomxplayerが同時にシークしても、実際の表示タイミングには微妙なズレが生じる。しかもこのズレは桁ごとに異なっていて、一律のオフセットでは対処できなかった。
結局、8つの桁それぞれに個別のオフセット値を設定して、目視で確認しながら一つずつ調整していくことになった。omxplayerのシーク精度自体にも限界があり、フレーム単位での正確な位置合わせは難しかった。複数のタイミング問題が複合的に絡み合っていて、体系的に解決するというよりは、地道に値を追い込んでいく作業だった。
フリーアニメーション
時計としての機能以外に、毎分一定の秒数だけ「フリーアニメーション」が再生される。これは3Dボクセルの回転アニメーションで、8つのディスプレイそれぞれに異なるパターンが割り当てられている。時刻表示の合間に、サブピクセルのボクセル構造そのものを見せる演出として入れた。
配線
この展示作品の配線についてはこちらのページに説明がある。
Findings
同期の難しさ
8台の独立したデバイスを完全に同期させることの難しさは、実際にやってみて初めて実感した。ネットワーク経由のNTP同期だけでは不十分で、動画シークのタイミングまで含めると、予想以上に多くの変数が絡んでくる。最終的に動作する状態にはなったけれど、もっと良いアプローチがあったかもしれないとは思う。
距離による見え方の変化
サブピクセルレンダリングの面白いところは、見る距離によって見え方がまったく変わること。離れた場所からは普通の時計として時刻が読めるけれど、近づいていくと数字が崩れて、RGBの色の帯が見えてくる。さらに近づくと、個々のサブピクセルの発光が識別できるようになる。
展示では、来場者が自然と画面に近づいたり離れたりしながら見ている様子が多く見られた。この「距離」という物理的な行為がそのまま体験になっているのは、スクリーンベースの作品としては珍しい性質だと思う。 (H.J.)
展示全体の時間を表現する装置として、時計は欠かせない要素だった。時刻の更新に合わせて3D Subpixel Fontが回転しながら変化し続けることで、サブピクセルフォントの立体的な構造や、XYZそれぞれの面に文字がレイヤー状に配置されている仕組みを、静止した表示よりも直感的に伝えることができた。
一方で、展示空間や設置位置の制約から、離れた場所から時刻全体を視認しやすい時計として構成することは難しかった。しかし、変化の頻度が高い秒表示の部分では、多くの来場者が足を止め、ディスプレイに近づいて動きを観察する様子が見られた。
また、3D Subpixel Fontは本展示の中心となる概念であり、XYZそれぞれの面にサブピクセルの文字が重なって配置される構造を説明する際にも有効だった。時計という誰もが理解できるモチーフを通して来場者との対話が生まれ、サブピクセルレンダリングや立体的な文字構造について自然にコミュニケーションを始められるきっかけとなった。(T.Y.)
Credits
プログラミング: Junichiro Horikawa
企画・制作: Taro Yumiba, Sonoka Sagara
Last updated: 2026-07-16
