最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Unity3D中shader 轮廓描边效果实现代码
时间:2017-06-27 编辑:简简单单 来源:一聚教程网
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" } |
相关文章
- C#复制数组的两种方式及效率比较解读 10-24
- ASP.NET Identity用法解析 10-24
- ASP.NET MVC使用Identity增删改查用户介绍 10-24
- C语言中atoi函数模拟实现介绍 10-18
- .Net反向代理组件Yarp用法介绍 10-10
- .NET使用YARP通过编码方式配置域名转发实现反向代理教程 10-10