Борьба со ступенчатостью при сохранении градиента в JPG

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

Однако, если подобное изображение требуется сохранить в формате JPG, градиент из плавного часто становится ступенчатым, что сильно портит впечатление от рисунка. Этот неприятный эффект называют «banding». Можно ли как-то его побороть?

Для начала создадим сердечко на градиентном фоне. Для этого нужно:

  1. Смоделировать сердечко и отрендерить его на прозрачном фоне.
  2. Переключиться в режим Compositing.
  3. В панели Properties перейти на вкладку Texture.
    1. Выбрать Brush и создать новую текстуру.
      1. установить Type = Blend.
      2. установить Progression = Quadratic sphere
      3. в подпанели Colors отметить чекбокс Ramp и настроить цвета.
  4. В окне Node Editor добавить нод текстуры
    1. shift+a — Input — Texture
      1. выбрать созданную текстуру с градиентом
  5. Связать ноды текстуры и результата рендера через нод Alpha Over
Добавление градиентного фона

Казалось бы, все хорошо. Но если сохранить результат в формат JPG и посмотреть на получившуюся картинку внимательнее, можно заметить, что градиент из плавного стал ступенчатым. Ошибок в рендере здесь нет, такой результат получается из-за особенностей сохранения в 8-битный формат JPG.

Ступенчатость градиента

Какие средства можно задействовать для исправления ситуации?

  1. Сохранить финальное изображение в одном из более прогрессивных форматов.

Можно использовать такие форматы хранения изображений, как JPG2000, PNG или openEXR. Это самый просто вариант, и если есть возможность использовать его — отлично. Но иногда конечное изображение требуется сохранить именно в формате JPG.

  1. Использовать шум для подавления ступенчатости.

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

В первую очередь стоит задействовать автоматически генерируемый шум. Для его использования нужно:

  1. В панели Properties во вкладке Render:
    • в подпанели Post Processing
      • увеличить значение параметра Dither
Использование параметра Dither

Чем больше значение Dither (максимальное значение равно 2), тем больше шума будет добавлено в финальное изображение. Начинать стоит с небольшого значения и постепенно его увеличивать, контролируя соотношение шума и ступенчатости.

Параметр Dither добавляет шум сразу в отрендеренное изображение, запускать рендер повторно при его использовании нет необходимости.

В большинстве случаев автоматический шум позволяет добиться приемлемого результата. Однако возможен случай, когда даже он не помогает целиком избавиться от ступенек градиента. В этом случае можно добавить в изображение еще больше шума вручную.

  1. Вернуться в режим Compositing.
  2. В панели Properties во вкладке Texture (там, где ранее создавалась текстура градиента).
    1. В режиме Brush нажатием на кнопку с плюсиком создать новую текстуру.
      1. установить Type = Noise.
      2. в подпанели Colors отметить чекбокс Ramp и настроить цвета также, как они настраивались для текстуры градиента.
  3. В окне Node Editor добавить нод текстуры
    1. shift+a — Input — Texture
      1. выбрать созданную текстуру с шумом
  4. Связать ноды текстуры шума и текстуры градиента через Overlay:
    1. shift+a — Color — Mix
      1. установить в Overlay
    2. выход Color нода Texture (градиент) подать на вход Image нода Mix (Overlay)
    3. выход Color нода Texture (шум) подать на вход Image нода Mix (Overlay)
    4. выход Image нода Mix (Overlay) подать на вход Image нода Alpha Over, связанного с результатом рендера
Добавление шума в композитинге

Значением параметра Factor нода Mix (Overlay) регулируется сила наложения шума на градиент. Изменяя этот параметр можно добиться еще лучших результатов по уменьшению ступенчатости градиента. Но следует быть аккуратным, чтобы шум не стал слишком заметен на финальном изображении.

  • Nikolay sungreen (sungreen)

    … материал очень позитивный, даже захотелось добавить в календарь стокера «День борьба со ступенчатостью при сохранении градиента в JPG» 🙂 …

    • Там и без этого очень много разных дней 🙂

  • Urko Kul

    Раньше даже не задумывался. Спасибо

    • Я тоже, пока сам не столкнулся с проблемой.