반응형

Smoothstep 함수 사용법 by 김윤정

smoothstep(min,max,x) : x가 [min, max] 사이의 값인 경우에 대해서 [0, 1] 사이에서 부드럽게 변하는 
Hermite 보간법을 리턴한다. x가 min보다 작다면 0을 리턴하고, max보다 크다면 1을 리턴한다.



..라고 하는데 뭐야 저게... 
라고 해서 알아보니. 

(그림1)

일단 0에서 1로 가는 Liner 한 그래프가 있다고 치죠. 저걸 거꾸로 하면 단순무식한 렘버트 출력값과 같겠죠 (...) 


(그림2)
그리고 min과 max 값을 정합니다. 뭐 이건 0과 1로 정하면 원래 그림인 (그림 1)과 같지만 여기서는 0.2와 0.8로 정했다고 치죠. 

(그림3)

X 값이 min 값보다 작으면 최종 결과는 0 값이 나오고, X 값이 max보다 크면 1값이 나오는건 쉽지요.

(그림4)

근데 만약 X 값이 min과 max 사이에 있는 값이면? 
비율을 다시 계산해서 값을 내놓는다는 것입니다. 그냥 Liner 하게 계산하면 그림과 같겠지요. 
근데 여기서 Hermite Interpolation (보간법)을 사용한다고 합니다. http://en.wikipedia.org/wiki/Hermite_interpolation
... 이거 뭐야 몰라 무서워... 그래픽쟁이한테 이런 수학 공식 들이밀지 마... (이럴때만 그래픽인척 하는 초파리이자 박쥐) 

뭐 그래서 더 생각 안하고, 그림으로 만들어 봤습니다. -_- 
하프 렘버트 출력물을 
밝기에 따라 3단계로 적용. smoothstep 사용. Liner 하지 않다는 것이 보입니다. 
Warp 대용으로 사용한 최종 결과물. 텍스쳐 셈플러 하나 줄였습니다. 만세. 근데 이게 더 무거우면 어쩌지 ㄷㄷㄷ 



즉 아마도 Smoothstep의 보간법은 이런 결과물을 내놓는 듯 합니다. 

(그림5)

반응형

'그래픽스(Graphics) > Shader' 카테고리의 다른 글

[소스] 해칭(Hatching) HLSL 소스  (0) 2013.01.05
VS에서 HLSL 편집하기 InteliShade  (0) 2013.01.05
쉐이더 기법  (0) 2012.11.02
셰이더 내장함수  (0) 2012.11.02
NVIDIA계열 그래픽카드 오버클럭 하기  (0) 2012.10.31

+ Recent posts