Unity中如何实现Texture

这篇文章主要介绍Unity中如何实现Texture,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联主营兴宾网站建设的网络公司,主营网站建设方案,app软件定制开发,兴宾h5小程序设计搭建,兴宾网站营销推广欢迎兴宾等地区企业咨询

了解Texture2D

Unity中如何实现Texture

如上图,Texture2D是一张二维图片
是由一颗一颗像素组成的。
通常是由低到高,由左到右排列的。
如果想要通过代码操作像素,我们必须要知道像素的坐标位置,现在我们来验证下是否真的如此排列。

Unity中如何实现Texture


我们通过简短的代码,NEW一个图片,并且根据X,Y轴对应R,G通道,逐像素赋值。我们将得到一张红绿渐变图,如下。

Unity中如何实现Texture


根据图片的颜色渐变过程,我们可以确信,像素排列顺序是和我们预测的一样。

  • TextureFormat是什么


TextureFormat为贴图的类型,ARGB32位,代表有ARGB4个通道,每个通道的颜色有8位,对应的还有A8,RGB24等。任何图片从本质上就是这样的。
而常见的JPG,PNG等是操作系统采用的压缩/非压缩读取格式,ETC/DDS为图形接口读取的压缩格式。

  • 赋值完后为什么要Apply


因为在贴图更改像素时并不是直接对现在的内存进行更改,而是在另外一个内存空间中更改,这时候GPU还会实时读取旧的贴图位置。
当Apply后,更改后的内容才会应用到现在的内存中。

  • 所有的图片的像素排列顺序都一样吗?


事实上OpenGL和DX在UV方向和取值上是不同的,在此我们应该感谢Unity3D为我们做的那些事,让一切变得简单。

制作一个简单的笔刷

最终效果

Unity中如何实现Texture

实现轮廓

Unity中如何实现Texture

我们对上面的代码稍作修改。
我们在第一个红线引入一张贴图,第二个红线,将像素乘以这张贴图对应位置的alpha通道。
在色阶上每个通道是8位,0-255,但在计算时为浮点数。0~1。
所以如果alpha为0,任何颜色乘以他,结果都为0。
通过以上代码,我们实现如下效果:

Unity中如何实现Texture

这张贴图是张Alpha通道为0和1的通道,1为有颜色,0自然就没有颜色。也可以通过0-1之间的值实现渐变。
同样的,因为只用到一个通道,我们可以将它压缩为一张Alpha8的单通道8位贴图,来节省空间。

实现纹理

Unity中如何实现Texture

我们再次对上述代码进行更改,同样引入一张贴图来做纹理。
这次我们进行颜色相乘,因为颜色为浮点值,所以他们乘后的结果不会大于1,也不会小于0。
而重载运算符,在*的过程中,帮我们把RGBA通道一一对应的运算。
这里我们用到了相乘,很多人在用图像软件时,会遇到,相乘,相加,相除,相减等词汇。
一开始会很纳闷,为什么要这样命名。现在我们知道了,他们是在像素之间的数学运算关系。

Unity中如何实现Texture

以上是“Unity中如何实现Texture”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


本文名称:Unity中如何实现Texture
文章网址:http://scyanting.com/article/jipgjh.html