docs.unity3d.com
    目次を表示する/隠す

    Frame Settings Scripting API

    HD レンダーパイプライン (High Definition Render Pipeline、HDRP) において、フレーム設定 は、カメラ、リフレクションプローブ、または 平面リフレクションプローブ などのレンダリングコンポーネントがどのようにシーンをレンダリングするかを制御します。プロジェクト全体にデフォルトフレーム設定を特定してから、ある特定のレンダリングコンポーネントに対してオーバーライドすることが可能です。つまり、各フレーム設定には HDRP アセット で設定されているデフォルト値があり、シーンの個々のレンダリングコンポーネントはそれをオーバーライドできるということです。これはあるエフェクトを使う必要のない、優先順位の低いレンダリングコンポーネントがある場合に、便利です。レンダリングコンポーネントがオーバーライドするデフォルトフレーム設定を特定するために、各レンダリングコンポーネントには オーバーライドマスク が含まれています。マスクはビットの配列で、ビットはそれぞれ 2 種類のステートの 1 つを表します (0 は無効、1 は有効)。オーバーライドマスクの各ビットは、特定のフレーム設定のオーバーライドステートを表します。

    特定のレンダリングコンポーネントにフレーム設定の最終値を取得するために、HDRP は以下のステップを実行します。

    1. フレーム設定に対するプロジェクト全体のデフォルト値を確認します。このステップでは、HDRP は HDRP アセットのフレーム設定に格納された既存値を確認します。
    2. レンダリングコンポーネントのオーバーライドマスクを確認し、フレーム設定に相当するビットが設定されているかを確かめます。オーバーライドマスクのフレーム設定のビットのステートは、レンダリングコンポーネントのインスペクターにあるフレーム設定の左側のオーバーライドチェックボックスのステートと一致します。
    3. レンダリングコンポーネントのカスタムフレーム設定から、フレーム設定のオーバーライド値を取得します。
    4. 結果をサニタイズします。HDRP アセットで使う機能を特定し、プロジェクトを軽くすることができます。変更したいフレーム設定が利用できない機能に影響を及ぼす場合は、Unity はこの最終削除パスで破棄します。利用不可能な機能を HDRP がプロセスしないようにするため、スクリプティング API を介してサニタイズ処理にアクセスすることはできません。

    デフォルトフレーム設定の変更

    デフォルトフレーム設定は HDRP アセットにあるため、ランタイムに変更することは推奨できません。代わりに、デフォルト設定タブ の Edit モードで変更してください。

    デフォルトフレーム設定はそれぞれ、3 つのレンダリングコンポーネントのタイプに設定できます。

    • カメラ
    • リアルタイムリフレクションプローブおよびリアルタイム平面リフレクションプローブ
    • ベイクした/カスタムリフレクションプローブおよびベイクした/カスタム平面リフレクションプローブ

    現在デフォルトフレーム設定を変更するスクリプティング API はありません。

    特定のレンダリングコンポーネントに対するフレーム設定の変更

    HDRP はレンダリングコンポーネントに付随する追加データコンポーネントに、レンダリングコンポーネント用のフレーム設定を格納しています。追加データコンポーネントは以下の通りです。

    レンダリングコンポーネント 追加データコンポーネント
    Camera HDAdditionalCameraData
    Reflection Probe HDAdditionalReflectionData

    フレーム設定の値を変更するには、まず最初に追加データコンポーネントへの参照を取得します。このためにはパブリックの変数を作成してインスペクターで割り当てるか、または T が追加データコンポーネントタイプである GetComponent() を使います。

    次に、フレーム設定オーバーライドマスクにアクセスします。これはどのフレーム設定にオーバーライドされた値を使うかを制御する、 FrameSettingsOverrideMask のタイプです。フレーム設定オーバーライドマスクへのアクセスは、カメラのフレーム設定を変更したいか、またはリフレクションプローブを変更したいかによって異なります。

    • カメラ: HDAdditionalCameraData.renderingPathCustomFrameSettingsOverrideMask
    • リフレクションプローブ: HDAdditionalReflectionData.frameSettingsOverrideMask

    マスクでビットを設定/設定解除する方法を含む、FrameSettingsOverrideMask に利用可能な API に関する情報は、FrameSettingsOverrideMask スクリプティング API を参照してください。

    最後に、フレーム設定構造自体にアクセスします。これは各フレーム設定に対する実際の値を制御する、 FrameSettings のタイプです。フレーム設定へのアクセスは、カメラのフレーム設定を変更したいか、またはリフレクションプローブを変更したいかによって異なります。

    • カメラ: HDAdditionalCameraData.renderingPathCustomFrameSettings
    • リフレクションプローブ: HDAdditionalReflectionData.frameSettings

    フレーム設定値の編集方法を含む、FrameSettings に利用可能な API に関する情報は、フレーム設定スクリプティング API を参照してください。

    フレーム設定エニュメレーター

    フレーム設定の値をより簡単に設定するために、HDRP は次の enum タイプを提供します。

    LitShaderMode

    レンダリングコンポーネントをディファ―ドとフォワードレンダリング間で切り替えるための enum です。

    各 enum 値に関する情報は、LitShaderMode を参照してください。

    LODBiasMode

    HDRP がどのように LOD バイアスを計算するかを定義する enum です。

    各 enum 値に関する情報は、 LODBiasMode を参照してください。

    MaximumLODLevelMode

    HDRP がどのように最大 LOD レベルを計算するかを定義する enum です。

    各 enum 値に関する情報は、 MaximumLODLevelMode を参照してください。

    FrameSettingsField

    各エントリーが特定のフレーム設定を表現する enum です。この enum のエントリーリストは、FrameSettingsField を参照してください。

    各フレーム設定に対するエントリーと同様、この enum もまた、便宜上および内部使用の目的で、-1 に設定されている FrameSettingsField.None 値を含みます。

    FrameSettingsOverrideMask Scripting API

    これはオーバーライドマスクを格納する単一フィールドを持つ構造体です。この構造体および含まれる API に関する情報は、FrameSettingsOverrideMask を参照してください。

    オーバーライドマスクで指定された Frame Setting に対するビットに簡単にアクセスできるよう、HDRP は FrameSettingsField enum を提供します。これは例えば、Opaque Objects のフレーム設定をオーバーライドするビットを見つけるときに、使うことができます。この場合、this[(int)FrameSettingsField.OpaqueObjects] を実行します。

    次の例では、レンダリングコンポーネントのオーバーライドマスクからの humanizedData と、レンダリングコンポーネントのカスタムフレーム設定を比較する方法を示しています。これらはカスタムフレーム設定ですがマスクはすべてゼロで、つまりこのレンダリングコンポーネントがデフォルトフレーム設定を使うことを意味します。

    FrameSettings Scripting API

    これはレンダリングコンポーネントがどのようにシーンをレンダリングするかに関する情報を含む構造体です。この構造体および含まれる API に関する情報は、フレーム設定 を参照してください。

    例

    次の例では、カメラが不透明ゲームオブジェクトをレンダリングしないようにカメラのフレーム設定を変更する、コンポーネントを実演します。カメラがフレーム設定を変更するという意味のパブリックフィールド、cameraToChange と、カメラのフレーム設定を変更するロジックを含むパブリック関数RemoveOpaqueObjectsFromRendering を持ちます。

    using UnityEngine;
    using UnityEngine.Rendering.HighDefinition;
    
    public class ChangeFrameSettings : MonoBehaviour
    {
        public Camera cameraToChange;
    
        public void RemoveOpaqueObjectsFromRendering()
        {
            HDAdditionalCameraData hdCameraData = cameraToChange.GetComponent<HDAdditionalCameraData>();
    
            hdCameraData.renderingPathCustomFrameSettingsOverrideMask.mask[(int)FrameSettingsField.OpaqueObjects] = true;
    
            hdCameraData.renderingPathCustomFrameSettings.SetEnabled(FrameSettingsField.OpaqueObjects, false);
        }
    }
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)