Leia Unity SDK를 활용하여 라이트 필드(홀로그램) 디스플레이를 처리하는 기능을 포함하고 있습니다.
아래에서 핵심적인 기능과 코드 분석
1. 개요
LeiaDisplay 클래스는 라이트 필드 디스플레이에서 렌더링, 뷰 관리, 카메라 조정 등의 기능을 담당합니다.
핵심적으로, 일반적인 2D 디스플레이와 다르게 여러 개의 시점(View)을 생성하여 3D 효과를 제공합니다.
2. 주요 기능
1️⃣ 렌더링 관련
- RenderImage()
- 3D 모드가 활성화되었을 때, 뷰를 렌더링하여 인터레이스(Interlace)된 화면을 생성합니다.
- Unity 에디터 환경에서는 Graphics.Blit()을 사용해 이미지를 적용.
- 안드로이드 환경에서는 RenderTrackingDevice.Instance.Render() 사용.
- UpdateViews()
- 사용자의 화면 방향(Screen Orientation) 을 확인하여 뷰 해상도를 업데이트합니다.
- 특히 안드로이드 환경에서는 회전 방향(Portrait / Landscape)에 따라 해상도를 조정합니다.
2️⃣ 카메라 제어 관련
- 카메라 모드 (ControlMode)
- CameraDriven: 카메라를 중심으로 가상 디스플레이 조정
- DisplayDriven: 디스플레이 중심으로 카메라를 조정
- UpdateVirtualDisplayFromCamera()
- 카메라를 기준으로 가상 디스플레이 크기(Virtual Height)를 조정합니다.
- UpdateCameraFromVirtualDisplay()
- 반대로, 가상 디스플레이 값을 이용하여 카메라 위치를 조정합니다.
- GetProjectionMatrixForCamera()
- 현재 카메라의 위치를 기반으로 투영 행렬(Projection Matrix)을 생성하여 3D 효과를 적용.
3️⃣ 디스플레이 관련
- Set3DMode(bool toggle)
- 3D 모드를 활성화/비활성화하는 함수.
- 내부적으로 RenderTrackingDevice.Instance.DesiredLightfieldMode 값을 변경하여 적용.
- HandleLightfieldModeChanged(RenderTrackingDevice.LightfieldMode lightfieldMode)
- 라이트 필드 모드가 변경될 때 화면에 적용.
- 뷰 개수 (_numViewsX) 와 3D 효과에 필요한 깊이값 (Depth Factor, LookAround Factor)를 조정.
- GetDeviceViewResolution()
- 현재 Leia 디스플레이의 뷰 해상도 정보를 반환.
4️⃣ 뷰 및 머리 추적 (Head Tracking)
- ViewersHead 객체
- 사용자의 머리 위치(Head Position)를 감지하여, 3D 시점(View)을 조정.
- InitLeiaDisplay(List<Vector2> ViewConfig)에서 초기화됨.
- RealToVirtualCenterFacePosition(Vector3 FacePositionMM)
- 실제(mm 단위) 얼굴 위치를 가상 디스플레이 좌표로 변환.
3. 실행 흐름 (라이프사이클)
클래스는 Unity의 생명주기(Lifecycle) 에 따라 동작하며, 실행 흐름은 다음과 같습니다.
1️⃣ OnEnable()
- RenderTrackingDevice.Instance를 초기화하고 뷰 설정, 머리 추적, 렌더링을 설정
2️⃣ Update()
- 실행 중일 때 카메라 위치 및 디스플레이 크기를 업데이트
- Unity Editor에서는 EnsureEditorPreivewMaterialInitialized() 를 통해 프리뷰 렌더링을 적용
3️⃣ OnDisable()
- RenderTrackingDevice.Instance.LightfieldModeChanged 이벤트를 해제
4️⃣ OnDestroy()
- ViewersHead 객체가 있을 경우 제거
4. 사용 기술 및 패턴
✅ 싱글톤 패턴 적용 (RenderTrackingDevice.Instance)
- RenderTrackingDevice.Instance = FindObjectOfType<RenderTrackingDevice>();
- Leia SDK의 렌더링 디바이스 인스턴스를 싱글톤으로 관리.
- DontDestroyOnLoad(renderDeviceObj); 를 사용하여 씬이 변경되어도 유지.
✅ 이벤트 기반 구조
- RenderTrackingDevice.Instance.LightfieldModeChanged += HandleLightfieldModeChanged;
- StateChanged.Invoke();
- 3D 모드가 변경될 때, 이벤트를 활용하여 상태를 갱신.
✅ 플랫폼 분기 처리
- #if UNITY_ANDROID && !UNITY_EDITOR
- 안드로이드 환경에서는 supportAllAxis 기능을 통해 화면 회전(Portrait/Landscape) 대응
- Unity Editor에서는 기본값을 적용.
5. 핵심 정리
- LeiaDisplay는 3D 라이트 필드 렌더링을 담당하는 핵심 클래스.
- 카메라 기반 시점 관리 (CameraDriven)와 디스플레이 중심 모드(DisplayDriven)를 지원.
- RenderTrackingDevice를 활용하여 Unity에서 3D Light Field 렌더링을 적용.
- 멀티뷰(다중 시점) 및 사용자 머리 추적(Head Tracking)을 활용하여 몰입형 3D 효과 제공.
- 플랫폼별(안드로이드, Unity Editor)로 렌더링 로직을 분기 처리.
🔹 결론
Leia Inc.의 디스플레이를 활용한 홀로그램/라이트 필드 기술을 Unity에서 구현할 때 사용하는 핵심 클래스입니다.
렌더링, 카메라 제어, 시점 이동, 디스플레이 설정을 자동으로 처리하여 3D 효과를 부드럽게 적용하는 역할을 합니다. 🚀