光(cookie)是什么?
轻松cookie是一种不需要真的昂贵阴影地图的方法来模拟阴影图案。工作流程是极其简单的:
- 在光源上添加
LightCookieData组件 - 分配你要模拟阴影的任何网格
- 点击烘焙按钮
- 你也可以使用
窗口 —> 渲染 —> cookie光源生成器来管理和预览多个cookie,但我发现这个新方法更容易使用,只需要在检查器中选择Cookie数据组件即可
包url:https://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 个月的时间才弄懂这个概念其实本来就是非常简单的。之前,我使用了光源的软阴影、临时相机和一个真实的阴影材质,我在整个场景上都打开了阴影,然后又恢复了之前的设置。但这需要同时考虑太多的因素,而且它甚至看起来也不好。实际上,我使用了渲染每个网格为平坦黑色几何体,然后叠加它们的方法,这比我想象的要轻松得多。我甚至觉得有点可耻才发现了最好的方法。
评论 (0)