Version: 2019.4
カメラからの Ray
Occlusion culling

Using an oblique frustum

By default, the view frustum is arranged symmetrically around the camera’s center line, but it doesn’t necessarily need to be. You can make the frustum oblique, which means that one side is at a smaller angle to the centre line than the opposite side.

This makes the perspective on one side of the image seem more condensed, giving the impression that the viewer is very close to the object visible at that edge. An example of how this can be used is a car racing game; if the frustum is flattened at its bottom edge, it appears to the viewer that they are closer to the road, accentuating the feeling of speed.

In the Built-in Render Pipeline, a Camera that uses an oblique frustum can only use the Forward rendering path. If your Camera is set to use the Deferred Shading rendering path and you make its frustum oblique, Unity forces that Camera to use the Forward rendering path.

Setting frustum obliqueness

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

Setting Frustum Obliqueness with a Lens Shift

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

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

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

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

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

Setting frustum obliqueness using a script

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

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# スクリプトの例

It is not necessary to understand how the projection matrix works to make use of this. The horizObl and vertObl values set the amount of horizontal and vertical obliqueness, respectively. A value of zero indicates no obliqueness. A positive value shifts the frustum rightwards or upwards, thereby flattening the left or bottom side. A negative value shifts leftwards or downwards and consequently flattens the right or top side of the frustum. The effect can be seen directly if this script is added to a camera and the game is switched to the scene view while the game runs; the wireframe depiction of the camera’s frustum will change as you vary the values of horizObl and vertObl in the inspector. A value of 1 or –1 in either variable indicates that one side of the frustum is completely flat against the centreline. It is possible although seldom necessary to use values outside this range.


カメラからの Ray
Occlusion culling