Unity3D中shader 轮廓描边效果实现代码
<p><strong>Unity3D中shader 轮廓描边效果</strong></p><p>想利用Unity3D中shader这个功能实现描边轮廓边框效果该怎么做呢,相信有很多搞开发的人想知道,为此下面就给大家介绍下方法。</p>
<p> Shade实现描边效果,如下图中的3D球效果图</p>
<p><img id="theimg" src="https://img.jbzj.com/file_images/article/201703/2017314103843985.png?2017214103858" alt="" /></p>
<p> Shade代码如下:<br />
</p>
<div class="jb51code">
<pre class="brush:cpp;">
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
Ambient
}
Lighting On
SetTexture {
ConstantColor
Combine texture * constant
}
SetTexture {
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 { combine primary }
}
Pass {
Name "BASE"
ZWrite On
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
Material {
Diffuse
Ambient
}
Lighting On
SetTexture {
ConstantColor
Combine texture * constant
}
SetTexture {
Combine previous * primary DOUBLE
}
}
}
Fallback "Diffuse"
}
</pre>
</div>
<p> 以上就是Unity3D中利用shader这个功能实现描边轮廓边框效果的方法,不会的话就直接那这串代码去尝试吧。</p>
<p> 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>Unity shader实现消融效果</li><li>Unity shader实现自由放大缩小效果</li><li>Unity Shader实现序列帧动画效果</li><li>unity shader实现玻璃折射效果</li><li>Unity Shader实现玻璃材质效果</li><li>Unity Shader实现新手引导遮罩镂空效果</li><li>Unity Shader实现描边OutLine效果</li><li>Unity3D Shader实现贴图切换效果</li><li>Unity shader实现遮罩效果</li><li>浅谈Unity中的Shader</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]