我正在努力让我的灯光类似于Terraria的灯光照明。现在,我知道如何使块更暗,我可以将块分配给某个光级,但是,我如何制作一个实际的光实体,它发出圆形的光(也可以是菱形)? 非常感谢帮助,如果我不清楚我的问题,请随时提出。
答案 0 :(得分:5)
基本的2D照明非常简单。只需从您的区块到您的灯光进行距离检查,并使用该值来缩放光线。 这是你可以做的相当简单的事情,因为Spritebatch.Draw有一个很好的Color tint参数[link]
伪函数可以是
distance = (block.position - light.position). Length();
lightPower = distance / light.MaxDistance;
finalTint = light.Color * lightPower;
Render Block, with finalTint
对于更漂亮的灯光,您可以用更平滑的效果替换“distance / light.MaxDistance”。 如果您还希望灯光通过像Terraria这样的几个块,您可以计算块和光源之间的所有块。按照这个数量缩小你的lightPower,你会得到像Terraria一样的效果。
当然,这是一种非优化的方式,但应该有效。
然而,最新的Terraria版本似乎具有平滑的每像素照明,而不是每个块[preview]。为此,我假设他们使用第二个渲染目标和/或像素着色器来保持快速性能。如果你不熟悉渲染管道,这可能有点困难。
希望这有帮助!
答案 1 :(得分:1)
我正在开发一款采用类似照明模式的游戏,我们这样做是这样的:
这也使您能够拥有彩色照明;您所要做的就是将渲染的光渐变色调到光照贴图。请记住使用添加剂α混合。
这种方法的缺点是它相当幼稚,并没有提供遮挡灯光的简单方法(也就是说,它们穿过墙壁)。在我们的例子中,这不是问题;你可能会另有决定。