Unity - 2D 着色器/照明,例如 Terraria 或 Starbound
Posted
技术标签:
【中文标题】Unity - 2D 着色器/照明,例如 Terraria 或 Starbound【英文标题】:Unity - 2D shader / lighting like Terraria or Starbound 【发布时间】:2018-03-14 22:09:16 【问题描述】:我有一张包含很多精灵的地图。我可以使用漫反射阴影向精灵添加材质,而不是添加大量灯光。但这不会给我想要的结果。而且性能很重。
示例
在第一张图片中,您可以看到光是由手电筒产生的。它通过“开放空间”最大限度地扩展其光线,并很快被街区阻挡。
这是顶层的一个很好的例子。我们可以看到某种二维定向光吗?请注意,房屋内的照明再次由手电筒产生。右侧的洞穴展示了如何处理光线的更好示例。另外,请注意背景中的洞,这会在洞穴中产生一些额外的光线。好像光线真的透过那里的背景照耀着一样。
我有什么
您可以在这里清楚地看到问题所在。灯光增加了它们的强度。出于某种原因,光线会在某些瓷砖周围形成方形边缘。此外,大量灯光会很快导致性能问题。
光线投射?
我读到您可以以某种方式使用光线投射?以“开放空间”为目标?我完全没有使用着色器或游戏照明的经验。我很想得到一个关于如何实现这种泰拉瑞亚/星界灯光效果的解释清楚的答案。这并不意味着我说光线投射是解决方案。
我的世界
在 Minecraft 中,光可以传播一定数量的空气块。它逐渐消失到完全黑暗。在图形设置中,您可以启用Smooth Lightning
,这将(显然)平滑块上的闪电。
我猜这是用着色器完成的,但我不确定。我的猜测是这对性能很重要。但我正在考虑空气块(它们是游戏对象),也许我的逻辑有误。
注意:我喜欢有帮助的答案,但请提供一个包含详细解释的链接。或者在您的答案中提供带有源代码或 Unity 文档链接的解释。我不希望看到理论得到解决。我很想知道如何在 Unity 中实现这种照明。
我还想知道是否可以不使用 Unity Marketplace 中的包。
类似,但不好
查看类似的帖子,其中包含涵盖光线投射基础知识的文章链接。但没有解释如何在 Unity 中实现这一点,而不是我想要实现的 Terraria/Starbound 效果:
Make pixel lighting like terraria and starbound
How to achieve Terraria/Starbound 2d lighting?
视频展示
例如,观看此视频,了解 Starbound 中 2d 光的工作原理:
https://www.youtube.com/watch?v=F5d-USf69SU
我知道这有点高级,但玩家的闪光灯产生的点光也会被方块挡住,让空地通过。
其他帮助论坛
也是我发的。
Gamedev 交流: https://gamedev.stackexchange.com/questions/155440/unity-2d-shader-lighting-like-terraria-or-starbound
团结论坛: https://answers.unity.com/questions/1480518/2d-shader-lighting-like-terraria-or-starbound.html
【问题讨论】:
写得很好的问题,但我觉得它可能更适合 gamedev.stackexchange 而不是 Stack Overflow @Bejasc 我自己也在问这个问题。而且我觉得 *** 有一个全能的程序员社区,可能能够解决这个问题。我可能也会在 Unity 论坛上发布它,并提供我的问题与链接。 请注意,不鼓励在 StackExchange 站点上进行交叉发布。我同意 Bejasc 的观点,这个问题可能会在 GameDev.StackExchange 上得到更好的答案,但如果你保持这个版本,我将不得不在那里关闭它。 @DMGregory 你认为它会在 gamedev 上更快地得到更好的答案吗? 更快,很难说。这取决于我们的交通量和人们的空闲时间。 【参考方案1】:为了统一,我可以提到 2 个关于 2d 动态照明的主要元素。
-
Unity Essentials 中用于 2D 照明的主要资产之一是 DDL light,并附有官方教程 here。
最重要的是,Unity 本身正在开发动态照明系统,目前处于测试阶段(适用于 2019.2)。 Unity 推出了用于 2d 灯的 Lightweight RP 包 here 并且有一个教程 here。
【讨论】:
【参考方案2】:显然,the Unity Asset Store 上有几个包。搜索“2d 照明”或“2d 着色器”。您可以轻松导入这些包的源代码并自己在 Unity 中进行测试。如果你喜欢一个经过测试的包,你可以使用它。
我强烈建议您不要将其直接导入现有项目。为了您自己的利益,请先在测试环境(或项目的副本)中对其进行测试,然后再将其包含到您的项目中。
【讨论】:
以上是关于Unity - 2D 着色器/照明,例如 Terraria 或 Starbound的主要内容,如果未能解决你的问题,请参考以下文章