[DirectX] SSR(Screen Space Reflection)

김현아·2025년 9월 1일

기술면접

목록 보기
6/14
post-thumbnail

이름 그대로 화면 공간(Screen Space) 의 데이터를 활용해 반사를 계산하는 기법이다. 즉, 이번 프레임에서 이미 렌더링된 정보를 재사용하기 때문에, 반사를 위해 물체를 다시 렌더링하지 않아도 된다. 덕분에 장면이 복잡해도 성능에 큰 영향을 받지 않으며, 실시간 반사 효과를 구현하는 데 효율적이다.

SSR은 자기 자신을 포함한 반사를 처리할 수 있고, 특정 표면에 한정되지 않는다. 주로 물, 금속, 유리와 같은 반사 표면에서 시각적 효과를 강화하는 용도로 많이 쓰이며, Deferred Rendering 방식과 특히 잘 어울린다.

구현 방식

SSR을 구현하기 위해서는 화면에서 각 픽셀에 대해 다음 네 가지 정보가 필요하다

  • Screen Normal : 반사 벡터 계산용
  • Screen Color : 반사된 픽셀 색상
  • Scene Depth : 픽셀의 3D 위치 계산용
  • Reflection Mask : 반사 여부를 결정

Deferred Rendering 기법에서는 위 정보를 G-Buffer를 통해 얻을 수 있다. SSR을 라이팅 파이프라인에 통합할 때 별도의 큰 렌더링 비용은 들지 않지만, 메모리 사용과 밴드위스는 고려해야 한다.

Ray Marching

SSR의 핵심 연산은 Ray Marching이다.
광선을 반사 방향으로 일정 간격(step)으로 쏘아, 표면과의 충돌을 검사한다.
광선 길이는 사용자가 조정할 수 있으며, 너무 길면 오브젝트를 통과해 잘못된 결과를 낼 수 있다.
스텝 크기를 줄이면 정확도는 올라가지만 연산 비용이 증가한다.

SSR의 한계

SSR은 화면 공간에 의존하기 때문에 몇 가지 제약이 따른다:
뷰포트 제한 : 카메라에 보이지 않는 물체는 반사에 포함되지 않는다.
오클루전 문제 : 반사 표면이 다른 물체에 가려져 있으면 해당 부분 반사가 비어 보인다.
저해상도 아티팩트 : 화면 해상도가 낮을 경우 반사 효과가 뭉개지거나 계단 현상이 발생한다.
품질 저하 : 정확한 충돌 지점을 찾기 어렵기 때문에 반사가 부정확할 수 있다.

개선 방법

이런 문제를 보완하기 위해 SSR은 보통 다른 기법과 혼합해서 사용한다.

  • Ray Tracing과의 혼합
    레이 트레이싱은 카메라에 보이지 않는 물체까지 반사에 포함할 수 있다.
    하지만 고성능 GPU가 필요하기 때문에 SSR과 하이브리드 형태로 활용하는 경우가 많다.

  • Reflection Probes
    씬의 특정 지점에서 환경을 큐브맵 형태로 저장하는 방식.
    고정된 환경 반사는 프로브로 처리하고, 움직이는 오브젝트는 SSR로 보완하는 식으로 사용한다.

  • Temporal Reprojection
    이전 프레임의 반사 데이터를 현재 프레임에 재투영해 반사 품질을 개선하는 기술.
    뷰포트 제한, 저해상도 문제, 노이즈 등을 줄일 수 있다.
    다만 동적 오브젝트에서는 고스트 현상이 발생할 수 있어 추가 보정이 필요하다.

SSR vs Ray Tracingdhk`

  • SSR : 비교적 효율적, 하지만 화면 공간 데이터에만 의존 → 반사가 불완전할 수 있다.
  • Ray Tracing : 매우 사실적이고 정확한 반사 표현 가능, 하지만 성능 비용이 큼-
    현대 게임 엔진은 보통 SSR + Reflection Probe + (가능하다면) Ray Tracing 을 혼합해 성능과 품질을 균형 있게 맞춘다.

0개의 댓글