Table of Contents

カスタム色変換

上級 プログラマー

Stride では、独自のカスタム色変換エフェクトを書くことができます。例えば、以下のものが作成できます。<!-- You can write your own custom color transform effects. For example, you can create:

  • カメラに付着した水滴
  • 画面遷移(フェードイン、フェードアウトなど)
  • 苦痛や酔いを感じさせるエフェクト(例:色合いやその他のエフェクトの適用)
  • オブジェクトの輪郭

カスタム色変換を作成するには、2 つのファイルを記述する必要があります。エフェクトシェーダー(エフェクト自体を含む)と、C# クラス(Game Studio でエフェクトにアクセスできるようにするスクリプト)です。

1. シェーダーを作成する

  1. Stride Visual Studio 拡張機能がインストールされていることを確認してください。この拡張機能は、シェーダーファイルを SDSL(Stride シェーディング言語)から .cs ファイルに変換するために必要です。

  2. Game Studio のツールバーで、Open in IDEOpen in IDE)をクリックし、Visual Studio でプロジェクトを開きます。

  3. Visual Studio のソリューションエクスプローラーで、プロジェクト(例:MyGame.Game)を右クリックし、[追加] > [新しい項目] を選択します。

    New item

  4. [クラス] を選択します。

    Select class

  5. [名前] 欄に、拡張子 ".sdsl" を持つファイル名(例えば MyColorTransformShader.sdsl)を記述し、[追加] をクリックします。

    Create post effect

    Stride Visual Studio 拡張機能では、.sdsl ファイルから .cs ファイルを自動的に生成します。ソリューションエクスプローラーでは、.sdsl ファイルの子としてリストアップされます。

    My post effect

  6. .sdsl ファイルを開いて、既存の行を削除し、シェーダーを記述します。

    シェーダーは、HLSL をベースにした Stride シェーディング言語(SDSL)で記述します。詳しくはシェーディング言語をご覧ください。

    例えば、以下のシェーダーは、画像の色に MyColor パラメータを乗算します。

    shader MyColorTransformShader : ColorTransformShader
    {
        [Color]
        float4 MyColor;
    
        override float4 Compute(float4 color)
        {
            return color * MyColor;
        }
    };
    
    Note

    ファイル内のシェーダー名(上のコードでは MyColorTransformShader)と、ファイル名(例:MyColorTransformShader.sdsl)が同じであることを確認してください。

2. C# クラスを作成する

  1. Visual Studio のソリューションエクスプローラーで、プロジェクト(例:MyGame.Game)を右クリックし、[追加] > [新しい項目] を選択します。

    New item

  2. [クラス] を選択し、[名前] を記述して(例:MyColorTransform.cs)、[追加]をクリックします。

    Add script

    ファイルを開いて、クラスを書きます。

    例えば、以下のコードでは、シェーダーを使用して、色 MyColor (シェーダーで定義されている)の値を供給する MyColorTransform クラスを定義しています。

    using Stride.Core;
    using Stride.Core.Mathematics;
    using Stride.Rendering;
    using Stride.Rendering.Images;
    
    namespace MyGame
    {
        [DataContract("MyColorTransform")]
        public class MyColorTransform : ColorTransform
        {
            /// <inheritdoc />
            public MyColorTransform() 
                : base("MyColorTransformShader")
            {
            }
    
            public Color4 MyColor { get; set; }
    
            public override void UpdateParameters(ColorTransformContext context)
            {
                Parameters.Set(MyColorTransformShaderKeys.MyColor, MyColor);
    
                // Copy parameters to parent
                base.UpdateParameters(context);
            }
        }
    }
    
    Note

    ファイル内のクラス名(上のクラスの例では MyColorTransform)が、ファイル名(例:MyColorTransform.cs)と同じであることを確認してください。

  3. ソリューションエクスプローラーで [ファイル] > [すべて保存] を選択して、すべてのファイルを保存します。

  4. Game Studio でアセンブリを再読み込みします。

    Reload assemblies

    アセットビュー で、スクリプトと同じディレクトリに、先ほどのクラスと、エフェクトシェーダーが表示されます。

    Shader in Asset View

    Note

    以下のスクリーンショットのように、Game Studio がシェーダーをスクリプトとして誤って検出してしまう場合があります。

    Shader as script

    これが発生した場合は、Game Studio を再起動してください([File] > [Reload project])。

3. カスタム色変換を使用する

  1. アセットビューで、グラフィックスコンポジターアセットをダブルクリックします。

    Graphics Compositor asset

    すると、グラフィックスコンポジターエディターが開きます。

    Graphics Compositor editor

  2. Post-processing effects ノードを選択します。

  3. プロパティグリッドで、Color transforms の下部にある Green plus button追加)をクリックし、先ほど作成した色変換(例:MyColorTransform)を選択します。

    Add script

  • エフェクトを有効または無効にするには、Item の横にあるチェックボックスを使います。

    Enable and disable custom post effect

  • 指定したクラスの public プロパティを編集するには、Item を展開します。

    Expand item

    プロパティを修正すると、Game Studio がそのエフェクトを自動的に更新します。

Warning

残念ながら、Game Studio にはこの部分にメモリーリークの問題があります。グラフィックスコンポジターで値を変更するたびに、60MB のメモリを消費します。Game Studio がメモリを使いすぎないように、プロパティを何度か変更した後は Game Studio を再起動することをお勧めします。これは既知の問題です。

関連項目