Unity特效图片优化

开发的游戏中有如下特效效果,展示的是一面墙的刷漆效果

刷漆效果

最开始开发的时候是使用如下的图片资源,在检视资源使用时注意到有严重资源浪费:

资源图片(可以把它看成30张图片)

着色器中是通过随时间调整UV值达到动画效果。我的优化思路是把这30张图片压成一张图片,通过让透明通道的值成阶梯(30个阶梯)。然后在着色器中通过透明通道的裁剪达到同样的刷漆效果。先用工具生成如下的图片资源(项目中有20个左右这样的资源统一处理)

透明度值从左上角到右下依次减小

着色器中的关键代码如下:


v2f vert(appdata_t IN)

{

v2f OUT;

UNITY_SETUP_INSTANCE_ID(IN);

UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);

OUT.vertex = UnityFlipSprite(IN.vertex, _Flip);

OUT.vertex = UnityObjectToClipPos(OUT.vertex);

OUT.texcoord.xy = IN.texcoord;

OUT.color = IN.color * _Color * _RendererColor;

LIGHT2D_TRANSFORM_TEX(OUT, OUT.vertex);

return OUT;

}

fixed4 frag(v2f IN) : SV_Target

{

fixed4 c = tex2D(_MainTex, IN.texcoord.xy);

c.a = step(1, c.a + _CurIndex/_MaxIndex);// _MaxIndex是总帧数(这个例子中是30) _CurIndex是[0,30)。定时修改这个值就有动画效果

c *= IN.color;

float3 light = SceneObjectLight2DColor(LIGHT2D_UV(IN));

c.rgb *= light * _Intensity

return c;

}


这样的优势是图片资源大小变小为原来的1/30。非常可观

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容