HmEG → WebGPU 포팅 가능성 분석
작성일: 2026-04-10
배경: HmEG(Helix Toolkit 변형, SharpDX, Compute Shader 집약) 엔진을 웹 브라우저에 이식하는 방안 검토
1. WPF 3D 엔진을 웹에 탑재하는 방법
WPF는 Windows 전용 스택(Win32 HWND, DirectX COM, WPF 렌더링 루프)이므로 브라우저에 직접 탑재는 불가능하다.
현실적 대안
| 방법 |
난이도 |
설명 |
| WebAssembly 포팅 |
매우 높음 |
렌더링 코어를 C++/Rust로 재작성 → WASM + WebGL/WebGPU 컴파일 |
| 서버 스트리밍 |
중간 |
서버에서 앱 실행 → WebRTC/H.264로 스트리밍 → 브라우저는 뷰어만 |
| 씬 데이터 REST API |
낮음 |
엔진 상태를 HTTP로 노출 → three.js/Babylon.js로 독립 렌더링 |
| Blazor Hybrid |
중간 |
WPF + WebView2 조합 (역방향, 앱 안에 웹 UI) |
2. WebGPU 선택 시 가능한 것들
WebGL2 대비 WebGPU의 핵심 추가 기능
| 기능 |
WebGL2 |
WebGPU |
| Compute Shader |
❌ |
✅ @compute |
| Indirect Draw |
❌ |
✅ drawIndirect |
| Storage Buffer (SSBO) |
제한적 |
✅ 완전 지원 |
| Multi-draw Indirect |
❌ |
✅ (extension) |
| Timestamp Query |
❌ |
✅ |
| Wave Intrinsics |
❌ |
⚠️ subgroups extension, 불안정 |
브라우저 지원 현황 (2026-04 기준)
| 브라우저 |
지원 |
| Chrome 113+ |
✅ 기본 활성화 |
| Edge 113+ |
✅ 기본 활성화 |
| Firefox |
⚠️ Nightly 실험적 |
| Safari |
⚠️ 기술 프리뷰 |
엔터프라이즈 내부 도구라면 Chrome/Edge 고정으로 충분히 현실적이다.
3. HmEG 스택 분석 (SharpDX + Helix Toolkit 변형)
핵심 문제: SharpDX는 DirectX 11 COM API의 thin wrapper — WASM에서 DirectX COM을 호출할 방법이 없다.
C# → WASM 경로 (Blazor WebAssembly)
| 컴포넌트 |
Blazor WASM 이식성 |
| 비즈니스 로직 C# |
✅ 거의 그대로 |
| SharpDX 렌더링 |
❌ DirectX COM 불가 |
| WPF UI 계층 |
❌ 완전 교체 필요 |
| HLSL Compute Shader |
⚠️ WGSL 재작성 필요 |
4. HLSL → WGSL 셰이더 변환
변환 파이프라인
- naga (Rust, wgpu 프로젝트) — 가장 성숙한 변환 도구
- Tint (Google) — WGSL 레퍼런스 컴파일러
Compute Shader 1:1 대응 예시
구조는 1:1 대응된다. 알고리즘 재설계가 아니라 문법 변환이다.
주요 변환 난관
SV_Position vs gl_Position — 좌표계 Y축 반전 필요
cbuffer → uniform block 구조 재정렬
groupshared, numthreads Compute 확장 — WGSL에서 직접 지원
- 행렬 규약 차이 (row-major vs column-major) — 암묵적 가정 수동 확인 필요
5. AI를 통한 코드 포팅 가능성
컴포넌트별 AI 포팅률
| 컴포넌트 |
AI 포팅률 |
이유 |
| HLSL Compute → WGSL |
90%+ |
1:1 구조 매핑, 패턴 명확 |
| HLSL Vertex/Pixel → WGSL |
95%+ |
가장 단순한 변환 |
| SharpDX API → WebGPU (TS/Rust) |
85% |
API 문서 명확, 대응표 존재 |
| 씬 그래프 / 지오메트리 C# → TS/Rust |
75% |
로직 자체는 언어 무관 |
| 렌더링 루프 / 파이프라인 재구성 |
60% |
아키텍처 판단 필요 |
| 최적화 로직 (배치, 컬링 등) |
50% |
알고리즘은 번역, GPU 특성 차이 보정은 수동 |
주의: 최적화 로직 50%는 "절반만 작동한다"는 뜻이 아니다.
알고리즘 코드는 AI가 번역하고, GPU 튜닝 파라미터(워크그룹 크기 등)를 WebGPU 환경에서 재측정하는 작업이 수동이다.
최적화 알고리즘 자체는 100% 이식된다.
실제 포팅 흐름
전체 공수 추정 (50,000줄 규모 가정)
| 작업 |
비율 |
| AI 자동 변환 가능 |
~60-70% |
| AI 초안 + 인간 검토 |
~20% |
| 인간이 처음부터 재작성 |
~10-20% |
6. 나나이트 유사 기능 WebGPU 구현 가능성
나나이트 핵심 기능별 WebGPU 가능 여부
| 나나이트 기능 |
WebGPU |
비고 |
| 클러스터 기반 BVH |
✅ |
Storage Buffer로 구현 |
| GPU-side LOD 선택 |
✅ |
Compute Shader로 완전 구현 |
| Indirect Draw |
✅ |
drawIndirect 지원 |
| 소프트웨어 래스터라이저 |
⚠️ |
Storage Texture 쓰기로 구현 가능, 성능 제한 |
| Mesh Shader |
❌ |
WebGPU 미지원 (2026 현재) |
| Wave Intrinsics |
⚠️ |
subgroups extension, 불안정 |
| Visibility Buffer |
✅ |
완전 구현 가능 |
Mesh Shader 없이: Compute + Indirect Draw 조합으로 알고리즘 동일, GPU 효율 15~30% 낮음.
BIM 모델러 용도: 수백만 폴리곤 건축 모델 실시간 가시화 수준은 WebGPU + 나나이트 유사 구현으로 충분히 가능.
7. DirectX 12 기능 → WebGPU 전체 대응표
렌더링 파이프라인
| DX12 기능 |
WebGPU |
상태 |
| Command List / Queue |
GPUCommandEncoder |
✅ |
| Render Pass |
beginRenderPass |
✅ |
| Descriptor Heap |
Bind Group Layout |
✅ |
| Root Signature |
Pipeline Layout |
✅ |
| PSO |
createRenderPipeline |
✅ |
| Multi-queue (Graphics/Compute/Copy) |
단일 queue |
⚠️ |
| Swap Chain 직접 제어 |
브라우저 관리 |
❌ |
셰이더 / 연산
| DX12 기능 |
WebGPU |
상태 |
| Compute Shader |
@compute |
✅ |
| Mesh Shader |
— |
❌ |
| Amplification Shader |
— |
❌ |
| Ray Tracing (DXR) |
— |
❌ |
| Wave Intrinsics |
subgroups extension |
⚠️ |
메모리 / 리소스
| DX12 기능 |
WebGPU |
상태 |
| Explicit Memory Management |
— |
❌ 브라우저 관리 |
| Placed Resources |
— |
❌ |
| Resource Aliasing |
— |
❌ |
| Tiled/Sparse Resources |
— |
❌ |
| Resource Barriers |
암묵적 자동 처리 |
⚠️ |
고급 렌더링
| DX12 기능 |
WebGPU |
상태 |
| Variable Rate Shading |
— |
❌ |
| Conservative Rasterization |
— |
❌ |
| DirectML |
WebNN (별도 표준) |
⚠️ |
| FSR (upscaling) |
Compute로 구현 가능 |
⚠️ |
| Indirect Draw/Dispatch |
drawIndirect |
✅ |
| Timestamp Query |
✅ (약간 흐릿) |
✅ |
커버리지 요약
WebGPU ≈ DirectX 11.1 ~ 12 하위집합
BIM 모델러 관점 실질 영향
| 기능 |
BIM 필요도 |
WebGPU 대안 |
| Ray Tracing |
선택적 |
Screen Space 기법 |
| Mesh Shader |
나나이트 성능 |
Compute + Indirect 80% |
| Sparse Resources |
초대형 텍스처 스트리밍 |
수동 Texture Atlas |
| Multi-queue |
백그라운드 로딩 |
Web Worker + Staging Buffer |
8. 권장 포팅 아키텍처
또는 C++ 기반으로 재타깃:
결론
- 단순 이식 불가: WPF/SharpDX는 Windows 네이티브 스택, 브라우저 직접 탑재 불가
- WebGPU는 현실적 선택: Compute Shader 집약적인 HmEG와 잘 맞음, DX11.1 수준 기능 커버
- AI 포팅 효과: 셰이더·API 변환 60~70% 자동화 가능, 성능 튜닝은 수동
- 나나이트 유사: 알고리즘 80% 구현 가능, Mesh Shader 부재로 완전 동일 성능은 어려움
- BIM 용도: 충분히 현실적, 건축 모델 수백만 폴리곤 실시간 가시화 가능