Эффект, который вы ищете, называется хроматическая аберрация , вы можете посмотреть его в Википедии.Вам уже было дано решение, но я думаю, что я обязан быть физиком, чтобы дать вам более глубокое понимание того, что происходит, и как можно обобщить эффект.
Помните, что каждая камера имеет некоторую апертуруи свет обычно описывается как волны.Взаимодействие волн с апертурой называется дифракцией , но когда оно математически сводится к нулю, это просто свертка волновой функции с преобразованием Фурье функции апертуры.Дифракция зависит от длины волны, поэтому это создает пространственный сдвиг в зависимости от цвета.Другим влияющим эффектом является дисперсия, то есть зависимость от преломления длины волны.Снова дифракция может быть описана сверткой.
Теперь свертки могут быть прикованы цепью, в результате чего получается ядро свертки .В случае фильтра размытия Гаусса ядро свертки представляет собой распределение Гаусса, идентичное по всем каналам.Но вы можете иметь разные ядра свертки для каждого целевого канала.То, что @bernie предлагает на самом деле - ядро свертки, смещенное на несколько пикселей в каждом канале.
Это хорошее руководство по сверточной фильтрации с GLSL.Вы также можете использовать для циклов вместо того, чтобы развернуть циклы.http://www.ozone3d.net/tutorials/image_filtering_p2.php
Я предлагаю вам использовать некоторые ядра в форме Гаусса, причем размытие для красного и синего цветов сильнее зеленого, и, конечно, слегка смещенные центральные точки.