Oculus Rift 개발하면서 구경한 이상현상

최근에 오큘러스 리프트 잡고 개발한게 있다. (프로젝트는 망했지만) 개발하면서 일반 CG에서는 절대로 볼수없고 오직 오큘러스 리프트에서만 구경할수 있는 이상 렌더링 몇개 발견해서 스샷 찍어놓은걸 간단히 정리했다.

신개념 Z-fighting artifacts

screen shot

이런 이상현상을 뭐라고 불러야 될지 잘 모르겠다. z-fighting이라고 써놨지만 기존의 CG에서 볼수있는 z-fighting하고는 다르다. 다음의 요소가 결합되어서 발생하는 버그로 추정된다.

  • 2개의 스프라이트를 겹쳐서 배치하기
  • 왼쪽눈/오른쪽눈으로 볼때 달라지는 거리
  • 거리에 따라서 렌더링할 객체 순서를 엔진이 정렬

z-fighting 설명

주의 : 아래의 설명은 irrlicht engine기준이다. 다른 엔진의 경우는 다를수 있다. 주의 : 파란색 선과 빨간색 선은 같은 깊이에 그려져있다.

오큘러스 리프트(정확히는 모든 3D라고 하는게 맞으려나..?)는 왼쪽눈/오른쪽눈을 따로 렌더링해야된다.

  • 왼쪽눈으로 파란색 스프라이트를 볼떄의 거리는 1, 빨간색 스프라이트를 볼떄의 거리는 2이다. 깊이로 치면 파란색이 빨간색보다 앞에 있다.
  • 오른쪽눈으로 파란색 스프라이트를 볼떄의 거리는 3, 빨간색 스프라이트를 볼때의 거리는 4이다. 깊이로 치면 빨간색이 파란색보다 앞에 있다.

덕분에 깊이순서대로 렌더링을 하면 양쪽눈을 결과가 다르다. -_-… 아마도 기존의 3D게임에서는 문제가 없엇겠지만 오큘러스에서는 이거조차 문제다.

이걸 고치려면 왼쪽눈과 오른쪽눈의 중심을 기준으로 깊이 정렬을 해서 그 결과를 양쪽눈이 공유해야될거같다. 아마도 엔진에서 렌더링 순서 정렬 관련된 부분을 고쳐야겟지…(하지만 이러면 진짜 z-fighting artifacts를 보게 될거같은데…)

사이클롭스의 비애

위의 이상현상처럼 긴 설명이 필요 없다. 카메라의 view vector 방향으로 두께가 0인 종이를 뒀다고 치자. 그러면 아마도 다음같이 보일것이다.

one eye

아무것도 안보인다. 이게 정상이다. 하지만 눈이 2개면 그걸 볼수있다.

two eye

역시 눈은 2개가 좋구나!


comments powered by Disqus