Войти
ПрограммированиеФорумГрафика

Unity3D: как работает камера при постобработке?

#0
22:51, 28 июня 2018

Привет всем.
Разбираюсь с постобработкой. Есть пробелы в знаниях, которые не позволяют точно понимать что делаю :)
Есть метод 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 и только предыдущего фона. Существуют ли такие текстуры и как их получить?


#1
0:22, 29 июня 2018

Ты какой то велосипед придумываешь. Для чего так заморачиваться?
Можно попробовать последовательность камер поменять и на первой с объектами применить пост эффект, а фоновую фильтровать через глубину.

#2
12:37, 29 июня 2018

Alerr
В source OnRenderImage приходит не содержимое с учётом DepthTest, а уже готовая текстура, которая была отрисована камерой с учётом всех ее настроек и материалов. Если тебе для пост-процесса нужна какая-то ещё специфичная текстура, рисуй ее ещё одной камерой, просто очередь сделай ниже и зашарь текстуру для всех. Тогда в главном пост-процессе у тебя будет необходимая информация.

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

#3
13:03, 29 июня 2018

bool
Спасибо за обьяснения. Пока так и делаю.

#4
12:55, 2 июля 2018

новый PostProcessingStack норм работает. переходи на него :)

#5
21:32, 4 июля 2018

Durane
> новый PostProcessingStack норм работает. переходи на него :)
не подскажешь как в нем узнать когда камера попадает в цветокорректирующий volume?
Может каллбэки там есть на этот случай?

#6
9:04, 7 июля 2018

Alerr
> не подскажешь как в нем узнать когда камера попадает в цветокорректирующий
> volume?
> Может каллбэки там есть на этот случай?

попробуй покопать в сторону PostProcessLayer.HasActiveEffects()

явных ивентов не видел

ПрограммированиеФорумГрафика

Тема в архиве.