23 янв. 2014 г.

Полосатый шейдер. Статья 2

Продолжаю цикл статей «Полосатый шейдер». На этот раз я расскажу как получить одинарную полосу с мягкими краями. В качестве тестовых будем использовать объекты из предыдущей статьи.

Рассмотрим схему шейдера.


Структурно он очень похож на предыдущий. Опишу только отличия:

а) После вычисления смещения данные подаются на узел 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

Желаю удачи.
Отправить комментарий