float circle = step(length(uv - 0.5), 0.3);length(uv - 0.5) — расстояние от текущего пикселя до центра. s
tep(a, b) возвращает 1 если b >= a, и 0 если b < a.
Значит step(length(...), 0.3) вернёт 1 когда 0.3 >= distance — то есть внутри круга. Именно то что нужно.
Альтернативная запись которая читается интуитивнее:
float circle = 1.0 - step(0.3, length(uv - 0.5));Здесь step(0.3, length(...)) = 1 снаружи, инвертируем — получаем 1 внутри. Оба варианта правильные, первый короче.
Порядок аргументов step — самая частая ошибка в шейдерах. Буквально каждый раз приходится останавливаться и думать 🙂 Решение не единственное, но это довольно компактное.
#разминка #шейдеры #математика