블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2737)
Unity3D (817)
Programming (474)
Python (8)
TinyXML (5)
STL (13)
D3D (3)
MFC (1)
C/C++ (54)
C++/CLI (45)
C# (250)
WinForm (6)
WPF (5)
Math (10)
A.I. (1)
Win32API (11)
Algorithm (3)
Design Pattern (7)
UML (1)
MaxScript (1)
FMOD (4)
FX Studio (1)
Lua (2)
Terrain (1)
Shader (3)
boost (2)
Xml (2)
JSON (4)
Etc (11)
Monad (1)
Html5 (4)
Qt (1)
Houdini (0)
Regex (10)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (58)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (53)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
04-26 17:51

'Programming/Shader'에 해당되는 글 3건

  1. 2019.05.20 [링크] 붕괴3 방식의 카툰렌더링 구현하기
  2. 2012.06.25 HLSL 내장함수
  3. 2012.06.25 쉐이더(Shader) 2.0 3.0 차이
반응형

'Programming > Shader' 카테고리의 다른 글

HLSL 내장함수  (0) 2012.06.25
쉐이더(Shader) 2.0 3.0 차이  (0) 2012.06.25
Posted by blueasa
, |

HLSL 내장함수

Programming/Shader / 2012. 6. 25. 00:49

※ 모든 함수들에 있어서 인자값이 벡터일 경우에 각 원소별 연산임을 유의

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 노이즈값을 리턴한다.



[출처] HLSL 내장함수|작성자 왕꿈틀이

반응형

'Programming > Shader' 카테고리의 다른 글

[링크] 붕괴3 방식의 카툰렌더링 구현하기  (0) 2019.05.20
쉐이더(Shader) 2.0 3.0 차이  (0) 2012.06.25
Posted by blueasa
, |

2.0과 3.0의 차이점.

1. 유연한 입출력 선언.

세이더 프로그램에 대한 입력의 수가 지원되는 입력 레지스터의 수를 초과하더라도,
여러 입력들을 한 레지스터에 함께 넣을 수 있다.

2. 조건자의 제공.
동적인 쓰기 마스킹이 가능한 4개의 불린 플래그들의 묶음으로 이루어진 레지스터.
이 레지스터를 이용하여 보통 4개의 채널별로 일어나는 세이더 연산이 적용될 것인지 아닌지를 정한다.

3. 정적, 동적 조건 분기
정적 조건 제어는 분기별 서로 다른 코드들을 한 세이더 안에 넣을 수 있게 하여 세이더 상태가
변하는 횟수를 줄일 수 있게 해 주며 정적루프는 고정된 회수의 루프를 사용할 경우에 유용하다.
2.0과 3.0의 차이점은 2.0에서는 정적 조건분기가 중첩문을 사용할 수 없다는 것이다.
3.0은 4단계의 중첩이 되는 정적조건 분기를 지원하며 동적 조건분기를 지원한다.
동적조건 분기는 세이더 프로그램 내의 결과값에 의해 수정된 레지스터 값을 비교하여 다른 코드를 수행하는 것이다.

4. 임의의 스위즐
2.0은 vs만 지원하고 ps에서는 지원하지 않지만 3.0은 둘 다 지원한다.

5. 텍스쳐 명령어 상의 쓰기 금지 마스크
3.0 에서는 이 기능을 이용하여 선택된 색상채널만 destination 레지스터에 텍스쳐 샘플링 결과로 업데이트할 수 있다. 
이것을 이용하여 텍스쳐 명령어를 수행하는 도중에 쓰기 금지된 성분을 보호 할 수 있다.

vs3.0의 기능

1. 레지스터
vs2.0에서는 12개의 레지스터가 있지만 vs3.0에서는 32개의 레지스터가 있다.

2. 명령어
vs2.0은 256개의 명령어를 지원하지만 vs3.0은 512개의 명령어를 지원한다.

3. 텍스쳐 샘플링
2.0에도 정점 세이더 유닛에 기본적인 텍스쳐 샘플러 기능이 있지만 기능이 제한적.
3.0에서는 정점 텍스쳐링을 완벽히 지원하기 떄문에 정점 세이더에서도 픽셀 세이더와 같은 수준의
기능과 유연함을 가지고 텍스쳐를 참조할 수 있다.

4. 정점 스트림 빈도
같은 입력데이터를 한번 이상 사용할 수 있도록 정점 데이터를 서로 다른 비율로 가져올 수 있다.

ps3.0의 기능

1. 레지스터
32개의 임시레지스터와 256개의 상수레지스터를 지원한다.

2. 명령어
ps2.0에서 96개의 명령어를 지원하는 것에 반해 ps3.0에서는 512개의 명령어를 지원한다.

3. 무제한의 텍스쳐 샘플과 의존적 읽기
ps3.0에서는 모든 텍스쳐 읽기 제한이 완벽하게 없어졌다.




출처 : http://blog.naver.com/jungbostyle/130116978009

반응형

'Programming > Shader' 카테고리의 다른 글

[링크] 붕괴3 방식의 카툰렌더링 구현하기  (0) 2019.05.20
HLSL 내장함수  (0) 2012.06.25
Posted by blueasa
, |