将游戏投影到曲面屏幕上时出现问题 - 屏幕两侧的物体变形

问题描述 投票:0回答:1

如何调整项目在曲面上的投影而不导致图像失真?

我一直在构建一款虚拟现实游戏,它将投影到曲面屏幕上,该屏幕大致呈半月形。现在,当我在平面屏幕上运行我的游戏时,它运行得很好。然而,当我将计算机连接到激光投影仪(德州仪器 DLP3010 投影仪)并投影到一些设置为半月形的背投材料上时,位于视场大部分侧面的物体游戏变得扭曲/拉伸。

纯平屏幕: Image as seen on flat screen

曲面屏: Image as seen on curved screen

我尝试过调整Camera3D的FOV以及其他属性,我尝试过使用基于询问ChatGPT的子视口,但到目前为止,我在以避免更多扭曲的方式渲染投影方面还没有取得任何成功视野中的“外围”物体。如果您有任何我可以遵循的建议,我将不胜感激。我的项目可以在 GitHub 上找到,如果克隆存储库并将其导入到 Godot(我使用的是 4.3 .NET 版本),它应该可以工作。

godot projection virtual-reality curve distortion
1个回答
0
投票

这是 3D 场景通常渲染方式的一个基本问题。距离相机焦点较远的图像部分会越来越扭曲,并远离中心呈放射状拉伸。这种固有的失真对于平面屏幕来说是很好的,因为用于创建图像的数学模型假设场景被投影到平面上。

处理非平面屏幕时,您需要用相反的失真来抵消这种失真:桶形失真

桶形畸变实质上扩大了图像中心附近的区域或缩小了图像边缘的区域。无论哪种方式,它都会以径向对称的方式拉伸图像,这与透视投影引入失真的方式相反。您可以在这里阅读有关桶形畸变的更多信息:https://www.decarpentier.nl/lens- Distorion

桶形失真可以通过以下两种方式之一实现:作为后处理着色器或作为应用于每个网格的顶点着色器。

顶点着色器方法的计算成本很高,而且我所知道的任何东西都没有使用它,所以我无法帮助你。然而,它可以让您虚拟地将相机 FOV 扩展到 180° 以上,这对您来说可能很有趣。

后处理着色器方法的计算成本相对较低,但会在屏幕周围引入黑色弯曲(甚至圆形)边框。通过放大图像可以解决这个问题,但会导致图像中心模糊。最后一个问题可以通过以更大的分辨率渲染来解决。

这里是 Godot 的桶形畸变的实现: https://godotshaders.com/shader/2d-radial- Distortion-fisheye-barrel/ 这个具体实现只是向内收缩图像,在边缘留下一个黑色圆圈。屏幕。您可能想要放大图像以删除它。上述博客文章包含大量数学和着色器代码,因此您在修改着色器时可以随时参考。

最后要提到的是,您的设置特别具有非常宽的屏幕,因此最好仅沿 Y 轴应用失真以减少对性能的影响,但我将把它留给您进行试验。


旁白:

  1. 我能想到的唯一可以让你玩桶形失真的游戏是《Teardown》。人们普遍不喜欢它,考虑到大多数人都在平面屏幕上玩游戏并且已经习惯了边缘扭曲,这是可以理解的。

  2. 2014 年 Oculus Rift 发售时,每个视频和直播都显示左眼和右眼图像。这很难看,但揭示了一个有趣的细节:每个图像都因桶形失真而缩小!扭曲的强度约为 50%,因此屏幕的外边缘不是圆形。

© www.soinside.com 2019 - 2024. All rights reserved.