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的主要内容,如果未能解决你的问题,请参考以下文章

着色器图弄乱了纹理(Unity 2D)

[Unity] Shader(着色器)输入输出和语义

Unity优化风格的着色器

Unity5 GI与PBS渲染从用法到着色代码

Unity:在 UI 画布图像的着色器中访问精灵二级纹理

在 3D 空间中使用 GLSL 绘制 2D Mesh Grid