Animated Particles

This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.
Also, please make sure the article tries to comply with the alternate languages guide.
粒子使用的纹理会被编译为SpriteCard纹理。这些精灵卡纹理本质上是多个纹理的集合。
精灵卡上的单个纹理可以是组成动画粒子的一帧帧图像,也可以是彼此无关的独立纹理。
精灵卡通过位于bin文件夹中的mksheet.exe工具创建,同时需要一个MKS文本文件来定义使用的纹理,并指定该精灵卡是动画序列还是独立帧集合。
MKS文件
.mks文件定义了粒子渲染时如何解析精灵卡。您可以将材质组织为可播放的序列,定义帧数和播放速率,以及是否循环播放序列。
以下是一个示例mks文件,展示了多种可能的配置:
// 第一个序列:简单的两帧循环动画
sequence 0
loop
frame mymaterial1.tga 1
frame mymaterial2.tga 1
// 第二个序列:单张静态纹理
sequence 1
frame mymaterial3.tga 1
// 第三个序列:每帧使用两张纹理进行多重贴图
sequence 2
frame fire_base0.tga fire_additive0.tga 1
frame fire_base1.tga fire_additive1.tga 1
// 第四个序列:将两帧的alpha通道分别存入输出帧的alpha和绿色通道,用于特殊着色器
sequence 3
frame frame0.tga{g=a},frame1.tga{a=a} 1
frame frame2.tga{g=a},frame3.tga{a=a} 1
- sequence
- 告知Mksheet.exe后续的frame条目属于同一个动画粒子序列,直到遇到下一个sequence指令
- frame
- 指定使用的.tga纹理文件名,后跟播放速率。1表示正常时长播放,0.5表示播放时间减半,2表示双倍时长
- loop
- 设置序列循环播放。若未设置,粒子播放完所有帧后将停留在最后一帧
此外,帧的RGB和Alpha通道可以分别打包。此功能将输入帧的Alpha存入输出精灵卡的Alpha通道,RGB存入RGB通道。值得注意的是,RGB和Alpha可以拥有独立的序列和帧尺寸。例如RGB可以是200x200,而Alpha是150x150。示例如下:
// 该序列将RGB帧数据与Alpha帧数据分离
// 实现RGB序列与Alpha序列的组合播放
// packmode设置mksheet分离RGB和Alpha帧
packmode rgb+a
// 第一个序列 - 循环Alpha帧
sequence-a 0
LOOP
frame reframedSmokeSprites170_0033.tga 1
frame reframedSmokeSprites170_0035.tga 1
// 第二个序列 - 循环RGB帧
sequence-rgb 1
LOOP
frame smokeTex0001_341.tga 1
frame smokeTex0002_341.tga 1
该.mks文件的输出效果如下。注意RGB和Alpha帧的尺寸均为非2的幂且互不相同。
注意事项
- 同一图像文件可以在多个序列(或同一序列多次)重复使用,而不会在输出精灵卡中重复存储。典型应用场景包括:不同播放速度的序列、粒子序列、循环与非循环版本等
- 应尽可能将多个精灵纹理合并到一张精灵卡中,通过不同序列服务于不同的粒子系统
逐步教程
本教程已验证适用于 求生之路2。据用户反馈,此方法在
异形丛生中不可用,但在
反恐精英:起源中有效
- 在MaterialSrc目录下创建文件夹(例如"MaterialSrc/Particles/Particle_name/"),存放要编译的.tga纹理
注意:虽然mksheet.exe不关心文件位置,但Vtex.exe要求.sht和编译后的.tga必须位于"Materialsrc"文件夹内
建议直接将源文件(Blender文件、模型、纹理等)存放在MaterialSrc的子目录中 - 在此文件夹内创建以.mks为扩展名的文本文件(非.txt)。该文件名称将作为输出.sht和.tga的文件名
- 按前文说明配置.mks文件。以下是不带动画的静态精灵示例:
sequence 0 frame 9mm_0001.tga 1 sequence 1 frame 9mm_0002.tga 1 sequence 2 frame 9mm_0003.tga 1 sequence 3 frame 9mm_0004.tga 1
- 将.mks文件拖放到mksheet.exe上,生成同名.sht和.tga文件
提示: 可为mksheet.exe和vtex.exe创建桌面快捷方式,避免反复打开bin文件夹
警告:需对粒子纹理进行"膨胀"处理以防止黑色背景渗色,具体方法见下文
- 将.sht或处理后的.tga拖放到vtex.exe(或其快捷方式)上,生成最多两个.vtf文件
可删除带"pwl"扩展名的辅助文件,或在vtex日志出现"SUCCESS: Vtf file created"后提前终止进程
Vtex会根据Materialsrc中的路径结构,在materials目录下创建相同路径存放.vtf文件 - 创建粒子材质文件.vmt,基本结构如下:
spritecard { $basetexture ".../.../..." $depthblend 0 $blendframes 0 }
粒子TGA膨胀处理
若未进行膨胀处理,黑色背景会渗入半透明粒子(如火、烟)。使用packmode rgb+a
时可能无需此步骤
- 在图像软件中打开mksheet生成的.tga
- 复制Alpha通道作为图层蒙版,去除黑色背景
- 复制粒子图层并添加高斯模糊,可多次复制以增强边缘膨胀效果
- 将模糊层置于原始纹理下方,添加纯色背景
通过上述步骤可获得无背景渗色的优质膨胀纹理
精灵卡编译(旧方法)


将.tga和.mks文件放入"Steamapps/common/SourceSDK/bin/orangebox/bin"。创建包含以下内容的.bat文件:
mksheet <sheetname>.mks <sheetname>.sht <sheetname>.tga
参数说明:第一个为必填的.mks文件,后两个分别为可选的.sht和.tga输出文件。例如编译smoke1.vmt:
mksheet smoke1.mks smoke1.sht smoke1.tga
生成的.file文件可安全删除
3ds Max自动化
通过Wall Worm插件可直接导出渲染序列到Source引擎。该系统支持导出基于TGA的IFL(图像文件列表)位图,根据位图参数自动生成MKS文件并调用mksheet生成.SHT和.TGA。完整文档参见:http://dev.wallworm.com/document/187/exporting_animated_particle_textures.html