我正在考虑在 DX9 中编写一些执行阴影映射的代码。我只有一个光源的阴影贴图的示例代码。来自多个光源的阴影贴图性能是否可行?我的场景很容易渲染——没有纹理,只有几百或几千个顶点。
问题是我的场景发生在太空中,靠近太阳。我打算将太阳创建为一个球体,并将每个顶点渲染为一个光源——这也将为各种科幻太空飞船效果产生一些良好的效果。但是通读代码,我非常担心这会破坏我的表现,而且我不完全确定它会产生我正在寻找的令人难以置信的照明效果。我只是在这里矫枉过正吗?
一种简单的方法来渲染每个投射阴影的多个灯光----->
对于循环中的每盏灯,请执行以下操作:
{
清除 Offscreen RenderTarget 黑色。
仅使用当前灯光渲染场景……在 Offscreen RenderTarget 上。
然后打开 Blending(Add, One to One),将 Offscreen RenderTarget 绘制/覆盖到您的主后缓冲区。
}
渲染完所有灯光后,呈现场景。因为光最终只是添加,你可以继续渲染尽可能多的光。无论您是否使用不同的照明,此方法都将起作用。您还可以为每个灯光打开或关闭阴影。
如果其中任何一个不清楚并且需要更好的解释,请告诉我......
如果您正在寻找“高级”效果/技术的 DX 或 OGL 代码,请查看Humus 3D,其中有一些阴影贴图示例,其中一个应该有多个来源。GPU Gems 3 的这一部分可能也很有趣。
TBH你只是矫枉过正。来自大球体中每个顶点的光源太多了。如果您在获得阴影上的柔和边缘之后,那么总体上研究柔和阴影效果会好得多。
举个例子,《半条命 2》通过将阴影贴图渲染到单独的渲染缓冲区(同时使用主渲染缓冲区中的 Z 缓冲区)来实现软阴影。然后模糊该缓冲区并将其应用回主渲染缓冲区。结果是非常漂亮的阴影......