Как применить перенос художественного стиля для улучшения внешнего вида игр, разработанных с помощью Unity?

Применение передачи художественного стиля для фотографий существует уже давно. Этот метод стал популярным благодаря мобильным приложениям, таким как Prisma, чтобы дать начинающему пользователю возможность сделать свою фотографию такой, как будто ее нарисовали величайшие художники нашего времени. Но какое-то время применение передачи художественного стиля ограничивалось фотографиями и видео. В этой статье мы собираемся изучить, как мы можем применить мощь искусственного интеллекта и применить ее к 2D- и 3D-визуальным эффектам в играх, а также придать им художественный вид.

Google Stadia анонсировала одну из таких функций для просмотра игровых потоков с применением переноса художественного стиля. Но это доступно не всем разработчикам игр. Unity недавно начала добиваться значительных успехов в поддержке ИИ и машинного обучения в своем игровом движке.

Если вы хотите познакомиться с агентами машинного обучения Unity, прочтите статью ниже



Было несколько фреймворков с открытым исходным кодом от Unity. Одним из таких достижений является фреймворк Unity’s Barracuda. Barracuda позволяет разработчикам Unity использовать обученные модели машинного обучения в своих проектах независимо от платформы. Но формат модели ML, поддерживаемый на момент написания этой статьи, ограничен только ONNX. Некоторые интересные люди расширили открытый исходный код Barracuda для поддержки формата TFLite здесь. И предоставили кучу образцов. Один из таких примеров - перенос художественного стиля в веб-камеру Unity. В этой статье мы собираемся расширить этот пример, чтобы применить перенос художественного стиля к нашему игровому процессу.

Постобработка изображений:

Мы собираемся написать собственный эффект постобработки изображений для нашей игры. Обратите внимание, что этот сценарий постпроцессора написан по старинке, а не с использованием конвейера рендеринга. Перед использованием следующего кода, пожалуйста, клонируйте этот репозиторий и попробуйте.

StyleTransferPostProcessing.cs должен быть добавлен в качестве компонента к основной камере нашей сцены в Unity. Этот скрипт использует 2 обученные модели машинного обучения. Одна модель предназначена для прогнозирования стиля на основе данного арта, вторая - для применения этого стиля к данной текстуре. Предсказание стиля - это одноразовая операция, поэтому она добавляется в метод Start.

Фактическая покадровая передача художественного стиля происходит в вызове «OnRenderImage». у нас есть 2 возможных варианта этой передачи художественного стиля. Один из вариантов - мы применяем стиль и используем нанесенное изображение как есть. Другой вариант: после подачи заявки на перенос стиля мы смешиваем исходный рендеринг с камеры и результат стиля для более пикантного вида. Это контролируется логической переменной blendWithSource.

Для смешивания используется следующий шейдер (Multiply blend)

Shader "blend" {
    Properties{
        _MainTex("Texture to blend", 2D) = "black" {}
    }
        SubShader{
            Tags { "Queue" = "Transparent" }
            Pass {
                Blend DstColor Zero
                SetTexture[_MainTex] { combine texture }
            }
 
    }
}

Представление:

Этот эксперимент проводился на моем MacBook Pro 2018 года выпуска, изначально мы получили всего 0,2 кадра в секунду. После настройки некоторых параметров Unity Player, параметров TFLite и использования варианта float16 модели TFlite мы смогли достичь номинальной скорости от 15 до 20 кадров в секунду. Это еще далеко не приемлемо. Однако для разработчиков игр это очень многообещающий старт для использования этой технологии. В высокопроизводительных игровых установках это может достигнуть приемлемых 60 FPS, если мы будем последовательно настраивать это дальше.

Эксперименты:

Резюме:

В то время как применение художественного стиля делает игровой процесс похожим на искусство, шаг вперед и его смешение не только применяет художественный стиль, но и сохраняет исходный цвет объектов в сцене, создавая вид сказочного искусства. Поскольку выходные данные моделей передачи стилей составляют всего 384 x 384 пикселя, масштабирование для соответствия разрешению выглядит зашумленным с пикселями. Но после смешивания того же с исходным изображением получается резкое изображение.