氷シェーダや七色シェーダを作って遊ぶ

2020-06-19   (Updated : 2020-08-10)

URP の勉強用にシェーダを書いて遊んでいた時の記録。

(コードは公開用には整ってないので動画だけ…)

氷シェーダ

  • リムライトと色味、スペキュラの調整で結構氷っぽく見える
  • 透明なところはリムが一定値以下のところで discard してるだけ

ホログラム風?シェーダ

  • 上記の氷シェーダの応用で違う見た目が作れないか試していたもの
  • 頂点シェーダにパーリンノイズをかましてブルブルさせてみた。微妙。

七色ゲーミングシェーダ

  • HSV(色相、彩度、明度)をずらす関数と法線ベクトルであれやこれやしたやつ
  • 結構メタリック感が出ていて面白い

  • HSV をずらす関数は定型化されているので調べれば出てくると思うが、こんな感じの実装:
// RGB を HSV 値でずらした色を返す
half3 shiftColor(half3 rgb, half3 hsv)
{
    half3 color = half3(rgb);
    float VSU = hsv.z * hsv.y * cos(hsv.x * 3.14159265 / 180);
    float VSW = hsv.z * hsv.y * sin(hsv.x * 3.14159265 / 180);

    color.x = (.299 * hsv.z + .701 * VSU + .168 * VSW) * rgb.x
            + (.587 * hsv.z - .587 * VSU + .330 * VSW) * rgb.y
            + (.114 * hsv.z - .114 * VSU - .497 * VSW) * rgb.z;

    color.y = (.299 * hsv.z - .299 * VSU - .328 * VSW) * rgb.x
            + (.587 * hsv.z + .413 * VSU + .035 * VSW) * rgb.y
            + (.114 * hsv.z - .114 * VSU + .292 * VSW) * rgb.z;

    color.z = (.299 * hsv.z - .300 * VSU + 1.25 * VSW) * rgb.x
            + (.587 * hsv.z - .588 * VSU - 1.05 * VSW) * rgb.y
            + (.114 * hsv.z + .886 * VSU - .203 * VSW) * rgb.z;

    return color;
}


シェーダ楽しい!