Advertisement

More Related Content

Slideshows for you(20)

Advertisement

Anti aliasing

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