Shader基础内容

Shader ".../ShaderName"
{
//本shader中所调用的属性
Properties
{
	//属性设置
	[外部限定]内部使用的name(“外部使用的name”,属性的类型) = 默认的值
   
   	_Color("color",Color)=(1,1,1,1)   //颜色,一般用fixed4

	_Vector("vector",Vector)=(1,2,3,4) //向量类型,float4 

	_Int("int",Int)=123//整数

	_Float("float",Float)=5.5 //小数,不像c#里需要加f

	_Range("range"Range(1,10))=10  //范围,括号里是范围,本质上就是Float,只是对Float做了一个限制。

	_2D("texture",2D)="white"{}  white指的是在没有图片的时候使用的颜色。

	_Cube("cube",Cube)="white"{}//这里的cube是天空盒子。

	_3D("texture",3D)="white"{}//3d纹理
}

//1号顶点着色器
SubShader
{
    LOD 100
    //1号顶点着色器标签
    Tags
    {
    	//定义渲染顺序
        "Queue"="Transparent"
        //是否接受projector组件的投影
        "IgnoreProjector"="True"
        //替换所有符合类型的shader  用C#接口来进行控制
        "RenderType"="Transparent"
        //UI浏览的类型设置
        "PreviewType"="Plane"
        //设置能否使用图集
        "CanUseSpriteAtlas"="True"
    }
	//## 模板测试
    Stencil
    {
    	//将属性中的默认参数传入,unity会自动调整并且筛选可渲染的区域
    	//设置ref参考值
        Ref 
        
        //设置ref参考值跟几何缓存之间通过测试的方法
        //默认为always = 8总是通过  Never = 1总是失败
        //判断ref&readMask 与 Gbuffer&readmask     Greater = 5 操作为>   Less = 2操作为<
        // GEqual = 7 操作为>=   LEqual  = 4 操作为<=    Equal  = 3操作为=    NotEqual = 6 操作为!=
        Comp
        
        //当模板测试和深度测试都通过之后  对其几何缓存的处理
        Pass 
        
        //当模板测试跟深度测试都失败之后  对其几何缓存的处理
		Fail
		
		//只有深度测试通过之后  对其几何缓存的处理
		ZFail
		
		//以上对其几何缓存的处理  默认为Keep = 0 保留当前缓存中的内容 即Gbuffer不变
		//Zero  = 1 将0写入缓存 Gbuff =0     replace = 2 将 ref写入缓存 Gbuff=ref           Invert  = 5 将当前模板的Gbuff取反   
		//incrsat = 3 将Gbuff的值+1 如果超过255 则保留为255       DecrSat = 4 将Gbuff的值-1 如何超过0 则保留为0
		//IncrWarp = 6 将Gbuff的值+1 如果超过255 则从0自增       DecrWarp = 7 将Gbuff的值-1 如何超过0 则从255自减


		//读取遮罩 该值将和ref以及Gbuffer进行&操作  但是不对ref和Gbuffer进行修改
        ReadMask
        
        //写入遮罩 该值将和ref以及Gbuffer进行&操作  同时修改Gbuffer的值
        WriteMask
    }

	//## 深度测试
	//渲染正反面的设置
    Cull Off
    Lighting Off
    //判断开启/关闭深度写入  是否能把Z值存入深度缓存
    ZWrite Off
    //根据当前像素深度与深度缓存中Z值进行比较 测试通过之后 把像素对应的color写入颜色缓存
    ZTest [unity_GUIZTestMode]

	//颜色混合
	// One                              使用它将保持source或destination的完整的颜色
    //Zero                             使用它将移除source或destination的值
    //SrcColor                      使用它将乘以source颜色值
    //SrcAlpha                      使用它将乘以source的alpha值
    //DstColor                      使用它将乘以frame buffer中的source颜色值
    //DstAlpha                     使用它将乘以frame buffer中的source的alpha值
    //OneMinusSrcColor      使用它将乘以(1-source颜色值)
    //OneMinusSrcAlpha      使用它将乘以(1-source的alpha值)
    //OneMinusDstColor       使用它将乘以 (1 - destination颜色值)
    //OneMinusDstAlpha       使用它将乘以 (1 - destination的alpha值)
    Blend SrcAlpha OneMinusSrcAlpha
	//雾效 模式
	off 关闭雾效
	Global  默认
	Linear  线性
	EXP 一次指数
	EXP2 二次指数
	Fog{ 	Mode off }
	//设定雾的颜色
	Color ColorValue
	//以指数的方式 设定 雾的密度
	Density FloatValue
	//为linear的雾设定远近距离
	Range FloatValue , FloatValue
	

	//通过对RGBA通道不同通道的遮罩展示不同的颜色 当为0时 则什么都不显示
	Alpha  = 1 只通过A
    Blue = 2 只通过B
	Green = 4  只通过G
	 Red = 8   只通过R
	 All = 15  全部通过
    ColorMask [_ColorMask]
	
	//通道,每次通道都可以进行一次渲染
    Pass
    {
        Name "Default"
    CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma target 2.0

        #include "UnityCG.cginc"
        #include "UnityUI.cginc"

        #pragma multi_compile __ UNITY_UI_ALPHACLIP
		//将空间坐标转换为顶点坐标的结构体
        struct appdata_t
        {
        	//裁剪坐标
            float4 vertex   : POSITION;
            //色彩缓存颜色
            float4 color    : COLOR;
            //裁剪坐标对应纹理坐标
            float2 texcoord : TEXCOORD0;
            UNITY_VERTEX_INPUT_INSTANCE_ID
        };
		//将顶点坐标转换成片元坐标的结构体
        struct v2f
        {
            float4 vertex   : SV_POSITION;
            fixed4 color    : COLOR;
            float2 texcoord  : TEXCOORD0;
            float4 worldPosition : TEXCOORD1;
            UNITY_VERTEX_OUTPUT_STEREO
        };
		//定义属性中的字段 在着色器中使用
        fixed4 _Color;
        fixed4 _TextureSampleAdd;
        float4 _ClipRect;
		//顶点函数 将a2v结构体传入 输出V2f结构体
        v2f vert(appdata_t v)
        {
        	//定义输出结构体
            v2f OUT;
            UNITY_SETUP_INSTANCE_ID(v);
            UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
            OUT.worldPosition = v.vertex;
            OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);

            OUT.texcoord = v.texcoord;

            OUT.color = v.color * _Color;
            return OUT;
        }

        sampler2D _MainTex;
		//片元函数 将V2F结构体传入 输出色彩结构体
        fixed4 frag(v2f IN) : SV_Target
        {
            half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;

            color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
			color.a = pow(color.a, 1.45f);
            #ifdef UNITY_UI_ALPHACLIP
            clip (color.a - 0.001);
            #endif

            return color;
        }
    ENDCG
    }
}

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值