0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

シェーダーで板ポリゴンを光らせて遊ぶ

Posted at

シェーダーで板ポリゴンを光らせて遊ぶ

2024-08-20 23-52-48.gif

こういう風に板ポリゴンを光らせるピクセルシェーダーを
いつか使いたくなる時のために、
ここに置いておきます

ピクセルシェーダー

もしも、こういう風に板ポリゴンを光らせたいって人がいたら
あくまで参考程度にとどめてください


// C++側から設定されるデータ①
cbuffer ConstBuffer : register(b0)
{
    float4x4 matWorld; // ワールド行列
    float4x4 matView; // ビュー行列
    float4x4 matProj; // プロジェクション行列
    float4 color; // 色
    float time; // 時間
    float3 padding; // パディング
};

// C++側から設定されるデータ②
Texture2D tex : register(t0); // テクスチャ1
SamplerState samLinear : register(s0); // サンプラーステート

// このシェーダが引数として受け取るデータ
struct PS_INPUT
{
    float4 pos : SV_POSITION; // 位置
    float2 Tex : TEXCOORD; // UV座標
};


// HSVからRGBに変換する関数
float3 HSVtoRGB(float3 hsv)
{
    float3 rgb = clamp(abs(fmod(hsv.x * 6.0 + float3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0);
    return hsv.z * lerp(float3(1.0, 1.0, 1.0), rgb, hsv.y);
}

float4 main(PS_INPUT input) : SV_TARGET
{
    // 時間に基づいて虹色エフェクトを生成
    float gradient = exp(-abs(sin(time * 1.0 + input.Tex.xy * 5.0)));
    
    // テクスチャをサンプリング
    float4 output = tex.Sample(samLinear, input.Tex);
    
    // Hueを時間で変化させて虹色を生成
    float hue = fmod(time * 0.2, 1.0); // 時間に基づいてHueを変化
    float3 rainbowColor = HSVtoRGB(float3(hue, 1.0, 1.0)); // HSVからRGBに変換
    
    // 虹色エフェクトを加える
    output.rgb += gradient * rainbowColor;
    
    // 結果を返す
    return output * color;
}


最初のGIFは板ポリゴンに単純な黒い画像を貼ってるだけなので
なにか適当な画像を貼ってみます

2024-08-21 00-14-14.gif

試しにおまえの魂を光らせてみました
元から画像に色がついてるとこうなります

まとめというか感想というか

マイクラのエンチャントされたアイテムみたいな光り方も
これを応用すればできたりするんかな

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?