×
Menu

NiPixelData - notes

 
Примечание.
Новой (1.1.3) версией Нифскопа, лучше не пользоваться - будет убитый файл, упаковка происходит НЕ корректно, либо корректно но это не срабатывает для МВ.
Также, он может просто отказаться паковать текстуру, сославшись на неподходящий формат оной.
 
Как кажется, Нифскоп пытается упаковать текстуру исходя из ее начального формата, но Игра может не принимать ничего кроме PX_FMT_RGB8.
 
Либо дело в размере текстуры.
Т.е. если текстура больше 256х256 новая версия Нифскопа (qt 1.1.3.) не сможет упаковать текстуру корректно, в итоге в игре модель будет белой, либо вовсе будет КТД.
Однако текстуры 256x256 и .BMP формата могут быть нормально упакованы.
Старая версия нифскопа, корректно пакует текстуры любого размера и формата.
 
Нифскоп 2.0 (dev7-8) (похоже), пакует файлы также не корректно.
Впрочем, правильнее будут сказать, что это МВ не принимает такие упаковки.
СкенеВиювер может показывать все нормально!
Т.е. наиболее правильный вариант создания упакованной текстуры - использование 3д МАХа и ФФЕ плагина.
Либо блендера, с плагином от Greatness7 (вроде это плагин умеет создавать такие текстуры).
Либо МВСЕ (оно вроде также умеет это делать, но это не точно).
Либо, в крайнем случае, Нифскоп 1.0 QT 4.1!
Нифскоп QT 4.8.3 (1.1.3) пакует текстуры НЕ КОРРЕКТНО!
Т.е. МВ не понимает эти файлы правильно.
 
Примечание.
СкенеВиювер может не правильно отображать, то что правильно показывает ТЕС КС!
Т.е. некоторые текстуры могут корректно отображаться в игре, но отображаться с ошибками в просмотровщике.
 
Примечание.
Greatness7 писал:
yea scene viewer doesnt load them properly, not sure why.
these values are correct
or should be at least
ingame test looks like this
the pixel data is just some arbitrary amount of bytes.
The size depends on what format the image is in, what size it is, and if its compressed, etc.
Each byte does not necessarily correspond to a pixel
if its a compressed format the pixel data  will be compressed
how to interpret the bytes is controlled by the pixel format stuff
i dont think nifskope will support all the formats
probably its because the enum order changed
they got rid of BGR stuff.
Т.е. есть мнение, что с 4.2 (и выше) версии движка что-то пошаманили с настройками, отчего более старые версии файлов стали некорректно отображаться.
 
Примечание.
Упаковка текстур в Ниф файлы, либо запекание оных в целевой ниф файл рекомендовалось в ранних версиях движка.
Т.к. движок работает именно с этим понятием (NiPixelData) и, использование его из коробки, по идее, должно значительно повышать быстродействие.
Но в поздних версиях справки, делать этого уже НЕ рекомендовалось.
Т.е. в справке к Gamebryo 1.1.
 
Примечание.
Или обычную текстуру кратную 6х.
Т.е. если создавать в 2д редакторе кубическую карту, ее можно запечь в ниф файл и использовать.
Она будет отображаться на моделях в игре и редакторе.
Хотя, по видимости, все особенности такой текстуры, теряются.
Но в качества теста, это можно использовать.
Либо, такое может пригодиться, при создании атласа какой-то модели.
Где, по каким-то причинам, не хватает обычного 2х размера текстуры.
И 3х является лучшим решением для размещения островов развертки.
 
Примечание.
- Размер ниф файлов с упакованными текстурами возрастает в разы.
- Размер отдельного файла текстуры в формате ниф, также в разы больше оригинала в ДДС формате.
- Теряется ряд преимуществ ДДС формата. Особенно связанных с компрессией файла.
- Фактическое дублирование файлов текстур, если одна текстура запекается в разные ниф файлы.
- Могут быть проблемы с Альфа Каналом!
- При неправильно установленном Pixel Format, можно получить значительные артефакты текстуры.
PX_FMT_DXT5_ALT - практически гарантировано приводит к появлению разного рода артефактов, однако, это можно как-то использовать!
Были отмечены случаи, когда упакованная текстура теряла прозрачность по альфе.
 
Hrnchamd писал:
Nif textures are uncompressed, which means worse performance.
No sharing textures either.
It's a bad idea.
 
Примечание.
Несколько текстур 1024х1024 запеченные в Ниф файл могут легко поднять его размер с 2мб, до 200!
 
Примечание.
Упакованные текстуры ограничено используются в некоторых играх.
Lokki, Culpa Innata, FFE, Dark Age of Camelot.
Т.е. в некоторых моделях ряда игры можно встретить упакованные текстуры.
 
Примечание.
Нифскоп умеет извлекать упакованные текстуры.
ПКМ по NiSourceTexture->Texture->Export.
На выходе будет предложено сохранить файл текстуры.
 
Примечание.
В NiPixelData упаковываются полноцветные текстуры 16-бит и выше плотности.
8-битные текстуры пакуются в  niPalette.
 
Примечание.
Если прописать niPixelData в строке extradata ноды, или шейпа - вылет игры.
Т.е. если ради "интереса" подсмотреть какие-то частично скрытые настройки этого объекта, прописать оный в экстра свойства другого объекта.
Редактор и игра улетят в ошибку.
С некоторыми объектами такое срабатывает, а с другими нет.
 
Примечание.
Не однозначная вещь(С)
Которая, однако, может использоваться в МВСЕ на ЛУА!
В т.ч. для получения некоторых дополнительных эффектов в моделях.
Т.к. PixelDat-ой можно удобно управлять через МВСЕ скрипты.
 

 Выдержка из оригинальной справки. (NDL Gamebryo 1.1)
 
NiPixelData objects represent two-dimensional arrays of pixel values, as well as pyramids of multiple mipmap levels, each of two-dimensional arrays of pixel values. The object also contains information representing the format of the pixels in the data arrays, as well as the dimensions of the arrays. Unlike earlier pixel data representations in Gamebryo (NiRawImageData), NiPixelData objects can represent full mipmap pyramids, a wide range of pixel formats and revision IDs. NiPixelData objects may also refer to NiPalette objects, and can even share them.
 
NiPixelData objects are the main form of texture data representation in Gamebryo. Image file format readers return objects of this type, and NiSourceTexture texture objects may be created from NiPixelData objects.
 
Mipmap Level Pixel Storage
Currently, NiPixelData objects store the pixel values for each mipmap level consecutively, packed one right after another. Each mipmap level is not individually aligned. As a result, the data may be copied using a single memcpy operation by retrieving the base address of mipmap level 0 and copying the number of bytes returned by NiPixelData::GetTotalSizeInBytes.
 
Mipmap Pyramid Generation
Gamebryo supports partial mipmap pyramids.  For example, while the full pyramid for a 16x16 image would be the following set of mipmap levels:  16x16, 8x8, 4x4, 2x2, 1x1, NiPixelData may also be used to store the following partial mipmap pyramid:  16x16, 8x8.  However, intermediate mipmap levels cannot be skipped – each mipmap level must be half the dimension of the one above it in the chain.  Note that Gamebryo considers a full pyramid with a non-square image to be the one whose coarsest mipmap level is 1x1, e.g.:  16x4, 8x2, 4x1, 2x1, 1x1.
 
Changing NiPixelData Pixel Values
If an application changes pixel values in an NiPixelData object after creation, it must call prior to using the data (or any related NiTexture object) for a rendering operation. However, note that it is safe to create an NiPixelData object, immediately change its pixel data, and then pass the NiPixelData object to a texture related function or object constructor. The need to call MarkAsChanged applies only to NiPixelData objects that are used with rendering objects such as NiSourceTextures.
 
Note that changing pixel values in one level of a mipmap pyramid will not automatically change the pixels in other mipmap levels. An application modifying pixel data on the fly must handle the filtering of mipmap levels itself.

Правильно упакованная текстура.
*Экспорт из МАХа.
Неправильно упакованная. Нифскоп 1.1.3.
 
Упакованная текстура в старой версии Нифскопа.