用Unity做简易的图像处理软件(总结篇)

项目分享:https://github.com/Claymoreno1/RenderTexture

  1. 基础知识:
    二维向量的使用,旋转矩阵、空间转换矩阵及其逆矩阵的使用,灰度公式、关于OpenGL中UV坐标的基本用法,饱和度公式、笛卡尔坐标。二维向量的使用,旋转矩阵、空间转换矩阵及其逆矩阵的使用,灰度公式、关于OpenGL中UV坐标的基本用法,饱和度公式、笛卡尔坐标。
    2.程序总体结构:

用Unity做简易的图像处理软件(总结篇)_第1张图片
3. transmit类的结构
用Unity做简易的图像处理软件(总结篇)_第2张图片
4.Gamectrl类比较简单主要包含缩放、拖拽、与裁剪操作。
4. Shader部分
Shader是对RenderTexture进行操作的部分,目前只有4个shader:
Tailor(裁剪)、Rotate(旋转)、Overturn(翻转)、BSC(亮度、饱和度、对比度、灰度图转换、gamma)。关于为什么BSC.shader中集成了很多功能的问题,因为这些功能都是相对的。
5. 在这个结构下,可以很容易的添加新的功能,大概步骤如下:
(1) 写一个shader。
(2) 利用PostEffectsBase类,添加新的shader和material。
(3) 添加一个控件相应函数,调用相应的实现函数。
(4) 添加一个实现函数,把RT传到(1)中的material,拿回RT,放到image中。
6. 关于性能问题的解决
CPU读取texture
把texture转换为RenderTexture
把处理后的RenderTexture赋值给image
之后的操作都是直接对RenderTexture进行处理,换句话说就是,从GPU那边没拿回来,因为把RenderTexture转换为texture太慢了,所以一般情况下只会在读取和存贮图片的时候感到卡顿,因为这几个shader的运算并不复杂,一张5000*5000的大图,在我的低端本上一秒可以处理83帧左右。
7. 心得体会
要时刻想着优化,后期优化费力不讨好。

你可能感兴趣的:(Unity)