Unity中如何直接渲染纹理到Camera

Ale*_*iba 3 shader textures unity-game-engine

在 Unity 中,我有 2 个纹理形式的图像,我将它们合并在一起(一个叠加另一个)。我在 Compute 中执行此操作Shader并将结果放在RenderTexture. 我希望这RenderTexture是输出相机看到的一切。

我发现文章说要使用ReplacementShader相机的属性,但我无法使其正常工作。

目前,我只是将 放在RenderTexture覆盖UIRawImage整个 UI Canvas 上,以便填充整个相机。然而,这有很大的滞后性,显然是一个次优的解决方案。

那么如何将Rendertexture计算Shader结果直接输出到相机上呢?谢谢。

der*_*ugo 6

你可能可以使用OnRenderImage

Unity 在相机完成渲染后调用的事件函数,允许您修改相机的最终图像。

并使用Graphics.Blit

使用着色器将源纹理复制到目标渲染纹理。

并做类似的事情

// This script goes onto your according Camera
public class RenderReplacement : MonoBehaviour
{
    public RenderTexture replacement;

    void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        // To overwrite the entire screen
        Graphics.Blit(replacement, null);

        // Or to overwrite only what this specific Camera renders
        //Graphics.Blit(replacement, dest);
    }
}
Run Code Online (Sandbox Code Playgroud)

在哪里

dest
目的地RenderTexture。将其设置为直接nullblit到 screen。请参阅说明以获取更多信息。


请注意,如 API 中所述,该 Camera 已完成渲染OnRenderImage调用。因此,为了提高效率 - 因为我们基本上放弃了渲染 - 只需通过禁用所有图层来确保相机基本上不会渲染任何内容,例如让它只渲染单一颜色背景