본문 바로가기
카테고리 없음

HLSL 함수정리, 삼각함수, 수학함수, 값 변환, 백터 기타

by NGVI 2021. 4. 18.

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 지원의 부족을 보정한다.

댓글