Heads-up: это, вероятно, не тот способ, который вы ищете, так как каждый пиксель вашего шейдера должен будет l oop по всем вашим входным точкам, тогда как каждый из этих пикселей будет покрыт только один максимум. Это классический случай использования преимуществ параллельной природы шейдеров. (Ключевое слово для меня здесь - «случайный», как в «случайном взгляде»).
Здесь есть две различные проблемы: создание кругов и их маскировка. Я бы go на создание сетки из вашего входного пространства (скорее всего, ваши координаты UV, поэтому я буду предполагать, что отсюда), взяв дробную часть координат, масштабируемой по некоторому значению: UV (обычно) go от 0 до 1, поэтому, если вы хотите 100 кругов, вы должны умножить координату на 10. Теперь у вас есть сетка из 100 кусков UV, где вы можете сделать что-то похожее на то, что вы должны сгенерировать круг (tip: dot product вектор сам по себе дает квадратное расстояние, которое намного дешевле вычислить).
Вам нужна некоторая случайность, поэтому вам нужно добавить некоторое смещение к центру круга. Вам нужно какое-то случайное число (в ASE может быть какое-то количество, которое я не могу вспомнить, или сделать свое собственное - есть много того, что вы смотрите онлайн), которое уникально для каждой ячейки сетки. Чтобы сделать это, вы должны ввести остаток от вашего значения c () в качестве значения для вашего метода хеширования / случайного выбора. Вам также нужно ограничить это смещение в зависимости от радиуса круга, чтобы оно не касалось сторон ячейки. Вы также можете наложить более одного слоя окружностей, если хотите увеличить охват.
Второй шаг - выяснить, хотите ли вы вообще отображать эти круги, и для этого вы можете сделать чертеж условным к расстояние от центра круга до входной координаты, которую вы предоставляете шейдеру, по некоторому порогу. (само по себе это не должно быть условие if, это может быть ограничение значения цветом bg или что-то в этом роде)
Я делаю много предположений о том, что вы хотите сделать здесь и если у вас более строгие условия в распределении точек, вам может быть лучше, например, рендерить квадраты на текстуру рендеринга, но это совсем другая топи c:)