Leia Inc :: LeiaDisplay 클래스

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 효과를 부드럽게 적용하는 역할을 합니다. 🚀