Частицы FreeMinecraftModels
FreeMinecraftModels воспроизводит ключевые кадры частиц из анимаций модели Blockbench. Это относится к пользовательским сущностям, реквизиту и предметам в руке. Игроки Java видят частицы как спрайты, существующие только в пакетах, которые FMM симулирует на сервере. Игроки Bedrock получают исходный эффект Snowstorm, который отрисовывает их собственный клиент.
Имена анимаций и правила воспроизведения описаны в разделе Анимации. О локаторах и остальных требованиях импорта см. Заметки по созданию моделей.
Создание в Blockbench
- Создайте эффект в редакторе частиц Blockbench (Snowstorm) и сохраните его как файл частиц
.json. - Добавьте в модель локатор в том месте, откуда должен исходить эффект. Локатор внутри кости движется вместе с анимацией этой кости, поэтому локатор на вращающейся руке оставляет след вдоль её траектории.
- В анимации откройте аниматор Effects и добавьте ключевой кадр particle. Укажите имя эффекта, локатор и файл частиц. Необязательное поле скрипта выполняется как Molang перед запуском эффекта, например
v.size = 2;. - Положите файл частиц и PNG его текстуры рядом с
.bbmodel(или в папкуparticles/рядом с ним) и поставляйте их вместе с моделью.
Ключевой кадр без локатора воспроизводится в начале координат модели. Ключевой кадр, указывающий на локатор, которого нет в модели, тоже воспроизводится в начале координат и записывает предупреждение в журнал.
Где FMM ищет файлы частиц
Blockbench сохраняет только локальный путь автора к файлу частиц, поэтому FMM ищет по имени файла. Для каждого эффекта он пробует по порядку следующие варианты — сначала в папке модели, затем в папке particles/ рядом с ней:
- Имя файла, сохранённое в ключевом кадре
<effect>.particle.json<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 сохраняет исходный путь текстуры, поэтому ванильная текстура Bedrock, например textures/blocks/wool_colored_white, там по-прежнему работает. Чтобы на Java был тот же вид, поставляйте PNG с соответствующим именем.
Когда воспроизводятся эффекты
- Эффект запускается, когда его анимация доходит до ключевого кадра. В зацикленной анимации ключевой кадр срабатывает на каждом цикле, и его эмиттер перезапускается.
- Когда анимация останавливается или сменяется, зацикленные эмиттеры перестают создавать частицы. Частицы, уже находящиеся в воздухе, доживают свой срок.
- Эмиттеры приостанавливаются, пока ни один игрок Java не видит модель.
filmicModeсохраняет видимость всех загруженных моделей, поэтому их частицы тоже продолжают работать. - Удаление модели сразу удаляет её эмиттеры и все спрайты частиц. Это касается смерти, деспавна, выгрузки чанка и
/fmm deleteall.
Реквизит
Реквизит сам по себе воспроизводит только idle. Поместите ключевые кадры частиц в idle или запускайте анимацию с ними из Lua-скрипта реквизита:
context.prop:play_animation("sparkle", true, true)
Предметы в руке
Частицы также воспроизводятся на пользовательских предметах FMM, то есть на предметах, выданных через /fmm giveitem или меню администратора. В модели предмета должны быть ключевые кадры частиц. FMM читает преобразования thirdperson_righthand и thirdperson_lefthand его модели отображения (сопутствующего .json), чтобы определить, где предмет находится в руке. Без модели отображения Java размещает частицы так, будто у предмета нет преобразования отображения, а Bedrock не получает частиц для предмета в руке.
- FMM циклически воспроизводит анимацию модели
held, пока предмет находится в любой руке. Если анимацииheldс ключевыми кадрами частиц нет, используется первая по имени анимация, в которой они есть. - Кости на предмете в руке не анимируются. Локаторы остаются на предмете в положении покоя.
- Java: сервер не может знать, находится ли игрок от первого лица, от третьего лица или в режиме фронтальной камеры. FMM размещает частицы на кончике предмета в позе от третьего лица, исходя из поворота тела держащего, приседания, руки, в которой находится предмет, его атрибута
scaleи преобразований модели отображения. Все игроки Java, включая держащего, видят частицы в этой одной позиции. От первого лица держащий видит их там, где находится его рука в виде от третьего лица, а не на предмете в виде от первого лица. Взмахи руки и позы использования предмета не отслеживаются, поэтому при движении руки частицы могут немного отставать от предмета. Частицы видят игроки Java в пределах 48 блоков от держащего. - Bedrock: частицы добавляются в attachable предмета для Bedrock, и клиент Bedrock отрисовывает их на настоящей руке при любом виде камеры. Для этого нужна конвертация Bedrock в ResourcePackManager.
Отрисовка на Java
- Каждая частица — это пакетная сущность
item_display. Она никогда не существует в мире, поэтому другие плагины не могут её ударить, сохранить или удалить. - FMM перемещает частицы каждые 2 тика, а клиент сглаживает движение между ними.
- UV-выражения при загрузке сэмплируются максимум в 16 вариантов текстуры на эффект, и каждый кадр flipbook каждого варианта становится отдельным спрайтом. Эти спрайты попадают в ресурс-пак в
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_expression | max_lifetime и expiration_expression |
particle_appearance_billboard | Размер, режим ориентации, направление и UV, включая flipbook |
particle_appearance_tinting | Фиксированные цвета, выражения по каналам и градиенты |
particle_appearance_lighting | Отключает полную яркость по умолчанию |
Другие компоненты на Java игнорируются, например particle_motion_parametric, particle_motion_collision, emitter_rate_manual и emitter_shape_entity_aabb. Консоль перечисляет их по именам при загрузке модели. Игроки Bedrock по-прежнему видят эффект полностью.
Режимы ориентации отображаются на billboard display-сущностей. 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–_4variable.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 нашёл.