Shader 基础

Shader"Unlit/01"
{
    Properties
    {
      //_MainColor("MainColor",Color)=(1,1,1,1)
        _MainTex ("Texture", 2D) = "" {}
        _Emiss("Emiss", Float) = 1.0
        _RimPower("RimPower",float)=1.0
       
        //_Cutout("Cutout",Range(-0.1,1.1))=0.0
        _Speed("Speed",Vector)=(1,1,0,0)
        //_NoiseTex("Noise Tex",2D)="white"{}
       _MainColor("Main Color",Color)=(1,1,1,1)
       //[Enum(UnityEngine.Rendering.CullMode)]_CullMode("CullMode", float) = 2
    }
    SubShader
    {
       Tags { "Queue"="Transparent" }

        Pass
         {
           
          // LOD 100
            ZWrite off

             Blend SrcAlpha One
            //Cull [_CullMode]
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
struct appdata
{
    float4 vertex : POSITION;
    half2 texcoord0 : TEXCOORD0;
    
    half4 color : COLOR;
    half3 normal : NORMAL;
    //half4 tangent : TANGENT;

};

struct v2f
{
    float4 pos : SV_POSITION;
    float4 uv : TEXCOORD0;
    float3 normal_world : TEXCOORD1;
   // float3 pos_local : TEXCOORD1;
    float3 pos_uv : TEXCOORD3;
    float3 view_world : TEXCOORD2;
};

    float4 vert(float4 v : POSITION) : SV_POSITION
{
    return UnityObjectToClipPos(v);
}

//float4 _color;
sampler2D _MainTex;
float4 _MainTex_ST;
float _Cutout;
float4 _Speed;
sampler2D _NoiseTex;
float4 _NoiseMap_ST;
//float4 _MainColor;
float4 _MainColor;
float _Emiss;
float _RimPower;

v2f vert(appdata v)
{
    v2f o;
   
    //float4 pos_world = mul(unity_ObjectToWorld, v.vertex);
    //float4 pos_view = mul(UNITY_MATRIX_V, pos_world);
    //float4 pos_clip = mul(UNITY_MATRIX_P, pos_view);
    //o.pos = pos_clip;
    //o.uv = v.texcoord0 * _MainTex_ST.xy + _MainTex_ST.zw;
    //o.pos_uv = pos_world.xz * _MainTex_ST.xy + _MainTex_ST.zw;
    //o.normal = v.normal;
    //o.uv.zw = v.texcoord0 * _NoiseMap_ST.xy + _NoiseMap_ST.zw;
   // o.pos_local = v.vertex.xyz;
    o.pos = UnityObjectToClipPos(v.vertex);
    o.normal_world = normalize(mul(float4(v.normal, 0.0), unity_WorldToObject).xyz); 
    float3 pos_world = mul(unity_ObjectToWorld, v.vertex).xyz;
    o.view_world = normalize(_WorldSpaceCameraPos.xyz - pos_world);
    o.uv.xy = v.texcoord0 * _MainTex_ST.xy + _MainTex_ST.zw;
    
    return o;
}
fixed4 frag(v2f i) : SV_Target
{
    
    
    //half col = tex2D(_MainTex, i.uv) * _MainColor;
    //half col = tex2D(_MainTex, i.uv + _Time.y * _Speed.xy).r;
    //half4 col = float4(i.uv, 0.0, 0.0);
    //half noise = tex2D(_NoiseTex, i.uv + _Time.y * _Speed.zw).r;
    //clip(col - noise-_Cutout);
   
    //half3 col = _MainColor.xyz * _Emiss;
    //half alpha = saturate(tex2D(_MainTex, i.uv).r * _MainColor.a * _Emiss);
    float3 normal_world = normalize(i.normal_world);
    float3 view_world = normalize(i.view_world);
    float NdotV = saturate(dot(normal_world, view_world));
    float3 col = _MainColor.xyz * _Emiss;
    float fresnel = pow((1.0 - NdotV), _RimPower);
    float alpha = saturate((1.0 - NdotV) * _Emiss);
    return float4(col, alpha);
    }
            ENDCG
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值