C++ の移植版 trellis.cpp で Pixal3D を Radeon に載せて技術検証したとき、入力の画像の画角は推定されませんでした。本家の Pixal3D は補助モデルの MoGe-2 で画角を推定しますが、trellis.cpp には MoGe-2 が移されておらず、--fov で渡さなければ 49.13° が使われます。私たちの入力は画像生成で作った正射影に近いキャラクターの絵で、写真のような遠近がありません。既定のままでよいのかを、画角を振って比べました。

結論

  • 正射影に近い生成の絵では、--fov 15 が一番よく合いました。三面図の3面の IoU の平均は 0.948(既定の 49.13° では 0.917)、キャラの絵の正面は 0.932(同じく 0.883)です。
  • 15° は、2つの入力・2つの seed のどれでも一番よく、seed による差も小さく出ました。
  • 写真なら 40〜50° が合うと見ていますが、試していません。10° 以下も試していません。
  • Pixal3D は、入力のカメラの向きのまま形を作ります。入力は真正面・目の高さで描かれた物がよさそうです。

試した環境

  • Pixal3D を trellis.cpp v0.8.1(HIP でビルド)で動かしたもの。Radeon RX 7900 XT(VRAM 20 GB)、Ubuntu、ROCm 7.2.4
  • 1024・色付き、seed は 42 と 7
  • 後始末として、内側に残る見えない殻を消す処理を通しています

測り方

入力は2つです。

  • キャラクターの絵1枚(正面)
  • 自作の三面図の正面。横と背面の絵は、答え合わせにだけ使います

これを画角 15・25・35・49.13° の4通り、seed 2つで作り、全部で 2 × 4 × 2 = 16 本です。

物差しは「描画の IoU」です。できた GLB を Blender で描き、外接枠の高さをそろえて入力の切り抜きと重ねます。三面図のほうは、正面・側面・背面をそれぞれ描いて三面図の各面と重ねました。輪郭のずれの p95(高さに対する比)も取っています。これは診断のための値で、人の目による審査の代わりではありません。

人形の切り絵を四つの影に重ね、一番左の影だけがぴったり合っている

結果

fov三面図: 3面の IoU の平均(側面だけ)三面図の輪郭のずれ p95(3面の平均)キャラの絵の正面 IoU
150.948(0.929)1.3%0.932
250.920(0.845)2.2%0.921
350.924(0.867)2.1%0.911
49.13(既定)0.917(0.891)2.7%0.883

どの物差しでも 15° が一番高い。三面図の側面は 25° で 0.845 まで落ち、キャラの絵の正面は既定の 49.13° で 0.883 だった

15° は、どちらの入力でも、どちらの seed でも一番よく出ました。seed による差も小さく、三面図の3面の平均は 0.947 と 0.949 です。三面図では、25〜35° にすると、既定の 49.13° より側面が落ちました(側面だけで 0.845・0.867。既定は 0.891)。キャラの絵の正面は、同じ 25〜35° で既定より高く出ています(0.921・0.911。既定は 0.883)。キャラの絵の横は測っていませんが、三面図の結果からすると、正面の数字だけを見て画角を決めると、見えない横を悪くしてしまうことがあります。

どちらの入力も、遠近の少ない正射影に近い絵でした。既定の 49.13° は、それより強い遠近を前提にした値です。私たちは画角の既定を 15° にしました。

入力のカメラの向きも、そのまま形に出る

画角とは別に、入力のカメラの向きも形に出ます。キャラのパーツ 7 本を画角 15° で作ったとき、斜め(3/4)から描かれていた靴とリュックは、物の軸も斜めに出ました。Pixal3D は、入力のカメラの向きのまま形を作るからです。

もう一つ、見えない背面は作り物になります。髪の背面にはこぶが、シャツの背中にはひれのような形が出ました。入力には、真正面・目の高さから描いた絵を選ぶのがよさそうです。

確かめていないこと

  • 写真を入力にしたときの画角(40〜50° が合う見込みです)。
  • 10° 以下と、試した4通りのあいだの値。
  • 描画の IoU は診断のための物差しで、人の目による審査ではありません。

おわりに

生成した正射影に近い絵を Pixal3D に渡すなら、既定の 49.13° のままにせず、--fov 15 から試すとよいと思います。画角は正面だけでなく、横と背面の数字も見て決めるのがおすすめです。

※ Pixal3D と trellis.cpp の既定の画角や引数は執筆時点の情報で、いまは変わっている可能性があります。