This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Семантика UUSL

Redefined UUSL semantics allows you to create unified input\output shader structures for both graphics APIs. Переопределенная семантика UUSL позволяет создавать унифицированные структуры шейдеров ввода / вывода для обоих графических API.

Vertex Shader Semantics
Семантика вершинных шейдеров#

Vertex shader semantics contain necessary input and output data for shader. You should initialize variables first and then use them. Семантика вершинного шейдера содержит необходимые входные и выходные данные для шейдера. Вы должны сначала инициализировать переменные, а затем использовать их.

UUSL Direct3D Описание
INIT_ATTRIBUTE(TYPE,NUM,SEMANTICS) TYPE attribute_ ## NUM : SEMANTICS; Adds a semantic to a vertex shader variable. Добавляет семантику к переменной вершинного шейдера.
INIT_OUT(TYPE,NUM) TYPE data_ ## NUM : TEXCOORD ## NUM; Adds an output data semantic. Добавляет семантику выходных данных.
INIT_POSITION float4 position : SV_POSITION; Adds a position system-value semantic. Добавляет семантику системного значения позиции.
INIT_INSTANCE uint instance : SV_INSTANCEID; Adds a per-instance identifier system-value semantic. Добавляет семантику системного значения идентификатора экземпляра.

Here is an example of vertex shader input and output structures: Вот пример структур ввода и вывода вершинного шейдера:

UUSL
// Input vertex data
STRUCT(VERTEX_IN)
	INIT_ATTRIBUTE(float4,0,POSITION)	// Vertex position
	INIT_ATTRIBUTE(float4,1,TEXCOORD0)	// Vertex texcoord (uv)
	INIT_ATTRIBUTE(float4,2,TEXCOORD1)	// Vertex basis tangent
	INIT_ATTRIBUTE(float4,3,TEXCOORD2)	// Vertex color
END

// Our output vertex data
STRUCT(VERTEX_OUT)
	INIT_POSITION		// Out projected position
	INIT_OUT(float4,0)	// Texcoord (uv)
	INIT_OUT(float3,1)	// Vertex direction
END

Use the following pre-defined variables to use the input\output vertex shader semantics: Используйте следующие предварительно определенные переменные, чтобы использовать семантику вершинного шейдера ввода \ вывода:

UUSL Direct3D Описание
IN_INSTANCE input.instance An input per-instance identifier system-value variable. Входная переменная системного значения идентификатора экземпляра.
IN_ATTRIBUTE(NUM) input.attribute_ ## NUM An input shader variable. Входная переменная шейдера.
OUT_DATA(NUM) output.data_ ## NUM An output texture coordinates variable. Выходная переменная координат текстуры.
OUT_POSITION output.position An output position system-value variable. Переменная системного значения выходной позиции.

Fragment Shader Semantics
Семантика фрагментного шейдера#

Fragment shader semantics contain necessary input and output data for shader. You should initialize variables first and then use them. Семантика фрагментного шейдера содержит необходимые входные и выходные данные для шейдера. Вы должны сначала инициализировать переменные, а затем использовать их.

UUSL Direct3D Описание
INIT_IN(TYPE,NUM) TYPE data_ ## NUM : TEXCOORD ## NUM; Adds an input texture coordinates semantic. Добавляет семантику координат входной текстуры.
INIT_COLOR(TYPE) TYPE color : SV_TARGET; Add an output diffuse or specular color semantic (single RT). Добавить семантику выходного диффузного или зеркального цвета (одиночный RT).
INIT_DEPTH float depth : SV_DEPTH; Add an output depth system-value semantic. Добавить семантику системного значения глубины вывода.
INIT_MRT(TYPE,NUM) TYPE color_ ## NUM : SV_TARGET ## NUM; Add an output color system-value semantic (some RTs). Добавить семантику системного значения цвета вывода (некоторые RT).
INIT_FRONTFACE bool frontface : SV_ISFRONTFACE; Adds an input semantic indicates primitive face (frontface or not). Добавляет входную семантику, указывающую на примитивное лицо (лицевая сторона или нет).

To use the variables in the code, use the following variables: Чтобы использовать переменные в коде, используйте следующие переменные:

UUSL Direct3D Описание
IN_POSITION input.position An input position value. Входное значение позиции.
IN_DATA(NUM) input.data_ ## NUM An input texture coordinates variable. Входная переменная координат текстуры.
IN_FRONTFACE input.frontface Floating-point scalar that indicates a back-facing primitive. A negative value faces backwards, while a positive value faces the camera. Скаляр с плавающей запятой, который указывает обратный примитив. Отрицательное значение обращено назад, а положительное значение обращено к камере.
OUT_COLOR output.color An output color value (single RT). Выходное значение цвета (одиночное RT).
OUT_DEPTH output.depth An output depth value. Значение глубины вывода.
OUT_MRT(NUM) output.color_ ## NUM An output color value for MRTs. Значение цвета вывода для MRT.

Here is a simple example of using the variable in the main function of the shader: Вот простой пример использования переменной в основной функции шейдера:

USUL
MAIN_FRAG_BEGIN(FRAGMENT_IN)
	
	float4 texcoord = IN_DATA(0);

	/* ... other code ... */
MAIN_FRAG_END

Geometry Shader Semantics
Семантика геометрических шейдеров#

UUSL Direct3D Описание
INIT_GEOM_IN(TYPE,NUM) TYPE data_ ## NUM : TEXCOORD ## NUM; Add an input texture coordinates semantic for the geometry-shader stage. Добавить семантику входных координат текстуры для этапа геометрического шейдера.
INIT_GEOM_OUT(TYPE,NUM) TYPE data_ ## NUM : TEXCOORD ## NUM; Add an output texture coordinates semantic for the geometry-shader stage. Добавить семантику координат выходной текстуры для этапа геометрического шейдера.
UUSL Direct3D Описание
IN_GEOM_DATA(NUM,INDEX) input[INDEX].data_ ## NUM An input texture coordinates value. Входное значение координат текстуры.
IN_GEOM_POSITION(INDEX) input[INDEX].position An input position value. Входное значение позиции.
OUT_GEOM_DATA(NUM) output.data_ ## NUM An output texture coordinates value. Выходное значение координат текстуры.
TRIANGLE_IN triangle Input primitive type: triangle list or triangle strip. Тип входного примитива: список треугольников или полоса треугольников.
TRIANGLE_OUT TriangleStream Output primitive type: a sequence of triangle primitives Тип выходного примитива: последовательность примитивов треугольника
LINE_IN line Input primitive type: line. Тип входного примитива: строка.
LINE_OUT LineStream Output primitive type: a sequence of line primitives Тип выходного примитива: последовательность строковых примитивов

Unified Shader Semantics
Единая семантика шейдеров#

Unified shader semantics allows you to create single structure for both vertex and fragment shaders. It facilitates the work with vertex and fragment shaders input/output structure by using single structure for both shaders: this structure will be output for vertex shader and input for fragment shader respectively. Унифицированная семантика шейдеров позволяет создавать единую структуру как для вершинных, так и для фрагментных шейдеров. Это облегчает работу со структурой ввода / вывода вершинных и фрагментных шейдеров за счет использования единой структуры для обоих шейдеров: эта структура будет выводиться для вершинного шейдера и вводиться для фрагментного шейдера соответственно.

You can write vertex and fragment shader in a single file with .shader extension. In this case, in the material you should specify this .shader file for both shader stages. Вы можете записать вершинный и фрагментный шейдер в один файл с расширением .shader. В этом случае в материале следует указать этот файл .shader для обоих этапов шейдера.

Исходный код (XML)
BaseMaterial <texture_prefix=tex var_prefix=var>
{
	// ...

	Pass auxiliary if [auxiliary]
	{
		Vertex = "core/materials/base/objects/mesh/shaders/auxiliary/auxiliary.shader"
		Fragment = "core/materials/base/objects/mesh/shaders/auxiliary/auxiliary.shader"
	}

	// ..
}
UUSL VERTEX FRAGMENT Описание
INIT_DATA(TYPE,NUM,NAME) INIT_OUT(TYPE,NUM) \ #define NAME GET_DATA(NUM) INIT_IN(TYPE,NUM) \ #define NAME GET_DATA(NUM) Data initialization. Инициализация данных.
GET_DATA(V) OUT_DATA(V) IN_DATA(V) Helper for getting/setting data by using data name. Помощник для получения / установки данных с использованием имени данных.

IF statement
Конструкция IF#

There is also the IF_DATA(NAME) statement to execute an operation if the data is not null. Существует также оператор IF_DATA (NAME) для выполнения операции, если данные не равны нулю.

UUSL VERTEX FRAGMENT Описание
IF_DATA(NAME) #ifdef NAME #ifdef NAME Opening IF conditional statement. Открытие условного оператора IF.
ENDIF #endif #endif Closing IF conditional statement. Закрытие условного оператора IF.

Here is a code snippet of shader, where the shader's IF statement is used. Вот фрагмент кода шейдера, в котором используется оператор IF.

UUSL
//input struct
STRUCT(FRAGMENT_IN)
/* ... */
	#ifdef ALPHA_FADE && USE_ALPHA_FADE
		INIT_DATA(float,1,DATA_ALPHA_FADE)
	#endif
/* ... */
END

//main functions
MAIN_FRAG_BEGIN(FRAGMENT_IN)
/* ... */
	IF_DATA(DATA_ALPHA_FADE)
		//code to execute if the data is not null
		alphaFadeDiscard(DATA_ALPHA_FADE,IN_POSITION.xy);
	ENDIF
/* ... */
MAIN_FRAG_END

Interpolation Modifiers
Модификаторы интерполяции#

UUSL Direct3D Описание
MODIFER_LINEAR linear Interpolate between shader inputs; linear is the default value if no interpolation modifier is specified.Интерполировать входные данные шейдера; linear - значение по умолчанию, если не указан модификатор интерполяции.
MODIFER_CENTROID centroid Interpolate between samples that are somewhere within the covered area of the pixel (this may require extrapolating end points from a pixel center). Centroid sampling may improve antialiasing if a pixel is partially covered (even if the pixel center is not covered). The centroid modifier must be combined with either the linear or noperspective modifier.Интерполировать между выборками, которые находятся где-то в пределах покрываемой области пикселя (для этого может потребоваться экстраполяция конечных точек из центра пикселя). Выборка центроидов может улучшить сглаживание, если пиксель частично покрыт (даже если центр пикселя не покрыт). Модификатор центроида должен сочетаться с модификатором linear или noperspective.
MODIFER_NOINTERPOLATION nointerpolation Do not interpolate.Не интерполировать.
MODIFER_NOPERSPECTIVE noperspective Do not perform perspective-correction during interpolation. The noperspective modifier can be combined with the centroid modifier.Не выполнять коррекцию перспективы во время интерполяции. Модификатор noperspective можно комбинировать с модификатором центроида.
MODIFER_SAMPLE sample Interpolate at sample location rather than at the pixel center. This causes the pixel shader to execute per-sample rather than per-pixel.Интерполировать в местоположении образца, а не в центре пикселя. Это заставляет пиксельный шейдер выполняться по выборке, а не по пикселям.

See Also
Смотрите также#

See also the article on Interpolation Modifiers.См. также статью о модификаторах интерполяции.

Последнее обновление: 12.07.2024
Build: ()