シェーダー勉強内容(2022年5月)
はじめに
2022年5月に勉強した内容です。
過去の記事はこちら
Unity
前回に引き続き自分がどんなシェーダーを作れるのかポートフォリオっぽいものを作ることに専念してました。
走査線シェーダー
Unityのアセットのポストプロセッシングに対応したカスタムエフェクトシェーダーを作成しました。
内容はありがちな走査線シェーダーです。
走査線の量
走査線を上から下に移動
走査線の濃さ
画面を歪ませる
画面のふちを黒くする
たまにビカッとグリッチを出す
といった機能を備えています。
作る際にUnityのShaderGraphのRemapノードを拡張したメソッドを作りました。
float remap(float val, float2 inMinMax, float2 outMinMax)
{
return clamp(outMinMax.x+(val-inMinMax.x)*(outMinMax.y-outMinMax.x)/(inMinMax.y-inMinMax.x), outMinMax.x, outMinMax.y);
}
Remapでは入力した値を好きに設定した範囲に直すことができます。
しかし、ShaderGraphのRemapではClampをしてくれないらしいのでClamp機能を拡張しました。
Noiseのメソッド
毎回ノイズ関数を自作するのは面倒だと思ったので今後のためにノイズ関数を集めたHLSLを作りました。
上の走査線シェーダーでもグリッチを作るために使用しています。
ブロックノイズ
バリューノイズ
パーリンノイズ
セルラーノイズ
ボロノイ
を現状用意しています。
これだけ準備してたら困ることはないだろうといった感じです。
セルラーノイズとボロノイに関してはまだセルが動く機能は作っていないので気が向いたら作ります。
ボロノイについて
ボロノイを作る際に通常はユークリッド距離を使用してノイズを作ります。
ここでチェビシェフ距離を使うと機械っぽいノイズを作ることができます。
ユークリッド距離のボロノイメソッドとチェビシェフ距離のボロノイメソッドと二つ作ってもいいのですがユークリッド距離、マンハッタン距離、チェビシェフ距離の三つを一つにまとめたミンコフスキー距離というものがあります。
これを利用して一つのボロノイメソッドで数種類のボロノイを作成できるように工夫しました。
float voronoi(float2 uv, float s, float distanceType)
{
float2 i=floor(uv*s);
float2 f=frac(uv*s);
// 省略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
voronoi(UV, サイズ, 距離の種類)でいろいろなボロノイを作れます。
ボロノイのエッジをこのミンコフスキー距離を利用して数種類のボロノイでエッジを取れるようにしたかったのですが現状の自分にはできないことが判明し、諦めました。
今後
6月から新プロジェクトが始まりました。
URPで2Dゲームを作ります。
URP対応のシェーダーを作った経験が少ないのでここでたくさん勉強したいです。