基本的2D照明非常简单.只需从您的区块到您的灯光进行距离检查,并使用该值来缩放光线.这是你可以做的相当简单的事情,因为Spritebatch.Draw有一个很好的Color tint参数[link]
伪函数可以是
distance = (block.position - light.position). Length();
lightPower = distance / light.MaxDistance;
finalTint = light.Color * lightPower;
Render Block, with finalTint
Run Code Online (Sandbox Code Playgroud)
为了获得更好看的光线,您可以用更平滑的效果替换"distance/light.MaxDistance".如果您还希望灯光通过像Terraria这样的几个块,您可以计算块和光源之间的所有块.按照这个数量缩小你的lightPower,你会得到像Terraria一样的效果.
当然,这是一种非优化的方式,但应该有效.
然而,最新的Terraria版本似乎具有平滑的每像素照明而不是每个块[预览].为此,我假设他们使用第二个渲染目标和/或像素着色器来保持快速性能.如果你不熟悉渲染管道,这可能有点困难.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
4359 次 |
| 最近记录: |