
QRコードを立体にして3Dプリントしてみたら、読み取りがめちゃめちゃ難しく、8時間かけた出力物を泣く泣く廃棄。
SNSでは同じように3Dプリントしたら読めなかったというコメントもあり、単純に立体化するのでは難しいのかもしれない。立体化したQRコードはどういう形なら読み取れ、どういう形だと読み取れないのか。いろいろ試してみた。

今回試すきっかけとなったのが上のQRコード。これは、地元のアートイベントの来場者アンケート用に作成したもの。
立体化した理由は、屋外に置くので目立つように側面等をペイントして、QR自体を作品として楽しめるようにしたかったこと。良かれと思って、イベントのテーマに近いカラーで作ったのだが、これが失敗であったとは…。
10種類の立体コードを作り、どれが読み取れるのかを実験する
5cm×5cmのQRコードを、さまざまな条件で立体化して3Dプリントし、読み取れるかを実験する。
段階的に厚みを変えたものや、色や形を変えたものなど。読み取りにはiPhoneのカメラアプリを利用。
以下の画像が作ったもの一覧だ。ぜひ読む前に結果を予想してみてほしい。ちなみに上の画像のQRは5cm厚だ。

QRコードの仕組み
始めにQRコードの簡単な仕組みを知っておこう(読み飛ばしてもOK)。
QRコードは、情報を白黒のモジュール(小さな正方形)の配置で表現する2次元コードで、以下のような仕組みになっている。

- ファインダ:角の3か所にある大きな四角で、コードの向きや位置を特定する。
- アライメント:真ん中に黒点のある四角で、歪みを補正し、モジュールの読み取りを格子状に揃える
- タイミング:縦横の点線状の模様でモジュールの並びを数える基準になる
- データ:上記以外の1つ1つの小さな正方形で、文字や数字等情報を伝える。白を0黒を1として読み取る。誤り訂正用の情報を含むため、一部が欠けても読み取ることができる。
元々工場で使われることを想定されており、歪み補正機能があり、一部が欠けても読み込める仕組みもある。3Dプリントの解像度の低さや、立体化にも強そうだ。一方で白と黒の色のコントラストで読み込むため、立体化による影には弱いのではないだろうか。
立体QRの作り方

お手軽に作るには、GenQRCodeというサイトが便利だ。QRコードの3Dモデルを生成、ダウンロードすることができる。ベースの有無やサイズ調整も可能。3Dプリントでよく使われるSTLの他、カラー情報を持ったOBJ形式なども選べる。
ただし、今回は様々な形状で作成するため、SVGでダウンロードし、3D-CADで立体化した。
また、出力は複数色が使える3Dプリンターで行ったが、1色用の3Dプリンターでも途中でフィラメントを交換することで同様に作ることができる(最後の高さがバラバラなタイプ以外)。
厚みのあるQRコード、読み取れる?

まずは単純に厚みをつけたもの。モジュールの部分を押し出し、表面のみ黒いフィラメントで色をつけた。1mm、1cm、3cm、5cmの高さだ。冒頭の大きなQRコード(以下でかQR)は厚み5cmだったので、3cmくらいで読めなくなるのではないかと予想した。
まず1mm。これは高さをあまり感じないし読み取れると予想。むしろ高さより3Dプリントの粗さによるモジュールのゆがみが気になる。が、さすがQRコード。問題なく読み取れた。

続けて1cm、3cm、5cm。

読み取ると、全てあっさりと、なんの問題もなく読み取れた、読み取れてしまった。
読み取れないかと思っていたのに。読み取れないのをどう工夫して読み取れるようにするか作戦を考えていたのだが、必要なかった。3DプリントしたQRコード、読み取れます。

でかQRはなぜ読み取れなかったのか?
では冒頭のでかQRはなぜ読み取れなかったのだろう?結論からいうと色の影響だった。でかQRは地がオレンジで図が青。同じ色で作ると読み取れない立体QRコードになった。

オレンジが悪いのか青が悪いのか?確かめるため「オレンジ―黒」「白ー青」の立体QRを作った。
これはどちらも問題なく読み取れた。組み合わせが良くなかったらしい。目で見ると2つの色の違いははっきりとしているが、機械的には判別しづらいようだ。

難しいのは2次元⇔3次元で色による読み取りへの影響が変わること。色画面でのシミュレーションでは読み取れるのに実際に出力したものは読み取れないことがある。
また、おもしろいことに、実際に出力したものは読み取れないのに、それを映した写真だと読み取れることもある。やってみないとわからないところがあり、悩ましい。
どこまで読めるのか、難易度をあげる
さくっと読み取り可能なQRコードができてしまった。読めないのをどうにか工夫するつもりだったのだが、こうなったらむしろ「どこまでやったら読めなくなるのか」を探ろう。読み取り難易度の高そうなQRコードの立体化を試してみる。
白黒反転

色の影響が大きいということがわかった。それでは白と黒を反転させたらどうだろうか。これは問題なく読み取れた。ただし、アプリによっては対応していない場合もあるらしいので注意。
小さくなっても読み取れるのか?

次は単純に小さくしてみた。3cm、2cm、1cm。3cm、2cmは読み込めたが、1cmはさすがに無理だった。というかちゃんと出力できず(3Dプリンターは0.4mmノズルを使用)。
1cmは無理だったが、2㎝程度の大きさであれば直接埋め込める製作物も多い。例えば販売する3Dプリントの鉢に取り扱いの注意を埋め込んでおくなど、洋服のタグみたいなことが、3Dプリント単体できそうだ。
穴だらけのQRコード
これまではモジュールに厚みをつけて凸型にしていたが、逆に凹型に、いっそ穴にしたらどうなるだろう?全体に厚みをつけ、モジュール部分を穴にした。ベースは黒で、表面だけ白で作った。

黒い紙の上に乗せると読み取りOK。背景に黒い紙を置かない場合、読み取れる場合と読み取れない場合があった。上の写真では手が見えているが、読み取ることができる。
ばらばらの高さのQR
最後は高さをバラバラにして立体化。高低差は2cm。横から見たら全然読み取れなさそうだけど、正面からなら読めるはず!

やはりスッとは読み取れない。正面からでもだめ…?スマホをかざしてどこからなら読み取れるか回しに回す。と、少しひいて、正面から若干だけ角度をつけると読み取れることを発見。読み取りづらいが、逆に読み取れる角度を探すのがゲームみたいで楽しい。
ちょっと目をひくQRコード
失敗から始まったので苦戦するかと思いきや、ほとんどがうまく行った。始めにレアケースをひいただけで、むしろQRコードの読み取りの優秀さを感じる結果になった。すごいぞQRコード。
優秀さゆえに日常にあふれているQRコード。ついつい流しがちだが、立体になると「これ、読めるのかな?」と興味をもってもらえることが増える気がする。イベントなどで自分のSNSなどを展示するのに使うのはどうだろうか?
あえて特定角度からしか読み取れないQRコードを作って、読み取れた人だけが情報を得られる、という使い方もおもしろいかもしれない。あなたも変なQRコードを作ってみよう!
