×
Меню
Индекс

Flags

Заметка о параметре ниф файла Flags, применительно нод и шейпов.
Примечание о параметре флаг для контроллеров, см. в их разделе.
 
Флаг на простых нодах и шейпах, в большинстве случаев отвечает лишь за выбор метода детектирования столкновения.
Т.е. практически не влияет на что либо визуально заметное.
Т.к. во многих случаях смена значения с ХХ на 0 не показывала как-то заметной разницы в поведении объекта.
Тем более, что просчет столкновений в движке 4.0 версии весьма прост (примитивен)  и не имеет такого множества настроек, которые можно видеть в поздних версиях движка (начиная с 4.2 в т.ч.).
О просчете коллизий это сюда.
 
Т.е. для большинства простых (т.е. не именных) шейпов и нод, а равно для ряда свойств, на вроде текстурных, или свойств материала, значение флага не показывает, сколь либо, значимого (заметного) влияния на их поведение, которое можно было бы "измерить визуально".
Т.е. нода флаг 8, будет показывать равный (т.е. визуально определяемый) результат для ноды флаг 12.
Или свойства материала флаг 2, не покажет разницы против смены флага на 32, или 128.
Единственное, что однозначно показывает эффект, это нечетные флаги.
Флаг 33 скроет ноду, равно как и флаг 1, 21 и далее.
Верно и для шейпов.
Но для материалов и текстурных свойств, смена флага на нечетные, не показывает такого эффекта.
При этом, можно получить материал с флагом 1 прямо из МАХа, через ТЕСэкспортер.
Т.е. на некоторых свойствах, номер флага, не играет заметной роли.
 
Однако, в случае использования именных нод, значение флага принимает критически важное значение!
Отвечающее, как за метод проигрывания анимаций, так за оптимизацию поверхности во время игры, так и за иные моменты.
Таким образом, флаг, всегда имеет комбинированное значение.
Сохраняя как данные по методу детектирования столкновений (что практически мало важно) так и по методам проигрывания анимаций (а это уже важно)!
 
Основные ноды использующие флаг для создания дополнительных возможностей, кроме детектирования столкновений:
Остальные типы объектов (шейпы и ряд свойств) обходятся стандартным набором флагов. 0, 2, 8, 10, 12.
Подробнее о флагах см. разделы этих нод.
 
В МВ это основной контейнер для размещения базовой геометрии.
Ходовым флагом является 2 (или 0).
 
Однако, значение флага на шейпах, все же, может оказывать некоторый заметный эффект.
Т.к. в справке есть такое упоминание:
GeometryDataFlags
Returns an enumeration indicating the current method of generating normals, binormals, and tangents. The actual generation of normals, binormals, and tangents occurs only during export from the artist tools, so during application runtime, this flag is most useful as an indicator of whether or not this object contains vertex binormals and tangents in addition to the standard normals.
Sets the current method of generating normals, binormals, and tangents.  If necessary, this function will reallocate the data arrays to ensure there is room in the array for binormals and tangents. The actual generation of normals, binormals, and tangents occurs only during export from the artist tools, so during application runtime, calling this function will be used primarily to ensure there is data allocated to store vertex binormals and tangents in addition to the standard normals.
 
Равно и в опциях ТЕСэкспортера, есть раздел позволяющий изменять флаг сообразно означенным целям.
Т.е. здесь получается следующая картина, если выбрать (см. здесь) компрессию:
1=Verts, 2=Normals, 3=Verts and normals, 4=UVs, 5=UVs and Verts,6=UVs and Normals, 7=All.
- вертексов, флаг 10. Относится к цвету вертексов, или к их позиции, или вовсе к скиндате?
- нормалей, флаг 18.
- вертексов и нормалей, флаг 26.
- развертки (UV), флаг 34,
- развертки и вертексов, флаг 42.
- развертки и нормалей, флаг 50.
- развертки, вертексов и нормалей, флаг 58.
То можно получить смену флага на шейпе.
Который (флаг) должен сообщать движку некоторые оптимизации:
Renderer Geometry Compression Options
Depending on the destination renderer some of the different attributes of geometry data can be stored in a compressed format. These options are a suggestion to the exporter to indicate what the artist would prefer. The final determination will be done by the renderers. These settings apply to this object and all children of this object in the scene graph. This information is stored in NiGeometryData Compression Flags.
The benefits of compression are that it saves main memory and reduces the amount of bus bandwidth consumed by DMA transfers of geometry from main memory to VIF1. The drawback is that additional VU1 cycles are required to uncompress the compressed parameters. For most applications, the benefits of compression outweigh the drawback.
Т.е. есть вероятность, что модели с компрессией могут загружаться, чуть быстрее.
Насколько это так, детальных тестов не проводилось!
 
Подробных тестов не проводилось, отчего нельзя однозначно рекомендовать использование иных флагов, кроме 0 и 2.
 
Примечание.
Правильные значения флагов для Strips-ов, не известны, т.к. 4.0 версии модулей не создают этот объект.
А те модули, что таки создают, не знают какие флаги правильные. )))
Для 4.2 версии ниф файлов, флаги совершенно отличны.
Т.е. официальный модуль экспорта создает флаги с совершенно отличными номерами. Флаг 380 вместо 2, например.
 

Общие примечания о флагах на простых нодах и шейпах при экспорте из МАХа.
Здесь было замечено следующее.
 
Тес Экспортер создает следующие флаги:
- если у нод есть шейпы (в потомках) то флаг 10. При этом, имеется в виду цепочка из пустых нод в конце которой есть шейп.
Равно, если у каждой ноды есть шейпы. Или одна единственная нода имеющая шейп.
- Шейпы всегда получают флаг 2 по умолчанию.
- Если у нод нет шейпов, то флаг 2.
- Наличие скининга на шейпе, никак не влияет на номер флага. Такое мнение можно видеть в справке к нифскопу.
 
ФФЕ создает следующие флаги:
- если у нод есть шейпы, то флаг 12.
- шейп всегда получает флаг 4.
- если у нод нет шейпов, флаг 4.
- наличие скининга также не влияет на флаг.
 
Нифтулз создает другие флаги, с которыми не все так очевидно.
Обычно для нод создается флаг 8, но встречаются флаги 0 и 10.
Для шейпов, в основном флаг 0.
Можно предполагать, что нифтулз модули экспорта под 3д МАХ не имели точного представления о флагах.
Либо сказывается влияние старших версий движка.
 
В целом:
Так или иначе, все эти флаги 0,2,4,8,10,12 - вполне работоспособны.
Хотя, может быть и оказывают не слишком очевидное влияние на производительность.
О номера флагов влияющих на метод детектирования столкновений объектов - сюда.
 
Примечание.
Получается интересное историческое наблюдение!
Как по номеру флага можно определить, какой именно модуль экспорта использовался для модели!
Если видим флаг 8, значит Нифтулз.
Если 2 и 10 - Тес Экспортер.
Если 4 и 12 - какая-то иная версия модуля которой пользовались в беседке, до (или после?) "создания" Тес Экспортера.
 
Однако, имело бы смысл придерживаться оригинальных флагов.
Т.е. тех, что создает ТЕС экспортер.
 
Нечетные флаги скрывают объекты!
Т.е. все нечетные значения флагов будут всегда скрывать объект в сцене.
Самый ходовой флаг - 3.
Используется на некоторых системных нодах.
Нечетный флаг на ноде скрывает всех ее потомков!
Поскольку нода невидима сама по себе.
 
Примечание.
Типовые флаги (ноды, шейпы) 0, 2, 8, 10, 32, 42, 64, 72, 106, 128.
Это наиболее популярные флаги в ниф файлах.
 
Материал - не заметно что смена флага оказывает влияние. Можно не обращать внимания.
Шейп - обычно флаг 2. Можно не обращать внимания. Если использованы значения компрессии, флаги будут меняться.
Нода (обычная niNode) - 0, 8, 10 - связана с методом детектирования коллизий. В принципе, можно не обращать особо внимания.
Анимировання нода - 32, 42, 64, 106. Флаги критичны!
Обязательно проверяйте флаг! Если иные значения, могут возникнуть проблемы с анимациями.
Ноды частиц - не все так просто, см. их раздел. Значения флага может быть критичным! Т.е. здесь флаг кодирует состояние анимации частиц.
Шейпы частиц - не особо критично. Обычные значения флагов. 0, 2, 4.
Свойства альфы - кодирует значение альфы. Все значения дают результат. См. раздел. Флагов здесь много!
РутКолиженНода - флаг важен, см. раздел. Обычно, всегда 3.
Контроллеры анимаций - флаги критичны! см. раздел.  Типовые значение 8 или 12.
Странная нода с эффектом "призрака" - флаги критичны! По умолчанию следует ставить флаг 8. Это новые (02 2020) данные! см. раздел.
ФлтНода - аналогично анимированной. 32, 106.
СвитчНода - аналогично. 32, 42.
Стенсильные свойства - флаг не важен.
Я-буфер - значения кодируются флагом.
 
В итоге.
В некоторых случаях, значения флага играет решающую роль в правильной работе объекта, но в других, флаг не несет критически важного значения, выступая лишь в качестве вспомогательного значения помогающего оптимизировать работу игры.
В типовых случаях, достаточно использовать отмеченные выше значения.
Для пустых нод 0 или 2.
Для нод с потомкам 8 или 10.
Для шейпов 2.
Для скрытия объектов - установить флаг 3. Либо иной нечетный флаг, поправив значение уже имеющегося.
Например 42 -> 43.
 
В случае системных нод, см. их разделы.
Нечетные значения флагов для таких нод, также, приведут к скрытию всего их содержимого.

Примечание о номере флага и его влиянии на метод детектирования коллизий на примере niBsParticleNode.
А также об общем кол-ве флагов и битах их формирующих.
Изменения метода от смены флага можно видеть по SSG.
2 - triangles (tri).
10 - tri
32 - none
42 - tri
64 - none
74 - tri
96 - none
128 - none
130 - tri
132 - USE_OBS
138 - tri
172 - OBS
202 - tri
212 - OBS
224 - None
 
Greatness7
this is all the flags and how many times they occur
so like there are 7 AvoidNode with flag 2
and 7 with flag 8
so we could make a checklist
and mark off the flags that we already know their usage
and see what remains
like flag32 in NiBSAnimationNode is Animated
and flag64 is NotRandom
so now we are left with
Mr.007
106 is more common for notRandom.
32 (without collisions) 42 (with collision) 106 (not random) 64 (same)
 
Greatness7
remember they are bits
so they combine
106==2+8+32+64
if you ever used binary calculator
 
Mr.007
NiBSParticleNode
32 42 170 for trailing...
74 = not random, the analog of the 106th flag for the animation node. follow = 0.
202 = not random, follow = 0.
2 10 32 42 64 74 96 128 130 132
138 172 202 212 224
:sweat_smile:  these flags has been checked.
 
Greatness7
64+32+8+2==106
so it is 64=NotRandom, 32=Animated, 8=?, 2=?
valid flags always go in powers of 2
etc
only these flags have meaning, and they can be combined with each other
the flags field is a 16bit ushort
so there can be up to 16 dif flags
if all flags are set then you have 65535
make sense? :smile:
 
these are the ones i know of
only talking of NiAVObject type objects, not NiProperty
not too sure waht 2 and 4 flags do
and appears there is at least one nif that has flag 256 on NiNode