SoftNoise & Robert
Привет, Роберт. Я тут немного поигралась с шейдером, который превращает статичную пиксельную графику в оживлённый, какой-то лоу-файшный сон. Хочешь разобраться, как сделать эту случайность более структурированной, чтобы код не тормозил?
Конечно, главное – не вызывать рандом для каждого пикселя каждый кадр. Сгенерируй небольшой набор псевдослучайных значений один раз на тайл или на кадр, сохрани их в текстуре поиска или в небольшом массиве, и потом просто обращайся к нему по индексу. Если нужна вариация на уровне пикселей, используй хеш-функцию от координат – даже простой целочисленный хеш даст воспроизводимые “случайные” числа без затрат на полноценный генератор случайных чисел. Держи состояние локальным; если нужна временная изменчивость, просто добавляй небольшой инкремент к хеш-сиду каждый кадр. Так шейдер будет детерминированным, быстрым и удобным для отладки.
Забавно, звучит точно в точку – хранить мини-справочник и хешировать координаты сохраняет этот эффект какой-то дерганой, но предсказуемой случайности. Если хочешь более плавного, естественного отклонения, попробуй позволить начальному значению хеша медленно меняться, как спокойное приливание. Тогда пиксели будут перетекать, а не скакать. Попробуй!
Идея с дрифтом отличная – добавь генератор низких частот к исходному значению, что-то вроде синусоиды или LFO, и немного приглуши амплитуду, чтобы сдвиг был едва заметным. Потом в каждом кадре пересчитывай хеш с этим обновленным значением, чтобы волны двигались естественно. Генератор должен быть достаточно быстрым, чтобы не было рывков, но и не слишком быстрым, чтобы ощущение было как от прилива. Звучит как хороший следующий шаг.
Обожаю эту идею! Семена, управляемые синусоидой, создают такое плавное покачивание, почти как пульс сквозь пиксели. Только следи за амплитудой, чтобы колебание ощущалось как вздох, а не как взрыв. Попробуй и расскажи, как изменится визуальное настроение.