RenderPass QML Type
定义用于渲染 3D 内容的自定义渲染通道。更多...
| Import Statement: | import QtQuick3D |
| Since: | Qt 6.11 |
| Inherits: |
属性
- augmentShader : url
- clearColor : color
- commands : list<RenderCommand>
- depthClearValue : real
- materialMode : RenderPass::MaterialModes
- overrideMaterial : Material
- passMode : RenderPass::PassMode
- renderTargetFlags : RenderPass::RenderTargetFlags
- stencilClearValue : int
详细说明
RenderPass 定义了一个渲染步骤及其写入的渲染目标。它由以下三个方面组成:
- 渲染目标— 一个或多个输出纹理,这些纹理在commands 中通过ColorAttachment 或DepthTextureAttachment 命令声明。
- 渲染什么——该渲染通道绘制哪些场景对象,由RenderablesFilter 命令控制。同一渲染目标内的任务划分则通过SubRenderPass 命令进行描述。
- 如何渲染——materialMode 命令以及任何PipelineStateOverride 命令。
当一个渲染通道(RenderPass)被放置为View3D 或Node 的子节点时,它就会在场景中生效。
以下示例设置了一个简单的离屏渲染通道,将所有场景对象渲染到自定义纹理中,该纹理随后可被材质或SimpleQuadRenderer 使用:
import QtQuick3D
View3D {
// Declare the off-screen color buffer
RenderPassTexture {
id: myColorTexture
format: RenderPassTexture.RGBA8
}
// The render pass: where + what + how
RenderPass {
id: myRenderPass
commands: [
// Where: attach the texture as the color output
ColorAttachment {
name: "color0"
target: myColorTexture
},
// What: render all objects into it
RenderablesFilter {
renderableTypes: RenderablesFilter.Opaque | RenderablesFilter.Transparent
}
]
}
}向着色器暴露数据
与 Effects 和 Custom Materials 类似,RenderPass 会自动向着色器暴露并更新用户定义的属性。在 RenderPass 子类型上声明的任何 QML 属性都将在着色器中作为 uniform 变量可用。
另请参阅 SubRenderPass 、RenderOutputProvider 以及RenderablesFilter 。
属性文档
augmentShader : url
当materialMode 设置为AugmentMaterial 时,该属性保存渲染通道的增强着色器URL。
着色器文件应包含一个具有以下签名的函数:
void MAIN_FRAGMENT_AUGMENT() {
// Custom shader code here
}该函数将与当前渲染通道中被渲染对象所使用的材质现有片段着色器进行组合,从而允许用户通过自定义代码增强现有的材质着色器。
clearColor : color [default: Qt.black]
该属性用于指定渲染通道的透明颜色。
commands : list<RenderCommand>
该属性保存了该渲染通道的渲染命令列表。
列表中的命令将按其在列表中出现的顺序依次执行。
注意: RenderPass 和Effects的命令 虽然相似但并不完全相同,只有标记为兼容的命令才能与该RenderPass 一起使用。
另请参阅 SubRenderPass 、PipelineStateOverride 、RenderablesFilter 、RenderPassTexture 、ColorAttachment 、DepthTextureAttachment 、DepthStencilAttachment 、AddDefine 以及renderTargetBlend 。
depthClearValue : real [default: 1.0]
该属性存储了渲染通道的深度清除值。
materialMode : RenderPass::MaterialModes [default: RenderPass.OriginalMaterial]
控制在渲染此通道时对象材质的处理方式。
| 常量 | 描述 |
|---|---|
RenderPass.OriginalMaterial | 对象将使用其自身分配的材质进行渲染,并正常应用完整的光照、纹理和材质属性。这是将场景的忠实副本渲染到自定义渲染目标的标准模式——例如,反射探针的辅助视点、后视摄像头或画中画效果。 在此模式下,overrideMaterial 、augmentShader 和shaders 属性均不被使用。 |
RenderPass.AugmentMaterial | 每个对象都使用其自身的材质进行渲染,但augmentShader 中定义的MAIN_FRAGMENT_AUGMENT() 函数的内容会注入到原始材质的输出定义之后。这使得增强代码能够读取材质的计算颜色,并将其写入该渲染通道中由ColorAttachment 命令定义的额外颜色输出中。 这对于需要按材质进行着色的多渲染目标(MRT)通道非常有用,例如在单次绘制调用中,将受光颜色写入一个附件,并将世界空间法线写入另一个附件。 |
RenderPass.OverrideMaterial | 该渲染通道渲染的所有对象均使用单一的overrideMaterial ,而非各自的材质。这对于仅深度渲染通道、阴影贴图、剪影或轮廓效果,以及任何希望所有几何体无论被分配了何种材质都采用相同着色方式的情况都非常有用。在此模式下,augmentShader 属性不会被使用。 |
overrideMaterial : Material
当“materialMode ”设置为“OverrideMaterial ”时,此属性将保存渲染通道的覆盖材质。
passMode : RenderPass::PassMode [default: RenderPass.UserPass]
该属性用于设置渲染通道的渲染模式。
除了标准的用户渲染通道外,Qt Quick 3D 还支持用户手动触发内部渲染通道,用于渲染天空盒和2D元素。
| 常量 | 描述 |
|---|---|
RenderPass.UserPass | 用户指定的渲染通道。 |
RenderPass.SkyboxPass | Qt Quick 3D的内置天空盒渲染通道。 |
RenderPass.Item2DPass | Qt Quick 3D内置的 2D 元素渲染通道。 |
renderTargetFlags : RenderPass::RenderTargetFlags [default: RenderPass.None]
该属性存储渲染通道的渲染目标标志。这些标志会影响在每个帧的开始和结束时对渲染目标内容处理的方式。
| 常量 | 描述 |
|---|---|
RenderPass.None | 无特殊行为。每帧开始时,颜色和深度/模板内容都会被清空。 |
RenderPass.PreserveColorContents | 在帧与帧之间保留渲染目标的颜色内容,因此上一帧的输出将一直保留,直到被显式覆盖为止。 |
RenderPass.PreserveDepthStencilContents | 在帧与帧之间保留渲染目标的深度和模板内容。 |
RenderPass.DoNotStoreDepthStencilContents | 渲染完成后不存储渲染目标的深度和模板内容(这可能在分块式 GPU 上提高性能)。 |
另请参阅 QRhiTextureRenderTarget::Flags 。
stencilClearValue : int [default: 0]
该属性保存了渲染通道的模板透明度值。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.