HLSL 내장함수
※ 모든 함수들에 있어서 인자값이 벡터일 경우에 각 원소별 연산임을 유의
1. 삼각 함수
sin(x), cos(x), tan(x) : 기본삼각함수
asin(x), acos(x), atan(x) : 역삼각함수
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) : 제곱근의 역수
exp(x), exp2(x), pow(x, y) : e^x, 2^x, x^y
ldexp(x) : 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] 범위로 클램프한다.
lerp(x,y,s) : 선형보간인 x + s(y - x) 를 리턴한다. x, y, s는 모두 동일한 타입으로 지정.
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의 소수점 이하 부분을 리턴한다.
frexp(x,e) : 주어진 실수 x의 표현에서의 소수점 이하값인 가수부분과 지수부분을 동시에 리턴한다.
가수부분을 e로 리턴하고, 지수부분을 함수리턴값으로 리턴한다.
modf(x,i) : x의 정수부분을 i로 리턴하고, 소수점 이하부분을 함수리턴값으로 리턴한다.
4. 테스트 함수
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) : 두 벡터의 거리를 계산한다.
length(x) : 벡터의 길이를 계산한다.
→ 이들은 모두 하나의 float를 리턴한다.
normalize(x) : 정규화된 벡터를 리턴한다. 즉, 리턴값은 x/length(x) 와 동일하다.
determinant(m) : 행렬식을 리턴한다. 입력인자는 정방행렬이어야 한다.
transpose(m) : 전치행렬을 리턴한다.
mul(x,y) : 두 행렬의 곱을 계산한다.
6. 기타 함수
ddx(x), ddy(x) : 스크린공간의 x, y 좌표에 대한 x, y의 편미분을 리턴한다.
fwidth(x) : abs( ddx(x) ) + abs( ddy(x) ) 를 리턴한다.
clip(x) : x의 한 원소가 0보다 작으면 현재 픽셀을 버린다.
→ 이 함수들을 픽셀셰이더에서만 사용할 수 있다.
↓ 고급기법에서 사용되는 함수
faceforward(n, i, ng) : 관찰자를 향하는 표면 노말을 리턴한다.
reflect(i, n) : 반사벡터를 리턴한다.
refract(i, n, R) : 굴절벡터를 리턴한다.
lit(n·l, n·h, m) : 조명계수 벡터를 리턴한다.
noise(x) : 연기나 화재효과에 사용되는 Perlin 노이즈값을 리턴한다.
'Programming > Shader' 카테고리의 다른 글
[링크] 붕괴3 방식의 카툰렌더링 구현하기 (0) | 2019.05.20 |
---|---|
쉐이더(Shader) 2.0 3.0 차이 (0) | 2012.06.25 |