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

光场渲染及其深度限制

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

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

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

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

自适应焦距

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

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

分层渲染

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

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

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

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

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

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

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

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

相关推荐
玖玥拾4 小时前
Unity 3D 基础(一)Unity基础架构、物理系统、视觉渲染、空间变换与对象查询
笔记·游戏·3d·unity·游戏引擎
玖玥拾2 天前
C# 语言进阶(十四)Unity UI界面开发 + 网络消息联动
服务器·开发语言·网络·ui·unity·c#·游戏引擎
野区捕龙为宠2 天前
Unity 持久化数据
unity·游戏引擎·lucene
郝学胜-神的一滴2 天前
[简化版 GAMES 101] 计算机图形学 17:纹理技术从基础原理到多场景实战应用
c++·unity·游戏引擎·图形渲染·three.js·opengl·unreal
_ZHOURUI_H_3 天前
MyFramework: 同样是 Unity 游戏开发框架,和 HTFramework 的设计取向有什么不同?(下)
unity·游戏引擎·游戏开发·游戏ui·手游开发
小贺儿开发4 天前
Unity 知识库智能问答系统(RAG)
人工智能·unity·ai·大模型·智能问答·知识库·互动
丁小未4 天前
基于MVVM框架的XUUI 扩展的UI管理系统教程
unity·mvvm·ui框架·xuui·ui管理器
丁小未5 天前
基于MVVM框架的XUUI HelloWorld 新手教程
unity·性能优化·c#·游戏引擎
丁小未5 天前
基于MVVM框架的XUUI MoreComplex案例
unity·c#