GrabPass 是一个创建特殊类型 Pass 的命令,该 Pass 将帧缓冲区的内容抓取到纹理中。此纹理可用于后续的 Pass 中,以执行高级基于图像的效果。
此命令可能会显著增加 CPU 和 GPU 的帧时间。通常应避免使用此命令,除非用于快速原型设计,并尝试通过其他方式实现您的效果。如果确实使用了此命令,请尽量减少屏幕抓取操作的数量;可以通过减少对该命令的使用,或者在适用情况下使用将屏幕抓取到命名纹理的签名来实现。
功能名称 | 通用 渲染管线一系列操作,用于获取场景的内容并在屏幕上显示它们。Unity 允许您从预构建的渲染管线中进行选择,或编写自己的渲染管线。 更多信息 参见 术语表 (URP) |
高清渲染管线 (HDRP) | 自定义 SRP | 内置渲染管线 |
---|---|---|---|---|
GrabPass | 否 | 否 | 否 | 是 |
在 SubShader 块中使用此命令。
请注意,这两个不同的签名具有不同的功能和不同的性能影响。使用命名纹理可以显著减少屏幕抓取操作次数,从而降低此资源密集型命令的影响。
签名 | 功能 |
---|---|
GrabPass { } |
将帧缓冲区内容抓取到纹理中,您可以在同一 SubShader 中的后续 Pass 中使用该纹理。 使用名称 _GrabTexture 引用纹理。 当您使用此签名时,Unity 会在渲染包含此命令的批次时每次都抓取屏幕。这意味着 Unity 可以在每帧中多次抓取屏幕:每个批次一次。 |
GrabPass { "ExampleTextureName" } |
将帧缓冲区内容抓取到纹理中,您可以在同一帧中,跨多个 SubShader 的后续 Pass 中访问该纹理。 使用给定的名称引用纹理。 当您使用此签名时,Unity 会在帧中第一次渲染包含此命令且具有给定纹理名称的批次时抓取屏幕。 |