Недавно встречались в дискорде стайкой флатеристов и Саша рассказывала про прикольный пакет для создания lava-дизайна – gooey.

Идея с точки зрения UI прикольная и выглядит сочно. Рисуется это велоколепие фрагментным шейдером и тут, как водится, есть подводные камни.

Максимальное количество "сгустков" (GooeyBlob) равно десяти. Решив выяснить "почему так", полез в код и нашел совершенно милое ограничение – авторы было лень писать больше uniform для передачи параметров в шейдер 🙂 Отсюда растут ноги второго неочевидного поведения – создать градиентную заливку кляксы можно только из 3 цветов.

Как демка проект очень интересный и при этом достаточно простой, чтобы быстро разобраться в том, как он работает. Но, если бы я был автором этой библиотеки и хотел привести ее в production-ready вид, то:

1. Избавился от самописных реализация SDF, затащил проверенную либу hg_sdf . 2. Поэкспериментировал с кодогенерацией кода шейдера для создания произвольного количество юниформ-переменных под кляксы. 3. Для градиентов правильнее вообще уйти от передачи отдельных цветов как параметров. Градиент с произвольным числом стопов почти всегда решается сэмплированием из 2D-текстуры высотой в 1 пиксель, где по оси X закодирована позиция стопа, а по Y — цвет.


В этом посте были ссылки, но мы их удалили по правилам Сетки