Товарищ
Волк, я к Вам отношусь с огромным уважением, но тут не соглашусь
Тут нет никакого шаманства. Всё что нужно сделать, это включить sRGB сэмплинг, так как карта нормалей не имеет цвета в линейном пространстве, это по сути только информация о векторах (от 0 до 1, не от -1 до 1 как многие думают, в диапазон от -1 до 1 нам переводит только потом шейдерная функция). Вы можете не включать это, но при выборе типа импорта NormalMap Юнити так же это сделает за Вас.
Функция распаковки текстуры tex2D достаточно емкая операция для графического конвеера. Особенно если речь идет о объекте с множеством вершин (типа Терреина). И конечно не критично использовать две распаковки, но так как я хочу разнообразить свой терреин, то приходится экономить.
Обратите внимание, как работает функция UnpackNormal (находится в UnityCG.cginc)
Используется csharp
inline fixed3 UnpackNormalDXT5nm (fixed4 packednormal)
{
fixed3 normal;
normal.xy = packednormal.wy * 2 - 1;
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
return normal;
}
inline fixed3 UnpackNormal(fixed4 packednormal)
{
#if defined(UNITY_NO_DXT5nm)
return packednormal.xyz * 2 - 1;
#else
return UnpackNormalDXT5nm(packednormal);
#endif
}
Как Вы можете заметить, берется только два канала из текстуры, альфа и зеленый, умножается на два и вычитается единица, то есть из диапазона 0/1 мы переводим -1/1: packednormal.wy * 2 - 1;
Далее идет расчет третей оси нормали на основе двух: sqrt(1 - saturate(dot(normal.xy, normal.xy)));
Профит.
Так зачем же нам оставлять два канала пустых, если это можно с выгодной использовать? Тем паче что это и выгода в физическом пространстве.
По поводу RTP. Мне самому не очень нравится, так как пользовательская система настройки не продуманна. А Эдитор скрипты вообще на коленке походу писались.
Он как бы игру пилит.. Коммерция все дела
Никакой коммерции. Это хобби, не более того.