×
Menu

NiTriShapeData - parameters

 
Настройки.
Num Vertices
кол-во вертексов (вершин).
 
Можно добавлять новые к уже имеющимся.
Они добавятся в конец списка ниже.
 
Удаление вершин, также возможно.
Has Vertices
Yes\no.
 
Наличие вертексов.
 
Если НЕТ, объект просто исчезнет.
Поэтому всегда YES.
 
Vertices
Здесь находятся позиции всех вертексов, что, в принципе, позволяет их редактировать вручную...
Если конечно это очень нужно, поскольку счет может идти на десятки тысяч!
 
Максимум вертексов для одной поверхности 65535.
Придел 16битного числа. Большее не позволит установить нифскоп.
А игра создаст дыры, или полностью скроет такую поверхность.
Т.е. если создать более сглаженную поверхность в 3д МАХ, игра откажется с ней работать.
 
Вертексы, в окне рендера Нифскопа, выделяются при выделении строки.
 
Кол-во значений = Num Vertices
 
*если создать новый вертекс (в num vertices), его позиция устанавливается здесь.
*однако, это убьет отображение текстуры на модели. Т.е. слетит UV, что в целом логично.
*придется пересоздать оную, что, впрочем, вполне решаемо для простых поверхностей.
*а еще придется делать новый треугольник, сам по себе вертекс (в игре) не отображается.
*что тоже решаемо...
 
Как показала практика, создание простейшей поверхности средствами Нифскопа - возможно!
Has Normals
Yes\no
 
Нормали отвечают за работу света на объекте.
The direction a vertex normal points affects how neighboring surfaces reflect light.
 
Если Нормалей нет - объект будет выглядеть плоским.
Если Нормали лежат криво - объект будет выглядеть помятым.
Впрочем в некоторых случаях это может быть полезно.
Т.е. положение нормалей оказывает художественное влияние на объект.
 
Также, нормали влияют на текстурные эффекты!
Ручное изменение векторов нормалей (в нифскопе) позволяет (в т.ч.) нормально отобразить текстуру эффекта в режиме Diffuse_cube.
Либо неким образом изменить положение текстуры для других режимов наложения эффектов.
Отключение нормалей, приведет к затенению поверхности и принципиально иному поведению эффекта!
 
Do we have lighting normals?
These are essential for proper lighting: if not present, the model will only be influenced by ambient light.
- желтый чайник; нормали включены эффектов нет.
- средний нижний чайник, нормали + эффект в режиме сферы.
- средний верхний чайник, нормали выключены + эффект в режиме сферы.
- темный чайник справа, нормали выключены, эффектов нет.
 
Чайники в центе находятся в одной ноде и используют одинаковый эффект.
Но, отключение нормалей полностью изменило его рисунок.
 
Также следует учитывать, при создании эффектов, что карта нормалей (ака бамп мап) также будет влиять на его рисунок.
Чайники получили текстур Бампа (ака нормалей).
Видно как поменялось поведение текстурного эффекта.
 
Т.е. карта нормалей, способна, отчасти компенсировать отключение нормалей на уровне шейп даты.
Чем можно пользоваться для достижение некоторых целей.
 
Normals
Собственно позиции нормалей объекта.
 
Можно свободно редактировать их направления...
т.е. вот эта желтая полоса и есть выделенная нормаль, значение которой определяет ее длину (здесь 50).
 
Что в некоторых случаях, может быть единственным путем для дополнительного управления текстурными эффектами.
Конечно, когда нормалей не слишком много...
Увы, редакторы нормалей в МАХе хотя и имеются, но их воздействие не сохраняется в ниф файл.

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

Здесь изменен режим текстурного эффекта.
Левая модель, с перевернутыми нормалями, показывает эту текстуру нормально.
Правая, с обычным положением нормалей, не показывает ничего.
Т.е. на левой модели текстура так и останется статичной при смещении камеры.
А на правой, начнутся "колебания цвета" и сама текстура не отобразится нормальным образом.
 
Здесь же добавлена еще и текстура Бампа.
Видно, что текстура в режиме ДФ_куба отреагировала на это!
Но иначе, чем на левой поверхности с измененным положением нормалей.
Т.е. положение нормалей + текстура управления нормалями (ака бампа) показывают совмещенный результат.
Рельефный бамп с некоторым рисунком высот.
Ровная заливка текстуры нормалей в один тон.
Т.е. здесь, в текстуре бампа, все высоты равны.
Отчего влияние на текстурных эффект равно нулю.
 
Левая модель с повернутыми нормалями, правая с обычными.
Бамп - ровный синий фон.
Текстура в режиме ДФ_куба.
 
Нормали оказывают весьма заметное действие на поведение текстурных эффектов!
 
Center
центр опоры шейпа, от которого оный будет перемещаться и масштабироваться.
 
Также, от цента исчисляется радиус.
 
Radius
Радиус объекта.
Это весьма важный параметр!
 
Влияет на исключение оного из рендеринга!
Т.е. когда объекты будут исчезать из поля зрения у края экрана.
Не верный радиус скроет объект раньше положенного.
Чем однако можно пользоваться в своих целях...
 
Если размер шейпа был изменен, следует всегда обновить радиус.
 
Также, радиус отвечает за зону активации объекта.
Проще говоря, если объект с малым радиусом еще не появился на экране, его нельзя будет активировать, т.к. его банально не видно.
При этом, даже когда оный появляется, активировать можно только по зоне заданной радиусом!

Пример.
Поверхность в 256 ед имеет (после экспорта из МАХа) радиус активации 181.0193, что позволяет увидеть ее сразу, как только любой из полигонов окажется в поле зрения (frustum) камеры (как редактора, так и игры).
Но если сменить радиус на 10.000, то, полигон перестает появляется на экране!
При этом, пропадает и возможно выделить объект.
Т.е. требуется, чтобы в зону видимости попали полигоны объекта, по которым его можно выделить, но зону видимости определяет радиус!
Можно полагать, что увеличенный радиус (300 против 180 к примеру) может негативно сказываться на фпс?
Т.е. объект с увеличенным радиусом будет исчезать из зоны рендеринга позже чем следует.
Игрок этого конечно не будет видеть, т.к. объект фактически окажется вне поля зрения камеры раньше, но вот игра может считать, что объект все еще должен быть видимым и как следствие, выделять ресурсы на его просчет.
краешек объекта с радиусом 180
изменен радиус на 10. И объект перестал отображаться!
радиус по прежнему 10, но камера смещена ближе к центру объекта, чтобы он снова появился.
Радиус 2.0
Плашка с названием не появляется примерно до половины видимости объекта.
Радиус 16.
Плашка появляется сразу при касании прицелом любого из полигонов объекта.
 
Может принимать значения:
Radius = <float_max>
Radius = <float_min>
Т.е. можно установить значение всегда устанавливающее максимально (минимально) возможный радиус.
Можно предполагать, что это как-то сказывается на движке.
Т.е. либо способствую повышению точности просчета радиуса объекта.
Либо затрачивая на это вычислительные ресурсы, на постоянный мониторинг параметра.
Что (не проверялось) может как-то сказываться на фпс.
 
Было высказано мнение, что <float_max><float_min> более полезны в дате частиц, чем обычных шейпов.
 
Yes\no.
 
Включение использования цвета повертексной окраски объекта.
Каждому вертексу свой цвет + значение альфы!
 
При экспорте - включается в настройках материала.
Т.е. должен стоять соответствующий флаг в настройках материала.
Цвет и прозрачность вертексов управляется вертекспайнтом.
 
Vertex Color
Собственно настройки цвета и прозрачности каждого вертекса.
 
Здесь указывается цвет вертексов если has Vertex Color = Yes.
В значениях RGB+A.
А = альфа, т.е. прозрачность.
 
Цвет вертексов может быть легко установлен непосредственно в нифскопе.
Для небольших моделей это легко.
 
Порядок вертексов в этом разделе, соответствует порядку вертексов в разделе Has Vertices.
Т.е. смотрим где и какой вертекс, затем высчитываем номер и правим его цвет.
Либо - используем стрелки на клавиатуре для перехода между вертексами.
 
Кроме цвета, также указывается и уровень (alpha) прозрачности для каждого вертекса.
Что позволяет; как получить интересные результаты, так и головную боль.
Пытаясь понять, отчего альфа канал текстуры перестал работать, хотя все свойства альфа на своих местах.
 
Для включения прозрачности вертексам, требуются свойства альфы.
Если их нет, прозрачность вертексов не обрабатывается.
 
Альфа канал текстуры и прозрачность вертексов конфликтуют между собой!
Т.е. альфа вертексов имеет больший приоритет, чем альфа свойства и альфа в текстуре.
Обращайте на это внимание, если создаете модель с прозрачными участками по альфе текстуры и повертексной окраской!
 
Примечание.
Для лучшей заметности цвета вертексов в нифскопе, обязательно установите Specular Color в NiMaterialProperty черным! Если Specular Color белый, Нифскоп не показывает изменения цвета вертексов!
 
Примечание.
В нифскопе 2.0 появилась опция копирования цвета вертексов.
Что позволяет быстро перенести окрас вертексов с одного шейпа на другой.
Вероятно, это крайне удобно и полезно при доработке моделей после МАХа.
Т.е. взяв окрас вертексов с оригинальной модели и перенести на "поправленную".
 
Примечание.
Вертексы должны быть на "своих" позициях, иначе окрас ляжет на другие вертексы.
 
Num UV Sets
кол-во UV слотов.
 
Максимум 64.
Если 65 вылет игры.
Не так чтобы это было важно, но есть такой момент.
На деле актуально не более 10-ти.
 
В ОпМВ (июль 2020) завезли поддержку максимального числа в 65535.
Их может быть 65535 по сведениям Greatness7.(С)
 
Т.е. на одном шейпе может быть больше чем один UV, что позволяет получать ряд дополнительных полезностей!
 
См. примечание о создании мультиUV в МАХе.
 
Has UV
развертка текстуры.
Т.е. отвечает за использования размещения текстуры на поверхности объекта.
 
Развертки может не быть вовсе.
Тогда значение NO.
Как правило, всегда YES.
 
Наличие развертки может влиять на текстурные эффекты!
 
ВАЖНО!
Если (случайно) установить Has UV = NO
и не убрать значение из Num UV Sets = Х
модель приведет к вылету игры!
Т.е. если Has UV = NO то и Num UV Sets = 0!
А также следует нажать зеленые стрелки, т.е. обновить значения.
При этом, надо учитывать, что действие необратимо и развертка будет полностью удалена с поверхности.
здесь все верно. Развертка отключена полностью.
здесь не верно! и модель приведет к вылету.
 
+UV Sets
Настройка разверток.
 
Дает доступ к повертексному редактированию развертки текстуры!
 
В этом разделе можно поправить позиции отдельных вертексев, или создать новую развертку.
 
Для простейший объектов, из пары полигонов, можно достаточно легко создавать новую развертку.
См. ролик. Ссылка здесь.
 
Хотя удобнее это делать в 3д МАХе, либо в редакторе текстур. 
Который позволяет дублировать развертки, создавая посредством этого новые каналы.
Кол-во которых будет автоматически  добавлено в NiTriShapeData.
 
Если Num UV Sets больше 1, вложенных UV Sets  также будет больше чем один.
 
Num Triangles
кол-во треугольников поверхности.
 
Один полигон = 2 треугольника и 6 вертексов.
 
Triangles Points
Собственно указывает конечные точки (вертексы) для построения полигона.
Т.е. точки треугольника = номерам вертексов выбранного треугольника.
0 1 2
1 0 3
Таким образом создается простейший полигон (квадрат) из двух треугольников.
 
Обычно эти значения мало актуальны, т.к. все сетки создаются в 3д Редакторе.
Но если требуется поправить что-то срочно, или есть иные сложности - этот раздел может помочь.
 
Номер и позиции вертексов определяются в первом разделе Has Vertices -> Vertices
При этом, неправильный номер вертекса, приведет к неправильному положению треугольника.
Например, он будет отражен в другую сторону, или вовсе перекроется другим треугольником.
0 1 2 - это порядковые позиции первого треугольника.
0 1 3 , или 2 0 3, или 3 1 2 приведут к совершенно различному положению второго треугольника.
 
Неправильные позиции могут привести у вылету игры.
 
Однако, если "набить" руку, то можно достаточно свободно строить геометрию объекта прямо в нифскопе.
 
Num Triangles - число треугольников в шейпе.
Num Triangle Points - число точек оных, всегда кратно трем.
Num Triangles = 2.
Num Triangle Points = 6.
 
*пкм по выбранному треугольнику имеет опцию FLIP FACE,
т.е. Перевернет именно выделенный треугольник.
 
*там же, опция FLIP UV, поворот развертки.
 
Такая ошибка:
"Error:  1  invalid index(es) in block # 14  NiTriShapeData.Triangles "
Показывает, что надо указывать правильный новый индекс, для треугольника.
1. обновить все данные в разделах
2. проверить кол-во  Triangles и Triangle Points.
3. проверить Triangles на предмет записей с нулевыми значениями.
Т.е. вторая строка содержит неправильные значения и привела к означенной ошибке.
 
Num Match Groups
Группы дублированных вертексов, ака совпадающих вертексов.
 
Непонятно, как оно возникает.
Также не понятна практическая польза.
Выглядит как раздел всегда равный нулевым значениям.
И изменять это нет резона.
 
В ОпМВ этот параметр полностью игнорируется.
В ванильных моделях есть только в одной.
При экспорте через ТЕС и ФФЕ экспортеры - всегда пусто.
Однако, получилось создать этот раздел для ниф файла 4.2 версии.
После импорта даэдрической дайкатаны через Нифтулз и экспорт обратно в ниф, но уже формата 4.2.
Некоторые шейпы получили в этом разделе значения.
 
Capostrophic из команды ОпМВ писал:
Это совпадающие вершины, ничего нам не дают, так что мы их игнорим.
Первое число -- количество вершин, у которых есть совпадающие. Второе число -- количество совпадающих вершин у 1 вершины. Затем эти вершины перечисливаются (индексами), затем число совпадающих вершин у 2 вершины, и так далее.
 
Match Groups
Группы. От одной до многих десятков.
Число вертексов в ней.
Номера вертексов.
См. А\A_Netch_F_cuirass.nif - это ванильная модель женской кирасы кожи нетча в которой этот раздел активен.
Num Vertices
Vertex Indices
 

 Выдержка из оригинальной справки. (NDL Gamebryo 1.1)
 
Constructs an indexed triangle shape based on the given data. The parameters are all sent directly to the NiTriShapeData constructor. The number of triangles in the triangle set is given by usTriangles, while the connectivity list gives triplets of indices into the vertex data. The connectivity list has 3*usTriangles elements with each set of three consecutive indices defining a triangle. The pkTexture and pkColor array pointers are optional (they may be sent as NULL) texture coordinates and vertex colors. The usNumTextureSets parameter indicates how many sets of texture coordinates are included in the pkTexture array. Successive texture coordinates sets should be appended to the end of the array. The eNBTMethod parameter indicates how the normals, binormals, and tangents in the pkNormal array, if any, were calculated. If the pkNormal array does not include binormals and tangents, NBT_METHOD_NONE should be used. If it does include binormals and tangents, they must be laid out in the array with all the normals first, then all the binormals, and finally all the tangents. These arrays (if non-NULL) must contain usVertices (or an appropriate multiple for pkTexture and pkNormal) elements. In this constructor, the new NiTriShapeData is given ownership of the input arrays and is responsible for deleting them.
 
Constructs an NiTriShapeData object based on the given data. The first three parameters are sent directly to the NiTriBasedGeom constructor. The number of triangles in the triangle set is given by usTriangles, while the connectivity list gives triplets of indices into the vertex data. The connectivity list has 3*usTriangles elements with each set of three consecutive indices defining a triangle. The pkTexture and pkColor array pointers are optional (they may be sent as NULL) texture coordinates and vertex colors. The usNumTextureSets parameter indicates how many sets of texture coordinates are included in the pkTexture array. Successive texture coordinates sets should be appended to the end of the array. The eNBTMethod parameter indicates how the normals, binormals, and tangents in the pkNormal array, if any, were calculated. If the pkNormal array does not include binormals and tangents, NBT_METHOD_NONE should be used. If it does include binormals and tangents, they must be laid out in the array with all the normals first, then all the binormals, and finally all the tangents. These arrays (if non-NULL) must contain usVertices (or an appropriate multiple for pkTexture and pkNormal) elements. In this constructor, the new NiTriShapeData is given ownership of the input arrays and is responsible for deleting them.