Version: 2019.3
Los rayos de la Cámara
Occlusion Culling (eliminación selectiva)

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.

Although the Camera component does not have functions specifically for setting the obliqueness of the frustum, you can do it by either enabling the camera’s Physical Camera properties and applying a Lens Shift, or by adding a script to alter the camera’s projection matrix.

Setting Frustum Obliqueness with a Lens Shift

Enable a camera’s Physical Camera properties to expose the Lens Shift options. You can use these to offset the camera’s focal center along the X and Y axes in a way that minimizes distortion of the rendered image.

Shifting the lens reduces the frustum angle on the side opposite the direction of the shift. For example, as you shift the lens up, the angle between the bottom of the frustum and the camera’s center line gets smaller.

Normally a camera’s frustum is symmetrical (left), meaning the angles on either side of the center line are equal. Shifting the lens (right) makes the frustum oblique, meaning the angle is smaller on one side than on the other.
Normally a camera’s frustum is symmetrical (left), meaning the angles on either side of the center line are equal. Shifting the lens (right) makes the frustum oblique, meaning the angle is smaller on one side than on the other.

For further information about the Physical Camera options, see documentation on Physical Cameras.

For further information about setting individual Physical Camera properties, see the Camera Component reference.

Setting Frustum Obliqueness Using a Script

The following script example shows how to quickly achieve an oblique frustum by altering the camera’s projection matrix. Note that you can only see the effect of the script while the game is running Play mode.

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;
    }
}

_Ejemplo de un C# script

function SetObliqueness(horizObl: float, vertObl: float) {
    var mat: Matrix4x4 = camera.projectionMatrix;
    mat[0, 2] = horizObl;
    mat[1, 2] = vertObl;
    camera.projectionMatrix = mat;
}

Ejemplo de un JS script

Afortunadamente, no es necesario entender cómo funciona la matriz de proyección para hacer uso de esta. Los valores horizObl y vertObl establecen la cantidad de oblicuidad horizontal y vertical, respectivamente. Un valor de cero indica que no hay oblicuidad. Un valor positivo cambia el frustum hacia la derecha o hacia arriba, por lo tanto aplanando el lado izquierdo o de abajo. Un valor negativo cambia hacia la izquierda o hacia abajo y consecuentemente aplana el lado derecho y de arriba del frustum. El efecto puede ser visto directamente si este script es agregado a la cámara y el juego es cambiado al scene view mientras el juego corre; la representación de alambre del frustum de la cámara cambiará a medida que varía los valores del horizObl y vertObl en el inspector. Un valor de 1 o –1 en cualquier variable indica que un lado del frustum es completamente planto contra la linea del centro. Es posible, aunque pocas veces necesario utilizar valores fuera de este rango.


  • 2018–10–05 Page amended

  • Lens Shift options added in Unity 2018.2

Los rayos de la Cámara
Occlusion Culling (eliminación selectiva)