[Shader 着色器]边缘高光

保存

图片:未命名.jpg

图片:QQ截图20120830125443.png


先上图,等会再将研究心得发布,如果想一起研究我有源代码,要的回复
 附上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"
}
 

你可能感兴趣的:(Unity,3D)