I am creating a fairly complex programmatic gameboard using multiple gameObjects, sprites, materials, etc. Once it is created it is static so I want to take a screenshot photo of the gameboard and convert that to a single sprite -- goal is to save on draw calls, move it around and scale it cleanly (eg in a menu), etc. My work flow is: 1. set up the gameboard 2. use ReadPixels to take the screenshot into a Texture2D 3. use Sprite.Create() to display the image using a single new gameObject 4. kill all the previous gameObjects Everything is working, EXCEPT that the image that is created is scaled smaller than the original screen. I can't figure out why the image is a shrunken version of the original screen. I want a 1 for 1 pixel for pixel representation in my sprite. Thank you in advance for any ideas as to why this shrinking is happening? Relevant code is below: In a class attached to camera: Code (csharp): public class TakeScreenShot : MonoBehaviour { public static int snapPhoto = 0; public static Texture2D image; IEnumerator OnPostRender () { if (snapPhoto==1) { yield return new WaitForEndOfFrame(); image = new Texture2D(Screen.width,Screen.height,TextureFormat.RGB24,false); image.ReadPixels(new Rect(0,0,Screen.width,Screen.height),0,0,false); image.Apply(); snapPhoto = 2; } } } In main in Update(): Code (csharp): if (Input.GetMouseButtonDown(0)) { TakeScreenShot.snapPhoto = 1; } if (TakeScreenShot.snapPhoto == 2) { TakeScreenShot.snapPhoto = 0; GameObject go = new GameObject(); SpriteRenderer sr = go.AddComponent<SpriteRenderer>(); sr.sprite = Sprite.Create(TakeScreenShot.image,new Rect(0,0,Screen.width,Screen.height),new Vector2(0,0)); Vector3 gotrlp = go.GetComponent<Transform>().localPosition; gotrlp.x = -2f; //set this to bottom left of screen so that whole image can be displayed gotrlp.y = -2f; //set this to bottom left of screen so that whole image can be displayed go.GetComponent<Transform>().localPosition = gotrlp; }