×
Menu

NiStencilProperty - notes

 
 
http://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch09.html
https://www.opengl.org/archives/resources/code/samples/mjktips/TexShadowReflectLight.html
https://pmg.org.ru/nehe/nehe26.htm
 
Примечание.
Создание зеркальных поверхностей возможно только опосредовано.
Т.е. потребуется создавать дополнительные объекты находящиеся за поверхностью.
К сожалению, для создания настоящей "зеркальной плоскости" действительно отражающей объекты потребуется вносить изменения в движок. По крайней мере, обратных этому данных не наблюдалось.
 
Примечание.
Создание теней, возможно также только опосредованно.
Т.е. Shadow Volume потребует дополнительно настроенных поверхностей.
https://en.wikipedia.org/wiki/Shadow_volume
 
Примечание!
К сожалению, добавление трафарета во вложенные модели теней, или в сами модели, не дало положительного результата!
Т.е. тени для объектов создаются автоматически, без возможности повлиять на них локальными настройками.
Такой эксперимент был проведен. Свойства работали сами по себе, но никак не меняли поведение тени.
Как можно видеть из скриншота выше (SSG), тени, это отдельный раздел в сцене.
Добавление свойств трафарета никак не повлияло на это безобразие в режиме High Detail Shadows.
Т.е. возможно, дело не сколько в полигонах, столько в настройках свойств трафарета для теней в движке.
 
Заранее настроенная тень в модели существа.
Добавление Стенсилов, опять же никак, ни на что, не повлияло.
Выразим надежду на МСП, возможно изменение настроек теней по умолчанию, может изменить ситуацию.
 
Примечание!
Стенсил свойства не отражаются в воде!
Т.е. объекты у которых оболочка имеет только одну "физическую" сторону и свойства трафарета для отображения второй.
Не будут отражать вторую сторону в воде.
Собственно как отмечалось вначале заметки, вода имеет свои свойства трафарета и перезаписывает буфера трафаретов моделей.
При этом, оные модели, создаются на уровне движка.
У них нет внешних ниф файлов.
Равно как и у моделей поверхности земли, солнца и его ореола.
Эти объекты создаются движком.
Т.е. как-то повлиять на назначенные им по умолчанию свойства, можно разве что через МВСЕ.
 
SiberianCrab
@Hrnchamd Any way to add support of NiStencil for water reflections?
 
Hrnchamd
@SiberianCrab Double sided rendering is useless in Morrowind because the normals are facing the wrong way half the time, it makes shadows render wrong.
Support would mean doubling faces in the generator.
 
Примечание.
Свойства трафарета в моделях использующих свойства альфа с флагом No Sorter могут иметь проблемы с отображением на фоне неба.
Как с МГЕ, так и Ванили.
 

 Выдержка из оригинальной справки. (NDL Gamebryo 1.1)
 
NiStencilProperty enables and disables stencil buffering and sets the pertinent values to configure it. Stencil buffering allows effects such as cutouts in a screen, decal polygons without Z-buffer "aliasing", and advanced effects such as volumetric shadows. This property also includes a draw order (culling) mode setting, which may be used to render a given piece of geometry with or without front or back-facing triangles visible. The draw mode setting is used even if stencil buffering is disabled, so the draw mode may be used for other effects as well.
 
This default constructor creates a property with the enable flag set to false, the function set to TEST_GREATER, the reference value set to 0, the mask set to 0xFFFFFFFF, the failure action set to ACTION_KEEP, the Z-buffer failure action set to ACTION_KEEP, and the pass action set to ACTION_INCREMENT. The draw mode will be set to DRAW_CCW_OR_BOTH. Descriptions of the test functions, actions and draw modes are included below in the "Notes" section.
(т.е. это объясняет настройки поверхности воды по умолчанию).
 
Notes
Using the Draw Mode to set Triangle Culling
The draw (culling) mode is functionally independent of the stencil buffering settings. However, since changing the culling mode is commonly used with stencil buffering, it is placed in this property. Note that in general, it should not be used to switch all geometry from "front-CCW" to "front-CW". Gamebryo still prefers geometry to be front-counter-clockwise. The non-default modes are to be used for special effects only. The modes are as follows:
Mode
Behavior
DRAW_CCW_OR_BOTH
The default. May draw only triangles whose vertices are ordered counter-clockwise with respect to the viewer, or may draw all triangles, regardless of orientation. In the case of closed, opaque objects (which are very common in games), this distinction is irrelevant, as either mode will result in the same rendered image. However, for one-sided translucent or open objects, applications may wish to specify DRAW_CCW.
Note that this mode is equivalent to the way Gamebryo's predecessors have worked in the past. See the particular renderer documentation for notes on how a given platform implements this mode. In general, this mode will be the highest-performance mode across all platforms.
DRAW_CCW
Draw only the triangles whose vertices are ordered counter-clockwise with respect to the viewer.
DRAW_CW
Draw only the triangles whose vertices are ordered clockwise with respect to the viewer.
DRAW_BOTH
Do not cull back faces of any kind. Draw all triangles, regardless of orientation.
 
Test Functions
The NiStencilBufferProperty class supports the following test functions. The action taken as a result of the test depends on the values set in the Action parameters.
Function
Action
TEST_NEVER
Always false
TEST_LESS
VRef < VBuf
TEST_EQUAL
VRef = VBuf
TEST_LESSEQUAL
VRef <= VBuf
TEST_GREATER
VRef > VBuf
TEST_NOTEQUAL
VRef != VBuf
TEST_GREATEREQUAL
VRef >= VBuf
TEST_ALWAYS
Always true
 
Actions
The actions can be set to occur as a result of the tests.
Type
Action
ACTION_KEEP
Keep the current value in the stencil buffer.
ACTION_ZERO
Write zero to the current stencil buffer.
ACTION_REPLACE
Write the reference value to the stencil buffer.
ACTION_INCREMENT
Increment the value in the stencil buffer.
ACTION_DECREMENT
Decrement the value in the stencil buffer.
ACTION_INVERT
Bit-wise invert the value in the stencil buffer.