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

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


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

근데 만약 X 값이 min과 max 사이에 있는 값이면?
비율을 다시 계산해서 값을 내놓는다는 것입니다. 그냥 Liner 하게 계산하면 그림과 같겠지요.
근데 여기서 Hermite Interpolation (보간법)을 사용한다고 합니다. http://en.wikipedia.org/wiki/Hermite_interpolation
... 이거 뭐야 몰라 무서워... 그래픽쟁이한테 이런 수학 공식 들이밀지 마... (이럴때만 그래픽인척 하는 초파리이자 박쥐)
뭐 그래서 더 생각 안하고, 그림으로 만들어 봤습니다. -_-
하프 렘버트 출력물을
밝기에 따라 3단계로 적용. smoothstep 사용. Liner 하지 않다는 것이 보입니다.
Warp 대용으로 사용한 최종 결과물. 텍스쳐 셈플러 하나 줄였습니다. 만세. 근데 이게 더 무거우면 어쩌지 ㄷㄷㄷ
즉 아마도 Smoothstep의 보간법은 이런 결과물을 내놓는 듯 합니다.

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
... 이거 뭐야 몰라 무서워... 그래픽쟁이한테 이런 수학 공식 들이밀지 마... (이럴때만 그래픽인척 하는 초파리이자 박쥐)
뭐 그래서 더 생각 안하고, 그림으로 만들어 봤습니다. -_-



즉 아마도 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 |