超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen(3)

简介: 超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen

第一个成功的方法是实现纯体素圆锥跟踪,整个场景在运行时是体素化的,就像经典的「Interactive Indirect Illumination Using Voxel Cone Tracing」一文中的那样实现。

栅格化的三角形
光线步进卡 (高度场)
体素圆锥追踪
光线步进卡继续与体素锥跟踪

而这种方法的主要缺点是,由于场景几何体的过度融合而导致泄漏,这种现象在跟踪粗低映射时尤其明显。

第一种降低图像泄漏的技术是,对全局距离场进行跟踪,只在靠近表面的地方进行体素采样。在采样过程中,随着采样范围扩大积累不透明度,停止追踪时,不透明度将达到1。这样总是在几何体附近进行精确采样,实现降低图形泄露的目的。

第二种技术是对网状内部进行体素化。这大大减少了在较厚的壁处的泄露,不过这样也会造成一些过度遮挡。

其他的实验包括跟踪稀疏体素位块和每面透明通道的体素。这两个实验的目的都是为了解决射线方向体素插值问题,即对于不垂直于壁面的射线,轴对齐的实心壁将变得透明。

体素位砖是将每个体素存储一个位在一个8x8x8的砖块中,以指示给定的体素是否为空。然后使用两级 DDA 算法进行光线步进。具有透明面的体素相似,但 DDA相同,并且沿着光线方向透明度不断上升。结果表明,这两种方法在表示几何体方面的效果都不如距离域,而且速度相当慢。
带有透明度的体素

最早的跟踪合并表示的方法是,对全局距离字段和使用全局每个场景卡的着色命中进行锥形跟踪。即遍历一个 BVH,找出场景中的哪些卡影响采样点,然后根据锥形足迹对每张卡的适度滑步水平进行采样。

本文放弃了这种方法,因为当初没有考虑只用它来表示远场轨迹,而是把它看作是高场光线步进的直接替代。有点讽刺的是,这种被抛弃的方法与我们两年后最终达成的解决方案最为接近。

第一个演示


到这里,已经可以产生一些相当不错的结果了:


尽管如此,还是遇到了很多图形泄漏的问题,而且在这个简单的场景中,即使在一个高端 PC GPU 上,性能也不是很理想。

为了解决泄漏问题,以处理更多的实例、在PS5上以8毫秒以下时间完成处理。这个demo堪称是真正的催化剂。

与以往的方案相比,第一个变化也是最大的变化是,用距离场跟踪取代高度场跟踪。

为了遮蔽生命点,从卡片上插入生命点的光线,因为距离场没有顶点属性,这样,未覆盖的区域只会导致能源损失,而不是泄漏。

出于同样的考虑,将体素锥形追踪改为全局距离场射线追踪。

与此同时,我们还做了很多不同的优化,并通过缓存方案对Lumen的不同部分进行了时间分流。值得注意的是,如果没有锥体追踪,我们必须更积极地去噪和缓存追踪,但这又是一个漫长而复杂的故事。

这是我们发送第一个演示后的最终结果,在PS5上一直低于8ms,包括所有共享数据结构的更新,如全局距离字段。目前的性能表现甚至更好了,比如最新demo的完成时间接近4毫秒,质量上也有明显的改进。
image.png


尾声


总之,本文对整个Lumen进行了全面重写,还有许多不同的想法没有实施。另一方面,有些东西被重新利用。就像最初我们用卡片作为追踪表示,但现在用来作为缓存网格表面的各种计算方式。和软件追踪类似,开始是我们主要的追踪方法,主要是圆锥体追踪,但最后成为一种缩小规模和支持具有大量重叠实例的、复杂重度场景的方法。

参考资料:https://knarkowicz.wordpress.com/2022/08/18/journey-to-lumen/https://advances.realtimerendering.com/s2022/index.html#Lumenhttps://www.youtube.com/channel/UC9V4KS8ggGQe_Hfeg1OQrWw

相关文章
|
3月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
152 3
|
3月前
|
开发者 图形学 Java
揭秘Unity物理引擎核心技术:从刚体动力学到关节连接,全方位教你如何在虚拟世界中重现真实物理现象——含实战代码示例与详细解析
【8月更文挑战第31天】Unity物理引擎对于游戏开发至关重要,它能够模拟真实的物理效果,如刚体运动、碰撞检测及关节连接等。通过Rigidbody和Collider组件,开发者可以轻松实现物体间的互动与碰撞。本文通过具体代码示例介绍了如何使用Unity物理引擎实现物体运动、施加力、使用关节连接以及模拟弹簧效果等功能,帮助开发者提升游戏的真实感与沉浸感。
79 1
|
3月前
|
图形学 开发者
【Unity光照艺术手册】掌握这些技巧,让你的游戏场景瞬间提升档次:从基础光源到全局光照,打造24小时不间断的视觉盛宴——如何运用代码与烘焙创造逼真光影效果全解析
【8月更文挑战第31天】在Unity中,合理的光照与阴影设置对于打造逼真环境至关重要。本文介绍Unity支持的多种光源类型,如定向光、点光源、聚光灯等,并通过具体示例展示如何使用着色器和脚本控制光照强度,模拟不同时间段的光照变化。此外,还介绍了动态和静态阴影、全局光照及光照探针等高级功能,帮助开发者创造丰富多样的光影效果,提升游戏沉浸感。
73 0
|
3月前
|
开发者 图形学 Java
Unity物理引擎深度揭秘:从刚体碰撞到软体模拟,全面解析实现复杂物理交互的技巧与秘诀,助你打造超真实游戏体验
【8月更文挑战第31天】物理模拟在游戏开发中至关重要,可让虚拟世界更真实。Unity作为强大的跨平台游戏引擎,内置物理系统,支持从刚体碰撞到布料模拟的多种功能。通过添加Rigidbody组件,可实现物体受力和碰撞;使用AddForce()施加力;通过关节(如Fixed Joint)连接刚体以模拟复杂结构。Unity还支持软体物理,如布料和绳索模拟,进一步增强场景丰富度。掌握这些技术,可大幅提升游戏的真实感和玩家体验。
115 0
|
3月前
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
194 0
|
2月前
|
图形学 开发者
透视与正交之外的奇妙视界:深入解析Unity游戏开发中的相机与视角控制艺术,探索打造沉浸式玩家体验的奥秘与技巧
【8月更文挑战第31天】在Unity中,相机不仅是玩家观察游戏世界的窗口,更是塑造氛围和引导注意力的关键工具。通过灵活运用相机系统,开发者能大幅提升游戏的艺术表现力和沉浸感。本文将探讨如何实现多种相机控制,包括第三人称跟随和第一人称视角,并提供实用代码示例。
134 0
|
2月前
|
图形学 开发者
【独家揭秘】Unity游戏开发秘籍:从基础到进阶,掌握材质与纹理的艺术,打造超现实游戏视效的全过程剖析——案例教你如何让每一面墙都会“说话”
【8月更文挑战第31天】Unity 是全球领先的跨平台游戏开发引擎,以其高效性能和丰富的工具集著称,尤其在提升游戏视觉效果方面表现突出。本文通过具体案例分析,介绍如何利用 Unity 中的材质与纹理技术打造逼真且具艺术感的游戏世界。材质定义物体表面属性,如颜色、光滑度等;纹理则用于模拟真实细节。结合使用两者可显著增强场景真实感。以 FPS 游戏为例,通过调整材质参数和编写脚本动态改变属性,可实现自然视觉效果。此外,Unity 还提供了多种高级技术和优化方法供开发者探索。
53 0
|
4月前
|
图形学 开发者
【实战优化】U3D物理引擎碰撞检测精调秘籍:告别穿透与粘滞,重塑真实游戏体验
【7月更文第12天】在Unity3D游戏开发中,精准的碰撞检测是营造沉浸式游戏体验的关键。然而,开发者常面临游戏角色或物体间的碰撞反应不自然,如穿透、粘滞现象,这些问题不仅破坏了游戏的真实感,还严重影响了玩家的体验。本文将深入探讨U3D物理引擎中碰撞检测不准确的根源,并提出一系列行之有效的调优策略,辅以代码实例,帮助开发者打造流畅自然的物理互动。
258 1
|
移动开发 前端开发 JavaScript
分享8个前端可以制作360度WebVr全景视图框架
分享8个前端可以制作360度WebVr全景视图框架
1781 0
分享8个前端可以制作360度WebVr全景视图框架
|
人工智能 测试技术
「化腐朽为神奇」:Stability AI又出新工具,草图瞬间精致,不同风格随心选
「化腐朽为神奇」:Stability AI又出新工具,草图瞬间精致,不同风格随心选
111 0