은면제거

 

 

카메라에서 보이지 않는 면을 삭제하는 방법입니다.

dot공식을 활용한 Backface방식에 비해 훨씬 깔끔하게 은면을 처리 할 수 있습니다.

 

처음에는 레이를 이용한 방식을 사용했었는데.. 속도 문제가 좀 있었습니다.

10000번 이상의 레이를 쏴야 하다 보니 부하가 상당 했었는데요.

또한 3차원 공간이다 보니 레이와 레이 사이를 모두 채우긴 힘들었고, 그러다 보니 정확도가 조금 낮았습니다.

속도도 낮고, 정확도도 낮으니 패스~

 

그래서 랜더링을 이용했습니다.

Scanline방식을 이용한 방법입니다.

이미지의 왼쪽 상단에서부터 raster line을 따라 스캔 합니다.

 

랜더링 된다는 건 픽셀에 배경색이나 오브젝트 색이 표현된다는 건데요.

아래 그림을 보세요.

1번 픽셀의 경우 배경색이 나올 것이고, 2번 픽셀은 살짝 오브젝트 색이 묻어 날 겁니다.

3번은 오브젝트 색이 확실히 보이겠죠.

(번호는 임의로 붙였습니다.)

픽셀단위로 오브젝트가 랜더링 되었는지 알 수 있다는 겁니다.

 

그렇다면 픽셀에 어떤 face가 영향을 주는가?도 알 수 있겠죠.

이를 활용해서 픽셀마다의 face Index를 추출 할 수 있습니다.

 

이 방식의 장점은 메모리 소비가 적고, 레이 방식에 비해 정확도도 높습니다.

물론 비교적 속도도 좋죠.

 

랜더 방식이다 보니 카메라의 수, 랜더링 이미지의 크기에 따라 시간이 유동적입니다.

 

 

기존 Backface 방식

카메라를 보는 방향의 face가 모두 살아 있음

 

은면제거 방식

카메라에 랜더링 되는 face만 살아 있음

 

카메라에서 보는 모습

 

카메라에서 볼때는 이상없음.

 

 

 

HiddenSurfaceDeleter.mse

 

Posted by Hwanggoon
,