프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by ozlael

지난 번 글에서 이어지는 글입니다.

이전 글 : PC에서 3D 입체 영상 게임 개발하기 #1



들어가며

입체영상은 인간이 입체를 느끼는 요소를 인위적으로 만들어 내는 것이지요. 그러므로 우선 우리가 입체를 느끼는 원리를 이해해야 입체 영상을 다룰 수 있습니다. 이번 글에서는 이러한 입체 영상의 인식 및 구성 요소에 대하여 다루어보도록 하겠습니다.



입체시(stereo vision)

우리가 사물을 볼 때는 사물을 입체로 인식합니다. 가까운 사물은 가까이 느껴지고 멀리 있는 사물은 멀리 느껴지지요 (응? 당연한건가?) 이러한 인간의 입체 공간 인지 능력을 입체시(stereo vision)이라고 합니다. 이 입체시 능력은 인간의 눈이 두개인 것에서 출발을 합니다. 손바닥을 양 눈 사이에 세워놓고 오른쪽눈을 감고 왼쪽 눈으로 손바닥을 볼 때랑 왼쪽 눈을 감고 오른쪽  눈으로 손바닥을 볼 때랑 서로 다른 모양과 다른 면들 보게 되지요. 이처럼 각각의 눈에 다른 영상이 들어오는 것을 양안시차 혹은 양안부등(binocualr disparity)이라고 부릅니다. 이 양안시차를 뇌가 합성하여 입체 정보로 만들어 내고 이를 통해 입체시가 발현되는 것이지요. 이 양안시차는 두 가지 요소에 의해 만들어집니다.



세퍼레이션(separation)

먼저, 인간의 눈은 두 눈이 한 곳에 몰려있지 않고 어느정도 간격을 두고 떨어져있지요. 평균적인 성인 기준으로 두 눈은 6.5cm 정도 떨어져있는데요, 이를 안간(interocular)이라고 표현합니다. 두 눈이 떨어져서 다른 곳에 위치하고 있기 때문에 각각의 눈으로 다른 영상을 보는 것이지요. 입체 촬영 역시 이 안간을 흉내내어 카메라 렌즈 두 개를 어느정도 떨어트려 배치합니다. 이 카메라 혹은 렌즈 사이의 거리를 축간거리(interaxial distance)이라고 합니다.

이미지 출처 : http://www.dashwood3d.com/blog/beginners-guide-to-shooting-stereoscopic-3d/

이런 카메라 거리를 나타내는 또 다른 척도로 세퍼레이션이 있습니다. 세퍼레이션은 인터렉셜을 스크린 크기로 나눈 값을 의미합니다. 하지만 일반적으로 스크린크기는 상수이므로 보통은 카메라 사이 간격 조절을 세퍼레이션과 인터렉셜을 같은 의미로 용어가 혼용하여 사용되기도 합니다.

separation = interaxial / screen width

 이 세퍼레이션은 사람이 입체 공간의 깊이를 인지하는데 영향을 미칩니다. 세퍼레이션의 갚이 작으면 즉 좌우 카메라 간격이 적으면 입체 3D 공간의 전체적인 깊이가 얕게 느껴지고, 세퍼레이션의 값이 크면 즉 좌우 카메라 간격이 많으면 입체 3D 공간의 깊이가 깊에 느껴지게 됩니다. 

이미지 출처 : http://www.3dtv.fr/NAB09_3D-Tutorial_BernardMendiburu.pdf



컨버젼스(convergence)

또한, 두 눈의 주시선은 무한히 평행하게 뻗어나가는 것이 아니라 어느 한 점에서 교차되게 되어있습니다. 그 교차점이 우리가 초점을 맞추는 대상이고 이를 폭주 또는 수렴(convergence)이라고 합니다. 

입체 촬영 시 역시 이 컨버젼으를 흉내를 냅니다. 사람눈과 마찬가지로 두 카메라의 주시 방향을 평행하게 두는 것이 아니라 어느 한 지점에서 교차되게 배치를 합니다. 이 카메라의 시선이 교차되는 지점이 컨버젼스 포인트가 되는 것입니다. 즉 이 컨버젼스 포인트는 시차가 0이 되는 것이고 시청자가 볼 시 스크린 또는 모니터의 위치가 됩니다. 이 컨버젼스 포인트보다 앞에 있는 사물은 모니터 밖에 튀어나와 있게 느껴지는 것이고, 컨버젼스 포인트보다 뒤에 있는 사물은 모니터 안에 있게 느껴지는 것이지요.

이미지 출처 : http://www.3dtv.fr/NAB09_3D-Tutorial_BernardMendiburu.pdf



패럴랙스(parallax)

이 세퍼레이션과 컨버젼스는 최종적으로 패럴렉스(parallax)라는 요소로 모니터에 투영이 됩니다. 이 패럴렉스는 모니터에 투영 된 좌안과 우안 영상의 수평 위치 차이를 의미합니다. 모니터보다 앞에 튀어나와 있도록 영상이 분리되어 있으면 음시차 (negative parallax)라 불리고 모니터 뒤에 있도록 영상이 분리되어 있으면 양시차(positive parallax)라 불립니다. 좌우 영상이 모니터상에 분리 없이 투영되어 있으면 딱 모니터 깊이에 위치가는 것이고 이는 무시차 (zero parallax) 상태가 됩니다.

이미지 출처 : http://www.3dtv.fr/NAB09_3D-Tutorial_BernardMendiburu.pdf

다음 이미지는 컨버젼스와 세퍼레이션과 패럴렉스의 상관 관계를 한눈에 나타내줍니다. 빨간선은 좌안과 우안의 주시선을 타타냅니다. 주시선이 모이는 나무가 컨버젼스 포인트고 스크린 위치가 되는 것이지요. 컨버젼스에 수렴할수록 같이 세퍼레이션 값이 작아지는 것을 볼 수 있습니다. 

이미지 출처 : http://forum.iz3d.com/viewtopic.php?t=3267



마치며

입체 영상을 다루기 위한 구성 요소는 여기까지 설명을 드리는 것으로 마치기로 하구요, 다음 시간에는 본격적으로 PC 게임에 입체 영상을 적용하는 방법에 대해 다루기로 하겠습니다. 지루한 글 끝까지 읽어주셔서 감사합니다. 굽실굽실



다음 글 : PC에서 3D 입체 영상 게임 개발하기 #3


댓글을 달아 주세요

  1. Favicon of http://bluekms21.blog.me 크로스 2012.05.21 10:05  댓글주소  수정/삭제  댓글쓰기

    분명 좋은 강좌를 읽었는데 어쩐지 레이더즈를 해보고싶은 느낌이 드는 신기한 글이네요. 하핫