您的位置:首页 > 其它

外发光材质Shader

2015-02-14 13:16 197 查看
转载自http://www.unitymanual.com/6943.html
游戏中我们经常会遇到需要制作外发光效果的地方,比如武器,比如坐骑要带一个牛掰的光晕。今天我找到了个好效果:





外发光材质Shader

001Shader"Faye/OutLightting"002
{
003
Properties
004
{
005
_MainTex("Texture(RGB)",2D)="black"{}
006
_Color("Color",Color)=(0,0,0,1)
007
_AtmoColor("AtmosphereColor",Color)=(0.5,0.5,1.0,1)
008
_Size("Size",Float)=0.1
009
_Falloff("Falloff",Float)=5
010
_FalloffPlanet("FalloffPlanet",Float)=5
011
_Transparency("Transparency",Float)=15
012
_TransparencyPlanet("TransparencyPlanet",Float)=1
013
}
014
015
SubShader
016
{
017
Pass
018
{
019
Name"PlanetBase"
020
Tags{"LightMode"="Always"}
021
CullBack
022
023
CGPROGRAM
024
#pragmavertexvert
025
#pragmafragmentfrag
026
027
#pragmafragmentoptionARB_fog_exp2
028
#pragmafragmentoptionARB_precision_hint_fastest
029
030
#include"UnityCG.cginc"
031
032
uniformsampler2D_MainTex;
033
uniformfloat4_MainTex_ST;
034
uniformfloat4_Color;
035
uniformfloat4_AtmoColor;
036
uniformfloat_FalloffPlanet;
037
uniformfloat_TransparencyPlanet;
038
039
structv2f
040
{
041
float4pos:SV_POSITION;
042
float3normal:TEXCOORD0;
043
float3worldvertpos:TEXCOORD1;
044
float2texcoord:TEXCOORD2;
045
};
046
047
v2fvert(appdata_basev)
048
{
049
v2fo;
050
051
o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
052
o.normal=v.normal;
053
o.worldvertpos=mul(_Object2World,v.vertex).xyz;
054
o.texcoord=TRANSFORM_TEX(v.texcoord,_MainTex);
055
056
returno;
057
}
058
059
float4frag(v2fi):COLOR
060
{
061
i.normal=normalize(i.normal);
062
float3viewdir=normalize(_WorldSpaceCameraPos-i.worldvertpos);
063
064
float4atmo=_AtmoColor;
065
atmo.a=pow(1.0-saturate(dot(viewdir,i.normal)),_FalloffPlanet);
066
atmo.a*=_TransparencyPlanet*_Color;
067
//Unity3D教程手册:http://www.unitymanual.com
068
float4color=tex2D(_MainTex,i.texcoord)*_Color;
069
color.rgb=lerp(color.rgb,atmo.rgb,atmo.a);
070
071
returncolor*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0),i.normal);
072
}
073
ENDCG
074
}
075
076
Pass
077
{
078
Name"AtmosphereBase"
079
Tags{"LightMode"="Always"}
080
CullFront
081
BlendSrcAlphaOne
082
083
CGPROGRAM
084
#pragmavertexvert
085
#pragmafragmentfrag
086
087
#pragmafragmentoptionARB_fog_exp2
088
#pragmafragmentoptionARB_precision_hint_fastest
089
090
#include"UnityCG.cginc"
091
092
uniformfloat4_Color;
093
uniformfloat4_AtmoColor;
094
uniformfloat_Size;
095
uniformfloat_Falloff;
096
uniformfloat_Transparency;
097
098
structv2f
099
{
100
float4pos:SV_POSITION;
101
float3normal:TEXCOORD0;
102
float3worldvertpos:TEXCOORD1;
103
};
104
//Unity3D教程手册:http://www.unitymanual.com
105
v2fvert(appdata_basev)
106
{
107
v2fo;
108
109
v.vertex.xyz+=v.normal*_Size;
110
o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
111
o.normal=v.normal;
112
o.worldvertpos=mul(_Object2World,v.vertex);
113
114
returno;
115
}
116
117
float4frag(v2fi):COLOR
118
{
119
i.normal=normalize(i.normal);
120
float3viewdir=normalize(i.worldvertpos-_WorldSpaceCameraPos);
121
122
float4color=_AtmoColor;
123
color.a=pow(saturate(dot(viewdir,i.normal)),_Falloff);
124
color.a*=_Transparency*_Color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0),i.normal);
125
returncolor;
126
}
127
ENDCG
128
}
129
}
130
131
FallBack"Diffuse"
132
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: