温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Shader面板上常用的内置Enum有哪些

发布时间:2022-01-04 15:53:52 来源:亿速云 阅读:188 作者:柒染 栏目:大数据

本篇文章给大家分享的是有关Shader面板上常用的内置Enum有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

今天打算把一个shader的ZTest属性暴露在材质面板上让美术可以方便调节,因为也不是很重要的一个shader就懒得专门写一个UI了,按照ZTest关键字找半天没找到,最后发现原来叫CompareFunction。

所以顺便把shader里常用的一些都整理了一下,(另外发现现在也可以使用自定义的Enum了,印象中老版本的unity是不支持的,不知道是记错了还是unity后来支持了)

代码如下

Shader "Mya/EnumTest"{    Properties    {        _MainTex ("Texture", 2D) = "white" {}                                                           [Header(Custom)]        [Enum(CustomEnum)]  _CustomEnum ("CustomEnum", Float) = 1.0
       [Header(Option)]        [Enum(UnityEngine.Rendering.BlendOp)]  _BlendOp  ("BlendOp", Float) = 1.0        [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("SrcBlend", Float) = 1.0        [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("DstBlend", Float) = 0.0        [Enum(Off, 0, On, 1)]_ZWriteMode ("ZWriteMode", float) = 1        [Enum(UnityEngine.Rendering.CullMode)]_CullMode ("CullMode", float) = 2        [Enum(UnityEngine.Rendering.CompareFunction)]_ZTestMode ("ZTestMode", Float) = 2        [Enum(UnityEngine.Rendering.ColorWriteMask)]_ColorMask ("ColorMask", Float) = 2
       [Header(Stencil)]        [Enum(UnityEngine.Rendering.CompareFunction)]_StencilComp ("Stencil Comparison", Float) = 8        [IntRange]_StencilWriteMask ("Stencil Write Mask", Range(0,255)) = 255        [IntRange]_StencilReadMask ("Stencil Read Mask", Range(0,255)) = 255        [IntRange]_Stencil ("Stencil ID", Range(0,255)) = 0        [Enum(UnityEngine.Rendering.StencilOp)]_StencilPass ("Stencil Pass", Float) = 0        [Enum(UnityEngine.Rendering.StencilOp)]_StencilFail ("Stencil Fail", Float) = 0        [Enum(UnityEngine.Rendering.StencilOp)]_StencilZFail ("Stencil ZFail", Float) = 0
   }    SubShader    {        Tags { "RenderType"="Opaque" }        LOD 100
       Pass        {            BlendOp [_BlendOp]            Blend [_SrcBlend] [_DstBlend]            ZWrite [_ZWriteMode]            ZTest [_ZTestMode]            Cull [_CullMode]            ColorMask [_ColorMask]
           Stencil            {                Ref [_Stencil]                Comp [_StencilComp]                ReadMask [_StencilReadMask]                WriteMask [_StencilWriteMask]                Pass [_StencilPass]                Fail [_StencilFail]                ZFail [_StencilZFail]            }            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #include "UnityCG.cginc"
           struct appdata            {                float4 vertex : POSITION;                float2 uv : TEXCOORD0;            };
           struct v2f            {                float2 uv : TEXCOORD0;                float4 vertex : SV_POSITION;            };
           sampler2D _MainTex;            float4 _MainTex_ST;
           v2f vert (appdata v)            {                v2f o;                o.vertex = UnityObjectToClipPos(v.vertex);                o.uv = TRANSFORM_TEX(v.uv, _MainTex);                return o;            }
           fixed4 frag (v2f i) : SV_Target            {                // sample the texture                fixed4 col = tex2D(_MainTex, i.uv);                return col;            }            ENDCG        }    }}

自定义Enum的代码

public enum CustomEnum{    Enum1 = 0,    Enum2 = 1,    Enum3 = 2}

效果如下

Shader面板上常用的内置Enum有哪些

ZWriteMode是没有内置的,实际上也只有on和off两个状态,所以用Toogle其实也可以,我这里是直接用[Enum(Off, 0, On, 1)]这样的写法声明了个新的自定义Enum

[IntRange]我记得以前好像也是没有的,这个可以绘制一个整形输入的滑杆

想要知道unity还有哪些shader里可以用的Attributes可以看看MaterialPropertyDrawer.cs这个文件,或者继承MaterialPropertyDrawer后自己写一个。

以上就是Shader面板上常用的内置Enum有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI