跳至主要內容

FreeMinecraftModels 粒子

FreeMinecraftModels 會播放模型 Blockbench 動畫中的粒子關鍵影格,涵蓋自訂實體、道具與手持物品。Java 玩家看到的粒子是由 FMM 在伺服器上模擬、僅存在於封包中的精靈圖。Bedrock 玩家則會看到原始的 Snowstorm 效果,由他們自己的用戶端繪製。

動畫名稱與播放規則請參閱動畫。定位器及其他匯入規範請參閱模型製作說明。

在 Blockbench 中製作​

  1. 在 Blockbench 的粒子編輯器(Snowstorm)中製作效果,並將它儲存為 .json 粒子檔案。
  2. 在模型上效果應該發出的位置加入一個定位器。位於骨骼內的定位器會隨該骨骼的動畫移動,因此放在旋轉手臂上的定位器會沿著手臂的路徑留下軌跡。
  3. 在動畫中開啟 Effects 動畫器,並加入一個粒子關鍵影格。設定效果名稱、定位器與粒子檔案。選填的腳本欄位會在效果開始前以 Molang 執行,例如 v.size = 2;。
  4. 將粒子檔案及其材質 PNG 放在 .bbmodel 旁邊(或旁邊的 particles/ 資料夾中),並與模型一起發布。

沒有指定定位器的關鍵影格會在模型原點播放。指定了模型沒有的定位器的關鍵影格同樣會在原點播放,並記錄一則警告。

FMM 尋找粒子檔案的位置​

Blockbench 只會儲存作者本機上粒子檔案的路徑,因此 FMM 會依檔名搜尋。對於每個效果,它會依下列順序嘗試,先在模型的資料夾中,再到旁邊的 particles/ 資料夾中:

  1. 關鍵影格中儲存的檔名
  2. <effect>.particle.json
  3. <effect>.json

不是粒子檔案的 .json(例如與效果同名的顯示模型)會被略過。若找不到任何檔案,主控台會顯示 Particle effect '<effect>' used by animation '<animation>' in <model> was not found,這些關鍵影格會被捨棄,模型的其餘部分則照常載入。

材質​

粒子檔案的 basic_render_parameters.texture 會依其路徑的最後一段比對:textures/particle/spark 表示 FMM 會尋找 spark.png,先在粒子檔案旁邊,再到模型旁邊,最後到模型的 particles/ 資料夾中。

若 PNG 遺失,Java 玩家會看到依效果顏色著色的純白精靈圖,主控台也會發出警告。Bedrock 會保留原始材質路徑,因此 textures/blocks/wool_colored_white 這類原版 Bedrock 材質在那裡仍然有效。若要在 Java 上呈現相同外觀,請附上名稱相符的 PNG。

效果何時播放​

  • 效果會在其動畫到達關鍵影格時開始。在循環動畫中,關鍵影格會在每次循環時再次觸發,其發射器也會重新開始。
  • 當動畫停止或切換時,循環發射器會停止產生粒子。已在空中的粒子會播放完各自的存活時間。
  • 沒有任何 Java 玩家能看到模型時,發射器會暫停。filmicMode 會讓每個已載入的模型保持可見,因此也會讓它們的粒子持續運作。
  • 移除模型會立即移除其發射器與所有粒子精靈圖,包括死亡、消失、區塊卸載以及 /fmm deleteall。

道具​

道具本身只會播放 idle。請將粒子關鍵影格放在 idle 中,或從道具 Lua 腳本播放含有粒子的動畫:

context.prop:play_animation("sparkle", true, true)

手持物品​

粒子也會在 FMM 自訂物品上播放,也就是透過 /fmm giveitem 或管理員選單取得的物品。物品的模型必須具有粒子關鍵影格。FMM 會讀取其顯示模型(同名 .json)的 thirdperson_righthand 與 thirdperson_lefthand 變換,以找出物品在手中的位置。沒有顯示模型時,Java 會將粒子放在彷彿物品沒有顯示變換的位置,而 Bedrock 則不會有手持物品粒子。

  • 物品拿在任一手中時,FMM 會循環播放模型的 held 動畫。若沒有含粒子關鍵影格的 held 動畫,則依名稱順序使用第一個含有粒子關鍵影格的動畫。
  • 手持物品上的骨骼不會播放動畫。定位器會停留在物品上的靜止位置。
  • Java: 伺服器無法得知玩家處於第一人稱、第三人稱還是前方視角。FMM 會依持有者的身體旋轉、是否潛行、持握物品的手、其 scale 屬性以及顯示模型變換,將粒子放在第三人稱姿勢下物品的尖端。包括持有者在內的每位 Java 玩家都會在這個位置看到粒子。在第一人稱視角下,持有者看到的粒子位於其第三人稱手部的位置,而不是第一人稱的物品上。揮臂與使用物品的姿勢不會被追蹤,因此手臂移動時粒子可能會稍微落後於物品。距離持有者 48 格以內的 Java 玩家可以看到這些粒子。
  • Bedrock: 粒子會加入物品的 Bedrock attachable,由 Bedrock 用戶端在每種視角下繪製在實際的手上。這需要 ResourcePackManager 的 Bedrock 轉換。

Java 渲染​

  • 每個粒子都是一個 item_display 封包實體。它從不存在於世界中,因此其他外掛無法擊中、儲存或移除它。
  • FMM 每 2 tick 移動一次粒子,用戶端會平滑其間的移動。
  • UV 運算式會在載入時取樣,每個效果最多產生 16 種材質變體,而每個變體的每一個翻頁動畫影格都會成為獨立的精靈圖。這些精靈圖會放在資源包的 assets/freeminecraftmodels/items/particle/<model>/<effect>/ 下,其材質位於 textures/entity/fmm_particles/<model>/<effect>.png。FMM 也會寫入 assets/freeminecraftmodels/rspm_item_java_only/particle/<model>/<effect>.json,告知 ResourcePackManager 不要將這些精靈圖物品轉換為 Bedrock 自訂物品。
  • 除非效果具有 minecraft:particle_appearance_lighting,否則粒子會以全亮度渲染。
  • 單一模型上的單一效果最多顯示 maxParticlesPerEmitter 個粒子;若檔案本身的 max_particles 較低,則以該值為準。單一 Java 玩家在所有模型中最多看到 maxParticlesPerViewer 個粒子。超過上限後,該玩家的新粒子會被略過,直到較舊的粒子消失為止。
  • particleEffectsEnabled: false 可在不編輯模型的情況下關閉所有效果。

Java 支援的元件​

元件Java 支援程度
emitter_rate_instant、emitter_rate_steady完整
emitter_lifetime_once、emitter_lifetime_looping、emitter_lifetime_expression完整
emitter_initialization建立時與每次更新的運算式
emitter_local_space位置與旋轉
emitter_shape_point、_sphere、_box、_disc、_custom偏移、半徑、半尺寸、平面法線、surface_only,以及 outwards、inwards 或自訂方向
particle_initialization每次更新與每次渲染的運算式
particle_initial_speed、particle_initial_spin完整
particle_motion_dynamic線性加速度與阻力、旋轉加速度與阻力
particle_lifetime_expressionmax_lifetime 與 expiration_expression
particle_appearance_billboard尺寸、朝向模式、方向與 UV,包括翻頁動畫
particle_appearance_tinting固定顏色、各通道運算式與漸層
particle_appearance_lighting關閉預設的全亮度

其他元件在 Java 上會被忽略,例如 particle_motion_parametric、particle_motion_collision、emitter_rate_manual 與 emitter_shape_entity_aabb。模型載入時,主控台會列出這些元件的名稱。Bedrock 玩家仍會看到完整的效果。

朝向模式會對應到展示實體的看板模式。rotate_xyz、lookat_xyz 與 lookat_direction 會面向鏡頭。rotate_y 與 lookat_y 只繞垂直軸旋轉。direction_x、direction_y、direction_z 以及 emitter_transform_* 模式則依粒子的方向或發射器的旋轉維持固定朝向。

Molang​

運算式支援算術、比較、?:、??、指派與 return。數學函式:

abs、acos、asin、atan、atan2、ceil、clamp、cos、die_roll、die_roll_integer、exp、floor、hermite_blend、lerp、lerprotate、ln、max、min、mod、pow、random、random_integer、round、sin、sqrt、trunc,以及常數 math.pi。

三角函數與 Bedrock 一樣以角度為單位。內建變數:

  • variable.particle_age、variable.particle_lifetime、variable.particle_random_1 至 _4
  • variable.emitter_age、variable.emitter_lifetime、variable.emitter_random_1 至 _4

你在初始化運算式與關鍵影格腳本中自訂的 v. 變數都可以使用,曲線(linear、catmull_rom、bezier、bezier_chain)也一樣。未知的變數與查詢會讀取為 0。

Bedrock​

啟用 sendCustomModelsToBedrockClientsV2 時,Bedrock 套件會將每個效果以 particles/<model>_<effect>.json 攜帶,識別碼為 fmm:<model>_<effect>。套件中也包含粒子材質、幾何骨骼上的定位器,以及 Bedrock 動畫中的粒子關鍵影格。Bedrock 用戶端接著會以原生方式播放效果,包括 Java 略過的元件。

對於手持物品,FMM 會將 assets/freeminecraftmodels/rspm_item_particles/display/<item>.json 寫入其 Java 輸出。ResourcePackManager 在轉換該物品時讀取此檔案,並將定位器與循環粒子動畫加入物品的 attachable。

疑難排解​

Particle effect '<effect>' ... was not found。 FMM 找不到粒子檔案。請將它以 <effect>.json 或 <effect>.particle.json 的名稱放在模型旁邊,或使用關鍵影格中儲存的檔名。請參閱 FMM 尋找粒子檔案的位置。

... uses <components>, which Java players do not see yet。 這只是提示訊息。Java 會播放效果中的其他所有部分,Bedrock 則會播放全部內容。

... uses texture '<path>', which is not next to <file>。 請將材質 PNG 放在粒子檔案旁邊,並以該路徑的最後一段命名。

... follows locator '<name>', which the model does not have。 該定位器已被重新命名或刪除。在關鍵影格指定現有的定位器之前,效果會在模型原點播放。

我的道具粒子從未出現。 道具本身只會播放 idle。請將關鍵影格移到 idle 中,或從腳本播放該動畫。

我的手持物品粒子在第一人稱視角下飄離物品。 這在 Java 上是預期行為。伺服器會將粒子放在第三人稱的手部位置。其他玩家與第三人稱視角會看到粒子位於物品上。

我的手持物品沒有顯示任何粒子。 該物品必須是 FMM 自訂物品(帶有 fmm_item_id),而且其模型的某個動畫必須具有 FMM 找得到檔案的粒子關鍵影格。