Version: 2023.2
言語: 日本語
カメラのトリック
カメラからの距離で求める錐台のサイズ

視錐台を理解する

錐台 という言葉はピラメッドのような形の上部を、底面と平行な面で切り取った形状を示します。これはパースペクティブカメラにより表示できてレンダリングされる領域です。次の仮想の実験によりどうしてそうなるかを説明します。

真っ直ぐな棒(ホウキの取っ手か鉛筆)をカメラに端をつけて、持ったまま写真を撮る状況を想像してください。もし棒をカメラレンズに垂直に真ん中に当てていれば写真には点しか見ることができません。棒の残りは隠れてしまいます。もし上部に移動した場合、下半分は見えるようになりますが、棒を上に傾けることで再び隠すことができます。続けて棒を上に移動してさらに上に向けると丸い端はいずれ端の上端に到達します。この時点で、棒の軌跡より上のオブジェクトは写真に表示されません。

棒を同様に移動して左、右、下、または水平、垂直に組み合わせて回転させることができます。“隠れた” 棒の角度は単にそれぞれの軸での、写真の中心からの距離に依存します。

この仮想実験の意味することは、カメラのイメージのあらゆる点はワールド座標系での直線に相当して、直線上では 1 点のみがイメージ上に表示できます。直線上の、その点より後ろにあるものは隠されます。

イメージの外端はイメージの隅に相当する境界線により定義されます。もし直線をカメラに向かって後ろ向きに辿った場合、最終的にひとつの点につながります。Unity では、この点はカメラの transform 位置と一致し、パースペクティブの中心と呼びます。画面の上端の中心と、パースペクティブの中心と、下端の中心とを、結んでできる角度は field of view (略して FOV) と呼ばれます。

前述のように、境界線の外にあるものはカメラにより表示されませんが、その他にも何をレンダリングするかについて二つの制約があります。ニアクリッピングプレーンとファークリッピングプレーンはカメラの XY 平面と平行で、中心から直線上である距離でセットされます。ニアクリッピングプレーンよりカメラに近いもの、ファークリッピングプレーンより遠いものは、レンダリングされません。

二つのクリッピングプレーンと境界線により切り取られたピラメッドの形状ができて、これを視錐台と呼びます。

遠方クリッピングプレーンと浮動小数点演算

オブジェクト、ライト、シャドウが遠くにあるとちらつくことがあります。ちらつきが発生するのは、距離が大きすぎて浮動小数点演算で正確に位置を計算できないためです。各フレームで、オブジェクト、光、影はわずかに異なる位置にあります。そのため、視錐台の内部または外部に移動します。

以下のいずれかの方法でちらつきを最小限に抑えます。

  • オブジェクトの距離が大きくなりすぎて正確な計算ができなくなるのを防ぐため、Camera コンポーネント の遠方クリッピングプレーンの距離を小さくします。
  • シーン内のすべてのものを小さくして、シーン全体の距離を縮めます。

Unity は、ワールド空間の位置を基準点としてライトとシャドウを計算します (例: 3Dシーンでは0, 0, 0)。フリッカリングは、ライトとシャドウがワールド空間の位置から離れているときに発生します。フリッカリングを最小限に抑えるには、カメラ相対カリングを有効にします。これにより、Unity はシャドウ計算の相対位置としてカメラ位置を使用します。詳細は Graphics 設定の Culling Settings を参照してください。

カメラのトリック
カメラからの距離で求める錐台のサイズ