Для лучшего понимания материала тебе стоит изучить, как минимум,
эту статью.
Если короткоModelMatrix
- это матрица преобразования локального пространства геометрии конкретного объекта.
Внутри этого локального пространства геометрия объекта расположена относительно центра пространства. Чтобы геометрию модели отобразить в каком-либо целевом пространстве, необходимо произвести отображение локального пространства модели в целевое пространство. Именно таким отображением является ModelMatrix
.
ViewMatrix
- матрица отображения любого внешнего пространства в пространство вида - пространство взора наблюдателя. Наблюдатель (камера) воспринимает объекты только внутри своего собственного локального пространства. Чтобы наблюдатель мог увидеть объект, объект необходимо отобразить из его родного пространства в пространство вида камеры, где он или попадет в область проекции, или не попадет.
Projectionmatrix
- матрица отображения видового пространства в пространство проекции вида. Фактически это отображение выполняет проецирование некоторого участка видового пространства на плоскость. Именно отображенная таким образом геометрия становится видимой при презентации кадра.
Каждый объект сцены находится и анимируется внутри своего локального пространства. Чтобы объект на сцене встал в положенное ему место, его геометрия отображается из своего локального пространства в глобальное пространство сцены с помощью своей ModelMatrix
.
Чтобы сцена стала видна для камеры, всю ее геометрию требуется отобразить в пространство вида камеры с помощью матрицы ViewMatrix
.
Чтобы часть пространства вида камеры попала в область презентации кадра, всю геометрию видового пространства нужно отобразить в пространство проекции с помощью матрицы Projectionmatrix
.
При этом важно заметить, что матрицы Projectionmatrix
и ViewMatrix
уникальны для камеры, а вот матрицы ModelMatrix
уникальны уже для каждого объекта отдельно.
Отображение между пространствами выполняется через операцию перемножения позиции в исходном пространстве на матрицу преобразования пространства. Если подходить к этой задаче в лоб, то отображение каждой позиции потребует 16 операций перемножения над вещественными числами.
Всего для заполнения области презентации кадра требуется выполнить, как минимум, три последовательных отображения геометрии, что будет означать по 48 операций умножения на каждую позицию отображаемой геометрии.
Учитывая что
Projectionmatrix
и
ViewMatrix
в процессе презентации кадра являются неизменными, затраты в 48 операций на каждую позицию выглядят как расточительство. Если до презентации выполнить отображение самого пространства вида в пространство проекции, т.е. перемножить
ViewMatrix
и
Projectionmatrix
в правильном порядке, то с помощью результирующей матрицы
viewProjectionMatrix
число операций на одну позицию можно снизить до 32.
Если же произвести отображение самого локального пространства модели в пространство презентации через перемножение матриц
viewProjectionMatrix
и
ModelMatrix
в правильном порядке, то благодаря полученной таким образом
MVPMatrix
число операций на одну позицию снизится до изначальных 16.
Таким образом, матрицы
viewProjectionMatrix
и
MVPMatrix
просто позволяют снизить трудоемкость презентации кадра. Однако, во время презентации может потребоваться определение положения геометрии в каком-либо промежуточном пространстве, поэтому вдобавок к
MVPMatrix
в шейдер принято отдавать и
ModelMatrix
, и матрицы камеры.
У каждой из матриц свой смысл. И если
MVPMatrix
бесспорно нужна всегда, то любую другую матрицу в шейдер добавлять стоит только исходя из осмысленной необходимости. Регистры GPU для шейдера не резиновые и могут очень быстро забиться избыточными данными. К тому же, чем меньше на каждом кадре в шейдер передается данных, тем быстрее выполняется презентация кадра.