unity 发光字体_unity文本自发光效果
項目要求一個文本自發光的效果,網上搜索了一下法線并沒有找到有關代碼,于是只能自己動手寫了一個,先上效果吧
這里其實只用到了簡單的模糊效果,本來想用的高斯模糊,但是發現效果還不如簡單的模糊效果。下面是片元著色器的代碼
float getTransparent(sampler2D MainTex, float2 ?uv)
{
fixed4 result = tex2D(_MainTex, uv);
return result.a;
}
fixed4 frag (v2f i) : COLOR{
fixed4 lightCol = fixed4(0.0f, 0.612f, 1.0f, 1.0f);
fixed4 result = tex2D(_MainTex,i.uv);
float accAlpha = 0;
float offsetValue = _OffsetValue;
int lev = 7;
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, -7));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, -6));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, -5));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, -4));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, -3));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, -2));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, -1));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, 0));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, 1));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, 2));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, 3));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, 4));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, 5));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, 6));
++lie;
}
for(int lie = 0 - lev; lie <= lev;)
{
accAlpha = accAlpha + getTransparent(_MainTex, i.uv + offsetValue*float2(lie, 7));
++lie;
}
fixed4 col = 1*result.a + lightCol.rgba*(1.0f - result.a);
col.a = result.a + accAlpha/(float)((2*lev+1)*(2*lev+1));
col.a = col.a*(col.a + 1);
return col;
}
unity的shader貌似不能嵌套for循環,就只能如此了,例子這里是取了每點周圍五個像素作為源色彩,求得均值作為當前像素色彩。
總結
以上是生活随笔為你收集整理的unity 发光字体_unity文本自发光效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软通22年秋季新员工入职考试
- 下一篇: Mask RcNN论文翻译