如何使用HLSL和DirectX 11实现激光效果?

如何使用HLSL和DirectX 11实现激光效果?,directx,directx-11,hlsl,Directx,Directx 11,Hlsl,我仍在使用自己的自定义游戏引擎开发我的科幻视频游戏。现在,我想在我的游戏和引擎中实现战斗系统。虽然几乎所有的事情我都很清楚,但我想知道如何制作出像《星球大战》、《星际迷航》、《巴比伦5号》等电影中那样的合适的激光束 我在网上做了一些调查,但是没有找到合适的文章。我很确定我用了错误的关键字/标签搜索。你能给我一些提示如何实现像激光束这样的效果吗?我想,知道在线研究所需的适当技术或术语就足够了。一种常见的方法是画三个或更多相交的透明平面,如果你原谅我的粗制滥造: 然后,它们中的每一个都具有相同的激光

我仍在使用自己的自定义游戏引擎开发我的科幻视频游戏。现在,我想在我的游戏和引擎中实现战斗系统。虽然几乎所有的事情我都很清楚,但我想知道如何制作出像《星球大战》、《星际迷航》、《巴比伦5号》等电影中那样的合适的激光束


我在网上做了一些调查,但是没有找到合适的文章。我很确定我用了错误的关键字/标签搜索。你能给我一些提示如何实现像激光束这样的效果吗?我想,知道在线研究所需的适当技术或术语就足够了。

一种常见的方法是画三个或更多相交的透明平面,如果你原谅我的粗制滥造:

然后,它们中的每一个都具有相同的激光纹理,该纹理在顶部和底部边缘附近逐渐变为黑色:

如果添加任何细微细节,请记住根据梁的长度适当缩放纹理坐标并启用包裹


最后,也是最重要的一点,使用仅显示面向摄影机的平面的着色器,同时以掠射角度淡出这些平面,以隐藏我们使用相交平面的事实,并使光束看起来平滑而可信。混合应为添加剂。您还应该向梁的末端添加一些额外效果,以隐藏平面。

如果您不介意我的粗略绘制,通常的方法是绘制三个或更多相交的透明平面,如下所示:

然后,它们中的每一个都具有相同的激光纹理,该纹理在顶部和底部边缘附近逐渐变为黑色:

如果添加任何细微细节,请记住根据梁的长度适当缩放纹理坐标并启用包裹


最后,也是最重要的一点,使用仅显示面向摄影机的平面的着色器,同时以掠射角度淡出这些平面,以隐藏我们使用相交平面的事实,并使光束看起来平滑而可信。混合应为添加剂。你还应该在光束的末端添加一些额外的效果,再次隐藏平面。

我喜欢这个答案,因为它简单,无论视角如何,都能提供良好的效果,并且几何复杂度较低。现在有了GPU的灵活性,交叉四边形可能不像在有或没有几何体着色器的情况下发送在屏幕空间中扩展的线那样优雅。通过在屏幕空间中展开,您可以通过强制线条不降低高度来控制线条只有几个像素宽时可能出现的锯齿。非常感谢您的回答!这听起来完全有道理:我会在完成当前的工作包后再尝试!我喜欢这个答案,因为它很简单,无论视角如何,都能获得很好的效果,而且几何复杂度也很低。现在,凭借GPU的灵活性,十字四边形可能不像在屏幕空间中扩展的发送线那样优雅,可以使用或不使用几何体着色器。通过在屏幕空间中展开,您可以通过强制线条不降低高度来控制线条只有几个像素宽时可能出现的锯齿。非常感谢您的回答!这听起来完全有道理:我会在完成当前的工作包后再尝试!