【Unity3D_Shader】瞄准器射线Shader

Shader "AngryBots/FX/LaserScope" {
    Properties {
        _MainTex ("MainTex"2D) = "white"
        _NoiseTex ("NoiseTex"2D) = "white" 
    }
    CGINCLUDE //CGINCLUDE .. ENDCG包起代码块,会自动编译进pass()中
        #include "UnityCG.cginc"//包含TRANSFORM_TEX等函数
        sampler2D _MainTex;
        sampler2D _NoiseTex;
        half4 _MainTex_ST;//对应TRANSFORM_TEX
        half4 _NoiseTex_ST;//对应TRANSFORM_TEX
        fixed4 _TintColor;       
        struct vf {
            half4 pos : SV_POSITION;【1】
            half4 uv : TEXCOORD0;
        };

        vf vert(appdata_full v)//appdata_full:带有位置、法线、切线、顶点色和两个纹理坐标的顶点着色器输入{
            vf o;

            o.pos = mul (UNITY_MATRIX_MVPv.vertex);//UNITY_MATRIX_MVP:当前模型视图投影矩阵,将vertex投影到视口,返回对应视口坐标
           //TRANSFORM_TEX(v.texcoord_MainTex等价 v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw
            o.uv.xy = TRANSFORM_TEX(v.texcoord_MainTex);
            o.uv.zw = TRANSFORM_TEX(v.texcoord_NoiseTex);//分别用xy,zw存储MainTex,NoiseTex的uv
            return o
        }
        
        fixed4 fragvf i ) : COLOR{    
            return tex2D (_MainTexi.uv.xy) * tex2D (_NoiseTexi.uv.zw);//MainTex,NoiseTex混合
        }
    
    ENDCG
    
    SubShader {
        Tags { "RenderType" = "Transparent" "Reflection" = "LaserScope" "Queue" = "Transparent"}// "Reflection"??
        Cull Off//设置多边形剔除模式CullOff 关闭阴影面剔除 Cull Back 剔除背面 CullFront 剔除正面 :激光存在透明模块,既使背景被激光遮挡,也不应该剔除
        ZWrite Off//设置深度写模式
        Blend SrcAlpha One//设置alpha混合模式(贴图颜色值rgb * Alpha值)+(背景颜色rgb * 1)//(0.8,0,1)与结果不符
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma fragmentoption ARB_precision_hint_fastest
        ENDCG  
        }       
    } 
    FallBack Off

}

【1】

SV_POSITION是一个特殊的语义(SV表示系统值,即system value的缩写)。它用于告诉顶点着色器该元素存储的是顶点位置。顶点位置的处理方式与其他顶点属性不同,因为它涉及到一些其他属性所没有的特殊运算,比如裁剪。若不是系统值,那么输出参数的语义名称可以是任何有效的语义名称

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页