비등방성 필터링(Anisotropic Filtering)


이미지 출처: https://en.wikipedia.org/wiki/Anisotropic_filtering


📼 비등방성 필터링(Anisotropic Filtering)이란?

텍스처가 기울어진 각도로 렌더링될 때 발생하는 흐릿함(블러)을 줄이기 위해, 각도에 따라 텍셀 샘플링을 최적화하는 고급 텍스처 필터링 기법.
특히 카메라와 텍스처 표면이 비스듬할 때 선명도를 유지하기 위해 사용되며, 일반적인 선형(Linear) 또는 삼선형(Trilinear) 필터링보다 더 정교하고 선명한 결과를 제공.


📼 비등방성 필터링이 필요한 이유

🚫 기존 필터링 방식의 한계

  • 선형, 삼선형 필터링은 축방향(등방성)으로만 필터링되어, 멀리 있고 기울어진 표면에서 심한 흐릿함 발생
  • 특히 바닥이나 벽처럼 시야에서 멀어지며 눕혀진 표면의 디테일이 뭉개짐

✅ 해결책: 비등방성 필터링

  • 텍스처 좌표에서 샘플링하는 형태를 타원 모양(anisotropic footprint) 으로 조정
  • 긴 방향으로 더 많은 텍셀을 샘플링하여 선명도 유지

📼 작동 원리 요약

항목설명
샘플링 형태사각형 → 타원형 영역 (기울어진 면에서도 더 많은 샘플 확보)
처리 방식텍스처 공간에서의 기울기를 기반으로 최적 샘플링 방향 계산
결과먼 거리, 비스듬한 시점에서도 선명한 텍스처 유지

시각적으로 게임에서 바닥 타일, 레일, 도로 텍스처 등에 큰 효과를 발휘.


📼 구현 (HLSL / DirectX 샘플 with Normal Mapping 적용)

비등방성 필터링은 GPU에서 SamplerState 설정만으로 적용 가능하다. 아래는 실제 노멀 맵 적용에 비등방성 필터링을 사용하는 예시이다:

// 비등방성 샘플러 설정
SamplerState AnisotropicSampler
{
    Filter = ANISOTROPIC;
    AddressU = Wrap;
    AddressV = Wrap;
    MaxAnisotropy = 4;
};

// 노멀맵 적용 함수
void NormalMapping(float2 uv, float3 normal, float3 tangent, SamplerState samp)
{
    float4 map = MaterialMaps[MATERIAL_TEXTURE_NORMAL].Sample(samp, uv);

    [flatten]
    if (any(map.rgb) == false)
        return;

    float3 coord = map.rgb * 2.0f - 1.0f; // -1.0 ~ +1.0 범위로 변환

    float3 N = normalize(normal); // Z축
    float3 T = normalize(tangent - dot(tangent, N) * N); // X축 (정규직교)
    float3 B = cross(N, T); // Y축

    float3x3 TBN = float3x3(T, B, N);
    coord = mul(coord, TBN);

    Material.Diffuse *= saturate(dot(-LightDirection, coord));
}

// 실제 호출
void NormalMapping(float2 uv, float3 normal, float3 tangent)
{
    NormalMapping(uv, normal, tangent, AnisotropicSampler);
}

MaxAnisotropy는 보통 4, 8, 16 등 설정 가능하며, 값이 높을수록 품질 ↑, 성능 ↓


📼 장단점 요약

장점단점
선명한 텍스처 품질 유지계산량 증가 (특히 고 Aniso 레벨일 때)
거리 및 기울기에 강함일부 구형 GPU에서는 효과 미미
고화질 그래픽에 필수 요소쉐이더 코드가 아니라 샘플러 설정이 핵심

📌 요약 정리

항목설명
목적기울어진 표면에서 텍스처 디테일 유지
방법타원형 영역에서 텍셀 다중 샘플링 수행
적용샘플러 설정 (ANISOTROPIC, MaxAnisotropy)
사용처바닥 텍스처, 도로, 철도, 넓은 표면 텍스처 등

📚 참고 자료


© 2024. All rights reserved.

Powered by Hydejack v9.2.1