This page has been translated automatically.
视频教程
界面
要领
高级
实用建议
基础
专业(SIM)
UnigineEditor
界面概述
资源工作流程
Version Control
设置和首选项
项目开发
调整节点参数
Setting Up Materials
设置属性
照明
Sandworm
使用编辑器工具执行特定任务
如何擴展編輯器功能
嵌入式节点类型
Nodes
Objects
Effects
Decals
光源
Geodetics
World Nodes
Sound Objects
Pathfinding Objects
Players
编程
基本原理
搭建开发环境
使用范例
C++
C#
UnigineScript
Plugins
File Formats
材质和着色器
Rebuilding the Engine Tools
GUI
双精度坐标
应用程序接口
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
Tutorials

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。
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
中频声明#

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.在像素覆盖区域内某处的样本之间进行插值(这可能需要从像素中心外推端点)。如果像素被部分覆盖(即使像素中心未被覆盖),质心采样也可以改善抗锯齿效果。质心修饰符必须与线性或非透视修饰符结合使用。
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.另请参见关于插值修饰符的文章

最新更新: 2024-07-12
Build: ()