• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Anti aliasing
 

Anti aliasing

on

  • 2,158 views

Anti-Aliasing Techniques

Anti-Aliasing Techniques

Statistics

Views

Total Views
2,158
Views on SlideShare
2,152
Embed Views
6

Actions

Likes
2
Downloads
0
Comments
0

2 Embeds 6

http://blog.naver.com 5
http://www.slashdocs.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Anti aliasing Anti aliasing Presentation Transcript

    • 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 렌더 타겟에 저장되어 있는 지오메트리 정보를 사용• 고정 비용으로 사용 가능
    • GBAAfloat2 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 게임 팬을 위한 그래픽스 강좌• 그 외-..- 조낸 구글링