c# - Unity - 2D 着色器/光照,如 Terraria 或 Starbound

标签 c# unity3d 2d shader light

我有一张包含很多 Sprite 的 map 。我可以向具有漫反射阴影的 Sprite 添加 Material ,而不是添加大量灯光。但这不会给我想要的结果。并且性能很重。


例子

在第一张图片中,您可以看到光是由手电筒产生的。它通过“开放空间”以最佳方式扩展光线,并且很快就会被 block 挡住。

enter image description here


这是顶层的一个很好的例子。我们可以看到某种二维定向光吗?请注意,屋内的照明再次由手电筒产生。右侧的洞穴更好地展示了光的处理方式。另外,请注意背景中的洞,这会在洞穴中产生一些额外的光线。就好像灯光真的透过背景照在那里。

enter image description here


我有什么

你可以清楚地看到这里的问题。灯光会增加它们的强度。由于某种原因,光线在一些瓷砖周围形成了方形边缘。此外,大量的灯光会很快导致性能问题。

enter image description here


光线转换?

我读到您可以以某种方式使用光线转换?瞄准“开放空间”之类的?我对着色器或游戏中的照明完全没有经验。我想要一个关于如何实现这种 Terraria/Starbound 照明效果的解释清楚的答案。这并不意味着我说光线转换是解决方案。


我的世界

在 Minecraft 中,光可以传播一定数量的空气 block 。它逐渐消失到完全黑暗。在图形设置中,您可以启用平滑闪电,这将(显然)平 slider 上的闪电。

我想这是用着色器完成的,但我不确定。我的猜测是这很重性能。但我在考虑空气 block (它们是游戏对象),也许我的逻辑有误。


注意:我喜欢有帮助的答案,但请提供包含详细解释的链接。或者在您的回答中提供源代码解释或指向 Unity 文档的链接。我不希望看到理论成立之类的。我很想知道如何在 Unity 中实现这种光照。

我还想知道是否可以使用来自 Unity Marketplace 的包。


类似,但不好

查看类似的帖子,其中包含指向涵盖光线转换基础知识的文章的链接。但没有解释如何在 Unity 中实现这一点,而不是我想要实现的 Terraria/Starbound 效果:

Make pixel lighting like terraria and starbound

How to achieve Terraria/Starbound 2d lighting?


视频印象

例如,观看此视频,了解 2d 光在 Starbound 中的工作原理:

https://www.youtube.com/watch?v=F5d-USf69SU

我知道这有点高级,但玩家闪光灯产生的点光也会被方 block 挡住,并被开放空间让通过。


其他帮助论坛

也是我发的。

游戏开发交流: https://gamedev.stackexchange.com/questions/155440/unity-2d-shader-lighting-like-terraria-or-starbound

Unity 论坛: https://answers.unity.com/questions/1480518/2d-shader-lighting-like-terraria-or-starbound.html


最佳答案

为了统一,我可以提及关于 2d 动态光照的 2 个主要元素。

  1. unity essentials 中用于 2d 光照的主要资源之一是 DDL light ,附官方教程here .
  2. 最重要的是,Unity 本身正在开发动态光照系统,目前处于测试阶段(针对 2019.2)。 Unity 引入了用于 2d 灯的轻量级 RP 包 here并且有一个教程 here .

关于c# - Unity - 2D 着色器/光照,如 Terraria 或 Starbound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288411/

相关文章:

c# - 无法将对象加载到 Asp.net 上的 Redis session 状态提供程序

c# - : (colon) in c# for Unity3d

graphics - 如何为不同分辨率的屏幕生成 Sprite 艺术资源?

c# - 如何设计流畅的异步操作?

c# - 组合框将 itemsource 绑定(bind)到自定义列表并将 selecteditem 绑定(bind)到该列表的实例不起作用

c# - 如何创建接收 XML 的 Web 服务?

c# - 添加轻量级渲染管道时对象图形困惑

c# - 在 C# 中将 char 更改为 int 或 string

c - 在C中使用OpenGL 3.0+绘制多条线

java - 如何从 Java2D 获得最佳图形性能