Текстурирование протяженных объектов
для 3D сцен реального времени.
Ограничения, накладываемые аппликациями реального времени, не дают возможности использовать текстуры любого размера, поэтому для протяженных объектов используются обычно повторяемые текстуры (тайленые). Текстурирование таких объектов разбито на два этапа:
- создание собственно текстуры (комплекта текстур)
- «плейсинг» размещение текстур на объекте в сцене.
Эти два этапа тесно связанны между собой, иногда приходится итерационно возвращаться то к одному, то к другому этапу. Художник по текстурам должен учитывать это и чтобы минимизировать итерации должен придерживаться нескольких правил, о которых и пойдет речь.
Так при подготовке текстур необходимо учитывать степень детализации, зависящий от того, какого размера будет тайл текстуры в сцене. Также, при подготовке текстуры, необходимо учитывать где она будет применена, какие объекты, текстуры будут находиться рядом, особенности освещения и прочее. Рассмотрим все по порядку.
1. Детализация.
Любая сцена компьютерной 3d - графики представляет собой, в конечном итоге просто «кучу» текстурированных треугольников. А то что увидит пользователь – природный пейзаж или фантастический интерьер, море или пустыню, снежное поле или глубокий космос – зависит от того, как текстуры передают это впечатление.
С чего начать создание текстуры? Первое – необходимо определить степень ее подробности. Т. е. какого размера будет минимальная частичка текстуры в сцене.
Например, нужно создать «песок», а камера в игре - от первого лица.
В самом простом случае, видеть этот песок мы будем в основном с высоты персонажа. Если это обычный человек, то высота камеры над землей – 1,5 метра, если наш герой – муравей, то камера будет находится в 1 см от земли. Понятно, что текстуры в этих играх будут выглядеть по-разному. В первом случае – минимальной деталью будет «маленькая песчаная горка» во втором – довольно крупная песчинка.
Если мы собираемся использовать текстуру одинакового размера (например 256х256 пикселей), то количество отведенных пикселей на каждую подробность будет одинаковым и в том и в другом случае, а сами подробности – разные.
Правило: размер минимальной подробности на текстуре должен быть таким, чтобы она отображалась достаточным количеством пикселов для 1-го и 2-го уровня мип-мэпа.
Поясню. При наблюдении протяженных объектов мы видим такой объект как вблизи, так и вдали. Реал-тайм движки используют обычно мип-меппинг для текстур удаленных объектов. Таким образом, исходная текстура сокращается по площади в 4,16,64 и т. д. раз. При сокращении она автоматически фильтруется. Метод фильтрации – зависит от компьютера пользователя и установок программы. Но в любом случае информация теряется:
На рисунках показано, как «вырождается» исходная текстура 10х10 пикселей при разных методах уменьшения. Если текстура содержит контрастные штрихи толщиной 1 пиксель, то в лучшем случае они будут размазаны, а в худшем – вообще пропадут уже на первом уровне мип-мепа.
Непосредственно в сцене, это зависит от растрового угла камеры и положения объекта, но обычно вблизи пользователь видит 1 и 2 уровни.
Все сказанное относится к подробности графического файла текстуры, но необходимо еще учитывать подробность плейсинга. Т. е. визуальное соотношение деталей текстуры и окружающих объектов.
Например, мы собираемся положить текстуру «кирпич» на объект «дом». Если размер одного кирпича на текстуре больше «окна» в модели дома, или наоборот – по ширине окна укладывается полторы сотни кирпичей – налицо несоответствие степени подробности текстурного плейсинга, несмотря на то, что сама текстура может быть выполнена безупречно.
Такие ошибки часто возникают при текстурировании подстилающих поверхностей, когда «камешки на дороге» получаются размером с персонажа, или «травинки» размером с соседние деревья. Чтобы избежать этого, желательно учитывать еще одно:
Правило: Размер подробности текстуры нужно соотносить с метрическими размерами сцены и объектов в ней. Учитывать метрические размеры тайла текстуры.
Определиться с набором необходимых текстур и их детализацией помогут эскизы, черновое моделирование и предварительное определение вида из игровой камеры (вид и относительные размеры объектов и персонажей)
Теперь, когда мы имеем эту информацию и определились с количеством и качеством текстур, можно приступать к их изготовлению. (повторюсь – здесь речь пойдет о тайленых текстурах).
2. Изготовление текстур.
Основная задача – создать текстуру, которая будет хорошо выглядеть на протяженном объекте без заметных стыков и повторений «вафли».
Начнем со стыков.
В качестве исходной, можно использовать любую подходящую картинку.
Эта картинка должна быть достаточного размера, достаточной детализации, и желательно не иметь ярко выраженного местного освещения или перепада цветового тона или яркости, а также постороннего «шума». Например:
![]() |
Эта текстура далека от идеала, но самой идеальной будет «черный квадрат», а он не сможет решить всех задач, поэтому будем работать с тем, что есть. J
Правило: Выбираем из исходника зону, содержащую минимальное количество «дефектов».
Желательно, чтобы выбранная зона совпадала с размером будущей текстуры. При использовании фотографических текстур – лучше не допускать дополнительного скаллирования или поворота, а работать с исходником «пиксел в пиксел».
Далее, все действия производим и в известном пакете «фотошоп», я буду ссылаться на его команды.
Выбрав фрагмент текстуры, определяем паттерн (Define pattern), открываем новый файл, с линейным размером в 2 раза большим, чем область.
Заливаем его новым паттерном. Получаем заготовку, повторенную 4 раза (проверить, чтобы заливка велась без антиалиасинга на границах):
![]() |
![]() |
Теперь стыки очень хорошо заметны, с ними удобно работать. По окончании любого этапа работы можно выделить наиболее удачный фрагмент фиксированного размера (такого же, как текстура) и снова определить паттерн. Залив им новый файл – увидим что получилось. (можно записать эти операции в Action, а потом делать все одной кнопкой). Кроме того, этот способ позволит избежать некорректностей на границах при обработке фильтрами и пр.
Правило: С границами тайленых текстур работать на большем размере – минимум 2х2 повторения. Изменения производить на новом слое, оставляя нетронутым исходный, для возможности отката.
В данном случае лучше не полагаться на «хистори» фотошопа, потому что в любой момент может потребоваться не просто отменить действие, а взять какой-то фрагмент из исходника и лучше, чтобы он всегда был сохранен на отдельном слое.
Как избавиться от стыков? Конкретно эта текстура - нерегулярная и нет ярко выраженных элементов – здесь достаточно использовать Clone Stamp. А если текстура содержит целиковые фрагменты (дощечки, камни, кирпичики и т. п.), то границы лучше «накрывать» целиком такими фрагментами, копируя их с исходного слоя.

Пример использования целиковых элементов текстуры для ликвидации стыков
Центральные стыки удалены с помощью Clone Stamp
Чтобы на этом этапе добиться успеха нужно придерживаться следующего правила:
Правило: Области стыков не должны фактурно отличаться от основной текстуры! При наличии дискретных элементов – такие элементы должны повторяться целиком и нигде не отрезаться и не иметь плавных переходов в другие такие элементы. Протяженные линии не должны ломаться или резко менять направление или толщину.
Сделав первую коррекцию границ – можно еще раз провести операцию с паттерном и заливкой и убедиться, что стыки исчезли. Иногда достаточно первого раза, а иногда приходится корректировать снова и снова.
![]() |
Вот мы наконец добились идеальных стыков:
Но если посмотреть на уменьшенное изображение, станет заметно, что яркие пятна на текстуре, образуют скопления (макро рисунок). Такая текстура вдалеке будет «вафлить» (это жаргонный термин, настолько точный, что пояснять его не требуется J). В противоположном углу наблюдаются скопления темных линий.
Однако не всегда точно можно определить ЯРКОСТЬ вносит макродефект или ЦВЕТ?
Чтобы точно установить виновника – используем для рабочего слоя метод наложения luminosity, а под него подложим «белый» слой. Теперь мы видим только «яркости», исключив цвет
Яркость, как большую, так и недостаточную легче всего корректировать инструментами Burn - Dodge.
В случае, если дефект связан только с яркость – такой метод работает хорошо и дополнительной коррекции не требуется. А вот если виноват ЦВЕТ, то наложение по luminosity никаких изъянов не покажет.
В этом случае лучше поступить так: исходный файл нужно перевести в режим Lab Color и корректировать каналы цвета (А и В)
Например, специально «испортим» исходный цвет:
![]() |
Исходный
Для такого исходного файла дефект явно не в яркости, а в цвете. Содержимое каналов А и В наглядно это показывают.
Подведем итоги, чтобы текстура не «вафлила»:
Правило: необходимо устранить макродефекты – скопления контрастных элементов, ярких или темных пятен, цветовых пятен. Текстура в уменьшенном размере (при удалении) должна выглядеть по возможности монотонно.

Это особенно важно в случаях, если текстура будет повторяться на экране более 8-10 раз в одном направлении. Причем это справедливо как для нерегулярных, так и для четких геометрически правильных текстур (кирпичной кладки, паркета и пр.).
Итак, мы получили вполне приемлемую текстуру, которая может тайлиться по всем направлениям.
Но, теперь она много потеряла, по сравнению с исходной, нам пришлось убрать лишние нюансы, и выглядит она не так «интересно». А когда мы будем рассматривать ее вблизи – она вообще окажется «плоской».
Как теперь ее «оживить» и одновременно не испортить?
Фактура.
Для начала, специально введем новый термин «фактура». Это микро рельеф, который свойственен той или иной поверхности. Каждый материал, помимо цвета и рисунка имеет шероховатости на поверхности. Нужно определиться с материалом, который мы будем имитировать и добавить «шероховатости», свойственной этому материалу.
Проще всего использовать для этого стандартный фильтр «текстурайзер», задав изображение фактуры поверхности.
Например, мы хотим передать тот самый мрамор, но не полированную плитку, а природный камень, с естественной фактурой. Тогда в качестве фактуры в фильтре – используем саму нашу текстуру, предварительно сохранив ее в PSD-файл.
Открываем фильтр – загружаем наш файл и получаем результат:
![]() |
Применяя разные фактуры, можем получить разные «материалы» с одной и той же текстурой:

Однако, здесь тоже важно не переборщить, и поможет в этом еще пара правил.
Правила создания фактуры:
- Фактура должна так же стыковаться как и исходная текстура.
- Наложение фактуры нужно обязательно производить на увеличенной текстуре (мин 2х2) с последующей обрезкой.
- Если для разных текстур используется одна и та же фактура, она должна стыковаться на стыке текстур в сцене.
- Детальность фактуры должна соответствовать детальности текстуры и не «вырождаться» до 2-го уровня мип-мепа.
- Если Фактура имеет ярко выраженную освещенность, то плейсинг текстуры в сцене должен быть согласован с общим освещением.
- Необходимо помнить, что фактура это МИКРО-рельеф, а значит высота его не может быть большой. Попытка замены детализации сеточных объектов фактурой – недопустима!
Последний пункт требуется разъяснить особо. Имеется ввиду следующее: если требуется создать рельеф с большими деталями, например дорогу с крупными валунами, то здесь использование фактуры, вместо подробной сетки приведет не к улучшению вида, а к ухудшению! Потому что «дорога» так и останется плоской, и камни будут «нарисованы» на этой плоскости.
![]() |
А если пользователь видит такую текстуру то «сверху» то «сбоку», то общее впечатление резко портится. Игрок чувствует, что его «обманывают» и эффект присутствия исчезает.
Это не значит, что такую текстуру нельзя использовать вообще, но использовать ее нужно либо только там, где ее нельзя «разгадать», либо в составе комбинированных текстур (с переменной степенью детализации).
3. Цвет и работа с библиотекой текстур.
Принимая во внимание все вышесказанное, должно сложиться впечатление, что каждая конкретная текстура, сама по себе ничего не определяет, а является лишь винтиком в огромной машине по названием «сцена». Это так и есть, и поэтому всю работу по текстурированию нужно рассматривать в комплексе. Художник по текстурам должен работать не с единственной текстурой, а с библиотекой, т. е. набором текстур для конкретной сцены.
Все наработки необходимо иметь в оригиналах (исходных PSD - файлах) и постоянно проверять готовые текстуры на «совместимость».
Конечный вид объекта в сцене зависит не только от текстур, но и от освещения, настройки материалов, наложения эффектов и пр. Однако текстура в этой цепочке первична – поэтому для оптимизации работы по сборке сцены нужно перво-наперво согласовать текстуры друг с другом в библиотеке.
По эскизам и общему замыслу определяется общее цветовое решение сцены, персонажей и объектов. Обычно все окружение является фоном, на котором действуют персонажи и объекты. Важно, чтобы «читалось» то что должно «читаться», а остальное гармонично поддерживало это и не вступало в конфликт. Добиться этого довольно трудно и не всегда удается, но только в этом случае продукт будет успешным.
Прежде чем «собирать» сцену (заполнять объектами, расставлять освещение и пр.) Необходимо проверить и согласовать комплект текстур. Для этого разделить все текстуры по назначению (окружение, персонажи, объекты, эффекты) и сопоставить все текстуры друг с другом. Проверить, чтобы текстуры одной группы были в одном диапазоне яркости, цветовой тональности, гамме, насыщенности. При необходимости – откорректировать глобальными корректировками фотошопа.
Проверить соответствие детальности как текстур одной группы так и разных групп.
Группы, которые должны выделяться относительно друг друга должны иметь заметные различия цветовой гаммы, контрастности или яркости.
Если текстуры подготовлены описанным образом – собрать сцену не составляет большого труда.
«Удачные» текстуры следует использовать как базовые для других сцен, можно на их основе создавать модификации по цвету, яркости и пр. Чем больше текстур готово и проверено, тем меньше времени требуется на разработку остальных.
Помимо рассмотренных, в задачу текстурирования входят вопросы особенностей плейсинга, приемы разнообразия монотонных тайленых текстур, создание комплексных текстур, анимированных и эффектных текстур.









