HLSL 함수정리, 삼각함수, 수학함수, 값 변환, 백터 기타
유니티 Shader Graph를 보다 필요해서 자주 검색하다,
가져다 둡니다.
많은 함수가 Unity Sahder Graph 의 노드와 1:1 매칭됩니다.
해당 함수가 무슨 기능을 하나 보실때 유용합니다.
1. 삼각 함수
sin(x), cos(x), tan(x) : 기본삼각함수
asin(x), acos(x), atan(x) : x의 각 성분의 역삼각함수.
범위
asin : [-π/2, π/2]
acos : [-1, 1]
atan : [-π/2, π/2]
atan2(y,x) : atan(y/x)에 해당하는 함수로,
atan(x)는 [-π/2, π/2]의 범위의 값을 가지지만, atan2(y,x)는 [-π, π]의 값을 리턴한다.
atan2(y,x)는 x≠0 이면 항상 올바른 값을 계산핤 수 있으므로 더 선호한다.
sinh(x), cosh(x), tanh(x) : 쌍곡 삼각함수
sincos(x,s,c) : sin(x)와 cos(x)를 동시에 s, c로 리턴한다. 여기서 s, c는 x와 동일한 차원의 타입이어야 한다.
degrees(x) : 라디안 단위의 x값에 해당하는 각도값을 리턴한다.
radians(x) : 각도 단위의 x값에 해당하는 라디안값을 리턴한다.
2. 수학 함수
sqrt(x) : 제곱근
rsqrt(x) : 제곱근의 역수(1 / sqrt(x))
exp(x) : e^x. e를 바닥으로 하는 지수 ex를 돌려준다.
exp2(x) : 2^x. 2를 바닥으로 하는 지수를 돌려준다.
pow(x, y) : x^y]
-unity sg의 Power
ldexp(x, y) : x * 2^y
log(x), log10(x), log2(x) : loge(x), log10(x), log2(x)
→ 모든 로그함수의 인자값 x는 양수값으로 지정해야 한다.
x가 음수이면 함수값이 정의되지 않고, x=0이면 -무한대를 리턴한다.
3. 값 변환 함수
abs(x) : 절대값(성분마다)
sign(x) : 부호에 따라 음수이면 -1, 0이면 0, 양수이면 1을 리턴
ceil(x) : 올림한 정수를 리턴(무조건 올림)
floor(x) : 내림한 정수를 리턴
round(x) : 반올림한 정수를 리턴
→ 리턴하는 정수값의 타입은 모드 float 타입이다.
max(x,y), min(x,y) : 최대, 최소값
clamp(x, min, max) : x를 [min, max] 범위로 클램프한다.
즉, x가 범위안에 있으면 x를 그대로 리턴하지만, min보다 작으면 min을, max보다 크면 max를 리턴한다.
saturate(x) : x를 [0, 1] 범위로 클램프(0~1을 넘어서는 값을 짤라 냄)한다.
lerp(x,y,s) : 선형보간인 x + s(y - x) 를 리턴한다. x, y, s는 모두 동일한 타입으로 지정. 이 함수는 s가 0인 경우 x, 1인 경우 y를 돌려주도록 x와 y의 사이를 선형보간 한다.
step(x,y) : x≤y 이면 1을 리턴하고, 그렇지 않으면 0을 리턴한다.
smoothstep(min,max,x) : x가 [min, max] 사이의 값인 경우에 대해서 [0, 1] 사이에서 부드럽게 변하는
Hermite 보간법을 리턴한다. x가 min보다 작다면 0을 리턴하고, max보다 크다면 1을 리턴한다.
asfloat(x) : 입력인자값을 float 타입으로 바꾼다.
asint(x) : 입력인자값을 int 타입으로 바꾼다.
asuint(x) : 입력인자값을 uint 타입으로 바꾼다.
fmod(x,y) : x/y의 나머지를 실수로 리턴한다.
frac(x) : x의 소수점 이하 부분을 리턴한다.
frc(x)
frexp(x,e) : 주어진 실수 x의 표현에서의 소수점 이하값인 가수부분과 지수부분을 동시에 리턴한다.
가수부분을 e로 리턴하고, 지수부분을 함수리턴값으로 리턴한다. x가 0일 경우, 함수는 가수와 지수의 양쪽 모두에 0을 돌려준다.
modf(x,i) : x의 정수부분을 i로 리턴하고, 소수점 이하부분을 함수리턴값으로 리턴한다.
4. 테스트 함수
all(x) : x의 모든 성분이 0 이외의 값인지 아닌지를 테스트한다.
a11(x) : 인자값의 모든 원소들이 0이 아닌지를 검사한다. 모두 0이 아니면 bool타입의 true값을 리턴한다.
any(x) : x의 원소중에 0이 아닌 원소가 하나라도 있으면 true값을 리턴한다.
isfinite(x) : 인자값이 무한대가 아닌 유한한 값이면 true를 리턴한다.
isinf(x) : 무한대 값(±INF)이면 true를 리턴한다.
isnan(x) : NAN(Not a Number)이면 true를 리턴한다.
5. 벡터 함수
cross(x,y) : 두 벡터의 외적을 계산한다. 두 인자값과 리턴값은 모두 float3 타입이다.
dot(x,y) : 두 벡터의 내적을 계산한다.
distance(x,y) : 두 벡터의 거리를 계산한다.
len(x) : 벡터의 길이
length(x) : 벡터의 길이를 계산한다.
→ 이들은 모두 하나의 float를 리턴한다.
normalize(x) : 정규화된 벡터를 리턴한다. 즉, 리턴값은 x/length(x) 와 동일하다.
determinant(m) : 행렬식을 리턴한다. 입력인자는 정방행렬이어야 한다.
transpose(m) : m의 전치행렬을 리턴한다.
mul(x,y) : 두 행렬의 곱을 계산한다.
reflect(i, n) : 정반사광의 방향 벡터를 구하는 벡터반사 함수.
첫 번째 인자로 입사광의 방향벡터를 두 번째 인자로 반사면의 법선을 받는다.
6. 기타 함수
tex1D(s, t) : 1D의 텍스처 참조. s는 샘플러 또는 sampler1D 개체, t는 스칼라.
tex1D(s, t, ddx, ddy) : 미분을 지정한 1D의 텍스처 참조. s는 샘플러 또는 sampler1D 개체, t, ddx, ddy는 스칼라.
tex1Dproj(s, t) : 1D의 투영 텍스처 참조. s는 샘플러 또느느 sampler1D 개체, t는 4D 벡터. t는 참조가 실행되지 직전의 성분으로 나눈셈 된다.
tex1Dbias(s, t) : 1D 바이어스 텍스처 참조. t는 4D 벡터로 참조를 실행하기 전에, 밉레벨에 t.w의 바이어스를 걸칠 수 있다.
tex2D(s, t) : 텍스쳐 샘플링에 사용하는 HLSL 함수. 첫 번째 인자에서 두 번째 인자 좌표에 있는 텍셀을 구하는 함수. s는 샘플러 또는 sampler2D 개체, t는 2D 텍스처 좌표.
tex2D(s, t, ddx, ddy) : 2D의 투영 텍스처 참조.
tex2Dbias(s, t) : 2D의 바이어스 텍스처 참조.
tex3D(s, t) : 3D의 볼륨 텍스처 참조. s는 샘플러 또는 sampler3D 개체, t는 3D 텍스처 좌표.
tex3D(s, t, ddx, ddy) : 미분을 지정한 3D의 볼륨 텍스처 참조.
tex3Dproj(s, t) : 3D의 투영 볼륨 텍스처 참조.
tex3Dbias(s, t) : 3D의 바이어스 텍스처 참조.
texCUBE() : 입방체 텍스쳐를 샘플링하는 함수. 3D 큐브의 텍스처 참조. s는 샘플러 또는 samplerCUBE 개체, t는 3D 텍스처 좌표.
texCUBE(s, t, ddx, ddy) : 미분을 지정한 3D의 큐브 텍스처 참조.
texCUBEproj(s, t) : 3D 투영의 큐브 텍스처 참조.
texCUBEbias(s, t) : 3D 바이어스 큐브 텍스처 참조.
ddx(x), ddy(x) : 스크린공간의 x, y 좌표에 대한 x, y의 편미분을 리턴한다.
fwidth(x) : abs( ddx(x) ) + abs( ddy(x) ) 를 리턴한다.
clip(x) : x의 한 원소가 0보다 작으면 현재 픽셀을 버린다. x의 각 성분이 면으로부터의 거리를 나타내는 경우, 이 함수를 사용해, 클립면을 시뮬레이션 한다.
→ 이 함수들을 픽셀셰이더에서만 사용할 수 있다.
↓ 고급기법에서 사용되는 함수
faceforward(n, i, ng) : 관찰자를 향하는 표면 노말(-n * sign(dot(i, ng)))을 리턴한다.
reflect(i, n) : 반사벡터를 리턴한다. 입사 방향 i, 표면 법선 n로 했을 경우, v = i - 2 * dot(i, n) * n 에 의해 구할 수 있는 반사 벡터 v를 리턴한다.
refract(i, n, R) : 굴절벡터를 리턴한다. 입사 방향 i, 표면 법선 n, 굴절 R 의 상대 인덱스가 주어졌을 경우 굴절 벡터 v를 리턴한다. i와 n사이의 입사각이 지정된 R보다 너무 크면 (0, 0, 0)을 리턴한다.
lit(n · l, n · h, m) : 조명계수 벡터(앰비언트, 디퓨즈, 스펙큘러, 1)를 리턴한다. 앰비언트 = 1; 디퓨즈 = (n · l < 0) ? 0 : n · l; 스펙큘러 = (n · l < 0) || (n · h < 0) ? 0 : (n · h * m);
noise(x) : 연기나 화재효과에 사용되는 Perlin 노이즈값을 리턴한다.
D3DCOLORtoUBYTE4(x) : 4D 벡터 x의 성분을 교체 및 스케일링 해, 일부 하드웨어에 있는 UBYTE4 지원의 부족을 보정한다.
댓글