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 许可证下可用。
了解详细信息。