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

    Custom Pass Utils API ユーザーマニュアル

    ブラー

    ガウシアンブラー

    ガウシアンブラー機能を使うと、任意の半径と品質 (サンプル数) を持つ画像をぼかすことができます。パフォーマンスの理由により、ブラーカーネルはダウンサンプルパスの後に実行できます。これによりブラー効果のリソース負荷は減少しますが、品質も低下します。

    こちらはカメラのカラーバッファをぼかすカスタムパスの一例です。

    using UnityEngine;
    using UnityEngine.Rendering.HighDefinition;
    using UnityEngine.Rendering;
    using UnityEngine.Experimental.Rendering;
    
    class GaussianBlur : CustomPass
    {
        RTHandle    halfResTarget;
    
        protected override void Setup(ScriptableRenderContext renderContext, CommandBuffer cmd)
        {
            halfResTarget = RTHandles.Alloc(
                // * 0.5f をここに記入する。半解像度ターゲットを割り当て、大量のメモリーを節約できる。
                Vector2.one * 0.5f, TextureXR.slices, dimension: TextureXR.dimension,
                // アルファはガウシアンブラーに不要なため、このエフェクトはアルファチャンネルを持たない HDR テクスチャフォーマットを使う。
                colorFormat: GraphicsFormat.B10G11R11_UFloatPack32,
                // デバッグに役立つので、テクスチャを作成する際は必ず名前を付けること。
                useDynamicScale: true, name: "Half Res Custom Pass"
            );
        }
    
        protected override void Execute(CustomPassContext ctx)
        {
            // ブラーの対象にする半径をピクセルで特定する。この例では半径8ピクセルを使用。
            float radius = 8.0f;
            // ブラーの精密性を特定する。これはブラーのリソース負荷にも影響する。値が9の場合にリアルタイムアプリケーションに適している。
            int sampleCount = 9;
    
            // 異なる解像度の複数のカメラがある場合に、すべてのカメラでブラーを一貫にする。
            radius *= ctx.cameraColorBuffer.rtHandleProperties.rtHandleScale.x;
    
            // 実際のガウシアンブラー呼び出し。現在のカメラのカラーバッファを起源および目的地として特定する。
            // これは半解像度ターゲットをブラーパス間の一時的なレンダーターゲットとして使う。
            // ガウシアンブラー機能は、終了時点で半解像度バッファのコンテンツをクリアにするの注意する。
            CustomPassUtils.GaussianBlur(
                ctx, ctx.cameraColorBuffer, ctx.cameraColorBuffer, halfResTarget,
                sampleCount, radius, downSample: true
            );
        }
    
        // 半解像度ターゲットに割り当てられた GPU メモリーを開放する。そうしなければメモリーが漏れるため、重要である。
        protected override void Cleanup() => halfResTarget.Release();   
    }
    

    この例では、まず最初にダウンサンプルパスをプロセスするため、半解像度ターゲットである halfResTarget を使っていることに注意してください。代わりに HDRP が提供するカスタムパスバッファも利用できます。たとえ半解像度バッファでなくても、アルゴリズムはテクスチャの半分のみを使います。

    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)