写真の深度には上下がない。重力とロープは手動で指定する方式にした

執筆・制作:何でも自作する人(運営者について)

個人開発 / Webアプリ / ゲーム開発 / AI


写真から相対的な深度を取り出して、その上を歩き回れるようにする自作アプリ「Photo World」で、「深度には上下の区別がない」と指摘されました。そのうえで「上の足場にロープを掛けて登る遊びがしたい」という希望も出ました。

そこで、写真の上下を手動で指定する独立モードを作りました。写真から重力や壁を自動で認識するのではなく、少数の手動の指定を物理のルールに変換する方式です。

深度には上下がない

既存の探検モードは、写真のカメラから見た相対距離を「高さ」に変えて地形にしています。これは写真の中の地面、重力の向き、壁を認識したものではありません。

そのため、写真の中で「上」にあるものへ登る、という遊びは、このままでは成り立ちません。AIで写真の意味を復元したように見せかけるのではなく、必要な情報は人が指定することにしました。

手動で指定するもの

新しいモードは「上を決めてロープ」という別のタブです。指定するのは次のとおりです。

  1. 地面の上端の2点
  2. 上側の1点(地面の線に垂直な方向を「上」と決める)
  3. 上の足場の2点(1点目が高さ、2点目が幅)

足場は1つあれば成り立ち、必要なら最大4つまで、固い壁も最大4つまで足せます。指定した向きに合わせて、写真は向きを変えて(鏡像にはせず)表示され、重力は常に画面の下向きです。

描画と衝突は同じ形を使う

地面、足場、壁は、同じ座標系の固い箱として扱います。描画、体の衝突、ロープが遮られる判定、立てる位置の判定、スタートとゴールの検証が、すべて同じ箱を使います。

見た目と判定がずれると「当たったのに通り抜けた」といった不具合になります。同じ座標から描画と判定を作ることで、それを防いでいます。

どこまで確認したか

「ロープを掛ける、引き上げる、足場に着地する、旗に着く」という一連の流れを、単位ごとに完走させる試験を作り、通しました。

一方で、実機での見た目と操作性は、まだ確認していません。スイング(ロープで振れる動き)や、写真から部屋を3Dで自動復元する機能は、実装もしておらず、できるとも主張していません。

学んだこと

写真に含まれていない意味(どちらが上か、どこが壁か)は、AIで復元したことにせず、少数の手動指定から物理のルールを作るほうが、遊びとして正直で、検証もしやすくなりました。