OpenGL에서 앤티 앨리어싱을 어떻게 구현합니까?


28

OpenGL에서 전체 화면 앤티 앨리어싱을하고 싶습니다. 게임을 제작하고 좋은 효과를 원하기 때문에 OpenGL 자체에서 제공하는 앤티 앨리어싱을 사용하고 싶지 않습니다.

어떻게 진행해야합니까?


"GL 자체에서 제공하는 앤티 앨리어싱"은 "앤티 앨리어싱"으로 레이블이 지정된 이전에 이름이 잘못 지정된 선 및 다각형 품질 힌트를 참조합니까, 아니면 GLX / WGL 비주얼을 통해 일반 MSAA를 사용하고 있습니까?
Lars Viklund

답변:


28

OpenGL에는 기본 MSAA에 대한 몇 가지 대안이 있습니다. 후 처리 효과를 사용하면 가장 좋은 점은 일반적으로 처리되지 않은 최종 이미지에 쉐이더를 던질 수 있고 나머지는 수행한다는 것입니다. 살펴볼 가치가있는 세 가지 방법은 다음과 같습니다.

  • 빠른 대략적인 앤티 앨리어싱 (Geeks3D) -대부분의 경우에 적합합니다. 적용하기 쉽고 이해하기 쉽습니다. 결점은 날카 롭고, 텍스처의 고 대비 노이즈가 약간 흐려집니다. 1/4 픽셀의 가파른 가장자리는 전통적인 MSAA와 같이 정확하지 않습니다. 그것보다 덜 가파르면 약간의 정확성을 잃습니다.

  • Normal Filtered Anti-Aliasing (GameDev )-아직 정확하게 테스트하지는 않았지만 이해하기가 가장 쉽습니다. 가장 좋은 경우에는 16x MSAA와 비슷하고 최악의 경우에는 2x MSAA와 같습니다. 가장자리와 상대 각도를 나타내는 임시 법선 맵을 생성합니다. 루마 차이 또는 색상 차이로 노멀 맵을 샘플링 할 수 있습니다.

  • Morphological Anti-Aliasing (Iryoku)-SMAA (Subpixel Mophological AA ) 로 개선되었습니다. 4 패스에서 꽤 복잡하지만 내가 본 최고의 결과를 얻습니다. 1/100 ~ 1/200 픽셀의 경사 (!)만큼 점진적으로 가장자리를 따라 그라디언트를 만듭니다. 샘플링은 루마 기반, 색상 기반 또는 깊이 기반 일 수 있습니다. 질감이 매우 선명하고 깨끗합니다. (예는 DX10 및 HLSL 기반이며 GLSL로 정확하게 포팅하는 데 시간이 걸립니다)

이러한 기법은 수퍼 샘플링 또는 멀티 샘플링이 아니므로 두께가 1 픽셀 미만인 선은 간격으로 표시되며 앤티 앨리어싱이 올바르게 수행되지 않습니다. 이것은 비 MSAA 방식을 사용하는 것의 단점입니다. 전체 해상도에서 래스터 이미지로만 작업하므로 이러한 빈 공간에서 추가 정보를 만들 수 없습니다.

이러한 모든 기술은 인접한 루마 (밝기) 또는 채도 (컬러) 값 샘플링에 의존합니다. 루마 및 선택적 감마 보정을 계산하려면 AA 셰이더에 대한 추가 지침이 필요하지만 매우 간단합니다. 수정하지 않은 이미지를 제공하는 이전 셰이더에서 루마를 계산하여 루마를 알파 채널에 저장하여이를 오프로드 할 수 있습니다. 그런 다음 AA 셰이더에서 간단히 알파를 샘플링합니다.


7

앤티 앨리어싱을 수행하는 방법에는 여러 가지가 있습니다. 하나는 다중 버퍼 앤티 앨리어싱 (MSAA)을 사용하는 것입니다. 백 버퍼는 실제로 여러 하위 픽셀 샘플을 저장하고 삼각형, 선 등을 렌더링 할 때 시스템은 각 픽셀의 정확한 샘플 세트를 자동으로 채 웁니다. 그런 다음 렌더링이 끝날 때 모든 서브 픽셀 샘플을 평균화하여 이미지를 "해결"하여 픽셀 당 하나의 샘플을 얻습니다.

또 다른 방법은 후 처리 앤티 앨리어싱을 사용하여 장면을 정상적으로 렌더링 한 다음 최종 결과에서 대상을 흐리게 처리하여 앨리어싱 된 가장자리를 숨기는 것입니다. 이를위한 다양한 기술이 있지만 현재 가장 우수하고 가장 인기있는 기술 중 하나는 FXAA (Fast approXimate Anti-Aliasing)입니다.

MSAA는 일반적으로 후 처리 AA보다보기 좋은 결과를 제공하지만 렌더링 작업마다 메모리 대역폭의 약 두 배가 필요하기 때문에 속도가 느려질 수 있습니다. MSAA는 설정 세부 사항에 따라 후 처리 AA보다 더 많은 비디오 메모리를 요구할 수 있습니다.

웹에서 MSAA 또는 FXAA를 구현하는 방법에 대한 특정 정보를 찾을 수 있습니다.


2

GLSL 셰이더를 기꺼이 코딩 하시겠습니까? 그렇다면 확인 자습서를 하십시오 .


다른 셰이더에도 셰이더를 사용하고 있기 때문에 셰이더를 사용하고 싶습니다. 셰이더에 대한 다른 링크도 제공 할 수 있습니까?
noddy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.