Продолжаю цикл статей «Полосатый шейдер». На этот раз я расскажу как получить
одинарную полосу с мягкими краями. В качестве тестовых будем использовать объекты из
предыдущей статьи.
Рассмотрим схему шейдера.
Структурно он очень похож на предыдущий. Опишу только отличия:
а) После вычисления смещения данные подаются на узел Maximum. Этот узел имеет два входных гнезда: «A» и «B». В узле Maximum происходит сравнение данных из входов «A» и «B» и возвращается наибольшее значение. В данном примере в гнездо «A» подается непрерывных диапазон интерполируемых значений (визуально мы их видим как градиент), а в «B» – константное значение 0. Если изменять значения от 0 до -1 то можно регулировать левую границу полосы.
б) По аналогии, узел Minimum, после сравнения, возвращает наименьшее значение. Если изменять значения от 0,1 до 1 то можно регулировать правую границу полосы.
в) Далее минимальные значения вычитаются из максимальных.
На диаграммах ниже я изложу механизм работы данной группы узлов.
Для удобства демонстрации расчетов введем упрощение. Если видимый нами градиент это визуализация непрерывного диапазона интерполируемых значений, то нужно преобразовать его в дискретное множество. Таким образом мы понизим разрешение градиента. Произведем выборку по оси U с интервалом 0,25. Получим пять точек. Давайте понаблюдаем за изменением значений в этих точках.
|
Исходные значения |
|
После вычисления смещения на 0,2 |
|
Максимальные значения после сравнения с 0 |
|
Минимальные значения после сравнения с 0,1 |
|
Минимальные значения вычитаются из максимальных |
На последней диаграмме отчетливо прочитывается полоса. Если выполнить интерполяцию между полученными значениями, то получим плавный градиент, который мы видим на схеме шейдера в пункте (в).
г) Узел Multiply позволяет контролировать ширину границы размытия полосы.
Поскольку в этом шейдере мы оперируем интерполируемыми значениями, то в конце цепочки вставляем узел гамма-коррекции Gamma со значением 2.2.
Практическое применение полученного шейдера можно наблюдать на иллюстрациях ниже.
|
Внутри группы, вконце цепочки, необходимо добавить узел Gamma |
|
Выбирая угол проецирования для UV-развертки, можно контролировать искажения полос |
striped_shader-2.blend
Желаю удачи.
Комментариев нет:
Отправить комментарий