×
Меню
Индекс

NiPathController примечания

 
Обращайте внимание!
Этот контроллер не работает если находится вне поля зрения камеры!
И если не содержит дополнительного Кейфрейм контроллера.
Этим можно пользоваться для создания каких либо "эффектов".
Но это может создавать сложности при использовании, этого контроллера, например, в лифте.
Объект перестанет двигаться, если выпал из зоны прямого видения игрока, а стоящий на нем НПС\Существо, рискует провалиться через него на землю.
Игра очень плохо просчитывает изменения положений объектов по оси Z, особенно если игрок не смотрит в сторону "события".
В этом случае, можно добавлять контроллер невидимости на корневую ноду.
Ключ 1, значение 1.
Это приведет к постоянной работе контроллера, вне зависимости от поля зрения камеры.
 
Примечание.
При экспорте через ТЕСэкспортер - требуется снять флаг Controllers!
ФФЕ экспортер проявляет большую стабильность в экспорте этого контроллера, т.е. не так часто превращает его в обычный КейФрейм.
 
Нифтулз  - создавать этот контроллер в ниф файлах, не умеет.
Хотя, была информация, что более свежие версии модуля для старших МАХов (2015 и выше) умеют экспортировать анимацию создаваемую этим контроллером в качестве КейФрейма на прямую в НИФ, без необходимости создания ФБХ файла.
Старые версии - не умеют экспортировать эту анимацию напрямую.
 
Примечание.
При экспорте через ФФЕ экспортер, значение поля ФЛАГ может существенно меняться в зависимости от выбранных настроек контроллера!
Однако, в игре, по видимости, это не играет роли.
Т.к. по SSG не видно никаких принципиальных изменений в параметрах контроллера.
Возможно это лишь особенность ФФЕ модуля выставляющего флаги иначе, чем ТЕС Экспортер.
 
Примечание.
Список флагов в зависимости от выбранных режимов (для ТесЭкспортер) (для ФФЕ флаги получаются другими!).
В зависимости от выбранных наборов и типа анимации ( Loop, PingPong, Constant ака Cycle) флаги могут существенно меняться.
 
60 = все по умолчанию
188 = ничего не выбрано.
(184 = Loop, 186 = PingPong, 188 = Constant )
300 = Constant Velocity
(424= Loop, 426 = PingPong, 428 = Constant )
700 =  Follow + Bank
(696= Loop 698 = PingPong 700 = Constant )
764 =  Follow + Bank + Allow Upside Down
(760= Loop, 762 = PingPong, 764 = Constant )
812 =  Constant Velocity + Follow
( 808= Loop,  810= PingPong, 812 = Constant )
940 =  Constant Velocity + Follow + Bank
( 936= Loop, 938= PingPong, 940 = Constant )
1004  = Constant Velocity + Follow + Bank + Allow Upside Down
( 1000= Loop, 1002= PingPong, 1004 = Constant )
 
*Relative и Loop - никак себя не проявляют во флагах, хотя если выбрано, стартовая позиция объекта будет смещена.
Впрочем, это может быть за счет КейФреймКонтроллера.
 
При создании этого контроллера только с помощью нифскопа, можно устанавливать обычные флаги.
8, 10, 12.
 
Примечание.
Для экспорта через ФФЕ получаются следующие флаги (режим разового старта, clamp).
268
540
1564
668
156
для Cycle (loop) 152 т.е. похоже верно значение -2 к режиму Clamp.
кламп 268, 264 если цикл
936 - не понятно.. и похоже не работает как надо.тесэкспортер.
296 - тоже. это через тесэкспортер.
538 - для пинг понг
906 - вероятно отвечает за точку, если ползет с конца или с начала
1802 - тоже пинг понг
странно, был же еще 392, который отлично показал себя в файле существа.
т.е. откуда взялся 392 флаг для неясно.
Т.е. флаги Тес Экспортера отличаются от флагов создаваемых ФФЕ - насколько критично, не известно.
Тем более, что во многих случаях можно обойтись стандартными флагами 8-10-12.
И добавлением кейфреймконтроллера.
 
Примечание.
Для файлов существ, Флаг, 392 выглядит предпочтительнее чем 904 т.е. значение флага что-то да кодирует.
Также, комбо из пата ролла лукат в файле существа оказалось вполне рабочим.
Path контролирует движение объекта по оси верх вниз.
Рол вращает объекты с паузами и сменой скорости вокруг собственно существа.
А лукат фиксирует "лицо" объекта на его цель, в данном случае на голову оного существа...
Т.е. в не зависимости от проигрываемой существом анимации, такие вспомогательные элементы будут сохранять ориентацию и независимую анимацию.
Настройки "мыслей" поэта Праха.
Которые витают вокруг его Главы, озаренной Ужасающим Сиянием Славы Спящего под Горой.
 
 
Примечание.
- патч контроллер крайне плохо себя показал в модели частиц.
т.е. все перекосило( флаг 12 и 940 не помог.
это модель каста магии была, т.е. та что игрой помещается в мир при касте.
Т.е. в некоторых случаях, флаг может играть критически важную роль.
Либо контроллер, плохо работает непосредственно с частицами?
 
Примечание.
Можно использовать для анимации лифтов...
 
Примечание.
Bank экспортируется всегда.
Можно поставить флаг Bank и установить значения Bank Amount 0.
Однако,  Unknown Int 1 все равно будет равен единице.
Т.е. вне зависимости от выбранных флагов, значения в Unknown Float 2 и Unknown Float 3 будут равны значениям в МАХе.
Их работа в модели, зависит от кейфреймконтроллера, т.к. Path контроллер, не имеет полей для этих значений!
 
Примечание.
При копировании между файлами, не стоит сразу вставлять этот контроллер на целевой объект, лучше вклеить в конец файла, настроить под текущие задачи, а уже затем назначать.
Иначе нифскоп может зависнуть. Покрайней мере был пойман такой баг.
 
Примечание.
В ванильной модели cure_hit.nif есть этот контроллер, но по видимости, не рабочий.
Т.е. настройки Float и PosData - пустые.
Анимацию выполняет обычный niKeyFrameController.
 
Примечание.
В ряде случаев, при экспорте моделей из МАХ niKeyFrameController может быть паразитным.
Если ПатчКонтроллер настроен правильно, niKeyFrameController можно и нужно удалять.
Но лучше сначала сравнить модели, т.к. кейфрейм может выполнять некую полезную нагрузку.
Достаточно сделать две копии модели, в одной оба контроллера во второй только один.
И посмотреть как это будет выглядеть в игре.
 
Примечание.
Теория (ажно от 2017-18го).
Если бы .nif файлы могли бы подхватывать некие глобальные значения из движка игры, этот контроллер позволил бы создавать глобальные анимации. Т.е. если была бы возможность указать в качестве пути некий иной .nif файл, или глобальный Patch Grid - то оставалось бы указать время контроллеру и поместить объект в мир.
Все остальное делала бы сама игра.
Таким образом можно было бы создавать интерактивную анимацию активаторам, без участия скриптов.
Например - некий подвижный механизм перемещающийся вдоль уровня земли в не зависимости от изменений оного. Т.е. неважно какие плагины затронули бы лендскейп, анимация объекта все равно проигрывалась бы верно.
 
Практика от февраля 2020года.
Похоже это было реализовано в МВСЕ 2.1 на ЛУА.
Т.е. динамическое создание этого контроллера для создания передвижение объектов вокруг игрока.

 Выдержка из оригинальной справки. (NDL Gamebryo 1.1)
 
An NiPathController may be used to make an object follow a predefined spline path. The path controller is distinct from an NiKeyframeController with a set of position keys because the path controller can extract additional information from the curve allowing it to provide "following" and "banking" functionality. Following makes the major axis of the controlled object always parallel the current path tangent. Banking rolls the controlled object about its major axis, relative to curvature of the path. "Banking" is only possible if the controller is also set to use "following".
 
The NiPathController has many options to augment this basic behavior. The direction and amount of roll about the curve (bank direction) can be specified via the SetBankDir and SetMaxBankAngle functions. SetAllowFlip can be used to change whether or not the controller can "flip" as it moves across control points. Finally, SetConstVelocity can be used to reparameterize the path curve by arc length rather than by time.
 
A path controller requires two distinct sets of keys to control its animation. One set, referred to as the percentage keys, is used to parameterize distance along the spline path. These keys provide a correlation between time and percentage about the curve and can be any of the NiFloatKey-derived animation keys. The second set of keys defines the spline that makes up the path for the controller and can be any of the NiPosKey-derived animation keys. In combination, these two sequences support all the path controller's functionality. The path controller uses the input time to interpolate a percentage value from the percentage keys. It then uses this percentage to determine a position along the spline defined by the path keys.
 
Вероятно существует какой-то баг связанный с ПатчКонтроллером.
There are two bugs in NiLinPosKey::Interpolate and NiLinPosKey::InterpolateD1 that would return a tangent facing the opposite direction from and/or interpolate the incorrect value. These functions are only used by NiPathController
 
Примечание касательно 2х контроллеров на одном объекте.
Собственно о случае, когда кроме ПатчКонтроллера на объекте присутствует и КейФреймКонтроллер.
More than one type of time controller can be attached to a given object so that multiple attributes are animated. However, it is important to understand what aspects of an object the time controllers manipulate to prevent problems when using more than one type at a time. For example, if there is both an NiPathController and an NiKeyframeController attached to an object, whichever controller is updated last will write its results to the local transform of the object, overwriting any results placed there by the first controller. There are some cases where the controllers are able to work in conjunction, but such cases are an exception rather than a rule.

Правильно настроенный PatchController в составе паразитного KeyFrameControllera.
Если его номер указать в слоте контроллера целевой ноды , он будет прекрасно работать.
Тот самый полупустой ПатчКонтроллер в составе e\cure_hit.nif
Вот так это выглядит в 3д МАХ.
Сплайн может стать путем для любого объекта в сцене.