비등방성 필터링이란?
비등방성 필터링(Anisotropic Filtering, AF)은 3D 그래픽스에서 텍스처의 품질을 향상시키기 위한 기술입니다. 이 기술은 관찰자의 시점에 따라 텍스처의 세부 사항이 어떻게 보이는지를 개선하여, 특히 경사진 표면에서 더 선명한 결과를 제공합니다. 비등방성 필터링은 다방향으로의 샘플링을 통해 텍스처의 시각적 품질을 높입니다.
Mipmap이란?
Mipmap은 텍스처의 다양한 크기를 미리 계산하여 저장하는 기술입니다. 게임에서는 카메라와의 거리에 따라 적절한 해상도의 텍스처를 사용하여 성능을 향상시키고, 텍스처의 품질을 유지하는 데 도움을 줍니다. 예를 들어 가까운 객체에는 고해상도 텍스처를, 멀리 있는 객체에는 저해상도 텍스처를 사용하는 방식입니다. 이렇게 하면 성능을 향상시키고 메모리 사용량을 줄일 수 있습니다.
위 예시 사진의 왼쪽의 지면을 Mipmap에 의해 멀어질수록 텍스쳐 해상도가 낮아지는걸 확인할 수 있습니다. 그리고 오른쪽은 비등방성 필터링이 적용된 결과로, 왼쪽사진에 비해 지면 텍스쳐 품질 차이가 확연히 느껴집니다.
Mipmap과 비등방성 필터링의 관계
Mipmap을 사용하여 텍스처가 멀어질수록 이미지가 흐려지는 현상을 일으킬 수 있습니다. 이때 비등방성 필터링이 각 해상도에서 더욱 선명한 이미지를 생성할 수 있습니다. 이 조합은 특히 위 사진처럼 기울어진 표면이나 대각선에서의 텍스처 품질을 크게 향상시킵니다.
Mipmaps가 성능을 최적화해 주는 반면, 이방성 필터링은 그 텍스처들이 왜곡되지 않도록 해주며, 멀리서 보이는 텍스처의 디테일을 유지하는 데 필수적입니다.
Unity에서 설정 방법
비등방성 필터링 설정하기
Unity에서는 텍스처의 비등방성 필터링 설정을 다음과 같이 조절할 수 있습니다.
- 텍스처 선택: 원하는 텍스처를 선택합니다.
- Inspector: Inspector 패널에서 Filter Mode를 Trilinear로 설정합니다.
- Aniso Level: Anisotropic Level을 원하는 값으로 설정합니다. (0은 비활성화 1이상은 활성화)
Anisotropic Level은 값이 높아질수록 텍스처를 가파른 각도에서 볼 때 품질을 높입니다.
이방성 필터링은 바닥 및 지면 텍스처에 효과적이지만, 성능 소모가 큽니다.
Mipmap 설정하기
Mipmap을 활성화하는 방법은 다음과 같습니다.
- 텍스처 선택: 원하는 텍스처를 선택합니다.
- Inspector: Generate Mip Maps 옵션을 체크합니다.
- Mipmap 옵션 조정: 필요한 경우 Mipmap관련 옵션을 조절합니다.
아래 공식문서에서 세부 옵션을 확인할 수 있습니다.
https://docs.unity3d.com/kr/2021.3/Manual/class-TextureImporter.html
비등방성 필터링 적용 코드
void SetAnisotropicFiltering()
{
// 비활성화
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Disable;
// 텍스쳐별 설정에 따라 활성화
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Enable;
// 항상 활성화
QualitySettings.anisotropicFiltering = AnisotropicFiltering.ForceEnable;
}
결과
Mipmap과 비등방성 필터링을 적절하게 활용하면 게임의 성능과 텍스쳐 품질을 동시에 향상시킬 수 있습니다. Mipmap은 카메라와의 거리에 따라 적절한 해상도의 텍스처를 자동으로 선택해 성능 최적화를 도와주며, 비등방성 필터링은 Mipmap의 단점을 보완해 텍스처의 품질을 더 선명하게 해줍니다. 특히 지면과 같은 기울어진 표면에서 그 차이가 눈에 띄게 드러납니다.
'Unity > 정보' 카테고리의 다른 글
[Unity] 로컬 알림 기능 (Android) (0) | 2024.11.10 |
---|---|
[Unity] Resources.UnloadUnusedAssets() : 메모리 관리 (0) | 2024.09.28 |
[Unity] 안티앨리어싱(Anti-Aliasing) (0) | 2024.09.21 |
[Unity] 유니티의 가비지 콜렉터 (G.C) (1) | 2024.09.16 |
[Unity] Awake()와 Start()의 차이점 (1) | 2024.09.16 |