円を斜めから見た楕円と作図用の楕円は同じではない
目次
Xで「円はどの透視図から見ても同じ楕円に見える」みたいな話を見かけた。
火元は追えていないし、たぶん作画文脈で何かが省略されている。
ただ、数学の話として見ると、ここには少なくとも3つの別問題が混ざっている。
- 空間上の円をカメラで見ると、画像上では何になるか
- 紙の上に直接描いた楕円と、円の透視投影として出る楕円は同じか
- 楕円の長軸・短軸・中心は、元の円の中心や直径とどう対応するか
カメラアングルをAI画像生成で試した記事でも、アングル指定はかなり雑に効く。
今回の話は画像生成ではなく、もっと手前の幾何だ。
「斜めから見た円は楕円になる」はだいたい合っているが、「だから楕円として普通に扱えばいい」までは飛びすぎている。
平行投影だと話はかなり単純
遠近感をいったん捨てる。
カメラが無限遠にあって、平行な光線で物体を紙に落とすと考える。
これは 平行投影、または斜め方向を含む アフィン変換 の話になる。
この場合、円は楕円に写る。
しかも中心は中心に写る。
直径の中点は、投影後も中点のままだ。
行列で書くと、2次元上の円
に対して、平面上の線形変換
をかけているだけだ。
が縦方向を縮めるなら、円は楕円になる。
この範囲なら「円を斜めから見ると楕円」はかなり素直な説明になる。
作画の「楕円を箱の中に入れる」「円柱の断面を楕円で描く」という説明の多くは、この平行投影に近い直感で動いている。
アイソメや弱い遠近感の図なら、これでかなり足りる。
透視投影では中心と中点が保たれない
問題は透視投影だ。
カメラのピンホールモデルや一点・二点透視では、手前のものが大きく、奥のものが小さくなる。
これはアフィン変換ではなく 射影変換 だ。
射影変換でも、円は基本的に楕円・放物線・双曲線のどれかに写る。
普通のカメラで有限の円盤を見ている範囲では、画像上の輪郭はだいたい楕円になる。
ただし、射影変換は中点を保たない。
長さも角度も保たない。
「元の円の中心をカメラで写した点」と「画像上の楕円の中心」は、一般には一致しない。
ここが作画上の違和感の火種になる。
なぜずれるか。
透視投影では、奥側の半分が手前側より縮む。
元の円では中心から手前端までと奥端までの距離が同じでも、画像上では同じ長さに見えない。
だから、円の中心の像は「見えている楕円のちょうど真ん中」に来ない。
ここを無視して、画像上の楕円の長軸に何かを置くと、空間上の円盤の中心に置いたつもりなのにズレて見える。
ユーザーの「実際このラインにものを置いて斜めに見ると真ん中に見えない」という違和感は、まさにこの話だと思う。
楕円の長軸は画像上の最長線でしかない
楕円を2次元図形として見るなら、長軸は明確だ。
楕円の中心を通る弦のうち一番長いものが長軸。
これは横長の楕円なら横方向になる。
ただし、それは「画像上の楕円という2D図形」の話だ。
元の円盤のどの直径がそこへ写ったのか、元の円の中心がその線上のどこに来るのか、という3D側の意味とは別である。
透視投影では、次の性質だけが強く残る。
| 保たれるもの | 保たれないもの |
|---|---|
| 点が点に写る | 距離 |
| 直線が直線に写る | 角度 |
| 線上にある関係 | 中点 |
| 交点 | 円の中心 |
「円の直径」は、投影後も何らかの直線にはなる。
でも、その線分の真ん中が画像上の楕円中心になるとは限らない。
逆に、画像上の楕円の長軸を逆投影すると、元の円盤上では中心を通らない弦になることもある。
このへんが「楕円の一番長いラインはどこかと言えば横軸じゃん」と「そこに置くと真ん中に見えないんだよね」が同時に成り立つ理由だ。
前者は2D楕円の測度の話。
後者は3D円盤の中心を透視投影した話。
同じ「真ん中」という言葉で、別の中心を指している。
円の透視図としての楕円と、ただの楕円
紙の上に適当に楕円を描けば、それはもちろん楕円だ。
でも「ある円を、あるカメラ位置から見た像」としての楕円には、追加の制約がある。
たとえば円柱の口を一点透視で描くなら、楕円単体ではなく、円が乗っている平面、消失点、接する四角形、奥行き方向がセットになる。
楕円だけを切り出して「長軸はここ」と言っても、元の円盤の中心や円柱の軸方向は復元できない。
作画でよくやる「透視図の四角形の中に円を入れる」手順は、このためにある。
円だけを楕円として描くのではなく、まず円を含む正方形を透視投影する。
その四角形の辺への接点や対角線から、円の空間的な位置関係を運ぶ。
ただし、ここでも注意が要る。
透視投影された正方形の対角線交点は、元の正方形の中心の像になる。
一方で、そこは画像上の楕円の中心とは限らない。
作画で中心線を引くとき、「円盤の中心の像」を取っているのか、「楕円という2D図形の中心」を取っているのかを混ぜるとおかしくなる。
式で見ると分母が犯人
透視投影を一番単純化して書くと、3Dの点 が画像上の点 に写る式はこうなる。
は焦点距離、 はカメラからの奥行き。
平行投影なら , みたいに分母がない。
透視投影では で割るので、同じ長さでも奥にあるほど小さくなる。
円盤がカメラに対して傾いていると、円周上の点ごとに が少しずつ違う。
手前側は小さい で割られ、奥側は大きい で割られる。
この分母の違いが、中点のズレを作る。
射影幾何の言葉では、透視投影は同次座標の線形変換として書ける。
最後に で割る。
この割り算があるせいで、中点や長さが保存されない。
逆に、直線や交点は保存されるので、透視図法では消失点・補助線・接線が強い道具になる。
微分の記事で等高線と勾配を図にしたときもそうだったが、図形の話は「何が保存されるか」を見ると混乱が減る。
透視投影では、ユークリッド幾何の長さ・角度・中心より、射影幾何の直線・交点・接線のほうが根っこにある。
広角と望遠で投影の「癖」が変わる
ここまではピンホールカメラの話だった。
実際の撮影では焦点距離が変わると、同じ円盤でも見え方が違ってくる。
広角レンズは画角が広く、被写体に近づいて撮ることが多い。
近いぶん、円盤の手前と奥で の差が相対的に大きくなる。
の分母が点ごとにばらつくので、楕円の中心と円の中心像のズレが目立つ。
集合写真の端で顔が引き延ばされるのは、この射影歪みそのものだ。
望遠レンズは逆で、遠くから切り取る。
被写体の各点で がほぼ揃うので、分母はほぼ定数だ。
平行投影に近い挙動で、中心のズレもほとんど出ない。
望遠で奥行きが潰れて見える圧縮効果の正体がこれだ。
作画の話に戻すと、「楕円で描いた円の中心がズレて見える」問題は画角が広いほど顕著で、望遠的な視点ではほとんど気にならない。
レンズ歪みとスマホのAI補正
もうひとつ、実際のレンズには光学的な歪みがある。
理想的な透視投影では直線は直線に写るが、実物のレンズだと画面端で直線が曲がる。
広角レンズに多いのが樽型歪み(barrel distortion)で、画面端が外に膨らむ。
望遠寄りで出やすいのが糸巻き型歪み(pincushion distortion)で、端が内側に引っ張られる。
この歪みがあると、空間上の円は画像上で楕円にすらならない。
射影変換の上にさらに非線形な歪みが乗って、輪郭がわずかに卵形になったりする。
カメラやRAW現像ソフトのレンズプロファイル補正は、この光学歪みを逆算して理想的な透視投影に戻す処理だ。
補正後は直線が直線に戻り、円の像も射影幾何の予測通りの楕円になる。
レンズ補正は射影変換を壊すのではなく、射影変換に近づけている。
最近のスマホはさらに踏み込む。
広角インカメラで自撮りすると顔の端が引き延ばされるが、あれは透視投影として正しい結果だ。
「顔が歪んで見える」のは光学エラーではなく、広角+近距離の数学的帰結にすぎない。
にもかかわらず、iPhoneやPixelのカメラアプリは顔領域を検出して射影歪みを補正する。
透視投影を部分的に平行投影方向へ戻しているようなもので、幾何的には正しい射影を「見た目の自然さ」のために崩している。