В игре жестко запрограммированы анимации Minecraft? [закрыто]

12

Я хотел бы знать, как работает система анимации в Minecraft. У меня такое ощущение, что все мобы жестко запрограммированы в игре. Действительно ли Нотч сидел там и вручную создавал матрицы для всех костей анимации?

Мне нравится воссоздавать игры для удовольствия, поэтому я хотел бы знать, как он это сделал. Кроме того, если он действительно жестко их кодирует ... есть ли лучший способ?

radenon
источник
2
почему вы думаете, что он может иметь жестко закодированные анимации?
Ali1S232
Похоже, этот вопрос отвечает только Notch.
MichaelHouse
9
А главное, почему тебя волнует, как это сделал Minecraft? У вас есть идея, как сделать то же самое другим способом?
Тетрад
1
minecraftforum.net/topic/361430-181smp-smart-moving Создатель этого мода может иметь ответ для вас, но анимация - это не та область кода майнкрафта, которую я просматривал ранее.
Джеймс
1
Я просматривал код MCP раньше, и я на 99% уверен, что помню жестко запрограммированные анимации. У меня больше нет Minecraft (или даже Eclipse), чтобы проверить, хотя.
BlueRaja - Дэнни Пфлюгофт

Ответы:

18

Как уже говорили другие, да, модели и анимации жестко запрограммированы. Если вы хотите посмотреть, как это было сделано, перейдите в вики Minecraft Coder Pack .

Пакет был создан, чтобы помочь создателям модов декомпилировать, изменять и перекомпилировать классы Minecraft. Инструкции включены в файлы readme, которые поставляются с пакетом. Пакет содержит сценарии для декомпиляции, перекомпиляции и повторного отображения игры и сервера.

Классы, которые вы хотите посмотреть: ModelBase, ModelBiped и ModelRenderer.

ModelBiped содержит следующие функции, которые делают анимацию гуманоидов:

public void render(Entity entity, float time, float f1, ...)
{
    setRotationAngles(time, f1, ...);
    ...
}

public void setRotationAngles(float time, float f1, ...)
{
    ...
    bipedRightArm.rotateAngleX = MathHelper.cos(time * 0.6662F + 3.141593F) * 2.0F * f1 * 0.5F;
    bipedLeftArm.rotateAngleX = MathHelper.cos(time * 0.6662F) * 2.0F * f1 * 0.5F;
    ...
}

Колебания рук - это просто функции косинуса. Правая рука смещена на PI, чтобы они качались в противоположных направлениях.

график колебаний руки

Я надеюсь, что отвечает на ваш вопрос =)


Если вы хотите получить больше информации о том, как на самом деле модифицировать Minecraft, проверьте этот вопрос:

Как добавить пользовательский моб в Minecraft?

zfedoran
источник
Sis! Евклидово вращение :(.
Джонатан Дикинсон
8

Модели в Minecraft жестко запрограммированы. Не существует понятия иерархии блоков (только список блоков). Это означает, что анимация выполняется либо процедурно (очень простым способом), либо жестко закодированными значениями с интерполяцией.

Существует несколько редакторов для моделей Minecraft, таких как Techne или FMCModeler, которые позволяют импортировать / экспортировать код модели Minecraft для модов, но они не поддерживают анимацию, поскольку она, вероятно, обрабатывается по-разному для каждой модели.

Вот быстрый пример, созданный с помощью FMCModeler:

//variables init:
public ModelRenderer box;

//constructor:
box = new ModelRenderer(0, 0);
box.addBox(0F, 0F, 0F, 16, 16, 16);

//render:
box.render(f5);

Лучший способ сделать это - создать полностью основанный на блоках моделер с некоторыми понятиями иерархии блоков, чтобы вы могли анимировать модели с помощью ключевых кадров и интерполяции.

В настоящее время я создаю инструмент для создания многопользовательских игр, который делает именно это (среди прочего, http://craftstud.io/ ). Это уже позволяет создавать сложные статические текстурированные модели и многое другое находится в пути.

Вот сложная модель, построенная с помощью CraftStudio. Как видите, блоки расположены в виде дерева справа: http://i.stack.imgur.com/FRQeV.png

Каждый блок сериализуется на диск / по сети со следующими данными:

  • Уникальный идентификатор
  • ID родительского узла
  • Положение (влияет на потомков)
  • Масштаб (влияет на потомков)
  • Угол (влияет на потомков)
  • Смещение от точки поворота
  • Размер блока
  • Смещение текстуры блока (смещение координат UV для текстурирования)

Я планирую добавить поддержку анимации, сохранив карту с названиями анимаций в качестве ключа и списком ключевых кадров в качестве значения. Каждый ключевой кадр будет связан с блоком и значением для анимации. Между ключевыми кадрами значения должны быть интерполированы (линейно для положения или сферически для углов, поиск lerp и slerp).

Элизе
источник
0

Начиная с 1.8, блочные модели Minecraft практически не запрограммированы в игре и могут редактироваться с помощью пакетов ресурсов. Система моделирования JSON довольно проста для понимания, и модели существуют в / models / block. Затем вы можете посмотреть на код, чтобы увидеть, как он интерпретирует модели JSON.

трубчатый
источник