2014년 8월 22일 금요일

벡터(Vector) 합,차

지금 부터 나온 벡터의 연산들은 기하적으로 설명으로 좌표 평면이나 좌표 공간에서

위치벡터들의 연산를 설명할 것입니다.


벡터의 크기

벡터의 크기를 구할때 피타고라스의 정리를 이용하는데

시점이 원점(O)이고  점A (a1,a2)에 대한 벡터의 크기는 각 성분의 제곱에 루트를 씌운 것입니다.





좌표평면과 벡터 이미지 7

벡터OA의 스칼라의 양이기도 합니다.


시점이 원점을 지나지 않는 경우에도 피타고라스 정리를 이용하는데요



저 파란벡터가 시작되는 시점을 P   끝나는 종점을 Q라고 하면 벡터 PQ는 


가됩니다.


벡터의 합,차

한 소년이 새총으로 돌을 쏘았을때 돌에  작용 하는 힘은 어떻게 될까요?


그림은 새총을 위에서 본모습입니다..

두줄의 고무줄과 돌을 감쌀수 있는 가죽부분 그리고 돌로 구성되어있습니다..

가죽부분을 손가락으로 잡고 뒤로 당겼을 경우 두줄의 고무줄에 장력이 생기게 됩니다.

어느정도 장력이 생기고 손가락을 놓았을 경우 두줄의 장력의 힘이 돌맹이에게 전달됩니다..

이런 경우 벡터의 합연산으로 돌맹이가 받는 힘의 방향과 크기를 알수 있게 됩니다.


이런 벡터의 합을 좌표로 표현하게되면 이렇게 됩니다.

기학적으로 보시면 벡터 a의 종점에  벡터 b의 시작점을 놓은 모양이 됩니다.

두변의 벡터a,벡터b로 이루어지는  대각선이 벡터r인 평행 사변형이 됩니다.







결과벡터는 각 벡터의 성분끼리 더하면 결과값이 나오게 되어있습니다.


벡터의 차는 각 벡터의 성분끼리 빼주면 결과값이 나오게 되어있습니다.




두 벡터  벡터A(-5,7)  , 벡터B(10,10)의 차는 벡터 C( -5 - 10 , 7 - 10) = 벡터C(-15, -3)이 됩니다.



결과는 대각선 변이 벡터A이고 벡터C와 벡터B가 변인 평행 사변형 모양이 됩니다.

벡터A - 벡터B = 벡터C 라는 벡터간의 관계가 있다면 다음 그림과 같이 그려도 무관합니다.

벡터는 평행으로 옮겨져도 크기와 방향이 같기 때문입니다.


지금까지 2차원 직교좌표에서 설명을 드렸는데 3차원에서도 성분(z)이 추가될뿐 

방식은 마찬가지입니다.













2014년 8월 5일 화요일

3d 입체영상 종류

기본적으로 같은 것은  영상을 찍을 때 두개의 시점에서 찍는 다는 것입니다.

두대의 카메라가 각각 눈의 위치에서 영상을 찍습니다.

전에 설명했던 양안식 이론에 근거하여 입체감을 느끼게 하기 위합입니다.

이렇게 하나의 사물찍은 두개의 영상을  어떻게 보는냐에 따라

여러 종류로 나뉘게 됩니다.

크게 안경식과 무안경식으로 나뉘는데 일단 안경식에 대해  말 해보겠습니다.

적청방식

비용이 저렴한 편이라 많은 사람들이 경험 해봤을 것입니다.

저도 어릴적 과학시간에 만들었던 기억이 나네요

오래되었고 주위에서 흔이 쉽게 볼 수 있는 방식입니다.

원리는 두가지 다른 색으로 오른쪽 눈과 왼쪽눈에 보여질 영상을 다르게 보이게 하는

원리입니다.

손쉽게 입체감을 구현 할수 있지만 색체감이 나쁘고 장시간 착용시 불편함을 느끼게 됩니다.



편광 방식

영화 '아바타'를 한국에서 상영하면서 썼던 방식입니다.
혹시 극장에 나눠주던 안경을 기억하시는지 모르겠습니다.
편광필터 안경이죠 오른쪽 왼쪽에 받아들이는 영상이 틀립니다.


빛은 횡파로 진동하는 성질이 있습니다.


위와 같이 어느한 방향으로 진동하는 빛을 편광이라고 합니다.

자연광은 비편광이라고  하며 저런 진동이 여러방향으로 (360도 방향) 동시 다발적 으로

이루어집니다.

저런 빛의 파장을 인위적으로 방향을 걸러내거나 받아 들일 수 가 있는데

이를 편광필터라고 합니다.




비편광이 필터를 통해 인위적으로 원하는 방향으로 진동하는  편광만 투과 하거나 

우리눈에 수용되게 처리 가 가능 합니다.


이원리를 이용해 3d입체를 표현합니다.

모니터에서 2가지 영상을 (양안식 이론에 근거하여) 다른 방향의 파장으로 

출력을 하고  이를  편광필터 안경 으로 통해  오른쪽눈과 왼쪽눈에 각기 다른영상의

정보를 투과할수 있게 되는 것입니다.

가격이 저렴하고 비교적 오랜 사용에도 피로감이 덜 해 많이 이용 되는 방식중에 

하나입니다. 그렇지만 해상도가 두가지 영상을 한 화면에 담아 내야하기때문에

절반으로 떨어집니다.

셔터 방식

일단 모니터에서 2가지 영상이 번갈아 가면서 출력이 됩니다.

순차적으로 첫 프레임에는 오른쪽눈에 보여질영상이 보여지고 

다음 프레임에는 왼쪽눈에 보여질 영상이 출력 이 됩니다.

그다음 프레임에는 오른쪽눈에..

이런식으로 번갈아면서 출력이 됩니다.

그럼 셔터  글라스에는 오른쪽눈에 보여질 영상이 출력될때는

왼쪽눈 글라스가 보여지지 않게 됩니다.

결론적으로 오른쪽에 눈에만  오른쪽눈에 보여질 영상만 볼수 있게 되는 것입니다.

이런식으로 두가지 영상이 번갈아가면서 눈에 인식이 되면서

양안식이론에 의해 입체감을 느끼게 되는 것입니다.

셔터 글라스가 다른 글라스에 비해 고가이며  어지러움증 등에 부작용이 있습니다.



비안경 식을 설명하겠습니다.

시차 장벽을 이용한 디스플레이



이미지 출처 wikipedia





오른쪽 눈과 왼쪽눈이 볼수 있는 픽셀을 나누기 위해  특수한 슬롯을 스크린앞에 

장착하여 두가 지 다른 영상을 인지 할 수있게 해줍니다.

입체감이 많이 떨어진다고 합니다. 특히 극장이나 대형 티비에서 보는 사람의 위치에 따라

입체감이 현저한 차이 가 보여 진다고 합니다.


렌타큘라(lenticular )렌즈 방식

입체 카드나  입체 책받침등을 우리 주위에서 흔하게 접할수 있는 것의 원리 인데요

보는 각도에 따라 다른 이미지가 보이는 방식인데요 



스크린위에 랜즈를 두어 빛을 굴절 시켜 두눈이 다른 영상을 보게 하는 것입니다.

시차 장벽 방식보단 입체감이 더크고 시야각이 더좋다는 장점이 있지만

렌타큘라 렌즈때문에 디스플레이 단가 가 높고  고해상도 구현이 어렵다고 합니다.











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 을 알아보았습니다.

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