Модели предметов в руке и на земле для Build 42
Модели предметов в руках и на земле для Build 42
В выбранной части руководства рассматриваются наблюдения автора о моделях предметов, форматах .x и .fbx и ссылках model в скрипте. Практическая цель — различать модель предмета в руке и модель, лежащую на земле. Источник говорит, что проверял shaders, но здесь проверка не повторялась и модели в игре не тестировались.
Что движок делает с моделью
- По утверждению источника, shader предметов использует одну диффузную текстуру, tint и направленный свет; normal map, specular и ambient occlusion отсутствуют. Поэтому мелкие детали нужно нарисовать или запечь в текстуру.
- Нормали вершин влияют на интерполированное освещение: для органических форм нужны плавные нормали, а для плоских граней — раздельные нормали на жёстких рёбрах.
- Используется back-face culling: неправильно ориентированные грани могут выглядеть плоскими или невидимыми с одной стороны.
- Камера находится высоко и далеко, поэтому предмет занимает мало пикселей. Автор советует предпочитать сильный контраст и крупные формы мелким деталям.
В качестве бюджета полигонов, подсчитанного автором по игровым .x-моделям, указаны: около 164 треугольников для чашки, примерно 300 для молотка и 1 838 для всего тела персонажа. Для предмета в руке предлагается ориентир 150–1 500 треугольников. Это примеры, а не универсальные ограничения.
Форматы
- .x (текстовый DirectX): формат, который чаще всего используют моды автора; его можно создавать скриптом Python. Описанная структура включает заголовок шаблонов, Frame с матрицей, Mesh, MeshNormals, MeshMaterialList, MeshTextureCoords (v = 0 сверху) и SkinWeights при наличии костей.
- .fbx: формат экспорта Blender; статья приводит Catimbas как пример использования для одежды с костями.
- Оба формата располагаются в media/models_X/. В игровом скрипте путь указывается без расширения и относительно models_X/.
Для практики автор предлагает открыть models_X/WorldItems/PapaPletoHand.x из Tocomples Food, который, по его словам, содержит 7 148 строк, и найти в нём все блоки.
Ссылка model в скрипте
В файле CompletoItaliano.txt из Tocomples Food источник показывает две декларации model: одну для предмета в руке и другую для предмета на земле. Фрагмент сохранён в исходном виде, включая имена, значения и комментарии:
model CompletoItaliano ← el modelo EN LA MANO
{
mesh = WorldItems/CompletoItalianoHand, ← models_X/WorldItems/CompletoItalianoHand.x
texture = CompletoItaliano, ← textures/CompletoItaliano.png
scale = 1.0,
attachment Bip01_Prop1 ← cómo se agarra con la mano derecha
{
offset = 0.0057 0.0051 0.0246,
rotate = 172.7064 35.0347 178.1460,
scale = 0.7666,
}
attachment Bip01_Prop2 { ... mismo ... } ← mano izquierda
}
model CompletoItalianoGround ← el modelo EN EL SUELO
{
mesh = WorldItems/CompletoItaliano,
texture = CompletoItaliano,
scale = 0.75,
}
В скрипте предмета пример ссылается на обе модели и задаёт анимационные маски; фрагмент также приведён без изменений:
StaticModel = CompleteItaliano.CompletoItaliano,
WorldStaticModel = CompleteItaliano.CompletoItalianoGround,
primaryAnimMask = HoldingUmbrellaRight, ← pose de la mano al sostenerlo
secondaryAnimMask = HoldingUmbrellaLeft,
- Модели для руки и земли различаются: по источнику, модель на земле опирается на y = 0, а точка захвата модели в руке находится в начале координат.
- Bip01_Prop1 и Bip01_Prop2 — кости правой и левой руки. Автор предлагает значения offset/rotate/scale из примера как исходную точку, поскольку, по его словам, они взяты из игровой BeerBottle.x; эти трансформации не универсальны.
- Без primaryAnimMask предмет может оказаться в руке, но рука не примет позу удерживания.
Источник описывает единицы как реальные размеры, ось Y направленной вверх, а Z — вперёд. Также утверждается, что игра переводит модели в левостороннюю систему координат, а импортёр .x инвертирует Z. При зеркальном отображении или перевёрнутых гранях автор советует проверить эти оси. Это нужно перепроверить для конкретной версии и ресурса.
Упражнения 5.1–5.3
Упражнение 5.1 · Прочитать файл .x
Для PapaPletoHand.x из Tocomples Food посчитайте вершины и треугольники, найдите имя текстуры и определите расположение начала координат относительно объекта. Напишите 30-строчный скрипт для автоматизации. Критерий источника: скрипт выдаёт те же числа для трёх разных моделей, что ручной подсчёт для одной из них.
Упражнение 5.2 · Предмет в руке и на земле
Создайте для Sopaipilla простую модель, например диск с бортиком на 100–300 треугольников, отдельную для руки и земли, а также её текстуру. Проверьте, что она лежит на земле, не парит и не проваливается, и что персонаж правильно держит её обеими руками.
Упражнение 5.3 · Намеренно испортить модель
- Измените порядок вершин всех граней на обратный и посмотрите, что произойдёт.
- Задайте scale = 10 модели на земле.
- Удалите primaryAnimMask.
- Укажите StaticModel без имени модуля.
Запишите наблюдаемый симптом и его причину, как в упражнении 2.4.