lumino trail

ゲームエンジン作ってます。Github:https://github.com/lriki/Lumino Twitter:https://twitter.com/lriki8

開発状況 2020 #9

HSP3のコンテストに向けてゲーム開発中です。間に合うかなぁ…。

というところなので、Lumino 本体の機能追加はあまり無く、不具合修正が多いです。

ただそんな中でも、シェーダの API は 1.0.0 向けのものを確定させました。 最も基本的な HLSL は次のような感じになります。(頂点シェーダは省略可能)

#include <Lumino.fxh>

struct VSOutput
{
    LN_VS_OUTPUT_DECLARE;
    // 独自の頂点定義を使いたいときはここに追加
};

VSOutput VSMain(LN_VSInput vsi)
{
    VSOutput output;
    LN_ProcessVertex(vsi, output);
    
    output... = ...;  // カスタムの頂点シェーダを書きたいときはここに追加
    
    return output;
}

struct PSInput
{
    LN_PS_INPUT_DECLARE;
    // 独自の頂点定義を使いたいときはここに追加
};

float4 PSMain(PSInput input) : SV_TARGET0
{
    LN_Surface surface;
    LN_ProcessSurface(input, surface);
    
    surface.Albedo = ...;  // カスタムのピクセルシェーダを書きたいときはここに追加

    return LN_ProcessPixel(input, surface);
}

technique Default
{
    ShadingModel = Unlit;  // 特定のシェーディングプロセスでのみ有効にしたいときは明示する
    pass Pass1
    {
        VertexShader = VSMain;
        PixelShader  = PSMain;
    }
}

Lumino はこれをもとに、スキンメッシュや法線マップ、シャドウの有無といった様々な組み合わせのシェーダを自動生成して使います。

実際にカスタムシェーダを使ってみたところはこんな感じです。

f:id:lriki:20200930214316p:plain

後はノードベースのエディタから出力できればいいんだけど…直近は厳しそう。