Почему разноцветная? Это не картинка, а три чёрно-белые маски, сложенные по каналам: Ambient Occlusion — в красном, Roughness — в зелёном, Metallic — в синем. Такую текстуру называют ORM.
Раскладка каналов в разных движках:
Three.js (glTF): R — Ambient Occlusion, G — Roughness, B — Metallic.
Unity HDRP: R — Metallic, G — Ambient Occlusion, B — Detail Mask, A — Smoothness.
Unity, стандартный шейдер: R — Metallic, A — Smoothness.
Godot: ORMMaterial3D — одна текстура на Ambient Occlusion, Roughness и Metallic.
Видеопамять в Three.js: текстура 2048 × 2048 — 21,3 МБ (4 байта на пиксель + мипмапы). Три маски — 64 МБ, одна ORM — 21,3 МБ.
Почему 64, а не 3 × 21? Одна текстура 2048 × 2048 в браузере — 4 байта на пиксель плюс мипмапы: 21,3 МБ. Три маски — 64,0 МБ, одна ORM — 21,3 МБ. Числа — для Three.js по умолчанию.
Уточка и ведро — своя модель, маски запечены в 2048.
Мой сайт
source

Шортсы конечно прикольные, но с каждым новым который я встречаю закрадывается всё больше сомнений. Во первых тут было озвучено что при сохранении чб текстуры занимается аж четыре канала, хотя как бы по умолчанию вроде везде только ргб выставляется, а не ргба. Во вторых при импорте можно выбирать формат текстуры и вроде как они даже автоматически детектятся. В третьих как писали выше – упаковка используется ещё и для сокращения количества вызовов.
У меня складывается впечатление что у автора видосов пунктик именно на сокращение расхода видеопамяти, а не на оптимизацию, потому что ничего кроме памяти не обсуждается
поставил лайк, подписался
Это база, ее грех не знать
Спасибо. Интересно. А как это использовать в годот, или блендере? Я понимаю, что места в разы меньше, но как заставить годот распознавать?
Поправьте, если не прав, но если значения маски принимают значения от 0 до 255, то мы вполне можем обойтись форматом R8, где на каждый пиксель приходится 1 байт. В современных графических API ничего расширяться до R8G8B8A8 не будет, видеокарта спокойно работает с R8. Это даже сэкономит нам немного памяти, если мы будем хранить три текстуры в формате R8 (3 Мб на три текстуры 1024×1024), чем одну R8G8B8A8 (4 Мб на одну текстуру 1024×1024).
Упаковка текстур в одну решает совсем другие задачи: использование одной текстуры ускоряет выполнение пиксельного шейдера, так как вместо трёх операций семплирования мы используем одну, меньше нагружаем шину данных и реже промахиваемся по кэшу
Вот это круто!
Спасибо большое за ваши видео! Действительно очень полезный контент ❤