Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Тег { «RenderType» = «Opaque» } помечает шейдер как непрозрачный. Это влияет на очередь отрисовки.Каким образом влияет? Почему нельзя было уделить абзац на пояснение процесса отрисовки полупрозрачной геометрии и проблем с ней связанной: необходимость сортировки по отдалению от камеры либо использование изощренных техник order-independent transparency (вроде depth peeling)? И, соответственно, сказать, что непрозрачную геометрию можно рисовать значительно быстрее, поэтому важно правильно указать этот флаг.
#pragma surface surf Lambert – объявление функции surface-шейдера… модель освещения по Ламберту.Вы уверены, что все знают, что такое освещение по Ламберту? Можно было бы тоже пару абзацев уделить тому, как рассчитывается интенсивность света, и что Ламбертова модель освещения подразумевает использование всего двух векторов: нормали поверхности и вектора от источника света до обрабатываемого пикселя. И поэтому, с одной стороны, оно очень быстрое, а с другой стороны, очень простое и далеко до реалистичного: поверхности исключительно матовые.
После чего функцией clip мы указываем, какие пиксели мы пропускаем при рендеринге. Т.к. отсекаем мы по информации, которая хранится в альфа-канале, то в параметрах указываем tex.a.А в коде почему-то еще вычитаете 0.5. Возможно, стоило написать, что функция clip отбрасывает текущий пиксель, если аргумент функции меньше нуля? Соответственно, в вашем случае, если значение альфа-канала текущего пикселя меньше 0.5, то пиксель нарисован не будет, и таким образом вы управляете прозрачностью финальной картинки (та самая рожица на текстуре кирпича).
Разбираемся с шейдерами в Unity3D на конкретном примере