Вывод текстуры глубины с камеры
Используйте DepthTextureMode для вывода текстуры глубины или текстуры глубины-нормальных из камеры.
Текстура DepthTextureMode.Depth
Это создает текстуру глубины экранного размера.
Текстура глубины отображается с использованием тех же проходов шейдера, которые используются для отображения рычага тени (тип проходаShadowCaster). Таким образом, если шейдер не поддерживает рычаг тени (i.e. нет прохода рычага тени в шейдере или в любом из резервов), то объекты, использующие этот шейдер, не будут отображаться в текстуре глубины.
- Сделайте ваш шейдер резервным для какого-нибудь другого шейдера, который имеет пропуск для бросания теней, или
- Если вы используете поверхностные шейдерыс добавлением
addshadowдиректива заставит их также генерировать пропуск тени.
Обратите внимание, что только “непрозрачные” объекты (те, которые имеют свои материалы и шейдеры настроены для использования очередь отображения <= 2500) отображаются в текстуре глубины.
Текстура DepthTextureMode.DepthNormals
Это создает текстуру экранного размера 32 бит (8 бит/канал), где нормы пространства зрения кодируются в R&G каналы, а глубина кодируется в B&A каналы. Нормы кодируются с помощью стереографической проекции, а глубина представляет собой 16-битное значение, упакованное в два 8-битных канала.
UnityCG.cginc включает файл имеет вспомогательную функцию DecodeDepthNormal для декодирования глубины и нормали из закодированного значения пикселя. Возвращаемая глубина находится в диапазоне 0..1.
Примеры использования текстуры глубины и нормалей см. в Замена шейдеров во время выполнения или Ambient Occlusion в Последующая обработка и эффекты полноэкранного режима.