• チュートリアル
  • 機能解説
  • リファレンス
  • 初代Altseedはコチラ

    • 機能解説
    • エンジン
    • ノード
    • 画像
    • 文字
    • マテリアル
    • カメラ
    • ポストエフェクト
    • サウンド
    • ログ
    • プロファイラ
    • ファイル
    • ファイルパッケージ
    • ジョイスティック
    • キーボード
    • マウス
    • カーソル
    • シリアライズ
    • 衝突判定
    • 図形ノード
    • トランジション
    • メディアプレイヤー
    • Altseed2.Tools (.NETツール)

    マテリアル

    Altseed2では描画方法をマテリアルにより拡張できます。 例えば、画像をそのまま表示するのではなく、反転させたり合成されたりスクロールしたりして表示できます。

    マテリアルを使用するためには、シェーダーを先に用意する必要があります。 シェーダーはHLSLというプログラミング言語で描画方法を記述して、そのソースコードを元に生成します。

    HLSLには制約があります。

    • 頂点シェーダーとピクセルシェーダー間のデータ受け渡し用の構造体の定義は完全に一致する必要があります。
    • サンプラーとテクスチャは隙間なく敷き詰める必要があります。
    • 頂点シェーダーでテクスチャを使用する場合、ピクセルシェーダーでも同じテクスチャとサンプラーの定義を書く必要があります。
    • includeはファイルからシェーダーのソースコードを読み込んだ場合のみ有効です。

    シェーダーを作成し、マテリアルに設定します。 そうすると、設定されたシェーダーをマテリアルで使用して描画します。

    作成したマテリアルは様々なクラスに割り当てられます。

    シェーダーは、直接Altseed2が動いているプログラミング言語の文字列をソースコードとして作成する方法と、テキストファイルを読み込んで作成する方法の2種類があります。 テキストファイルを作成する手間はありますが、includeを使用できるメリットがあります。

    マテリアルにはアルファブレンドを設定できます。 描画される先と描画する画像の間で、画像同士をどのように合成するかを指定できます。 下図の画像は、標準で提供されているOpacity, Normal, Add, Subtract, Multiplyの合成結果です。 これら以外にも自由に合成方法を指定できます。

    AlphaBlend

    using System;
    
    using Altseed2;
    
    namespace Sample
    {
        public class MaterialSample
        {
            const string _HlslCode = @"
    
    struct PS_INPUT
    {
        float4 Position : SV_POSITION;
        float4 Color : COLOR0;
        float2 UV1 : UV0;
        float2 UV2 : UV1;
    };
    
    Texture2D mainTex : register(t0);
    SamplerState mainSamp : register(s0);
    
    float4 main(PS_INPUT input) : SV_TARGET 
    {
        // 入力画像のUV画像に対応するピクセルの色を取得します。
        float4 color = mainTex.Sample(mainSamp, input.UV1);
    
        // RGBの値を反転します。
        color.xyz = float3(1.0) - color.xyz;
    
        // 算出した値を返します。
        return color;
    }
    
            ";
    
            [STAThread]
            static void Main(string[] args)
            {
                // Altseed2 を初期化します。
                if (!Engine.Initialize("TextNode", 640, 480)) return;
    
                // テクスチャを読み込みます。
                var texture = Texture2D.Load(@"TestData/IO/AltseedPink256.png");
    
                // マテリアルを作成します。
                var material = Material.Create();
    
                // マテリアルに使用するシェーダを作成します。
                var shader = Shader.Create("Negative", _HlslCode, ShaderStage.Pixel);
    
                // マテリアルにシェーダを割り当てます。
                material.SetShader(shader);
    
                // 必要な場合、アルファブレンドの種類を割り当てます。
                material.AlphaBlend = AlphaBlend.Normal;
    
                // スプライトを描画するノードを作成します。
                var node = new SpriteNode();
    
                // テクスチャを設定します。
                node.Texture = texture;
    
                // マテリアルを設定します。
                node.Material = material;
    
                // ノードを登録します。
                Engine.AddNode(node);
    
                // メインループ。
                // Altseed のウインドウが閉じられると終了します。
                while (Engine.DoEvents())
                {
                    // Altseed を更新します。
                    Engine.Update();
                }
    
                // Altseed の終了処理をします。
                Engine.Terminate();
            }
        }
    }
    
    Copyright © 2020 Altseed .