Плотность текселей: почему у вас текстура мылит именно на полу
Texel density — плотность текселей: сколько пикселей текстуры приходится на метр реального (или игрового) мира. Считается в px/m и объясняет половину «странных» проблем с мылом.
Арифметика
Комната 4×4 метра, стена развёрнута на половину UV-пространства, текстура 2048×2048. Значит на стену ушло 1024 пикселя на 4 метра — 256 px/m. Пол той же комнаты растянут на всю остальную половину атласа по диагонали, получает те же 1024 пикселя, но на большую площадь в UV — плотность падает. И наоборот: мелкие пропсы, занимающие огромный остров UV, получают 500 px/m и выглядят хрустящими рядом с полом за 150.
Запомните связь: плотность = размер UV-острова ÷ реальный размер объекта. Ошибка в любой из двух величин одинаково убивает картинку, и исправляется она только переразвёрткой.
Глаз замечает не абсолютное качество, а разницу. Мыло на полу при чётких обоях — это не «текстура плохая», это дисбаланс плотности.
Нормы индустрии
Ориентиры для AAA-пропсов/окружения:
- 512 px/m — hero-объекты, то, что рассматривают вплотную
- 256 px/m — стандартная плотность окружения (стены, мебель, пол)
- 128 px/m — дальний план, трава, камни
Для мобильной игры всё делится примерно на два. Главное число — не рекорд, а единообразие: все объекты одной категории должны иметь одну плотность с допуском ±10%.
Как выровнять в Blender
- Выделить UV-остров объекта (
Lв UV Editor над ним). - Масштабировать так, чтобы остров занимал долю UV-пространства, пропорциональную его реальному размеру.
- Проверить: Script → Run Script с простой формулой, или аддон UV Packer / Texel Density Checker (бесплатный, показывает плотность каждого острова цветом).
Быстрая ручная проверка: куб метр на метр, развёртка 1×1 в UV, текстура 1024 — значит 1024 px/m. От этой точки считаем остальные.
Компрессия — второй виновник
Даже ровная плотность мылит, если движок сжал текстуру агрессивнее бюджета. Половые атласы часто получают меньше мип-уровней из-за экономии памяти, а смотрит игрок на пол чаще, чем на потолок. Если пол «расплывается» на дистанции в 2 метра, а в 30 см от камеры чёткий — посмотрите настройки импорта: генерацию мипов и максимальный размер.
Выровняйте плотность один раз до паковки атласа — и половина «проблем с качеством» исчезнет без единого пикселя лишнего. А если бюджет памяти совсем тесный, поднимайте плотность точечно: там, где камера проводит больше всего времени. Пол и столешница у игрока перед глазами чаще, чем потолок.
Комментарии (1)
10 px/m для героя, 2 для фона — таблица, которую я хотел найти два года назад.
Форма для гостей комментариев пока не принимается — писать можно автору (expeot@outlook.com) или через владельца блога. Все записи выше настоящие, никто их не модерирует молча.