Состояния
State allows you to set a mode for rendering passes and a value for rendering options. States change a set of generated definitions passed to shaders, so any changes made to a state cause shaders recompilation. A material state generates defines for shaders only if the state meets the conditions. You can specify your own states or use and specify values for UNIGINE's internal states.Состояние позволяет вам установить режим для проходов рендеринга и значение для параметров рендеринга. Состояния изменяют набор сгенерированных определений, передаваемых шейдерам, поэтому любые изменения, внесенные в состояние, вызывают перекомпиляцию шейдеров. Состояние материала генерирует определения для шейдеров только в том случае, если состояние соответствует условиям. Вы можете указать свои собственные состояния или использовать и указать значения для внутренних состояний UNIGINE.
The syntax is the following:Синтаксис следующий:
StateType state_name = value(s)
You can acces states in the shader using the following defines:Вы можете получить доступ к состояниям в шейдере, используя следующие определения:
GET_STATE_<state name in uppercase> = value // for all states
STATE_<state name> // if the state value is bigger than 0 (for example, StateToogle)
STATE_<state name>_<name of an element from the items array> // for State and StateSwitch
To change the state's values use the corresponding API methods.Чтобы изменить значения состояния, используйте соответствующие методы API .
Types of StatesТипы состояний#
- StateToggle (bool) — a switch that enables/disables the stateStateToggle (bool) — переключатель, который включает/выключает состояние
- StateSwitch (integer) — a multiple-value switch based on array of items (mandatory argument)StateSwitch (integer) — многозначный переключатель на основе массива элементов (обязательный аргумент)
- StateInt (integer) — a state with an integer number (used to pass the state value via the API to the shader)StateInt (integer) — состояние с целым числом (используется для передачи значения состояния через API в шейдер)
- State — auto detection of the state type (if the items argument is present, then StateSwitch; otherwise StateToggle)State — автоопределение типа состояния (если присутствует аргумент items, то StateSwitch; иначе StateToggle)
Usage ExamplesПримеры использования#
Suppose we got the base material with these states defined:Предположим, мы получили базовый материал с такими определенными состояниями:
BaseMaterial
{
State my_state_switch = 4 <items = [a b c d e]> // or StateSwitch my_state_switch = 4 <items = [a b c d e]>
State my_state_toggle = 1
StateInt my_state_int = 256 <internal = true>
}
Then the following defines are available in the shaders:Тогда в шейдерах доступны следующие определения :
#define GET_STATE_MY_STATE_SWITCH 4
#define GET_STATE_MY_STATE_TOGGLE 1
#define GET_STATE_MY_STATE_INT 256
#ifdef STATE_MY_STATE_SWITCH_A
/* some UUSL code */
#elif STATE_MY_STATE_SWITCH_B
/* some UUSL code */
#elif STATE_MY_STATE_SWITCH_E
/* some UUSL code */
#endif
#ifdef STATE_MY_STATE_TOGGLE
/*some UUSL code*/
#endif
int my_state_int = GET_STATE_MY_STATE_INT;
ArgumentsАргументы#
editableeditable#
Boolean
A flag indicating if state can be changed in the Parameters window or via API.Флаг, указывающий, можно ли изменить состояние в окне Parameters или через API .
Available values:Доступные значения:
- false — unchangeablefalse — неизменяемый
- true — changeable (by default)true — изменяемый (по умолчанию)
titletitle#
String
Title for the Editor.Название для редактора.
tooltiptooltip#
String
Tooltip for the Editor.Подсказка для редактора.
switch_groupswitch_group#
String
Sets this state to be responsible for the toggle of the specified group.Устанавливает, что это состояние отвечает за переключение указанной группы.
hiddenhidden#
Boolean
A flag indicating if the state is hidden in the Editor.Флаг, указывающий, скрыто ли состояние в редакторе.
Available values:Доступные значения:
- false — shows the state in the Editorfalse — показывает состояние в Редакторе
- true — hides the state in the Editortrue — скрывает состояние в Редакторе
internalinternal#
Boolean
A flag indicating if the state is hidden in the Editor and the state values are not saved for the inherited materials.Флаг, указывающий, скрыто ли состояние в редакторе и не сохраняются ли значения состояния для унаследованных материалов.
Available values:Доступные значения:
- false — shows the state in the Editor and saves the state values for the inherited materialsfalse — показывает состояние в Редакторе и сохраняет значения состояния для унаследованных материалов
- true — hides the state in the Editor and does not save the state values for the inherited materialstrue — скрывает состояние в Редакторе и не сохраняет значения состояния для унаследованных материалов
itemsitems#
Array of StringsМассив строк
Items used for the StateSwitch type.Предметы, используемые для типа StateSwitch.
passpass#
Массив строк
Specifies what passes use this state.Указывает, какие проходы используют это состояние.
Available values:Доступные значения:
- wireframe — wireframe проход
- visualizer_solid — visualizer solid проход
- deferred — deferred проход
- auxiliary — auxiliary проход
- emission — emission проход
- refraction — refraction проход
- reflection — reflection проход
- transparent_blur — transparent blur проход
- ambient — ambient проход
- light_voxel_probe — voxel probe light проход
- light_environment_probe — environment probe проход
- light_omni — omni-directional light проход
- light_proj — projected light проход
- light_world — world light проход
- depth_pre_pass — native depth pre-pass
- shadow — shadows проход
- post — post-process проход
- light_all — environment probe, omni-directional light, projected light, world light проходы
- forward — environment probe, omni-directional light, projected light, world light и ambient проходы
- transparent — forward, refraction, transparent blur проходы
- custom_pass_name — имя пользовательского прохода рендеринга (поддерживается до 32 пользовательских проходов)
- object — deferred, auxiliary, emission, refraction, reflection, transparent blur, ambient, voxel probe light, environment probe, omni-directional light, projected light, world light, shadow и native depth проходы
To make one or more passes use this state, write passes in square brackets and separate them with spaces. For example:Чтобы один или несколько проходов использовали это состояние, напишите проходы в квадратных скобках и разделите их пробелами. Например:
State wireframe_antialiasing <pass=[wireframe post custom_pass_name]>