Камера. Типы камер, параметры для настройки. Скай бокс, occlusion culling

Камера

Камеры являются устройствами, которые захватывают и отображают мир игроку. Путем настройки и манипулирования камерами, вы можете сделать презентацию своей игры поистине уникальной. Вы можете иметь неограниченное количество камер в сцене. Вы можете настроить рендеринг камерами в любом порядке, на любом месте экрана, либо только в определенных частях экрана.

Свойства

Свойство:Функция:
Clear FlagsОпределяет, какие части экрана будут очищены. Это удобно при использовании нескольких камер для отрисовки разных элементов игры.
BackgroundЦвет, применяемый для фона после отрисовки всех элементов, в случае отсутствия скайбокса.
###Маска отрезанияВключение или исключение слоёв объектов на рендер этой камерой. Назначение слоёв объектам производится через Inspector.
ProjectionПереключает способность камеры симулировать перспективу.
        XКамера будет рисовать объекты в перспективе.
        XCamera will render objects uniformly, with no sense of perspective. NOTE: Deferred rendering is not supported in Orthographic mode. Forward rendering is always used.
Size (когда выбран ортографический режим)Размер зоны видимости камеры для ортографического режима.
Field of view (когда выбран режим перспективы)Ширина угла обзора камеры, измеряется в градусах по локальной оси Y.
###Clip Planes (Плоскости отреза)Дистанция, на которой камера начинает и заканчивает рендеринг.
        XБлижайшая точка относительно камеры, которая будет рисоваться.
        XДальняя точка относительно камеры, которая будет рисоваться.
Normalized View Port RectЧетыре значения, отражающие то, в какой области экрана будет выведено изображение с камеры, в экранных координатах (от 0 до 1).
        XНачальная позиция области по горизонтали вида камеры, который будет рисоваться.
        YНачальная позиция области по вертикали, где вид камеры будет рисоваться.
        W (Ширина)Ширина вида камеры на экране.
        H (Высота)Высота вида камеры на экране.
DepthПозиция камеры в очереди отрисовки. Камеры с большим значением будут нарисованы поверх камер с меньшим значением.
###Способ рендераОпции для определения методов рендеринга для камеры.
        XКамера использует метод рендеринга, установленный в Player Settings.
        Вершинное освещениеВсе объекты рисующиеся этой камерой будут рендериться как Vertex-Lit-объекты.
        XВсе объекты будут рендериться с одним проходом на материал.
        Deferred Lighting (только в Unity Pro)Все объекты будут рендериться сначала без освещения, а затем будет произведён рендер освещения для всех объектов разом, в конце очереди рендеринга.
Target TextureСсылка на Render Texture, которая будет содержать результат рендеринга камеры. Назначение этой ссылки отключает способность камеры рендерить на экран.
HDRВключение технологии High Dynamic Range.
Target DisplayDefines which external device to render to. Between 1 and 8.

Детали

Камеры очень важны для демонстрации вашей игры игроку. Они могут быть изменены, заскриптованы, наследованы для получения различных визуальных эффектов. Для паззла вы можете сделать камеру статичной и охватывающей обзором весь паззл. Для шутера от первоого лица вы можете сделать камеру дочерней по отношению к игроку и разместить её на уровне глаз персонажа. Для гоночный игры вы можете закрепить камеру позади автомобиля и заставить её следовать за ним.

Вы можете создать несколько камер и назначить каждой свою глубину(Depth). Камеры будут отрисовываться от низшей глубины до высшей глубины. Другими словами, камера с Depth 2 будет отрисована поверх камеры с Depth 1. Вы можете настроить значение свойства Normalized View Port Rectangle для изменения позиции и размера изображения с камеры на экране, например для создания нескольких экранов в одном, или для создания зеркала заднего вида.

Способ рендера

Unity поддерживает различные способы рендеринга. Вы должны выбрать один из них, в зависимости от содержимого вашей игры и целевой платформы / аппаратного обеспечения. Различные методы рендеринга поддерживают различные возможности и дают различную производительность, особенно в аспекте применения теней и источников света. Метод рендеринга, используемый в вашем проекте, выбирается в Player Settings. Дополнительно свой метод рендеринга может быть выбран для каждой камеры.

См. способы рендеринга для получения всех подробностей.

Clear Flags

Каждая камера хранит информацию о цвете и глубине, когда рендерит свой вид. По умолчанию, незаполненные части экрана, будут показаны в виде скайбокса. При использовании нескольких камер, каждая камера будет иметь свои буферы цвета и глубины, заполняемые при каждом рендеринге. Каждая камера будет рендерить то, что видно с её ракурса, а путем изменения настройки Clear Flags можно выбрать набор буферов, которые будут обновлены (очищены), во время рендеринга. Это осуществляется, выбором одного из четырёх вариантов:

Skybox

Это настройка по умолчанию. Пустые участки экрана будут отображать скайбокс текущей камеры. Если текущая камера не имеет скайбокса, то скайбокс будет использован стандартный скайбокс из меню Render Settings (Edit->Render Settings). Если и там не будет указан скайбокс, то будет использован цвет Background Color. Также к камере может быть добавлен компонент Skybox. Если вы хотите создать новый скайбокс, см. это руководство.

Solid color

Любые пустые части экрана будут отображать текущий фоновый цвет (Background Color) камеры.

Только глубина

Если вы хотите рисовать оружие игрока не подвергая его обрезке объектами окружения, внутри которых оно находится, установите одну камеру, рисующей окружение, с Depth 0, и ещё одну камеру, рисующую оружие — Depth 1. Для камеры оружия выберите Clear Flags depth only. Это позволит отобразить окружение на экране, но проигнорировать всю информацию о взаимном положении предметов в пространстве. Когда оружие будет отрисовано, непрозрачные части будут полностью отрисованы на экране поверх ранее находившегося там изображения, независимо от того, насколько близко оружие находится к стене.

Оружие отрисовано последним после очистки буфера глубины предшествовавшей камеры.
Оружие отрисовано последним после очистки буфера глубины предшествовавшей камеры.

Не очищать

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

Clip Planes (Плоскости отреза)

Near и Far Clip Plane — свойства, определяющие, где начинается и заканчивается область отрисовки камеры. Эта область ограничивается плоскостями, перпендикулярными направлению камеры, и находившимися в этих позициях относительно неё. Near Plane — это ближайшая позиция, а Far Plane — дальняя позиция.

Плоскости также определяют точность буфера глубины. Для обеспечения наивысшей точности вам следует отодвинуть Near Plane так далеко, насколько возможно.

Обратите внимание, что эти плоскости вместе определяют поле зрения камеры, которое известно как фрустум. Unity гарантирует, что объекты, полностью находящиеся за пределами фрустума, не будут отображаться. Это называется Frustum Culling и это срабатывает независимо от Occlusion Culling.

Из соображений производительности вы можете прекращать отрисовку мелких объектов раньше, чем отрисовку прочих. Для этого поместите их в separate layer и настройте дистанцию обрезки для этого слоя, используя функцию Camera.layerCullDistances.

Маска отрезания

Culling Mask используется для выборочного рендеринга групп объектов посредством использования слоёв. Больше информации об использовании слоёв можно найти здесь.

Normalized Viewport Rectangles

Normalized Viewport Rectangles предназначено для определения части экрана, на которой будет отрисовано изображение с камеры. Вы можете, к примеру, вставить изображение карты в нижний правый угол экрана, а вид с камеры на выпущенной ракете — в верхний левый угол. Немного поработав над дизайном, используя Viewport Rectangle, вы сможете создать кое-какие уникальные системы.

Очень просто создать раздельный экран для двух игроков, используя Normalized Viewport Rectangle. После создания двух камер, установите обеим камерам свойство H в значение 0.5 и для одной из них свойство Y в значение 0.5, а для другой — в значение 0. В результате, первая камера будет рисовать изображение в верхней половине экрана, а вторая камера — в нижней половине экрана.

Создание экрана для двух игроков с помощью Normalized ViewportRectangle
Создание экрана для двух игроков с помощью Normalized ViewportRectangle

Orthographic

Переключив камеру в ортографичесий (Orthographic) режим, вы устраните всю перспективу из отрисовываемого ей изображения. Это полезно для создания двумерных и изометрических игр.

Заметьте, что туман отрисовывается при этом равномерно, так что может выглядеть не так, как вы ожидали. Прочтите справко по компоненту Render Settings для получения подробностей.

Перспективная камера.
Перспективная камера.
Ортографическая камера. Изображение объектов не уменьшается при увеличении дистанции.
Ортографическая камера. Изображение объектов не уменьшается при увеличении дистанции.

Текстура рендера

Эта возможность доступна лишь в расширенных лицензиях Unity. Она позволяет отрисовывать изображенеи с камеры в текстуру (Texture), которая может быть применена к другому игровому объекту. Это делает простым создание спортивной арены с видеомониторами, камеры наблюдения, отражений и т.д.

Использование рендертекстуры для создания монитора
Использование рендертекстуры для создания монитора

Target display

Камера имеет до 8 настроек отображения цели. Камерой можно управлять для рендеринга на один из 8 мониторов. Это поддерживается только на ПК, Mac и Linux. В Game View будет показан выбранный дисплей в Camera Inspector.

Советы

  • Камеры могут быть вызваны, назначены дочерним объектом и заскриптованы как любой другой игровой объект
  • Для эффекта ускорения в гоночной игры используйте повышенный Field of View.
  • Камеры можно использовать в симуляции физики, если к ним добавить компонент Rigidbody.
  • Нет ограничения на количество камер в сцене.
  • Ортографические камеры отлично подходят для создания 3D пользовательских интерфейсов
  • Если вы наблюдаете артефакты глубины (мелькают близкорасположенные поверхности), попробуйте выставить Near Plane в максимально возможное значение.
  • Камеры не могут рендерить одновременно на экран и в Render Texture, только в одно из них.
  • Pro-лицензия предоставляет функцию названную Render-to-Texture, которая позволяет рендерить камеру в текстуру, для еще более уникальных эффектов.
  • Unity поставляется с предустановленными скриптами для управления камерой, их можно найти в Components->Camera Control. Поэкспериментируйте с ними чтобы узнать об их возможностях.

Occlusion culling

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

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

Regular frustum culling renders all Renderers within the Cameras view.
Regular frustum culling renders all Renderers within the Camera’s view.
Occlusion culling removes Renderers that are entirely obscured by nearer Renderers.
Occlusion culling removes Renderers that are entirely obscured by nearer Renderers.

Когда использовать отсечение окклюзии

Чтобы определить, может ли отсечение окклюзии улучшить производительность вашего проекта во время выполнения, рассмотрите следующее:

  • Предотвращение ненужных операций рендеринга может сэкономить время процессора и графического процессора. Встроенное в Unity отсечение окклюзии выполняет вычисления во время выполнения на ЦП, что может компенсировать сэкономленное время ЦП. Таким образом, отсечение окклюзии, скорее всего, приведет к повышению производительности, когда проект привязан к графическому процессору из-за перерисовки.
  • Unity загружает данные отсечения окклюзии в память во время выполнения. Вы должны убедиться, что у вас достаточно памяти для загрузки этих данных.
  • Отбор окклюзии лучше всего работает в сценах, где небольшие четко очерченные области четко отделены друг от друга сплошными игровыми объектами. Типичный пример — комнаты, соединенные коридорами.
  • Вы можете использовать отсечение окклюзии, чтобы скрыть динамические игровые объекты, но динамические игровые объекты не могут скрыть другие игровые объекты. Если ваш проект генерирует геометрию сцены во время выполнения, то встроенная в Unity функция отсечения окклюзии не подходит для вашего проекта.

Как работает отсечение окклюзии

Отбор окклюзии генерирует данные о вашей сцене в редакторе Unity, а затем использует эти данные во время выполнения, чтобы определить, что может видеть камера. Процесс генерации данных известен как запекание.

Когда вы запекаете данные отсечения окклюзии, Unity делит сцену на ячейки и генерирует данные, которые описывают геометрию внутри ячеек и видимость между соседними ячейками. Затем Unity объединяет ячейки, где это возможно, чтобы уменьшить размер генерируемых данных. Чтобы настроить процесс запекания, вы можете изменить параметры в окне Occlusion Culling и использовать Occlusion Areas в вашей сцене.

Во время выполнения Unity загружает эти запеченные данные в память и для каждой камеры, для которой включено свойство Occlusion Culling, выполняет запросы к данным, чтобы определить, что эта камера может видеть. Обратите внимание, что когда отсечение окклюзии включено, камеры выполняют как отсечение усеченной пирамиды, так и отсечение окклюзии.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *