Для эффекта переворота карты с затенением мне не хотелось использовать что очевидно пбр свет. Самое простое решение — это взять мировую нормаль в шейдере, смотреть её значение по оси нужной нам оси по модулю и умножать на цвет. И мы получим простое затенение в зависимости от угла, если мы знаем что карточка смотрит на нас и её ориентацию.
Вот расчёт мировой нормали, вдруг кому пригодится.
o.worldNormal = normalize(mul(unity_ObjectToWorld, v.normal));Из того на что я потратил больше 5 секунд рамышлений стоит обратить внимание, что домножив на матрицу координат объекта к мировым на нормаль объекта (чтобы получить мировую нормаль), мы её дальне нормализуем. Почему? Потому что если наш Quad или меш не единичного скейла, то скейл сделает нашу нормаль ненормальной :) И дальше часть шейдера:
float4 frag (v2f i) : SV_Target
{
float4 col = tex2D(_MainTex, i.uv);
return col * abs(i.worldNormal.z);
}
Работать не будет из-за того, что компонент Z по сути будет домножен на скейл объекта. В общем я скоро буду уже не гуглить, а искать нужные мне вещи по блогу, чтобы быстро куски кода брать, а не вспоминать названия всех Unity переменных) Так как концепт я придумал сразу, он тривиальный. Но вот задачу я решал минут 5. Хотя она секунд на 10 :) (В моей задаче карточка вращается только по оси Y).#сниппет