UDN
Search public documentation:

PostProcessAAKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 포스트 프로세스 이펙트 > 포스트 프로세스 앤티 앨리어싱 이펙트

포스트 프로세스 앤티 앨리어싱 이펙트


문서 변경내역: Martin Mittring 작성. 홍성진 번역.
PostProcessAATeaser.jpg
PostProcessAATeaser2.jpg
위 그림은 먼 거리 바위(를 더욱 잘 보이게 하기 위해 2 배 확대한 것)입니다.
왼쪽: 앨리어싱(계단현상)땜에 죽겠네요. (MSAA 없음)
오른쪽: 똑같은 이미지에 PostProcessingAA 를 적용한 것입니다.

개요


컴퓨터로 만든 이미지는 보통 계산현상(aliasing)이 심합니다. 계단현상에도 여러 종류가 있지만, 먼저 거의 수직 또는 수평선에서 보이는 계단 모양 에지(edge, 선분)를 살펴 보겠습니다. 이 문제 해결을 위한 고전적인 접근법은 수퍼 샘플링(고해상도로 렌더한 다음 다운샘플링), 멀티 샘플링(수퍼 샘플링같은 오클루전에다 픽셀별 셰이딩 추가) 정도입니다. 이러한 부분에 있어 큰 발전이 있기는 했지만, (퍼포먼스, 메모리, 복잡도 등) 여러가지 이유로 많은 게임이 앞서 말한 이미지 부작용을 안고 출하되는 실정입니다.

형태학적(Morphological) 앤티앨리어싱은 원래 인텔이 개발한 기술로(참고 부분 확인), 포스트 프로세스에서 계단 현상을 완벽히 제거할 수 있습니다. 원래는 복잡한 CPU 기반 기술이었으나, 여러 사람이 SPU 와 GPU 솔루션 작업을 해 왔습니다.

이 방법은 대부분의 콘텐츠에 매우 잘 통하지만 예외 없는 법칙은 없습니다. 그 예외라면:

  • 콘텐츠가 너무 작은 경우 (예: 와이어프레임 선)
  • 콘텐츠가 천천히 움직이는 경우 (예: 카메라를 살짝 움직이면서 계단을 바라볼 때)
  • 콘텐츠가 선이 두꺼워야(hard edge) 할 때 (예: 수작업 아트나 텍스트)

포스트프로세싱 스텝에서 문제를 해결한다면, 그 전 스텝의 복잡도를 올리지 않아 그 스텝과는 별개로 최적화할 수 있어 매력적인 면이 있습니다. 참고로 연이은 패스에서 어느 픽셀의 깊이는 어떻다 명확하게 짝지어줄 수가 없게 되니 새로운 부작용이 생길 수도 있음에 유의하십시오.

PostProcessAAOrganic.jpg
이 이미지는 대비가 강한 곳에 계단현상이 크게 눈에 띈다는 것을 확실히 보여줍니다. 그 부분을 위 방법으로 처리해 줬습니다.
그러나 이미지 전체적으로 보면 선명도가 약간 떨어집니다. 여기서 MLAA 는 트윅이 가능한 반면 FXAA 는 제어 방법이 없습니다.

활성화 방법


UberPostProcess 노드의 포스트 프로세싱 체인에서 새로 생긴 Post Process Anti Aliasing 그룹을 찾을 수 있습니다.

PostProcessAAEditor.png

타입을 Activate 로 바꾸고, 메서드(를 MLAA 나 FXAA 로,) 와 퀄리티 레벨을 바꿉니다. Threshold(임계값) 프로퍼티는 MLAA 구현에만 사용됩니다.

다른 방법으로는 게임의 PostProcessAAType 콘솔 변수를 사용해도 됩니다:

  포스트 프로세스 앤티 앨리어싱 타입을 덮어쓸 수 있도록 해 줍니다.
   <0: 포스트 프로세스 세팅 사용 (디폴트: -1)
    0: 끔
  1-6: FXAA 프리셋 0:낮은 퀄리티 .. 5:퀄리티는 매우 높지만 느림 (1 패스)
    7: MLAA (추가 렌더 타겟 (.ini 에서 bAllowPostprocessMLAA=True 도) 필요, 3 패스)
  

추가 메모리가 필요한 MLAA 는 명시적으로 켜 줘야 합니다. (BaseEngine.ini 등에서) ini 세팅을 바꿔 활성화시켜 줘야 하는데, 다음 부분을:

     bAllowPostprocessMLAA = False
  

이렇게 바꿉니다:

     bAllowPostprocessMLAA = True
  

ALERT! 주: 이 ini 세팅은 콘솔 명령으로 실행시간에 바꿀 수도 있는데, 다음과 같습니다:

     scale toggle bAllowPostprocessMLAA
  

구현 세부사항


NVIDIA 의 FXAA 라는 MLAA 구현과, AMD 의 MLAA 를 저희 위버 포스트프로세스 이펙트에 통합시켰습니다 (참고 부분 확인). 그들의 노고 덕에 이 기능을 언리얼 엔진 3 사용자분들께 선보일 수 있었습니다. 둘 다 GPU 솔루션이며 결과도 매우 좋습니다만, 구현 세부사항에서 약간의 차이가 납니다:

(NVIDIA 의) FXAA:

  • 1 패스
  • 이방성(anisotropic) 텍스처 룩업 필요

(AMD 의) MLAA:

  • 3 패스
  • 각기 다른 퍼포먼스/퀄리티 여러 레벨
  • 중간 렌더 타겟 메모리 추가 필요 (최적화 가능)
  • 내부 디테일에 블러링 살짝 덜함
  • 45 도 에지가 더 넓어 보임

입력 콘텐츠에 따라 최종적인 모습에 큰 영향을 끼치니, 두 방법 다 각기 다른 프리셋으로 콘텐츠를 돌려 보실 것을 추천합니다.

현재 MLAA 는 메모리가 추가로 드니 콘솔에서는 쓰지 마시기 바랍니다. 셰이더가 다른 렌더 타겟과 메모리를 공유하도록 변경할 수는 있지만, 아직 적용되지 않은 상태입니다. MLAA 와 FXAA 는 GPU 비용이 높은 기능이니, 감당할 수 있는 플랫폼에서만 사용하시기 바랍니다. 이 이펙트 사용을 고려중이시라면, 해당 플랫폼에 대한 셰이더를 로우 레벨 최적화하는 데 시간을 조금 들일 각오를 하셔야 할 것입니다.

지원 플랫폼


  • FXAA: DX9, DX11, Xbox360, PlayStation3
  • MLAA: DX9, DX11 (Xbox360, PlayStation3 는 불확실)

참고


감사합니다.


  • MLAA 를 개발해 준 Intel.
  • GPU MLAA 를 구현해 준 AMD CAS 팀.
  • FXAA 를 구현해 준 NVIDIA.