魔法/旋风特效

0 点赞
Godot Engine
转载

一种简单且计算成本低的3D渲染方法,可用于呈现卡通风格的旋风、魔法、幽灵等效果。 第一部分:准备网格 1. 在Blender中,创建一个平面并进入编辑模式。 2. 使用循环切割工具,按照图1所示对平面进行切割。

进入顶点绘制模式,并按如下方式绘制平面:

进入物体模式并创建一个新的贝塞尔曲线物体。 进入编辑模式并按需调整曲线。

重新进入物体模式,为平面添加曲线修改器。 在修改器设置中,选择步骤4中创建的曲线。 启用上一步修改器的“编辑时可见”选项。 重新进入平面的编辑模式,并将变换轴心点更改为“光标”。 将光标沿世界坐标居中。 按照图示沿X轴缩放平面的点。

使用循环切割工具,在新变形的平面上进行切割,使用足够的细分次数使曲线平滑。

满意后,应用平面的曲线修改器,保存文件,并将平面以GLTF格式导出到Godot项目目录中所需的位置。 第二部分:准备纹理 1. 在你选择的光栅图像编辑器中,创建一个新的256x32灰度图像。 2. 用黑色填充图像。 3. 用较浅的颜色在图像中随意涂抹,并对其进行水平模糊处理。 4. 创建第二个相同尺寸的灰度图像,并为其添加噪点。 5. 对第二张图像应用可平铺模糊。 6. 接下来,将第二张图像的内容复制到第一张图像,并将它们垂直堆叠。 7. 最后,扩展画布以容纳两张图像,并将结果导出为PNG格式到你的项目目录中。 结果应该看起来像这样:

第三部分:创建 Godot 着色器: 在 Godot 中,创建一个新的 ShaderMaterial。 在第一步创建的材质中,按如下方式创建着色器布局:

最后,将材质应用到导入的网格体上:

着色器的工作原理: 我们将时间作为输入,并将其添加到u坐标中,同时将v坐标除以2,从而有效地将纹理转换为图集(这样可以避免纹理切换,某些GPU上纹理切换可能会降低性能)。最后,我们将两个子纹理相互相乘,并将结果输出到自发光通道。 随着时间推移,两个子纹理以不同速度在网格上滚动,产生一种干涉效果,类似于一些早期《塞尔达传说》游戏中的风特效,或是《创世理想乡》中重生点周围的魔法漩涡效果。