XNA添加具有"刻录"效果的陨石坑(通过GPU)

Ben*_*min 5 xna textures effects

我目前工作的一个二维"百战天虫"克隆在XNA,和的特点之一是"可变形的"地形(例如,当火箭击中地形,有爆炸和地形的一大块消失).

我目前这样做的方法是使用一个纹理,当它接近中心时,红色值逐渐变高.我循环遍历"变形"纹理的每个像素,如果当前像素与地形像素重叠并且具有足够高的红色值,我将表示地形的颜色数组修改为透明.如果当前像素的红色值不够高,则会使地形颜色变黑(红色值越接近阈值,颜色越黑).在这个操作结束时,我使用SetData来更新我的地形纹理.

我知道这是不是做的好方法,这不仅是因为我看了一下管道摊位等,但也因为如果在同一时间被增加了很多陨石坑它可能会变得非常laggy.我想在GPU上重新制作我的Crater Generation,而不是在目标和要修改的纹理之间使用渲染目标"ping-ponging".这不是问题,我知道该怎么做.问题是我不知道如何使用此方法保持我的刻录效果.

以下是刻录效果现在的样子:

烧伤效果http://i52.tinypic.com/2h6f2nt.png

有没有人知道我将如何创建类似的燃烧效果(使形成的火山口周围的边缘变暗)?我对Shaders完全不熟悉,但如果它需要它,如果有人带我了解如何做,我会非常感激.如果有任何其他方式也会很棒.

Mar*_*nix 8

听起来你的方式很好.但是你手工做了很多事情,也可以通过绘制精灵和应用正确的公式来完成.

例如:
假设您的地形被保存到纹理的Alpha通道中的巨型纹理中.1是地形,0是什么都没有.

发生爆炸,地形必须变形.只需在纹理上绘制黑色透明球体(或爆炸区域)即可轻松更新纹理.地形消失了,因为黑色球体的alpha值为0.你的纹理现在是最新的,一切都是由spriteBatch完成的.没有什么必须检查.

我不知道你是否也想要一个解决方案,但现在你有一个解决方案.

对于刻录效果
现在我们在纹理中有了地形,我们可以使用着色器对绘图进行后期效果(就像你说的那样).着色器获得纹理的alpha通道,现在可以执行不同的操作来获得刻录效果.

  1. 第一种选择是进行边缘检测.检查所有4个方向的几个像素,看看像素是否在边缘.如果是这样,它需要进行刻录,例如,将其乘以到边缘的距离(或您喜欢的任何其他功能)
  2. 另一种方式与第一种方式非常相似,但分两步进行.首先,您执行相同类型的边缘检测,但是您将边缘保存在单独的纹理中.现在,当您绘制纹理时,可以覆盖边缘.所以它就像立刻拉开地面一样.

第二个选项的主要区别在于,您还可以选择仅绘制正常地面,而不是在渲染时调整地面纹理中的像素.

我知道这是一个很长的故事,但这是一个很好的技巧.看看toon着色器,它们也会进行边缘检测,即使它是3D.

关键词:香椿阴影,HLSL,后期效果,边缘检测,图像处理.
推荐阅读:http://rbwhitaker.wikidot.com/xna-tutorials