如何在多层2d tilemap中实现光影?


11

我正在从头开始编写等距游戏,我想知道如何/是否可以添加灯光和阴影。

我到目前为止的代码可以在这里找到,但它应该是不够了解,现在,地图是真/假值的简单3D阵列。这是环境的快照:多层tilemap的屏幕截图

如果是单层tilemap,那将是直接的。我可以理解所需的2d中简单的光线投射。

但是,考虑到我的地图具有多个高度级别以及类似洞穴的区域,我真的不知道该如何为它创建令人信服的阴影。也许逐块解决方案是唯一现实的方法?


您是否正在寻找预烘焙或动态生成的照明?如果玩家走进去,“洞形区域”是否被切掉了?还是光线也需要考虑天花板?您是否希望每个瓦片都是二进制亮/暗或具有某种分数值?
Anko 2015年

1
@Anko我更喜欢小数,例如0-1.1(用于爆炸等过亮区域),但是它可能只是基于块的,没有真正的插值或类似的东西。我真的希望它是动态的,并支持多个灯光。并且,尽管将显示“凹状” /屋顶区域,但算法计算时仍需要考虑未显示的块。例如,如果您走进一间房屋,屋顶砖将消失,但内部仍应处于阴暗处。
丹妮·克劳森

如果您正在寻找一个具有洞穴和高度的解决方案,那么您似乎没有2D的东西。即使相机始终向北朝下45º方向,您也可能正在寻找完整的3D解决方案。您应该查看诸如模板阴影之类的技术。
阿德里安·梅尔

第二个@AdrianMaire,您需要进行正确的3d计算,但是如果在“平铺”的两面之间没有插值,则可以做一些捷径。如果不进行插值,则可能使用射线。
NeomerArcana 2015年

我现在没有足够的思维空间来将其分解为一个答案,但是我偶然发现了这篇有关高度图地形的视线确定的博客文章。听起来就像您在寻找什么。
Anko 2015年

Answers:


1

我是否可以建议首先使用2d阴影,即使只是针对您的化身当前所处的水平。开始以这种方式查看代码并使之正常工作将更加容易。

我已经以几种方式在2D瓷砖地图中实现了阴影。我发现MicrosoftEric Lippert描述了一种阴影投射方法,效果很好。

另外,我第一次看这种东西的另一种方式是正交扫描可见的图块和图块边缘,并生成以最少数量的边缘描述场景的边缘(可能还有角iirc)。然后,如果您想显示一点点墙,则可以剔除隐藏的边缘并形成任何自定义阴影功能,例如隐藏阴影。然后创建您的阴影几何体(投影阴影投射?)并将其渲染在顶部。

但是,如果我尝试将这种想法带入3d中,那么在3d中实现它就会变得更加容易。虽然Eric Lippert描述的方法可能可以转换为3d。但是我认为您会发现在3d中执行此操作非常昂贵。也许也看一下Brogue的源代码。对于2d可见性/阴影投射,它可能具有更有效的实现。

祝好运。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.