照明覆盖天空

时间:2013-12-12 16:29:22

标签: c# xna 2d lighting

我有一个基于2D平铺的照明系统,它被绘制到渲染目标上。 我也在画一个涉及山脉,太阳/月亮和云彩的背景。 还有没有灯光的游戏;块,人物等。

以下是绘制所有内容的顺序:

1. Background
2. Game World
3. Lighting

问题是当夜幕降临时,LIGHTING会掩盖背景:

The moon and background is covered by darkness.

虽然白天完全没问题,因为光线充足: The alpha of the light is 1, so the background is visible

您可能会问,嗯,为什么不混合每个块,而不是在RenderTarget上绘制灯光?

因为这会阻止我进行平滑照明,如图所示。为了产生平滑的光照,我将光的正方形绘制到RenderTarget上,执行高斯模糊,然后绘制RenderTarget。

如何在空白处不画一个正方形光线?

光线模糊到任何相邻的区域,并且我的游戏中受光照影响的所有物体都不是方形的,所以它们看起来就像一个顶部有模糊方形的精灵。

不在空白区域绘制光线: Light NOT being drawn in empty spaces

随处可见的光线: Light being drawn everywhere

有没有什么方法可以保持背景可见,或者有什么方法可以帮助我解决困境?

1 个答案:

答案 0 :(得分:0)

我建议您执行以下操作:

  • 渲染灯光以呈现目标
  • 渲染场景以渲染(让背景保持透明)
  • 将场景与灯光渲染目标相乘
  • 将背景渲染到屏幕
  • 将场景(已应用灯光)渲染到屏幕

因为在应用光照后添加了背景,所以它不会受到影响。