全局遮罩_基础渲染系列(十八)——实时光全局光照、探针体积、LOD组

本文重点:

支持实时光全局光照

自发光对全局光照的贡献动画化

和LPPVs一起生效(light probe proxy volumes)

使用LOD组和全局光照相结合

不同级别的LOD之间淡入淡出

这是关于渲染的系列教程的第18部分。第17部分中总结了烘焙的全局照明之后,我们将继续支持实时GI。之后,我们还将支持光探针代理体积(LPPVs)和LOD组的淡入淡出。

从现在开始,本教程系列使用Unity 2017.1.0f3制作的。它不适用于旧版本,因为我们最终会使用新的着色器功能。

       208003e3e81bb794d280c917f3e55267.png      

(静态LOD组和实时GI的组合)

1 实时全局光照

得益于光探针的原理,烘焙光对于静态几何体非常友好,对于动态几何体也非常适用。但是,它不能处理动态光。混合模式下的光源可以进行一些实时调整,但是太多的物体因为烘焙的间接光源,需要保持不变是显而易见的。因此,当你有户外场景时,太阳必须保持不变。它不能像现实生活中那样穿越天空,因为那样需要逐渐改变GI。

为了使间接照明能够与移动的太阳等物体一起工作,Unity使用Enlighten系统可以计算实时全局照明。除了在运行时计算光照贴图和探针之外,它的工作方式类似于烘焙间接照明。

找出间接光需要了解光如何在静态表面之间反射。问题是哪些表面可能会受到其他表面的影响,以及受到何种程度的影响。弄清这些关系是很复杂的工作,不能实时完成。因此,该数据由编辑器处理并存储以供运行时使用。然后,Enlighten使用它来计算实时光照贴图和探针数据。即使这样,它也只适用于低分辨率的光照贴图。

1.1 开启实时全局光照

可以独立于烘焙照明而启用实时全局照明。可以同时都没有,任意一个或两个都处于活动状态。通过“Lighting”窗口的“Realtime Lighting”部分中的复选框启用该功能。

       1be3b90b6ed6845b963d2cb9e58a4b01.png      

(实时和烘焙的GI都启用)

要查看实时GI的实际效果,请将测试场景中的主光源模式设置为实时。由于我们没有其他光源,因此即使已启用,它也可以有效地关闭烘焙光源。

       119dc2589696a44fda3227ec5aaaea23.png      

(主光源设置为实时)

确保场景中的所有对象都使用我们的白色材质。与上次一样,这些球都是动态的,其他所有都是静态几何体。

       e38e0f88bb50d857d899d53b0e1f2ecd.png      

(只有动态物体接受实时GI)

事实证明,只有动态对象才能从实时GI中受益。静态对象变暗了。那是因为光探针会自动包含实时GI。静态对象必须采样实时光照贴图,该实时光照贴图与烘焙的光照贴图不同。我们的着色器尚未执行此操作。

1.2 烘焙实时GI

在编辑模式下,Unity已经生成了实时光照贴图,因此你始终可以看到实时GI贡献。在编辑和播放模式之间切换时,这些贴图不会保留,但最终会保持不变。你可以通过“Lighting”窗口的“Object maps”选项卡检查实时光照贴图,并选择静态贴图对象。选择“Realtime Intensity”可视化以查看实时光照贴图数据。

       bc95d0c7b0fccf97da3466e35c499516.png      

(实时光照贴图,已选择顶部)

尽管实时光照贴图已经烘焙,并且可能看起来正确,但是我们的meta pass实际上使用了错误的坐标。实时GI具有自己的光照贴图坐标,最终可能与静态光照贴图的坐标不同。Unity根据光照贴图和对象设置自动生成这些坐标。它们存储在第三个网格UV通道中。因此,将此数据添加到“My Lightmapping”中的VertexData。

       ea0554927472b0cd6a1318448132c244.png      

现在,MyLightmappingVertexProgram必须使用第二或第三UV集,以及静态或动态光照贴图的比例和偏移。可以依靠UnityMetaVertexPosition函数来使用正确的数据。

       dd367bd1e4b263f0dd452098fed65700.png      

UnityMetaVertexPosition是什么样的?

除了使用通过unity_MetaVertexControl提供的标志来确定要使用的坐标集和光照贴图外,它的工作与我们以前的操作相同。

       1f7bc94df45ec517d7b67f12a4ac1275.png      

请注意,meta pass用于烘焙和实时光照贴图。因此,当使用实时GI时,它也将包含在构建中。

1.3 采样实时光照贴图

要实际采样实时光照贴图,我们还必须将第三个UV集添加到“My Lighting”中的VertexData。

       42bbb51be4e4ebcf84ba76d7820aabef.png      

使用实时光照贴图时,我们必须将其光照贴图坐标添加到插值器中。标准着色器将两个光照贴图坐标集组合在一个内插器中(与其他一些数据复用),但是我们可以为这两者使用单独的内插器。我们知道定义DYNAMICLIGHTMAP_ON关键字时就有动态的灯光数据。它是multi_compile_fwdbase编译器指令的关键字列表的一部分。

       7560a6a0a44fc2a8d8d74e383c2cf1c4.png      

除了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值