NiZBufferProperty - notes
Неясно.
Либо это баг нифскопа, либо его фича.
Имеется в виду не возможность изменения флага, при смене метода тестирования через меню.
Т.к. для старших версий ниф файлов, флаг меняется.
Возможно дело в оптимизациях под формат ниф файлов 4.0.
См. далее.
По видимости есть только 2 активных положения значений:
"Enable Z buffer" и "Z buffer read only".
Дающих 4 возможных комбинации.
Если менять значение Z buffer test function, через это меню, то флаг не меняется.
Однако, если сменить флаг руками, то измениться и значение тестирования буфера в меню.
При следующем вызове оного.
Отчего получается большее кол-во допустимых значений.
Которые, могут оказывать эффект на модель, за счет изменения метода тестирования. (?)
Например, было отмечено, что в частицах, флаг 17 работает лучше чем флаг 1.
17 - значение тестирования "TEST_GREATER".
Примечание.
При просмотре модели по SSG (F10) в редакторе, выглядит так, что значение тестирования никогда не меняется.
Однако, в игре модель с флагом 5 будет отличаться, по поведению, от модели с флагом 2.
Либо дело в чем-то еще, а не в методе тестирования буфера.
Вопрос о работоспособности смены флага руками, частично, открытый.
Т.к. SSG редактора и игры показывает метод тестирования без изменений, для всех флагов.
С 0 до 32.
|
|
SSG в редакторе.
|
SSG в игре.
|
Примечание.
Возможно позволяет повышать ФПС, т.к. при включении способствует отсеканию поверхностей находящихся сзади объекта.
Т.е. это глобальный эффект, воздействующий не только на избранную модель, но и на то, что будет находится за ней в игре.
Вероятно по этой причине ФФЕ экспортер присваивает эти свойства всем моделям.
Впрочем, насколько это работает в МВ вопрос открытый, т.к. отдельные тесты не проводились, а ТЕС экспортер имеет флаг отсекающий автоматическое создание этих свойств.
Примечание.
Частицы, кроме особых случаев, всегда должны содержать эти свойства!
Примечание.
Флаги 0 и 2 возможно отсекаются игровыми объектами содержащими альфа канал.
Покрайней мере редактор, перекрывает эти модели подобными объектами.
Хотя в игре, подобного не отмечалось.
Вода, содержит это свойства.
Примечание!
Флаги 0 и 2 можно заставить работать более ограничено!
Т.е. они не будут пробивать через всю сцену, но только через ближайший к ним объект.
При этом, в отличие от
альфа свойств, работать это будет со всеми объектами в сцене!
Которые и позволяют проводить такие "комбо", как это было выяснено уважаемым Greatness7 в 05 2020.
Примечание!
Для флагов 0 и 2, чтобы избежать отображения обратной стороны объекта, полезно добавлять свойства трафарета.
Либо наоборот, чтобы получить отображение внутренней стороны.
Т.е. при наличии трафарета в режиме отображение обеих сторон, можно избежать отображение внутренних стенок объекта.
Настройка: Draw Mode = DRAW_BOTH.
Примечание.
Возможно, применение 17 флага на частицах, позволяет им работать несколько иначе, чем с обычным значением.
Впрочем, дальнейшие тесты показали такую возможность и для 1 флага.
Это странно, т.к. пытались раньше добавлять эффект блеска на частицы, но он не работал.
Однако, после установки флага 17 - включился.
Но дальнейшие опыты с частицами и наложением на них продвинутых эффектов, в МАХе, показали нормальную работу и при 1-ом флаге.
Примечание.
Использовать смену методов тестирования, все же возможно.
При использование МВСЕ и смены флага в ниф файлах - однако это приводило к (кому-то) бардаку в графике сцены.
Отчего эта опция была отключена.
Т.е. в одном из тестовых билдов она использовалась.
Примечание.
Увидеть влияние методов тестирования можно в 4.2 версиях ниф файла.
Который уже имеет необходимый дополнительный флаг и отображение влияние оного в нифскопе.
Активация ZBufferProperty.
|
|
|
Частицы без ZBufferProperty.
|
Те же самые частицы, но уже с включенным ZBufferProperty = 1
|
|
|
Тов. Шео смотрит за творящимся бардаком, сквозь все статики и прочая, ажно с другого конца помещения!
Кучки пепла на первом плане, также содержат Z буфера, это избавляет их от "строба" полигонов.
|
Настройки тов. Щегората с билбордом и Z-буфером.
|
|
|
Флаги пробивающие через мир игры. т.е. объект будет виден через другие предметы.
На тестовой модели были использованы флаги от 0 до 32.
|
Различные методы тестирования z-буфера.
Т.е. в модели менялся только флаг z-буфера, но все остальные настройки оставались без изменений.
|
|
|
|
Различие во флагах управляющих тестированием.
|
|
|
Здесь используется расширяющаяся сфера.
Овал в центре возникает при приближении оной к камере.
|
Т.е. зона в центре это прямое отображение картинки.
А зона с красным, сфера с z-буфером.
|
|
|
Ниф файл 4.2 версии с опцией дополнительного флага.
Фактически в 4.0 версии есть несколько свободных байт данных, которые можно было использовать для указания метода тестирования и реакции на это дело МВСЕ.
|
Отображение сравнения z-буфера СкенеВиювером.
|
Выдержка из оригинальной справки. (NDL Gamebryo 1.1)
NiZBufferProperty provides for dynamic enabling and disabling of Z-buffering. The property can also turn on write-only Z-buffering, whereby objects that are already known to be sorted in back-to-front order can be drawn quickly while still keeping the Z-buffer consistent for the later drawing of objects for which back-to-front ordering cannot be ensured.
Using the Z-Buffer Property to Implement Different Z-Buffer Behaviors
The NiZBufferProperty may be used to implement four different Z-buffering modes, as follows:
Z Write…Test Flag
|
Behavior
|
false...false
|
No Z-buffering occurs. All pixels written--later polygons obscure earlier polygons, Z-buffer is left untouched.
|
false...true
|
Pixels are tested against the Z-buffer before being written, but the Z-buffer is left untouched.
|
true....false
|
All pixels written--later polygons obscure earlier polygons, Z-buffer is overwritten by polygons in temporal order as well. Useful for presorted background environments.
|
true....true
|
Full Z-buffering occurs. Polygons obscured by nearer polygons, Z-buffer overwritten by nearer polygons.
|
Z-Buffer Efficiency Tricks
One popular Z-Buffering trick is to draw presorted background objects with the Z-buffer set to write, but not to compare. On some hardware and almost all software, this approach is faster than full Z-buffering. Having written the background parts of the scene, the complex, dynamic objects (which tend to cover far less of the screen than the backgrounds) may be drawn using full Z-buffering. The dynamic objects will then be drawn correctly with respect to themselves, each other, and the backgrounds.
Z-Buffer Comparison Test
*возможно это не работает в движке 4.0 версии, либо работает не совсем корректно
The following table includes all the values that can be used for the Z-buffer comparison test. These values are enumerated inside the NiZBufferProperty class. Note that "less than" means closer to the camera and "greater than" means further from the camera, regardless of the low-level hardware representation of Z values.
Z Buffer Test
|
Behavior
|
TEST_ALWAYS
|
Incoming Z value always passes
|
TEST_LESS
|
Incoming Z value passes if less than current value
|
TEST_EQUAL
|
Incoming Z value passes if equal to current value
|
TEST_LESSEQUAL
|
Incoming Z value passes if less than or equal to current value
|
TEST_GREATER
|
Incoming Z value passes if greater than current value
|
TEST_NOTEQUAL
|
Incoming Z value passes if not equal to current value
|
TEST_GREATEREQUAL
|
Incoming Z value passes if greater than or equal to current value
|
TEST_NEVER
|
Incoming Z value never passes
|