Unity3D 描边效果代码(轮廓边框) 实例

    作者:课课家教育更新于: 2016-03-02 11:59:03

    游戏开发unity3D 描边效果教程,使用Shader模块就可以轻松实现

    这里先给出圆球效果图(PS:这是一个3D球)

     Unity3D 描边效果代码(轮廓边框) 实例_Unity3D描边_Unity3D Shader - 课课家

     

    Unity3D 描边效果(轮廓边框)但是我并不熟悉shader这一块这里直接给出 shader 的代码

    Shader "Outlined/Silhouetted Diffuse" {

    Properties {

    _Color ("Main Color", Color) = (1,1,1,1)

    _OutlineColor ("Outline Color", Color) = (0,0,0,1)//改变这个能改变轮廓边的颜色

    _Outline ("Outline width", Range (0.0, 0.03)) = 0.008//改变这个能改变轮廓边的粗细

    _MainTex ("Base (RGB)", 2D) = "white" { }

    }

    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) {

    // just make a copy of incoming vertex data but scaled according to normal direction

    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 { "Queue" = "Transparent" }

     

    // note that a vertex shader is specified here but its using the one above

    Pass {

    Name "OUTLINE"

    Tags { "LightMode" = "Always" }

    Cull Off

    ZWrite Off

    ZTest Always

    ColorMask RGB // Alpha not used

     

    // you can choose what kind of blending mode you want for the outline

    Blend SrcAlpha OneMinusSrcAlpha // Normal

    //Blend One One // Additive

    //Blend One OneMinusDstColor // Soft Additive

    //Blend DstColor Zero // Multiplicative

    //Blend DstColor SrcColor // 2x Multiplicative

     

    CGPROGRAM

    #pragma vertex vert

    #pragma fragment frag

     

    half4 frag(v2f i) :COLOR {

    return i.color;

    }

    ENDCG

    }

     

    Pass {

    Name "BASE"

    ZWrite On

    ZTest LEqual

    Blend SrcAlpha OneMinusSrcAlpha

    Material {

    Diffuse [_Color]

    Ambient [_Color]

    }

    Lighting On

    SetTexture [_MainTex] {

    ConstantColor [_Color]

    Combine texture * constant

    }

    SetTexture [_MainTex] {

    Combine previous * primary DOUBLE

    }

    }

    }

    SubShader {

    Tags { "Queue" = "Transparent" }

     

    Pass {

    Name "OUTLINE"

    Tags { "LightMode" = "Always" }

    Cull Front

    ZWrite Off

    ZTest Always

    ColorMask RGB

     

    // you can choose what kind of blending mode you want for the outline

    Blend SrcAlpha OneMinusSrcAlpha // Normal

    //Blend One One // Additive

    //Blend One OneMinusDstColor // Soft Additive

    //Blend DstColor Zero // Multiplicative

    //Blend DstColor SrcColor // 2x Multiplicative

     

    CGPROGRAM

    #pragma vertex vert

    #pragma exclude_renderers gles xbox360 ps3

    ENDCG

    SetTexture [_MainTex] { combine primary }

    }

     

    Pass {

    Name "BASE"

    ZWrite On

    ZTest LEqual

    Blend SrcAlpha OneMinusSrcAlpha

    Material {

    Diffuse [_Color]

    Ambient [_Color]

    }

    Lighting On

    SetTexture [_MainTex] {

    ConstantColor [_Color]

    Combine texture * constant

    }

    SetTexture [_MainTex] {

    Combine previous * primary DOUBLE

    }

    }

    }

    Fallback "Diffuse"

    }

     

     

Unity3D 更多推荐

课课家教育

未登录