Какой взять тексель и сколько текстурных групп?
Информация нацелена на новичка, который без ТЗ делает работу в портфель.
Плотность текселя (Texel Density, далее TD) величина, которая показывает сколько пикселей будет содержать размерная единица модели px/см. Чем больше значение, тем больше пикселей будет выделено на отрисовку деталей, соответственно тем выше качество картинки. Обратной стороной высокого качества является высокий вес текстур, и как следствие движок будет дольше просчитывать отрисовку. Так вот чтобы вес текстур не был лишним, значение TD надо подбирать.
Выбор значения TD зависит от многих факторов, но для новичка достаточно этих:
1. Расстояние, с которого будет показана модель. Модель показана только целиком, общий, дальний план, то можешь сэкономить и взять от 4 до 10 px\см, тут чем дальше объект от камеры, тем меньше берешь значение. Если собираешься делать крупным планом рендеры модели, то TD лучше взять повыше, от 10 до 15 px\см, но тогда будет больше текстурных групп, тяжелее будет идти процесс текстурирования. Примеры:
2. Уровень детализации. Если модель имеет много мелких деталей и нужно чтобы они были как следует прорисованы, бери TD повыше, на 3-4 px/см, не забывая про расстояние до камеры. Если есть возможность, то стоит собрать мелкие детали в отдельную текстурную группу и взять высокий TD, а остальные группы сделать с меньшим TD. Если деталей совсем мало, на нормальную UV не наберется, то можно в общей развертке с нормальным TD перед упаковкой апскейлить нужные острова (к примеру увеличить в два раза), чтобы только для них поднять TD.
3. Акценты. То, что будет в первую очередь привлекать внимание зрителя, стоит также отнести в группу с более высоким TD. Например лицо (тут ещё и детализация), фары авто, приборная панель и т.д. Днище автомобиля едва ли будет видно на твоей презентации, его напротив стоит отнести в отдельную группу, где TD будет в районе 3 px/см. Тоже самое касается задних стенок многих стационарных объектов, которые не будут показаны. Если у тебя сцена, где есть главная модель — центр внимания зрителя, и есть пропсы, то можно сэкономить, сделав пропсы с TD меньшим на 2-4 px/см, да и как правило, пропсы будут дальше расположены чем главный объект, что ещё позволяет уменьшить TD. Тоже самое касается всего окружения. Примеры далее будут.
Разобрались какое значение TD брать, теперь давай разберемся сколько нужно текстурных групп, чтобы это значение получить.
Делать это лучше после того, как будет готова подетальная развертка, чтобы было понятно какие элементы будут оверлапнуты. В гугле не нашел формулу, но имея понимание, труда вывести самому не составило:
где S - площадь поверхности геометрии за вычетом оверлапнутых частей, см2;
a - сторона текстуры (..1024, 2048, 4096, 8192..), px;
TD - плотность текселя для которой ищем количество текстурных групп, px/см;
% - доля заполнения UV пространства после упаковки, так как до упаковки ты ещё не знаешь насколько плотно упакуешь, то для расчёта можно взять среднее наиболее вероятное значение - 0,7;
n - искомое количество текстурных сетов, шт.
Давай на примере покажу, чтобы наглядней.
Методика ниже может кому-то показаться сложной, но это не так — стоит один раз попробовать и потом этот процесс будет занимать несколько минут. Сложный взят пример с 4етыремя разными TD, чаще всего TD один на всю модель и всё вообще очень просто.
1) Есть Jeep Wrangler, сначала хочу убедиться, что его размеры соответствуют правде, иначе расчёт даст фейковые значения.
Всё верно, 3,8 м длина кузова. Выделяю всё, применяю скейл.
2) Делаю копию, удаляю (не применяю!) все зеркала и прочие модификаторы, которые остались для оверлапов на UV:
3) Группирую предварительно по TD. К слову, далеко не всегда нужно для одной модели брать разный TD, но в случае статичного авто, есть днище, где грех не сэкономить, и есть салон, который показывается крупным планом. Поэтому тут чаще всего лучше использовать 3-4 разных TD.
— Стекло фар, лобовое, стекло с приборки, иначе говоря всё, что имеет прозрачность, мы выносим в отдельную группу, чтобы только для этой группы у нас был альфа-канал, в целях экономии общего веса всех текстур. Будем рассчитывать на TD 10-12 px/см.
— Салон, приборка, зеркала, содержимое салона, тут мелкие детали, мелкие фаски, и рендер с близкого расстояния, поэтому TD в диапазоне 10-15 px/см.
— Кузов, колёса и всё что на нём есть, что не попадает в крупный кадр салона, хотим чтобы имело TD не менее 8 px/см.
— Днище, всё что есть под ним будет едва ли видно, будет в темноте, поэтому тут можно сэкономить ресурсы, выделим 3-4 px/см.
Все объекты с одинаковым TD объединяю в один меш, итого 4 меша у меня. Если у тебя один TD на всю модель, то соответственно объединяй всю модель в один меш. Это нужно для того, чтобы аддон посчитал площадь поверхности.
4) Включаю в настройках аддон 3D-Print Toolbox.
5) По очереди выбираю получившиеся меши, узнаю с помощью аддона площадь каждого: 3D-Print > Analyze > Area, записываю.
6) Cчитаем итоговое количество текстурных групп: — стекла тут сильно мало чтобы делать 4к группу на него, поэтому, подставил в расчёт размер текстуры a — 1024px, вышло чётко 10 px
— для салона, при TD 10 px/см, получилось 0,87 текстурные группы, округляем до 1, в итоге TD будет чуть больше, что нам на руку.
— для кузова с колесами получил 1,5 группы, округляю в бОльшую сторону, чтобы получить выше качество, а не ниже, итого 2 группы.
— с днищем тоже пришлось по экспериментировать, 4к оказалось сильно много, а 1к мало, в итоге остановился на одной 2к группе.
Можно сходу пересчитать, какой TD получится у днища, если мы запакуем его в 2к — 5,1 px/см.
Итого на весь джип 5 текстурных групп (1 — 1024, 1 — 2048, 3 — 4096). Я бы сказал, что это скорее много, чем мало, в реальном проекте, скорее всего, были бы более жесткие ограничения. Но это работа для портфеля, тут хочется иметь высокое качество текстур. Главное не ленись делать больше оверлапов!)
В качестве примера модель ученика Кайно — Романова Дмитрия