Изображение из камеры поступало в шейдер в виде трех цветовых каналов: R, G, B. Обычно эти каналы были синхронизированы между собой и обновлялись одновременно. Однако, использование петли обратной связи позволяло «заморозить» часть каналов. Работало это так:
1. Создавалась маска для трех каналов, разбивающая диапазон полной окружности от нуля до
2*Pi на три равные части.vec3 mask = TWO_PI * vec3(0.0, 0.33, 0.66);
2. Для каждого из трех каналов маски запускалась синусоида по времени. Так как начальные значение разбивали окружность на равные части, гребень синусоидальной волны всегда находился только в одном из трех каналов.
mask = sin(mask+time);
3. Канал с маской, в котором значение синусоиды было максимальным (например, больше
0.5), получал значение 1.0, остальные каналы обнулялись.mask = step(0.5, mask);
4. Маска смешивала изображение из камеры с петлей обратной связи, «замораживая» тот канал, в котором маска была равна
1.0.main = mix(cam, feed, mask);
Визуально отставание одного канала от остальных создавало эффект хроматической аберрации, увеличенной до размеров целого изображения. Застывшие каналы позволяли сохранить в разных цветах разные фазы движения, как при мульти-экспозиции.
Изображения сняты через фильтр:
▹ glCam / braid







