[그래픽스] Reflection

윤태웅·2022년 8월 26일
0

그래픽스

목록 보기
11/13
post-thumbnail

개요

게임에서 쓰이는 Reflection기술들에 대해 정리한다.

Reflection

현대 게임에서 Reflection은 매우 중요한 시각적 효과이다.

(It Takes Two의 거울 반사)

(어쌔신 크리드 발할라의 물표면 반사)

이러한 Reflection효과들은 다양한 기술들로 구현될 수 있다.

Planar Reflection

먼저 가장 오래된 기법인 Planar Reflection을 알아보겠다.
이 기법은 단순하다. 반사효과를 적용하지 않은 부분을 한번 렌더링한 후에 반사상 데이터를 이용해 반사효과가 적용되는 부위를 다시 한번 렌더링하는 것이다.

아주 간단하지만 성능을 아주 잡아먹는다. 그 이유는 전체 씬의 Draw콜이 반사되는 Object에 비례해서 증가하게 된다는 것이다. 언리얼엔진에서도 이 기능을 지원하지만 한 화면에 1개의 Object도 성능상 이슈가 있을수 있음을 경고하고 있다. 또한 이중 반사효과(거울에 비치는 거울)는 구현하지 못한다. 그 이유는 거울을 반사상에 렌더링할때는 거울의 Geometry정보만 알고있을뿐 거울에 반사된 데이터는 없기 때문이다.
언리얼 Planar Reflection문서

Planar Reflection
장점: Ray tracing을 배제했을시 최대 퀄리티
단점: Draw Call 횟수의 배수증가로 인한 성능저하+ 평면만 반사가능

Cube Map Reflection

Cube Map은 6개의 평면으로 구성된 Texture를 의미한다. 이 Cube Map을 이용해서 그럴싸한 반사효과를 구현할 수 있다. 원리는 다음과 같다.

  1. 게임 빌드시 반사될 Object마다 주변 환경을 CubeMap 텍스처에 저장
  2. 반사될 Object를 플레이어 Camera시점에서 렌더링할 시 CubeMap의 데이터를 이용해서 반사상 Sampling


위 사진은 Detroit Become Human의 캐릭터의 눈 부분이다.
눈에 주변 환경이 Highlighting되어 보이는 효과 또한 CubeMap으로 구현된다.

Cube Map Reflection
장점: 빌드타임에 CubeMap 연산을 하고 런타임에는 CubeMap을 이용만 하면 되기 때문에 성능부하가 적다.
단점: 움직이지 않는 사전에 정의된 환경만 반사시킬수 있다(즉, 플레이어는 반사 불가능). 넓은 영역에 적용하게 되면 Reflection왜곡이 생긴다(플레이어가 이동하면 반사상도 같이 이동).

Screen Space Reflection

Screen Space Reflection은 Defered Shading을 통한 Screen Space기법 중 하나이다.
Screen Space연산이기 때문에 World Space연산인 Planar Reflection보다 훨씬 성능부하가 적다.

동작원리는 다음과 같다.

  1. GBuffer에 Depth,Normal,Color값을 저장
  2. SSR(Screen Space Reflection)을 적용시킬 Pixel에서는 추가 Ray Marching연산(Ray를 특정 방향으로 일정 스텝마다 정의해서 충돌지점을 판단하는 연산)
  3. Ray Marching결과 얻어낸 반사 Color를 Shading에 적용

Screen Space Reflection
장점: 연산 Cost가 제일 적은 반사기법
단점: Screen Space에서의 Ray Marching연산은 정확한 충돌지점을 판단할 수 없기에 퀄리티저하(충돌 감지 구간을 줄임으로써 어느정도 해결은 가능), Screen Space연산이기 때문에 Screen Space에서 벗어난 Object는 반사처리 해줄수 없음

Ray Tracing Reflection

Reflection의 끝판왕 기법이다. 구현은 간단하다. 충돌지점에서 반사벡터를 구하고 반사벡터와 충돌한 지점에서의 Color를 얻어내서 Shading처리하면 된다. Recursion을 적용해서 충돌한 지점의 Color또한 추가 반사벡터를 Tracing해서 얻어낼 수 있다.
물리적으로 가장 완성도높은 반사다.
문제는 연산Cost가 너무 높아서 현대 게임에서 제대로 쓰지 못하고 있다.

장점: 여러번의 중첩반사도 자연스럽게 렌더링하는 좋은 퀄리티
단점: 연산복잡도

Reference

언리얼 Ray tracing문서
언리얼 Reflection문서
RayMarching설명 PPT

0개의 댓글