본문 바로가기

C++ & etc

Occluded Face Remover (은면 제거 도구)

카메라 시점이 고정되어 있는 게임을 개발할 때는, 카메라에 절대 보이지 않는 면들을 리소스 제작 과정에서 최대한 재거하는 것이 도움이 된다.

신발이나 장갑 등 몸에 붙어있는 액세서리의 뒷면, 투구나 머리 장식의 안쪽 등이 그렇다. 이런 부분들은 애니메이션을 할 때도 왠만해서는 보이지 않는다. 이런 부분들만 잘 제거해도 많게는 50% 이상 버텍스 수를 절감하면서도 원본의 시각적 퀄리티를 유지할 수 있다.

이 과정을 아티스트가 손수 제거하는 것 보다 쉽고 빠르게 처리할 방법을 고민하다 만들게 된 도구이다.

 

https://github.com/eatGinseng/PolygonOptimizer/releases/tag/v1.0

 

Release Polygon Optimizer v1.0 · eatGinseng/PolygonOptimizer

Sorry, something went wrong. No results found

github.com

 

PolygonOptimizer는 helix toolkit 라이브러리 기반의 windows application이다.

helix 라이브러리의 FileloadDemo 예제부터 시작해 필요한 기능을 붙이고 이리저리 수정하는 방식으로 개발하였다.
(Claude Code 사용)

현재는 .fbx 파일만 지원한다.

 

인터페이스

 

1. File > Import로 은면 제거를 원하는 fbx파일을 불러온다.

 

 

Show Octahedron 를 활성화 했을 때 볼 수 있는 모습이다.

기본 아이디어는 mesh의 바운더리를 감싸는 반구 형태의 octahedron을 만들고, 이 octahedron의 각 꼭지점으로부터 mesh의 중심을 바라보는 view 들로 은면을 판별하는 것이다. 이 view 중 어느 곳에서도 보이지 않는 면은 은면으로 간주하고 제거 대상에 포함한다.
이때, View에서 보이더라도 backface인 면은 선택 대상에서 제외된다.

 

  • Iterate Views
    각 View를 돌면서, View에서 보이는 상태인 면을 모두 선택한다.
  • Resolution
    Octahedron의 꼭짓점 밀도를 의미한다. 높아질수록 View의 갯수도 늘어나고, 면을 선택하는 데 걸리는 시간도 늘어난다.

화면 오른 쪽 상단에 현재 선택된 Triangle 갯수가 보여진다.

 

모든 View 에서의 선택이 완료된 후 모습이다.

 

invert로 선택 영역을 반전시킨 뒤, X-ray Mode를 활성화 하면, 안쪽에 보이지 않는 면들만 선택된 것을 확인할 수 있다.

 

 

3dsMax 에서와 같이, 면을 수동으로 클릭해서 1개씩 선택하거나, 화면에서 드래그로 영역 선택을 할 수도 있다.

Shift 를 누른 상태에서 클릭 또는 드래그하면 해당 부분은 선택이 해제된다.

 

눈으로 보면서 '이 부분은 왠지 보일 것 같다' 하는 부분만 수동으로 선택 해제할 수 있다.

 

  • Delete Triangles
    선택된 면들 (노란색으로 표시)을 제거한다.
  • Undo
    맨 마지막 동작을 취소한다.
  • Materials
    각 Material ID의 Visibility를 토글할 수 있다. 보이지 않게 된 Material ID는 은면을 선택할 때도 제외된다.

은면 제거가 완료되었다면, Export로 메시를 내보낸다.

 

카메라에서 보이지 않는 면들만 제거되었기 때문에, 메시의 원본 형태는 최대한 유지하면서도 렌더링 비용을 절감할 수 있다.