Unity Shader(4)——surface shader(三)

来源:互联网 发布:网页缓存视频提取软件 编辑:程序博客网 时间:2024/05/22 14:10

接着上篇讲,雾化也是很重要的一种表现效果。(这里根据官方文件整理,后期会补上各种原理


1、这里的雾化效果是根据物体和屏幕中心相关,离屏幕越近,雾化效果越明显

Shader "Example/Fog via Final Color" {    Properties {      _MainTex ("Texture", 2D) = "white" {}      _FogColor ("Fog Color", Color) = (0.3, 0.4, 0.7, 1.0)    }    SubShader {      Tags { "RenderType" = "Opaque" }      CGPROGRAM      #pragma surface surf Lambert finalcolor:mycolor vertex:myvert      struct Input {          float2 uv_MainTex;          half fog;      };      void myvert (inout appdata_full v, out Input data)      {          UNITY_INITIALIZE_OUTPUT(Input,data);          float4 hpos = UnityObjectToClipPos(v.vertex);          hpos.xy/=hpos.w;          data.fog = min (1, dot (hpos.xy, hpos.xy)*0.5);      }      fixed4 _FogColor;      void mycolor (Input IN, SurfaceOutput o, inout fixed4 color)      {          fixed3 fogColor = _FogColor.rgb;          #ifdef UNITY_PASS_FORWARDADD          fogColor = 0;          #endif          color.rgb = lerp (color.rgb, fogColor, IN.fog);      }      sampler2D _MainTex;      void surf (Input IN, inout SurfaceOutput o) {           o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;      }      ENDCG    }     Fallback "Diffuse"  }


2、贴花

这个效果也经常用到,首先通过Tags来控制

Shader "Example/Decal" {  Properties {    _MainTex ("Base (RGB)", 2D) = "white" {}  }  SubShader {    Tags { "RenderType"="Opaque" "Queue"="Geometry+1" "ForceNoShadowCasting"="True" }    LOD 200    Offset -1, -1        CGPROGRAM    #pragma surface surf Lambert decal:blend        sampler2D _MainTex;        struct Input {      float2 uv_MainTex;    };        void surf (Input IN, inout SurfaceOutput o) {        half4 c = tex2D (_MainTex, IN.uv_MainTex);        o.Albedo = c.rgb;        o.Alpha = c.a;      }    ENDCG    }}




原创粉丝点击