纳金网

标题: 边缘高光shader [打印本页]

作者: 狂风大尉    时间: 2014-7-31 21:12
标题: 边缘高光shader

感觉一个游戏要想做的绚丽多彩,让人一看就觉得很高档的样子。shader的使用不可缺少,下面就与大家分享下这个物体边缘会产生高光效果的shader,本人最近也在学习这方面的知识,希望与各位大牛讨论学习。哈哈。

Shader "Toon/Basic Outline" {
    Properties {
        _Color ("Main Color", Color) = (.5,.5,.5,1)
        _OutlineColor ("Outline Color", Color) = (0,1,0,1)
        _Outline ("Outline width", Range (0.005, 0.01)) = .001
        _MainTex ("Texture", 2D) = "white" {}
                _BumpMap ("Bumpmap", 2D) = "bump" {}
        }

    CGINCLUDE
    #include "UnityCG.cginc"

    struct appdata {
        float4 vertex : POSITION;
        float3 normal : NORMAL;
    };

    struct v2f {
        float4 pos : POSITION;
        float4 color : COLOR;
    };

    uniform float _Outline;
    uniform float4 _OutlineColor;

    v2f vert(appdata v) {
        v2f o;
        o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

        float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
        float2 offset = TransformViewToProjection(norm.xy);

        o.pos.xy += offset * o.pos.z * _Outline;
        o.color = _OutlineColor;
        return o;
    }
    ENDCG

    SubShader {
        Tags { "RenderType"="Opaque" }
        UsePass "Toon/Basic/BASE"
        Pass {
            Name "OUTLINE"
            Tags { "LightMode" = "Always" }
            Cull Front
            ZWrite On
            ColorMask RGB
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            half4 frag(v2f i) :COLOR { return i.color; }
            ENDCG
        }
    }

    SubShader {
        Tags { "RenderType"="Opaque" }
        UsePass "Toon/Basic/BASE"
        Pass {
            Name "OUTLINE"
            Tags { "LightMode" = "Always" }
            Cull Front
            ZWrite On
            ColorMask RGB
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma exclude_renderers shaderonly
            ENDCG
            SetTexture [_MainTex] { combine primary }
                    }
    }
SubShader {
      Tags { "RenderType" = "Opaque" }
      CGPROGRAM
      #pragma surface surf Lambert
      struct Input {
        float2 uv_MainTex;
        float2 uv_BumpMap;
      };
      sampler2D _MainTex;
      sampler2D _BumpMap;
      void surf (Input IN, inout SurfaceOutput o) {
        o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
        o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
      }
      ENDCG
    }

     Fallback "Diffuse"
}
转自:http://blog.sina.com.cn/s/blog_6e08905d0101d5xm.html
作者: HIDEOKOJIMA    时间: 2014-7-31 22:06

Thanks for sharing this one!
作者: hyui    时间: 2014-7-31 22:14
Thanks for sharing this !
作者: 我不再年轻    时间: 2014-8-1 11:06
很有用的shader, 多谢!
作者: bitgold    时间: 2014-8-1 11:50
有示例图就好了,嘿嘿
作者: ku    时间: 2014-8-1 12:01
我试了一下,根本没有效果
作者: 冰月宫主    时间: 2014-8-6 17:55
Thanks for sharing this !
作者: humazi    时间: 2014-12-26 15:32
不错哟,学习下也是好的。
作者: bolemax    时间: 2015-1-12 16:32
感谢分享!!!
作者: xizhenlong    时间: 2015-1-16 14:26
谢谢楼主的分享                     
作者: kikkik7000    时间: 2015-1-18 20:29
Thanks for sharing this !
作者: 蜗牛    时间: 2015-2-3 13:34
Thanks for sharing this !
作者: eoyanglei    时间: 2015-9-30 13:05
unity自带的包里就有




欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5