服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity3D中shader 轮廓描边效果实现代码

Unity3D中shader 轮廓描边效果实现代码

2022-08-29 16:10C#教程网 C#

这篇文章主要介绍了Unity3D中shader 轮廓描边效果的相关资料,需要的朋友可以参考下

Unity3D中shader 轮廓描边效果

想利用Unity3D中shader这个功能实现描边轮廓边框效果该怎么做呢,相信有很多搞开发的人想知道,为此下面就给大家介绍下方法。

  Shade实现描边效果,如下图中的3D球效果图

Unity3D中shader 轮廓描边效果实现代码

          Shade代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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中利用shader这个功能实现描边轮廓边框效果的方法,不会的话就直接那这串代码去尝试吧。

       感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

延伸 · 阅读

精彩推荐
  • C#c#获取两个特定字符之间的内容并输出的方法

    c#获取两个特定字符之间的内容并输出的方法

    今天小编就为大家分享一篇c#获取两个特定字符之间的内容并输出的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    JustGoingToDo9462022-03-07
  • C#C#调用dos窗口获取相关信息的方法

    C#调用dos窗口获取相关信息的方法

    这篇文章主要介绍了C#调用dos窗口获取相关信息的方法,涉及C#调用dos窗口及进程操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧10552021-10-22
  • C#C#多线程中如何运用互斥锁Mutex

    C#多线程中如何运用互斥锁Mutex

    这篇文章主要为大家详细介绍了C#多线程中如何运用互斥锁Mutex,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    小恩9012022-01-10
  • C#C#调用C++DLL传递结构体数组的终极解决方案

    C#调用C++DLL传递结构体数组的终极解决方案

    这篇文章主要介绍了C#调用C++DLL传递结构体数组的终极解决方案的相关资料,需要的朋友可以参考下...

    xxdddail11812021-12-20
  • C#C#编程之事务用法

    C#编程之事务用法

    这篇文章主要介绍了C#编程之事务用法,结合实例形式对比分析了C#中事务提交与回滚的具体实现技巧与相关注意事项,具有一定参考借鉴价值,需要的朋友可以...

    mil3982021-11-03
  • C#C#微信接口之推送模板消息功能示例

    C#微信接口之推送模板消息功能示例

    这篇文章主要介绍了C#微信接口之推送模板消息功能,结合实例形式分析了C#操作微信推送模板消息接口的具体操作步骤与相关使用技巧,需要的朋友可以参考...

    兰給3562022-01-12
  • C#C#如何消除验证码图片的锯齿效果

    C#如何消除验证码图片的锯齿效果

    这篇文章主要为大家详细介绍了C#如何消除验证码图片的锯齿效果,有无锯齿主要依靠一句代码,想要知道的朋友可阅读下文...

    garfieldzf10462021-12-06
  • C#C#是什么

    C#是什么

    C#是什么?C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。...

    百度百科4052020-12-12