V
(View vector)와 N
(Normal vector on surface of mesh)이 있다고 할 때,
dot(V, N)
을 계산한다고 생각해 보자.
vector V
와 N
의 내적된 결과는
-1 ≤ result ≤ 1
의 값을 범위로 갖는다.
result가 0보다 작은 경우에는 backface
가 되고,
result가 0인 경우는 N이 V에 수직인 벡터
가 된다.
result가 0보다 큰 경우에는 frontface
가 된다는 것은 잘 알고 있을 것이다.
따라서 0 ≤ result ≤ threshold
의 범위를 갖는 값을 edge로 판단하면 렌더링 결과는 어떻게 될까?
threshold
값을 0.5로 설정하여 렌더링한 결과는 아래의 두 그림과 같다.
뷰벡터와 수직인 벡터 ~ 뷰벡터와 내적하여 0.5가 되는 벡터는 검은색, 나머지는 흰색으로 처리한 결과물이다.
약간 수묵화(?) 적인 느낌이 나는 듯 하지만 엣지의 계단현상이 심한것을 볼 수 있다. 이 결과에 Gaussian filter를 적용하여 계단현상을 완화시켜 보도록 하겠다.
약간 더 부드러워 졌음을 볼 수 있다.
이제 여기에 내부 쉐이딩을 추가하면 아래와 같은 결과를 얻을 수 있다.
위 그림은 엣지에 가우시안 필터를 적용하지 않고 내부 쉐이딩을 추가한 결과이고,
아래의 그림은 엣지에 가우시안 필터를 적용하고 내부 쉐이딩을 추가한 결과이다.