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"
}
unity3d自学教程|Unity3D中shader 轮廓描边效果实现代码
http://m.bbyears.com/jiaocheng/131481.html
推荐访问:unity3d下载 unity3d用什么语言