Как подобрать тексель — простой и универсальный метод

Ниже я объясняю как это работает. Но если лень читать, то в самом низу конечная формула ждёт тебя :)

Возьмём за эталон мотоцикл с текселем 16px/cm. Как по мне, отличный баланс качества и оптимизации для работы в портфель. Для наглядности я накинул шахматку.
Каждая клетка шахматки имеет размер на модели 1х1см.
Получается, что каждая клетка 16х16 пикселей, ведь тексель показывает сколько пикселей приходится на 1см текстуры.

1.jpg

Запекаю текстуры, чтобы оценить.
Получаю отличное качество фасок, флоатеров.

2.jpg

Для наглядности накинул стикер с надписью, показать, что пиксельности или мыла нет.

3.jpg

Окей, с мотоциклом разобрались. Давай теперь возьмем для примера Colt, примерим ему такой же тексель — 16px/cm.
Теперь шахматка выглядит вот так 👇, каждая клетка 1х1см и 16х16 пикселей. Думаю уже только по этой картинке понятно, что пикселей теперь гораздо меньше, чем было на мотоцикле.

4.jpg

Запекаем фаски. Увеличь картинку, видишь пиксели, размытость текста. Провал.

5.jpg

На всякий случай уточню, если не понятно. На мотоцикле таких клеток (1х1см) помещается очень много, он большой (длина 230 см). У пистолета таких клеток мало, потому что он всего 36 см в длину. Поэтому чтобы количество пикселей было как у мотоцикла, квадратик 1х1 см должен иметь не 16х16 пикселей, а гораздо больше.

Обратный пример, возьмем танк.
Примеряем нашу тексельную шахматку (16 px/см).
Получаем очень много клеток, их даже не разглядеть.
То есть при текселе 16 у нас избыток пикселей. Ведь мы же убедились выше (на примере мотоцикла) сколько клеток нам нужно, чтобы качество было отличное. Избыток пикселей будет зря нагружать ПК.

6.jpg

Вот мы и подошли к главному вопросу. Как понять какой тексель надо взять, чтобы получить точно такое же отличное качество как на мотоцикле?

Логика прослеживается простая, чем меньше модель, тем больше тексель нужен, и наоборот, чем больше модель, тем меньше тексель.

Может показаться, что достаточно лишь понять, во сколько раз отличаются размером модели.
Площадь поверхности мотоцикла в 9 раз больше площади поверхности кольта. Получается возьмем тексель в 9 раз больше?
Увы, нет, потому что мы видим не всё покрытие модели разом, много остается за кадром или на тыльной стороне. И тут для каждой модели в зависимости
от её формы будут разные пропорции.
А нам бы универсальный подход.

К счастью, не габариты модели играют главную роль в выборе текселя, а расстояние с которого мы смотрим на модель. Влияние габаритов или размеров на тексель, это как следствие, вытекающее из факта, что чем модель больше, тем дальше нужно отодвинуть камеру, чтобы модель влезла в экран.
Осознание этого позволяет выявить нужный тексель сравнением не размеров моделей, а расстояний от камер до моделей.

Измеряем. Обрати внимание, что провожу линейку через центр камеры до пересечения с моделью.

7.jpg

8.jpg

9.jpg

10.jpg

Кроме этого, есть ещё важный параметр, который отвечает за размер объекта в кадре, это фокусное расстояние камеры. С ним мы не можем не считаться. Поэтому, для усложнения примера, я беру разные фокусные расстояния для всех трёх случаев.

Дано:
1. Кольт — расстояние до камеры 0,63 м, фокус 50 мм;
2. Мотоцикл — расстояние 5,42 м, фокус 75 мм;
3. Танк — расстояние 32,9 м, фокус 100 мм.

За эталон берем мотоцикл, ведь у него нужное нам качество.

Сравниваем:

У кольта, расстояние отличается в 5,42/0,63 = 8,6 раз, а фокус отличается в 75/50 = 1,5 раза.
Значит для кольта нужен тексель 16 * 8,6 / 1,5 = 91,8 px/см.

У танка, расстояние отличается в 5,42/32,9 = 0,16 раз, а фокус в 75/100 = 0,75 раз.
Значит для танка нужен тексель 16 * 0,16 / 0,75 = 3,51 px/cм.

Новичку такая разница в значениях текселя может показаться пугающей, но с математикой глупо спорить.

Теперь, для наглядности, я изменил размеры текстур у кольта и танка, так чтобы тексель соответствовал полученным расчётным значениям:

11.jpg

12.jpg

13.jpg

Тексель теперь разный, размеры клеток (в см), если мерить по поверхности модели, теперь разные. Но, мы видим, что относительно размера кадра, шахматка выровнялась на всех моделях, то есть количество текстурных пикселей на 1х1 см экрана стало везде одинаковое. А значит и визуальное качество одинаковое. Profit!

Проверим запеканием.

С пистолетом теперь всё в порядке, никакой пиксельности или мыла.

14.jpg

Хватит ли танку текселя 3,5?

15.jpg

Даже приблизив камеру в несколько раз, всё выглядит достойно.

16.jpg

Итак, какие выводы?

1) Чем ближе модель к камере, тем больше px/см нужно, чтобы отрисовка текстур была качественной.

2) Имея в распоряжении удачный пример, можно пересчитать тексель на любую другую модель, чтобы она тоже стала удачным примером.
Формулу получилась такая:

17.jpg

где TD - искомый тексель, px/cm;
TDэ - тексель эталона, px/cm;
L - расстояние от камеры до поверхности модели, м;
Lэ - расстояние от камеры до поверхности модели у эталона, м;
F - фокусное расстояние камеры, мм;
Fэ - фокусное расстояние камеры у эталона, мм.

Если у тебя нету удачного примера (эталона), то можно использовать значения, полученные в этом эксперименте: 16*5,42/75 = 1,15. Остается только подставить своё фокусное расстояние камеры и расстояние от камеры до модели. Расчёт надо делать на самую ближайшую камеру.

18.jpg

Спасибо ребятам за модели:
Мотоцикл — Егор Сергеев
Кольт — Анастасия Кощеева
Танк — Максим Соколов

Как определить количество текстурных групп для модели — статья

721 0 850 15
9
2022-04-29
Спасибо. То, что нужно.
2022-05-04
Гениальное просто!
Спасибо!
2022-05-05
теперь окончательно запутали и люди будут считать от шота ("Осознание этого позволяет выявить нужный тексель сравнением не размеров моделей, а расстояний от камер до моделей.")
2022-05-05
Крайне странный подход, это ужас на самом деле.
2022-05-05
Очень полезный материал, благодарю! Зная математически правильный тексель для пистолета и танка не проблема прикинуть нужный тексель на глаз для промежуточных объектов.
2022-05-06
Понимание прийдет с опытом. Слишком грамотно написано
2022-05-08
А как быть в гейм дэве?
2022-05-09
Данил, читать тз
2022-05-15
"Значит для танка нужен тексель 16 * 0,16 / 0,75 = 3,51 px/cм." ха ха ха... Скажите это разрабам World of tanks. С такими текстурами их игра будет весить 1 терабайт ха ха ха...
RENDER.RU