Привет всем.
Разбираюсь с постобработкой. Есть пробелы в знаниях, которые не позволяют точно понимать что делаю :)
Есть метод OnRenderImage. В него падаются текстуры source и destination.
В source, на сколько понимаю, приходит содержимое, которое отсортировано по глубине и с учетом ZTest.
В destination подают текстуру, которая будет либо выведена на экран, либо перейдт в следующий OnRenderImage.
Вопросы, собственно такие:
-как(возможно ли в Unity) получить текстуру, которую отрисовала предыдущая камера с учетом DepthTest и без предыдущего содержимого?
То есть возможно ли получить в source только изображения предыущей(i-й) камеры без частей изображения от всех остальных(<i-й) камер.
Я знаю, что можно сделать то, что я описываю с помощью Blit изображения в какую-то текстуру, а потом делать с ним что хочешь или менять порядок отрисовки камер, но меня интересует то, что спрашиваю.
Дело в том, что есть фон и его пишет камера с depth=0. Камера с depth=1 пишет обьекты A на фоне. Source в OnRenderImage камеры depth=1 содержит и фон и обьекты. Мой пост-эффект должен смещать картинку обьектов A на фоне.
То есть я в OnRenderImage камеры с depth=1 имею доступ к текстуре глубины этой камеры, так же есть доступ к текстуре глубины предыдущей камеры, но итоговая текстура уже отрендерена и фон перетерт. Наверно для unity логично иметь где-то текстуру с изображением только обьектов A и только предыдущего фона. Существуют ли такие текстуры и как их получить?
Ты какой то велосипед придумываешь. Для чего так заморачиваться?
Можно попробовать последовательность камер поменять и на первой с объектами применить пост эффект, а фоновую фильтровать через глубину.
Alerr
В source OnRenderImage приходит не содержимое с учётом DepthTest, а уже готовая текстура, которая была отрисована камерой с учётом всех ее настроек и материалов. Если тебе для пост-процесса нужна какая-то ещё специфичная текстура, рисуй ее ещё одной камерой, просто очередь сделай ниже и зашарь текстуру для всех. Тогда в главном пост-процессе у тебя будет необходимая информация.
Ну и резолвь глубину в текстуру, если она тебе нужна. Именно в момент рендера в камере, в конце кадра. Когда-то давно я тебе уже показывал, как это делать. Правда потом, в следующей версии юнити, что-то сломали. Возможно уже починили, я не проверял)
bool
Спасибо за обьяснения. Пока так и делаю.
новый PostProcessingStack норм работает. переходи на него :)
Durane
> новый PostProcessingStack норм работает. переходи на него :)
не подскажешь как в нем узнать когда камера попадает в цветокорректирующий volume?
Может каллбэки там есть на этот случай?
Alerr
> не подскажешь как в нем узнать когда камера попадает в цветокорректирующий
> volume?
> Может каллбэки там есть на этот случай?
попробуй покопать в сторону PostProcessLayer.HasActiveEffects()
явных ивентов не видел
Тема в архиве.