Как я использовал UV координаты в качестве масок для стилизованной игры

Сделал стилизованных персонажей для игры:

Покрасил через текстуру (атлас для каждого свой):

* Конечно лучше использовать атлас 1 на весь проект, например 1024 разрешения. Но для удобства в своем проекте я решил делать атласы 64 на 64 для каждого персонажа, а для окружения уже отдельный атлас побольше.
* Конечно лучше использовать атлас 1 на весь проект, например 1024 разрешения. Но для удобства в своем проекте я решил делать атласы 64 на 64 для каждого персонажа, а для окружения уже отдельный атлас побольше.

И задумался: а как бы мне добавить эффекты (rim, specular, matcap) без использования текстур в качестве масок + пришлось бы создавать нормальную развертку для каждого.

Придумал следующее: можно использовать UV1 либо UV2/3 в качестве маски для эффектов. Выбрал UV1, так как не планировал запекать освещение.

В блендере создал и выбрал UV1 под эффекты:

Выбрал меш, далее в атрибуты и UV Map раздел (Blender 4.2).
Выбрал меш, далее в атрибуты и UV Map раздел (Blender 4.2).

Однако не все платформы поддерживают больше четырех UV (тут я не уверен, поправьте меня, если не так). Поэтому решил разделить UV1 ещё на 4 квадрата, где каждый это комбинация эффектов по X и Y.

Здесь от 0 до 0.5 по X Y соответственно Specular и Rim эффекты. А со сдвигом 0.5 по Y выше находится Matcap + тени (но значения можно использовать и для других эффектов, тут зависит от цели, в закрепленном шейдере будет так).
Здесь от 0 до 0.5 по X Y соответственно Specular и Rim эффекты. А со сдвигом 0.5 по Y выше находится Matcap + тени (но значения можно использовать и для других эффектов, тут зависит от цели, в закрепленном шейдере будет так).

Развернул весь меш для UV1 в точку в координату (0, 0) = нет эффектов и далее выборочно выделял плоскости меша и двигал их координаты под нужный эффект. (0.499, 0.499) это координата, где полностью Specular и Rim эффект применены. (0.5, 0) уже начало Matcap квадрата и аналогично (0, 0) = нет эффекта. Выбрал плоскости скафандра, указал ему координату (0.25, 0.995) = полностью Matcap эффект и наполовину тени.

Однако кроется нюанс, что не получится комбинировать эффекты, например, matcap + specular, так как они в разных квадратах UV в примере выше. В моем проекте это не критично, однако если нужно комбинировать все, то тогда нужно использовать отдельные UV либо заполнить оставшиеся 2 квадрата нужными комбинациями и в шейдере объединить.

Сделал шейдер через shadergraph, subnode которая разделяет UV на квадраты и нормализует значения. У каждого квадрата значения от 0 до 1 по X и Y на выходе:

Как я использовал UV координаты в качестве масок для стилизованной игры

Ну и соответственно использование subnode:

UV, где выбираю UV1 (так как там делал маску), UV00 это нижний левый квадрат, который управляет значениями Specular и Rim, а UV01 маткап (UVXY, где X индекс по x оси и Y индекс по y оси). Через Split получаю X и Y значения маски.
UV, где выбираю UV1 (так как там делал маску), UV00 это нижний левый квадрат, который управляет значениями Specular и Rim, а UV01 маткап (UVXY, где X индекс по x оси и Y индекс по y оси). Через Split получаю X и Y значения маски.

Весь шейдер и ноды можно скачать тут:

Если понравились персонажи или хотите поддержать меня, можно купить их в asset store:

Надеюсь этот материал будет кому-то полезным.

12
1
1
4 комментария