Графический эффект PS1-игр — в чём его особенность, и как воссоздать на UE4
Небольшой практический туториал.
Сейчас инди-разработчики всё чаще используют в своих проектах стиль игр с PS1. В первую очередь это касается особенностей графики, которые появились вследствие технических ограничений. Тем не менее именно это создавало самобытный визуальный стиль. Можно найти немало примеров подобных современных инди-проектов: Paratopic, сборник Haunted PS1 Demo Disc, в который входит 17 демоверсий, Night of the Consumers, Scary Tales Vol. 1 и многие другие.
Разработчик Мурад Бакхали в своём блоге опубликовал туториал, в котором рассказал, как на движке Unreal Engine 4 воссоздать эффект, имитирующий стиль PS1-игр. По словам автора, самое главное — это эффект дёргающихся вершин у моделей, который возникает при движении камеры или самих объектов. Мы выбрали из текста главное.
Такой эффект подёргивания связан с ограничениями железа PS1: консоль не могла свободно передвигать вершины полигонов, поэтому они привязывались к конкретным точкам в 3D-пространстве. Когда камера или сам объект передвигались, вслед за ними на экране передвигались и полигоны.
Так как они не могли делать это свободно, их вершины «перепрыгивали» с одной фиксированной точки на другую, когда приближались к ней. Из-за этого и создавался такой дёрганый эффект. Сегодня таких ограничений не существует.
Чтобы воссоздать этот эффект, потребуется как минимум один меш с нанесённым материалом. Первое, что нужно сделать — создать коллекции параметров материала. В них будут сохранены глобальные параметры, на которые можно будет ссылаться для любого материала. Это значит, что глобальные параметры будут действовать сразу для всех объектов определённого типа. Например, все материалы листвы могут ссылаться на параметр направления и силы ветра — так будет задаваться степень покачивания на ветру.
Второй шаг — создание функции материала. Функция PSXEffect_Function используется для смещения вершин и создания эффекта подёргивания. Функция также пикселизирует UV-данные — нужно лишь подключить нод Texture Sample, чтобы получить пикселизированную текстуру.
Обратите внимание, что при этом использовались ранее созданные параметры.
Чтобы понять, как работает эффект подёргивания, представьте трёхмерную сетку вокруг модели: вершины должны перескакивать между ближайшими точками на этой сетке.
Третий шаг — добавление функции PSXEffect_Function к материалам. Это легко сделать — нужно нажать на редактор материала и ввести название функции.
В результате должен получиться эффект подёргивания, у которого можно настраивать не только его силу, но и степень пикселизации текстур.
В заключение автор прикрепил ссылку на собственный репозиторий на GitHub, в котором содержатся все его наработки по этому эффекту.