100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > unity 发光字体_unity文本自发光效果

unity 发光字体_unity文本自发光效果

时间:2019-06-23 11:00:52

相关推荐

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循环,就只能如此了,例子这里是取了每点周围五个像素作为源色彩,求得均值作为当前像素色彩。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。