Memo & NPRWizard
Привет, Мемо. Я тут экспериментировал с алгоритмом адаптивной детекции границ, который превращает растровые изображения в чёткие векторные контуры — как бы цифровая штриховка получается. Как бы ты подошёл к тому, чтобы превратить это в шейдер реального времени, который сохранит постоянную толщину линий при изменении масштаба, не теряя при этом детали?
Звучит как типичный подход с использованием поля расстояний. Сначала вычисляешь карту границ в первом проходе, а потом во втором – преобразуешь её в знаковое поле расстояний. В шейдере ты можешь брать значения из этого поля расстояний и использовать step или smoothstep, чтобы решить, где рисовать линию. Толщина линии – просто константа в экранном пространстве, поэтому она остаётся неизменной при любом масштабировании. Если нужна работа в реальном времени, вычисляй поле расстояний с фиксированным разрешением и используй мип-карты для разных масштабов. Не забудь добавить ещё один канал для интенсивности, чтобы не терять детали при уменьшении разрешения поля. И, наконец, добавь небольшой проход с антиалиасингом, например, размытие по Гауссу с радиусом 2 пикселя, чтобы убрать пикселизацию. Так контур останется чётким при любом масштабе, без потери информации.