Zum Hauptinhalt springen

FreeMinecraftModels Partikel

FreeMinecraftModels spielt die Partikel-Keyframes in den Blockbench-Animationen eines Modells ab. Das gilt für benutzerdefinierte Entitäten, Props und gehaltene Items. Java-Spieler sehen die Partikel als rein paketbasierte Sprites, die FMM auf dem Server simuliert. Bedrock-Spieler erhalten den ursprünglichen Snowstorm-Effekt, den ihr eigener Client zeichnet.

Animationsnamen und Wiedergaberegeln findest du unter Animationen. Locators und den Rest des Import-Vertrags beschreiben die Hinweise zur Modellerstellung.

Erstellung in Blockbench​

  1. Erstelle den Effekt im Partikel-Editor von Blockbench (Snowstorm) und speichere ihn als .json-Partikeldatei.
  2. Füge dem Modell einen Locator an der Stelle hinzu, von der der Effekt ausgehen soll. Ein Locator innerhalb eines Bones bewegt sich mit der Animation dieses Bones, ein Locator an einem rotierenden Arm hinterlässt also eine Spur entlang der Bahn des Arms.
  3. Öffne in einer Animation den Animator Effects und füge einen Partikel-Keyframe hinzu. Lege den Effektnamen, den Locator und die Partikeldatei fest. Das optionale Skriptfeld wird als Molang ausgeführt, bevor der Effekt startet, zum Beispiel v.size = 2;.
  4. Lege die Partikeldatei und ihre Textur-PNG neben die .bbmodel (oder in einen particles/-Ordner daneben) und liefere sie mit dem Modell aus.

Ein Keyframe ohne Locator wird am Ursprung des Modells abgespielt. Ein Keyframe, der einen Locator nennt, den das Modell nicht hat, wird ebenfalls am Ursprung abgespielt und protokolliert eine Warnung.

Wo FMM Partikeldateien findet​

Blockbench speichert nur den lokalen Pfad des Autors zur Partikeldatei, daher sucht FMM nach dem Dateinamen. Für jeden Effekt probiert es in dieser Reihenfolge, zuerst im Ordner des Modells und dann in einem particles/-Ordner daneben:

  1. Den im Keyframe gespeicherten Dateinamen
  2. <effect>.particle.json
  3. <effect>.json

Eine .json, die keine Partikeldatei ist (zum Beispiel ein Display-Modell mit demselben Namen wie der Effekt), wird übersprungen. Wird nichts gefunden, meldet die Konsole Particle effect '<effect>' used by animation '<animation>' in <model> was not found, diese Keyframes werden verworfen und der Rest des Modells lädt normal.

Texturen​

basic_render_parameters.texture der Partikeldatei wird anhand seines letzten Pfadsegments zugeordnet: Bei textures/particle/spark sucht FMM nach spark.png, zuerst neben der Partikeldatei, dann neben dem Modell und dann im particles/-Ordner des Modells.

Fehlt die PNG, sehen Java-Spieler einfache weiße Sprites, die mit der Farbe des Effekts eingefärbt sind, und die Konsole gibt eine Warnung aus. Bedrock behält den ursprünglichen Texturpfad, eine Vanilla-Bedrock-Textur wie textures/blocks/wool_colored_white funktioniert dort also weiterhin. Liefere eine PNG unter dem passenden Namen mit, um auf Java dasselbe Aussehen zu erhalten.

Wann Effekte abgespielt werden​

  • Ein Effekt startet, wenn seine Animation den Keyframe erreicht. In einer geloopten Animation wird der Keyframe bei jedem Durchlauf erneut ausgelöst, und sein Emitter startet neu.
  • Stoppt oder wechselt die Animation, hören geloopte Emitter auf, Partikel zu erzeugen. Partikel, die bereits in der Luft sind, laufen bis zum Ende ihrer Lebensdauer weiter.
  • Emitter pausieren, solange kein Java-Spieler das Modell sehen kann. filmicMode hält jedes geladene Modell sichtbar und lässt damit auch dessen Partikel weiterlaufen.
  • Das Entfernen eines Modells entfernt sofort seine Emitter und jedes Partikel-Sprite. Das gilt auch für Tod, Despawn, das Entladen eines Chunks und /fmm deleteall.

Props​

Ein Prop spielt von sich aus nur idle ab. Lege die Partikel-Keyframes in idle oder spiele die Animation, die sie enthält, über ein Lua-Prop-Skript ab:

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

Gehaltene Items​

Partikel werden auch auf benutzerdefinierten FMM-Items abgespielt, also auf Items, die über /fmm giveitem oder das Admin-Menü ausgegeben werden. Das Modell des Items muss Partikel-Keyframes haben. FMM liest die Transformationen thirdperson_righthand und thirdperson_lefthand seines Display-Modells (die begleitende .json), um festzustellen, wo das Item in der Hand liegt. Ohne Display-Modell platziert Java die Partikel so, als hätte das Item keine Display-Transformation, und Bedrock erhält keine Partikel für gehaltene Items.

  • FMM spielt die held-Animation des Modells in einer Schleife ab, solange sich das Item in einer der beiden Hände befindet. Gibt es keine held-Animation mit Partikel-Keyframes, verwendet FMM die nach Namen erste Animation, die welche hat.
  • Bones werden bei einem gehaltenen Item nicht animiert. Locators bleiben am Item in ihrer Ruheposition.
  • Java: Der Server kann nicht wissen, ob ein Spieler in der Ego-Perspektive, in der Third-Person-Perspektive oder mit der Frontkamera spielt. FMM platziert die Partikel an der Spitze des Items in der Third-Person-Pose, ausgehend von der Körperrotation des Trägers, vom Schleichen, von der Hand, die das Item hält, von seinem scale-Attribut und von den Transformationen des Display-Modells. Jeder Java-Spieler, einschließlich des Trägers, sieht sie an dieser einen Position. In der Ego-Perspektive sieht der Träger sie dort, wo seine Third-Person-Hand ist, nicht am Item in der Ego-Ansicht. Armschwünge und Benutzungsposen werden nicht verfolgt, daher können die Partikel dem Item leicht hinterherziehen, während sich der Arm bewegt. Java-Spieler im Umkreis von 48 Blöcken um den Träger sehen die Partikel.
  • Bedrock: Die Partikel werden dem Bedrock-Attachable des Items hinzugefügt, und der Bedrock-Client zeichnet sie in jeder Kameraansicht an der echten Hand. Dafür ist die Bedrock-Konvertierung von ResourcePackManager erforderlich.

Java-Rendering​

  • Jeder Partikel ist eine item_display-Paket-Entität. Er existiert nie in der Welt, daher können andere Plugins ihn weder treffen, noch speichern, noch entfernen.
  • FMM bewegt Partikel alle 2 Ticks, und der Client glättet die Bewegung dazwischen.
  • UV-Ausdrücke werden beim Laden in höchstens 16 Texturvarianten pro Effekt abgetastet, und jedes Flipbook-Frame jeder Variante wird zu einem eigenen Sprite. Diese Sprites kommen unter assets/freeminecraftmodels/items/particle/<model>/<effect>/ ins Ressourcenpaket, ihre Textur unter textures/entity/fmm_particles/<model>/<effect>.png. FMM schreibt außerdem assets/freeminecraftmodels/rspm_item_java_only/particle/<model>/<effect>.json, das ResourcePackManager mitteilt, die Sprite-Items nicht in benutzerdefinierte Bedrock-Items umzuwandeln.
  • Partikel werden mit voller Helligkeit gerendert, sofern der Effekt nicht minecraft:particle_appearance_lighting hat.
  • Ein Effekt auf einem Modell zeigt höchstens maxParticlesPerEmitter Partikel an, oder das eigene max_particles der Datei, wenn dieses niedriger ist. Einem Java-Spieler werden über alle Modelle hinweg höchstens maxParticlesPerViewer Partikel angezeigt. Oberhalb dieser Grenze werden neue Partikel für diesen Spieler übersprungen, bis ältere verschwinden.
  • particleEffectsEnabled: false schaltet jeden Effekt ab, ohne Modelle zu bearbeiten.

Von Java unterstützte Komponenten​

KomponenteJava-Unterstützung
emitter_rate_instant, emitter_rate_steadyVollständig
emitter_lifetime_once, emitter_lifetime_looping, emitter_lifetime_expressionVollständig
emitter_initializationErstellungs- und Update-Ausdrücke
emitter_local_spacePosition und Rotation
emitter_shape_point, _sphere, _box, _disc, _customVersatz, Radius, halbe Abmessungen, Ebenennormale, surface_only sowie Richtung outwards, inwards oder benutzerdefiniert
particle_initializationUpdate- und Render-Ausdrücke
particle_initial_speed, particle_initial_spinVollständig
particle_motion_dynamicLineare Beschleunigung und Luftwiderstand, Rotationsbeschleunigung und Rotationswiderstand
particle_lifetime_expressionmax_lifetime und expiration_expression
particle_appearance_billboardGröße, Ausrichtungsmodus, Richtung und UV, einschließlich Flipbooks
particle_appearance_tintingFeste Farben, Ausdrücke pro Kanal und Farbverläufe
particle_appearance_lightingSchaltet die standardmäßige volle Helligkeit ab

Andere Komponenten werden auf Java ignoriert, zum Beispiel particle_motion_parametric, particle_motion_collision, emitter_rate_manual und emitter_shape_entity_aabb. Die Konsole listet sie beim Laden des Modells namentlich auf. Bedrock-Spieler sehen weiterhin den vollständigen Effekt.

Ausrichtungsmodi werden auf Billboards von Display-Entitäten abgebildet. rotate_xyz, lookat_xyz und lookat_direction sind zur Kamera ausgerichtet. rotate_y und lookat_y drehen sich nur um die vertikale Achse. direction_x, direction_y, direction_z und die emitter_transform_*-Modi behalten eine feste Ausrichtung aus der Richtung des Partikels oder der Rotation des Emitters.

Molang​

Ausdrücke unterstützen Arithmetik, Vergleiche, ?:, ??, Zuweisungen und return. Mathematische Funktionen:

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 sowie die Konstante math.pi.

Trigonometrie arbeitet wie bei Bedrock in Grad. Eingebaute Variablen:

  • variable.particle_age, variable.particle_lifetime, variable.particle_random_1 bis _4
  • variable.emitter_age, variable.emitter_lifetime, variable.emitter_random_1 bis _4

Eigene v.-Variablen aus Initialisierungsausdrücken und Keyframe-Skripten funktionieren, ebenso Kurven (linear, catmull_rom, bezier, bezier_chain). Unbekannte Variablen und Queries werden als 0 gelesen.

Bedrock​

Ist sendCustomModelsToBedrockClientsV2 aktiviert, enthält das Bedrock-Bundle jeden Effekt als particles/<model>_<effect>.json mit dem Bezeichner fmm:<model>_<effect>. Es enthält außerdem die Partikeltextur, die Locators an den Geometrie-Bones und die Partikel-Keyframes in den Bedrock-Animationen. Bedrock-Clients spielen den Effekt dann nativ ab, einschließlich der Komponenten, die Java überspringt.

Für gehaltene Items schreibt FMM assets/freeminecraftmodels/rspm_item_particles/display/<item>.json in seine Java-Ausgabe. ResourcePackManager liest diese Datei beim Konvertieren des Items und fügt dem Attachable des Items die Locators und eine geloopte Partikelanimation hinzu.

Fehlerbehebung​

Particle effect '<effect>' ... was not found. FMM konnte die Partikeldatei nicht finden. Lege sie als <effect>.json oder <effect>.particle.json neben das Modell oder unter dem im Keyframe gespeicherten Dateinamen ab. Siehe Wo FMM Partikeldateien findet.

... uses <components>, which Java players do not see yet. Das ist nur eine Information. Java spielt alles andere im Effekt ab, und Bedrock spielt ihn vollständig ab.

... uses texture '<path>', which is not next to <file>. Lege die Textur-PNG neben die Partikeldatei und benenne sie nach dem letzten Segment dieses Pfads.

... follows locator '<name>', which the model does not have. Der Locator wurde umbenannt oder gelöscht. Der Effekt wird am Ursprung des Modells abgespielt, bis der Keyframe einen vorhandenen Locator nennt.

Die Partikel meines Props erscheinen nie. Props spielen von sich aus nur idle ab. Verschiebe die Keyframes nach idle oder spiele die Animation über ein Skript ab.

Die Partikel meines gehaltenen Items schweben in der Ego-Perspektive vom Item weg. Das ist auf Java zu erwarten. Der Server platziert sie an der Third-Person-Hand. Andere Spieler und Third-Person-Ansichten sehen sie am Item.

Mein gehaltenes Item zeigt keine Partikel. Das Item muss ein benutzerdefiniertes FMM-Item sein (es trägt fmm_item_id), und eine der Animationen seines Modells muss Partikel-Keyframes haben, deren Dateien FMM gefunden hat.