ひとりの技術 — 行かなくていい場所
ひとり旅を32回、記録として残してきました。それで分かったのは、 行ける日が年に数日しかないということです。 残りの三百数十日をどうするかが、ひとり時間の本題でした。
屋久島の白谷雲水峡は、雨上がりの早朝に光が苔を透かします。草津の湯畑は、 夜になると木樋の列が舞台のように灯ります。松島の雄島では、誰もいない御堂の縁先に座ると 湾を渡る風と遠い汽笛だけが聞こえます。
どれも実際に行って書いたものです。ただ、こういう記録がいくらあっても、 読んだ人がその場所に立てるわけではありません。 旅の情報は「行ける日」を前提にしていて、その日は年に数日しか来ない。
では行けない日のために何があったかというと、写真と動画でした。 どちらも良いものですが、決定的に足りないものがあります。
写真も動画も、こちらが見る方向を選べません。
撮った人が向けた方向を、そのまま受け取るだけです。
場所にいるという感覚の中身は、たぶん景色そのものではなく 「振り返れば背後がある」という確信のほうです。 画角が固定されている限り、そこには背後が存在しません。
ではなぜ全天球の体験が普及しなかったのか。作るコストが高すぎたからです。 360°カメラで実写を撮るなら現地に行く必要があり、 CGで作るなら、部屋ひとつぶんの3Dモデルとライティングを自分で用意することになります。 個人が「行かなくていい場所」を一つ作るのに、数か月かかっていました。
外れた制約は2つあります。
1つは3Dアセットと生成の民主化。市販のアセット集と生成AIで、 小屋一軒ぶんの什器が最初から揃っている状態から始められます。 自分の場合は暖炉・座布団・ラグ・ロッキングチェア・ランタン・香炉・本の山を既製品から選び、 小屋の殻(床・壁・天井・梁・窓・扉・炉前石)だけ自分で組みました。
もう1つは詰まったときに抜けられること。ここが実は本体です。 3Dは初手からは動きません。実際、アセットを開いた時点で 全マテリアルがマゼンタでした。ジオメトリだけでテクスチャが同梱されていなかった。 以前ならここで終わっていた作業が、原因を切り分けて別パックのPBRを割り当て直すところまで その日のうちに進みます。
| 以前 | いま | |
|---|---|---|
| 場所の中身 | ゼロからモデリング | 既製アセット+自作の殻 |
| 全天球の絵 | 360°カメラで現地撮影 | Cyclesの全天球カメラで焼く |
| 配信 | 専用アプリ・専用機材 | ブラウザだけ |
| 詰まったとき | そこで終了 | 切り分けて当日中に抜ける |
結果として、場所を一つ作るのが「数か月の企画」から「数日の制作」に落ちました。 落ちた瞬間に、行かなくていい場所は作品として成立します。
全天球は正距円筒(equirectangular)で1枚に焼き、ブラウザで裏返した球に貼って 中心から見ます。これだけで背後が生まれます。
cam.data.type = 'PANO'
cam.data.cycles.panorama_type = 'EQUIRECTANGULAR' # 4.x は cam.data.panorama_type
cam.location.z = 1.12 # 立つ高さではなく、座った目線
sc.render.resolution_x, sc.render.resolution_y = 6144, 3072 # 2:1
高さを1.12mにしているのが要点です。立った目線(約1.5m)で焼くと、 同じ部屋がただの内観写真になります。座った目線にすると、 そこに留まっている人の視界になる。数字を1つ変えるだけで体験が変わりました。
全天球は焼いた瞬間に止まります。止まった場所は、数秒で「絵」に戻ってしまう。 そこで炎だけをリアルタイムで重ねました。 火の粉のパーティクルと加算合成のグローを、暖炉の方位に固定して置きます。
さらに、その炎を呼吸のガイドと同期させています。 吸う4秒で明るく、吐く6秒で沈む。 見る人の呼吸と画面の明滅が合うと、絵ではなく空間として認識されます。
window.__onBreath = (phase) => CabinRoom.setBreath(phase); // 呼吸→炎
ページを開いた瞬間に没入は始まりません。むしろ、いきなり音が鳴ると閉じられます。 そこで入室のためのひと押しを挟みました。 押すと音声が解禁され、焚き火の環境音が入り、その後に「火のそばに座る」で全画面へ移ります。
技術的にはブラウザの音声自動再生制限への対処ですが、 体験としては玄関です。制限をUIの言い訳ではなく、 儀式に変換すると、そのまま没入の装置になります。
没入させることと、閉じ込めることは違います。WebGLが動かない端末、 アニメーションを減らす設定にしている人には、同じ場所の静止画を返します。 全画面には常に出口を置きます。
ひとり時間の道具は、いつでも抜けられるから安心して沈めます。 抜けにくくするほど滞在時間が伸びる、という設計は、この領域では逆効果です。
ドラッグで見回せます。暖炉の火は呼吸に合わせて明滅し、 雨・火・森・風の環境音はその場で合成しています。瞑想タイマーとベルつき、10言語。 インストールもアカウントもいりません。
小屋に入るそして実際に出かける日のために、全国47都道府県の施設を「ひとりが標準か」の一軸で 作り直した地図があります。確認済みの817件には根拠のURLを添えてあります。 載っていない店を見つけたら、そこから知らせてください。
地図をひらく| 症状 | 原因 | 抜け方 |
|---|---|---|
| 全体がマゼンタになる | アセットがジオメトリのみでテクスチャ未同梱 | 欠落と決めつけず、まず参照先を確認する。無ければ別パックのPBRを、Object座標+Boxプロジェクションで割り当てる(UV不一致を回避) |
| 全天球レンダが終わらない | ボリュームフォグ。全天球のレイマーチで固まる | ボリュームを使わない。霧は後処理で足す。ショット単位の時間制限も併用 |
| クローンが遠くに出現する | メッシュ原点とジオメトリがずれている | 座標直指定をやめ、バウンディングボックス基準で配置する |
| GPUが使われず異常に遅い | 初期設定の状態ではGPUが有効になっていない | デバイス種別を指定し、デバイス一覧を再取得してから描画デバイスをGPUにする |
| 音が鳴らない | ブラウザの自動再生制限 | 制限を隠さず「入室」ボタンに変える |
ひとりの時間は、我慢して埋めるものではなく、選んで組み立てるものだと思っています。
行ける日は行けばいい。行けない日のために、行かなくていい場所を作りました。
ひとりで入れる店を一本の軸で作り直した話は ひとり基準 に、 ひとり時間の考え方は ひとりの技術 に、 他の型は 新しい形の研究 に置いています。