跳到主要内容

杂项

以下进行一些简短的讲解。


完全自定义粒子

MadParticle提供另一个非常强大的功能,允许你自由且非常方便地为游戏添加新粒子。

注意

添加的新粒子应该仅用于/mp/madparticle指令的参数,而不应该将其用于/particle等处。将其用于其他地方是未定义行为。

如果游戏内的各种粒子贴图无法满足你的需求,你可以通过这个功能添加你自己的粒子。

你只需要准备好粒子贴图,然后把它们放进游戏根目录的customparticle文件夹内,并遵循如下的命名规则:

  • 如果这个粒子只有一张贴图(即不随着年龄变化,或是在生成时没有随机变化):
    • 你只需要将其命名为<粒子名称>.png。例如leaves.png
  • 如果这个粒子有多张贴图:
    • 你需要从0开始,依次将其命名为<粒子名称>#<序号>.png,例如smoke#0.pngsmoke#1.png
  • 生成的粒子默认命名空间为madparticle。如果你想自定义命名空间:
    • 请在文件名前面加上<命名空间>~,例如nocaet~leaves.pngtest~smoke#1.png
注意

请严格按照命名规则填写文件名。

如果你的命名有误,日志中可能会有相应的提醒,以便于找到具体对应的文件。

启动游戏,你应该就能看到新粒子了!

警告
  • 过多的.png文件可能会导致游戏加载缓慢。懒得优化,只有等。
  • 目前暂时没有与服务端同步图片的功能。在多人游戏中使用自定义粒子是未定义行为。

在Fabric中使用MadParticle

MadParticle提供Fabric版本,但有且只有核心功能:解析命令并生成粒子,不提供GUI辅助工具。

当然,我并不推荐在Fabric版本中徒手编写如此长的命令,所以在一般情况下有几种方案:

  • 你可以先使用Forge版本完成地图有关MP部分的制作,再将其复制到Fabric版本中。
  • 作为一个变通,你也可以用WorldEdit的schme来转移编写好的命令方块。
  • 当然,你可以同时打开Forge和Fabric客户端,在Forge版本的Designer GUI中编写好命令,复制到Fabric版本中。
提示

请关注Fabric/Forge两端版本更新可能导致的命令参数变化。

很有可能你需要用到的某个粒子由某个Mod提供,而这个Mod仅在Forge端提供——这正是发明完全自定义粒子的初衷。

警告

在复制某个mod的资产时,请注意其许可证是否允许你这样做。

你只需要在拷贝存档前,将需要的粒子图片文件复制到Fabric端的customparticle文件夹内,并按上述的规则指定命名空间即可。


在服务器中使用MadParticle

我了解您作为服主或管理员对服务器性能的担忧。

在MadParticle Forge 0.2.0(Fabric 0.1.0)版本之后,对/madparticle/mp命令的解析均以异步方式执行,这在多数情况下减少了对主线程的干扰。但如果您的服务器只有1个核心,那可能会存在一些极其轻微的负面影响。

/madparticle性能测试

在接下来的性能测试中,我们使用这条命令作为测试例。其含有2个子粒子,适合用来代表一般情况:

madparticle minecraft:crit RANDOM 30 FALSE 1 ~ ~1 ~ 0.0 0.0 0.0 0.0 0.45 0.0 0.05 0.05 0.05 FALSE 0 0 0 0.97 0.97 0.15 0.15 0 0 0 0 0.0 TRUE 0 0 PARTICLE_SHEET_TRANSLUCENT 0.996 0.801 0.318 1.0 1.0 1 LINEAR 1 1 LINEAR @a expireThen minecraft:cloud RANDOM 40 FALSE 1 = = = 0.0 0.0 0.0 0.0 0.0 0.0 0.08 0.0 0.08 FALSE 0 0 0 0.97 0.97 0.0 0.0 0 0 0 0 0.0 TRUE 0 0 PARTICLE_SHEET_TRANSLUCENT 0.996 0.733 0.216 1.0 1 0.6 LINEAR 1 1 LINEAR @a expireThen minecraft:cloud RANDOM 20 FALSE 1 = = = 0.0 0.0 0.0 = = = 0.0 0.0 0.0 FALSE 0 0 0 0.96 0.96 0.0 0.0 0 0 0 0 0.0 TRUE 0 0 PARTICLE_SHEET_TRANSLUCENT 0.996 0.860 0.725 1.0 1.0 1 LINEAR 1 1 LINEAR @a

其效果如下图:

madparticle

80个循环型命令方块工作引起的额外mspt消耗约为13ms,平均每个循环型命令方块的mspt消耗为0.1625ms。

/mp性能测试

/mp使用经过简化的指令执行步骤,跳过了常规的指令解析工作。

使用同样的命令,80个循环型命令方块工作引起的额外mspt消耗约为4.5ms,平均每个循环型命令方块的mspt消耗为0.05625ms,是/madparticle消耗的约三分之一。

警告

以上性能测试数据仅供参考。使用的服务端为开发环境下的Forge原生服务端。CPU为AMD Ryzen 7 5800X,频率4.65GHz,内存频率3200MHz。在不同的服务器环境下,具体的mspt消耗可能有所不同。

信息

不论是/mp还是/madparticle,解析时消耗的内存可能较大。我们未来会进行优化。

减少mspt消耗

最简单的办法是让服务器玩家使用红石时钟控制的脉冲型命令方块,在不必要时减少命令的执行。

如果您使用的是Forge版本的MadParticle,我推荐一同使用由TeaCon组委会制作的PowerTool,其中的周期循环命令方块儿能够比红石时钟更加方便地控制命令循环。

信息

众所周知,短时间内执行大量指令可能会对网络线程造成极大挑战;不过单指令内的粒子数量值大小则不会对服务器产生影响。


在ReplayMod中使用MadParticle

由于ReplayMod的录制原理是记录所有发生的事情并将其重复,即不会记录粒子的位置而是重新生成,故你可能需要特别注意:

  • 如果存在大量的运动粒子,你可能需要在渲染前提高码率。
  • 在录制时为正片素材留下足够的预备时间,这个时间的长度一般由你的粒子具体作用、生成频率、存活时间、运动距离决定。
  • 在渲染前,关闭快速模式,从预留时间处开始播放至接近第一个时间关键帧,然后启动渲染。其目的是避免重新生成世界导致已经出现的粒子消失。
  • 如果你的指令中有随机因素(比如生成坐标误差不为0),replay中的粒子对应的因素会与录制时不同,每次重新replay也不同。

在光影包中使用MadParticle

由于粒子在视觉效果占比的增加,一些问题需要额外注意:

  • 光影包对半透明粒子的处理很有可能不正确或不符合预期。
  • 尤其是在即时录制时:如果你的游戏帧率不太高,建议关闭TAA。TAA在低帧率下导致的拖影会在粒子这种与背景区别较大的物体上尤其明显。这是由TAA的原理决定的。