Как бы вы реализовали эффект хроматической аберрации с помощью шейдеров?
Решит ли проблему рендеринг мира с различными расстояниями фокусировки для каждого цвета (возможно, с использованием только одного прохода глубины)?
Как бы вы реализовали эффект хроматической аберрации с помощью шейдеров?
Решит ли проблему рендеринг мира с различными расстояниями фокусировки для каждого цвета (возможно, с использованием только одного прохода глубины)?
Ответы:
Хроматическая аберрация возникает, когда объектив не может сфокусировать каждый цвет на одну и ту же точку фокусировки. Простой способ подделать этот эффект и отобразить его как быструю полноэкранную постобработку - применить смещение к каждому цветовому каналу в фрагментном шейдере.
Используя различное смещение для каждого канала, вы можете получить разумную факсимильную связь с желаемым эффектом. Пример этой техники можно найти здесь ; фрагментный шейдер будет выглядеть примерно так:
Этот простой хак на самом деле не учитывает тот факт, что хроматическая аберрация является эффектом линзы, однако: чтобы получить лучшую симуляцию, вы на самом деле захотите сделать что-то, чтобы действовать как линза. Это похоже на то, как вы визуализируете объекты, которые являются отражающими или преломляющими. Следовательно, типичный шейдер отражения / преломления может быть основой для реализации хроматической аберрации.
Обычно вы вычисляете один вектор преломления на основе вектора представления и некоторого определенного показателя преломления , используя функцию преломления GLSL в вершинном шейдере:
Затем вы использовали бы этот вектор в фрагментном шейдере, чтобы выполнить поиск текстуры куба (в карту окружения). Обычно это делается вместе с эффектом отражения, и в сочетании используется вычисленный термин Френеля .
Для имитации хроматической аберрации в вершинном шейдере вы можете выполнить три разных вычисления вектора преломления, каждое из которых будет слегка смещено с помощью разных показателей преломления:
Эти три разных вектора могут быть использованы для выполнения трех разных поисков кубической карты, которые могут быть смешаны вместе, как цвета были смешаны в простом примере:
Для получения более подробной информации доступна книга OpenGL Orange Book, которая содержит пример основных эффектов отражения и преломления, а также пример эффекта хроматической аберрации.
источник