C
效果参考
本页解释了如何编写效果。
概述
效果规范允许编写自定义效果,这些效果应用于层。效果可以有多重遍行来计算最终结果。每个遍行中的着色器必须实现分别为片段着色器和顶点着色器的 void frag() 和 void vert() 函数。遍行将按照在效果文件中指定的顺序执行。工作室着色器库也可以通过 #include 指令来访问以添加功能。
注意:与自定义材质不同,Qt 3D Studio 2.0 运行时对多遍行渲染有全面支持。
效果结构
<Effect>
<MetaData>
<Property name="FloatParam" type="Float" formalName="Float Param" description="" default="1.0"/>
<Property name="TextureParam" type="Texture" filter="linear" clamp="clamp"/>
<Property name="DepthTextureParam" type="Texture" filter="nearest" clamp="clamp"/>
</MetaData>
<Shaders>
<Shared></Shared>
<VertexShaderShared></VertexShaderShared>
<FragmentShaderShared></FragmentShaderShared>
<Shader name="PASS1">
<VertexShader></VertexShader>
<FragmentShader></FragmentShader>
</Shader>
<Shader name="PASS2">
<VertexShader></VertexShader>
<FragmentShader></FragmentShader>
</Shader>
<Shader name="MAIN">
<VertexShader>
void vert()
{
}
</VertexShader>
<FragmentShader>
void frag()
{
}
</FragmentShader>
</Shader>
</Shaders>
<Passes>
<Buffer name="buffer" type="fp16" format="rg" filter="nearest" wrap="clamp" size="1.0" lifetime="frame"/>
<Buffer name="buffer2" type="fp16" format="rg" filter="nearest" wrap="clamp" size="1.0" lifetime="frame"/>
<Buffer name="stencilBuffer" format='depth24stencil8' lifetime="frame" />
<Pass shader="PASS1" input="[source]" output="buffer">
<DepthInput param="DepthTextureParam"/>
<DepthStencil buffer='stencilBuffer' flags='clear-stencil' stencil-fail='replace' depth-fail='replace' depth-pass='replace' stencil-function='always' reference='1'/>
</Pass>
<Pass shader="PASS2" input="buffer" output="buffer2">
<BufferInput param="buffer" param="TextureParam" />
</Pass>
<Pass shader="MAIN" input="[source]" output="[dest]">
<Blending source="SrcAlpha" dest="One"/>
<SetParam name="FloatParam" value="0.0"/>
</Pass>
</Passes>
</Effect>效果文件结构遵循自定义材质相同的模式,首先是带有参数的元数据,位于 <Metadata> 元素中,然后是位于 <Shaders> 元素中的效果着色器以及位于 <Passes> 元素中的渲染遍行。
参数
效果元数据参数与自定义材质相同,但也有一些效果特有的参数。具有 Texture 类型以及 <Buffer> 和 <BufferInput> 元素的参数允许在着色器中使用样本变量。
注意:Qt 3D Studio 2.0 运行时不支持其他类型的缓冲区(着色器存储缓冲区、间接绘制等)。通过 <Buffer> 元素指定的临时缓冲区映射为纹理。这可以通过单独遍行中的 <BufferInput> 绑定到着色器中的样本变量。
元素
<Shared>
此元素可用于插入所有着色器共享的代码块。它会被插入到效果中的所有着色器中。
<VertexShaderShared> 和 <FragmentShaderShared>
这些元素可以用于插入所有顶点和片段着色器共享的代码块。位于 <VertexShaderShared> 元素内的代码被插入到所有顶点着色器中,而位于 <FragmentShaderShared> 元素内的代码被插入到所有片段着色器中。
<Shader>, <VertexShader> 和 <FragmentShader>
此 <Shader> 元素指定了一个着色器,着色器名为 name 属性指定的名称。该名称在 <Pass> 元素中用于指定要执行哪个着色器。《VertexShader》和 <FragmentShader> 元素用于分别指定顶点着色器代码和片段着色器代码。顶点着色器必须实现 void vert() 函数,而片段着色器必须实现 void frag() 函数,除非为空。
着色器可以使用 varying、 in 和 out 指示符来定义自定义变量,以在着色器阶段之间传递参数。
<Passes>
此 <Passes> 元素用于指定效果的压力遍行。必须在每个 <Pass> 元素内指定每个遍行。《Passes》元素还可以包含 <Buffer> 元素来指定为效果指定不同类型的存储方式。
注意:在 Qt 3D Studio 2.0 运行时,缓冲区总是映射到纹理。
《缓冲区》
此元素可以用于创建用于效果内部的效果缓冲区。不同的传递可以读取和写入这些缓冲区,以实现效果的不同阶段。可以使用《
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 名称 | 字符串 | 用于指定缓冲区的唯一名称。 |
| 类型 |
| 用于指定缓冲区的类型。 |
| 格式 |
| 用于指定缓冲区的格式。 |
| 过滤器 |
| 用于指定输入过滤模式。 |
| 包装 |
| 用于指定纹理坐标的包装模式。 |
| 大小 | | 用于指定缓冲区相对于帧缓冲区的大小。1.0对应相同大小。0.5对应缓冲区宽度和高度是原来的一半。 |
| 寿命 |
| 用于指定缓冲区的分配和删除方式。具有frame寿命的缓冲区可以被其他效果重用。 |
《`
此元素指定效果中的一个渲染传递。传递的执行顺序与效果文件中指定的顺序一致。
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 着色器 | 字符串 | 在此传递中执行的着色器名称。必须与<Shaders>`元素中的着色器名称匹配。 |
| 输入 | 字符串 | 一个`<Buffer>`元素的名称或[source]。 |
| 输出 | 字符串 | 一个`<Buffer>`元素的名称或[dest]。 |
| 格式 |
| 如果输出是[dest],则指定输出格式。 |
《`
此元素将一个缓冲区(纹理)绑定到着色器采样变量。
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 值 | 字符串 | 一个`<Buffer>`元素的名称或[source]。 |
| 参数 | 字符串 | 着色器变量的名称。 |
《`
此元素将帧缓冲区深度作为纹理绑定到着色器采样变量。
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 参数 | 字符串 | 着色器变量的名称。 |
《`
此元素可以用于设置与渲染传递特定的着色器参数。参数必须与`
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 名称 | 字符串 | 属性名称。 |
| 值 | 浮点数或整数 | 指定属性的值。 |
《`
此元素可以用于更改渲染传递的混合模式。
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 目的 |
| 指定目的混合模式。 |
| 源 |
| 指定源混合模式。 |
《RenderState}
此元素可以用于启用或禁用传递的渲染状态。
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 名称 |
| 渲染状态的名称 |
| 值 | 布尔值 | 指定是否启用或禁用渲染状态。 |
《DepthStencil}
此元素可以用来指定深度-模板缓冲区,并更改绘制的深度-模板测试。
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 缓冲区 | 字符串 | 用作深度-模板缓冲区的缓冲区名称。 |
| 标志 |
| 指定元素的标志。这些可以通过逻辑或 '|' 组合。 |
| 模板失效 | 模板操作值之一 | 指定模板失效操作。 |
| 深度失效 | 模板操作值之一 | 指定深度失效操作。 |
| 深度通过 | 模板操作值之一 | 指定深度通过操作。 |
| 模板函数 | 布尔操作值之一 | 指定模板函数。 |
| 参考 | 整数 | 指定模板参考值。 |
| 掩码 | 整数 | 指定模板掩码值。 |
模板操作值包括
保留零替换增加增加环绕减少减少环绕反转
布尔操作值包括
永不小于小于或等于等于不等于大于大于或等于永是
<剔除>
此元素可以用来选择由 CullFace 剔除哪些面。
元素属性如下
| 属性 | 值 | 描述 |
|---|---|---|
| 模式 |
| 指定 CullFace 模式。 |
在某些 Qt 许可证下可用。
了解详细信息。