FG
Fable: Russian Community

Изменение ландшафта и визуальное расширение локаций
Авторы статьи: Torionel и Никита Асыков

Данная статья стала результатом длительных исследований, проведённых в рамках проекта "FRC Research". Долгое время сама возможность менять ландшафт отвергалась как ненаучная (во многом благодаря уверенности в этом иностранных моддеров). Что касается второй идеи - визуального расширения локаций, то можно сказать, что до сих пор (т.е. до начала разработки в FRC глобального мода "Project Ego Mod") в этом не было особой необходимости.

Таким образом, практические потребности заставили нас пересмотреть теорию. Сейчас, в 2017 году, мы подошли к осознанию, что моддинг почвы и визуальное расширение локаций в Fable: The Lost Chapters возможны.

Две данные темы неслучайно оказались в одной статье. Пойдём же от простого к сложному...

Зачем расширять локации и менять почву

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

Визуальное расширение локаций

Визуальное расширение локации - это увеличение пространства, которое видно из локации, не за счёт объединения с другими локации.

Ещё раз: в данной статье речь идёт о расширении конкретной локации, а не об объединении различных локаций (условимся, что объединение уровней сейчас не подпадает под термин "расширение", тем более что про него есть отдельная статья).

Расширение локации так или иначе предполагает изменение ландшафта - визуальное или реальное, с 3D-моделированием или без него (без - это простой способ, "с" - это сложный способ. Но реальный).

Функция расширения локаций главным образом состоит в создании впечатления, что локация не такая, как в оригинале, или что она больше, чем есть на самом деле.

В оригинальной игре локация всегда "такая, как в оригинале", а для создания впечатления используются уровни-филлеры (Filler, англ. "заполнитель"), по которым нельзя ходить и которые просто видно из основных локаций, по которым как раз можно ходить. Конечно же, заполнители можно переделать в часть основной локации (см. "объединение"), но главное открытие состоит в том, что визуальное расширение возможно и без филлеров, в пределах одного .tng-файла! (А филлеры оставим для чего-нибудь другого.)

Собственно способ

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

Комбинированные варианты: несколько уровней надстроенной почвы (в лежащих ниже можно создавать помещения и подземелья), надстройка и визуальное расширение, уменьшение локации, визуальное расширение и филлеры.

При этом у нас есть ряд проблем и ограничений.

Проблемы и ограничения расширения локаций

  1. Мы не можем удалить старый ландшафт. Он всегда будет внизу.
  2. Как правило, требуется, чтобы объект, выходящий за границу локации, касался её или хотя бы кромкой нависал над ней. Другие объекты, находящиеся на этом объекте, не обязаны касаться локации или нависать над ней.
  3. Мы не можем ходить по участкам, которые выходят за "естественную" границу локации (т.е. за линией горизонта).
  4. Часто требуется изменять дальность прорисовки (рендера), так как в FTLC при удалении от объекта он перестает отображаться или отображается иначе.
  5. Если в локации будет рендериться слишком много объектов (когда вы творите, как обкуренный), то могут начаться различные сложности: от более частых вылетов CBox'а до полной невозможности посещения локации.
  6. Освещение в игре также не играет нам на руку. Для больших локаций потребуется установить ясную погоду, чтобы игроки могли разглядеть всё великолепие расширенной локации.

Изменение ландшафта

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

Изменение ландшафта используется для "внутреннего реального" и "внешнего визуального" видов расширения локаций.

Вид почвы зависит всего лишь от текстуры, наложенной на модель почвы (эти текстуры находятся в файле textures.big, и вы в любой момент можете с ними ознакомиться в этой раздаче или прямо в своей программе для моддинга).

Виды изменения ландшафта

Для изменения ландшафта у нас есть 2 способа:

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

Впоследствии полученные куски земли (или целиковый ландшафт, если у вас хватит терпения на его моделирование) вставляются в нужное место в локации.

Далее разбираем оба способа более подробно.

Новый ландшафт с помощью игровых объектов

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

Естественно, моддеры не используют для почвы исходный объект. Напротив, в Object Builder в CBox создаётся новый объект на базе исходного (включая модель), затем в модели указываются id'ы текстуры и физики.

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

Минус в том, что один кусок фактически (с точки зрения 3D-моделирования) является отдельным полигоном, на который накладывается ровно 1 текстура. Используя игровые объекты для почвы, мы почти лишены возможности менять размер полигонов, а значит, страдает качество графики, появляется "мыло". Кроме того, не всегда получается ровно состыковать куски (это просто не видно, но будет чувствоваться, когда вы попытаетесь пройтись по ним). Это связано с физикой (см. ниже).

Новый ландшафт с помощью 3D-моделирования

Инструменты 3D-моделирования позволяют создавать совершенно новый ландшафт. Для этих целей (в случае с FTLC) мы рекомендуем 3ds Max 2015.

Почему не самую последнюю версию? Дело в том, что модели в Fable имеют формат ".x" (от DirectX), и 3ds Max не понимает этот формат без специального плагина "XPorter". Последняя версия этого плагина совместима только с 3ds Max 2015 (скажем спасибо, что не с 2009).

Важные технические требования: нежелательно, чтобы размер модели почвы для Fable превышал 64х64 полигонов (количество выявлено эмпирическим путём). Разрешение текстур не должно превышать 512x512 px.

Когда запустите 3D-редактор, нужно создать фигуру-плоскость (англ. Plane; потому что очевидно, что цилиндр, куб и другие в данном случае вряд ли нам сильно помогут, хотя можете попробовать). Перед созданием необходимо указать размер (количество сегментов, или полигонов) в разделе Parameters.

После создания плоскость нужно деформировать так, чтобы придать ей вид ландшафта. Общее во всех способах деформации состоит в превращении созданной модели (примитива) в другой тип примитива - Editable Poly или Editable Mesh (на выбор). Для этого нужно щёлкнуть на примитиве правой кнопкой, после в выпадающем меню (Quad Menu, т.е. "четверное меню") выбрать "Convert To:" и нужный вариант.

После конвертирования становятся доступны инструменты деформации. Здесь у нас есть два основных способа редактирования.

Во-первых, после конвертации в списке модификаторов вашей почвы появляется модификатор Editable Poly или Editable Mesh (в зависимости от того, в какой тип вы конвертировали модель). Нажав на модификатор, вы можете выбрать один из 5-ти режимов редактирования: Vertex (вершина), Edge (край), Face (грань), Polygon (полигон) и Element (модель в целом). После этого можно редактировать выбранные части объекта с помощью стандартных команд манипулирования: Move (двигать), Rotate (вращать), Scale (менять размер).

Во-вторых, можно конвертировать модель в Editable Mesh, затем в правой колонке спуститься вниз до подменю Paint Deformation ("рисовать деформацию").

Откройте подменю, и увидите следующее:

  • команда Push/Pull поднимает место, где вы проводите мышкой
  • Relax опускает

Ниже также можно задать общий коэффициент "мощности" для этих команд (Push/Pull Value), размер кисти (Brush Size) и силу нажатия (Brush Strength).

С помощью рисования деформации можно значительно сократить время подготовки почвы (хотя сначала к этому инструменту нужно попривыкнуть).

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

Конечно же, чтобы заняться маппингом, нужно иметь готовую текстуру (текстуры) и сначала просто наложить её (их) хоть как-то. Открывайте Material Editor ("редактор материалов") и импортируйте текстуру в проект.

В этот момент буквально каждый из нас находит кнопку Get Material и тыкает её, но это неправильный ход действий. На самом деле нужно выбрать "Diffuse" (цифра 2 на скрине), нажать на пустой квадратик, в появившемся списке найти пункт Bitmap (меню Maps -> подменю Standard) и выбрать текстуру, которая должна не занять всю клетку, а именно наложиться на шарик в одной из клеток - это значит, что всё сделано правильно). После этого текстуру нужно перетащить на модель, а в редакторе материалов включить кнопку "Show Shaded Material in Viewport" ("показывать материал во вьюпортах", цифра 3 на скрине).

Текстура должна наложиться на модель. Если этого не произошло, установите во вьюпорте (Viewport - основная область экрана, где вы работаете с моделью) параметры Perspective и Shaded ИЛИ Perspective и Realistic.

Конечно же, существует вероятность, что текстура сразу же легла, как надо. Тогда редактирование маппинга не требуется. Если это не так, требуется применение и настройка модификаторов из группы "UV Coordinate Modifiers" (модификаторы "Unwrap UVW" и "UVW Map").

Первая проблема с маппингом почвы связана с тем, что текстура накладывается сразу на весь объект (что бы вы ни делали), тогда как в общем случае нужно, чтобы она накладывалась на каждый полигон в отдельности.

Можно вручную накладывать её на каждый полигон, просто выделяя каждый по очереди, но это долго и неэффективно. Чтобы справиться с проблемой, примените модификатор "UVW Map". Открыв его, вы найдёте вкладку с настройками под названием Parameters.

Там можно (но не нужно) задать шаг повторения текстуры (U Tile, V Tile, W Tile) по вкусу, пока качество не станет приемлемым. Если вы додумались до этого способа, то забудьте его, потому что он нам не подходит - далее он создаёт проблемы с развёрткой текстуры (см. ниже).

Чуть выше этих строк нужно поставить галочку в пункте Face (он задаёт режим наложения текстуры на грани, которыми в данном случае и являются все наши полигоны). Далее нужно сколлапсить (объединить) стек модификаторов. На этом "умножение текстур" завершается.

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

Вторая проблема маппинга связана с неправильным разворотом (развёрткой) текстуры на объекте.

Чтобы это исправить, примените модификатор "Unwrap UVW" уже после объединения (коллапса) модификатора из предыдущих шагов. В параметрах модификатора Unwrap нужно включить режим редактирования полигонов, затем выделить нужный полигон и нажать "Open UV Editor ...". В открывшемся окне можно исправить неправильную развёртку. Правильная развёртка у вас будет тогда, когда все линии поместятся в маленький квадрат в левом нижнем углу, состоящий из клеточек (в противном случае с моделью будут различные проблемы).

Правильная развёртка

Неправильная развёртка

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

Соответственно, в конце работы в 3ds Max нужно экспортировать модель. Если в вашем проекте есть несколько объектов (допустим, старые дубли почвы), то перед экспортом их необходимо удалить или сгруппировать, чтобы остался только один объект. Затем нужно нажать кнопку 3ds Max (в левом верхнем углу), выбрать Export, ещё раз Export, задать имя, выбрать формат ("Save as type") ".x" и нажать Save.

После этого идите, как и в предыдущем способе (почва из кусочков), в Object Builder в CBox и создавайте новый объект. Разница в том, что здесь нужно ещё и импортировать созданную модель в формате ".x" (и новые текстуры, если они вообще у вас есть).

Физика ландшафта

Недостаточно просто заспаунить нужные объекты (смоделированные или отредактированные), у них также должна быть физика, иначе персонаж будет проходить/падать сквозь них.

Физика ландшафта - это ещё одна модель, которая хранится всё в том же файле graphics.bin и связывается с моделью ландшафта с помощью указания идентификатора (id). Как правило, физика игровых объектов имеет в файлах Fable то же имя, но с приставкой [PHYSICS], и поэтому в списке они располагаются рядом. Модель физики выглядит как исходная, но отличается отсутствием текстуры (белым цветом) при отображении в программах для моддинга. Отличительная особенность: модель физики имеет тип (Entry Type) "Physics Model" (модель почвы же - просто "Model"); в модели физики нельзя сделать ссылку на id другой модели физики. В модели физики нет выбора вариантов модели (лодов).

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

Чтобы присвоить ландшафту физику, нужно, во-первых, создать под неё запись в graphics.bin (или выбрать имеющуюся), затем открыть саму модель почвы в CBox и указать id модели физики в строке Physics. Создавать запись-исходник для модели физики в файле graphics.bin нужно только в CBox, взяв за основу другую модель физики.

Если модель почвы была увеличена неправильно, то она останется бесплотной даже при наличии модели физики.

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

Размер почвы

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

У нас есть четыре возможных варианта увеличения модели почвы:

  1. В 3ds Max до экспорта.
  2. В 3ds Max на этапе экспорта (в плагине XPorter).
  3. В локации, при спауне.
  4. В game.bin, в строке Graphics (а там - Scale).

Действительно рабочий вариант только один - первый. Необходимо выделить полностью все точки модели (вершины, т.е. режим выделения Vertex; сделать это можно сочетанием клавиш Ctrl+A), затем щёлкнуть правой кнопкой и выбрать Scale. Делать придётся на глаз. На сетку программы можете не обращать внимания, можно даже выйти за её пределы.

Варианты модели

В Fable большинство моделей имеет несколько различных вариантов (лодов; в моддерском софте - LOD, вы точно не пропустите). На этапе импорта модели почвы в игру нужно импортировать её в каждый лод (и в каждом задать текстуру). Это необходимо, чтобы модель одинаково смотрелась как вблизи, так и вдали.

Присвоение текстур

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

Мы рассмотрели различные аспекты моделирования ландшафта и расширения локаций. Надеемся, что данная статья облегчила вам жизнь.