1

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

在绘画时,我在这个渲染凸轮前面的正确位置创建了一个 2d 精灵。这工作正常。现在,由于 Unity 不能顺利运行很多精灵,我尝试通过使用Texture2D.ReadPixels()命令将精灵组合到基础图像中来减少负载。然后将此新纹理设置为新的基础纹理。冲洗并重复。

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

如您所见,SteamVR 与仅统一版本相比存在几个问题:

  1. Alpha 通道被检测为黑色,没有褪色
  2. 整体分辨率变得..不稳定?(看数字,它们变得越来越阻塞)
  3. 块 1、5 和 6 的颜色是错误的

我为渲染纹理、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);

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

托马斯

4

0 回答 0