夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLensアプリのRenderScaleをアプリ内で変更する

本日はHoloLensアプリの表現の実験枠です。

Unityではレンダリングの設定としてRenderScaleと呼ばれるパラメータがあります。

これはUnityにおいてレンダリングされる画面の解像度のパラメータで、URPを使用しているプロジェクトの場合URPAssetsから確認できます。

 この値はデフォルトでは1であり、値を増やすことでグラフィックが高精細になりますが、反面メモリ消費率が上がりアプリのFPS低下や最悪の場合クラッシュの原因になります。

 またHoloLens 2の場合RenderScaleを1以上に設定した場合カメラリソースにアクセスできずMRCが使用できなくなる問題があります。

redhologerbera.hatenablog.com

 反面1以下に設定することでレンダリングのリソースを開け、FPSの維持につなげることができます。

今回はアプリケーション内でこのRenderScaleを変更できるようにしてみます。

〇RenderScaleの変更

今回は次のコードを書きました。

using UnityEngine;
using UnityEngine.XR;
using Microsoft.MixedReality.Toolkit.UI;

public class RenderScaleSet : MonoBehaviour
{

    [Range(0f, 2f)] public float renderScale;
    
    // Start is called before the first frame update
    void Start()
    {
        XRSettings.eyeTextureResolutionScale = 1f;
    }

    public void OnRenderScaleSet(SliderEventData sliderEvent)
    {
//スライダーは0~1の値をとるので×2で0~2までの値をとれるようにしている。        XRSettings.eyeTextureResolutionScale = sliderEvent.NewValue*2;

    }
}

次にPinchSliderプレファブを配置しPinchSliderコンポーネントのOn Value Updated()のイベントに先ほどのコンポーネントのOnRenderScaleSet(SliderEventData sliderEvent)を指定します。

これでMRTKのスライダーでレンダースケールを変更できるようになりました。

〇実機での確認

Render Scale0と2の場合の比較がこちらになります。

注意点としてHolographicRemotingを使用しているアプリでは動的に変更することで接続が解除されます。

また動的に変更する場合MRCなどでキャプチャをとることはできません。

これは推測ですが、カメラ設定が接続時と異なることでエラーなどが生じているのではないでしょうか?

本日は以上です。