多視点で3D化すると、なぜ被写体が縮むのか多視点で3D化すると、なぜ被写体が縮むのか

curated 2026-08 · sources 2026-08-16 → 2026-08-21

TRELLIS.2 に4方位の画像を与えると、車の全長が潰れて立方体に近づきます。
原因は視点の方位ではなく、前処理が視点ごとに独立してスケールを正規化していることでした。
対処は、全視点に同じ大きさのキャンバスを与えて、背景と同じ色の枠を焼くことです。
実測では、長辺と中辺の比が 1.009 から 2.108 に戻りました。

TRELLIS.2 に4方位の画像を与えると、車の全長が潰れて立方体に近づきます。
原因は視点の方位ではなく、前処理が視点ごとに独立してスケールを正規化していることでした。
対処は、全視点に同じ大きさのキャンバスを与えて、背景と同じ色の枠を焼くことです。
実測では、長辺と中辺の比が 1.009 から 2.108 に戻りました。

症状 — 視点を足すほど形が壊れる 症状 — 視点を足すほど形が壊れる

多視点から3Dを起こす経路を組んでいて、妙な挙動に当たりました。
正面の1枚だけを入れると正常に出ます。
正面と背面の2枚でも正常です。
ところがそこへ左右の側面を足した瞬間、車の全長が潰れて立方体に近い形になります。
最初は方位の指定を間違えているのだと考えて、front_axis の設定を何通りも試しました。
どれも効きませんでした。
3Dプリント用の小物のように等方的な形の被写体では崩れないという観測もあって、しばらく原因が絞れずにいました。

多視点から3Dを起こす経路を組んでいて、妙な挙動に当たりました。
正面の1枚だけを入れると正常に出ます。
正面と背面の2枚でも正常です。
ところがそこへ左右の側面を足した瞬間、車の全長が潰れて立方体に近い形になります。
最初は方位の指定を間違えているのだと考えて、front_axis の設定を何通りも試しました。
どれも効きませんでした。
3Dプリント用の小物のように等方的な形の被写体では崩れないという観測もあって、しばらく原因が絞れずにいました。

3D化のもとにした、生成した救急車の側面画像
4方位のもとにした生成画像です。ここから左右の側面と正面、背面を起こしています。 4方位のもとにした生成画像です。ここから左右の側面と正面、背面を起こしています。

原因は、視点ごとの正規化にありました 原因は、視点ごとの正規化にありました

ラッパーのヘルパー関数を読んで分かりました。
前処理は視点ごとに必ず正方形の切り出しを通ります。
その正方形の大きさは、被写体のバウンディングボックスの長辺を基準に決まります。
つまりどの視点でも、その視点での長辺が正方形のおよそ83%を占める形に正規化されます。
救急車で測ると、側面ビューでは長辺が全長なので、正方形に対する車高は 0.385 でした。
正面ビューでは長辺が車高そのものなので 0.834 になります。
同じ車について、車高は正方形の38%だという主張と83%だという主張が、同時に入力されるわけです。
矛盾は 2.16 倍あり、multidiffusion がその両方を平均した結果が、全長の潰れた車でした。

ラッパーのヘルパー関数を読んで分かりました。
前処理は視点ごとに必ず正方形の切り出しを通ります。
その正方形の大きさは、被写体のバウンディングボックスの長辺を基準に決まります。
つまりどの視点でも、その視点での長辺が正方形のおよそ83%を占める形に正規化されます。
救急車で測ると、側面ビューでは長辺が全長なので、正方形に対する車高は 0.385 でした。
正面ビューでは長辺が車高そのものなので 0.834 になります。
同じ車について、車高は正方形の38%だという主張と83%だという主張が、同時に入力されるわけです。
矛盾は 2.16 倍あり、multidiffusion がその両方を平均した結果が、全長の潰れた車でした。

視点ごとの切り出しと共通フレーム化を並べた比較図。上段は側面0.385・正面0.834、下段は4視点とも0.458
前処理の切り出しを手元で再現したものです。上段が視点ごとの切り出し、下段が共通フレーム化した場合。同じ車について「車高は正方形の何割か」が視点ごとに食い違っているのが上段です。 前処理の切り出しを手元で再現したものです。上段が視点ごとの切り出し、下段が共通フレーム化した場合。同じ車について「車高は正方形の何割か」が視点ごとに食い違っているのが上段です。

正面と背面だけが安全だった理由 正面と背面だけが安全だった理由

この機序が分かると、それまでの観測がすべて説明できます。
正面の1枚だけなら比較する相手がいないので矛盾は起きません。
正面と背面はどちらも側面ビューで、長辺はどちらも全長ですから、これも矛盾しません。
左右を足したときだけ、長辺の中身が全長から車高へ入れ替わります。
等方的な被写体が崩れないのも同じ理由で、どの向きから見ても長辺の長さが変わらなければ、正規化の結果もそろいます。
方位の問題ではなく、被写体のシルエットがどれだけ異方的かの問題でした。

この機序が分かると、それまでの観測がすべて説明できます。
正面の1枚だけなら比較する相手がいないので矛盾は起きません。
正面と背面はどちらも側面ビューで、長辺はどちらも全長ですから、これも矛盾しません。
左右を足したときだけ、長辺の中身が全長から車高へ入れ替わります。
等方的な被写体が崩れないのも同じ理由で、どの向きから見ても長辺の長さが変わらなければ、正規化の結果もそろいます。
方位の問題ではなく、被写体のシルエットがどれだけ異方的かの問題でした。

対処 — 背景と同じ色の枠を焼く 対処 — 背景と同じ色の枠を焼く

切り出しが見ているのはアルファのバウンディングボックスだけです。
だとすれば、全視点に同じ大きさのキャンバスを与えて、その四辺に必ずバウンディングボックスへ入るマーカーを置けば、正方形の大きさをそろえられます。
マーカーの色を背景色と同じにして、アルファだけを不透明にすると、合成後の見た目は背景と区別がつきません。

切り出しが見ているのはアルファのバウンディングボックスだけです。
だとすれば、全視点に同じ大きさのキャンバスを与えて、その四辺に必ずバウンディングボックスへ入るマーカーを置けば、正方形の大きさをそろえられます。
マーカーの色を背景色と同じにして、アルファだけを不透明にすると、合成後の見た目は背景と区別がつきません。

手順は4つです。
各視点のアルファのバウンディングボックスを取ります。
次に、水平4方位で不変な量である車高を共通の値へそろえます。
そのうえで、全視点の幅と車高から共通のキャンバス辺を決めて、被写体の中心をキャンバスの中心へ置きます。
最後に四辺へ2ピクセルの枠を焼きます。

手順は4つです。
各視点のアルファのバウンディングボックスを取ります。
次に、水平4方位で不変な量である車高を共通の値へそろえます。
そのうえで、全視点の幅と車高から共通のキャンバス辺を決めて、被写体の中心をキャンバスの中心へ置きます。
最後に四辺へ2ピクセルの枠を焼きます。

共通フレーム化した4視点の素材。2091ピクセル四方、車高はすべて957ピクセル
共通フレーム化した4視点です。2091ピクセル四方のキャンバスに、車高をすべて957ピクセルへそろえてあります。四辺の枠は背景色と同色・完全不透明なので、画面上では見えません。 共通フレーム化した4視点です。2091ピクセル四方のキャンバスに、車高をすべて957ピクセルへそろえてあります。四辺の枠は背景色と同色・完全不透明なので、画面上では見えません。

実測 — 1.009 が 2.108 に戻りました 実測 — 1.009 が 2.108 に戻りました

同じモデル、同じプロンプト、同じシードで、共通フレーム化の前後を比べました。
出力された GLB のバウンディングボックスを測ると、対処前の長辺と中辺の比は 1.009 でした。
これは完全な立方体です。
対処後は 2.108 になりました。
参照となる2D側面図のアスペクト比が 2.16 ですから、誤差はおよそ2.4%です。
変えたのは切り出しの枠だけで、モデルもプロンプトもシードも同じです。
共通フレーム化は、あると良い工程ではなく、無いと壊れる工程でした。

同じモデル、同じプロンプト、同じシードで、共通フレーム化の前後を比べました。
出力された GLB のバウンディングボックスを測ると、対処前の長辺と中辺の比は 1.009 でした。
これは完全な立方体です。
対処後は 2.108 になりました。
参照となる2D側面図のアスペクト比が 2.16 ですから、誤差はおよそ2.4%です。
変えたのは切り出しの枠だけで、モデルもプロンプトもシードも同じです。
共通フレーム化は、あると良い工程ではなく、無いと壊れる工程でした。

捨てたもの 捨てたもの

代償もあります。
正面と背面のビューは、正方形に占める割合が 0.80 から 0.36 まで下がります。
前処理の後段でリサイズがかかるので、前後方向の実効解像度はそのぶん落ちます。
形状の正しさを取って、前後の細部を捨てる交換になっています。
私はこのあたりが妥協点だと判断しました。
なお、テクスチャの段は側面ビューの conditioning しか使わないので、加工前の画像を別系統で渡しておけば、テクスチャの品質には影響しません。

代償もあります。
正面と背面のビューは、正方形に占める割合が 0.80 から 0.36 まで下がります。
前処理の後段でリサイズがかかるので、前後方向の実効解像度はそのぶん落ちます。
形状の正しさを取って、前後の細部を捨てる交換になっています。
私はこのあたりが妥協点だと判断しました。
なお、テクスチャの段は側面ビューの conditioning しか使わないので、加工前の画像を別系統で渡しておけば、テクスチャの品質には影響しません。

1枚のシートに4方位を並べても直りません 1枚のシートに4方位を並べても直りません

よくある誤解として書いておくと、4方位を1枚のシートに並べてスケールをそろえても、この問題は直りません。
切り出しは視点ごとに独立して走るので、元のシート上でどれだけ丁寧にそろえても、切り出したあとに正規化がかかり直します。
共通フレーム化は、シートを作る段ではなく、各視点を個別の画像として切り出したあとの後処理として入れる必要があります。
またこの工程が要るのは特定の実装だけではなく、Hi3D と Tripo に同じ素材を通したときも、共通フレーム化した素材のほうが参照に近い結果になりました。

よくある誤解として書いておくと、4方位を1枚のシートに並べてスケールをそろえても、この問題は直りません。
切り出しは視点ごとに独立して走るので、元のシート上でどれだけ丁寧にそろえても、切り出したあとに正規化がかかり直します。
共通フレーム化は、シートを作る段ではなく、各視点を個別の画像として切り出したあとの後処理として入れる必要があります。
またこの工程が要るのは特定の実装だけではなく、Hi3D と Tripo に同じ素材を通したときも、共通フレーム化した素材のほうが参照に近い結果になりました。

(制作メモ)本稿の実測は、救急車1体を題材にしたものです。異方的なシルエットを持つ被写体を選んでいるので効果が大きく出ており、椅子のような等方的な被写体では差が小さくなります。対象にした実装は PozzettiAndrea 版の TRELLIS.2 ラッパーで、他の実装が同じ前処理を持つ保証はありません。比較図は、前処理の切り出しを同じ条件で手元で再現したものであり、実行時のスクリーンショットではありません。図中の数値は素材から実測した値です。Hi3D と Tripo についての記述は、同じ素材を通したときの出力を測った結果であり、それぞれの内部の前処理を確認したものではありません。
(制作メモ)本稿の実測は、救急車1体を題材にしたものです。異方的なシルエットを持つ被写体を選んでいるので効果が大きく出ており、椅子のような等方的な被写体では差が小さくなります。対象にした実装は PozzettiAndrea 版の TRELLIS.2 ラッパーで、他の実装が同じ前処理を持つ保証はありません。比較図は、前処理の切り出しを同じ条件で手元で再現したものであり、実行時のスクリーンショットではありません。図中の数値は素材から実測した値です。Hi3D と Tripo についての記述は、同じ素材を通したときの出力を測った結果であり、それぞれの内部の前処理を確認したものではありません。
hatori's note · 2026-08

多視点から3Dを起こす経路を使うなら、この工程だけは先に入れておくことを勧めます。
原因の特定には時間を使いましたが、対処そのものは画像処理としては単純です。
私の場合、方位の設定を疑って何日か遠回りをしました。
形が潰れたときは、まず前処理が視点ごとに何を基準にしているかを読むほうが早いです。

多視点から3Dを起こす経路を使うなら、この工程だけは先に入れておくことを勧めます。
原因の特定には時間を使いましたが、対処そのものは画像処理としては単純です。
私の場合、方位の設定を疑って何日か遠回りをしました。
形が潰れたときは、まず前処理が視点ごとに何を基準にしているかを読むほうが早いです。