Google cardboard for unity 在 android 设备上禁用 AA

Google cardboard for unity disables AA on android device

我正在使用 google 纸板 SDK 为 android 开发简单的 VR 应用程序以实现统一。我正在使用 unity 5(免费)和最新版本的 unity 纸板包(0.4.9),我正在测试 sony xperia z3 compact(lolipop)和 samsung galaxy note 3(kitkat)

我遇到的问题是,我无法打开抗锯齿功能,或者更确切地说,google sdk 包似乎禁用了它。我不介意有一点锯齿状的角,但问题是当这些角足够远时它们会闪烁。我尝试将纹理分开(因为闪烁可能是重叠的结果),但问题仍然存在。

这不可能是 android 的 unity 导出问题,因为如果我使用 unity 提供的库存相机构建相同的项目(google cardboard unity 包中提供的测试示例),代替 Cardboard 主要游戏对象),AA 正在运行。没有比这更简单的了,一旦立方体和一个摄像头...我尝试在播放器设置中打开和关闭 32 位显示缓冲区选项,尝试在 unity 中强制打开 GL ES 2.0 和其他各种 tick/untick 复选框在网络上找到的提示,但没有成功。

所以我的问题是,是否还有其他人遇到同样的问题。以及如何修复它?

希望我的问题和问题描述够详细。

干杯

Cardboard.cs class 持有一个 RenderTexture,这是相机渲染的对象,然后它被重新渲染到 phone 屏幕,并对镜头进行畸变校正。这会绕过 Unity 对屏幕的正常渲染,因此项目的 AA 设置不会有任何影响。

要查看 Unity 中的 AA 设置会产生什么影响,您可以做几件不同的事情:

  1. 关闭Cardboard.SDK.nativeDistortionCorrection,让Unity直接绘制到屏幕上,或者
  2. 编辑 Cardboard.CreateStereoScreen() 并更改分配在那里的 RenderTexture 的设置。

但是,用于失真的本机代码重新渲染不在帧缓冲区中使用抗锯齿,因此我不确定您在 #2 中会看到多少效果。无论如何都会有性能损失。

关闭失真校正解决了这个问题。然后,您可以将 Unity 项目抗锯齿设置设置为 4x 或 8x。现在看起来很棒 - 在 iPhone 6+.

上观看时不再出现锯齿

Unity 5 运行 Google Cardboard SDK v0.5 --

要关闭失真校正: 转到层次结构 |纸板Main |在 Inspector 中取消选中 Distortion Correction

要在 Unity 中启用 4x 或 8x 抗锯齿: 去编辑 |项目设置 |质量 |在 Inspector 中将 Anti Aliasing 设置为 4x 或 8x Multi Sampling。

如果您不想关闭失真校正,您需要将纹理深度从 16 位更改为 32 位,并将纹理格式更改为 ARGB32。为此,请转到文件 BaseVRDevice.cs,然后找到 CreateStereoScreen 函数并将其更改为

public virtual RenderTexture CreateStereoScreen() {
    Debug.Log("Creating new default cardboard screen texture.");
    return new RenderTexture(Screen.width, Screen.height,32, RenderTextureFormat.ARGB32);
  }

我听从了 serg hov 的建议,但是即使应用了该修复程序,AA 也无法处理失真。

关闭失真没有意义,所以我想知道同时使用失真和 AA 的解决方案是什么。它适用于 Gear VR,所以必须有一种方法让它适用于 Cardboard VR。