Голосование

Как вы оцениваете Смуту?












Оформление



Пользователей
  • Всего: 28871
  • Последний: 123WwW2004
Сейчас на форуме
Пользователи: 2
Гостей: 257
Всего: 259

Голосование

Стала ли, для вас, эта тема:

Полезной
118 (62.8%)
Бесполезной
4 (2.1%)
Познавательной
52 (27.7%)
Просто интересной
14 (7.4%)

Всего голосов: 188

0 Пользователей и 1 Гость просматривают эту тему.

Тема: Вводный курс в моддинг игры Mount & Blade  (Прочитано 102713 раз)

  • Сообщений: 7578
  • За наиболее важные для развития сайта идеи За особо выдающиеся авторские тексты За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов И создали они сайт... Призер конкурса Футболка по версии Всадников
    • Просмотр профиля

Вводный курс в моддинг игры.


В теме «Вводный курс в моддинг игры» мы постарались собрать всю доступную информацию, необходимую для начала освоения модостроения. Хотя информация и носит лишь поверхностный характер, но позволяет понять, что же из себя представляет функционал самой игры и модов к ней. Тема разбита на главы достаточно условно, так как некоторые аспекты неразрывно связаны друг с другом, они объединены в одну главу. Пособие актуально для версии игры Mount&Blade Warband 1.153.


Оглавление:

1. Полезные ссылки
2. Введение
3. Файлы игры
4. Модульная система
5. Модели и текстуры
6. Сцены
7. Глобальная карта
8. Авторы и источники информации

1. Полезные ссылки







2. Введение


Мы постарались написать наиболее полное пособие для новичков, так как многие просто не понимают, что представляет из себя сама структура файлов, используемых в игре, а соответственно, не могут разобраться и в их редактировании. Мы не будем вас учить, как их редактировать, для этого есть специальные уроки и пособия. Мы просто научимся ориентироваться среди них, урокам по ним и программам, с помощью которых и происходит редактирование или чтение оных. И самое главное, это поможет правильно задавать вопросы и понимать, что вам ответили на них. Надеюсь, это сэкономит много нашего и вашего времени. Так как некоторые вопросы вам даже не придёт в голову задавать, а нам не придётся на пальцах объяснять, что к чему. Букав будет много, а параллельных тем не меньше, но прочесть придётся. У вас нет времени читать? Пардон, у нас нет времени отвечать. Давайте уважать труд и время друг друга. Здесь будем стараться объяснить всё на пальцах, где это невозможно, будем вас грузить терминами.

Объяснение построим на описаниях файлов игры. Самую значительную связь между ними мы поясним, но не всё, ибо просто нереально указать все взаимосвязи и хитросплетение их взаимоотношений, не копнув в них очень глубоко.

Начнём с того, что поймём, что же такое игра и как она функционирует. Сама игра (её движок) - это, так сказать, проигрыватель дисков, а диски - это моды. Все текстовые файлы - это, в основном, циферки, которые удобно читать самой игре. Есть ещё модульная система, она позволяет нам писать какие-то команды, а файл .bat преобразует их в циферки в текстовых файлах,  которые и читает игра. Модульная система (модулька) - это набор отдельных файлов, которые не имеют отношения к функционированию самой игры, а лишь позволяют нам её редактировать и потом преобразовать (перевести) нашу работу на язык игры.

В моддинге есть несколько направлений:
- Модульная система и её редактирование с последующим преобразованием. Это направление работы над сценарием всего нашего мода. Под словом “сценарий” здесь надо понимать не только какие-либо действия в игре, но и правильное функционирование самих ресурсов. Как в организме всё состоит из клеток, так и тут, а вот сценарий заставляет действовать их по определённым законам.
- Моделирование и текстурирование.Тут мы создаем ресурсы игры, а именно то, что будет использовать сценарий при отображении на экране.
- Сцены - это как раз сами наши "коробочки", внутри которых всё и происходит.
- Глобальная карта - это тоже, можно сказать, сцена, со ссылками, на те или иные локации (сцены) или действия.
« Последнее редактирование: 27 Августа, 2014, 11:37 от Vanok »
Моя конфигурация:
Нормальная, мне хватает.
  • Сообщений: 983
  • За наиболее важные для развития сайта идеи Выдается модераторам, достигнувшим значимых успехов на своем посту За активный вклад в развитие сайта
    • Просмотр профиля
+8
« Ответ #1 : 28 Мая, 2012, 18:12 »

3. Файлы игры



Файлы корневой папки игры:
 
По умолчанию ~C:\Program Files\Mount&Blade Warband\.

Примечание: в корневой папке игры находятся файлы, которые являются общими для игры и всех модов! То есть эти файлы можно использовать в любом моде, и их редактирование приведет к изменениям во всех модах, которые используют их!


CommonRes - Ресурсы игры. Модели и их характеристики. Структура такова: Файлы brf - это "архивы", в которых хранятся сами модели - меши и их лоды, материалы, анимации, информация о текстурах и шейдерах, и полная информация об их отображении в игре.
Принимаемые форматы ресурсов:
.trf – Текстовые файлы — При загрузке игры автоматически конвертируются в бинарные
.brf – Бинарные файлы — Не требуют конвертации, более быстрая загрузка игры, меньше сжатие (по сравнению с текстовыми файлами)

Data - эта папка хранит в себе несколько файлов, содержащих некоторые данные, используемые игрой.
Перечень файлов:

languages - Папка с языковыми текстовыми файлами, а именно теми, что являются общими для всех модов. Если определенного языка нет в этой папке, в лаунчере для игры мы его не сможем выбрать.

Modules - Тут хранятся моды и ресурсы, используемые ими - это, так сказать, список воспроизведения нашего проигрывателя.

music - ресурсы (файлы) музыки, которые используются в игре. Сама же механика воспроизведения находится в одноименном текстовом файле.

Skins - Файлы Simple Mesh Format. Файлы отображения главной заставки, для разных языков.

Sounds - ресурсы (файлы) звуков (стуки, бряки, крики... ), которые используются в игре, сама механика воспроизведения в текстовом файле.
Принимаемые форматы звука: .mp3, .ogg, .wav.

Textures - Текстуры, или же кожа, всего, что есть в игре. Всё это плоские картинки, в которые потом "заворачиваются"  3D - модели. Формат файлов - .dds, это специальный формат графических файлов. Чтобы его открыть, например, Photoshop'ом, нужен специальный плагин.
Принимаемые форматы текстур: .dds, .tga, .jpg

binkplay.exe - BinkPlayer, проигрыватель, используемый игрой для воспроизведения intro-роликов (paradox и taleworlds) и видео во время игры (последнее только при помощи WSE).
 
bump_shader, myshader, faceshader.pp; earlyz, mb_2a, mb_2в.fxo; fx_configuration.h - Шейдеры и их конфигурации. Используются в трёхмерной графике для задания дополнительных характеристик объектам и особенностей их отображения на экране.

postfx.fx - Этот файл используется для эффектов пост-обработки (например DoF и HDR).

paradox, taleworlds_intro.bik - Начальные видео-заставки игры в формате bik - популярный формат, используемый в основном, в видео играх.

SkinMagic, fmodex.dll - Динамически подключаемые библиотеки для воспроизведения главного меню

rgl_log.txt - Файл регистрации, протокол, журнал или лог (англ. log) — файл с записями о событиях в хронологическом порядке. Ведение протокола, или протоколирование, — хронологическая запись с различной (настраиваемой) степенью детализации сведений о происходящих в системе событиях (ошибки, предупреждения, сообщения), обычно в файл. В абсолютном большинстве современных программ используются текстовые файлы протоколов (одно событие — одна строка), они легко генерируются программой и анализируются человеком. Исследование содержимого файла регистрации ошибок после возникновения неполадок часто позволяет понять их причины.

main - заставка модуля, здесь она представляет собой пустое окошко, с серым фоном, но в каждом модуле может стоять своя картинка, которая отображается при выборе его в лаунчере игры. Также этот файл может использоваться как фон при создании изображения мода.

warband_compatibility - Некое дополнение к module.ini,  в которое вносятся ресурсы для совместимости ИГ и Варбанда (на деле эта совместимость работает плохо)

rgl_config - Ещё один файл, который относится ко всей игре, но он не находится в папке игры. Его местонахождение обычно: C:\Users\<Имя пользователя>\Documents\Mount&Blade Warband\ - это папка, автоматически создаваемая при инсталляции игры, в папке Документов пользователя, под чьим именем производилась установка. Там же находятся папки, куда сохраняются скриншоты из игры, файлы импортированных персонажей... Как таковые параметры не могут, конечно, повлиять только на конкретный мод, они влияют на всю игру, но иногда бывают полезными именно во время разработки модификаций и редактирования этих параметров у себя в игре для удобства разработки. Тут используются как определенные числовые значения для параметра, так и просто значения работы или нет этого параметра: 1- включен, 0 - отключен. В данном файле хранятся установленные параметры игры, т. е если вы выставите в настройках игры с помощью меню, кнопок и слайдеров какое-то значение, оно будет храниться в этом файле.
« Последнее редактирование: 27 Августа, 2014, 11:25 от Vanok »
  • Сообщений: 7578
  • За наиболее важные для развития сайта идеи За особо выдающиеся авторские тексты За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов И создали они сайт... Призер конкурса Футболка по версии Всадников
    • Просмотр профиля
+7
« Ответ #2 : 28 Мая, 2012, 18:15 »
Файлы папки определенного мода на примере Native:

По умолчанию - C:\Program Files\Mount&Blade Warband\Modules\Native

Давайте сразу уясним, что игра читает файлы и сортирует их выбор из разных источников  по "правилам", указанным в файле module.ini в папке мода. Не забываем, что в моде загружаются оба источника информации (мод и сам корень игры). Выбор регламентируется выше указанным файлом. Для всех файлов, не имеющих описания, оно идентично файлам корня игры. Кроме того, если в моде имеются идентичные по названию файлы и папки с файлами из корня игры (например skyboxes.txt в папке Data модуля), то при загрузке файлов игра будет использовать те которые находятся в модуле, а не в корне игры.


Data - Все те же файлы, в Native эта папка  пуста, используются файлы из папки игры.

languages - Папка с языковыми файлами, которые используются в моде.

Music- Музыкальные файлы, которые используются в моде.

Resource-Ресурсы мода, которые будут загружаться именно в этом моде. Описание ресурсов идентично папке CommonRes игры. По ресурсам будет более подробно написано в части вводного курса по моделированию.

SceneObj- Тут находятся сгенерированные в редакторе, встроенном в игру, сцены. Уточню: вид сцен. Сам функционал сцен прописан в текстовом файле. На самом деле там много того, что нам не видно. Это тоже модели, просто они прозрачные. Например, препятствия и пути движения, в виде невидимой разметки. Но это всё модели, поэтому они и тут. Тут находится и координатная привязка объектов внутри нашей "коробочки" сцены.

Sounds- Звуковые файлы, используемые в моде.

Textures- Текстуры объектов, используемые только в этом моде.

Вот мы и добрались до сценария мода. Именно в этих файлах и содержится всё, что запрограммировано в игре.

Текстовые файлы ( *.txt ) -  из этих файлов игра узнаёт, что от неё требуется в той или иной ситуации. Они написаны на языке, максимально понятном для движка игры, и лишь местами содержат слова, понятные человеку. Для работы и творчества человека предназначены файлы модульной системы (см. ниже), производными от которых и являются текстовые файлы.
Итак, давайте сразу договоримся, что описывать большинство этих файлов мы не будем в виду того, что это не актуально, да и практически нереально.  Описание будет только для необходимых для моддинга файлов. И вот почему - они написаны самой игрой и для неё же. Вот она то этот язык знает. Китайский я не учил, но, думаю, тут разобраться нам будет стоить тех же усилий. Теоретически, если править эти файлы, то мы добьёмся результата, так как как раз их-то и читает игра. А не ту ужаснострашнонепонятнуюпорусскиненаписаную модульную систему.  Но на самом деле это не так, проще в 100 раз понять модульку, чем понять язык текстовика. В общем, поверьте тем, кто вам говорит, что глупо править текстовики. Для некоторых правок текстовых файлов есть так сказать переводчики - специальные твиковые программы, которые позволяют довольно просто изменять некоторые параметры напрямую через текстовые файлы. Вот ими и пользуйтесь. Не стоит спрашивать: "а какую мне поправить циферку, чтобы у меня...." Возьмите словарь, если не знаете английский, поскольку большинство таких программ имеет нерусифицированный интерфейс, и воспользуйтесь программами перевода циферек в букавки. Итак, надеюсь, мы договорились! Как править эти циферки более серьёзно, используя модульную систему, мы поговорим и научим это делать, чуть позже.

game_variables - На самом деле этот файл относится ко всей игре. И его функционал недоступен для моддинга. В нем находится презентация игровых окон, которые недоступны из модульной и забиты в движок . По идее, можно изменить внешний вид и расположение кнопок в таких окнах, как окно партии, окно итема, стартовая страница игры, окно загрузки сейвов и т. д.

module. ini- Initialization file. Как мы видим из названия, это файл инициализации (от англ. initialization, инициирование) — создание, активация, подготовка к работе, определение параметров. По другому, это файл конфигурации. В этом файле задаются параметры загрузки ресурсов игры и определяются некоторые общие параметры (переменные), которые задают определённые числовые переменные - определяющие характеристику действия. В некоторых параметрах указаны конкретные числовые значения, где-то указаны переменные, используемые при вычислении, а где-то просто включение или отключение этого параметра путём указания значения: или 0 - выключено, или 1 - включено. Сейчас мы разберёмся, что там внутри этого файла. Сразу замечу что вот этот знак # - знак комментария, определяет игнорирование этой строки ( просто пояснение для нас). Основной частью этого файла являются записи различных параметров вида «имя_параметра = значение».

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

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

variable_uses- числовые значения переменных.
« Последнее редактирование: 23 Июня, 2012, 22:42 от HunterWolf »
Моя конфигурация:
Нормальная, мне хватает.
  • Сообщений: 983
  • За наиболее важные для развития сайта идеи Выдается модераторам, достигнувшим значимых успехов на своем посту За активный вклад в развитие сайта
    • Просмотр профиля
+8
« Ответ #3 : 28 Мая, 2012, 18:16 »

4. Модульная система


Модульная система - это только одна из частей полноценного мода. Она является кодовым «скелетом» мода, без которого невозможно обойтись, именно он и является полноценным сценарием всего, что происходит в игре, и задаёт почти все характеристики объектов в игре.

Модульная система (МС) - это один из основных инструментов моддинга. По сути она представляет собой исходный код всей программной части самого мода, и является каркасом любого мода (продукты жизнедеятельности человека, созданные на основе редактирования текстовиков оными не считаются). В ней содержится вся скриптовая часть и почти все данные, используемые модом (например предметы и их характеристики, и многое другое). Она представляет собой набор скриптов на специально разработанном для моддинга Mount&Blade языке, а также нескольких служебных скриптов на языке Python.

Python - активно развивающийся язык программирования, новые версии (с добавлением/изменением языковых свойств) выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют ANSI, ISO или другие официальные стандарты, их роль выполняет Python, который используется в МС только для перевода кода, написанного на специальном языке МС, в формат текстовых файлов, которые уже используются в игре, то есть Python выполняет роль только компилятора. Вследствие этого, функции которые написаны на Питоне, могут использоваться и работать только во время выполнения процесса компиляции, и в движок игры он не внедрен. Скрипты МС не используются игрой напрямую — это лишь средство для создания текстовых файлов. Эти текстовые файлы, в которые переводятся скрипты МС, представляют собой текстовые документы, заполненные в основном цифрами и иногда — текстовыми строками. Ещё важно понять, что в МС в качестве языка программирования используется вовсе не Python, а собственный самостоятельный язык, созданный и предназначенный только для моддинга Mount&Blade.

Компоненты МС. Файлы МС делятся на нескольких видов:

module_ файлы - файлы, описывающие все объекты, данные и взаимодействия между ними в моде - собственно то, что будет переведено в текстовые файлы.

header_ файлы - файлы, в которых содержатся списки и описания всех операций, констант и других объектов, которые могут использоваться в module_ файлах

process_ файлы - служебные Python'овские скрипты, предназначенные для «компиляции» МС — перевода кода, написанного в module_ файлах в текстовые файлы мода.

ID_ файлы - упорядоченные списки всех объектов, содержащихся в module_ файлах.

variables.txt - текстовый документ, содержащий список всех глобальных переменных, использованных в коде. О нём упомянуто выше, но по умолчанию он находится в папке МС. Так как МС может использоваться для формирования  заново путём компиляции мода. А этот файл не компилируется на пустом месте, поэтому он включен в паку модульной системы, чтобы не нарушать этот принцип.

build_module.bat – исполняемый файл, предназначенный для компиляции МС.

Основная часть МС - то, с чем приходится иметь дело любому модульщику - это module_ файлы. Именно они полностью описывают мод и являются его тем самым «скелетом», и именно в них и пишется весь код. Остальные файлы МС предназначены для правильной компиляции и создания текстовых файлов, а также для использования движком игры. Они не предназначены для редактирования и изменения, поэтому изменять их содержимое строго не рекомендуется.

В модульной системе существует возможность обращаться из одного файла к объектам из другого с помощью специальных приставок, добавляемых перед названием нужного объекта. Таким образом, если нужно, например, в module_mission_templates использовать какую-либо анимацию, то название этой анимации пишется следующим образом: anim_<название анимации из module_animations>.


Формат файлов:
Каждый из module_ файлов на самом деле представляет собой скрипт на языке Python, содержащий только один большой массив, состоящий из огромного количества чисел, констант и строк. Код, написанный на языке МС, является массивом операций, следующих одна за другой, которые при компиляции переводятся в вид числовых кодов. Точно так же все остальные объекты МС также переводятся в числовой вид.
Python сам по себе является просто средством перевода кода на языке МС в текстовые числовые файлы. Также перед компиляцией он проверяет код на ошибки и сообщает о них. Если в коде нет явных синтаксических и логических ошибок, он переводится в числовой вид и записывается в текстовые файлы мода.

Итак, мы уже прочитали, что модульная система - это набор "фраз" на чуждом, новом и непонятном для нас языке. Не стоит расстраиваться. Раз это язык - его просто надо выучить.  А как любой язык, он имеет достаточно отличий от другого, т.е , и это вам скажет любой программист, если вы знаете программирование и владеете Питоном, это не говорит, что модулька для вас открытая книга. А коли так, это означает, что вовсе нам и не надо быть гениями программирования - будем "ботанами" и просто вызубрим и выучим основные правила грамматики и синтаксиса этого языка. В идеале нам нужно научиться ещё и писать на этом языке, а не только читать. Для понимания всего что написано, давайте просто смотреть на коды (в игре) с такого ракурса, что они написаны для глупой машины, которой так же, как и нам, нужно всё показывать на пальцах. На самом деле, именно в таком духе и написан код. Всё расписано и разложено по полочкам, везде есть точная взаимосвязь и простая, очевидная логика.

Не надо прыгать с места в карьер, начать стоит просто с небольшого освоении файлов и записей. Это равносильно тому, как если бы вы поехали учить английский в Англию, не понимая ни одного слова. Стоит сначала освоить хоть пару основных фраз и выучить алфавит.

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

« Последнее редактирование: 27 Августа, 2014, 11:26 от Vanok »
  • Сообщений: 7578
  • За наиболее важные для развития сайта идеи За особо выдающиеся авторские тексты За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов И создали они сайт... Призер конкурса Футболка по версии Всадников
    • Просмотр профиля
+9
« Ответ #4 : 01 Июня, 2012, 18:48 »

5. Модели и текстуры


Модели:

Всё, что мы видим в игре состоит из модели и наложенной на неё текстуры. Что-то зашито в движок игры, что-то можно редактировать: менять или добавлять своё. Начнём с понятия, что такое модель вообще:

3D модель- Трёхмерная графика (3D Graphics, Три измерения изображения, 3 Dimensions, рус. 3 измерения) — раздел компьютерной графики, совокупность приемов и инструментов (как программных, так и аппаратных), предназначенных для изображения объёмных объектов. Три плоскости, три оси позиционирования, вам будет это полезно знать не только в плане моделирования, но в плане модульной системы, так как все предметы так или иначе присутствующие в игре, должны быть позиционированы и у них должны быть координаты нахождения, например тот или иной текст в презентациях. Вообще позиционирование доступно прямо в игре из различных её утилит, кроме позиционирования, возможна и смена размеров отображения различных предметов или целых объектов, но всё также определяется по позициям или осям.
Сами модели находятся в игре в формате brf - это двоичный код, необходимый для чтения этой модели движком игры, но в этом файле храниться не только вид объекта, но и привязка к скелету, определенный ей материал (текстура) и другие параметры характеризующие отображение её, взаимодействие модели в игре. brf - это, можно сказать, архив, а так как это архив, то в нём может быть несколько моделей со своими характеристиками. Сами модели создаются в разных форматах 3D моделирования obj, 3ds, …, а только потом уже переносятся в формат brf.
Сама же модель без характеристик в архиве имеет название Mesh

Теперь поговорим о некоторых особенностях моделей в игре.

Условная классификация:
Условно используемые игрой модели можно разделить на 4 типа, с этим связано различное форматирование, при их конвертировании из двоичного кода:

- Модели оружия, щитов, предметов, строений. Не содержат ничего кроме сведений о геометрии самой модели. Экспортируются в формате OBJ, без привязки к скелету.

- Модели тел, костюмов, обуви, лошадей. Содержат сведения о геометрии, один из двух игровых скелетов и сведения о привязке модели к скелету. Экспортируются в формате SMD.
Скелетная анимация - это один из нескольких видов анимации, используемых в Mount&Blade. Характеризуется тем, что основывается на скелетах и костях.
Скелет (skeleton) — это, в сущности, трехмерная модель, но он имеет большое количество особенностей. Скелет отличается от любой другой модели тем, что он состоит не из вертексов и полигонов, а из костей (bones).
skel_horse — зашитый в движок код, отвечающий за правильное расположение копыт лошади, относительно поверхности земли. Благодаря ему анимация лошади динамически подстраивается под рельеф, из-за чего движения лошади выглядят реалистично даже на склонах и другом сложном рельефе.
Кость (bone) — это отдельный элемент модели, представляющий собой некое тело. Или, скорее, точку. Кость имеет координаты в пространстве и может их менять — проще говоря, кость может двигаться. Это довольно очевидно. Но, кроме этого, кость может поворачиваться по любой из трех осей, несмотря на свою «точечность», что менее очевидно сейчас, но станет гораздо яснее позже.
Кости имеют уникальное свойство связываться друг с другом, образуя цепи. Таким образом, создав набор из таких костей и связав их друг с другом правильным образом, можно получить... некую разветвленную цепь из костей. Эта цепь и называется скелетом. В Mount&Blade существуют два вида скелета - человеческий и лошадиный. Человеческий состоит из 20 костей, лошадиный - из 28.
«Зачем нужны эти скелеты?» - спросите вы? Дело в том, что скелеты, благодаря своей костной структуре, могут используются для создания качественных и реалистичных анимаций. И именно для этого и используются.
Скелетная анимация (skeletal animation) — это набор отдельных 3D моделей, кадров (frames), каждая из которых представляет собой скелет в каком-либо положении. Представьте себе кинопленку, в каждом кадре которой находится изображение. С каждым кадром положение объектов на этом изображении чуть меняется. Так вот — скелетная анимация представляет собой точно такую же кинопленку, в которой тоже есть кадры, и на каждом кадре нарисован скелет с чуть измененным положением костей — чуть подвинутых или чуть повернутых. Мда... в общем, ясно.
Скелетная анимация, раз она представляет из себя последовательность кадров, может проигрываться, как любая пленка. И именно для этого она и используется в игре, и именно благодаря этому происходят практически все действия в игре: люди ходят, бегают, прыгают, машут самым разным оружием, стреляют из лука, скачут на лошади... В общем-то, ВСЁ, что делают в игре человеческие персонажи — это всё скелетная анимация. Кроме того, скелетная анимация также используется и для лошадей — шаг, рысь, галоп, прыжок, вставание на дыбы и всё остальное, что способны делать лошади в игре — это всё также только благодаря скелетной анимации.
Так, ну а теперь, когда вы прониклись важностью темы скелетных анимаций, разберем все это дело с технической стороны.
Как все это происходит? Итак, каждый предмет в игре, имеющий отношение к человеку - оружие, доспехи, щит и т.д. - привязывается к скелету человека. Как именно - то есть, скажем, для каждого доспеха обязательно указывать, что он привязан к костям  в человеческом скелете. Таким образом указывается, что модель доспеха будет использовать те же координаты, что и кости тела во время анимации, а значит, ее положение будет соответствовать положению тела на данном кадре анимации. Проще говоря, привязывая предмет к скелету, мы указываем, какой частью тела персонажа он является. Благодаря этому, все предметы располагаются правильно - шлем на голове, меч в руке, доспехи на туловище и т.д. И во время игры, когда проигрывается та или иная анимация, высчитывается положение каждой кости на данном кадре, и исходя из этого, меняется положение моделей предметов - доспех наклоняется и поворачивается вместе с костями тела, меч движется вместе с костью оружия и т.д.
Одна отдельная скелетная анимация в Mount&Blade - это файл формата .smd. Только в таком виде одна анимация может храниться, редактироваться и сохраняться различными 3D-редакторами, например, 3D Max или Blender. Но,  для использования в игре, отдельные анимации в .smd - формате непригодны. Чтобы игра могла использовать анимацию, ее предварительно нужно положить в .brf - файл в папке Resource, воспринимаемый игрой. Итак, наборы готовых анимации хранятся запакованными в .brf - архивы в папке Resource, отдельные анимации могут выниматься из этих архивов и добавляться в них. В свободном виде, не находясь в .brf - файле, одна отдельная анимация имеет формат .smd.
Анимации в формате .smd могут быть отредактированы или созданы в одном из известных 3D-редакторов: 3D Max или Blender. Правда, для этого нужно будет установить специальные плагины, но сейчас это не так важно. Итак, открыв анимацию в одном из этих редакторов, мы увидим скелет. Этот скелет находится в определенном положении. Кроме этого, присутствует линейка кадров, перемещая которую, можно увидеть положение скелета на каждом кадре анимации. Ну а дальше, в целом, все просто - перемещая или поворачивая отдельные кости скелета на отдельном кадре, мы можем менять положение всего скелета на этом кадре, а значит - менять сам кадр, и значит - менять анимацию. Соответственно, кадры можно добавлять, удалять, вырезать, копировать и вставлять. И вот так, изменяя отдельные кадры, и создают скелетные анимации. После того, как анимация создана, она должна быть снова сохранена в формат .smd. И если анимация готова к использованию в игре — она добавляется в .brf-архив в папке Resource мода.

- Модели рук, перчаток, специфические модели (иконки армий на глобальной карте и т.п.) Содержат вертексную анимацию.
Вертекс - это вершина (в геометрическом смысле). То есть точка, в которой сходятся полигоны.
Вертексная анимация - это когда для каждого последующего кадра полностью трансформируется модель путем перемещения вертексов. Простыми словами это последовательное воспроизведение новых изменённых объектв с заданной последовательностью их смены на последубщий. Это чрезвычайно муторный процесс, но у вертексной анимации тоже есть преимущества - с помощью нее можно анимировать что угодно и как угодно, в то время как возможности скелетной анимации ограничиваются движениями скелета. Экспортируются и храниться в формате MD3 или покадрово, как OBJ, т.е. как отдельные модели. В игре же, как обычно в двоичном коде brf.

- Модели объектов для сцен - здания, деревья и т.п. Отличаются от других моделей тем, что могут иметь более 1 материала. При импорте в брф, эдитор спросит, надо ли разбить базовую модель. Меш разбивается на n частей, где n - число использованных в модели материалов. Такие модели называются мультимешами. В BRF Editor'е можно переключаться в режим показа модели целиком или по частям нажатием на кнопку Multi Mesh.

Текстуры:

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

Текстура(2D)- растровое изображение, накладываемое на поверхность полигона, из которых состоят 3D-модели, для придания ей цвета, окраски или иллюзии рельефа. Понятие «текстура» является одним из столпов 3D-моделирования, поскольку позволяет воспроизвести малые объекты поверхности, создание которых полигонами оказалось бы чрезмерно ресурсоёмким. Например, шрамы на коже, складки на одежде, мелкие камни и прочие предметы на поверхности стен и почвы.
Качество поверхности текстуры определяется текселями — количеством пикселей на минимальную единицу текстуры. Так как сама по себе текстура является изображением, разрешение текстуры и её формат играют большую роль, которая впоследствии сказывается на общем впечатлении от качества графики в 3D-приложении.
Файлы текстур хранятся в формате DDS- изображения, в которых данные хранятся так же, как в видеопамяти (включая мипмэпы). Это позволяет их быстро загружать в игре. В DDS могут храниться объёмные текстуры, куб-мапы и прочие необычные (для графических файлов) вещи.
2D слои в DDS-файле могут храниться в RGBA формате, а могут быть сжаты в форматы DXT1, DXT3, DXT5.

Текстуры так же могут иметь и Мип - уровни - текстурный аналог lod-ов. Находятся в самой текстуре.
Увеличивают расход видеопамяти, но также увеличивают общую скорость рендеринга, подменяя основную текстуру по мере удаления от "камеры".
Без мип-уровней не будет работать настройка качества текстур (она определяет, какой из мип уровней считать основным).

На модель материал ложится по заранее созданной из его модели развёртки, задающей позиционирование.

Внимание парадокс - Игра не использует как таковые текстуры, она использует материал.

Материал определенной модели в свою очередь состоит из:

- Текстуры, используемый им, коих может быть 2.

- Карты нормалей или Normal map или Bump - Это та же развёртка, тоже текстура предмета. Техника заключается в том, что отклонение каждого пикселя от нормали к поверхности просчитываемого объекта смотрится в карте высот (поле высот) и применяется перед обсчётом освещения. Кроме описанной выше техники, называемой Bump mapping, существует ряд альтернатив, также позволяющих придавать рельефность поверхностям. Bump mapping более корректно переводится как «эффект бугристой поверхности». Так же есть и техника Parallax mapping, данная технология также использует карты нормалей, но, в отличие от normal mapping, она реализует не только освещение с учётом рельефа, но и сдвигает координаты диффузной текстуры. Этим достигается наиболее полный эффект рельефа, особенно при взгляде на поверхность под углом.

- Карта спекуляров - с использованием этой карты игра создает блеск на предметах. Specular Map (карта отражения) – текстура (всё таже развёртка), которая показывает способность отражения материала. Specular map не показывает отражения сцены, в которой находится объект, а показывает отражения света падающего на него. Specular Map содержит в себе пиксели в черно-белой цветовой гамме. Чем светлее пиксель, тем больше способность материала отбивать свет и тем ярче на нём блики от света. Соответственно чем темнее пиксель, тем матовее становится материал и теряет своё свойство отражать свет. Требует применения соответствующего шейдера (например, specular_shader).

- Шейдер (англ. Shader) — это программа для одной из ступеней графического конвейера, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.
Программируемые шейдеры гибки и эффективны. Сложные с виду поверхности могут быть визуализированы при помощи простых геометрических форм.  HLSL (High Level Shading Language) - язык программирования шейдеров, чем то похож на Cg, созданный Microsoft-ом, и используется вместе с DirectX. В действительности HLSL был создан двумя корпорациями  Microsoft и nVidia. Это тот язык, что используется в нашем любимом Мибе...
Вертексный шейдер:
Выполняет обработку геометрии - изменяет позицию, текстурные координаты, цвет вершин. Также может выполнять вычислении освещения. Допустимое количество команд может достигать одной-двух сотен.
Пиксельный шейдер:
Выполняет обработку цветовых данных, полученных при прорисовке треугольника. Оперирует с текстурами и цветом. Количество инструкций, значительно ограничено,  к примеру, в версии 1.4 оно не может быть больше 32.
- Материал имеет и другие параметры заданные ему, такие параметры, как прозрачность, наложение освещения на предмет, использование теней, RGB определяют цветность блеска в палитре RGB (красный, зеленый, синий), Envrivo - используется для эффекта зеркальности, в качестве карты можно использовать родную и т.п.

Теперь-то мы можем поговорить и об «объекте» (item, prop, troop) в игре. Мы поняли, что объект состоит из:

- Меш (модель). Причём у одного предмета может быть несколько используемых в игре мешей со своими характеристиками(например меч и ножны, лук и чехол...)

- Материал (см. выше)

- Анимация

- Скелет(для того кому предусмотрен)

- Определённые настройки визуализации

- Параметры, задающие функционал (файлы txt)

Так что усвойте - чтобы добавить объект, надо добавить несколько файлов и записей.
« Последнее редактирование: 27 Августа, 2014, 11:26 от Vanok »
Моя конфигурация:
Нормальная, мне хватает.
  • Сообщений: 2562
  • За регистрацию на форуме не позже декабря 2016 года и не менее 2500 постов
    • Просмотр профиля
    • Портфолио
+9
« Ответ #5 : 01 Июня, 2012, 18:56 »

6. Сцены


Сценой в игре называется любое пространство, где главный герой и всевозможные персонажи ходят, прыгают, дерутся и т.д. Игрок проводит тут львиную долю своего времени, поэтому уметь работать со сценами важно для каждого стоящего мода.
Как бы ни выглядела сцена, всё в ней формируется движком игры за счёт сведений из нескольких источников, и большинство из них можно редактировать. Можно сказать, что это наши механизмы формирования сцен, далее перечислим их в порядке от самых основных к менее очевидным.


Описание в файле scenes.py модульной системы:

Тут мы можем выделить 10 частей:
1 название сцены, добавляя приставку scn_ ,его используют для обращения к сцене из других файлов модульной системы. Также для каждой сцены предусмотрен индивидуальный файл с таки же названием (см. ниже).
2  флаги, подробно расписаны в файле header_scenes.py, если их несколько, то разделяются знаком вертикальной черты. Определяют особенности освещения, использование ландшафта и др.
3 имя меша - обычно тут указывается имя модели помещения, у уличных сцен из-за ненужности такой модели обычно написано "none" (читай - "отсутствует"). Для уличных сцен применяется outer_terrain модель окружения, обычная модель из ресурсов игры, которую можно создать как любой меш (модель).
4 имя колижн-меша, он необходим, чтобы стены, пол и другие части помещение не только выглядели твёрдыми, но и вели себя соответственно. У уличных сцен также "none".
5 первые круглые скобки - минимальная точка координат, дальше которой в сцене нельзя пройти. Это касаемо только сцен без терайна(ладшафта- кода)
6 вторые круглые скобки - максимальная точка координат, дальше которой в сцене нельзя пройти. Обе точки нужны для экономии машинных ресурсов, чтобы компьютер не обрабатывал бесконечное пространство. При изменении сцен стоит помнить, что указываемые здесь координаты должны соответствовать реальным размерам сцены (чтобы персонаж не наталкивался на невидимые стены). Это касаемо только сцен без терайна(ладшафта- кода)
7 уровень воды, как правило, не редактируется.
8 код ландшафта - здесь ноль у интерьерных сцен и длинная последовательность знаков у остальных. Код содержит информацию о размере сцены, типе местности (снег, пустыня, лес), неровностях рельефа, характере растительности, наличии рек. Сам код нужен для чтение движком игры, нам же возможно его сгенерировать, доступной утилитой движка игры- редактором ландшафтов(тераинов)
9 первые квадратные скобки, в нынешних версиях игры не используется, иногда там стоит слово "exit".
10 вторые квадратные скобки, пустые или содержат имена юнитов (но без обычной приставки trp_), к инвентарю которых можно получить доступ в данной сцене. Чаще всего, если тут кто-то и прописан, то это или "сенешаль" (инвентарь игрока-владельца замка), или "бонусный сундук".

Файл сцены находится в папке SceneObj вашего мода (если её нет, скопируйте её из Native), носит имя "название_сцены.sco(файл скомпилированный из разных источников движком игры (Встроенным редактором сцен - ВРС) и содержит самые мелкие подробности о реальном виде вашей сцены. То есть - где и как Вы вручную поменяли ландшафт, разместили различные объекты и растительность (включая их масштаб, углы наклона, ...), нанесли на поверхность земли текстуру песка или камня, покрасили снег в зелёный цвет, проложили АИ-меши, для компьютерных болванчиков...

ВРС - Собственно говоря, это и есть движок игры, такой же компилятор, как и Питон, он просто собирает в одно место информацию из разных файлов и позволяет нам их наглядно редактировать.

AI Mesh - это сеть, указывающая NPC (ботам, т.е всем кем управляет ИИ), где он может пройти, а где нет. Если, какой-нибудь NPC вдруг захотел прогуляться из точки A в точку B, он делает это так: находит кратчайший путь, проверяет, может ли он там пройти, и только потом (о, чудо!) идет. Если Вы построили стену у него на пути, то он врежется в нее и застрянет там навечно. Но если Вы сделаете AI mesh так, чтобы он учитывал эту стену, то NPC не только не врежется, но и обойдет злополучную стену кратчайшим путем
Следует знать, что объекты в файлах сцен запоминаются по названиям, и переименование объектов приведёт к их исчезновению из сцены. Для того, чтобы создать новый файл сцены, достаточно описать его так, как указано в предыдущем абзаце, войти в сцену внутри игры, а потом с помощью встроенного редактора сделать и сохранить хоть какое-то изменение. Например - поставил домик и сразу удалил, а выходя из режима редактирования, подтвердил изменения. В папке SceneObj при этом создаётся новый файл. В описанном примере его размер составит менее 1Кб, какой бы большой ни была сцена. Чем больше изменений в редакторе Вы будете делать, тем сильнее "разжиреет" этот файл.

События (триггеры) в файле module_mission_templates.py.  Чтобы на сцене кипела жизнь, ей должна соответствовать определённая миссия (грубо говоря, сценарий). Вызов сцены в модульной системе сопровождается вызовом миссии (сценария). Далеко не всегда они составляют жёсткие пары. Обычно одна миссия используется для многих однотипных сцен, например, есть 110 деревень, для всех них в мирной ситуации используется миссия "village_center", а при сражении "lead_charge". Другой пример - на сцене Вы размещаете осадную башню, а вот её движение и поведение "актёров" определяется миссией.

Внутриигровые меню в файле module_game_menus.py - для каждой активной партии (т.е. города, отряда, деревни) игра с помощью скриптов определяет, какое именно меню вызвать. Зачастую внутри меню содержатся дополнительные проверки и вычисления, оценивающие игровую ситуацию. Дружественный это замок или враждебный? Соответственно используется либо мирная сцена, либо сцена штурма. Также в меню часто определяются присутствующие на сцене персонажи (стражники, гуляющие местные жители, бандиты). Самым обширным меню обладают города, там можно выбрать переход в одну из нескольких сцен (покои, таверна, улицы...).
Каждый из пунктов меню внутри самой сцены можно продублировать объектами, которые называют "passage". Такой объект в игре проявляет себя надписями типа "Вход в магазин" или "Вход в тюрьму" и  имеет две характеристики, указываемые в окошках Entry No и Menu Item No. В первом мы ставим номер точки входа, на которую хотим отправить игрока, во втором - порядковый номер пункта меню, из которого игра будет узнавать сцену. Причём нумерация начинается с нуля, то есть если приведённый выше пример взят из третьего по счёту пункта меню, то внутри редактора сцен мы поставим пассаж и укажем ему Menu Item No = 2. Игра найдёт этот пункт меню и использует указанные в нём сцену, миссию, выставит персонажей.

Скрипты в module_scripts.py, прежде всего script_game_start, так как он задаёт свойства очень многих игровых объектов. Я не буду рассматривать этот скрипт подробно, приведу в качестве иллюстрации несколько вырванных по-отдельности строк, по которым можно найти некоторые важные блоки в скрипте

Свойства объектов сцены (предметов) в module_scene_props.py.  Это хорошо заметно на примере тех из них, которые описываются не одной строкой, а целой последовательностью. Фактически там содержатся небольшие скрипты, обеспечивающие избирательное поведение предметов, например - факел горит ночью, но не днём; от чучела при ударе летит солома, идёт пыль, раздаётся характерный звук, а в итоге оно падает; с дерева падают сухие листья; из трубы идёт дым. Все эти явления задаются как свойства объектов ещё до помещения их на сцену.

Описание растительности в файле Flora_kinds.py (он не в папке Module_system, а в папке Module_data). Сюда большинство мододелов не залазят, быть может, и Вам не придётся. Файл содержит указания на то, какие растения существуют в игре, сколько у них есть альтернативных вариантов отображения (моделей), на какой местности (степь или лес), игра их будет "высевать", трава это или дерево и насколько часто встречается. В отличие от других файлов указанной папки, файл флоры легко редактируется, но нужно помнить, что большинство меняемых в нём параметров отобразятся на уже готовых сценах. И чтобы ничего потом не переделывать из-за растущих на снегу пальм и торчащих из стражников ёлок, сначала редактируется файл флоры, а потом делаются все сцены, где есть автоматически размещаемая растительность.

Скайбоксы- объект, в трёхмерной графике, играющий роль неба и горизонта. Представляет собой несложную трёхмерную модель (как правило, куб), с внутренней стороны которой натянута текстура неба (так называемая «кубическая текстура»). Обработка трёхмерной графики требует много вычислительной работы, поэтому «честно» просчитывать в играх объекты, находящиеся на горизонте, было бы расточительством. К тому же трёхмерное аппаратное обеспечение имеет Z-буферы, которые отсекают всё, что находится слишком далеко от камеры. Поэтому удалённые объекты изображаются крайне примитивно: в виде куба, шесть граней которого — текстуры неба и горизонта. Если отобразить этот куб так, чтобы камера находилась точно в центре, будет казаться, что через камеру действительно видны небо и горы. Скайбокс всегда следует за камерой, так что изображённые на скайбоксе объекты выглядят удалёнными в бесконечность. Движок отображает скайбокс каждый кадр в первую очередь, отключив Z-буферизацию. Высокие, заметные из любой точки уровня объекты наподобие башен обычно на скайбоксе не рисуют - для них нужна не иллюзия «бесконечной удалённости», а наоборот, определённое положение в пространстве. Источником текстур может быть что угодно: фотография, рисунок или трёхмерный рендер.
В игре скайбоксы представлены в виде меша (модели) с текстурой, сферической формы.
Выбор игрой скайбокса зависят от времени суток, от погодных условий или того и другого. К ним то они и прикреплены. Скайбоксы можно создать или редактировать, заменяя их. Но можно, при работе с модульной системой, задать для каждой сцены (миссии), свои в файле module_mission_templates.

Прочитав, из чего состоит сцена, можно сделать вывод: каждая сцена это определённый механизм, так что, у вас просто не выйдет создать сцену, работая только с одним файлом.


7. Глобальная карта



Глобальная карта - это один из двух вариантов окружения, в котором происходит действие игры. Все время игрок проводит либо на какой-либо сцене, либо на глобальной карте.


Глобальная карта - это игровое окружение во время, когда игрок не находится ни на одной из сцен. А проще говоря - это вот та самая карта всея Кальрадии, с ее замками, деревнями и городами, по которой передвигаются отряд игрока, армии лордов, шайки разбойников и караваны в свободное от сражений время. Глобальная карта- это бинарный файл, преобразованный утилитой (движком игры) из графического 3D.

Глобальная карта включает в себя несколько составляющих:

- Модель рельефа
- Поверхности
- Система координат
- Партии

Рельеф - это внешний вид карты, без каких-либо городов и замков. Фактически это физическая карта местности, Кальрадия, какой она была до того, как в ней появились вегиры со свадами и иже с ними. Для создания модели рельефа обычно используется специализированный редактор карт для Mount&Blade MapEditor, это наиболее удобно. Также можно для этой цели использовать 3DMax или любой другой профессиональный 3D-редактор.
Важно отметить, что карта рельефа - это не только визуальные поднятия и снижения. Это еще и текстуры, поверхности, которыми покрыта карта. И это не просто для визуальной красоты - каждая текстура имеет свои спецификации и особенности. Например, скорость передвижения - она разная у песка, травы, снега и т. д. По текстуре горы передвижение невозможно вообще - это используется для создания недостижимых или малодостижимых участков карты. Если просто сделать возвышение с текстурой травы - независимо от его высоты игрок будет перемещаться по нему с той же скоростью, как и по травянистой равнине. А если на ровном месте поставить пятно из текстуры горы - это место будет непроходимым.

Система координат. Итак, у нас есть заготовка карты. Посмотрим на нее сверху. На что похоже? Правильно, на какой-то разноцветный прямоугольник... А теперь представьте, что на карте размещены города, замки и деревни. Как определить, где именно на карте находится тот или иной город иди замок? Правильно - так же, как это делается на любой географической карте. С помощью «меридиан» и «параллелей». Ведь параллели и меридианы - это обыкновенная система координат... хотя, да, пожалуй, не совсем обыкновенная - это система координат на шаре. Ну а нам с нашей глобальной картой гораздо проще - у нас карта не шарообразная, а, как мы уже заметили выше, прямоугольная, поэтому мы можем просто ввести нормальную стандартную Декартову (прямоугольную) систему координат.
С помощью этого, просто определять точное местоположение любых объектов.
Точнее, вводить нам ничего не надо. Система координат глобальной карты давно уже введена разработчиками, и все объекты на глобальной карте и без нашей помощи давно получили такой параметр как координаты. Как выглядит эта система координат? Посмотрим на карту сверху, повернув север туда, где он должен находиться - вперед. В центре прямоугольника будет начало координат - точка с координатами (0;0). Ось X направлена с запада на восток - то есть слева направо при текущем виде карты. Ось Y – с юга на север (снизу вверх). Таким образом ориентироваться в этой простейшей системе не составляет никакого труда.

Партии - это любые объекты на глобальной карте. Вообще любые. Ну, то есть, кроме тех, что относятся к рельефу карты - например, горы, деревья, реки, озера партиями не являются. Но - партиями являются все отряды:  игрок, лорды, короли, разбойники, крестьяне или торговцы, все населенные пункты - города, замки, деревни, бандитские логова и т. п. То есть, можно сказать, что партии - это все интерактивные объекты  на глобальной карте. Объекты, с которыми игрок может взаимодействовать. И которые, могут взаимодействовать с игроком. И между собой.
Любая партия характеризуется параметром, свойственном партии любого вида - составом. С отрядами и армиями все понятно - каждый отряд включает в себя определенное количество определенных персонажей - воинов. Ну а любой город или замок имеет гарнизон. И любое логово бандитов никогда не бывает пустым - всегда в нем находится большая или маленькая группа разбойников.
Партия - это объект глобальной карты, содержащий список воинов, с которым игрок может взаимодействовать. Взаимодействия с городом и с отрядом лорда принципиально различаются - в первом случае открывается меню города, во втором - окно диалога с лордом. Естественно, у каждой партии есть специальный параметр, отвечающий за тип взаимодействия с данной партией. Этот параметр называется типом партии. Тип партии может быть «город», «замок», «лорд», «логово» и т. д. При взаимодействии игрока с партией дальнейшие действия разворачиваются в зависимости от этого параметра. Все эти параметры, редактируются в модульной системе.
От чего зависит, открывать ли диалог или меню, мы разобрались. Но ведь диалог-то должен быть конкретно с тем лордом, с которым мы встретились. И в меню должно стоять название и описание именно того города, в который мы зашли... Очевидно, что вышеописанных параметров недостаточно. Поэтому у каждой партии помимо всего прочего есть ID (идентификационный номер). ID у каждой партии уникален — то есть не существует двух партий с одинаковым ID. Зная ID партии, мы можем точно определить, о какой именно партии идет речь. В зависимости от ID партии и формируются специфические детали диалога или меню — проверяется ID партии, точно узнается, с какой именно партией взаимодействует игрок... Ну а там уже можно без труда определить все параметры данной партии, и в зависимости от них правильно составить диалог или меню.

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

Поведение партий. Параметр координат есть у любой партии. Даже у статических, таких как города, замки и деревни. Но интереснее изучить партии двигающиеся, такие как отряды лордов, разбойников и т. п. Для чего конкретно могут использоваться координаты в данном случае?
Проверка расстояния. Координаты - единственный способ отследить, насколько далеко друг от друга расположены две данные партии. На проверке расстояния строится практически все поведение партий: таким образом, проверяется, видят ли друг друга данные партии, встретились ли они и т. д.
Выбор пути. Любая карта - это граф.
Граф - В математической теории графов и информатике, граф — это совокупность непустого множества вершин и множества пар вершин (связей между вершинами).
Объекты представляются как вершины, или узлы графа, а связи — как дуги, или рёбра. Для разных областей применения виды графов могут различаться направленностью, ограничениями на количество связей и дополнительными данными о вершинах или рёбрах.
Многие структуры, представляющие практический интерес в математике и информатике, могут быть представлены графами. Объекты представляются как вершины, или узлы графа, а связи — как дуги, или рёбра. Для разных областей применения виды графов могут различаться направленностью, ограничениями на количество связей и дополнительными данными о вершинах или рёбрах.  Т.е. это определённая графическая схема. Где вершины - это пункт назначения, а рёбра - это путь к ним.
И наша глобальная карта не исключение. Вершинами можно назвать все партии - и статические, и динамические, ребрами - прямые пути, соединяющие их. И вот по этим ребрам и двигаются все партии. Все, без исключения. Даже партия игрока движется к указанной цели (даже если это не партия, а просто точка на карте) по кратчайшему пути. Почему партия игрока может ходить к случайно выбранной точке, спросите вы? Все довольно просто - кроме вышеперечисленных у графа карты есть еще одна вершина - точка цели игрока. Это такая же вершина, как и любая партия, и к ней также проводятся ребра. М-да... Понимаю, что объяснить это непросто, а понять еще сложнее, но вы все-таки попробуйте. На самом деле все довольно просто и очевидно. Все партии двигаются по кратчайшим путям, представляющим собой отрезки прямых. Или ломаные, составленные из нескольких отрезков, в случаи, если на пути встречается препятствие, которое нужно обогнуть. Любую прямую на координатной плоскости можно описать одним линейным уравнением - это известно любому школьнику. Отрезок, соответственно, тоже. И именно так и задаются пути партий - линейными кусочно-заданными функциями, описывающими отрезки, ведущие от точки начала движения к точке конца. И как раз здесь-то без координат не обойтись вообще никак. По понятным причинам. Поэтому без координат было бы невозможно в принципе движение партий.
Патрулирование. Патрулирование приведено как пример движения партии следующего вида: задается какой-либо один конкретный объект. Пока неважно как задается, пусть хоть с помощью ID. И нам нужно обеспечить, чтобы партия постоянно двигалась в окрестностях этого объекта, не удаляясь от него на расстояние, больше заданного. Очевидно, что для этого на необходимо мысленно очертить круг с центром в искомом объекте и радиусом, равным данному расстоянию, и для движения партии все время выбирать случайную координату внутри его. Так, все-таки промелькнуло слово «координата», ну да ладно. Думаю, вы и сами догадались, что выполнить подобную задачу без координат невозможно. А с координатами это делается проще простого - просто нужно выбирать случайную точку так, чтобы расстояние от нее до центра было меньше или равно заданному расстоянию.

Да, а вы как думали? Это внешне игра выглядит так просто и красиво. За всеми этими удобностями и красивостями на самом деле стоит наисуровейший математический аппарат, и это еще отнюдь не самое сложное. Но моддеру, со всем этим, дела иметь практически не придется. Это все делает движок игры, к которому моддер отношения не имеет. Поэтому успокойтесь и вздохните глубже — все очень просто, всё, что вам нужно - это только задавать координаты, радиусы и поведение, остальное будет делать движок.
« Последнее редактирование: 27 Августа, 2014, 11:30 от Vanok »
  • Сообщений: 1697
  • За особо выдающиеся авторские тексты За активную деятельность, связанную с публикациями и помощью другим посетителям
    • Просмотр профиля
+7
« Ответ #6 : 01 Июня, 2012, 19:00 »

8. Авторы и источники информации



Авторы:

Гильдия модостроителей "Всадников Кальрадии":
Основные: HunterWolf, Romitas, Dargor, Leon473, Rongar, Легионер, FinGall.

Благодарности:
Caba`drin, Lumos, Swyter и многим другим, кто писал различные пособия и пояснения на форуме TaleWorlds.

Источники информации:
Различные форумы и сайты, посвещённые компьютерным играм и в частности игре Mount&Blade. Всемогущая Википедия и Великий и Ужасный Google Search.
« Последнее редактирование: 27 Августа, 2014, 11:26 от Vanok »
  • Ник в M&B: Fin___Gall
  • Сообщений: 7578
  • За наиболее важные для развития сайта идеи За особо выдающиеся авторские тексты За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов И создали они сайт... Призер конкурса Футболка по версии Всадников
    • Просмотр профиля
+8
« Ответ #7 : 23 Июня, 2012, 10:37 »
Обратите ваше внимание!!!

Тема не для вопросов и ответов, всё это вы можете сделать воспользовавшись ссылками из первого сообщения. Проявите сознательность. Не загромождайте тему, многие труженики потратили много времени и сил на её создание.

В теме возможно написать ваше мнение по ней, указать на неточности, в которых вы уверены на 100%. Предложить дополнить её, учитывая цели темы и её содержание. Если есть желание высказать благодарность людям создавшим ёё.
Самое главное вы можете помочь сделать её полной. Некоторые моменты не дописаны, они выделены, если вы точно знаете их значения, пишите они будут добавлены в тему.


Ещё раз спасибо за понимание. Надеемся, что тема будет вам полезна.

Гильдия модостроителей "Всадников Кальрадии"
« Последнее редактирование: 23 Июня, 2012, 10:42 от HunterWolf »
Моя конфигурация:
Нормальная, мне хватает.

СиЧЪ Total War СиЧЪ Total War
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.
Сайт работает на быстром VPS/VDS хостинге от FASTVPS


Powered by SMF 2.0 | SMF © Simple Machines LLC