我想知道是否有人在XNA上为Xbox 360处理照明有任何好的模式。我目前正在尝试实现一个聚光灯组件。我已经阅读了延迟着色作为降低复杂性的方法。我也听说这对于Xbox 360来说不是一个好主意,并且在XNA 4.0中比在XNA 3.0中更难。我的目标是制作一个可重复使用的组件,它封装了可以通过游戏使用的聚光灯效果。
谢谢,
-John
答案 0 :(得分:1)
延迟渲染允许您在渲染世界之后应用光照。
它确实降低了复杂性,因为您不必在绘制之前选择哪个灯会影响模型(通常是最接近/最重要的灯)。
它可以使半透明处理和抗锯齿更复杂。
它允许应用许多灯光,并在场景中移动,这对前方照明来说是不切实际的。
它需要存在几个缓冲区 - 几何缓冲区作为最小值,但普通和镜面缓冲区也很有用。存在打包这种缓冲区的技术,但它们需要更多内存,并使用带宽来写入。这意味着延迟渲染具有比前向渲染更高的前期成本,但相对于光量和移动它们提供了更大的灵活性。
星际2,战争机器和其他游戏使用延迟渲染器,所以它当然是一个经过验证的解决方案。
在XNA 4下的复杂性方面没有太大差异这里是一个显示XNA 4下实现的链接。主要区别在于必须明确地存储z缓冲区的副本而不是直接访问它。 http://roy-t.nl/index.php/tag/deferred-rendering/你也可以考虑光预传http://jcoluna.wordpress.com/
由于你想要一个聚光灯效果,我可以看到为什么你会考虑延迟渲染,因为我猜测聚光灯是动态的。但是如果您之前没有使用延迟渲染,我建议您在上面探索Roy的链接,以确定您是否对成本/复杂性感到满意。