Unity 6.3
0 онлайн 26 гостей 3 в системе
Вход

Введение в вывод камеры

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

Они в основном используются эффектами; например, пост-процессорные эффекты часто используют информацию о глубине.

Значения пикселей в текстуре глубины в диапазоне от 0 до 1, с нелинейным распределением. Точность обычно составляет 32 или 16 бит, в зависимости от конфигурации и используемой платформы. При чтении из текстуры глубины возвращается высокоточное значение в диапазоне от 0 до 1. Если вам нужно получить расстояние от Camera, или иным образом линейное значение 0-1, вычислить это вручную с помощью макросы помощников.

Тексты глубины поддерживаются на большинстве современных аппаратных и графических устройств APIs. Специальные требования перечислены ниже:

  • Direct3D 11+ (Windows), OpenGL 3+ (Mac/Linux), Metal (iOS), и популярные консоли поддерживают глубинные текстуры.

Режим глубины текстуры Camera можно включить с помощью переменных Camera.depthTextureMode из скрипта. Также можно построить аналогичные текстуры самостоятельно, используя функцию Shader Replacement.

Существует три возможных режима текстуры глубины:

  • DepthTextureMode.Depth: текстура глубины.
  • DepthTextureMode.DepthNormals: Нормы глубины и пространства зрения упакованы в одну текстуру.
  • DepthTextureMode.MotionVectors: движение каждого текстеля экрана в пространстве экрана на пиксель для текущего кадра. Упаковано в текстуру RG16.

Это флаги, так что можно указать любую комбинацию из вышеуказанных текстур.

Под капотом

Тексты глубины могут поступать непосредственно из фактического буфера глубины или рендироваться в отдельном проходе, в зависимости от используемого пути рендеринга и оборудования. Как правило, при использовании пути рендеринга Deferred Shading в встроенном Render Pipeline, текстуры глубины поступают «бесплатно», так как они в любом случае являются продуктом рендеринга G-буфера.

При включении текстура MotionVectors всегда поступает из дополнительного прохода рендеринга. Unity будет рендеринговать GameObjects, перемещающегося в этот буфер, и построит их движение от последнего кадра к текущему кадру.