Настройка свойства «Операция с трафаретом»?

#unity3d #shader #shaderlab

Вопрос:

Я знаю, что при объявлении свойств шейдера существует несколько типов «ввода»: float, диапазон, цвет, 2D. но когда я пытаюсь настроить операцию трафарета в качестве свойства. как это сделать? Я имею в виду то, что я знаю, что операция трафарета входит в этот список (Больше, ГЕквал, Меньше, ЛЕквал, Равно, Не равно, Всегда, никогда), так как же указать, какая операция в редакторе.

Я видел такую строчку:

_StencilOp («Операция трафарета», С плавающей точкой) = 0

так что же означает «0»?

Ответ №1:

Названия операций соответствуют целому числу, но было бы утомительно запоминать все числа, поэтому у нас есть имена. Но вы все равно можете назначить целое число с помощью переменной.

В C# вы устанавливаете int в шейдере, используя CompareFunction перечисление (которое является просто int )
MyMaterial.SetInt("_MyStencilOp", (int)CompareFunction.Always);

И в шейдере вы размещаете переменную вот так

 Stencil {
            Ref [_PlayerStencilRef]
            Comp [_MyStencilOp]
            Pass Replace
        }
 

(пример изменен здесь)