Unity3D中shader 轮廓描边效果
想利用Unity3D中shader这个功能实现描边轮廓边框效果该怎么做呢,相信有很多搞开发的人想知道,为此下面就给大家介绍下方法。
Shade实现描边效果,如下图中的3D球效果图
Shade代码如下:
代码如下 | 复制代码 |
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"
structappdata { float4 vertex : POSITION; float3 normal : NORMAL; };
structv2f { float4 pos : POSITION; float4 color : COLOR; };
uniformfloat_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; returno; } 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 { returni.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" } |