Version: 2020.1
카메라에서 나오는 레이
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 프로퍼티를 설정하는 자세한 방법은 Camera 컴포넌트 레퍼런스를 참조하십시오.

Setting frustum obliqueness using a script

다음 스크립트는 카메라의 투사 매트릭스를 변경하여 사선 절두체를 빠르게 구현하는 방법을 나타냅니다. 게임이 Play 모드에서 실행 중인 경우에만 스크립트의 효과가 나타납니다.

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.


카메라에서 나오는 레이
Occlusion culling