Screen и Viewport | Разделение между “физическим экраном” и “областью, в которой рисуется игра"

Этот мануалможет служить дополнением к Camera component manual официального сайта.

Существует разделение между “физическим экраном” и “областью, в которой рисуется игра”:

Перед вами скриншот моего рабочего экрана с запущенным редактором Defold и игрой:

На скриншоте вы можете увидеть разные именования областей отображения: Screen и Viewport.

Screen Space — система координат экрана устройства/окна, (экранное пространство) чаще всего отсчитывает пиксели от верхнего левого угла (0,0), особенно в Windows и веб, но некоторые системы (например, OpenGL) могут использовать левый нижний угол как начало координат (0,0) для удобства работы с 3D-графикой. В Defold, в качестве отсчёта, для начала системы координат используется левый нижний угол.

Просмотрите ещё несколько изображений ниже:

Показать изображения






Как вы можете понять, размеры Screen ограничены физическими границами устройства:

Исходя из представленных изображений, мы можем сделать такой вывод:

Screen

  • Это весь экран устройства / окно приложения
  • Его размеры:
    • зависят от монитора
    • не равны размерам игрового мира

Viewport (Область просмотра) — это видимая пользователю часть игрового мира, прямоугольная область на экране, в которую отрисовывается сцена с определенной точки обзора (камеры), определяющая, что игрок видит, а что нет.

После запуска игры мы увидим только то, что расположено в области серого прямоугольника (vieport в редакторе):


Viewport — прямоугольная область на экране, в которую render pipeline выводит изображение мира. Что именно из мира попадёт в viewport, определяют матрицы камеры (view × projection).

Как мы можем заметить, три игровых объекта попали в viewport:

Камера (Camera) — это объект, который определяет, что именно мы видим в игровом мире (её положение, угол обзора, зум), в viewport проецируется изображение с этой камеры.

Для 2D-игр, область просмотра является параллелепипедом:


Такая проекция вида называется ортогональной. Камера формирует область просмотра в виде параллелепипеда.

В 3D играх, В большинство случаев, используется перспектива:


Как видно из скриншота выше, камера проецирует область видимости в виде усечённой пирамиды. Её ещё называют пирамидой видимости (view frustum).

Движок отрисовывает только те объекты, которые попадают внутрь этого объема. Все, что находится ближе «ближней» плоскости или дальше «дальней», игнорируется для экономии ресурсов — этот процесс называется frustum culling .

Из представленной информации мы можем сделать такие выводы:
Viewport — это область экрана, куда камера направлена и смотрит в мир игры:
Область просмотра может быть:

  • меньше игрового мира
  • меньше экрана (Screen)
  • со смещением
  • с letterbox / pillarbox

Letterbox/Pillarbox — чёрные полосы по краям экрана для сохранения aspect ratio базового разрешения игры.
Viewport при этом меньше физического экрана (screen), а не занимает его полностью.

Вот такие черные полосы:


Aspect ratio (соотношение сторон) — это пропорциональное отношение ширины изображения к его высоте, выражаемое двумя числами через двоеточие (например, 16:9, 4:3). Оно определяет форму картинки, а не ее размер (разрешение). Этот параметр важен для правильного отображения контента.

Примеры:


Если есть какие-то вопросы, задавайте!
Спасибо за внимание!

Следующая тема: