ANTI – ALIASING ( AA ) 기법
       2012년 3월 31일
            카제키리 ( 이진우)
차례
•   AA란?
•   AA의 종류
•   앨리어싱이 생기는 이유
•   SSAA
•   MSAA
•   CSAA
•   MLAA
•   DLAA
•   DEAA
•   GBAA
•   SRAA
•   FXAA
•   SMAA
•   TXAA
•   결론
AA란?
•   다각형을 픽셀로 표현하고자 할때 픽셀의 크기때문에 생기는 계단현상( 앨리
    어싱 )을 처리 하는 방법
•   오브젝트의 윤곽선 부근에 발생하는 톱니 모양의 들쭉날쭉한 모양을 희미하
    게 해서 보이지 않게 하는 처리
•   AA처리를 얼마나 저렴한 비용으로 할수 있는가 독립적으로 사용할 수 있는가
    가 관건
AA의 종류
•   FXAA(Fast Approximate AA)
•   QAA (Quincunx AA)
•   EQAA (Enhanced Quality AA)
•   MSAA (Multi-Sampling AA)
•   MLAA (Morphological AA)
•   DLAA (Directionally Localized Anti-Aliasing
•   TXAA (Temporal Approximate(?) AA)
•   SMAA(Enhanced Subpixel Morphological AA)
•   SPUAA(The Saboteur Anti-Aliasing)
•   SRAA(Subpixel Reconstruction Antialiasing)
•   DEAA(Distance-to-Edge AA)
•   GBAA(Geometry Buffer AA)
•   SSAA(SuperSampling AA)
•   CSAA(Coverage Sampling AA)
•   HRAA(High Resolution AA)
•   SMAA(Enhanced Subpixel Morphological Antialiasing)
앨리어싱이 왜 생기는가?
앨리어싱은 왜 생기나요?
앨리어싱은 왜 생기나요?
SSAA
SSAA
•   SuperSampling AA = FSAA(Full-Scene AA)
•   모든 픽셀에 대하여 픽셀당 한 개 이상의 샘플을 추출하는 방식
•   표시하는 해상도 보다도 고해상도로 렌더링 한 뒤, 원래 해상도로 축소해서 사
    용하는 방식
•   차이를 모를 수도 있으나 나름.. 계단현상이 대폭 사라지게 됨
•
SSAA 의 종류




Grid Algorithm   Random   Poisson Disc   Jitter   Rotated Grid



   Jitter : Poisson Disc에 가까운 그리드 알고리즘의 수정판
SSAA
•   픽셀당 모두 수행하므로 부하가 매우 큼 ½ ~ 최고 ¼
•   메모리 대역폭을 많이 잡아먹음
                                              메모리 대
•   퀄리티는 대신 최고… 보통 SSAA나 MSAA로 퀄리티 비교를 많이 함
                                               역폭
                                               따위…
MSAA
MSAA
•   Multi-Sampling Anti-Aliasing
•   Super-Sampling을 효율과 성능면에서 최적화 한것(Partial Super- Sampling)
•   도형과 겹치는 픽셀칸에서 가운데 한점 뿐이 아니라 한칸당 한개 이상의 지점
    에서 정보를 수집한다는 의미
•   가장 보편적인 AA 방법
•   문제는 멀티 샘플링시 필요한 프레임버퍼의 정보크기가 2배로 됨
    ( 디퍼드 와 같이 쓰기에 매우 무거움)
•   대역폭을 많이 잡아먹음. 더 많은 GPU 리소스 필요
MSAA VS SSAA
멀티 샘플링 -1 (2x MSAA)
멀티 샘플링 -2 (2x MSAA)
2x 4x 8x 멀티 샘플링
멀티 샘플링 체크
MSAA.. 퀄리티는 괜찮지만
•   CPU 기반
•   역시나 부하가 큼
•   이미지에 대해 상관없이 그냥 여러 번 샘플링 함
•   AA 기준의 척도가 됨
•   현재 나오는 AA는 MSAA x N 만큼 성능이 좋으며 이정도 속도를 내며 메모리도
    적게 먹는다로 말함
Deferred – MSAA ?
•   디퍼드 렌더링의 고질적 문제 ( AA )
•   하드웨어의 가속 을 간접적으로 받게 하여 MSAA를 손쉽게 구현할 수 있음
•   http://mynameismjp.wordpress.com/2010/08/16/deferred-msaa/
Deferred – MSAA ?
•   #1. 4xMSAA를 켜고 씬의 모든 도형을 Z- Prepass에서 렌더
    #2. MSAA를 끄고 정상적으로 HDR 랜더 타겟에 렌더
    #3. 톤 매핑 및 기타 후처리를 적용
    #4. "Deferred AA"를 적용 : #1에서 만들어진 MSAA Depth-버퍼를 샘플링하여 픽
    셀 범위를 계산하고 범위를 기반으로 필터
CSAA
CSAA
•   Coverage Sampling AA
•   범위 형태의 샘플링
•   MSAA와 방식은 거의 유사
•   GeForce 8000시리즈부터 지원 (NVIDIA만 지원)
•   MSAA와 비슷한 성능으로 적은 메모리 소비
•   (4xMSAA ≒ 4 Sample Count(8x 16x CSAA)
Implementation- Dx9
•   #1 NVIDIA 그래픽 카드인지 체크
•   #2 CheckDeviceMultisampleType()로 Qulity Level 체크
•   Sample Count >4 && Qulity Level >4 이면 CSAA 지원 가능
Implementation- Dx10
•   #1 NVIDIA 그래픽 카드인지 체크
•   #2 CheckMultisampleQualityLevels()로 Sample Count 와 Qulity Level 체크
•   Sample Count >4 이고
•   Qulity Level >8 이면 8x CSAA Qulity Level > 16 16x CSAA
CSAA
MLAA
MLAA
•   MorphoLogical Anti-Aliasing
•   이미지 베이스 AA
•   NO AA 에 포스트 프로세스(후처리)방식
•   SPU/GPU 친화적(PS3에 적합)
•   스크린 스페이스 필터 ( 화면분석)
•   메쉬의 패턴(계단패턴)을 파악한 다음 중간색을 넣어 완화
•   메모리 절약( 2x MSAA 의 절반 정도)
•   대역폭 절약(광원효과등을 추가로 처리 가능)
•   Fill rate 절약(반투명 효과처리가능한 리소스 증가)
•   PC의 경우 라데온만 지원
MLAA
MLAA 알고리즘
•   엣지 (픽셀을 가로지르는 선)
•   L, U, Z 패턴으로 인식
•   가중치 계산
•   컬러 합성
MLAA




       Pattern Detection   Edge Detection
MLAA 장 단점
•   PC에서는 비슷한 퀄리티로 MSAA보다 빠름
•   콘솔의 경우 MSAA는 하드웨어 제약으로 샘플 카운트가 제한되 있기에 MLAA
    가 보다 나은 퀄리티를 보장
•   이미지 베이스 기반이기에 CELL이나 SPE에서 사용하기 좋음 (화면 해석)
•   디퍼드 렌더링엔진에서 특히 사용하기 편한 MRT와 같이 사용 가능
•   톤 매핑 후 수행되는 안티앨리어싱이기에 HDR 사용할때 퀄리티가 증가
•   MSAA와 호환되지 않음
•   서브 픽셀 문제 (후처리 이므로…)
DLAA
DLAA
•   Directionally Localized Anti-Aliasing
•   프레넬 공식 기반
•   MLAA와의 퀄리티 차이가 거의 없음 속도가 빠름
•   모션 블러 등이 걸렸을때에 효과는 MLAA보다 우수함
DLAA
   Blur Vertically
   Find Vertical Edges
   Build Edge Mask

         saturate( abs( x ) · a – b )
   Blend With Original Layer
   Same Horizontally
DLAA
•   "Xbox 360             : 2.2 +/- 0.2ms @ 1280x720
•   "PlayStation3 (5 SPUs) : 1.6 +/- 0.3ms @ 1280x720“
•   “MLAA ( 5 SPUs)       : 4ms
DLAA 영상
DEAA
DEAA
•   Distance-to-Edge AA
•   후처리 방식
•   픽셀 셰이더에서 엣지까지의 거리를 계산 하는 방식
•   (Edge Vertices 들이 0이 되는 텍스처 좌표의 ddx,ddy를 사용, 포워드 픽셀 셰이더
    에서 엣지까지의 거리를 계산)
•   추가 공간이 필요
•   주어진 삼각형으로 픽셀 셰이더에서 엣지까지의 거리를 계산
•   distance_x = -v/ddx (V); distance_y = -v/ddy (V)
•   DEAA버퍼를 Alpha-to-Coverage에 시뮬레이션하는데도 사용 가능
DEAA
DEAA 단점
언더 샘플링 문제
•   Triangles thinner than a pixel
•   서브픽셀의 Gap 등


엣지 정보가 없는 애들
•   Interpenetrating geometry
•   그림자 엣지
•   텍스처 앨리어싱
GBAA
GBAA
•   Geometry Buffer Anti-Aliasing
•   게임엔진이 Edge가 어디에 있는지 아는 것을 활용
•   DEAA와 비슷한 개념
•   Main-Pass 렌더 타겟에 저장되어 있는 지오메트리 정보를 사용
•   고정 비용으로 사용 가능
GBAA
float2 offset = GeometryBuffer.Sample(Point, In.TexCoord).xy;



// Check if edge intersects pixel, otherwise search neighborhood

[flatten] if (max(abs(offset.x), abs(offset.y)) > 0.5f) {

    offset = 0.0f;

    float2 offset0 = GeometryBuffer.Sample(Point, In.TexCoord, int2(-1,    0)).xy;

    float2 offset1 = GeometryBuffer.Sample(Point, In.TexCoord, int2( 1,    0)).xy;

    float2 offset2 = GeometryBuffer.Sample(Point, In.TexCoord, int2( 0, -1)).xy;

    float2 offset3 = GeometryBuffer.Sample(Point, In.TexCoord, int2( 0,    1)).xy;

    if (abs(offset0.x - 0.75f) < 0.25f) offset = offset0.xy + float2(-1,    0);

    if (abs(offset1.x + 0.75f) < 0.25f) offset = offset1.xy + float2( 1,    0);

    if (abs(offset2.y - 0.75f) < 0.25f) offset = offset2.xy + float2( 0, -1);

    if (abs(offset3.y + 0.75f) < 0.25f) offset = offset3.xy + float2( 0,    1);

}



float2 off = (offset >= float2(0, 0))? float2(0.5f, 0.5f) : float2(-0.5f, -0.5f);

offset = offset? off - offset : offset;



// Blend pixel with neighbor pixel using texture filtering and shifting the coordinate appropriately .

return BackBuffer.Sample(Linear, In.TexCoord + offset.xy * PixelSize);
GBAA
       No AA                         GBAA




               GPU: Radeon HD 5870
GBAA
•   Geometry Shader를 사용하므로 DX10이상 지원, 콘솔에서는 불가..
•   Internal Edge는 하지 않음.
•   픽셀당 다중 엣지 검출 문제..
SRAA
SRAA
•   Subpixel Reconstruction Anti-Aliasing
•   디퍼드 렌더링 타겟으로 만들어짐
•   MSAA의 깊이버퍼 필요(Deferred-MSAA와 거의 유사)
•   R8 ID Buffer 사용 (Depth + Normal Compression)
•   빌보드에 대한 알파 블렌딩을 유지
•   GeForce 560 해상도 1080p에서 1ms
•   SSAA, MSAA, CSAA 와 호환가능
    (주로 조합 형태로 사용)
SRAA
•   G 버퍼에 노멀과 Z 값을 저장
•   MSAA를 켜고 씬을 렌더링
•   MSAA를 끄고 G-버퍼를 가지고 라이트 버퍼 렌더링
•   Light – Pre Pass에서 최종 버퍼 렌더링
•   후처리 적용
•   가중치 계산후 컬러 합성




                               노멀과 Z 사용
SRAA

•   No AA   16x SSAA   SRAA




•   SRAA
SRAA

•   No AA   16x SSAA   SRAA




•   SRAA
SRAA

•   No AA   16x SSAA   SRAA




•   SRAA
SRAA 와 Deferred - MSAA
- Deferred-MSAA
•   G-버퍼 만을 MSAA로 렌더링 후 다음은 평범하게 렌더링
•   마지막으로 후처리로 엣지를 뭉개는 방식을 사용
- SRAA
•   엣지를 박스필터등으로 뭉갬(논문에서는 바이리터럴 필터를 사용)
•   이때 가중치는 거리가 아닌 엣지의 강도(Z값이나 법선의방향)에 의해 산출
FXAA
FXAA
•   Fast Approximate Anti-Aliasing
•   NVIDA에서 출시 (계속 업데이트 시켜주심)
•   후처리 이므로 독립적임(엔진에 독립적임)
•   DX9,10,11 다 지원 그래픽카드 안가림
•   초딩도 5분이면 적용 (매우 간단)
•   소스코드 http://timothylottes.blogspot.com/2011/07/nvidia-fxaa-39-released.html
•   현재 3.11 까지 배포 – 4.0 배포 예정
FXAA




       NO AA
       4x MSAA
       FXAA
FXAA의 연산과정
•   Shader Define으로 확인 가능
•   FXAA_DEBUG_PASSTHROUG (edge Detection)
•   FXAA_DEBUG_HORZVERT ( Divide Horz, Vert)
•   FXAA_DEBUG_PAIR(High Contrast)
•   FXAA_DEBUG_NEGPOS (Checking Edge Dir)
•   FXAA_DEBUG_OFFSET (Subpixel.. Reduce Aliasing Process)
•   Resample
•   Color blending
구현이 쉽다? -1
•   파일을 하나 만들어서 인클루드 한다


•   (매번 업데이트 되므로 이방법이 나음)
구현이 쉽다? -2
•   #define 세팅


•   DX10, 11일 경우
•   HLSL4나 5도 가능
구현이 쉽다? -3
•   함수 호출
구현이 쉽다? -4
•   텍스처 처리
•   저 숫자의 의미는?




•   마지막으로 감마 코렉션만 해주면 됨
•   (RGB는 리니어한 공간, Luminance가 저장된 곳은 감마 공간에 있어야 하므로)
FAST니까… -1
FAST 니까…-2
SMAA
SMAA
•   Enhanced Subpixel Morphological Antialiasing
•   Eurographics 2012에서 Jorge Jimenez, Jose I. Echevarria, Tiago Sousa, Diego Gutierrez
•   SMAA: Enhanced Subpixel Morphological Antialiasing이라는 논문으로 발표
•   보케현상이 심하거나 각도에 따라 지글거리는 FXAA의 단점을 보완
•   FXAA 만큼의 속도를 자랑
SMAA와 다른 AA와의 비교
각 샘플링에 따른 비교
SMAA
•   관계없는 HUD 주변까지 같이 AA가 걸리게 되어
•   Steam 오버레이나 FRAPS등의 툴이 제대로 동작하지 않게 된다.
•   SMAA도 FXAA와 같이 소스코드가 릴리즈 되어있기 때문에, 셰이더를 붙이기
    만 하면 사용 가능하다.
TXAA
TXAA
•   Temporal Approximate Anti- Aliasing
•   GDC 2012 – NVIDIA에서 발표
•   DirectX 11.0 부터 지원
•   GTX 400/500/600 계열만 지원 ( ATI 안됨)- 즉 범용성 적음
•   고해상도의 Z 버퍼를 샘플링 함
•   과거 프레임에 대해서도 샘플 픽셀 단위의 엣지 정보를 샘플링하므로 시간적
    인(Temporal) 안티 앨리어싱이라 부름
•   아직 정확한 알고리즘 내부는 비공개
TXAA
•   TXAA1 과 TXAA2를 공개
•   TXAA1 (2xMSAA 비용 = 8xMSAA 효과)
•   TXAA2 (4xMSAA 비용 = 8xMSAA 이상의 효과)
TXAA와 MSAA 비교
TXAA
TXAA
TXAA
TXAA 와 SMAA
•   Temporal Rejection ( 과거 프레임의 Z 버퍼를 참조하는 일) 수행
•   서브 픽셀 단위의 엣지 정보를 분석
•   GDC2012에서 크라이텍이 소개한 SMAA와 비슷하다고 생각 됨
                                              난 그렇다
                                              고 생각함
그 밖에..
•   QAA
•   TAA
•   NFAA
•   SPUAA
•   HRAA
•   EQAA
결론
•   그 외에 다양한 AA 처리 기법이 있으며 현재도 계속 연구 중에 있다
•   저마다 장 단점이 있으며 완전하다고 말 할 수 없다
•   (자신의 게임에 최대한의 결과를 낼 수 있는 AA처리를 찾는 것이 중요)
•   현재로써는 TXAA , SMAA는 눈 여겨 볼만한 AA
Q&A
Reference
•   http://blog.daum.net/sj_fly/11
•   http://iryoku.com/aacourse/
•   http://developer.nvidia.com/csaa-coverage-sampling-antialiasing
•   http://d.hatena.ne.jp/yakiimo02/20110401/1301665383
•   http://zzinga.egloos.com
•   http://timothylottes.blogspot.com/2011/07/nvidia-fxaa-39-released.html
•   http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
•   http://www.gamedevforever.com/46 게임개발 포에버
•   니시카와 젠지의 3D 게임 팬을 위한 그래픽스 강좌
•   그 외-..- 조낸 구글링

Anti aliasing

  • 1.
    ANTI – ALIASING( AA ) 기법 2012년 3월 31일 카제키리 ( 이진우)
  • 2.
    차례 • AA란? • AA의 종류 • 앨리어싱이 생기는 이유 • SSAA • MSAA • CSAA • MLAA • DLAA • DEAA • GBAA • SRAA • FXAA • SMAA • TXAA • 결론
  • 4.
    AA란? • 다각형을 픽셀로 표현하고자 할때 픽셀의 크기때문에 생기는 계단현상( 앨리 어싱 )을 처리 하는 방법 • 오브젝트의 윤곽선 부근에 발생하는 톱니 모양의 들쭉날쭉한 모양을 희미하 게 해서 보이지 않게 하는 처리 • AA처리를 얼마나 저렴한 비용으로 할수 있는가 독립적으로 사용할 수 있는가 가 관건
  • 5.
    AA의 종류 • FXAA(Fast Approximate AA) • QAA (Quincunx AA) • EQAA (Enhanced Quality AA) • MSAA (Multi-Sampling AA) • MLAA (Morphological AA) • DLAA (Directionally Localized Anti-Aliasing • TXAA (Temporal Approximate(?) AA) • SMAA(Enhanced Subpixel Morphological AA) • SPUAA(The Saboteur Anti-Aliasing) • SRAA(Subpixel Reconstruction Antialiasing) • DEAA(Distance-to-Edge AA) • GBAA(Geometry Buffer AA) • SSAA(SuperSampling AA) • CSAA(Coverage Sampling AA) • HRAA(High Resolution AA) • SMAA(Enhanced Subpixel Morphological Antialiasing)
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
    SSAA • SuperSampling AA = FSAA(Full-Scene AA) • 모든 픽셀에 대하여 픽셀당 한 개 이상의 샘플을 추출하는 방식 • 표시하는 해상도 보다도 고해상도로 렌더링 한 뒤, 원래 해상도로 축소해서 사 용하는 방식 • 차이를 모를 수도 있으나 나름.. 계단현상이 대폭 사라지게 됨 •
  • 11.
    SSAA 의 종류 GridAlgorithm Random Poisson Disc Jitter Rotated Grid Jitter : Poisson Disc에 가까운 그리드 알고리즘의 수정판
  • 12.
    SSAA • 픽셀당 모두 수행하므로 부하가 매우 큼 ½ ~ 최고 ¼ • 메모리 대역폭을 많이 잡아먹음 메모리 대 • 퀄리티는 대신 최고… 보통 SSAA나 MSAA로 퀄리티 비교를 많이 함 역폭 따위…
  • 13.
  • 14.
    MSAA • Multi-Sampling Anti-Aliasing • Super-Sampling을 효율과 성능면에서 최적화 한것(Partial Super- Sampling) • 도형과 겹치는 픽셀칸에서 가운데 한점 뿐이 아니라 한칸당 한개 이상의 지점 에서 정보를 수집한다는 의미 • 가장 보편적인 AA 방법 • 문제는 멀티 샘플링시 필요한 프레임버퍼의 정보크기가 2배로 됨 ( 디퍼드 와 같이 쓰기에 매우 무거움) • 대역폭을 많이 잡아먹음. 더 많은 GPU 리소스 필요
  • 15.
  • 16.
  • 17.
  • 18.
    2x 4x 8x멀티 샘플링
  • 19.
  • 20.
    MSAA.. 퀄리티는 괜찮지만 • CPU 기반 • 역시나 부하가 큼 • 이미지에 대해 상관없이 그냥 여러 번 샘플링 함 • AA 기준의 척도가 됨 • 현재 나오는 AA는 MSAA x N 만큼 성능이 좋으며 이정도 속도를 내며 메모리도 적게 먹는다로 말함
  • 21.
    Deferred – MSAA? • 디퍼드 렌더링의 고질적 문제 ( AA ) • 하드웨어의 가속 을 간접적으로 받게 하여 MSAA를 손쉽게 구현할 수 있음 • http://mynameismjp.wordpress.com/2010/08/16/deferred-msaa/
  • 22.
    Deferred – MSAA? • #1. 4xMSAA를 켜고 씬의 모든 도형을 Z- Prepass에서 렌더 #2. MSAA를 끄고 정상적으로 HDR 랜더 타겟에 렌더 #3. 톤 매핑 및 기타 후처리를 적용 #4. "Deferred AA"를 적용 : #1에서 만들어진 MSAA Depth-버퍼를 샘플링하여 픽 셀 범위를 계산하고 범위를 기반으로 필터
  • 23.
  • 24.
    CSAA • Coverage Sampling AA • 범위 형태의 샘플링 • MSAA와 방식은 거의 유사 • GeForce 8000시리즈부터 지원 (NVIDIA만 지원) • MSAA와 비슷한 성능으로 적은 메모리 소비 • (4xMSAA ≒ 4 Sample Count(8x 16x CSAA)
  • 25.
    Implementation- Dx9 • #1 NVIDIA 그래픽 카드인지 체크 • #2 CheckDeviceMultisampleType()로 Qulity Level 체크 • Sample Count >4 && Qulity Level >4 이면 CSAA 지원 가능
  • 26.
    Implementation- Dx10 • #1 NVIDIA 그래픽 카드인지 체크 • #2 CheckMultisampleQualityLevels()로 Sample Count 와 Qulity Level 체크 • Sample Count >4 이고 • Qulity Level >8 이면 8x CSAA Qulity Level > 16 16x CSAA
  • 27.
  • 28.
  • 29.
    MLAA • MorphoLogical Anti-Aliasing • 이미지 베이스 AA • NO AA 에 포스트 프로세스(후처리)방식 • SPU/GPU 친화적(PS3에 적합) • 스크린 스페이스 필터 ( 화면분석) • 메쉬의 패턴(계단패턴)을 파악한 다음 중간색을 넣어 완화 • 메모리 절약( 2x MSAA 의 절반 정도) • 대역폭 절약(광원효과등을 추가로 처리 가능) • Fill rate 절약(반투명 효과처리가능한 리소스 증가) • PC의 경우 라데온만 지원
  • 30.
  • 31.
    MLAA 알고리즘 • 엣지 (픽셀을 가로지르는 선) • L, U, Z 패턴으로 인식 • 가중치 계산 • 컬러 합성
  • 32.
    MLAA Pattern Detection Edge Detection
  • 33.
    MLAA 장 단점 • PC에서는 비슷한 퀄리티로 MSAA보다 빠름 • 콘솔의 경우 MSAA는 하드웨어 제약으로 샘플 카운트가 제한되 있기에 MLAA 가 보다 나은 퀄리티를 보장 • 이미지 베이스 기반이기에 CELL이나 SPE에서 사용하기 좋음 (화면 해석) • 디퍼드 렌더링엔진에서 특히 사용하기 편한 MRT와 같이 사용 가능 • 톤 매핑 후 수행되는 안티앨리어싱이기에 HDR 사용할때 퀄리티가 증가 • MSAA와 호환되지 않음 • 서브 픽셀 문제 (후처리 이므로…)
  • 34.
  • 35.
    DLAA • Directionally Localized Anti-Aliasing • 프레넬 공식 기반 • MLAA와의 퀄리티 차이가 거의 없음 속도가 빠름 • 모션 블러 등이 걸렸을때에 효과는 MLAA보다 우수함
  • 36.
    DLAA  Blur Vertically  Find Vertical Edges  Build Edge Mask saturate( abs( x ) · a – b )  Blend With Original Layer  Same Horizontally
  • 37.
    DLAA • "Xbox 360 : 2.2 +/- 0.2ms @ 1280x720 • "PlayStation3 (5 SPUs) : 1.6 +/- 0.3ms @ 1280x720“ • “MLAA ( 5 SPUs) : 4ms
  • 38.
  • 39.
  • 40.
    DEAA • Distance-to-Edge AA • 후처리 방식 • 픽셀 셰이더에서 엣지까지의 거리를 계산 하는 방식 • (Edge Vertices 들이 0이 되는 텍스처 좌표의 ddx,ddy를 사용, 포워드 픽셀 셰이더 에서 엣지까지의 거리를 계산) • 추가 공간이 필요 • 주어진 삼각형으로 픽셀 셰이더에서 엣지까지의 거리를 계산 • distance_x = -v/ddx (V); distance_y = -v/ddy (V) • DEAA버퍼를 Alpha-to-Coverage에 시뮬레이션하는데도 사용 가능
  • 41.
  • 42.
    DEAA 단점 언더 샘플링문제 • Triangles thinner than a pixel • 서브픽셀의 Gap 등 엣지 정보가 없는 애들 • Interpenetrating geometry • 그림자 엣지 • 텍스처 앨리어싱
  • 43.
  • 44.
    GBAA • Geometry Buffer Anti-Aliasing • 게임엔진이 Edge가 어디에 있는지 아는 것을 활용 • DEAA와 비슷한 개념 • Main-Pass 렌더 타겟에 저장되어 있는 지오메트리 정보를 사용 • 고정 비용으로 사용 가능
  • 45.
    GBAA float2 offset =GeometryBuffer.Sample(Point, In.TexCoord).xy; // Check if edge intersects pixel, otherwise search neighborhood [flatten] if (max(abs(offset.x), abs(offset.y)) > 0.5f) { offset = 0.0f; float2 offset0 = GeometryBuffer.Sample(Point, In.TexCoord, int2(-1, 0)).xy; float2 offset1 = GeometryBuffer.Sample(Point, In.TexCoord, int2( 1, 0)).xy; float2 offset2 = GeometryBuffer.Sample(Point, In.TexCoord, int2( 0, -1)).xy; float2 offset3 = GeometryBuffer.Sample(Point, In.TexCoord, int2( 0, 1)).xy; if (abs(offset0.x - 0.75f) < 0.25f) offset = offset0.xy + float2(-1, 0); if (abs(offset1.x + 0.75f) < 0.25f) offset = offset1.xy + float2( 1, 0); if (abs(offset2.y - 0.75f) < 0.25f) offset = offset2.xy + float2( 0, -1); if (abs(offset3.y + 0.75f) < 0.25f) offset = offset3.xy + float2( 0, 1); } float2 off = (offset >= float2(0, 0))? float2(0.5f, 0.5f) : float2(-0.5f, -0.5f); offset = offset? off - offset : offset; // Blend pixel with neighbor pixel using texture filtering and shifting the coordinate appropriately . return BackBuffer.Sample(Linear, In.TexCoord + offset.xy * PixelSize);
  • 46.
    GBAA No AA GBAA GPU: Radeon HD 5870
  • 47.
    GBAA • Geometry Shader를 사용하므로 DX10이상 지원, 콘솔에서는 불가.. • Internal Edge는 하지 않음. • 픽셀당 다중 엣지 검출 문제..
  • 48.
  • 49.
    SRAA • Subpixel Reconstruction Anti-Aliasing • 디퍼드 렌더링 타겟으로 만들어짐 • MSAA의 깊이버퍼 필요(Deferred-MSAA와 거의 유사) • R8 ID Buffer 사용 (Depth + Normal Compression) • 빌보드에 대한 알파 블렌딩을 유지 • GeForce 560 해상도 1080p에서 1ms • SSAA, MSAA, CSAA 와 호환가능 (주로 조합 형태로 사용)
  • 50.
    SRAA • G 버퍼에 노멀과 Z 값을 저장 • MSAA를 켜고 씬을 렌더링 • MSAA를 끄고 G-버퍼를 가지고 라이트 버퍼 렌더링 • Light – Pre Pass에서 최종 버퍼 렌더링 • 후처리 적용 • 가중치 계산후 컬러 합성 노멀과 Z 사용
  • 51.
    SRAA • No AA 16x SSAA SRAA • SRAA
  • 52.
    SRAA • No AA 16x SSAA SRAA • SRAA
  • 53.
    SRAA • No AA 16x SSAA SRAA • SRAA
  • 54.
    SRAA 와 Deferred- MSAA - Deferred-MSAA • G-버퍼 만을 MSAA로 렌더링 후 다음은 평범하게 렌더링 • 마지막으로 후처리로 엣지를 뭉개는 방식을 사용 - SRAA • 엣지를 박스필터등으로 뭉갬(논문에서는 바이리터럴 필터를 사용) • 이때 가중치는 거리가 아닌 엣지의 강도(Z값이나 법선의방향)에 의해 산출
  • 55.
  • 56.
    FXAA • Fast Approximate Anti-Aliasing • NVIDA에서 출시 (계속 업데이트 시켜주심) • 후처리 이므로 독립적임(엔진에 독립적임) • DX9,10,11 다 지원 그래픽카드 안가림 • 초딩도 5분이면 적용 (매우 간단) • 소스코드 http://timothylottes.blogspot.com/2011/07/nvidia-fxaa-39-released.html • 현재 3.11 까지 배포 – 4.0 배포 예정
  • 57.
    FXAA NO AA 4x MSAA FXAA
  • 58.
    FXAA의 연산과정 • Shader Define으로 확인 가능 • FXAA_DEBUG_PASSTHROUG (edge Detection) • FXAA_DEBUG_HORZVERT ( Divide Horz, Vert) • FXAA_DEBUG_PAIR(High Contrast) • FXAA_DEBUG_NEGPOS (Checking Edge Dir) • FXAA_DEBUG_OFFSET (Subpixel.. Reduce Aliasing Process) • Resample • Color blending
  • 59.
    구현이 쉽다? -1 • 파일을 하나 만들어서 인클루드 한다 • (매번 업데이트 되므로 이방법이 나음)
  • 60.
    구현이 쉽다? -2 • #define 세팅 • DX10, 11일 경우 • HLSL4나 5도 가능
  • 61.
  • 62.
    구현이 쉽다? -4 • 텍스처 처리 • 저 숫자의 의미는? • 마지막으로 감마 코렉션만 해주면 됨 • (RGB는 리니어한 공간, Luminance가 저장된 곳은 감마 공간에 있어야 하므로)
  • 63.
  • 64.
  • 65.
  • 66.
    SMAA • Enhanced Subpixel Morphological Antialiasing • Eurographics 2012에서 Jorge Jimenez, Jose I. Echevarria, Tiago Sousa, Diego Gutierrez • SMAA: Enhanced Subpixel Morphological Antialiasing이라는 논문으로 발표 • 보케현상이 심하거나 각도에 따라 지글거리는 FXAA의 단점을 보완 • FXAA 만큼의 속도를 자랑
  • 67.
  • 68.
  • 70.
    SMAA • 관계없는 HUD 주변까지 같이 AA가 걸리게 되어 • Steam 오버레이나 FRAPS등의 툴이 제대로 동작하지 않게 된다. • SMAA도 FXAA와 같이 소스코드가 릴리즈 되어있기 때문에, 셰이더를 붙이기 만 하면 사용 가능하다.
  • 71.
  • 72.
    TXAA • Temporal Approximate Anti- Aliasing • GDC 2012 – NVIDIA에서 발표 • DirectX 11.0 부터 지원 • GTX 400/500/600 계열만 지원 ( ATI 안됨)- 즉 범용성 적음 • 고해상도의 Z 버퍼를 샘플링 함 • 과거 프레임에 대해서도 샘플 픽셀 단위의 엣지 정보를 샘플링하므로 시간적 인(Temporal) 안티 앨리어싱이라 부름 • 아직 정확한 알고리즘 내부는 비공개
  • 73.
    TXAA • TXAA1 과 TXAA2를 공개 • TXAA1 (2xMSAA 비용 = 8xMSAA 효과) • TXAA2 (4xMSAA 비용 = 8xMSAA 이상의 효과)
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
    TXAA 와 SMAA • Temporal Rejection ( 과거 프레임의 Z 버퍼를 참조하는 일) 수행 • 서브 픽셀 단위의 엣지 정보를 분석 • GDC2012에서 크라이텍이 소개한 SMAA와 비슷하다고 생각 됨 난 그렇다 고 생각함
  • 79.
    그 밖에.. • QAA • TAA • NFAA • SPUAA • HRAA • EQAA
  • 80.
    결론 • 그 외에 다양한 AA 처리 기법이 있으며 현재도 계속 연구 중에 있다 • 저마다 장 단점이 있으며 완전하다고 말 할 수 없다 • (자신의 게임에 최대한의 결과를 낼 수 있는 AA처리를 찾는 것이 중요) • 현재로써는 TXAA , SMAA는 눈 여겨 볼만한 AA
  • 81.
  • 82.
    Reference • http://blog.daum.net/sj_fly/11 • http://iryoku.com/aacourse/ • http://developer.nvidia.com/csaa-coverage-sampling-antialiasing • http://d.hatena.ne.jp/yakiimo02/20110401/1301665383 • http://zzinga.egloos.com • http://timothylottes.blogspot.com/2011/07/nvidia-fxaa-39-released.html • http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf • http://www.gamedevforever.com/46 게임개발 포에버 • 니시카와 젠지의 3D 게임 팬을 위한 그래픽스 강좌 • 그 외-..- 조낸 구글링