有没有一种简单的方法可以在OpenGL中获得阴影?

时间:2010-10-03 08:07:14

标签: c++ opengl terrain shadows

我最近创建了一些风景代码并为场景添加了一些漫反射光照,然而,令我失望的是,没有阴影。我在网上浏览了几个小时寻找在OpenGL中获得阴影的方法,但是它们看起来都非常复杂;并且他们自己的演示程序非常独特。

有没有简单的方法来制作阴影?

2 个答案:

答案 0 :(得分:26)

没有。光栅化非常糟糕(即使是最近的AAA游戏也有明显的阴影文物),但是每个人都和它一起生活。

解决方案包括(从最简单/最穷到最好/最难):

  • 没有阴影。只需考虑颜色较深的遮挡。 xNormalBlender
  • 如果你想要一个角色的近似阴影,地面上的一个简单的扁平多边形将具有透明和模糊的纹理。例如,请参阅Zelda截图。即使是最近的一些游戏仍然使用它。
  • 光照贴图。仅静态几何,但完美的照明(预先计算)。实施起来非常简单。有很多工具。
  • 影子卷,由Carmack推广。像素完美,实现起来相当简单,速度很慢。对一些物体有好处。没有柔和的阴影。
  • 阴影贴图。如果你从未制作任何openGL,有点难以实现。很难做对。像素化的阴影。处理许多多边形。不涉及大世界。
  • Myriads of Shadow地图变种。近年来这些研究很多。目前最好的是级联阴影贴图:很难,仍然很难让它看起来不错,但很快,处理大量的多边形和巨大的世界。
  • 光线跟踪阴影:这可能是下一代。除了一些研究论文外,没有人真正使用过它。很复杂,不适合动态世界(还),巨大的静态场景确定。像素完美或柔和阴影,取决于您拥有多少备用GPU。 Several variants;截至2014年,这仍未在任何游戏中for performance reasons生成。

所以通常的诀窍是将美观但静态的方法与动态但不是很好的方法混合在一起。例如,请参阅我在lightmappingshadowmapping上的教程。

答案 1 :(得分:5)

没有

我所知道的最简单的方法是使用多重纹理覆盖在地形上的预生成阴影纹理。复杂的部分是生成这种纹理,但如果你不使用定向照明,一个简单的“大模糊点”通常比没有更好。