光(cookie)是什么?

轻松cookie是一种不需要真的昂贵阴影地图的方法来模拟阴影图案。工作流程是极其简单的:

  • 在光源上添加LightCookieData组件
  • 分配你要模拟阴影的任何网格
  • 点击烘焙按钮
  • 你也可以使用窗口 —> 渲染 —> cookie光源生成器来管理和预览多个cookie,但我发现这个新方法更容易使用,只需要在检查器中选择Cookie数据组件即可

包urlhttps://github.com/Simoxus/light-cookie-generator-for-unity.git

仓库https://github.com/Simoxus/light-cookie-generator-for-unity

为什么说这种方法 "不可能"?

我的场景中有成百上千个预设,每个预设之间都有一个门道。场景的布局可以无限变化,也就没有办法轻松地烘焙光照。所以,我必须使用实时光照,因为一房间有5-10个光源,而有几百个分布在每个布局中150个房间中。由于这个原因,我被迫找不到优化光照的方法,而这种方法通常会让房间看起来很难看。光照本身是非常可观的,但阴影却导致了性能问题。所以,我必须关闭大多数光源的阴影,而且把其他一些光源的阴影设置成低质量。这导致了一些问题,比如门之间的光源会泄漏光,也会导致房间看起来很平淡。

该工具具有哪些功能使得你愿意花费3-4个月做这个?

  • 支持点光源、方向光源和聚光灯
  • 支持每个阻挡物的设置,如透明度、膨胀、侵蚀和反转
  • 支持各种模糊效果,如高斯消波、Kawase模糊和螺旋模糊
  • 自动命名
  • 批量烘焙从右键菜单、检查器或Light Cookie Generator窗口
  • 使用shader来计算膨胀和模糊效果,这样烘焙速度很快,即使要处理2048x2048大小的图像
  • 支持GUID追踪,每个 LightCookieData 组件都有一个唯一的ID,可以让命名系统跟踪每个光源所拥有的 cookie 和在重新烘焙时可以使用同样的文件名。

有没有限制?

不幸的是,yes D:

由于 cookie 是 2D 场景,而不是实际的阴影地图,它们不理解深度。因此,即使一个阻挡物离光源很近,而另一个阻挡物离光源很远,它们仍然会产生相同的阴影图案。对静态几何体来说,这并不起作用,但这并不是 cookie 替代真实阴影的方法。

它是如何工作的?

它首先在光源的位置创建一个临时相机,对每个阻挡物进行渲染,然后把每个防护物渲染的图像叠加起来,最后取每个图像最小的值。如果模糊效果选择了,就会对结果进行模糊,最后保存并重新分配给光源。

由于每个防护物都有自己的图像,这样就有了每个防护物都可以单独控制的功能。但是,我花了 3-4 个月的时间才弄懂这个概念其实本来就是非常简单的。之前,我使用了光源的软阴影、临时相机和一个真实的阴影材质,我在整个场景上都打开了阴影,然后又恢复了之前的设置。但这需要同时考虑太多的因素,而且它甚至看起来也不好。实际上,我使用了渲染每个网格为平坦黑色几何体,然后叠加它们的方法,这比我想象的要轻松得多。我甚至觉得有点可耻才发现了最好的方法。