콘텐츠로 이동

이미지 뷰어

GeoOmni 이미지 뷰어는 항공사진측량을 위한 Vulkan GPU 가속 고성능 뷰어입니다. 대용량 원본 영상(16k+ 픽셀)을 실시간으로 렌더링하며, 서브픽셀 관측 정밀도를 보장합니다.


상태바 엔진 모드 표시

뷰어 하단 상태바에는 현재 운영 중인 엔진 모드가 실시간으로 표시됩니다:

[Tiled] IMG:Tiled(.gopy/raw) VEC:MDI+GPU STEREO:Multiview(6)

맨 앞 대괄호는 선택된 이미지 엔진(현재 Tiled 단일)이며, 이어서 IMG / VEC 필드가 나옵니다. STEREO 필드는 GPU가 스테레오를 실제로 지원할 때만 나타나며, 미지원 장비에서는 항목 자체가 생략됩니다.

이 정보는 현재 하드웨어가 지원하는 최상위 기능을 자동으로 선택하여 표시합니다. 관측 정밀도와 성능은 각 모드에 따라 달라지므로, 작업 전에 반드시 확인하시기 바랍니다.


IMG — 이미지 엔진 모드

이미지 데이터를 GPU에 로드하고 렌더링하는 방식입니다.

Tiled(.gopy)

피라미드 타일 LOD 모드 — 대용량 항공영상 전용.

.gopy 파일은 압축 옵션에 따라 두 가지 변종으로 운영됩니다. 상태바에는 어느 변종이 활성인지 명시됩니다.

Tiled(.gopy/raw) — 무손실 변종 (정밀 관측 권장)

항목 내용
사용 조건 .gopy 파일의 compression = None(Raw RGBA)일 때 자동 활성화
처리 방식 압축 없이 원본 RGBA 픽셀을 타일 단위로 GPU에 업로드
LOD 선택 현재 줌 레벨에 따라 최적 피라미드 레벨 자동 선택 (Level 0 = 원본, L+1 = 1/2 축소)
메모리 점유 타일 단위 LRU 캐시 (기본 128 타일, 약 32MB VRAM)
정밀도 100% 무손실 — 원본 픽셀 값 그대로 보존, 서브픽셀 관측 가능
장점 16k+ 거대 이미지도 빠른 표시, 정밀 관측 보장, WIC JPEG 디코딩 우회
단점 디스크 사용량 큼 (raw 대비 ~4배)

Tiled(.gopy/jpeg*) — 손실 변종 (미리보기 전용)

항목 내용
사용 조건 .gopy 파일의 compression = JPEG(quality=85 기본)일 때 자동 활성화
처리 방식 JPEG 타일을 WIC로 디코딩하여 RGBA로 GPU에 업로드
정밀도 ⚠️ 손실 압축 — 픽셀당 ±1~3 단위 오차, 블록 경계 아티팩트 가능
장점 디스크 사용량 작음 (raw 대비 ~1/4), 일반 패닝/미리보기에 충분
단점 GCP 정밀 관측, 자동 매칭에는 부적합. 상태바 라벨 끝의 별표(*)가 손실을 의미

정밀 관측 시 무손실 경로 강제

Tiled(.gopy/jpeg*)는 일반 패닝/미리보기 용도로만 사용하세요. GCP 정밀 관측, 타이포인트 자동 매칭이 필요한 작업에서는 .gopy 빌드 시 compression=raw 옵션을 사용하세요.

파일 구성 예시:

D:/Data/aerial_01.tif        ← 원본 TIFF (1.1 GB)
D:/Data/aerial_01.tif.gopy   ← .gopy raw   (~1.5 GB, 무손실)  → Tiled(.gopy/raw)
또는
D:/Data/aerial_01.tif.gopy   ← .gopy jpeg  (~100 MB, 손실)    → Tiled(.gopy/jpeg*)

상태바 추가 정보: LOD L2 | 24 타일 (현재 레벨 2, 가시 24 타일)

Tiled(.gopy/?) — 압축 종류 미상

.gopy 헤더에서 압축 종류를 판독하지 못한 경우 표시됩니다. 무손실 여부를 보장할 수 없으므로, 정밀 관측 전에 .gopy 를 재빌드하십시오.


KTX2(Lossless)

Khronos Texture 2.0 컨테이너 — 무손실 경로 (현재 실사용 기본).

KTX2는 컨테이너 포맷입니다

KTX2는 압축 알고리즘 자체가 아니라 텍스처 컨테이너입니다. 하나의 .ktx2 파일은 여러 종류의 픽셀 포맷을 담을 수 있습니다:

  • 무손실: R8G8B8A8_UNORM, R8G8B8A8_SRGB, R16G16B16A16_UNORM — 원본 TIFF와 동등한 정밀도
  • 손실 (향후): BC7, BC6H 등 GPU 블록 압축 코덱
  • 수퍼컴프레션 (향후): Zstd, BasisLZ 등

GeoOmni는 무손실 포맷만 활성화하여 KTX2를 일종의 "GPU 친화적 무손실 사이드카 파일"로 사용합니다.

항목 내용
사용 조건 이미지 옆에 동반 *.ktx2 파일이 존재할 때 자동 활성화
포맷 화이트리스트 R8G8B8A8_UNORM, R8G8B8A8_SRGB, R16G16B16A16_UNORM
처리 방식 컨테이너에서 mip 0 + 사전 계산된 미니맵 체인을 그대로 GPU로 업로드
WIC 디코딩 불필요 — KTX2 파서가 직접 읽음, 로딩이 RGBA 경로보다 빠름
정밀도 100% 무손실 — 원본 픽셀 값 보존, 서브픽셀 관측 가능
장점 WIC 디코딩 우회, 미리 계산된 mip, 헤더가 단순, 로딩 빠름
단점 TIFF → KTX2(무손실) 사전 변환 필요

파일 구성 예시:

D:/Data/aerial_01.tif        ← 원본 (1.1 GB, RGBA)
D:/Data/aerial_01.tif.ktx2   ← 무손실 KTX2 컨테이너 (~1.1 GB + mip)
                              → 뷰어에서 더블클릭 시 KTX2를 우선 사용

BC7 + 손실 압축 (향후 기능 / Future)

현재 비활성화 — 추후 단계로 연기됨

BC7 등 손실 블록 압축 경로는 대규모 정사영상(수백 GB) 미리보기 검증 단계에서 재개됩니다. 현재 빌드는 KTX2 컨테이너 안의 BC7 포맷을 거부합니다.

항목 내용 (예정)
사용 조건 GPU가 textureCompressionBC 기능 지원 + 사용자 옵트인
압축률 원본 RGBA 대비 약 4배 (32bpp → 8bpp)
정밀도 ⚠️ 손실 — 픽셀당 ±1~3 단위 오차, 블록 경계 아티팩트 가능
자동 폴백 정책 100% 이상 확대 / 관측 모드 진입 시 무손실 경로 강제
상태바 표시 활성화 시 KTX2(BC7)로 별도 표시 (현재는 미노출)
사용 케이스 대량 정사영상 일괄 미리보기, 썸네일 캐시, 멀티 모자이크 회람용

GCP 정밀 관측 / 자동 매칭이 주 작업인 단계에서는 BC7 경로를 사용하지 않습니다.


RGBA

기본 모드 — 압축 없이 원본 RGBA로 GPU에 업로드.

항목 내용
사용 조건 BC 압축 미지원 또는 기본 경로 사용 시
처리 방식 WIC로 이미지 디코딩 → RGBA 32bpp → 단일 VkImage 업로드
GPU 크기 제한 maxImageDimension2D 초과 시 자동 축소 (비율 유지)
정밀도 100% 무손실
장점 모든 GPU 지원, 가장 단순한 경로
단점 VRAM 사용량 최대, 거대 이미지는 축소됨

메모리 예시: - 14118 × 20150 RGBA = 약 1.1 GB → GPU 제한(16384px)에 맞춰 11465 × 16384로 축소


VEC — 벡터 엔진 모드

GCP, 타이포인트, 도화(벡터 피처) 등의 오버레이를 그리는 방식입니다.

MDI+GPU

Multi-Draw Indirect + GPU 기반 컬링 — 최상위 성능.

항목 내용
사용 조건 multiDrawIndirect + VK_KHR_draw_indirect_count 지원
드로우 방식 GPU 컴퓨트 셰이더가 드로우 명령을 직접 작성, CPU는 단 1회 호출
컬링 프러스텀 컬링, 가시성 필터, 레이어 필터 모두 GPU에서 처리
처리 피처 수 수만 ~ 수십만 개 단일 드로우콜로 처리
장점 CPU 오버헤드 최소, 대량 벡터 데이터 실시간 편집 가능
하드웨어 데스크탑 GPU 대부분 지원 (Vulkan 1.2+)

사용 예시: GCP 50,000개 + 타이포인트 200,000개 동시 렌더링 시에도 60 FPS 유지.


MDI

Multi-Draw Indirect만 지원drawIndirectCount 미지원 환경.

항목 내용
사용 조건 multiDrawIndirect만 지원, drawIndirectCount 미지원
드로우 방식 CPU가 가시성 판단 후 MDI 버퍼에 드로우 명령 기록
컬링 CPU 사이드 프러스텀 컬링
처리 피처 수 수천 ~ 수만 개
장점 GPU 의존도 낮음, 호환성 높음
단점 편집이 빈번한 경우 CPU 오버헤드

Basic

기본 드로우콜 경로 — 피처당 개별 draw.

항목 내용
사용 조건 multiDrawIndirect 미지원
드로우 방식 각 피처마다 vkCmdDraw 개별 호출
처리 피처 수 수백 ~ 수천 개
장점 가장 단순, 모든 GPU 호환
단점 CPU 병목, 피처 수에 비례하여 프레임 시간 증가

현재 GeoOmni는 Vulkan 1.0+ 데스크탑 GPU에서 실행되므로 대부분 MDI 이상이 선택됩니다.


STEREO — 스테레오 렌더링 모드

좌/우 이미지 쌍을 동시에 렌더링하여 입체 관측을 지원합니다.

QuadBuffer

NVIDIA Quad Buffer Stereo — 전문 사진측량 표준.

항목 내용
필수 장비 NVIDIA Quadro P-series / RTX A-series (Quadro RTX 4000 이상 권장)
모니터 편광 3D 모니터 또는 셔터 글래스 (120 Hz 이상)
드라이버 NVIDIA 3D Vision Pro 설정 활성화
출력 좌/우안 이미지를 하드웨어 수준에서 동기화
대상 항공사진측량 실무, DAT/EM Summit 대체

Quad Buffer 활성화 조건

  • NVIDIA 벤더 GPU + Quadro/RTX Pro 라인업
  • NVIDIA 드라이버의 "Stereo Enabled" 설정
  • Vulkan 인스턴스 생성 시 자동 감지 → 미지원 장비에서는 Multiview로 자동 폴백

Multiview(N)

VK_KHR_multiview 기반 멀티뷰 렌더링 — 표준 GPU에서 스테레오.

항목 내용
사용 조건 Vulkan 1.1+ 또는 VK_KHR_multiview + maxMultiviewViewCount >= 2
렌더 방식 단일 렌더 패스에서 좌/우 뷰 동시 렌더링 (gl_ViewIndex)
성능 이점 일반 듀얼 뷰 대비 드로우콜 50% 절감, CPU 오버헤드 2배 감소
괄호 안 숫자 (N) GPU가 지원하는 최대 뷰 수 (일반적으로 2~6)
출력 Side-by-Side 화면 분할 또는 애너글리프 합성
대상 일반 데스크탑 GPU로 스테레오 관측

현재 AMD Radeon 8060S: Multiview(6) — 최대 6뷰 동시 지원.

미지원 장비 — STEREO 항목 생략

QuadBuffer 와 Multiview 를 모두 사용할 수 없는 GPU에서는 상태바에 STEREO 필드가 아예 표시되지 않습니다. 빈 값이나 폴백 이름이 뜨는 것이 아니라 항목 자체가 사라집니다.

스테레오 합성 모드와 혼동하지 마세요

모델 워크스페이스의 입체 관측에는 SideBySide / Anaglyph / AnaglyphYB 라는 화면 합성 모드가 별도로 있습니다. 이는 좌/우 영상을 한 화면에 어떻게 합성할지의 설정이며, 상태바 STEREO 필드(GPU 스테레오 지원 여부)와는 다른 개념입니다.


폴백 체인 — 자동 모드 선택

앱 시작 시 다음 순서로 하드웨어 기능을 확인하여 최상위 모드로 자동 설정합니다:

이미지 엔진

이미지 더블클릭
  ├─ .gopy 파일 + compression=raw?
  │     → Tiled(.gopy/raw)             (피라미드 타일 LOD, 무손실)
  ├─ .gopy 파일 + compression=jpeg?
  │     → Tiled(.gopy/jpeg*)           (피라미드 타일 LOD, 손실 — 정밀 관측 부적합)
  ├─ .ktx2 동반 파일 존재 + 무손실 포맷?
  │     → KTX2(Lossless)               (무손실 컨테이너, mip 사전 계산)
  └─ 그 외
        → RGBA                          (WIC 디코딩, 무손실)

무손실 우선 원칙: Tiled(.gopy/raw), KTX2(Lossless), RGBA는 모두 100% 무손실입니다. Tiled(.gopy/jpeg*)는 손실이며 미리보기 전용입니다 (별표 * 표시).

참고: BC7 + 손실 압축 KTX2 경로는 코드에 골격만 존재하며 현재 빌드에서는 비활성화되어 자동 폴백 체인에 등장하지 않습니다. 대규모 정사영상 검증 단계에서 옵트인으로 재개됩니다.

벡터 엔진

multiDrawIndirect + drawIndirectCount?
    → MDI+GPU
multiDrawIndirect만?
    → MDI
그 외
    → Basic

스테레오 엔진

NVIDIA Quadro/RTX Pro + 드라이버 스테레오 활성화?
    → QuadBuffer
VK_KHR_multiview + maxMultiviewViewCount >= 2?
    → Multiview(N)
그 외
    → (STEREO 항목 자체를 표시하지 않음)

정밀도 원칙

항공사진측량 작업에서 서브픽셀 정밀도는 절대 원칙입니다.

원칙 설명
100% = 1:1 픽셀 줌 100%에서 이미지 1픽셀이 모니터 1픽셀에 정확히 대응
서브픽셀 관측 800~1600% 확대 + 관측 모드로 0.1px 이하 정밀도 달성
무손실 우선 현재 활성 경로(Tiled(.gopy/raw), KTX2(Lossless), RGBA)는 모두 100% 무손실
BC7 자동 폴백 (향후) 손실 BC7 경로 도입 시 100% 이상 확대 또는 관측 모드 진입 시 무손실로 자동 전환
Mip 0 강제 GCP 관측, 타이포인트 매칭은 항상 원본 해상도(Mip 0) 사용

정밀 관측 체크리스트

  1. 상태바 IMG 필드가 다음 중 하나 (모두 무손실):
  2. Tiled(.gopy/raw) — 무손실 .gopy 피라미드 (대용량 항공영상 권장)
  3. KTX2(Lossless) — 무손실 KTX2 컨테이너
  4. RGBA — WIC 직접 디코딩
  5. Tiled(.gopy/jpeg*)는 별표가 손실을 의미 — 정밀 관측 부적합
  6. Tiled(.gopy/?)는 압축 종류 미상 — 무손실 보장 없음
  7. 줌 레벨이 100% 이상
  8. 관측 모드 활성화 (툴바 [관측] 버튼)
  9. 십자선 커서 중심이 관측 대상 픽셀에 위치

관련 문서

  • 전역 설정: 뷰어 섹션에서 최대 줌, 줌 프리셋, 미니맵/툴바 위치 설정
  • MCP 명령어: 이미지 뷰어 자동 제어 API
  • 시스템 요구사항: GPU 지원 기능 확인