(англ. Vertex Attribute Compression / Vertex Packing)
- **Суть**: удаляем неиспользуемые каналы (tangent, color и т. п.) и переводим оставшиеся данные в более компактный формат — например, позицию из трёх `float32` (12 байт) в три `float16` (6 байт) или нормаль из трёх `float32` в 2-байтовую октэдрическую проекцию.
- **Что даёт**: уменьшает объём вершинного буфера ⇒ меньше пропускная способность памяти ⇒ быстрее GPU-обработка, особенно заметно на мобильных устройствах.
- **В Unity**: частично закрывается настройкой _Mesh Compression_, но для агрессивного «упаковывания» (кастомные half-precision, octa-normals, uint-пакеты UV) пишут собственный импортер/пост-процессор.
### Стенограмма разговора с Владиславом К., где мне рассказали об этой оптимизации
01:40:36 — Еще есть другая оптимизация, она уже более низкоуровневая
![[Снимок экрана 2025-05-28 в 14.26.49.png]]
01:41:57 — Это называется вершинные атрибуты, то есть какие данные у каждой вершины хранятся, здесь есть позиция, нормаль, тангент-вектор и UV.
01:42:10 — Как минимум надо понять, что тангенты, может быть, вам и не нужны. У вас используются нормал-мапы?
01:42:17 — Нормал-мапы для чего используются?
01:42:19 — Напомни.
01:42:20 — Для того, чтобы добавить более мелких деталей на объектах.
01:42:25 — А, это искусственное углубление, я понял.
01:42:30 — А нет, не используется.
![[Снимок экрана 2025-05-26 в 17.19.31.png|500]]
01:42:33 — Вот, это уже можно взять, выбрать медведя.
01:42:39 — Здесь есть tangents.
01:42:42 — И вот здесь можно поменять на none, чтобы их не было.
01:42:47 — Вот, и уже чуть-чуть будет полегче.
01:42:51 — Если Unity, конечно, сама не обрезает при билде, может обрезать, может не обрезать.
02:17:39 — Вероятно, что Unity уже вырезает эти танги во время билда, потому что видишь, что шейдер на самом деле его не использует.
02:17:46 — Но Unity я бы не доверял, я бы лучше выключил в любом случае.
![[Снимок экрана 2025-05-28 в 14.29.15.png]]
01:42:57 — теперь тангенты ушли, остались позиции, нормали, UV.
01:43:05 — И видишь, каждый из этих атрибутов занимает какое-то количество байтов.
01:43:09 — И мобильные устройства, они прямо очень сильно упираются в скорость памяти.
01:43:14 — И значит, что если у тебя вершины будут занимать меньше памяти, они будут быстрее вытягиваться, быстрее загружаться и быстрее обрабатываться.
01:43:22 — Это тоже то, над чем можно поработать.
01:43:25 — Мы убрали тангенты, уже какая-то часть памяти ушла.
01:43:30 — Есть разные техники, которые позволяют запаковывать немножко другие форматы, позиции, нормали, чтобы они занимали меньше памяти.
01:43:39 — Вот здесь, например, позицию можно будет как-то чуть-чуть по-другому запаковать, чтобы она весила не 12 байт, а поменьше, например, 6 или 8.
01:43:51 — С нормальными тоже так же можно будет сделать.
01:43:53 — Таким образом, получится сделать, чтобы вершины занимали меньше памяти, и они будут быстрее на видеокарте обрабатываться, быстрее вытягиваться из памяти.
01:44:02 — То есть, такую вещь можно попробовать сделать.
01:44:04 — Это прям кастомный код для этого надо писать, в Unity для этого инструмента нет.
01:44:08 — Но это просто то, что можно сделать в игре, в которой сильный упор на вершине идёт.
01:44:16 — У Юнти такого инструмента нет. Насколько это большая работа, чтобы написать инструмент, чтобы умел и читать, и конвертировать в обе стороны, чтобы это всё работало?
01:44:34 — Это зависит в часах.
01:44:43 — Наверное, в каком-то совсем базовом варианте это можно было сделать рабочим, в базовом варианте.
01:44:51 — Что-то уже поумнее, где сильно можно ужаться, это уже, конечно, подольше, плюс еще тут же нужно постоянно делать замеры, проверять.
01:45:00 — То есть, ну, неделю, может быть, рабочую, две недели
01:45:05 — рабочую.
01:45:06 — Ну, я это оцениваю.
01:45:07 — Только я бы это делал, например.
01:45:09 — Если простой вариант, то, наверное, пару дней это
01:45:12 — было бы сделать реалистично.
**Спикер 3:**
01:45:15 — С учетом тестов, с учетом подводных камней, с учетом
01:45:18 — всего пару дней.
**Спикер 1:**
01:45:22 — Какой-нибудь, да, простой и безопасный вариант можно
01:45:25 — сделать.
01:45:26 — За пару рабочих дней, пару-тройку, может быть, да.
**Спикер 3:**
01:45:29 — А так что-то более умное – это пару недель.
**Спикер 1:**
01:45:31 — Да, да, там потому что уже такая грань, что дальнейшее урезание размеров этих вершин начинает влиять на точность мешей, начинают появляться артефакты, они начинают плохо выглядеть, если что-то делать не так.
**Спикер 3:**
01:45:50 — Ну да, я видел это, когда ват-аниматор разрабатывали, было такое, да, я понимаю про что ты говоришь.
**Спикер 1:**
01:45:56 — Вот это все нужно, с этим нужно аккуратно.