Использование LUT в URP для Unity
Замена Lightweight Render Pipeline в Unity на более совершенный и интересный Universal Render Pipeline подарил многим разработчикам кучу новых инструментов и возможностей. Изменения коснулись и постпроцессинга, как всегда в лучшую сторону (хоть со мной некоторые могут и не согласиться 🙂 ).
Color Lookup — фильтр в URP теперь доступен практически на всех платформах, однако для качественной работы старые LUT — текстуры могут уже не подойти. Посмотрим, как можно выйти из этой ситуации.
Идеальный вариант — иметь у себя в инструментарии нейтральный LUT, идеально подходящий для URP:
Не стоит сохранять изображение выше, так как оно прошло преобразования в движке блога. Лучше воспользуйтесь этой ссылкой для сохранения текстуры:
Подготовка кастомной LUT-текстуры
По-хорошему подготовка своей LUT-текстуры, согласно множеству туториалов, проводится в Photoshop. При этом шаги достаточно просты:
- Делаем скриншот нужной нам сцены в нашем проекте на Unity (желательно в игровом режиме)
- Открываем Photoshop, вставляем скриншот на новый холст
- Добавляем Adjustment Layer на каждый фильтр, который хотим применить к изображению (Например Exposure, Curves и т.д.) и производим необходимые манипуляции с изображением этими фильтрами
- Когда картинка нас начинает устраивать — открываем вторым холстом нейтральный LUT, копируем все Adjustment-слои, которые мы наделали на предыдущем шаге и вставляем их на холст с LUT
- Сохраняем новый png-файл с измененным LUT.
Если нет Photoshop
Само собой, не у всех есть такой отличный инструмент. На самом деле такие преобразования можно делать в любом редакторе, даже если в нем нет Adjustment-слоев. Конечно тогда преобразования со скриншота будет сложнее перенести на LUT-текстуру. Но можно и схитрить.
Я сделаю те же манипуляции в бесплатном редакторе Aseprite.
- Вставляем наш скриншот в редактор. Делаем холст шириной в 1024 пикселя (размер по горизонтали нейтральной LUT-текстуры). Приведение к ширине 1024 просто облегчит нам финальную обрезку перед экспортом текстуры. Туда же вставляем нейтральную LUT текстуру в позицию 0 по вертикали и строго по горизонтали так, чтобы она четко вошла в наши 1024 пикселя.
- Делаем необходимые манипуляций через инструменты Adjustments
- Когда картинка устраивает, обрезаем холст по высоте так, чтобы остались первые 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» в свойствах камеры сцены.
Метки: Color Lookup, LUT, Postprocess, Unity, Universal Render Pipeline, URP, Постпроцессинг, Юнити