我目前正在一个项目中,正在为3d对象着色。该代码类似于here。基本上,我使用渲染为rendertexture的正交相机,该材质在我的材质中用作UV图像。一开始,它只能“看到”带有基础图像的平面。
在绘画时,我在此渲染凸轮前面的正确位置创建了2d精灵。这很好。
现在,由于Unity在使用大量精灵时无法顺利运行,因此我尝试使用Texture2D.ReadPixels()
命令将这些精灵组合到基本映像中来减少负载。然后将此新纹理设置为新的基础纹理。冲洗并重复。
如果我使用内置的Unity相机设置,则此方法可以完美工作。由于该项目旨在用于VR,因此我将所有内容都移植到了SteamVR项目中。 运行时渲染也很好,只有save-as-png纹理函数开始中断。我包含了指向不同图像的链接。第一个是Base Image,第二个是用“ Unity only”保存的,最后是用SteamVR纹理保存的。我只将绿色圆圈画为精灵。
如您所见,与单一版本相比,SteamVR有几个问题:
我尝试了renderTexture,UV纹理(RGBA,ARGB,RGB)的不同格式。除了导入SteamVR,其他都没有改变。我想念什么?
渲染代码如下:
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
plane.GetComponent<MeshRenderer>().material.mainTexture = tex;
保存
var bytes = tex.EncodeToPNG();
System.IO.File.WriteAllBytes(fullPath + fileName, bytes);
如有必要,我可以上传整个项目。 谢谢您的帮助
托马斯