Три маски в одной текстуре — 21 МБ вместо 64 #3d #webgl #threejs



Почему разноцветная? Это не картинка, а три чёрно-белые маски, сложенные по каналам: 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

7 Comments

  1. Шортсы конечно прикольные, но с каждым новым который я встречаю закрадывается всё больше сомнений. Во первых тут было озвучено что при сохранении чб текстуры занимается аж четыре канала, хотя как бы по умолчанию вроде везде только ргб выставляется, а не ргба. Во вторых при импорте можно выбирать формат текстуры и вроде как они даже автоматически детектятся. В третьих как писали выше – упаковка используется ещё и для сокращения количества вызовов.

    У меня складывается впечатление что у автора видосов пунктик именно на сокращение расхода видеопамяти, а не на оптимизацию, потому что ничего кроме памяти не обсуждается

  2. Поправьте, если не прав, но если значения маски принимают значения от 0 до 255, то мы вполне можем обойтись форматом R8, где на каждый пиксель приходится 1 байт. В современных графических API ничего расширяться до R8G8B8A8 не будет, видеокарта спокойно работает с R8. Это даже сэкономит нам немного памяти, если мы будем хранить три текстуры в формате R8 (3 Мб на три текстуры 1024×1024), чем одну R8G8B8A8 (4 Мб на одну текстуру 1024×1024).

    Упаковка текстур в одну решает совсем другие задачи: использование одной текстуры ускоряет выполнение пиксельного шейдера, так как вместо трёх операций семплирования мы используем одну, меньше нагружаем шину данных и реже промахиваемся по кэшу

Leave a Reply

Your email address will not be published. Required fields are marked *

You might like

© 2026 Cantinho do Vídeo - WordPress Video Theme by WPEnjoy