Version: 2023.2
言語: 日本語
カメラからのレイ
オクルージョンカリング

傾斜錐台の使用

デフォルトでは、視錐台はカメラの中心線に対して対称に置かれますが、必ずしもそうする必要はありません。錐台を斜めにすることが可能です。これは、中心線で分かれた片側が中心線に対して作る角度が、その反対側が作る角度よりも小さいということです。

これにより画像の片側の景観がより密集し、端に近いオブジェクトが非常に近く見える印象を与えます。カーレースゲームなどがその良い使用例です。錐台の角度が下の端の方で小さいと、視点が路面に近い印象を与え、スピード感が強調されます。

ビルトインレンダーパイプラインでは、斜めの錐台を使用するカメラはフォワード レンダリングパス のみを使用できます。カメラがディファードシェーディングのレンダリングパスを使用するように設定されている場合に、錐台を斜めにすると、Unity はそのカメラに強制的にフォワードレンダリングパスを使用します。

錐台の傾斜の設定

Camera コンポーネントには、特別に錐台の傾斜を設定するための機能はありませんが、カメラの Physical Camera プロパティを有効にし、レンズシフトを適用するか、または、スクリプトを加えてカメラの射影行列を変更することができます。

レンズシフトによる錐台の傾斜の設定

カメラの Physical Camera (物理カメラ) プロパティを有効にして、Lens Shift (レンズシフト) を表示します。これを使用して、X 軸と Y 軸に沿ってカメラの焦点中心をオフセットし、描画した画像の歪みを最小限に抑えることができます。

レンズをシフト (移動) すると、シフトの方向とは反対側の錐台の角度が減少します。例えば、レンズを上にシフトすると、錐台の底とカメラの中心線との間の角度が小さくなります。

通常はカメラの錐台は対称です。(左) つまり、中心線の両側の角度が等しいことを意味します。レンズをシフトさせると (右)、錐台が斜めになります。つまり、片側の角度が他方よりも小さくなります。
通常はカメラの錐台は対称です。(左) つまり、中心線の両側の角度が等しいことを意味します。レンズをシフトさせると (右)、錐台が斜めになります。つまり、片側の角度が他方よりも小さくなります。

Physical Camera のオプションの詳細は、Physical Camera を参照してください。

個々の Physical Camera プロパティの設定の詳細は、Camera コンポーネント を参照してください。

スクリプトを使った錐台の傾斜の設定

次のスクリプト例は、カメラの射影行列を変更することによって斜めの錐台を素早く設定する方法を示しています。ゲームが再生モードを実行している間だけ、スクリプトの効果が得られます。

using UnityEngine;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    void SetObliqueness(float horizObl, float vertObl) {
        Matrix4x4 mat  = Camera.main.projectionMatrix;
        mat[0, 2] = horizObl;
        mat[1, 2] = vertObl;
        Camera.main.projectionMatrix = mat;
    }
}

C# スクリプトの例

射影行列がどのような仕組みで動作するか知らなくても、射影行列を使うことができます。horizObl と vertObl の値はそれぞれ、水平と垂直方向の傾斜値を設定します。値が 0 は傾斜がないことを示します。正の値は視錐台を右または上方向に移動します。これにより左または下方向を平坦にします。負の値は視錐台を左または下方向にずらします。これにより右または上方向を平坦にします。このスクリプトをカメラに追加し、ゲームの実行中にシーンビューに切り替えると、効果を直接確認することができます。インスペクターで horizObl と vertObl の値を変更すると、カメラ視錐台のワイヤーフレーム描画は変化します。いずれかの値を 1 あるいは –1 にすると、視錐台の片側が中心線に対して完全に平行になります。これらの値の範囲を超えた値の設定は可能ですが、ほとんど必要なことはありません。


カメラからのレイ
オクルージョンカリング