Godot 4.0中的基于有向距离场SDF(Signed Distance Field)的实时全局光照技术

原文地址 Godot官网 《Godot 4.0 gets SDF based real-time global illumination》 作者 Juan Linietsky 6月28日

在这里插入图片描述

Godot 4.0的开发正在稳步进行中,一种新的全场景全局光照技术(full-scene global illumination)已经加入到开发主分支。

SDFGI

SDFGI即有向距离场全局光照(Signed Distance Field Global Illumination)。这种技术将大量依赖有向距离场(一种基于欧几里德距离的网格有向距离函数表示法)去创建光照。

在这里插入图片描述

虽然该功能还没有开发完成,并且未来还会有很多质量和性能的提升,不过现在看起来已经足够满足一般需求了。

非常感谢Matias Goldberg提供的巨大帮助,感谢我们的赞助者持续提供的赞助,感谢Tim Sweeney(Epic Games的创始人)和Epic Games对我们的信任,并通过Epic Megagrant给予我们经济支持。这项新技术的开发完全基于MIT许可证,所以每个人可以将其使用在自己的引擎或游戏中。

它能做什么

SDFGI近似于动态实时光照贴图(dynamic real-time lightmap),但它不需要展UV也不需要使用其贴图。当开启SDFGI它会自动工作并对静态物体生成全局光照。它不需要光线追踪 。它可以运行在绝大多数最新的(以及几年前的)GPU上,甚至几年前的中档廉价CPU(SDFGI的开发和测试使用Geforce 1060,一直保持着60fps的帧率)。

光的更新是实时的,这意味着任何光照条件的变化都会导致结果的瞬间变化。动态对象只支持接受环境光,但他们不会贡献光照。一定程度的支持已在计划中,但是不会马上进行。

SDFGI也支持反射,无论是漫反射还是镜面反射,所以全PBR场景将不成问题。在下图中,你可以在棋盘格糙度图中看到二者:

在这里插入图片描述
SDFGI也支持自发光,所以带有自发光通道的材质也将会全面支持并提供场景光照。

在这里插入图片描述
SDFGI通常是不漏光的(leak free),这点和主流 VCT技术不同。对于每个串联(Cascade),只要其的厚度大于一个体素,光就不会穿透。

如何使用

先确认你的模型已经标记为Static Bake,然后在Environment(译者注:添加一个WorldEnvironment节点)中开启SDFGI,揍这么滴简单!

下面是一些可选项用于设置SDFGI:

  • 单元格大小(Cell Size):显示最邻近的串联的单元格大小。每个相邻串联会复制这个大小,它允许非常大的支持GI的视野距离。
  • 多次反弹(Multiple Bounces):开启反馈循环,可以模式光的多次反弹。
  • 环境光遮蔽(Occlusion):生成探头间的遮蔽信息,以避免墙之间的漏光。遮蔽一般来说工作良好,但你必须保证墙的厚度厚于一个体素。
  • 读取天空光(Read Skylight):允许天空贡献光照。
  • Y Scale:用水平细节补偿水平范围。在室内场景中非常有用。

还有一些新的调试模式可将SDFGI的工作过程可视化:

  • SDFGI 串联(SDFGI Cascades):将世界以SDF形式显示,它可以帮助理解什么是体素大小,这样你可以调整几何体以达到最适状态。
  • SDFGI 探头(SDFGI Probes):显示探头的位置(目前仅在串联附近),它可以帮助理解,几何体从何处读取光照。如果一个区域探头数量过少,可能会得到错误的环境光遮蔽结果。

它是如何工作的

即将写一篇专题介绍,敬请期待。

未来

Godot 4.0 不断进步,我们一定会开发出一个牛逼的游戏引擎,并且你依然会自由使用它,如同你自家的技术。如果你还不是我们的赞助人,请考虑赞助我们以帮助提高开发速度!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章