108 lines
2.3 KiB
HLSL
108 lines
2.3 KiB
HLSL
#ifndef STFUNCTIONS_INCLUDED
|
|
#define STFUNCTIONS_INCLUDED
|
|
|
|
float clamp01 (float value) {
|
|
return clamp(value, 0, 1);
|
|
}
|
|
|
|
float rev (float value) {
|
|
return 1.0 - value;
|
|
}
|
|
|
|
float rev01 (float value) {
|
|
return clamp01(rev(value));
|
|
}
|
|
|
|
float pos (float value) {
|
|
return value > 0 ? 1 : 0;
|
|
}
|
|
|
|
float posz (float value) {
|
|
return value >= 0 ? 1 : 0;
|
|
}
|
|
|
|
float neg (float value) {
|
|
return value < 0 ? 1 : 0;
|
|
}
|
|
|
|
float negz (float value) {
|
|
return value <= 0 ? 1 : 0;
|
|
}
|
|
|
|
float lerp01 (float from, float to, float value) {
|
|
return clamp01(lerp(from, to, value));
|
|
}
|
|
|
|
float invLerp (float from, float to, float value, float equal = 0.) {
|
|
float val = (value - from) / (to - from);
|
|
return from == to ? equal : val;
|
|
}
|
|
|
|
float invLerp01 (float from, float to, float value, float equal = 0.) {
|
|
float val = invLerp(from, to, value, equal);
|
|
return from == to ? val : clamp01(val);
|
|
}
|
|
|
|
float wght_invLerp (float from, float to, float value, bool invert = false) {
|
|
float val = (value - from) / (to - from);
|
|
|
|
float wgtMin = !invert ? 0 : 1;
|
|
float wgtMax = !invert ? 1 : 0;
|
|
float wgt = value < from ? wgtMin : wgtMax;
|
|
|
|
float res = value == from ? 0.5 : wgt;
|
|
return from == to ? res : val;
|
|
}
|
|
|
|
float smoothstep (float from, float to, float value, float equal) {
|
|
float val = smoothstep(from, to, value);
|
|
return from == to ? equal : val;
|
|
}
|
|
|
|
float wght_smoothstep (float from, float to, float value, bool invert = false) {
|
|
float val = smoothstep(from, to, value);
|
|
|
|
float wgtMin = !invert ? 0 : 1;
|
|
float wgtMax = !invert ? 1 : 0;
|
|
float wgt = value < from ? wgtMin : wgtMax;
|
|
|
|
float res = value == from ? 0.5 : wgt;
|
|
return from == to ? res : val;
|
|
}
|
|
|
|
float smoothlerp (float from, float to, float value) {
|
|
float val = -(2.0 / ((value + 0.34) * 4.7)) + 1.3;
|
|
return lerp01(from, to, val);
|
|
}
|
|
|
|
float colmagnmin (float3 color) {
|
|
float m1 = min(color.r, color.g);
|
|
return min(m1, color.b);
|
|
}
|
|
|
|
float colmagnmax (float3 color) {
|
|
float m1 = max(color.r, color.g);
|
|
return max(m1, color.b);
|
|
}
|
|
|
|
float colspacemax (float3 color) {
|
|
return rev(colmagnmin(color));
|
|
}
|
|
|
|
float colspacemin (float3 color) {
|
|
return rev(colmagnmax(color));
|
|
}
|
|
|
|
float4 ColorBlend (float4 tcol, float4 dcol, float blendf)
|
|
{
|
|
float4 res = tcol;
|
|
res.r = lerp(tcol.r, dcol.r, blendf);
|
|
res.g = lerp(tcol.g, dcol.g, blendf);
|
|
res.b = lerp(tcol.b, dcol.b, blendf);
|
|
res.a = lerp(tcol.a, dcol.a, blendf);
|
|
|
|
return res;
|
|
}
|
|
|
|
#endif
|