Использование LUT в URP для Unity

Замена Lightweight Render Pipeline в Unity на более совершенный и интересный Universal Render Pipeline подарил многим разработчикам кучу новых инструментов и возможностей. Изменения коснулись и постпроцессинга, как всегда в лучшую сторону (хоть со мной некоторые могут и не согласиться 🙂 ).

Color Lookup — фильтр в URP теперь доступен практически на всех платформах, однако для качественной работы старые LUT — текстуры могут уже не подойти. Посмотрим, как можно выйти из этой ситуации.

Идеальный вариант — иметь у себя в инструментарии нейтральный LUT, идеально подходящий для URP:

Нейтральная текстура LUT. Не качайте ее, лучше используйте ссылку ниже!

Не стоит сохранять изображение выше, так как оно прошло преобразования в движке блога. Лучше воспользуйтесь этой ссылкой для сохранения текстуры:

Подготовка кастомной LUT-текстуры

По-хорошему подготовка своей LUT-текстуры, согласно множеству туториалов, проводится в Photoshop. При этом шаги достаточно просты:

  1. Делаем скриншот нужной нам сцены в нашем проекте на Unity (желательно в игровом режиме)
  2. Открываем Photoshop, вставляем скриншот на новый холст



  3. Добавляем Adjustment Layer на каждый фильтр, который хотим применить к изображению (Например Exposure, Curves и т.д.) и производим необходимые манипуляции с изображением этими фильтрами





  4. Когда картинка нас начинает устраивать — открываем вторым холстом нейтральный LUT, копируем все Adjustment-слои, которые мы наделали на предыдущем шаге и вставляем их на холст с LUT



  5. Сохраняем новый png-файл с измененным LUT.

Если нет Photoshop

Само собой, не у всех есть такой отличный инструмент. На самом деле такие преобразования можно делать в любом редакторе, даже если в нем нет Adjustment-слоев. Конечно тогда преобразования со скриншота будет сложнее перенести на LUT-текстуру. Но можно и схитрить.

Я сделаю те же манипуляции в бесплатном редакторе Aseprite.

  1. Вставляем наш скриншот в редактор. Делаем холст шириной в 1024 пикселя (размер по горизонтали нейтральной LUT-текстуры). Приведение к ширине 1024 просто облегчит нам финальную обрезку перед экспортом текстуры. Туда же вставляем нейтральную LUT текстуру в позицию 0 по вертикали и строго по горизонтали так, чтобы она четко вошла в наши 1024 пикселя.



  2. Делаем необходимые манипуляций через инструменты Adjustments



  3. Когда картинка устраивает, обрезаем холст по высоте так, чтобы остались первые 32 пикселя — то есть только наша LUT-текстура, которую мы вставляли. И сохраняем в новый png-файл

Импорт в Unity

Теперь достаточно импортировать нашу текстуру в проект на Unity и испробовать. Для правильной работы LUT в фильтре Color Lookup, файл LUT-текстуры необходимо импортировать со снятой галочкой sRgb и отключенным сжатием текстур (причем сжатие нужно отключить во всех вкладках с настройками платформ)

Не стоит пугаться, если при отключении sRGB текстура явно посветлеет. На финальный результат работы фильтра это не повлияет. Это происходит из-за разного Color Space у экпортируемой текстуры из редактора и рендра Unity.

Далее достаточно указать нашу текстуру в параметре фильтра Color Lookup и увидеть конечный результат:

Можно смело сравнивать с тем, что было в редакторе и что получилось уже в проекте.

И на последок

Немного слов о том — как именно заставить работать эффекты постпроцессинга на сцене. Если вы собираете сцену с нуля и у вас нет стандартного Post-process Volume из учебной сцены, то достаточно содать новый объект на сцене Volume — Global Volume. В свойстве Profile созданного объекта нажать кнопку New, чтобы создать новый профиль для фильтров. После чего нажать появившуюся кнопку «Add override», выбрав Color Lookup.

Add Override позволит добавить и другие глобальные эффекты постпроцессинга. Главное — не забыть включить галочку «Postprocessing» в свойствах камеры сцены.

Метки: , , , , , , ,