Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


Perspective(float, float, float, float)

Create a perspective projection matrix.
Read time 2 minutesLast updated 4 days ago

Definition

  • Type: Method
  • Namespace: UnityEngine
  • Assembly: UnityEngine.CoreModule
public static Matrix4x4 Perspective(float fov, float aspect, float zNear, float zFar)

Parameters

Vertical field-of-view in degrees.

aspect

Aspect ratio (width divided by height).

zNear

Near depth clipping plane value.

zFar

Far depth clipping plane value.

Returns

Type

Description

Matrix4x4The projection matrix.

Remarks

Projection matrices in Unity follow OpenGL convention, i.e. clip space near plane is at
z=-1
, and far plane is at
z=1
.
The returned matrix embeds a z-flip operation whose purpose is to cancel the z-flip performed by the camera view matrix. If the view matrix is an identity or some custom matrix that doesn't perform a z-flip, consider multiplying the third column of the projection matrix (i.e. m02, m12, m22 and m32) by -1.
Note that depending on the graphics API used, projection matrices in shaders can follow different convention, for example the D3D-style clip space has near plane at zero and far plane at one; and "reversed Z" projection has near plane at one and far plane at zero. To calculate projection matrix value suitable for passing to shader variables, use GL.GetGPUProjectionMatrix.
using UnityEngine;public class ExampleScript : MonoBehaviour{ void Start() { // create projection matrix: 60 FOV, square aspect, // near plane 1, far plane 100 var matrix = Matrix4x4.Perspective(60, 1, 1, 100); // will print: // 0.20000 0.00000 0.00000 0.00000 // 0.00000 0.20000 0.00000 0.00000 // 0.00000 0.00000 -0.02020 -1.02020 // 0.00000 0.00000 0.00000 1.00000 Debug.Log("projection matrix\n" + matrix); // get shader-compatible projection matrix value var shaderMatrix = GL.GetGPUProjectionMatrix(matrix, false); // on a Direct3D-like graphics API, will print: // 0.20000 0.00000 0.00000 0.00000 // 0.00000 0.20000 0.00000 0.00000 // 0.00000 0.00000 0.01010 1.01010 // 0.00000 0.00000 0.00000 1.00000 Debug.Log("shader projection matrix\n" + shaderMatrix); }}