SteamVR的RenderTexture与标准Unity相机不同

时间:2018-11-16 10:08:13

标签: c# unity3d steamvr

我目前正在一个项目中,正在为3d对象着色。该代码类似于here。基本上,我使用渲染为rendertexture的正交相机,该材质在我的材质中用作UV图像。一开始,它只能“看到”带有基础图像的平面。

在绘画时,我在此渲染凸轮前面的正确位置创建了2d精灵。这很好。 现在,由于Unity在使用大量精灵时无法顺利运行,因此我尝试使用Texture2D.ReadPixels()命令将这些精灵组合到基本映像中来减少负载。然后将此新纹理设置为新的基础纹理。冲洗并重复。

如果我使用内置的Unity相机设置,则此方法可以完美工作。由于该项目旨在用于VR,因此我将所有内容都移植到了SteamVR项目中。 运行时渲染也很好,只有save-as-png纹理函数开始中断。我包含了指向不同图像的链接。第一个是Base Image,第二个是用“ Unity only”保存的,最后是用SteamVR纹理保存的。我只将绿色圆圈画为精灵。

如您所见,与单一版本相比,SteamVR有几个问题:

  1. 检测到Alpha通道为黑色,没有褪色
  2. 总体分辨率变得不稳定。 (查看数字,它们变得越来越封闭)
  3. 第1、5和6块的颜色错误

我尝试了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);

如有必要,我可以上传整个项目。 谢谢您的帮助

托马斯

0 个答案:

没有答案