Unity Graphics.CopyTexture读取不可读法线贴图
未开启读写的贴图,unity 不会生成cpu可见的数据副本,在不修改导入设置的前提下只能借助Graphics.CopyTexture或者Graphics.Blit (需要等待GPU绘制后再获取)来拿。
如果只想简单获取贴图数据直接Graphics.CopyTexture就可以,TextureType 为Default 的贴图是可以直接获取的。而对于法线贴图,拿到的贴图是很奇怪的颜色(蓝紫色=》橙红色),即 r 增加, b 减少的奇怪现象。
![在这里插入图片描述](https://img-blog.csdnimg.cn/de8339a15d39431c9193d660686c61f7.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c6c28483ca8a4e81b698d4710dd3b100.png)
猜测是unity对法线贴图做了某种压缩,看看 unity rendering 包的 法线解压代码,可以看到对r 进行了一次乘a的操作
![在这里插入图片描述](https://img-blog.csdnimg.cn/04cb8a82278948ac97ed7c15aa6035b6.png)
所以,gpu的贴图数据其实是pack后的数据,那么解决方法就很简单了,对数据进行unpack即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/dadb39ae8bea4f9b9bfbedb5ce87bdbe.png)