2014년 7월 31일 목요일

눈이 입체를 인지하는 원리


우리의 눈이  한 물체를 볼때  두눈의 거리로 인해 발생하는 각도의

차이로  미세하게 다른 모습들을 각 눈은 받아 들이게 됩니다.

두눈의 거리를  안간(Interocular Ditance)이라고 합니다.

성인의 안간은 약 6.5cm 라고 합니다.



안간으로 인해 나타나는 좌우의 영상의 차이를 시차(Parallax)라고합니다.

연필를 보고 있으면서  서로 눈을 번갈아면서  감았다 떴다를 반복하면 연필이 좌우로

움직임이 일어 나는 현상이 대표적인 시차의 예입니다.

그럼 이런한 시차때문에 우리는 두개의 상을 보아야 하지 않을까 하는 의문이 드는데

이는 이런 영상을 시신경을 통해 시각령(Visual Cortex)이라는 뇌의 특정부위로

들어간다고 합니다.. 시각령은 이 두개의 영상을 합쳐서 입체감이 느껴지는 하나의 영상으로

만들어 준다고 하는데요. 우리가 보는 세상의 모습은 이 시각령이라는 뇌의 특정부위에서 만

들어지는화학적 뇌의 작용 인 것입니다.







재미있는 사실은 사람마다 안간의 차이 때문에  한물체에 대한 입체 감이 모두 다르다는

것입니다. 안간이 넓은 사람은 시차 때문에 입체감을 더 크게 느낄 수가 있습니다.



이렇게 두눈의 입체 습득 과정과 요인을 양안시(Binocular Depth Cue) 라고 합니다.

요즘 이슈화되고 있는  3d 입체 영상이 홀로그램을 제외한 방법이 이 양안시에 대한 기본 

이론으로 개발 되었다고 합니다.


2014년 7월 28일 월요일

벡터(Vector) 와 좌표공간,평면

벡터를 설명하기전에 일단 좌표계부터 설명하겠습니다.

좌표계란  기하학적으로 공간에 수치적 정보를 표현 하기위해 만들어 낸 것입니다.

여러 좌표계가 존재 하지만  일반적인 직교 좌표계를 기준으로

3d 좌표계 :   x,y,z   세계의 축이 존재 하며 각 축들은 직교 합니다.

2d 좌표계 :   x,y      두 축이 존재하며 각 축들은 직교 합니다.

*3d 직교좌표계




 3d 직교좌표계에 있는  3d 벡터 v(2,3,-3)





이제 벡터에 대해 설명하겠습니다.

수치적 양을 표현할때  질량이나 키  넓이 등은 실수 하나로 표현이 가능합니다.

그러나 가속도 속도 등 방향과 크기 같이 존재하는 양도 존재를 합니다. 

여기서 크기만 있는  양을 스칼라고 하고  이 스칼라와 방향이 같이 존재 하는 양을 

벡터 라고 합니다.



위치벡터 


벡터는 공간이나 평면상에 존재 할수 있는데요 시점과 상관없이   방향과 크기가 같다면 같

은 벡터라고 말할 수 있습니다. 






위 그림의 벡터는 시점이 달라 두 벡터를 비교 하거나 분석하기가 힘듭니다.

그래서 다루기 편하기 위해  좌표공간 ,평면상에  원점( 좌표 수치가 0인 지점)에 시점을

두게 되었습니다.


좌표공간에  벡터의 시점을 원점O에 맞추게 되면  벡터 OA에 끝점 점 A의 위치가 정해지게 된

다.  점A에 대한 벡터 OA는 하나만 존재 하게 됩니다.

여기서 벡터OA를  원점 O에 대한 점A의 위치 벡터 라고 하며 시점을 원점에 고정 시키면

점 A와 벡터 OA는 일대일 대응을 합니다.

그러므로 공간산의 모든 점들은 벡터로 표현 할수 있습니다.

















                                           

2014년 7월 22일 화요일

Real-Time Graphics Pipeline(ing)



약 9년전  사설 과정에서 3d 게임 프로그래밍 이라는 과정을 이수 하면서   soft rendering
pipe line 을 프로그래밍 수업과 직접 구현을 하였습니다.

그 주제가 수학적 지식이 많이 필요 했었고  전체 과정에서  주어진 시간이 부족하여   100프로 이해하고  작업을 한 것 은 아니였습니다. 지금 생각 해보면  60프로 정도 이했을 거라는 생각이 듭니다. 

이수 후 게임 업계에 일하면서 업무적으로  이래저래 도움이 되었고  더 발전 하기 위해 항상 
시간이 되었을 때  이론 적으로 정리하고 이해하고  구현을 하고 싶었습니다.

그러나 이런 저런 핑계로 이제 서야 실천으로 옮기기 시작하였습니다.
개인적으론 지금이라도 시작해서 다행이라 생각합니다.

순서는   Real-Time Graphics Pipeline 큰 덩어리의 총체적인 이야기를 하고  차후에  각 학목에 세부적인  수학적 지식이나 이론적 지식을 이야기  해 보려 합니다.

회화적 기법에 역사를 보면 끊임 없이 인류는 사실적으로 화폭에 담아 내기위해
투시기법이나 빛의 처리 등  여러 기법들을  생각 해내고   다른 쪽에선 이를 수학적으로 과학적으로 증명하고 범용적으로 통용 될 수있는 공식으로 고안해 냈을 것입니다.
사영기하학등이 이런 지식의 산물에 하나일 것이라는 생각을 해봅니다.

이후 컴퓨터의 등장과 이런 표현의 인간의 지적 욕구는  컴퓨터 그래픽스라는 분야를 탄생
시켰고 디스플레이에 세계(실제공간)의 영상(이미지)를 표현하기 위해 일렬의 기하학처리들
(위치변화, 회전변화,라이팅처리, .. 등) 을    Graphics Pipeline 이라 정의 하였고
발전 시켜왔고 이에 대표적인 표준  Real-Time Graphics Pipeline apidirectx opengl 을  개발하고 성장 하고 잇습니다.

두 api가 조금씩(순서나 수학적정의) 틀리지만 근본적인 과정은 같다고 할 수있습니다.

자 지금부터  큰 덩어리의 Real-Time Graphics Pipeline 의 과정에 대해 알아 보겠습니다.







Application

기학적 데이타 의 정보를  로드 하거나 (file,db)  ,  사용자의 데이타 응용처리 단계이다.

max나 maya 등의 응용프로그램에서 제작한 모델의 정보를 load 하는 단계

vertex,texture, animation  처리등이 여기 속합니다.



Geometry

 화면상에 표현 하기위하여   데이타를  일렬의  기학적 처리를 통해

스크린 상의 정보 까지 처리를 합니다.

World,Camera Translation

 물체 기준의 움직임과 보는 시점(카메라)의 움직임에 대한 처리 과정 입니다.

Projection

3d의 정보를 2d 상의 투영시키는 처리 단계입니다.
투영에 방법에 따라 원근 투영과 직교 투영등이 있습니다.


Clipping 

보여지는  영역에  제외된 모델 데이타 부분들을 다음 파이프라인과정에서 제외 시킵니다.


screen Mapping

2d로변환 정보를 스크린 해상도(ex 1920 *760)에 맞게 늘려주거나 축소 해주는 과정입니다.




Resterization

최종적으로 나온  정보로 화면의 픽셀을 채워주는 단계입니다.
설정해준 최소 폴리곤 단위(일반적으로 삼각형 )에 처리된 정보로 채워 줍니다.




기본적인  Real-Time Graphics Pipeline 을 알아보았습니다.

다음 부턴 세부적으로 단계별로  어떤 처리들이 일어나는지 알아보겠습니다.