How to Render to Fullscreen Texture pixel perfect

Hi.

I want to render my whole scene to a texture which in turn gets put back in front of the camera so that it looks exactly like the scene but as a texture.
The problem is that the way i do it currently the result is slightly off to the top right.
So if i repeat this process several times objects appear to move (and get blurry).

Here is what I currently do.

    //Create a Texture object wich has the dimension of the //whole screen
    
IEnumerator InitCombineTex()
    {
        yield return new WaitForEndOfFrame();

        Vector2 bottomLeft = UICamera.currentCamera.ViewportToWorldPoint(Vector3.zero);
        CombineTexture.transform.position = new Vector3(bottomLeft.x, bottomLeft.y, CombineTexture.transform.position.z);

        Vector2 topRight =  UICamera.currentCamera.ViewportToWorldPoint(Vector3.one);

        Transform origParent = CombineTexture.transform.parent;
        CombineTexture.transform.parent = null;
        CombineTexture.transform.localScale = new Vector3(topRight.x - bottomLeft.x, topRight.y - bottomLeft.y, 1);
        CombineTexture.transform.parent = origParent;
    }

And then render the whole screen into a texture

private IEnumerator CombinePaintAndCanvas()
    {
        Texture2D overlay = (Texture2D)Overlay.renderer.material.mainTexture;

        RenderTexture rt = new RenderTexture((int)UICamera.currentCamera.pixelWidth, (int)UICamera.currentCamera.pixelHeight, 24, RenderTextureFormat.Default);

        Texture2D tex = new Texture2D((int)UICamera.currentCamera.pixelWidth, (int)UICamera.currentCamera.pixelHeight, TextureFormat.RGB24, false);
        yield return new WaitForEndOfFrame();

        UICamera.currentCamera.targetTexture = rt;
        UICamera.currentCamera.Render();
        RenderTexture.active = rt;

        tex.ReadPixels(new Rect(0, 0, (int)UICamera.currentCamera.pixelWidth, (int)UICamera.currentCamera.pixelHeight), 0, 0);

        tex.Apply();

        CombineTexture.mainTexture = tex;

        UICamera.currentCamera.targetTexture = null;
        RenderTexture.active = null;
        Destroy(rt);
    }

Anybody any idea what I’m doing wrong? Or is this that kind of rounding error which is hard to prevent?
Thx in advance.

You should read about the half-pixel offset (e.g. here or here).

Maybe you attach a behaviour to the camera and capture the screen in the “OnPostRender” method. To avoid blurry screens you can turn off the AntiAliasing by setting QualitySettings.antiAliasing = 0 until the capturing process is complete. Afterwards you restore the old settings. Maybe this tutorial is helpful to you. It explains how to capture a screen without a pro license. Link: Render screen to texture in Unity3D (without Pro)