SayachangKompakt.cginc
Unityで利用するための小さなcginc。
関数の文法やスィズル、色や形の扱いについて読み取るためのサンプル。
code:SayachangKompakat.cginc HLSL
// π
// 円と三角関数を扱うためのπ
static float PI = 3.141592653589793238;
// 時間
// 時間経過で周期的な数字(-1.0から1.0)を作る
// _Time.yは1秒で1増える
float scgTimer()
{
return sin(_Time.y);
}
// 白黒
// ひとつのfloatの数字(0.0 - 1.0)から単色を作る
fixed4 scgGray(float c) {
return fixed4(c.rrr, 1);
}
// 色相
// 色相(HUE)を元に、ひとつのfloatの数字(0.0 - 1.0)から色を作る
float3 scgHUE2RGB(float h)
{
float r = abs(h * 6 - 3) - 1;
float g = 2 - abs(h * 6 - 2);
float b = 2 - abs(h * 6 - 4);
return saturate(float3(r, g, b));
}
// 丸
// 2次元座標(pにuvを渡す)と半径(rad)から円を作る
float scgRound2(float2 p, float rad)
{
float2 st = p - 0.5;
return step(distance(st, 0), rad);
}
// 線
// pにuvを渡し、指定した座標aとaを繋ぐ直線を作る
// rは線の太さ
float scgLiner2(float2 p, float2 a, float2 b, float r)
{
float2 pa = p - a;
float2 ba = b - a;
float h = clamp(dot(pa, ba) / dot(ba, ba), 0, 1);
return length(pa - ba * h ) - r;
}
// 四角
// pにuvを渡し、sizeで指定した大きさの四角形を作る
float scgRectangle(float2 p, float size) {
float2 st = p - 0.5;
return step(max(abs(st.x), abs(st.y)), size);
}
// 三角
// pにuvを渡し、三角形を作る
float scgTriangle(float2 p){
float2 st = p - 1;
st = scgRotate(st, PI / 6);
// Number of sides of your shape
int N = 3;
// Angle and radius from the current pixel
float a = atan2(st.y, st.x) + PI;
float r = 2 * PI / float(N);
// Shaping function that modulate the distance
float d = cos(floor(0.5 + a / r) * r - a) * length(st);
return 1.0 - smoothstep(0.4, 0.41, d);
}