# SetViewProjectionMatrices(Matrix4x4, Matrix4x4)

> Add a command to set the view and projection matrices.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.Rendering](/engine/6000.0/script-reference/unityengine/rendering.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public void SetViewProjectionMatrices(Matrix4x4 view, Matrix4x4 proj)
```

### Parameters

**** (\[Matrix4x4]\(/engine/6000.0/script-reference/unityengine/matrix4x4)): View (world to camera space) matrix.**** (\[Matrix4x4]\(/engine/6000.0/script-reference/unityengine/matrix4x4)): Projection (camera to clip space) matrix.

### Remarks

This function is equivalent to calling [CommandBuffer.SetViewMatrix](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/setviewmatrix.md) and [CommandBuffer.SetProjectionMatrix](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/setprojectionmatrix.md). It is slightly more efficient when changing both matrices at once.

This function is compatible with the Built-in Render Pipeline. It is not compatible with the Universal Render Pipeline (URP), the High Definition Render Pipeline (HDRP), or custom Scriptable Render Pipelines.

Note: The camera space in Unity matches OpenGL convention, so the negative z-axis is the camera's forward. This is different from usual Unity convention, where the camera's forward is the positive z-axis. If you are manually creating the view matrix, for example with an inverse of [Matrix4x4.LookAt](/engine/6000.0/script-reference/unityengine/matrix4x4/lookat.md), you need to scale it by -1 along the z-axis to get a proper view matrix.

```csharp
using UnityEngine;
using UnityEngine.Rendering;

// Attach this script to a Camera and pick a mesh to render.
// When entering Play mode, this will render a green mesh at
// origin position, via a command buffer.
[RequireComponent(typeof(Camera))]
public class ExampleScript : MonoBehaviour
{
    public Mesh mesh;

    void Start()
    {
        var material = new Material(Shader.Find("Hidden/Internal-Colored"));
        material.SetColor("_Color", Color.green);

        var tr = transform;
        var camera = GetComponent<Camera>();

        // Code below does the same as what camera.worldToCameraMatrix would do. Doing
        // it "manually" here to illustrate how a view matrix is constructed.
        //
        // Matrix that looks from camera's position, along the forward axis.
        var lookMatrix = Matrix4x4.LookAt(tr.position, tr.position + tr.forward, tr.up);
        // Matrix that mirrors along Z axis, to match the camera space convention.
        var scaleMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(1, 1, -1));
        // Final view matrix is inverse of the LookAt matrix, and then mirrored along Z.
        var viewMatrix = scaleMatrix * lookMatrix.inverse;

        var buffer = new CommandBuffer();
        buffer.SetViewProjectionMatrices(viewMatrix, camera.projectionMatrix);
        buffer.DrawMesh(mesh, Matrix4x4.identity, material);

        camera.AddCommandBuffer(CameraEvent.BeforeSkybox, buffer);
    }
}
```

Additional Resources: [CommandBuffer.SetViewMatrix](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/setviewmatrix.md), [CommandBuffer.SetProjectionMatrix](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/setprojectionmatrix.md), [Camera.projectionMatrix](/engine/6000.0/script-reference/unityengine/camera/projectionmatrix.md), [Matrix4x4.LookAt](/engine/6000.0/script-reference/unityengine/matrix4x4/lookat.md), [Matrix4x4.Perspective](/engine/6000.0/script-reference/unityengine/matrix4x4/perspective.md).
