本篇文章給大家分享的是有關(guān)Shader面板上常用的內(nèi)置Enum有哪些,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
站在用戶的角度思考問題,與客戶深入溝通,找到婁底網(wǎng)站設(shè)計(jì)與婁底網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋婁底地區(qū)。
今天打算把一個(gè)shader的ZTest屬性暴露在材質(zhì)面板上讓美術(shù)可以方便調(diào)節(jié),因?yàn)橐膊皇呛苤匾囊粋€(gè)shader就懶得專門寫一個(gè)UI了,按照ZTest關(guān)鍵字找半天沒找到,最后發(fā)現(xiàn)原來叫CompareFunction。
所以順便把shader里常用的一些都整理了一下,(另外發(fā)現(xiàn)現(xiàn)在也可以使用自定義的Enum了,印象中老版本的unity是不支持的,不知道是記錯(cuò)了還是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}
效果如下
ZWriteMode是沒有內(nèi)置的,實(shí)際上也只有on和off兩個(gè)狀態(tài),所以用Toogle其實(shí)也可以,我這里是直接用[Enum(Off, 0, On, 1)]這樣的寫法聲明了個(gè)新的自定義Enum
[IntRange]我記得以前好像也是沒有的,這個(gè)可以繪制一個(gè)整形輸入的滑桿
想要知道unity還有哪些shader里可以用的Attributes可以看看MaterialPropertyDrawer.cs這個(gè)文件,或者繼承MaterialPropertyDrawer后自己寫一個(gè)。
以上就是Shader面板上常用的內(nèi)置Enum有哪些,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。