336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개요

기술이 발전하고 시간이 지남에 따라 그래픽카드 성능 역시 계속 발전해왔습니다. 그 덕에 더욱 놀랍고 사실적인 그래픽을 표현할 수 있게 되어왔습니다. 그 결과 현대의 PC 및 콘솔 게임의 그래픽은 현실과 그래픽을 분간하기 어려울 지경입니다. 이토록 그래픽 카드는 얼마나 더 멋진 그래픽을 얼마나 더 고속으로 처리할 수 있는 지가 가장 큰 이슈이고 이에 초점을 맞추어서 발전해왔습니다.

이미지 출처 : http://www.slideshare.net/ozlael/unitylightingslide-public

하지만 모바일 기기의 그래픽카드는 조금 다른 행보를 갖습니다.  모바일기기는 항상 전원이 연결되어있는 상황이 아니기때문에 전력 소모가 가장 큰 이슈가 됩니다. 또한 휴대가 용이하게 만들어야 하기 때문에 칩셋을 얼마나 물리적으로 작게 만드냐가 관건입니다. 게다가 물리적으로 작게 만드려면 쿨러를 장착할 수가 없기때문에 발열도 큰 문제가 됩니다. 이러한 모바일 기기의 특징들때문에 모바일에서는 Tile Based Rendering(타일 기반 렌더링)이라는 독특한 방식을 사용합니다. 이번 글에서는 Tile Based Rendering에 대해서 알아보고, 유니티에서 Tile Based Rendering을 고려시 주의점에 대해 다루고자 합니다.


Tile Based Rendering

우선 Tile Based Rendering에 대한 설명에 앞서 데스크톱의 렌더링 과정을 간단히 살펴보겠습니다. OpenGL에서 드로우콜을 날리면 지오메트리 데이터가 버텍스 쉐이더를 거쳐서 트랜스폼된 뒤 레스터화되고 픽셀쉐이더로 넘어가서 픽셀 컬러를 거칩니다. 픽셀쉐이더의 결과물은 바로 프레임 버퍼로 출력이 되면서 필요에따라 블렌딩 처리가 됩니다. 이처럼 드로우콜의 명령이 프레임버퍼까지 전달되는 과정이 한번의 패스로 이루어지고 매번 프레임버퍼 영역 전체가 갱신이 됩니다. 즉, 드로우콜 한번 당 한번에 바로 화면 전체에 렌더링합니다. (그래서 이러한 전통적인 렌더링 방식을 Immediate Mode Rendering이라 부르기도 합니다.)

이미지 출처 : http://www.ntu.edu.sg/home/ehchua/

하지만 모바일에서는 조금은 다른 방식을 사용합니다. 앞서 언급하였듯이 모바일에서는 전력 소모와 물리적 크기 등을 고려해야합니다. 이를 위해서 많은 고려사항들이 반영되며 설계가 됩니다만 그 중 가장 큰 고려 사항중 하나가 바로 대역폭입니다. 대역폭을 넉넉하게 쓰다보면 전력소모가 심해지고 물리적 칩셋 크기도 커집니다. 이는 발열로 이어지게 되는데 당연히 발열을 완화시킬 쿨러를 달 공간도 없습니다. 그래서 모바일에서는 대역폭을 줄이기위해 Tile Based Rendering(이하 TBR)이라는 아키텍쳐를 채용하고 있습니다.

앞서 말했던 것 처럼 전통적으로 데스크톱의 그래픽에서는 드로우콜마다 프레임 버퍼 전체를 갱신합니다. 하지만 높은 해상도의 프레임버퍼 전체를 매 번 갱신하는 것은 높은 메모리 대역폭을 요구하게 됩니다. 따라서 모바일에서는 프레임버퍼 전체를 매 번 갱신하는것이 아니라 타일 단위로 쪼개서 갱신을 하는 방식을 사용합니다. 드로우콜 발생 시 즉시 프레임버퍼에 기록하는 것이 아니라, 칩셋에 내장된 메모리에 존재하는 타일에 렌더링합니다. 이로 인해서 매번 화면 전체를 렌더링 하는 것이 아니라 실제 도형이 그려지는 타일만 렌더링 하게 됩니다.

이미지 출처 : Performance Tuning for Tile-Based Architectures

우선, 프레임버퍼를 일정 크기의 타일로 영역을 나눕니다. (이 타일 크기는 칩셋 벤더마다 차이가 있습니다.) 드로우콜이 발생하면 지오메트리 데이터가 버텍스쉐이더를 거쳐서 트랜스폼을 수행 후 레스터화됩니다. 여기까지는 전통적인 렌더링 방식과 동일합니다만 그 이후부터가 달라집니다. 버텍스 쉐이더의 결과가 바로 픽셀 쉐이더로 넘어가지 않고 타일을 선택하는 과정을 거칩니다. 그 후에 픽셀쉐이더가 수행되고 칩 내부 버퍼에 존재하는 타일에 그려집니다. 그 후 타일들이 완성되면 프레임버퍼에 그려집니다. 이런 식으로 타일 단위로 프레임버퍼를 갱신해주기때문에 적은 대역폭으로도 화면을 렌더링 할 수 있게됩니다.

이미지 출처 : http://wenku.baidu.com/view/85ea8fec998fcc22bcd10dcb.html


Tile Based Deferred Rendering

또한, TBR에서 변형되어 파생한 Tile Based Deferred Rendering(이하 TBDR) 라는 방식도 있습니다. 이 방식은 기본적으로는 TBR입니다. 다만 버텍스 쉐이더에서 트랜스폼 연산을 거치고나서 바로 픽셀 쉐이더로 넘기는 것이 아닙니다. 대신 버텍스 쉐이더의 결과를 중간 데이터를 담는 파라미터 버퍼에 담아둡니다. (이 버퍼를 ImgTec에서는 파라미터 버퍼라 부르고, ARM에서는 폴리곤 리스트라 부르는 등 여러 이름이 존재하지만 편의상 파라미터 버퍼로 통일하여 칭하겠습니다.) 이 파라미터 버퍼에 담은 후 픽셀 쉐이더로 바로 넘기는 것이 아니라, 매 드로우 콜 마다 버텍스 쉐이더의 결과를 계속 담아둡니다. 그 후 모든 드로우콜이 끝나면 그때서야 비로소 타일을 렌더링하고 프레임버퍼에 출력합니다. 그렇게되면 한 타일에 들어오는 모든 폴리곤을 한번에 처리 할 수가 있게됩니다. 이 과정에서 타일의 각 픽셀에는 은면제거가 처리되고 나서 도달하기 때문에 픽셀 오버드로우가 발생하지 않습니다. 이러한식으로 TBR을 지연해서 처리하기때문에 Tile Based Deferred Rendering(타일 기반 지연 렌더링)이라고 불립니다. 

이미지 출처 : Unity: iOS and Android - Cross Platform Challenges and Solutions

예전에는 TBDR 방식이 ImgTec의 PowerVR 즉 아이폰과 아이패드에서만 사용되었으나 최근들어서는 다른 칩셋들에서도 사용되고 있습니다. 하지만 여전히 안드로이드 기기는 TBDR보다는 TBR이 많이 사용되고 있습니다. 따라서 현 시점에서는 TBR을 사용하는 디바이스와 TBDR을 사용하는 디바이스가 공존하고 있는 상태입니다. (타일 기반이 아닌 전통적인 렌더링 기법을 쓰는 디바이스는 점유율이 매우 낮아서 논외로 합니다.)

이처럼 모바일에서는 타일 단위로 쪼개서 렌더링하는 방식을 사용하다보니 몇 가지 주의 사항이 존재합니다. 서론이 좀 길어지긴 했는데 결국 전달고자 하는 내용들은 다음과 같습니다.


이어지는 내용 : 

모바일 기기의 Tile Based Rendering(타일 기반 렌더링)과 유니티에서의 주의 사항 #2 : TBR 대응 리소스 제작시 주의점



Posted by ozlael
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Unity5로 리메이크한 Republique가 에셋스토어에 올라왔습니다. 그와 함께 유니티 공식 블로그에 "THE REPUBLIQUE REMASTERED IN UNITY 5 LEARN PROJECT IS HERE!"라는 글이 함께 올라왔습니다. 이 글은 유니티 공식 블로그의 글을 번역한 글입니다.

몇 달 전 Camouflaj에서 Remastering Republique: The Journey to Unity 5라는 주제로 영상 및 글을 올렸습니다. 또한 이제는 프로젝트의 일부를 에셋스토어에 공유하였습니다. 이를 통해서 Unity5를 실제 게임에서 어떻게 활용 할 수 있는 지를 확인할 수 있을 것입니다.

이 프로젝트 파일에는 교도소, 중앙 홀, 터미널 등 여러 공간이 포함되어 있습니다. 이를 통해서 리플렉션 프로브, Enlighten, 새로운 에니메이션 및 오디오 기능 등 Unity5의 기능들이 어떻게 사용되고 있는 지 확인할 수 있습니다.


ENLIGHTEN

Republique의 중앙 홀은 스튜디오에서 Unity5로 작업 한 첫번째 공간입니다. 우리(Camouflaj)는 Enlighten을 통해서 매우 놀라운 개선을 이를 수 있었습니다. 특히 씬의 천장에서 내려오는 빛은 매우 큰 효과를 보여주었습니다.


발광(Emissive) 재질은 Unity5에 추가된 것 중 하나입니다. 형광등 재질의 발광 강도(Emission intensity)를 증가시킴으로써 반사광을 만들어 씬을 밝게 조절하는 것을 보실 수 있습니다. continuous baking을 활성화시키면 즉각적으로 결과를 확인하게 됩니다. 이로써 라이팅 작업 시간을 매우 줄일 수 있게됩니다.

다음 이미지는 Emission 값을 보여주고있습니다. 이는 에니메이션 트랙을 추가하여 값을 네이메이션 시킬 수 있습니다. (역주:예를 들어 형광등의 깜빡임 등)

라이팅 탭의 간접광 강도(Indirect Intensity)를 증가시킴으로써 씬이 동적으로 업데이트되고 한층 밝아지는 것을 확인할 수 있습니다. 이는 실시간으로 보여지고 있습니다.

리플렉션 프로브는 주변 환경을 반사시킴으로써 실제같은 금속을 만들 수 있게 해줍니다. 

다음 이미지의 기둥의 표면은 금속으로 되어있습니다. 반사력(reflectivity)를 높임으로써 공간적으로 정확한 반사를 얻을 수 있습니다.

아래 이미지와 같이 부드러움(smoothness)을 줄이면 반사 이미지는 거칠어지고 흐려집니다. 


UNITY5 AUDIO

유니티5의 오디오 믹서는 오디오를 분류하고 출력 버스를 특정지을 수 있습니다. 이로인해 오디오를 더욱 유연하게 전송하고 혼합할 수 있습니다.  ‘Ambience’그룹은 2D와 3D 서브 그룹으로 나뉩니다. 자연적으로, 3D 환경 오디오는 3D 서브 그룹으로 전송되고, 3D 버스로 할당된 오디오는 알맞는 그룹으로 연결됩니다. 각각의 그룹에서는, 볼륨(volume)과 피치(pitch)를 조절할 수 있고 오디오 필터가 적용됩니다. 또한, 개별적 혹은 전체적으로 그룹들을 실시간으로 음소거 시키거나 독주화 시킬 수 있습니다. 오디오 믹서 우측 상단의 ‘Edit on Play Mode’를 클릭하면 게임이 실행되는 동안에 편집이 가능합니다. 그 예로 우리는 게임이 실행되는 동안 ‘SFX Reverb’를  추가하여 발자국을 편집하였습니다.

만족스러운 튜닝을 마친 상태라면 오디오 셋팅을 스냅샷으로 저장할 수 있습니다. 이 스냅샷은 오디오 혼합 상태를 저장하고 다양한 사운드 프로필을 생성하여 유용하게 활용 될 수 있습니다.


MECANIM

플레이할 준비가 되었다면 한번 실행해보십시요. 좌 클릭으로 호프(케릭터 이름)를 움직일 수 있습니다. WASD로 카메라를 컨트롤 할 수 있습니다. 이 프로젝트에는 몇몇의 에니메이션이 포함되어있습니다. 하지만, 메카님 API를 이용하면 메카님 에셋을 생성하고 편집할 수 있는 많은 종류의 툴을 만들 수 있습니다.

이 프로젝트에서는, Hope에 사용된 에니메이터를 재생성하는 버튼이 존재합니다. 스크립트는 Project 폴더에 비슷한 에니메이터를 생성합니다. 

[MenuItem ("Hope/Create Controller")]

static void CreateController () {

// Creates the controller

var controller = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath ("Assets/HopeScriptCtrl.controller");

// Add parameters

controller.AddParameter("Walk", AnimatorControllerParameterType.Bool);

controller.AddParameter("TurnLeft", AnimatorControllerParameterType.Bool);

controller.AddParameter("TurnRight", AnimatorControllerParameterType.Bool);

controller.AddParameter("HalfTurn", AnimatorControllerParameterType.Bool);

// Add StateMachines

var rootStateMachine = controller.layers[0].stateMachine;

var stateMachineStand = rootStateMachine.AddStateMachine("Stand");

// Add States

var stateIdle = stateMachineStand.AddState("Idle");

var stateTurnLeft = stateMachineStand.AddState("TurnLeft");

var stateTurnRight = stateMachineStand.AddState("TurnRight");

var stateHalfTurn = stateMachineStand.AddState("HalfTurn");

var stateWalk = stateMachineStand.AddState("Walk");

stateIdle.motion = AssetDatabase.LoadAssetAtPath("Assets/Animations/Hope Animations/StandingIdleLooking.fbx", typeof(AnimationClip)) as Motion;

stateTurnLeft.motion = AssetDatabase.LoadAssetAtPath("Assets/Animations/Hope Animations/MoveStand90_L.fbx", typeof(AnimationClip)) as Motion;

stateTurnRight.motion = AssetDatabase.LoadAssetAtPath("Assets/Animations/Hope Animations/MoveStand90_R.fbx", typeof(AnimationClip)) as Motion;

stateHalfTurn.motion = AssetDatabase.LoadAssetAtPath("Assets/Animations/Hope Animations/MoveStand180.fbx", typeof(AnimationClip)) as Motion;

stateWalk.motion = AssetDatabase.LoadAssetAtPath("Assets/Animations/Hope Animations/MoveWalk_F.fbx", typeof(AnimationClip)) as Motion;

// Add Transitions

var idle2TurnLeft = stateIdle.AddTransition (stateTurnLeft);

var turnLeft2Idle = stateTurnLeft.AddTransition (stateIdle);

idle2TurnLeft.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "TurnLeft");

idle2TurnLeft.duration = 0.025f;

turnLeft2Idle.hasExitTime = true;

turnLeft2Idle.exitTime = 0.85f;

turnLeft2Idle.duration = 0.15f;

var idle2TurnRight = stateIdle.AddTransition (stateTurnRight);

var turnRight2Idle = stateTurnRight.AddTransition (stateIdle);

idle2TurnRight.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "TurnRight");

idle2TurnRight.duration = 0.025f;

turnRight2Idle.hasExitTime = true;

turnRight2Idle.exitTime = 0.85f;

turnRight2Idle.duration = 0.15f;

var idle2HalfTurn = stateIdle.AddTransition (stateHalfTurn);

var halfTurn2Idle = stateHalfTurn.AddTransition (stateIdle);

idle2HalfTurn.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "HalfTurn");

idle2HalfTurn.duration = 0.025f;

halfTurn2Idle.hasExitTime = true;

halfTurn2Idle.exitTime = 0.85f;

halfTurn2Idle.duration = 0.15f;

var idle2Walk = stateIdle.AddTransition (stateWalk);

var walk2Idle = stateWalk.AddTransition (stateIdle);

idle2Walk.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "Walk");

idle2Walk.duration = 0.025f;

walk2Idle.AddCondition(UnityEditor.Animations.AnimatorConditionMode.IfNot, 0, "Walk");

walk2Idle.duration = 0.25f;

}

이 프로젝트가 여러분들께 도움이 되셨길 바랍니다. ( 에셋 스토어 링크 : https://www.assetstore.unity3d.com/en/#!/content/34352?utm_source=unity3d&utm_medium=blog&utm_campaign=ASContent_Camouflaj)


*참고 : 최종 버젼의 게임 비쥬얼은 이 프로젝트와 약간은 달라질 수도 있습니다.



Posted by ozlael
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

들어가기에 앞서: 이 글은 2011년에 작성된 글입니다.


현재 LG와 삼성이 3D TV 시장을 놓고 박터지게 싸우고 있지요. 각각 현빈과 원빈을 모델로 앞세워 싸우는데 과연 어느 빈이 이길까요 ㅎ 모델로만 본다면 원빈이 승리? (원빈 > 현빈 >시공을 초월한 넘사벽 > you & me ) 

누구는 깜빡거린다 까고 누구는 풀HD가 아니라 까는데, 이는 안경을 사용한 S-3D 방식의 차이 때문이지요. 이 두 방식은 나중에 시간 되면 이야기 하겠습니다.

하지만, 이 메이저 리그와 다른 마이너 리그에서는 무안경 3D( Glass-free Stereoscopic 3D) 디바이스들이 각축전을 벌이시 시작합니다. 주로 모바일 장치들이 적용되서 나오고 있는데요, LG 옵티머스 3D, 삼성 W960, HTC EVO 3D, 샤프 SH-12C 등 스마트폰이 주 무대가 되고 있습니다. 하지만 코원 3D, 닌텐도 3DS 등 게임기 및 PMP등 여러 종류의 모바일 장치들에서도 나오고 있지요. 뿐만 아니라 모니터 및 TV 등 모바일이 아닌 디스플레이 시장에서도 무안경 제품이 꿈틀거리고 있지요. 본 포스팅에서는 이런 무안경 3D 기법에 대해 정리해보고자 합니다.

이 제품들은 처음 언급한 안경 방식의 TV들과는 달리 안경이 없이 입체 3D를 구현하지요. (이름 그대로 無안경, Glass-free, Glassless, Naked Eye) 안경을 쓰는 방식은 안경을 통해 필터링을 거쳐 왼쪽 눈과 오른쪽 눈에 각각에 맞는 영상을 보여주지만, 과연 안경이 없는 방식은 어떠한 방식으로 영상을 구분해서 입력을 시켜주는 것일까요? 


패렐렉스 베리어(parallax barrier)

앞서 언급한 모바일 장치들이 사용하는 방식은 패럴렉스 베리어(parallax barrier)라는 방식입니다. 디스플레이 앞에 방벽을 두어 좌안 우안의 시차를 만들어 내는 방식인데요, 그래서 시차방벽이라고도 부릅니다. 일단 기본 원리를 살펴볼까요?

우선 화면에는 수직 1라인씩 좌우 영상을 교대로 배치합니다.

이미지 출처 : http://www.osa.org/

그 전면에 영상과 같은 주기로 배리어를 설치합니다. 배리어 사이로 열린 부분을 슬릿(slit)이라 부르는데, 이 부분은 영상의 수직 1라인과 같은 시야각으로 설정 합니다.

이미지 출처 : http://www.lenstar.org/history/ch1.htm

이 것을 일정한 거리의 정면에서 보게 되면, 좌안에는 좌측 영상이 우안에는 우측 영상이 들어가게 되며 다른 눈의 영상은 차단되는 방벽의 형태가 됩니다.

이미지 출처 : http://en.wikipedia.org/wiki/

뭔가 억지스럽지만 안경 없이 볼 수 있는 실용적이고 젖절한 방식이지요. 

게다가, 이 배리어는 액정으로 만들 수 있기 때문에 2D, 3D 모드 변환은 배리어의 On/Off로 쉽게 변환이 가능 합니다. 그래서 이런 액정을 사용한 베리어 방식은 스위쳐블 페럴렉스 베리어(Switchable parallax barrier)로 불리우기도 합니다.

이미지 출처 : http://cafe.daum.net/projector

2D와 3D의 전환이 자유롭긴하지만 검은 배리어가 가리는 만큼 밝기가 반감되는 문제가 있습니다. 이런 문제때문에 3D 모드 시에는 백라이트의 밝기를 높이고, 베리어를 디스플레이와 백라이트 사이로 위치시킵니다. ( 위 그림은 배리어가 맨 위에 있는 반면, 아래 그림은 LCD가 맨 위에 있지요.)

이미지 출처 : http://www.televisions.com/tv-articles/TV-in-3D/Displaying-3D-Without-Glasses.php

또 다른 문제는 하나의 디스플레이를 좌안 우안으로 나누어 보내다 보니 체감 해상도가 줄어들게 된다는 것입니다. 공간 분할 방식의 고질적인 문제지요. 대략 이런 느낌으로 가로 해상도가 줄어들게 됩니다.

이미지 출처 : http://ozlael.egloos.com/3651808 ㅋㅋ

사진만으로는 느낌이 잘 와닿지가 않는데 세로로 줄이 쫙쫙 가 있는 느낌이라 실제로 보면 상당히 거슬립니다. 해상도 저하를 완전히 해결 할 수는 없지만, 스텝 베리어를 이용하여 해상도 저하가 수평으로 몰려 있는 것을 수평 및 수직으로 균등화 할 수도 있습니다.   

더 나가서, 배리어 두개를 맞물리게 두고 프레임 별로 바꿔서 시분할 방식을 적용할 수도 있습니다.

이미지 출처 : http://spie.org/x35370.xml?ArticleID=x35370

하지만, 밝기는 여차해서 개선하고, 해상도는 저차해서 개선한다 쳐도 가장 큰 문제는 따로 있지요. 애초에 배리어를 둘 때 관찰자의 위치를 한정하고 둔다는 것입니다. 즉, 정해진 일정 위치를 벗어나면 영상이 분리되는 등 정상적으로 보이지 않는다는 것이지요. 항상 일정한 거리에서 정면에서만 봐야 한다는 제약때문에 주로 모바일 장치에 쓰이는 기술로 굳혀버린 것입니다. 

이 제약을 개선하기 위해 동공 추적 기법( Eye-tracking, Head-tracking)을 적용하거나, 해상도가 그만큼 줄긴 하지만 아예 시점을 여러개로 만드는 방법도 있습니다.

이미지 출처 : https://physicsforme.wordpress.com/2011/06/03/3d-tv-without-glasses/

패럴렉스 배리어 방식은 현 시점에서 안경 없이 3D를 구현하기는 가장 좋은 방식이지요. 하지만 아직은 이처럼 기술 향상 시점이라 단점도 많습니다. 


렌티큘라 렌즈(Lenticular Lens)

또 다른 무안경 3D(Glass-free, Glassless, Naked Eye Stereoscopic 3D)의 방식으로는 렌티큘러 렌즈(Lenticular Lens)가 있습니다. 사실, 패러렐렉스 베리어(parallax barrier) 방식과는 달리 렌티큘러 렌즈 방식은 어릴적부터 항상 자주 접할 수 있었습니다. 어릴적 자주 보던 책받침이나 케릭터 운동화에 박혀있던 입체 영상 그림이 바로 렌티큘러 렌즈 방식이지요. 자, 그럼 기억을 더듬어 볼까요? 그 사진의 표면이 어떠했나요? 평평했나요? 아니지요. 울퉁불퉁했던 기억이 나실겁니다. 그 울퉁붕퉁한게 작은 세로형 렌즈인데 이를 렌티큘러 렌즈라고 부릅니다. 이 렌즈가 이미지를 좌우로 구분해 주는 것이지요.

일단 디스플레이에는 좌 우 영상을 번갈아 배치하는 것은 앞서 설명드린 패러렐렉스 베리어 방식과 다름이 없습니다. 대신 시차 방벽 대신에, 디스플레이의 좌우 영상 셋트의 배치 주기로 되어있는 반 원통형 렌즈의 배열 시트를 입힙니다. 수직으로 시트가 구성 되기 때문에 수직 렌트큘라 시트(Vertical lenticular sheet)라고도 부릅니다.

이미지 출처 : http://www.squidoo.com/lenticular-lens

이 렌즈의 굴절을 이용해서 좌측과 우측으로 각각 영상을 보내는 것이지요.

이미지 출처 : http://www.rays3d.net/about-lenticular.html

기본적으로는, 디스플레이 앞에 항상 물리적인 시트를 두고 있어야 하기 때문에 2D로의 변환이 불가능 합니다. 그래서 보통은 가정용 디스플레이 장치 보다는 광고 전광판이나 이미지 판촉물에 쓰입니다. 3D를 구현하는 방법 외 시각에 따라 그림이 바뀌는 효과로 쓰이기도 하죠.

하지만 요즘에는 전자식 능동형 렌티큘러(Electro-Active Lenticular)가 개발되서 상용화 되고 있습니다. 전자 액정의 분자에 전압을 가해서 굴절률을 변화 시키는 방식인데, 제가 디스플레이 전문 공돌이는 아니라서 자세한 내용은 잘 모르겠네요. ㅎㅎ  

(누가 해석점 ㅋ 마이크로 렌즈 모양의 PI로 구성된 투명한 틀 안에 액정이 채워져 있고 외부에는 전압이 가해진 상태의 액정분자와 동일한 굴절률을 갖는 물질로 이루어진 replica로 구성되어 있다. 이 구조의 마이크로 렌즈 상하에는 ITO전극이 위치하여 전압을 인가할 수 있도록 하였다. 전압이 인가되지 않는 3차원 상태에서는 내부의 액정 분자와 외부의 replica 사이에 굴절률 차이가 발생하게 되어 렌티큘러 렌즈를 통과하는 효과를 나타낸다. 반면, ITO전압이 인가되는 2차원 상태에서는 액정의 상태가 변화하여 외부의 replica와 동일한 굴절률을 갖게 되고 입력된 빛을 그대로 통과시키게 된다.)

이미지 출처 : http://www.kdia.org

하지만 딱 봐도 느껴지는 것 처럼 전자 렌즈의 제조 단가가 높아 주로 쓰이지는 않았으나, 최근 들어서는 이를 많이 적용하기 시작하는 것 같더군요.

랜티큘라 역시 패러렐렉스 배리어 방식과 마찬가지로 다중 시야( multi-view)를 구현 시 이미지 공간을 세로로 더 나누어 쓰기 때문에 세로 해상도가 급격히 줄어들게 됩니다. 이를 개선하기 위해 렌티큘러 렌즈를 정 세로가 아닌 사선으로 배치하여 개선하기도 합니다.

이미지 출처 : http://cafe.daum.net/lentienp


집적 영상 (integral image)

집적 영상 시스템(integral imaging system, 인테그랄 이미지)라는 렌즈를 이용하는 방법이 또 있습니다. 랜티큘러 시트 방식과 비슷한 컨셉인데요, 렌티큘라 시트 방식은 반 실린더를 세로로 나열 한 반면, 인테그랄 이미지 방식은 작은 반구 렌즈들을 가로 세로 나란히 배열합니다. 이 모양이 파리의 눈과 비슷한 방식이여서 파리 눈 렌즈(fly’s eye lens)라 불리기도 합니다.

이미지 출처 : http://patent2.kipris.or.kr/pat/biblioa.do?method=biblioFrame&start=biblio&searchFg=N

이러처럼 작은 볼록 렌즈의 집합을 정면으로 보게 되면 머리의 기울기에 상관 없이 입체 영상을 볼 수 있습니다. 렌티큘라 시트는 빛이 좌우 수평으로 퍼지는 반면 인테그랄 이미지는 수평만이 아닌 사방으로 퍼지기 때문입니다. 즉, 누워서도 시청이 가능하다는 것이지요. 하지만 영상을 만들어 내는 것이 간단하지도 않고 아직까지 연구가 진행중인 방식입니다.

이미지 출처 : http://en.wikipedia.org/wiki/Integral_imaging


HR3D (High-Rank 3D)

통상적으로는 무안경 입체 영상 기술은 지금까지 말씀 드린 세 방법이 대표적입니다만, 얼마 전 MIT 공돌이들에 의해 HR3D라는 새로운 기술이 발표 되었습니다. 앞의 세 방식에 비해 특이한 컨셉이 존재하는데, HR3D는 LCD 디스플레이를 두개를 사용한다는 것입니다. 패러렐렉스 베리어 방식처럼 디스플레이 앞에 베리어를 두지만 이 베리어 역시 디스플레이인 것입니다.( 상: 패러렐렉스 베리어, 하: HR3D)

이미지 출처 : http://web.media.mit.edu/~mhirsch/hr3d/

패러렐렉스 베리어는 일정한 패턴으로 좌우 영상이 존재하고 그에 상응하는 주기로 장벽이 존재하지만, HR3D는 복잡하고 경이로운 수학의 세계(?) 를 거쳐 영상에 최적화 된 패턴을 만들어내고 그에 의해 후면 패널 영상과 전면 패널의 장벽이 만들어 집니다. (패턴 만들어 내는 공식은 알지도 못하겠고 알고 싶지도 않아요;;)

이토록 동적인 장벽이 만들어 지므로 시선의 방향 및 기울기에 구애 받지 않고 입체 영상을 만들어 낼 수 있습니다. 즉 관찰자가 어디 있던지 유동적으로 대처가 가능 하다는 것이지요. 또한 장벽으로 인한 밝기 저하가 없고 그에 따라 백라이트 전력도 절약 된다고 합니다. 뭐, 실제로 보지도 못했고 발표된지 1년도 채 안된 기술인지라 약을 파는 것인지 뭔지는 잘 모르겠습니다만 점차 시간이 지나면서 상용화가 시작되면 본격적으로 검증이 되겠지요. :-)


홀로그래피(Holography)

사실 제일 궁극의 무안경 3D 입체 영상 기술은 홀로그래피(Holography)이죠. 홀로그램(hologram)이라고도 불리는데 엄밀히 따지자면 기술 자체의 명칭은 홀로그래피이고 홀로그램은 이로 인해 만들어지는 컨텐츠를 가리킵니다. 어쨌든간에 뭐 아직까지는 미래 기술이고 미 국방부쯤은 되어야 쓸까 말까 정도니 자세히 다루지는 않겠습니다. (어짜피 저도 잘 모르고 ㅎㅈㅎ)

이미지 출처 : http://blogs.vassar.edu/ltt/2011/04/01/a-look-into-the-structure-and-creation-of-holograms/

하지만 현재 어느정도는 만들어 낼 수 있고 지속적으로 연구가 되고있습니다. 현존하는 방식 또한 여러 가지가 존재하는데 그 중 하나로 360º Light Field Display란 방식이 있지요. 욜라 빨리 회전하는 거울판에 빛을 투영시키는데, 거울의 회전 각에 맞는 영상을 내 보내서 마치 입체적으로 영상이 존재하는 것 처럼 보이게 하는 방식입니다. 뭔가 ㅄ같지만 멋있어

이미지 출처 : http://gl.ict.usc.edu/Research/3DDisplay/

뭐 이처럼 지속적인 홀로그래피 기술이 연구되고 있으니 죽기전에는 집 거실에서 홀로그램을 볼 수 있겠지요. 20년 전 우리가 콧물 질질 흘리며 동네 문방구에서 오락할 때 까지만 해도, 거실에 있는 PlayStation이나 XBOX로 3D 게임을 즐기는 모습을 상상이나 할 수 있었습니까? 앞으로 20년만 참고 기다리면 디스플레이 공돌느님들이 홀로그램쯤은 거뜬히 만들어 줄 테니 꾹 참고 기다립시다. 


끝으로 이 세계의 공돌이들을 찬양하며 이만 줄일까 합니다. May the force be with you!

Posted by ozlael
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Stereoscopic 커뮤니티 및 각종 관련 문서들을 보면 참고 이미지로 좌안 우안의 이미지를 나란히 나열하는 것을 볼 수 있습니다.


 보통은확장자가 jps인 이미지 파일로써, 단순히 좌안 우안 영상을 jpg 파일 하나에 늘어놓고 확장자를 jps로 바꾼 것 뿐입니다. jps 파일을 업로드 못하는 웹이 많아서 jpg 형식으로도 많이 업로드 하곤 하죠. 이런 사진들을 3D 뷰어로 보면 3D 디스플레이 장치는 이를 각각 좌안 우안용으로 나누어 보여줘서 입체로 보게 되서 우왕 ㅋ 굿.

하지만, 3D 디스플레이 장치가 없더라도 맨 눈으로 입체를 볼 수도 있습니다. . 일명 매직아이( magic eye)로 잘 알려진  Stereoscopic 3D Eye Freeview 방식이지요. 눈의 초점을 변경하여 좌 우 영상을 겹치게 만들어서 입체로 보는 방식입니다.
이 기법에는 평행시(Parallel eye)와 교차시(Cross Eye) 두 가지 방식이 존재합니다만, 저는 그동안 평행시만 가능 했었는데, 얼마 전 문서를 하나 보고 교차시도 터득중이지요. 훗!
설명도 간단하면서도 쉽게 되어 있어서 발번역 의역 급요약 정리하니 많은 분들이 두 방식 다 터득하시길 바래요.
이해를 돕기 위해 발로 그린 그림도 곁들였으니 이해가 딱~!




평행시(Parallel Freeview) 배우기 :
평행시는 좌측 이미지를 좌안에, 우측 이미지를 우안에 적용 시키는 방식입니다. 스크린 안을 응시하여 각각의 눈이 좌우 영상을 따로 보는 것 같은 화상을 얻게되고, 올바른 거리로 응시하면 가운데 두 이미지가 겹쳐져서 3D가 되요.( 에.. 그러니까 모니터의 뒤쪽에 포커스를 맞춘다는 느낌?) 이때 바깥의 두 이미지는 2D 상태죠. 다음 그림은 이 효과를 시뮬레이션 한 모습입니다.


이놈은 단지 시뮬레이션 모습이므로 평행시로 보려고 시도하는 뻘짓은 하지 마세요. 가운데 3D 이미지로 응시될때 좌우 바깥의 두 이미지는 흐려보이는 것을 설명 합니다.

자, 이제 평행시를 시도 해 봅시다.
앞에서부터 왼쪽 나무, 오른쪽 나무, 집, 태양 순서로 배치되면 성공입니다.


평행시를 배우기 위한 트릭이 몇가지 존재하죠.
1. 모니터에 너님의 용안의 반사 될 정도로 방의 밝기를 높이세요. 반사 된 너님의 모습을 보면 두 이미지가 올바르게 겹쳐 질 수 있고 이때 포커스를 이미지로 옮기세요. 2D로 다시 깨지면 시ㅋ망ㅋ 될때까지 반복. (대부분의 LCD는 안될 듯;;)
2. 빳빳한 종이를 세로로 양 눈 사이에 세우면 각각의 이미지에 대한 집중을 도와줘요.


교차시(Cross Eye Freeview) 배우기:
교차시는 평행시와는 다르게 좌측 이미지를 우안에, 우측 이미지를 좌안에 적용 시키는 방식이예요. 스크린과 너님의 가운데를 응시하여 양쪽 시야가 가운데를 교차하게 함세요. (사시 눈을 만들  듯이.)
마찬가지로 앞에서부터 왼쪽 나무, 오른쪽 나무, 집, 태양 순서로 배치되면 성공입니다.

교차시 역시 배우기 위한 트릭이 존재하죠. 
1.교차시하려는 이미지에서 좀 떨어지거나 이미지를 축소하여서 교차 수렴되기 위한 각을 줄이면 되요.
2. 연필을 얼굴과 이미지 사이에 놓고 응시하되 이미지에도 집중하세요(빡심;;). 연필을 앞뒤로 움직이면서 이미지가 겹쳐셔서 세 개로 되는 지점을 찾으삼. 가운데 이미지가 3D가 되지만 포커스 밖인 상황에서 포커스를 가운데 이미지로 옮기삼. 2D로 다시 깨지면 시ㅋ망ㅋ
3. 한쪽 이미지 크기의 사각 구멍을 낸 종이를 스크린과 얼굴 사이 가운데 위치시켜서, 각각의 눈이 대응되는 이미지를 볼 수 있으면 집중에 도움 되요.




경고 :
Freeview를 시도하면 눈은 그 동안 사용하지 않았던 근육을 사용하므로 눈알이 빠짐다. 쉬엄 쉬엄 하세요 :-)


Posted by ozlael
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
참고 : 이 글은 2011년도에 작성 된 글입니다 :)

아마도 영화 아바타를 모르시는 분은 없을겁니다. 이 아바타는 전 세계적으로 27억달러라는 엄청난흥행을 거두었는데요, 국내에서도 천만명 이상이 관람했다고 합니다. 전체 인구의 1/4에 육박하는 엄청난 숫자인데요, 유소년 및 노년층을제외하고, 어둠의 경로로 보신분들 포함하면 뭐 그냥 안본사람이 없다고 볼 수 있을 것입니다. 이 영화의 배경인 판도라를 보려고 2번 이상 관람한 사람도 있고, 이 판도라를 잊지 못해 우울증에 걸린 사람도 나올 정도지요. 이런 엄청난 흡입력의 원인은 무엇일까요?

물론 당연히 영화가 재미있기 때문이겠지요. 남자는 차가 좋아야 미인을 얻는다는 훈훈한 교훈도 주고 있구요ㅋ 
또한, 입체영상이 한 몫을 했다는 것은 아무도 부인하지 못할 것입니다. 3D 하면 아바타, 아바타 하면 3D가 떠오르지요. 이 높은 퀄리티의 3D는 영화계의 한 획을 그으며 3D 붐을 일으키게 되었지요. 아바타가 개봉된 2009년은 3D 원년으로 불리우며 3D 입체 영상에 대한 관심이 폭발적으로 증가하게 됩니다.


그 전 해인 2008년에는 5편에 불과하던 3D 영화는 2010년에는 26편으로 기하급수적으로 늘게 됩니다. 그리고 2011년 말 현재 38편 이상이 개봉(혹은 예정) 되었습니다. 드림웍스의 경우는 몬스터VS에일리언을 시작으로 모든 영화를 입체영상으로 제작하겠다고 발표하기도 하였습니다. 장르 또한 SF에만 국한되지 않고 다큐멘터리, 에로등으로 확대되고 있습니다. 옥보단 3D의 경우는 관람객의 70% 이상이 3D로 관람했다고 합니다. 

이토록 시장은 계속 커지고 있으며, 앞으로도 더 커질것은 자명한 사실이지요. 그리하여 2014년에는 3D 시장이 1100억달러에 육박할 것으로 전망되고 있습니다. 이 시장 규모를 모두 원화로 환산하면, 국내 모든 봉급자들에게 보너스로 1500만원씩을 줄 수 있는 엄청난 규모이죠. 

하지만 사실, 현재는 제조사들이 TV와 모니터를 적극적으로 발표하고 생산하는데 반해, 소비자의 구매욕구는  잠시주춤 상태에 있다고 볼 수 있습니다. 일단가격대가 높은 것이 제일 큰 요인일것입니다. 그에 반해 컨텐츠가 부족한 점 역시 큰 요인으로 작용하고 있습니다. TV들이 2D에서 3D로의 변환을 지원하지만, 애초에 3D로 만든 컨텐츠에 비하면 허접한게 사실이죠. 소비자는 극장에서 느낀 감동을 거실로 그대로 가져오길 기대하며 높은 금액을 투자하여 3D TV를 구매하지만, 얻는 만족도는 크게 낮을 수 밖에 없는 실정입니다. 또한 기술적인 한계로 인한 시청의 불편함도 한 몫을 할 것입니다. 이러한 단점들 때문에 3D TV에 대한 구매력을 잃게 되는 것이지요. 

하지만, 시간이지나면서 3D 컨텐츠는 계속 증가하게 될 것이고시청의 불편함 역시 기술이 계속 발전되면서 해결될 것입니다. 또한, 3D 디스플레이 시장에 뛰어드는 벤더가 늘어나면서 소비자의 선택 폭은 넓어지겠지요. 그러면서 본격적으로 대량 생산 체계로 접어들면서 2012년도에는 총 9천만대의 3D TV가 생산 될것으로 전망하고 있습니다.(자료출처:디스플레이서치)

솔직히 3D가 대세라고는 하지만 막상 평소에 3D TV를 구경하긴 쉽지 않죠. 어디 박람회나 매장에나 가야 구경할 수 있는 정도 뿐 되지 않습니다. 그래서 3D는 거품이 빠지고 있다며 비관적인 전망을 내놓는 분들도 많지요. 하지만 몇년 후면 지금까지 말씀 드렸던 것 처럼 많이 보편화 될 것입니다. 현재는 시장이 커지고 있는 과정일 뿐이므로 지속적으로 관심을 가져주세요^^


Posted by ozlael
,