同じような写真しか撮っていない

SIGMA 単焦点広角レンズ 20mm F1.8 EX DG ASPHERICAL RF キヤノン用 フルサイズ対応 -

3.0 / 5.0

超広角側で良さそうなレンズが欲しかったので購入した。昔に買った TAMRON の 17-35mm のレンズは画質的に厳しくて全く使わなくなってしまったので、中古として売った (使わないレンズを持っていても防湿庫の容量的に邪魔なだけになってしまう)

キヤノン純正の EF 20mm F2.8 も検討したけど、SIGMA の 20mm のほうが明るくかつ画質が良さそうなのでこちらにした。ただ、操作性は純正のほうがいいと思う (フルタイムマニュアルフォーカスができない・マニュアルフォーカスがそもそもしにくい)。

24mm や 28mm でないのは、次に買うレンズを EF24-70mm F2.8L II USM にしたいと思っていて、画角が被らないようにしたかったからで、本当はできれば 14mm ぐらいの画角が欲しかったけど、コストパフォーマンスが悪すぎるのでやめた。純正の広角ズームも検討したけど、周辺画質にあまり期待できなそうで、構図に制限がでそうなのでやめた。

まだ全然とれていないけど、画質は悪くなさそうな印象。あと Lightroom の現像時レンズ補正をはじめて使ってみたけど、勝手にレンズを認識して自動でプリセットの補正をかけてくれて便利すぎることがわかった。

「標準レンズ」の何が標準なのか、ここ数日考えてひとまず自分なりに結論を出したのでまとめてメモ

結論

一般的な鑑賞環境において、パースが自然、すなわち肉眼で見るパースとほぼ同じであること

前提

写真のパースは、一般的に説明するときには、焦点距離によって変化して、広角では遠近感が強調され、望遠では圧縮される、とされているが、厳密にはこれだけだと説明が不十分である。焦点距離の違いは、単に画像をどの大きさで (すなわち画角で) トリミングするかの違いでしかない。これは、無限の解像度を持つカメラと、無限の解像度を持ち収差のない超広角レンズさえあれば、後処理でトリミングすればいいだけなので、それ以上長い焦点距離のレンズなどいらないということを意味する。本質的に、レンズはパースを変化させない。

ではどこでパースの変化が起きるかというと、それは鑑賞環境、つまり出力サイズ (プリントサイズ) と、鑑賞者までの距離になってくる。もし広角レンズ、例えば17mmで撮影したとしても、2m 幅でそれをプリントしたものを、1m の距離から見れば、肉眼で見た場合のパースと同じになる。あくまで、あの強調されたパースは狭い出力サイズに無理矢理画像をつめこむから生まれている。カメラのファインダーの像の大きさというのも固定なので、レンズを変えるとパースが変化したように見える。

疑問

レンズ自体にパースの変化がないのに「標準レンズはパースが自然」というのはおかしい。どんな画角であろうと、出力サイズと鑑賞位置が「正しい」ければ、パースは自然になるはずである。

であるなら、出力サイズと鑑賞位置が暗黙のうちに決定されているのではないか

検証

とりあえずイメージできるように焦点距離から画角を求められるようにする。 Wikipediaによると、焦点距離からの画角は以下で求められる (JavaScript の式になおしてある)

// `size` (mm) サイズの素子で、焦点距離が `f` (mm) のときの画角 (radian)
function angleOfView (size, f) {
	return 2 * Math.atan(size / (2 * f));
}

例えば、35mm フルサイズで 50mm の焦点距離を持つレンズを使った場合、水平画角は angleOfView(36, 50) で求められる (JS の三角関数との兼ね合いで表示時以外はラジアンで表現) この場合だと、39.6度ぐらいになる。

// 一応ラジアン変換
function radiansToDegree (radian) {
	return radian * (180 / Math.PI);
}

function degreeToRadians (degree) {
	return degree * (Math.PI / 180);
}

この状態で撮影した写真を、同じ画角だけ占有するように出力サイズと鑑賞位置を調整するようにすれば、パースは崩れないことになる。

なので、以下のような関数を考える (鑑賞者が点・占有物を面にしたとき、面側に直角がくる直角三角形が2つ並ぶイメージ)。

// `distance` (mm) 離れた距離にある `size` (mm) のものが視野を占有する画角 (radian)
function angleByDistanceAndSize (distance, size) {
	var half = size / 2;
	return Math.atan(half / distance) * 2;
}

これを使うと、「30cm の距離で A4用紙を見る場合に占有される水平画角」は angleByDistanceAndSize(300, 297) で求められる (52度ぐらい)

52度の画角を持つレンズの焦点距離を求めると、「30cm の距離の A4用紙にプリントした場合にパースがぴったりになる焦点距離」が求められるはずなので、以下のような関数を定義した (angleOfView の逆関数)

// `size` (mm) サイズの素子で、画角が `angle` (radian) のときの焦点距離 (mm)
function angleToFocalLength (size, angle) {
	var a = Math.tan(angle / 2);
	return size / a / 2;
}

angleToFocalLength(36, angleByDistanceAndSize(300, 297)) とすれば、「30cm の距離の A4用紙にプリントした場合にパースがぴったりになる焦点距離」として 36mm が求められる。すなわちこの鑑賞環境の場合、36mm で撮影した写真だと、パースが最も自然になる。

同じように、一般的な鑑賞環境を想像して、最も自然なパースになる焦点距離がいくつかを求めてみる。

// 20cm で L版 (スナップ写真を自宅で見る)
angleToFocalLength(36, angleByDistanceAndSize(200, 127)) //=> 56mm

// 30cm で A4 (ちょっと大きめに出力したものを手元で見る)
angleToFocalLength(36, angleByDistanceAndSize(300, 297)) //=> 36mm

// 50cm で A3 (ちょっと大きめに出力したものを手元で見る)
angleToFocalLength(36, angleByDistanceAndSize(500, 420)) //=> 42mm

// 100cm で A3 (写真展みたいなところでちょっと離れて見る)
angleToFocalLength(36, angleByDistanceAndSize(1000, 420)) //=> 85mm

// 倍率0.71倍のファインダー
50 / 0.71 //=> 70mm
( angleToFocalLength(36, angleByDistanceAndSize(x, sizeByDistanceAndAngle(x, angleOfView(36, 50)) * 0.71)) )

と、だいたい標準と呼ばれるような焦点距離におさまってる。つまり、このような鑑賞環境においては「標準レンズ」と呼ばれるものを使っておくと、パースが自然に見える。

ちなみに魚眼レンズは、画像の作りかたが人間の眼とは違うので上記のルールには全くあてはまらない。angleOfView の式もあてはまらない (もっと広く写るように設計されてる)

  1. トップ
  2. tech
  3. 「標準レンズ」について