Decal渲染是一个引擎中重要的一部分,记忆中印象最深刻的就是以前CS中的弹痕与爆炸痕迹了。目前来说,Decal的实现方法也比较多,而且感觉还跟游戏类型有关,比如子弹乱飞的射击类FPS游戏中对贴花系统的要求就比较高,因为本来Decal的变化就比较丰富。一般来说贴花渲染主要有两种实现方法:
- Texture projection关于投影纹理的原理网上也有很多文章,基本就是需要对地形渲染两遍,一遍正常渲染,一遍用投影的纹理渲染,然后把这两个混合的结果融合。显然,如果场景中的贴花较多,且场景规模复杂的话,这种方法就会比较费。
- Mesh projection 这种方法应该来说使用比较多,包括早期Source中的Decal等使用的应该就是这种方法,其主要原理就是将Decal处理为附着于其所能贴到的几何表面上的几何网格,然后当做polygon list来渲染。当然这些网格也是经过修饰的(比如贴到一个桌子的边角上时,就需要根据桌角几何网格的分布来裁剪Decal所对应的网格)。关于该方法这里有一篇文章介绍得非常好:http://blog.wolfire.com/2009/06/how-to-project-decals/。另外,基于此种方法的改进类型也不少,比如Frosbite引擎中就利用Geometry Shader来生成类似该类型的Decal(