안티앨리어싱(AA) 소개
안티앨리어싱(Anti-Aliasing, AA)은 게임 그래픽 가장자리에서 발생하는 계단 현상을 완화하는 방법입니다. 낮은 해상도에서 픽셀로 표현된 직선이나 곡선이 매끄럽지 않게 보이는데, 안티앨리어싱은 픽셀의 색상과 주위 색상을 혼합하여 더 부드럽고 자연스러운 이미지를 보여줍니다. 이를 통해 게임의 그래픽 퀄리티를 향상시킬 수 있습니다.
안티앨리어싱의 원리
안티앨리어싱은 객체의 가장자리에서 색상 값을 혼합하여 픽셀의 경계가 부드럽게 보이도록 하는 방식으로 동작합니다. 특히, 픽셀의 색상을 주변 픽셀과 섞어 계단 현상을 줄이거나, 화면 전체에서 샘플링을 더 많이 하는 방식으로 처리하여 시각적 부드러움을 제공합니다.
안티앨리어싱 종류와 비교
1) MSAA (Multi-Sample Anti-Aliasing)
- MSAA는 대표적인 공간 기반 안티앨리어싱 방식으로, 렌더링된 이미지의 가장자리만을 다중 샘플링하여 더 부드럽게 표현합니다. 이 방식은 성능이 좋지만 메모리 사용량이 높을 수 있습니다.
- Unity에서 MSAA는 그래픽 옵션에서 품질 설정으로 제어할 수 있으며 2x, 4x, 8x와 같은 선택지를 제공합니다. 숫자가 높을수록 품질은 좋아지지만, 성능 저하가 있을 수 있습니다.
2) FXAA (Fast Approximate Anti-Aliasing)
- FXAA는 화면 전체의 픽셀을 빠르게 처리하며, 성능을 덜 요구하지만 MSAA에 비해 품질이 떨어질 수 있습니다. 특히, 저사양 기기에서 성능을 유지하면서 어느 정도 품질을 유지하고 싶을 때 적합한 방법입니다.
3) TAA (Temporal Anti-Aliasing)
- TAA는 컬러 기록 버퍼의 여러 프레임 데이터를 활용하여 이미지의 가장자리를 부드럽게 처리하는 방식입니다. 이 방법은 프레임 간 정보를 참조하기 때문에, 결과적으로 움직이는 가장자리의 부드러움이 개선되고 깜박임 현상이 줄어듭니다. 그러나 TAA는 시간 기반으로 처리를 하기 때문에, 게임 오브젝트가 빠르게 움직이거나 대비가 큰 표면 앞을 지나갈 때 고스팅(ghosting) 현상이 발생할 수 있습니다.다음 기능은 TAA와 함께 사용할 수 없습니다.
- 멀티샘플링 안티앨리어싱(MSAA)
- 카메라 스태킹
- 다이내믹 해상도
4) SMAA(Subpixel Morphological Anti-Aliasing)
- SMAA는 이미지의 테두리에서 패턴을 감지하고, 감지된 패턴에 따라 테두리 픽셀을 블렌딩하는 방식입니다. 이 방법은 FXAA보다 더 선명한 결과를 제공하며, 더 나은 이미지 품질을 기대할 수 있습니다.
Unity에서 안티앨리어싱 적용 방법
1) Built-in Render Pipeline
Built-in Render Pipeline의 안티앨리어싱은 기본적으로 MSAA만 제공하고 있습니다.
FXAA, TAA, SMAA는 Postprocess를 통해 사용할 수 있습니다.
MSAA 안티앨리어싱 레벨은 Quality Settings에서 설정합니다.
- 프로젝트 설정(Project Settings) > 품질(Quality)
- Anti-Aliasing 옵션을 선택하고, 2x, 4x, 8x와 같은 옵션을 선택할 수 있습니다. 더 높은 값을 선택할수록 이미지 품질은 개선되지만 성능이 더 요구됩니다.
다음과 같이 코드로도 적용할 수 있습니다.
postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.None; // MSAA
QualitySettings.antiAliasing = 4; // MSAA 2, 4, 8x
postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.FastApproximateAntialiasing; // FXAA
postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.SubpixelMorphologicalAntialiasing; // SMAA
postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.TemporalAntialiasing; // TAA
// None
postProcessLayer.antialiasingMode = PostProcessLayer.Antialiasing.None;
QualitySettings.antiAliasing = 0;
2) URP(Universal Render Pipeline)
URP에서 안티앨리어싱 적용 방법은 카메라의 Rendering 옵션을 선택하면 됩니다.
(Bulit-in과 마찬가지로 Postprocess에서도 똑같이 변경할 수 있습니다.)
MSAA는 Quality > Anti Aliasing (MSAA)으로 이동한 후 원하는 MSAA 레벨을 선택합니다.
다음과 같이 코드로도 적용할 수 있습니다. (Bulit-in에서의 코드도 URP에서 PostProcess을 사용하면 사용 가능합니다.)
public Camera camera;
// 안티앨리어싱 모드를 변경하는 함수
public void SetAntiAliasing(int index)
{
UniversalAdditionalCameraData cameraData = camera.GetComponent<UniversalAdditionalCameraData>();
if (cameraData != null)
{
switch (index)
{
case 0: // None
cameraData.antialiasing = AntialiasingMode.None;
break;
case 1: // FXAA
cameraData.antialiasing = AntialiasingMode.FastApproximateAntialiasing;
break;
case 2: // SMAA
cameraData.antialiasing = AntialiasingMode.SubpixelMorphologicalAntiAliasing;
break;
case 3: // TAA
cameraData.antialiasing = AntialiasingMode.TemporalAntiAliasing;
break;
}
}
}
코드에서 MSAA레벨 조정은 다음과 같이 설정합니다.
public UniversalRenderPipelineAsset urpAsset;
public void SetAntiAliasing()
{
urpAsset.msaaSampleCount = 1; // MSAA 비활성화
urpAsset.msaaSampleCount = 2; // 2x MSAA
urpAsset.msaaSampleCount = 4; // 4x MSAA
urpAsset.msaaSampleCount = 8; // 8x MSAA
}
결론
안티앨리어싱은 게임 그래픽의 퀄리티를 개선하는 중요한 기술입니다. MSAA, FXAA, TAA, SMAA와 같은 다양한 방법들이 있으며, Unity에서는 간편하게 설정하고 조절할 수 있습니다.
https://news.skhynix.co.kr/post/chinese-game-wonshin
'Unity > 정보' 카테고리의 다른 글
[Unity] 비등방성 필터링(Anisotropic filtering)과 Mipmap (0) | 2024.09.22 |
---|---|
[Unity] 유니티의 가비지 콜렉터 (G.C) (0) | 2024.09.16 |
[Unity] Awake()와 Start()의 차이점 (1) | 2024.09.16 |
[Unity] 프리팹(Prefab) 기초 (0) | 2024.09.16 |
[Unity] GPU Instancing (0) | 2024.09.13 |