All work

01 / RENDERING SYSTEMS

Renderer

여러 플랫폼에서 공통으로 사용할 2D 벡터 렌더러를 설계하고 구현했습니다.

ROLE
신규 렌더러 설계·구현
STACK
Rust · wgpu · WGSL · WASM

PROTOPIE / STUDIO XID

Cross-platform Rendering

ProtoPie의 DOM·네이티브 뷰 기반 렌더링을 공통 GPU 엔진으로 옮기는 작업을 맡았습니다. Rust·wgpu 기반 2D 벡터 렌더러의 구조와 주요 렌더링 경로를 설계하고 구현했습니다.

DECISION 01 / CONSISTENCY

Geometry Consistency

스트로크의 두께나 정렬을 각 단계에서 따로 해석하면 계산한 영역과 실제 렌더링 결과가 달라질 수 있습니다. 스트로크를 한 번 해석한 뒤 그 결과를 여러 단계에서 재사용하도록 설계했습니다.

STROKE INPUTShared planone interpretationBoundslayout extentsPaintappearanceGeometryshape datawidth · align · paint
스트로크 해석 결과를 bounds·paint·geometry에서 공유하는 개념도.

지오메트리를 다시 만들어야 하는 변경과 색상 등 속성만 바꾸면 되는 변경을 구분했습니다. 색상이 바뀔 때마다 같은 도형을 다시 계산하지 않도록 했습니다.

DECISION 02 / RENDER GRAPH

Render Graph

블러나 합성에는 이전 렌더 패스의 출력이 필요합니다. Render graph에서 패스 간 의존성과 실행 순서를 정하고, 중간 결과를 담는 임시 텍스처의 사용 구간을 관리했습니다.

scenepass Apass Bpass Cpass DsubmitDEPENDENCIEStemporary texture lifetime
렌더 패스의 의존 관계와 임시 텍스처의 사용 구간을 설명하는 개념도.

실행 계획을 세우는 과정과 GPU command encoding을 분리했습니다. 그래프를 구성하는 코드와 백엔드 코드를 각각 수정할 수 있도록 했습니다.

DECISION 03 / RECOVERY

Error Recovery

재시도로 복구할 수 있는 오류

일시적인 오류는 다음 프레임에서 재시도합니다. 렌더 타깃이 바뀐 경우에는 재설정한 뒤 렌더링합니다.

입력을 수정해야 하는 오류

같은 입력으로 반복해서 실패하면 재시도를 멈추고, 입력이 바뀌었을 때 다시 처리합니다.

NEXT PROJECTInteractive 3D