Unity-Dither4444的研究
来源:互联网 发布:linux 查看环境路径 编辑:程序博客网 时间:2024/06/08 07:28
Dither-16bit的抖动优化
使用小插件, keijiro 的 github:unity-dither4444
将需要优化的大图后缀改为.Dither.png。
图片资源的 [硬盘/内存] 大小和图片设置的格式有关
实测
IOS中质量堪比trueColor,在pvrtc质量较差的情况下使用
Android中与ETC2差距不大,但更消耗内存
结论:仅IOS可用
优化
对IOS和Android区别对待,代码如下
using UnityEngine;using UnityEditor;using System.Collections;class TextureModifier : AssetPostprocessor{ void OnPreprocessTexture() { if (assetPath.EndsWith ("Dither.png")) { var importer = (assetImporter as TextureImporter); importer.textureFormat = TextureImporterFormat.RGBA32; importer.SetPlatformTextureSettings (BuildTarget.Android.ToString(), 2048, TextureImporterFormat.ETC2_RGBA8); } } void OnPostprocessTexture (Texture2D texture) { if (!assetPath.EndsWith ("Dither.png")) { return; } if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android) { //Android时弃用 return; } var texw = texture.width; var texh = texture.height; var pixels = texture.GetPixels (); var offs = 0; var k1Per15 = 1.0f / 15.0f; var k1Per16 = 1.0f / 16.0f; var k3Per16 = 3.0f / 16.0f; var k5Per16 = 5.0f / 16.0f; var k7Per16 = 7.0f / 16.0f; for (var y = 0; y < texh; y++) { for (var x = 0; x < texw; x++) { float a = pixels [offs].a; float r = pixels [offs].r; float g = pixels [offs].g; float b = pixels [offs].b; var a2 = Mathf.Clamp01 (Mathf.Floor (a * 16) * k1Per15); var r2 = Mathf.Clamp01 (Mathf.Floor (r * 16) * k1Per15); var g2 = Mathf.Clamp01 (Mathf.Floor (g * 16) * k1Per15); var b2 = Mathf.Clamp01 (Mathf.Floor (b * 16) * k1Per15); var ae = a - a2; var re = r - r2; var ge = g - g2; var be = b - b2; pixels [offs].a = a2; pixels [offs].r = r2; pixels [offs].g = g2; pixels [offs].b = b2; var n1 = offs + 1; var n2 = offs + texw - 1; var n3 = offs + texw; var n4 = offs + texw + 1; if (x < texw - 1) { pixels [n1].a += ae * k7Per16; pixels [n1].r += re * k7Per16; pixels [n1].g += ge * k7Per16; pixels [n1].b += be * k7Per16; } if (y < texh - 1) { pixels [n3].a += ae * k5Per16; pixels [n3].r += re * k5Per16; pixels [n3].g += ge * k5Per16; pixels [n3].b += be * k5Per16; if (x > 0) { pixels [n2].a += ae * k3Per16; pixels [n2].r += re * k3Per16; pixels [n2].g += ge * k3Per16; pixels [n2].b += be * k3Per16; } if (x < texw - 1) { pixels [n4].a += ae * k1Per16; pixels [n4].r += re * k1Per16; pixels [n4].g += ge * k1Per16; pixels [n4].b += be * k1Per16; } } offs++; } } texture.SetPixels (pixels); EditorUtility.CompressTexture (texture, TextureFormat.RGBA4444, TextureCompressionQuality.Best); }}
0 0
- Unity-Dither4444的研究
- 【UNITY填坑日记】unity图片资源优化神器dither4444
- 关于Unity资源异步加载的研究
- Unity IOS下的热更新研究
- Unity-Loom的多线程研究及优化
- unity中物体尺寸的研究
- Unity粒子系统研究
- Unity无缝地图研究
- Unity多屏研究
- Unity Web前端研究
- Unity Web前端研究
- unity 手机游戏研究
- unity font研究小结
- Unity无缝地图研究
- Unity多屏研究
- unity particleSystem bug研究
- Unity之Flux研究
- Unity切换场景研究
- 安卓基础-------20160804
- 在PHP项目中使用Standford Moss
- 六度分离(HDU1869)
- IPMI协议
- 基于vlc的unity3d vr视频播放器开发,简述
- Unity-Dither4444的研究
- 自定义注解之编译时注解(RetentionPolicy.CLASS)(一)
- Perl语言入门(05 文件)
- javascript进阶(五)— — Promise初探
- iOS常用宏定义大全
- <python> 拿取命令列的參數值
- JS中Null与Undefined的区别
- POJ 3268Silver Cow Party dijkstra();
- 内部类