Сохранить изображение с камеры Unity с эффектами постобработки - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть отдельная камера от моей основной камеры, цель которой - делать снимки экрана под разными углами. Иерархия как таковая:

enter image description here

  • Основная камера захватывает трехмерную сцену, как обычная основная камера, включая компоненты постобработки. Post-processing components
  • Камера GUI захватывает только слой пользовательского интерфейса.
  • Холст и изображение - это просто водяные знаки, отображаемые камерой GUI.

Я указываю основную камеру и GUI камеру на одну и ту же целевую текстуру рендеринга. Результат рендеринга текстуры выглядит корректным в инспекторе.

Render texture is correct

Затем я преобразую его в обычный Texture2D, чтобы его можно было сохранить:

RenderTexture.active = renderTexture;
destination.ReadPixels(new Rect(0f, 0f, renderTexture.width, renderTexture.height), 0, 0);
destination.Apply();

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

Bright colors opaque, dark colors transparent. (на черном, чтобы его было легче увидеть.)

Я также пробовал AsyncGPUReadback. Получающаяся в результате текстура в Инспекторе выглядит как плоская серая без отклонений.

Независимо от того, как я преобразую текстуру рендеринга в обычную текстуру, в результирующем PNG на диске присутствует только цветение.

Bloom only. (на черном, чтобы было легче увидеть.)

Я обнаружил, что если я отключаю постобработку, все работает как задумано, никаких изменений не требуется. Конечно, мне не хватает постобработки, которую я хочу!

РЕДАКТИРОВАТЬ: После дальнейших исследований выясняется, что методы кодирования Unity опираются на что-то внешнее по отношению к самой текстуре, в результате чего она сохраняет неправильные данные. Если я использую отдельный кодировщик PNG, использующий те же данные Color32, все работает как положено.

Мне все еще любопытно, каков «правильный» способ сделать это, хотя у меня есть путь вперед, по крайней мере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...