Dithering fl studio что это

Обновлено: 02.07.2024

Как-то раз вернувшись домой, наслушавшись всевозможной электронной музыки, которая оказалась на плеере, ты решил, что пора бы тоже подарить этому миру пару хитов. Естественно перед тем, как покупать дорогостоящее оборудование и с головой окунаться в сферу профессионального музыкального продюссирования, хочется просто, забавы ради, попробовать и «пощупать», а что же это такое создание электронной музыки на компьютере…

В данном цикле статей я хочу осветить процесс создания музыки в программе FL Studio.

Всех кому интересно, как порадовать друзей и знакомых новым произведением Вашего искусства прошу под кат.

Введение

Для начала понадобится демо-версия программы FL Studio, скачать которую можно отсюда(97,6 МБ), компьютер средней производительности, немного свободного времени и наушники, для того чтобы не убить соседей, своими экспериментами со звуком.

Музыкальный трек в FL Studio, составляется из фрагментов именуемых pattern (паттернами). Каждый такой паттерн состоит из последовательностей нот, заданных одному или нескольким каналам (channels). Размер паттерна кратен четвертям, минимальный размер паттерна – одна четверть. Такты в FL Studio имеют по умолчанию размер 4/4(в настройках проекта размер можно изменить) и в редакторе паттернов такты разделены более светлыми линиями сетки и подписаны сверху цифрами по порядку. Паттерн состоит из нот, тон которых лежит в пределах 10 октав, минимальная длительность ноты – одна сто двадцать восьмая.

Интерфейс FL Studio

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

Интерфейс

Интерфейс выглядит так (прокомментировано только самое важное на первом этапе освоения).

Step Sequencer

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

Step Sequencer

Каждая строка – это один канал, этот канал может быть либо синтезатором (канал который генерирует звук на основе заданных нот), либо семплером (канал который использует уже готовые звуки (семплы)).

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

Для того чтобы добавить новый канал следует выполнить пункт меню Channels – Add one. , затем в выпадающем списке выбрать нужный канал.

Также можно клонировать или удалить выбранные каналы. Выбор осуществляться правым кликом мышки на сером прямоугольнике справа от названия канала. Левый клик выбирает/снимает выделение со всех каналов сразу.

Чтобы переместить канал выше/ниже следует удерживая клавишу ALT стрелку ВВЕРХ/ВНИЗ. Также можно двигать несколько выделенных каналов одновременно.

Выбранные каналы можно объединить в группу, для этого есть пункт меню Channels – Group selected.

Playlist

Playlist

Плейлист используется для редактирования трека в целом. Он состоит из двух частей, в первой находится список паттернов данного проекта, во второй клипы автоматизации (Automation Clips) и аудио клипы (Audio Clips), также сюда можно и паттерны вставлять.

Чтобы нарисовать паттерн надо щёлкнуть левой кнопкой мыши на нужном месте (в режиме карандаш или кисть, естественно), чтобы удалить паттерн нужно щёлкнуть правой на нём.

Для выделения не обязательно переключать инструмент, достаточно удерживать клавишу CTRL, также чтобы что-то обрезать можно удерживать клавишу SHIFT.

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

Паттерны как и канал можно перемещать, клонировать и удалять. По одному или сразу несколько (команды для этого находятся в контекстном меню паттерна или меню плейлиста в пункте, Patterns).

Для объединения нескольких паттернов в один надо их выделить и в контекстном меню выбрать Merge selected.

Для объединения нескольких «прямоугольников» одного паттерна в один надо в контекстном меню выбрать Flatten selected.

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

  • Main – привязка осуществляется в соответствие с глобальной привязкой выбранной сверху;
  • Line – привязка к линиям сетки;
  • Cell – привязка к ячейкам сетки;
  • (none) – отключить привязку;
  • 1/6, 1/5, 1/4, 1/3, 1/2 step – привязка к 1/6, 1/5, 1/4, 1/3, 1/2 части шага сетки соответственно;
  • Step – привязка к целому шагу сетки
  • 1/6, 1/5, 1/4, 1/3, 1/2 beat – привязка к 1/6, 1/5, 1/4, 1/3, 1/2 части бита (бит — одна четверть) соответственно;
  • Beat – привязка к целому биту.
  • Bar – привязка к такту.

Piano Roll

Piano Roll

Непосредственно редактор мелодии. Окно состоит из панели инструментов, аналогичной той, что в плейлисте, нотного стана слева, окна ввода нот по центру и окна параметров снизу.

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

Чтобы увеличить длительность достаточно потянуть за правый край ноты, но если включен CAPSLOCK на клавиатуре, то менять размер можно и за правый край.

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

Привязка к сетке действует также как и в плейлисте.

Mixer

  • Master – Общий канал, все send и insert треки проходят через него и уже потом на выход.
  • Insert – Обычные каналы (таких на микшере 64 штуки), обычно связанный с каким-нибудь генератором или семплером.
  • Send – редуцированные каналы (4 шт).

Чтобы привязать какой-нибудь канал к треку микшера следует в окошке FX окна Channel Settings выбрать цифру нужного трека, либо в микшере нажав правой кнопкой на нужном треке, выполнить Link Selected Channels — To this track (Либо CTRL+L на клавиатуре). В последнем случае к данному треку привяжутся все выбранные каналы. Если выполнить Link Selected Channels — Starting from this track (SHIFT+CTRL+L), то выбранные каналы привяжутся по-порядку к каждому треку начиная с выбранного.

Browser

  • Channel presets – сохранённые настройки каналов. Здесь можно найти кучу настроенных генераторов.
  • Current Project – секция текущего проекта. Здесь храниться история действий и то из чего состоит прокет, клипы, каналы эффекты.
  • Mixer Presets – настройки треков микшера.
  • Packs – банки семплов.
  • Projects – проекты.

Channel Settings

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

Ниже расположено несколько вкладок. Про назначение их постараюсь объяснить в части второй.

Итак. Вдоволь начитавшись и насмотревшись картинок хочется уже что-нибудь сочинить.
Создадим новый проект использовав готовый трансовый шаблон. Для этого выполняем File – New from template – Genere — Trance.


В первом паттерне сделаем ударную партию:

Устанавливаем режим воспроизведения в pat (жёлтый квадратик сверху) и жмём на Play или на пробел. Слушаем. Останавливаем воспроизведение, ещё раз нажав пробел или Stop сверху.


Во втором паттерне сделаем бас партию. Открываем Piano Roll для канала Trance Bass (правый клик на названии канала Trance Bass – Piano roll). Рисуем там примерно вот так:


В третьем паттерне тоже будет бас партия. Открываем Piano Roll для канала Trance Bass и рисуем:


Во третьем и четвёртом паттерне создадим небольшую мелодию:



Теперь откроем Playlist и расставим паттерны как-то так.

Устанавливаем режим воспроизведения в song (вся песня). Слушаем. Радуемся.
То что получилось у меня забираем здесь:
Проект Fl Studio
Рендер MP3 (128kbps)
Рендер MP3 (320kbps)
Конечно работа над треком не заканчивается, но курс молодого бойца музыкального фронта пройден.
To be continued…
UPD: приму в комментах пожелания и предложения по поводу того, что бы вы хотели увидеть в следующих статьях.

Всем привет. Сегодня простыми и не очень словами о дизеринге.

Для начала, заглянем в Вики:

Дизеринг, дитеринг (англ. dither от среднеанглийского didderen — дрожать) — при обработке цифровых сигналов представляет собой подмешивание в первичный сигнал псевдослучайного шума со специально подобранным спектром. Применяется при обработке цифрового звука, видео и графической информации для уменьшения негативного эффекта от квантования.

Не очень понятно, да?

Тогда, разберем по порядку.

Сведение для чайников. Дизеринг. Дизеринг, Сведение, Звукорежиссура, Звукорежиссер, Музыка, Звукозапись, Длиннопост

Абсолютно знакомая всем картинка.

А если приблизить?

Сведение для чайников. Дизеринг. Дизеринг, Сведение, Звукорежиссура, Звукорежиссер, Музыка, Звукозапись, Длиннопост

Это называется "квантование сигнала" методом усечения. Именно так секвенсер оценивает наши звуки, нашу дорожку.

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

Обычно используют дизеринг при переводе в другую разрядность.

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

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

Так это и работает с музыкой.

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

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

А применять или нет - решать только вам.)

P.S.: как всегда - я не писатель, но, как говорится, чем могу.)

P.P.S.: А да, в лимитерах обычно стоит кнопка дизеринга. Кидаю картинку)

Сведение для чайников. Дизеринг. Дизеринг, Сведение, Звукорежиссура, Звукорежиссер, Музыка, Звукозапись, Длиннопост


Звукорежиссура

147 постов 1.3K подписчиков

Правила сообщества

- в сообществе запрещены оскорбления;

- посты, не соответствующие тематике сообщества, будут переноситься в ленту;

- в сообществе отключена премодерация, поэтому, добавляя посты, убедитесь, что они наполнены качественным контентом, а так же, не повторяют предыдущие посты;

я на фл 2.7 несколько песен свел и этот фишак еще тогда юзал

Шум псевдослучайный, интерполяция соседних значений уровней с учётом цикличности.
Нужен скорее при понижении битности (цифрового диапазона уровня) и частоты дискретизации (количества замеров в секунду)


15 ПРАВИЛ ЗВУКОРЕЖИССЕРА

1) Каждому отдельному звуку или инструменту нужно место в спектре частот - разбивайте звуки на отдельные группы и фокусируйте их на определенной частоте, вы сделаете каждый отдельный звук настолько громким и акцентированным, насколько вам нужно.

2) Убавление уродливых частот более эффективно, чем усиление приятных.

3) Каждый звук должен иметь назначение. Не выбирайте много семплов с целью набрать больше 50-ти звуков в треке, если вам действительно нужны лишь 25. Минималистичная работа позволяет избежать грязи в финальном миксе.

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

5) Обрабатывайте звуки по отдельности. Плагины помогут вашему звуку быть неповторимым в общем миксе.

6) Ресемплинг ваших синтов и доработка их до последнего - вот в чем секрет. В обработке нет пределов.

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

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

9) Пытайтесь закончить один звук, прежде чем приступить к другому, концентрируйтесь на одной теме и не прыгайте на другие, после переключения между темами вы больше не сможете обнаружить ошибки. Акцентрируйтесь на вашей идее

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

11) Не работайте на очень большой громкости. Ваши уши очень быстро устанут и не смогут "сказать" вам правду о ваших идеях. Работайте на постоянной громкости в течении сессии.

12) Не делайте детальную аранжировку или эквализацию под влиянием чего-либо

13) Некоторые конкретные элементы необходимо делать моно (кик, снэр, бас), 90% клубных систем - моно, так что убедитесь, что ваш драм энд бейс звучит громко на любой колонке.

14) Помогает спектральный анализ. Люди несовершенны в работе ушами, но профессиональны в работе глазами. Вы можете увидеть то, что не можете услышать.

15) Безопасность прежде всего. 50 или больше файлов в проекте - это нормально — сохраняйтесь до и после каждого серьезного изменения.


Микрофоны Октава МЛ-51 1986г

Микрофоны Октава МЛ-51 1986г Микрофон, Звукорежиссура, Звукорежиссер, Техника

Приобрел пару микрофонов на авито. Переделаны под фантомное питание (по дефолту вставляется батарейка). Перед покупкой конечно проверил, да и цена была приятная, неплохое пополнение в мой микрофонный парк. Но! Вопрос к знатокам! Это нормально что они дают легкий шум, как на старых записях. Шум особо не бесит, даже немного приятен.


Трейлерные звуки

Звук — очень эффективный инструмент для создания эмоций. Не зря фильмы (и вообще видеоролики) называют АУДИО-визуальными произведения и говорят, что звук несёт 50% важности. Но говоря о Трейлерных звуках, процент важности и ответственности бесспорно выше.

Трейлерные звуки Звук, Звукорежиссер, Звукозапись, Фильмы, Видеомонтаж, Видео, Длиннопост, Своими руками

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

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

Трейлерные звуки Звук, Звукорежиссер, Звукозапись, Фильмы, Видеомонтаж, Видео, Длиннопост, Своими руками

Чтобы разобраться в них, есть смысл каким-либо образом разделить эти звуки, т. к. их многообразие может запутать. Буду называть звуки на английском языке - так, как их называют в звуковых библиотеках.

Итак, для себя я делю их на следующие группы:

1. Различные удары: Hit, Boom, Impact, Slam

2. Звуки для движений и перемещений: Whoosh/swish

3. Грозные звуки Braaam и подобные им

4. Нарастающие звуки Riser/Uplifter и, наоборот, спадающие по интенсивности звуки Downer/Downlifter

5. Продолжительные фоновые звуки Atmosphere/Drone

Конечно же, чтобы было понятнее, лучше эти звуки слышать.

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


Создание глубины в миксе

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

Эквализация для создания расстояния

Если Вы хотите поместить кое-что на задний план микса, это должно быть не только тише фронтальных звуков. В этой партии должно быть меньше и высоких частот, чтобы подражать тому способу, которым их поглощает воздух. Чтобы усилить иллюзию расстояния, Вы можете также срезать и низкие частоты (ниже 150 – 200Гц). Если рассматриваемый инструмент записывается через микрофон, то размещение его дальше от инструмента (на стадии записи) поможет ещё больше укрепить иллюзию.

Срез высоких и низких частот поможет заставить звуки казаться более отдалёнными.

Используйте правильную реверберацию

Комбинирование повторяющегося эха и реверберации является отличным способом создания расстояния, особенно если у Вас есть ленточный дилэй (или его виртуальная эмуляция). По сравнению со стандартными цифровыми задержками, их повторы менее стерильны и однородны. Однако, если в наличии только обычный цифровой дилэй,попытайтесь срезать частоты ниже 200Гц и выше 4кГц. Также стоит поэкспериментировать с аналоговой задержкой (или её эмуляцией), потому что она имеет довольно тусклые и неясные повторы.

Чтобы создать впечатление от расстояния, могут использоваться плагины-эмуляторы ленточного эха, такие, как Universal Audio RE201 Space Echo. Если у Вас нет доступа к такому процессору, Вы можете попытаться использовать цифровую задержку, при этом срезав частоты ниже 200Гц и выше 4кГц.

Такие эффекты, как хорус, имеют тенденцию отодвигать звуки назад, заставляя их казаться менее сфокусированными. Таким образом, вы можете использовать его (или подобный ему эффект) на клавишных подкладах, которые предназначены для того, чтобы сидеть позади микса. Вы также можете достичь подобного результата, используя двухканальный питч-шифтер, чтобы создать два дополнительных слоя – один, смещённый на 7 центов вверх, а другой – на такое же количество вниз. Roland Dimension D (или эквивалентный ему плагин) может создать подобное хорусу пространственное распространение, но не давая слишком очевидного ощущения своего присутствия. Если Вы должны использовать хорус на звуке, который должен находиться во фронте микса (как например гитара), то держите этот звук ярким и свободным от чрезмерной реверберации. Обычно это приводит к хорошим результатам.

Модуляционные эффекты, такие, как хорус Roland Dimension D (или его виртуальная версия от UAD), могут помочь расфокусировать звук, убирая его с фронта звуковой сцены и оставляя место для других звуков, которые требуется выдвинуть вперёд. В качестве альтернативы, Вы можете использовать питч-шифтер, немного расстроив каналы и панорамировав их в противоположные стороны.

Вся перспектива – в контрасте: если какие-то звуки убраны назад, и сделаны менее яркими и более реверберирующими, то они должны быть уравновешены более яркими и сухими звуками, находящимися впереди микса. Не делайте ошибку, пытаясь полностью сохранить исходные звуковые качества каждого инструмента. В итоге Вы можете обнаружить, что задник звуковой сцены пуст, а фронт – переполнен (или наоборот).

Задержка для глубины

Примите во внимание, что использование задержек вместо реверберации добавляет вокалам больше свободного места. Альтернативно, Вы можете скомбинировать задержку с небольшим количеством реверберации, или использовать реверберацию с большой пред-задержкой (в районе 90 – 110 мс). Как Вы уже знаете, близкие звуки обычно более яркие, чем отдалённые. Поэтому, обрабатывая ведущий вокал, Вы часто сможете позволить себе использовать более яркую реверберацию с яркими ранними отражениями. Зачастую, полезно настраивать два ревербератора: один с искусственным звуком, типа пластины, другой – с ранними отражениями или образцом окружения. Этим путём Вы сможете сбалансировать характер ранних отражений с более очевидным характером листовой реверберации. Также, задержка может быть замечательной для того, чтобы создать звук гитарного соло на большом рок-стадионе, но при этом не отдалить его от слушателя.

Настройка в контексте

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

image

Блокнот Mathematica для воспроизведения результатов можно найти здесь, а pdf-версия находится здесь.

Что такое дизеринг?

Дизеринг (Dithering) можно описать как намеренное/осознанное внесение в сигнал шума для предотвращения ошибок большого масштаба/низкого разрешения, возникающих вследствие дискретизации или субдискретизации.

Если вы когда-нибудь работали с:

  • Аудиосигналами,
  • Палитровыми форматами изображений 90-х

Однако я обнаружил в Википедии довольно удивительный факт о том, как впервые был определён и использован дизеринг:

…Одна из первых областей применения дизеринга возникла во время Второй мировой войны. Самолёты-бомбардировщики для навигации и вычислений траектории бомб использовали механические компьютеры. Любопытно, что эти компьютеры (ящики, заполненные сотнями шестерёнок и зубчатых передач) работали точнее при полёте на борту самолёта, чем на земле. Инженеры поняли, что вызываемая самолётом вибрация снижает ошибку, вызываемую липкими подвижными деталями. На земле они двигались короткими отрывистыми движениями, а в воздухе их движение было более непрерывным. В компьютеры встроили небольшие вибромоторчики, и их вибрацию назвали «дизером» (dither), от среднеанглийского слова «didderen», означающего «дрожать». Сегодня, когда вы стучите по механическому измерителю, чтобы повысить его точность, вы применяете dither. При использовании в небольших количествах dither успешно превращает систему оцифровки в более аналоговую, в хорошем смысле этого слова.

— Кен Полманн, Principles of Digital Audio

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

Но хватит истории, давайте для начала рассмотрим процесс дизеринга в 1D-сигналах, например, в аудио.

Дискретизация дизерингом постоянного сигнала

Мы начнём с анализа самого скучного в мире сигнала — постоянного сигнала. Если вы знаете немного о цифровой обработке сигналов, связанных со звуком, то можете сказать: но ты же обещал рассмотреть аудио, а в звуке по определению нет постоянной составляющей! (Более того, и в ПО, и в оборудовании обработки звука намеренно устраняется так называемый сдвиг постоянной составляющей (DC offset).)

Это правда, и вскоре мы рассмотрим более сложные функции, но начнём мы сначала.

Представьте, что мы выполняем 1-битную дискретизацию нормализованного сигнала с плавающей запятой. Это значит, что мы имеем дело только с конечными двоичными значениями, 0 или 1.

Если сигнал равен 0,3, то простое округление без дизеринга будет самой скучной функцией — просто нулём!

Погрешность тоже постоянна и равна 0,3, следовательно, и средняя погрешность равна 0,3. Это означает, что мы внесли довольно большое отклонение в сигнал и полностью потеряли информацию исходного сигнала.

Мы можем попробовать выполнить дизеринг этого сигнала и посмотреть на результаты.

Дизеринг в этом случае (при использовании функции округления) просто применяет обычный случайный белый шум (случайное значение для каждого элемента, что создаёт равномерный спектр шума) и прибавляет в сигнал перед дискретизацией случайное в интервале (-0.5, 0.5).

quantizedDitheredSignal =
Round[constantSignalValue + RandomReal[] – 0.5] & /@ Range[sampleCount];



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


Итак, как мы и ожидали, погрешность тоже варьируется, но пугает то, что погрешность иногда стала больше (абсолютное значение 0,7)! То есть максимальная погрешность к сожалению стала хуже, однако средний шум имеет значение:

Намного лучше, чем первоначальная погрешность в 0,3. При значительно большом количестве сэмплов эта погрешность будет стремиться к нулю (к пределу). Итак, погрешность постоянной составляющей стала намного меньше, но давайте взглянем на частотный график всех погрешностей.

Красный график/всплеск = частотный спектр погрешности при отсутствии дизеринга (постоянный сигнал без частот). Чёрный — с дизерингом при помощи белого шума.

Всё становится интереснее! Это демонстрирует первый вывод из этого поста — дизеринг распределяет погрешность/отклонение дискретизации среди множества частот.

В следующем разделе мы узнаем, как это нам поможет.

Частотная чувствительность и низкочастотная фильтрация

Выше мы наблюдали за дизерингом дискретизированного постоянного сигнала:

  • Он увеличил максимальную погрешность.
  • Почти обнулил среднюю погрешность.
  • Добавил к спектру частот погрешностей постоянный белый шум (с полным покрытием спектра), снизив низкочастотную погрешность.
  • Наше зрение имеет предел остроты. У многих людей есть близорукость и без очков они видят размытые изображения далёких объектов.
  • Мы воспринимаем средний масштаб деталей гораздо лучше, чем очень высокие или очень низкие частоты (мелкие детали очень плавных градиентов могут быть незаметными).
  • Наш слух работает в определённом диапазоне частот (20 Гц — 20 кГц, но со временем ухудшается) и наиболее чувствительны мы к среднему диапазону — 2 кГц — 5 кГц.

Более того, наши медиаустройства становятся всё лучше и лучше, обеспечивая большую избыточную дискретизацию (oversampling). Например, в случае телевизоров и мониторов у нас есть технология «retina» и 4K-дисплеи (на которых невозможно разглядеть отдельный пиксель), в области звука мы используем форматы файлов с дискретизацией не менее 44 кГц даже для дешёвых динамиков, которые часто не могут воспроизводить больше, чем 5-10 кГц.

Это значит, что мы можем аппроксимировать воспринимаемый внешний вид сигнала, выполнив его низкочастотную фильтрацию. На графике я выполнил низкочастотную фильтрацию (заполнение нулями слева — это «нарастание»):


Красный — желаемый недискретизированный сигнал. Зелёный — дискретизированный сигнал с дизерингом. Синий — низкочастотный фильтр этого сигнала.

Сигнал начинает выглядеть гораздо более близким к исходной, недискретизированной функции!


Это возможно, потому что наша псевдослучайная последовательность имеет следующий спектр частот:


Но давайте закончим рассматривать простые, постоянные функции. Взглянем на синусоиду (если вы знакомы с теоремой Фурье, то знаете, что она является строительным блоком любого периодического сигнала!).

Дискретизация синусоиды

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


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

Это интересное свойство, которое активно используется в аналоговых субтрактивных синтезаторах для создания звучания полых/медных инструментов. Субтрактивный синтез берёт сложный, гармонически богатый звук и фильтрует его, устраняя некоторые частоты (параметры фильтра варьируются со временем), чтобы придать звукам нужную форму.

Спектр частот прямоугольного сигнала:


Но в этом посте нас больше интересую погрешности дискретизации! Давайте создадим график погрешности, а также спектр частот погрешности:



В этом случае ситуация гораздо лучше — средняя погрешность близка к нулю! К сожалению, у нас по-прежнему присутствует множество нежелательных низких частот, очень близких к нашей основной частоте (нечётных множителей с уменьшающейся величиной). Это явление называется алиасингом или шумом дизеринта — возникают частоты, отсутствовавшие в исходном сигнале, и они имеют довольно большие величины.

Даже низкочастотная фильтрация не сможет значительно помочь сигналу. Погрешность имеет очень много низких частот:


Дискретизированная синусоида с низкочастотной фильтрацией


Погрешность дискретизированной синусоиды с низкочастотной фильтрацией

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


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


Заметьте, что погрешности дискретизации снова распределены среди различных частот:

Выглядит очень многообещающе! Особенно учитывая то, что теперь мы можем попробовать выполнить фильтрацию:


Это немного искажённая синусоида, но она выглядит намного ближе к исходной, чем версия без дизеринга, за исключением фазового сдвига, внесённого асимметричным фильтром (я не буду объяснять этого здесь; скажу только, что проблему можно устранить, применив симметричные фильтры):


Красный — исходная синусоида. Зелёный — подвергнутый низкочастотной фильтрации сигнал без дизеринга. Синий — подвергнутый низкочастотной фильтрации сигнал с дизерингом.

Графики обеих погрешностей численно подтверждают, что погрешность намного меньше:


Красный — погрешность подвергнутого низкочастотной фильтрации сигнала без дизеринга. Синий — погрешность подвергнутого низкочастотной фильтрации сигнала с дизерингом.

Наконец, давайте вкратце рассмотрим сигнал с более качественной функцией дизеринга, содержащей только высокие частоты:


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


Версия с низкочастотной фильтрацией, дизерингом и улучшенной функцией — почти идеальные результаты, если не учитывать фазовый сдвиг, вызванный фильтром!

И наконец, сравнение всех трёх спектров погрешностей:

Красный — спектр погрешности дискретизации без дизеринга. Чёрный — спектр погрешности дискретизации с дизерингом белым шумом. Синий — спектр погрешности дискретизации с дизерингом с более высокими частотами.

image


Преобразование исходного изображения по шаблону дизеринга

Двумя компонентами этого процесса являются исходное изображение и паттерн дизеринга. В различных случаях Obra Dinn использует два отличающихся паттерна: матрица Байера 8x8 для более плавного диапазона оттенков и поле синего шума 128x128 для менее упорядоченного вывода.



Результат внутри движка без каркасных линий. Байер на сфере, синий шум на всём остальном.

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

Сегодня дизеринг в основном используется для статичных исходных изображений или при высоком разрешении выходных данных. Первое, что думаешь, глядя на этот плавающий эффект дизеринга, это не «да, именно так работает дизеринг», а «что это за дёргающийся эффект и как мне его отключить».

Образец A. Для более приятного изображения контраст уменьшен.

Стабилизируем дизеринг

Чтобы дать глазам возможность наилучшим образом всё рекомбинировать, дизеринг оптимальнее всего использовать с точками паттерна дизеринга, имеющими корреляцию 1:1 с выходными пикселями. Но если будет присутствовать корреляция «только» с выходными данными, то при применении постэффектов сцены не будет никакой связи между отрендеренной геометрией и пороговым паттерном. В каждом кадре у движущихся элементов сцены будет новое пороговое значение. Вместо этого я хочу, чтобы паттерн дизеринга был «приклеен» к геометрии и казался стабильным при движении вместе с остальной сценой.

Здесь возникает проблема наложения. Существует конфликт между «идеальным» наложением паттерна дизеринга (1:1 с экраном) и идеальным наложением на сцену (x:1 с геометрией), так что нужно быть готовым идти на компромиссы. БОльшая часть моей работы посвящена наложению входного паттерна дизеринга на различные пространства, которое обеспечивает наилучшее совпадение паттерна с геометрией сцены. Здесь всё выполняется на этапе до задания порогов.

Пространство текселов


Паттерн дизеринга в пространстве текселов

Ну, в целом ожидания себя оправдали. Наложение на все объекты выполнено по-разному, поэтому масштабы из паттернов не совпадают. Их можно унифицировать. Но настоящая проблема заключается в искажениях. Любой ресемплинг из одного пространства в другое приведёт к искажениям, а для паттернов дизеринга не так просто выполнить mip-текстурирование или фильтрацию, как для традиционных текстур. Однако доведём это до конца:

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

Деформация при движении

Если я хотел, чтобы паттерн дизеринга отслеживал движение геометрии под ним, то почему бы просто не деформировать паттерн на основании изменения позиции каждого отрендеренного пикселся в сцене? Действительно, почему бы не попробовать. Это немного похоже на motion blur, при котором каждый пиксель отслеживает своё движение относительно предыдущего кадра. В этом случае я обновляю текстуру дизеринга, чтобы её паттерн двигался вместе со сценой. Если пиксель сцены не присутствовал на предыдущем кадре, то в нём паттерн дизеринга перезагружается. Реализацию этой техники очень облегчила статичность игры — мне нужно было беспокоиться о движении камеры, а не отдельных объектов.

Деформация паттерна дизеринга для сохранения покадровой согласованности со сценой

Это была довольно «быстрая и грязная» попытка, но стали очевидны некоторые факты. Во-первых, это в чём-то работает. Во-вторых, паттерну дизеринга нужно учитывать соседей — он не может быть просто отдельными пикселями. Если рассматривать каждый пиксель отдельно, как делается в этом способе, то очевидно, что мы получим разрывы и искажения в паттерне. В этой тестовой сцене я сдвинул камеру, чтобы показать это на примере сундука. Посмотрев на сам искажённый паттерн дизеринга, легче это заметить.

Задание порога сплошным серым цветом с деформируемым паттерном дизеринга

Эти разрывы возникают из-за разной глубины пикселей и выбранных порогов. Я подумывал о сложной системе исправления проблемы на основе отслеживания областей, усреднения их глубины и смещения всех точек паттерна дизеринга в каждой области на одинаковое значение. Разрывы вдоль границ областей можно скрыть резкой сменой освещения или каркасной линией. Это не получилось бы реализовать из-за того, что игра использовала для генерации каркасов моделей цветные области. Когда я приступил к реализации всего этого, то сначала упустил в уравнении глубину, что дало мне гораздо более простую альтернативу:

Наложение на экран со смещением

При составлении уравнений для деформируемого дизеринга из них выпало очень простое преобразование:

Сдвиг наложенного на экран паттерна дизеринга на основании поворота камеры

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

Смещение паттерна дизеринга для отслеживания поворота ровно на один экран fov камеры

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

Хотя подход и не идеален, простой сдвиг наложенного на экран дизеринга сохраняет общий паттерн и движение сцены, чтобы глазу удобнее было отслеживать вместе. Я был этим очень доволен. Занимаясь подчисткой кода и коммитами, выпустив один-два поста в devlog, я всё равно не мог избавиться от мысли об идеально прилепленном дизеринге:

Пространство мира — кубическое наложение

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

С учётом этого, моей следующей попыткой стало наложение паттерна дизеринга на геометрию ненапрямую, с помощью предварительного рендеринга паттерна на стороны куба, центрированного вокруг камеры. Куб перемещается с камерой, но остаётся ориентированным относительно мира. Получается смесь: немного экрана, немного сцены.


Паттерн дизеринга наложен на куб, центрированный относительно камеры


Вид из камеры, смотрящей в угол. Масштаб наложения для наглядности увеличен.

Наложение на куб работает неплохо, когда смотришь на стороны, но не так хорошо, когда камера направлена на угол. Паттерн дизеринга по-прежнему идеально зафиксирован в 3D-пространстве при повороте камеры. Даже при грубых проверках результат выглядит многообещающим.

Задание порога сцене с помощью наложенного на куб паттерна дизеринга

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

Пространство мира — сферическое наложение

… но благодаря сфере я подобрался достаточно близко.


Наложение паттерна дизеринга на внутренность сферы

Поиск этого конкретного сферического наложения потребовал определённого времени. Не существует способов идеального замощения сферы квадратной текстурой. Можно было бы переопределить матрицы дизеринга через сетку шестиугольников или чего-то подобного, что хорошо замощает сферу. Возможно, получилось бы, но я не пробовал. Вместо этого я «взломал» замощение сферы, добившись тщательной настройкой того, чтобы «кольцевое» наложение исходного паттерна дизеринга давало хорошие результаты.


Сферически наложенный паттерн дизеринга при увеличении 2x и со сниженным до 1x разрешением

Задание порога при 2x, с последующим снижением разрешения до 1x

Это пока самый лучший из полученных мной результатов. Тут есть несколько компромиссов:

  1. Точки паттерна дизеринга становятся больше в размерах и менее эффективными по краям экрана
  2. Паттерн не выравнен по направлениям «верх-низ-лево-право» для большинства поворотов камеры
  3. Выходные данные больше не являются 1-битными из-за конечного снижения разрешения
  1. Дизеринг отлично прикрепляется ко всем поворотам камеры. В игре это ощущается немного странно.
  2. Дискомфорт от плавающего дизеринга совершенно пропал, даже в полноэкранном режиме.
  3. Сохраняется пикселизированный стиль игры

Подводим итог

Кажется немного странным потратить 100 часов на то, отсутствия чего даже не заметят. Никто точно не подумает «блин, да этот дизеринг адски стабилен, это какая-то магия». Но я не хотел, чтобы у людей возникали проблемы, которые должны были бы возникнуть, так что их стоило устранить.

Наложение в экранном пространстве со смещением работает лучше всего при масштабе 1x, а сферическое наложение — при 2x. Вся сцена сейчас рендерится в разрешении 800x450 (поднял разрешение с 640x360), что повышает разборчивость, при этом не требуется жертвовать стилем low-res. В готовой игре будет два режима отображения:

ЦИФРОВОЙ — дизеринг в пространстве экрана со смещением, 1-битный вывод.

АНАЛОГОВЫЙ — полноэкранный наложенный на сферу дизеринг, сглаженный вывод.

Читайте также: