В этом уроке мы поговорим о таком понятии как тексели. Разберем что это такое и с чем их едят.
Видеоурок
Текстовый урок
Итак, первая картинка, в принципе, отвечает на поставленный вопрос, но может остаться легкое недоумение. Пиксель — это наименьшая единица информации, которая может отображаться на экране. Все просто и понятно. Наши мониторы состоят из пикселей, чем их больше, тем лучше (для нас, но не нашей видеокарты, но не об этом сейчас :) ). Но текстура тоже состоит из пикселей, ведь мы ищем их большего разрешения, для повышения качества материалов.
Но проводить параллель между пикселем и текселем можно лишь в редакторе изображений или до тех пор, пока вы не наложите свою текстуру на объект. Теперь определение текселей. Тексель — это наименьшая единица информации из которой состоит текстура. Ну вот, то есть пиксель скажите вы. И в принципе, вы будете правы. Так оно и есть.
Но… Один пиксель монитора может быть определен множеством текселей и наоборот, один тексель может покрывать множество пикселей.
Отсюда выплывает следующее определение. Плотность текселей — это количество «пикселей» текстуры на меш-объекте. Люди часто говорят «соотношение пикселей» или «плотность пикселей» подразумевая под этом плотность текселей.
Здесь мы видим несколько кубиков и у всех из них различная плотность текселей. Указанная плотность 10,24px/cm установлена лишь для пола со стенами и за счет этого мы можем видеть на них одинаковую плотность текстуры. Для кубиков плотность либо слишком низкая и от этого текстура мыльная, либо же чрезмерно высокая, от чего большая часть деталей попросту не отображается ввиду относительно низкого разрешение дисплея.
Чтобы рассчитать плотность текселей, нужно разделить разрешение текстуры на площадь покрываемую ею. Все элементарно и просто. Делим разрешение текстуры на квадратный метр и получаем итоговую плотность пикселей на квадратный сантиметр. Чем выше значение, тем качественен будет выглядеть текстура на объекте, но лишь до тех пор, пока не упрется в физические пределы вашего монитора.
Если вы хотите достичь 1024px на квадратный метр (100см), то плотность текселей должна составлять 10.24. Учитывайте, что если вы будет использовать текстуру размером 1024х1024 пикселя, то она будет полностью покрывать все UV-пространст (от 0 до 1 по обеим осям). Если же текстура 2048х2048, то она лишь на четверть должна покрывать UV-пространство.
Сокращение TD расшифровывается как Texel Density (то есть плотность текселей). Поэтому, когда речь идет о текстурах или материалах на CG-шных форумах, знайте, речь идет о плотности текселей на объектах.
Давайте посмотрим на объекты со второго слайда с равномерной плотностью текселей. Для всех объектов она составляет 10,24px/cm. Если посмотреть на эти кубики в ортогональном режиме на виде сбоку или же спереди, они вовсе начнут сливаться со стенами, ввиду равномерной плотности одной и той же текстуры.
Перед тем как вы приступите к созданию окружения или игры, очень важно определится с правильными масштабами текстур, их размерами и плотностью текселей, иначе все вышеперечисленное будет не пропорционально. Выбор плотности текселей позволит избежать создания художниками излишней, либо недостаточной детализации для объектов окружения и несоответствия масштабов текстур и их качества.
- Если речь об игре, определитесь с типом игры и ее окружения: шутер от первого лица, от третьего лица, вид сверху, вид сбоку и т.д. Что и как рассмотрим ниже.
- Разделите все объекты в вашей сцене на две или более категорий: объекты с которыми игрок непосредственно взаимодействует, ближние объекты, дальние, фоновые…
- Проведите некоторые тесты и определитесь, какая плотность текселей дает наилучший результат.
- Найдите способ применить нужную плотность текселей для всех моделей.
- Придерживайтесь выбранной плотности для всех категорий объектов до самого конца.
В случае использования уникального объекта с уникальной текстурой (как тот, что вы видите на экране) вам нужно лишь подобрать текстуру соответствующего разрешения и отрегулировать масштаб отдельных UV-островов в соответствии с их занимаемой площадью на объекте. Если какая-то часть объекта занимает большую его половину, то и на UV-развертке она должна занимать большую половину. При таком подходе плотность текселей будет равномерной по всему объекту.
Когда вы используете бесшовную текстуру (tileable), вы должны держать в голове плотность текселей и подгонять размер UV-развертки в соответствии с ней.
Формулу вы видите на изображении:
Давайте разберем пару наглядных примеров…
При наличии текстуры с разрешением 512х512 пикселей и требуемой плотности текселей 10,24 нам нужно два повторения текстуры на каждые 100см или же 4 на каждый квадратный метр.
Другой пример… При наличии текстуры с разрешением 256х256 пикселей и требуемой плотности текселей 5,12 нам нужно те же 2 повторения текстуры на каждый метр, но если наш объект имеет длину 2 метра, как в примере, то это дает 4 повторения текстуры.
Все было хорошо и просто ровно до этого момента. Мы всегда знаем размеры наших объектов в сцене и разрешение текстур, поэтому по не хитрой формуле все можем рассчитать. Так то оно и есть ровно до того момента, пока мы не начнем рендерить анимацию или же создавать трехмерную игру.
Дело в том, что в обоих этих случаях площадь монитора покрываемая этими объектами может изменяться. Так как же определить, какая плотность текселей подойдет вашей сцене или игре?
Есть два основных фактора, которые помогут определить плотность текселей. Первый, это насколько большим объект будет на экране и второй, это количество доступной вам памяти. В идеале, вы хотите, чтобы количество текселей равнялось количеству пикселей отображающих ваш объект. Но конечно же, на практике такого почти никогда не бывает, поэтому мы можем лишь приближаться к этим значениям настолько, насколько это возможно.
Стоит отметить такое понятие как Mipmaping. С помощью данной техники можно изменять используемую текстуру (точнее ее размер) в зависимости от площади, которую объект покрывает на экране. Но это тоже не панацея и идеальных результатов она не дает, да и тема эта стоит отдельного и более детального рассмотрения.
В играх от 3-го лица вы не так часто будете приближаться к окружению, зато часто будете видеть своего персонажа. Поэтому для окружения используется примерно 512px на метр, а для персонажа 1024+ и выше.
В играх от первого лица плотность текселей, как правило, наиболее высокая, так как вы можете подойти очень близко к большому количество объектов в сцене. Оружие и руки игрока имеют повышенную плотность текселей. (1024+)
В стратегиях и играх с видом сверху/сбоку вы всегда находитесь далеко от окружения, поэтому в них используются очень низкие разрешения текстур. (128, 256)
Несмотря на универсальность всех этих правил, их часто нарушают в угоду большей детализации отдельных частей. Например, для лица персонажа или же его оружия (если речь идет об FPS), отводится куда больше текстурных пикселей, нежели стоило бы, просто потому, что они все время на виду и ради них можно пожертвовать другими частями (особенно, скрытыми из виду). И в тоже время дальние объекты, такие как небо или горы, к которым игрок никогда не приблизится создаются гораздо меньшего качества с целью экономии ресурсов.
Теперь когда вы знакомы с основами, можно поговорить о том, какую плотность текселей использовать для различных групп объектов. Мы сейчас не будет сосредотачиваться на уровне детализации самих моделей, а поговорим лишь о плотности текселей.
Можно разделить окружение на 3 категории: близкие объекты с которыми игрок может взаимодействовать (указаны зеленым), средней удаленности, то есть объекты, которые вы видите, но не можете подойти к ним слишком близко (указаны желтым) и объекты фона, которые находятся очень далеко и вы никогда к ним не приблизитесь (указаны красным).
Если мы посмотрим на предыдущий слайд сверху, то результат будет примерно следуюшим:
Зеленые объекты помимо игровой зоны могут иногда использоваться в средней зоне, но точно не стоит использовать их в удаленной зоне. Такой объект будет выбиваться своей высокой детализацией на фоне остальных с низкой плотностью текселей и будет впустую расходовать огромное количество памяти.
Средние объекты иногда можно использовать в удаленной зоне, но не стоит их переносить в игровую зону, так как при близком их рассмотрении они будут иметь низкое разрешение текстур.
Объекты заднего фона стоит использовать лишь в своей зоне и ни в коем случае не в средней и игровой (если вы не создаете пиксель-арт конечно же).
Подобное разделение позволяет вам по максимуму использовать сэкономленную память для максимальной детализации игровых объектов и не тратить ее на фоновые объекты, ведь этого никто даже не заметит.
Надеюсь, теперь у вас есть более четкое представление о том, что такое тексели и какой плотности они должны быть в той или иной ситуации.
Happy Blending! ;)