Техника фотопотока визуально напоминала сетку из ячеек, хотя и создавалась другим способом. Там, где сетка разбивала единственный кадр на случайные части, фотопоток прибавлял к общему изображению один кадр за другим. В результате получалась упаковка множества кадров в один общий холст, в некий букет из отдельных визуальных импульсов.
Заполнение холста кадрами требовало решить два вопроса:
• как получить случайные числа для позиционирования кадров?
• как равномерно распределить эти случайные числа по всему холсту?
Проблема была в том, что шейдинг не предоставлял встроенных функций для генерации случайных чисел. Нельзя было просто задать
coordinate.x = random() и получить готовый результат. Для решения этой задачи обычно создавались специальные хэш-функции, возвращающие псевдо-случайные числа путем сложных математических операций, однако они работали медленно и не всегда распределялись равномерно.К счастью, нужные функции были в JavaScript. Это позволяло совершать расчет случайных чисел на CPU, а затем передавать их в GPU через специальные переменные, называемые униформами. Униформы назывались так потому, что их значение вычислялось один раз за кадр и передавалось в неизменном виде во все пиксели изображения. Без униформ пришлось бы рассчитывать значение для каждого пикселя заново, что сильно замедлило бы работу.
Таким образом, в приложении появилось пять переменных
R1...R5 которые каждый кадр принимали новые случайные числа в диапазоне от 0 до 1. На текущем этапе даже пять случайных чисел помогли мне сильно разнообразить визуал, а в будущем я нашел способы получения случайных значений из шума камеры, без униформ и хэш-функций.Изображения сняты через фильтр:
▹ mIRO))) / Timewriter




