Forum Discussion

🚨 This forum is archived and read-only. To submit a forum post, please visit our new Developer Forum. 🚨
PuffyFluff's avatar
PuffyFluff
Protege
4 years ago

App Submission Assets questions

I want to submit an app for the Quest. I am using Quest v.1 

 

The submission details asks for 5 screenshots with resolution 2560 x 1440px. Taking screenshots in the game, the images are 1440 x 1440. Should I just slap the banner behind the shots to make up the width? Seems weird to me.

Also the video, not sure about the resolution when I take it in game will be, but the cover image for the trailer asks for 2560 x 1440px. Pretty sure the video won't be that. And that image is basically supposed to be the first frame of the video.

2 Replies

  • Fulby's avatar
    Fulby
    Heroic Explorer

    I use a script in Unity to take screen shots at the required resolution - doing something like that will result in more professional images on your store page than capturing from inside the headset and adding a banner.

     

    This is the script in case it's helpful to you:

     

    using UnityEngine;
    using System.Collections;

    public class HighResScreenshot : MonoBehaviour
    {
    public int resWidth = 2560;
    public int resHeight = 1440;
    public string filenamePrefix = "screen";

    public static string ScreenShotName(string filenamePrefix, int width, int height)
    {
    return string.Format("{0}/../Screenshots/{4}_{1}x{2}_{3}.png",
    Application.dataPath,
    width, height,
    System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")
    , filenamePrefix);
    }

    private void Awake()
    {
    #if !UNITY_EDITOR
    enabled = false;
    #endif
    }

    void LateUpdate()
    {
    if(Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.Joystick1Button5)) {
    TakeScreenShot();
    }
    }

    [Sirenix.OdinInspector.Button]
    void TakeScreenShot()
    {
    //Camera Mcamera = Camera.main;

    GameObject rig = GameObject.Find("OVRCameraRig");
    Transform centreEye = rig != null ? rig.transform.FindChildRecursive("CenterEyeAnchor") : null;
    Camera Mcamera = centreEye != null ? centreEye.GetComponentInChildren<Camera>() : Camera.main;
    if(Mcamera == null) {
    Mcamera = GameObject.FindObjectOfType<Camera>();
    }

    /*var farRig = GameObject.Find("OVRCameraRigFar");
    Camera farCam = farRig != null ? farRig.GetComponentInChildren<Camera>() : null;*/

    int rw = resWidth;
    int rh = resHeight;
    RenderTexture rt = new RenderTexture(rw, rh, 24);
    /*if(farCam) {
    farCam.targetTexture = rt;
    }*/
    if(Mcamera) {
    Mcamera.targetTexture = rt;
    }
    Texture2D ss = new Texture2D(rw, rh, TextureFormat.RGB24, false);
    //float a = Mcamera.aspect;
    //Mcamera.aspect = rw / rh;


    GameObject[] disableForSceenshot = GameObject.FindGameObjectsWithTag("RemoveForScreenshot");
    bool[] enableGameObject = new bool[disableForSceenshot.Length];
    for(int i = 0; i < disableForSceenshot.Length; i++) {
    enableGameObject[i] = disableForSceenshot[i].activeSelf;
    disableForSceenshot[i].SetActive(false);
    }

    /*if(farCam) {
    farCam.Render();
    }*/
    if(Mcamera) {
    // The near camera doesn't show the 'one draw call' space box - this code changes that just for the screenshot rendering
    // Rendering the far cam then the near cam doesn't work - the near cam clears the background to blue.
    int zCullingMask = Mcamera.cullingMask;
    Mcamera.cullingMask |= LayerMask.GetMask("FarOnly");
    float zOldFar = Mcamera.farClipPlane;
    Mcamera.farClipPlane = 600000;

    Mcamera.Render();

    Mcamera.cullingMask = zCullingMask;
    Mcamera.farClipPlane = zOldFar;
    }
    RenderTexture.active = rt;
    ss.ReadPixels(new Rect(0, 0, rw, rh), 0, 0);

    for(int i = 0; i < disableForSceenshot.Length; i++) {
    disableForSceenshot[i].SetActive(enableGameObject[i]);
    }

    /*if(farCam) {
    farCam.targetTexture = null;
    }*/
    if(Mcamera) {
    Mcamera.targetTexture = null;
    }
    RenderTexture.active = null;
    //Mcamera.aspect = a;
    Destroy(rt);
    byte[] bytes = ss.EncodeToPNG();
    string filename = ScreenShotName(filenamePrefix, rw, rh);// "screenshot.png";
    System.IO.File.WriteAllBytes(filename, bytes);
    Debug.Log(string.Format("Took screenshot to: {0}", filename));
    }
    }

     

  • Thanks, appreciated, but I am using Unreal Engine. What I did for now, was just to take screenshots from inside the GUI. I had to scale them up a bit but they look ok.