Битность

Определение

Битность (от англ. bit depth) —  в контексте цифрового изображения описывает, сколько битов используется для представления значения цветового канала или другого компонента изображения и с какой точностью эти значения хранятся.

Проще всего представить это на градиенте от чёрного к белому. В реальности переход непрерывный, но компьютер не хранит бесконечное количество оттенков. Он разбивает переход на отдельные цифровые значения — условные ступени.

Чем выше битность, тем больше таких ступеней и тем меньше разница между соседними оттенками. Например, при 8 битах на канал можно записать до 256 значений одного цветового канала. При 10 битах — уже 1024, при 12 битах — 4096. Именно поэтому высокая битность особенно заметна не как «больше красивых цветов», а как более плавные переходы и больший запас при обработке изображения.

Зачем это нужно?

Представим тёмно-синий фон, который постепенно становится светло-синим.

Если между крайними цветами можно сохранить только небольшое количество промежуточных значений, переход начинает распадаться на заметные полосы. Такой артефакт называют banding.

Если доступных значений намного больше, соседние оттенки отличаются совсем немного и переход выглядит плавнее.

Это особенно важно в моушн-дизайне, потому что плавные переходы возникают постоянно: в градиентах, тенях, размытиях, свечениях, прозрачностях, цветокоррекции и смешивании слоёв.

Более высокая битность также оставляет программе больше промежуточных значений для вычислений. Изображение лучше переносит обработку и реже начинает разваливаться на полосы и резкие переходы после нескольких последовательных операций.

Как работают 8, 10 и 12 бит

Цвет пикселя обычно описывается несколькими каналами. В RGB это красный, зелёный и синий каналы. Для каждого канала хранится отдельное число.

  • При 8 битах на канал это число может принимать 256 значений.
  • При 10 битах — 1024.
  • При 12 битах — 4096.

То есть переход одного канала условно можно представить так:

  • 8 bit → 256 ступеней
  • 10 bit → 1024 ступени
  • 12 bit → 4096 ступеней

Разница между 8 и 10 битами кажется небольшой только по названию. На самом деле два дополнительных бита увеличивают число возможных значений одного канала в четыре раза.

У RGB-изображения значения трёх каналов комбинируются. Поэтому 8-битное RGB может описать около 16,7 миллиона комбинаций значений, а 10-битное — более миллиарда.

Но для практической работы важнее не огромное общее число цветов, а расстояние между соседними значениями. Чем оно меньше, тем точнее изображение хранит тонкие изменения цвета и яркости.

Где разница становится заметна

На обычном контрастном изображении 8- и 10-битные версии могут выглядеть практически одинаково. Проблемы проявляются там, где нужны очень плавные изменения.

Характерный пример — большой градиентный фон. Если оттенок меняется совсем немного на протяжении сотен пикселей, 8-битному изображению иногда не хватает промежуточных значений. Несколько соседних областей получают одинаковый цвет, затем происходит скачок к следующему значению. Так появляются полосы.
То же может происходить в:

  • небе;
  • дыме и тумане;
  • мягких тенях;
  • виньетках;
  • свечениях;
  • сильно размытых изображениях;
  • градиентных фонах;
  • сценах после интенсивной цветокоррекции.

Поэтому битность особенно важна не там, где много мелких деталей, а там, где цвет или яркость должны меняться очень плавно.

Сравнение изображения с глубиной цвета 8 и 10 бит
Источник:  ProjectorCentral, «The Deep Dive on Bit Depth»⁠

Битность в моушн-дизайне и композитинге

В моушн-графике изображение редко просто открывают и сразу сохраняют. Слои смешиваются, градиенты пересчитываются, изображения размываются, меняется яркость, применяются маски, glow, цветокоррекция и другие эффекты. Каждая такая операция создаёт новые промежуточные значения.

Простой пример — размытие границы между белым и чёрным объектом. До размытия там были почти только два значения: светлое и тёмное. После размытия программа должна создать между ними множество оттенков серого.

Если вычисления идут с небольшой точностью, часть этих оттенков приходится округлять. После нескольких операций ошибки могут накапливаться.
Поэтому проект часто имеет смысл рассчитывать с большей битностью, чем требуется от финального файла.

Битность исходника, проекта и рендера

У одного ролика может одновременно быть несколько разных значений битности.

Битность исходника показывает, с какой точностью цветовая информация была записана в исходном изображении или видео.

Битность проекта определяет, с какой точностью программа выполняет внутренние вычисления.

Битность рендера зависит от формата, кодека и настроек финального файла.

Это три разных вещи.

Например, 8-битное видео можно поместить в проект, который рассчитывается с большей точностью. Исходник от этого не станет 10- или 16-битным: утраченных при записи оттенков в нём не появится.

Но новые размытия, градиенты, цветокоррекция и композитинг смогут рассчитываться точнее. То есть высокая битность проекта не восстанавливает потерянную информацию, а помогает не потерять ещё больше во время дальнейшей обработки.

Такой же принцип работает при конвертации файлов: простое преобразование готового 8-битного файла в 10-битный не делает исходное изображение качественнее.

Биты на канал и биты на пиксель

Здесь возникает частая путаница.

В моушн-дизайне под 8, 16 или 32 bpc обычно имеют в виду bits per channel — количество битов на один канал.
Но иногда в характеристиках изображения указывается суммарное количество битов на весь пиксель.

Например, RGB-изображение с 8 битами на канал имеет три канала:
8 + 8 + 8 = 24 бита на пиксель.
Если добавить 8-битный альфа-канал:
8 + 8 + 8 + 8 = 32 бита на пиксель.

Получается изображение с 32 битами на пиксель, но каждый отдельный канал в нём всё ещё остаётся 8-битным. Поэтому надпись «32 bit» без контекста сама по себе мало что говорит. Нужно понимать, идёт речь о всём пикселе или об одном канале.

Что такое 16-bit и 32-bit float

В композитинге встречается ещё один вариант — изображение с плавающей точкой, или floating point.
Его отличие не просто в том, что «оттенков ещё больше».
Обычное целочисленное изображение хранит значения внутри заданного диапазона. Floating-point позволяет работать с числами значительно гибче — в том числе хранить значения яркости выше обычного белого. Это важно, например, для очень ярких источников света, HDR, glow и сложного композитинга.

Хороший пример — яркий источник света в EXR. На мониторе область может выглядеть просто белой, но в самом файле значения отдельных пикселей могут быть значительно выше обычного уровня белого. Если затем уменьшить экспозицию, эта информация снова проявится.
Именно поэтому 16-bit float и 32-bit float используются в VFX и CG не просто ради большего числа оттенков, а ради большего диапазона и более устойчивой обработки изображения.

OpenEXR, например, может хранить цветовые каналы как 16-битные half-float или 32-битные floating-point значения.

Битность и banding

Низкая битность — одна из причин появления banding, но не единственная.
Полосы могут появиться и из-за сильной компрессии, обработки, особенностей дисплея или повторного перекодирования.
Поэтому наличие banding не доказывает автоматически, что файл «слишком малобитный».

Но связь прямая: чем меньше доступных промежуточных значений, тем выше вероятность увидеть ступени там, где должен быть плавный переход. На этом принципе построены объяснения bit depth и в документации Blackmagic, и в материалах по постпродакшену.

Источник: Vimeo⁠

Чем отличается от похожих терминов

Битность и разрешение
Разрешение определяет количество пикселей в изображении.
Битность определяет, насколько точно каждый из них может хранить цветовые значения.

Битность и битрейт
Битрейт показывает объём данных, который видео использует за определённое время.
‍Битность определяет, сколько оттенков может содержать изображение. Чем она выше, тем плавнее градиенты и ниже вероятность появления цветовых полос — banding.

Битность и цветовое пространство
Цветовое пространство определяет, какие цвета и значения описывает система.
Битность определяет точность, с которой эти значения можно записать.

На что обратить внимание

Главный практический смысл битности можно свести к одному вопросу:
насколько мелкими шагами изображение способно хранить и пересчитывать изменения цвета и яркости?

Если шагов мало, этого может быть достаточно для готового изображения, но при сильной обработке быстрее появляются ограничения.

Если шагов больше, программа получает больший запас для градиентов, цветокоррекции, размытия, свечения и композитинга.

Поэтому высокая битность нужна прежде всего не ради впечатляющего числа «миллиард цветов», а ради точности изображения на протяжении всего производственного процесса

Другие термины

Категория
По алфавиту
RUS
EN