Version: 5.6
Лучи из камеры
Создание ощущения больших и маленьких размеров

Использование наклонной пирамиды видимости (Oblique Frustum)

По умолчанию, пирамида видимости расположена симметрично относительно центральной линии камеры, но она не обязательно должна быть такой. Пирамиду можно сделать “наклонной”, т.е., одна сторона будет иметь меньший угол к центральной линии, чем противоположная сторона. Похожий эффект получится, если взять распечатанную фотографию и отделить у неё один из краёв. Это делает перспективу на одном из краёв изображения кажущейся более плотной, передавая смотрящему ощущение, что он находится очень близко к видимому на этом крае объекту. Пример использования - гоночная игра, где пирамида может быть более плоской на нижнем крае. Это бы создало у смотрящего впечатление, что он ближе к дороге, усиливая ощущение скорости.

Так как у класса камеры нет никаких методов для установки степени наклона пирамиды, это можно довольно просто сделать с помощью изменения матрицы проекции:-

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# script example

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

JS script example

К счастью, чтобы это использовать, вовсе не обязательно разбираться в том, как работает матрица проекции. Значениям horizObl и vertObl присваивается количество соответственно горизонтальной и вертикальной “косости”. Положительное значение сдвигает пирамиду вправо или вверх, таким образом, делая более плоской правую или верхнюю часть пирамиды. Эффект можно явно увидеть, если добавить этот скрипт к камере и переключиться в окно Scene при запущенной игре. Wireframe представление пирамиды видимости камеры будет меняться с изменением значений horizObl и vertObl в инспекторе. Значение 1 или –1 в любой из переменных означает, что одна из сторон пирамиды будет полностью плоской относительно центральной линии. При этом, хоть и такая необходимость и возникает редко, но можно использовать значения вне этого диапазона.

Лучи из камеры
Создание ощущения больших и маленьких размеров