如何优化大景深场景光场渲染背景模糊问题

光场渲染及其深度限制

光场渲染的目的是为裸眼3D显示技术提供显示内容,为了达到3D效果,我们需要渲染不同视角的图像经过交织编码后呈现出裸眼3D效果。

为了在可观测范围内处处都能看到3D效果,我们就需要提前渲染可观测内各个视角下的图像,这样我们才能在站在不同角度时可以看到对应视角的立体画面。

这样的渲染方式会引入焦距的问题,但其实这也是裸眼3D光场显示技术本身的局限。在相机的视锥体内,只有某一段范围内的物体在屏幕上是清晰的,随着场景内物体逐渐远离这个清晰的范围,它们在屏幕上也会越来越模糊,就像逐渐失焦的过程。

很遗憾的是这个清晰的范围一般不会很大,通常情况是稍大一点的模型都会超出这个范围,更别说大型游戏场景了。导致的结果就是背景模糊的没法看,所以很长一段时间光场裸眼3D显示只做小模型简单场景。

自适应焦距

我们可以动态调整这个清晰范围的位置,自适应焦距能在动态场景中一定程度上缓解景深问题,特别是相机会动态移动的情况,比如FPS游戏等。

自适应焦距可以让相机正在观察的物体是清晰的,这样可以始终保证我们关注的目标主体能清晰显示,即便相机在场景中漫游,也能获得相对好上那么一点的观感,但是对于远处的背景物体任然无能为力。

分层渲染

要让背景物体变得清晰,我们就要知道背景物体模糊的原因。在光场渲染中,零屏幕上的物体是最清晰的,离零平面越远的物体越模糊。

在光场渲染的拍摄过程中,我们是站在不同角度去拍摄同一个物体。由于相机的角度不同,因此这个物体在不同视角拍摄的画面中,在图片中的位置也是不同的,我们把相邻视点同一个物体在画面中的位置的距离称为偏离度。

零平面上的物体偏离度为零,离零屏幕越远的物体,偏离度越大,而偏离度越大,也就越模糊。所以我们只需要想办法纠正背景物体的偏离度就可以改善模糊,unity的分层渲染技术为我们提供了这样一个机会。

改变偏离度除了调整零平面位置,还可以调整相机间距,也就是可视角度。我们可以使用两个相机来分别渲染前景物体和背景物体,前景物体使用正常可视角渲染,背景物体用稍小的可视角渲染。

我们用立方体和球搭建一个简单的场景,立方体为前景,球为背景。

分别用正常渲染和分层渲染来对比下渲染结果。下图左边为正常渲染,右边为分层渲染,背景渲染角度为正常渲染的12\frac{1}{2}21。

可以看到背景分离度明显减少了,在光场屏上查看显示效果,分层渲染的背景也要比正常渲染的背景更加清晰。

虽然分层渲染能缓解大景深背景模糊问题,但也不是完美的。由于渲染背景的视角变小,背景的立体效果也会打折,这是清晰的代价。其次分层渲染只适合能明确区分前后景的情况,这种情况要么是静态场景,或者横板闯关游戏。对于相机漫游或动态场景,随着相机的运动,前后景可能随时都在发生变化,这会导致显示效果不佳,甚至是错误。这个问题没有通用的解,分层渲染只是提供了一种优化大景深背景模糊问题方式,但是它会带来场景如何分层,如何动态分层等问题。如果这些问题复杂到难以解决,那么分层渲染可能也不是那个合适的解。

相关推荐
拾忆丶夜11 小时前
unity webgl 阴影条纹问题
unity·游戏引擎·webgl
tealcwu21 小时前
【Unity实战】Unity IAP 4.x 在 Windows Store (UWP) 平台上的实现指南
windows·unity·游戏引擎
玉夏21 小时前
【Shader基础】CG/HLSL 基础语法
unity·shader
垂葛酒肝汤1 天前
Unity的UGUI的坐标
unity
winlife_1 天前
让 AI 写敌人状态机,并用脚本化场景验证状态转换正确:funplay-unity-mcp 实战
人工智能·unity·游戏引擎·ai编程·状态机·mcp
tealcwu1 天前
【Unity实战】Unity IAP 5.3 中实现 Windows Custom Store 实战教程
windows·unity·游戏引擎
unityのkiven1 天前
工作分享1(26.5.27):基于栈实现全局返回逻辑通用架构设计(适配异步 + 确认弹窗)
游戏·unity·c#·客户端架构
winlife_2 天前
在 Unity 里用 AI 做游戏:funplay-unity-mcp 从安装到第一次让 AI 改场景
人工智能·游戏·unity·ai编程·claude·mcp
qq_205279052 天前
Unity 运行时候会时不时卡顿一下,哪怕是空场景
unity·游戏引擎