이방성 필터링은 일반적으로 최신 GPU에서 어떻게 구현됩니까?


14

이방성 필터링은 "MIP 맵 텍스처가 앨리어싱을 피하려는 시도로 인해 일반적으로 손실되는 텍스처의 선명도를 유지합니다". Wikipedia 기사는 어떻게 구현할 수 있는지에 대한 힌트를 제공합니다 ( "이방성의 방향에 대한 텍스처 (...)").

물리 기반 렌더링에 대한 대략적인 모델 프레젠테이션 의 노트 에 제시된 테스트에서 제안한 바와 같이 다양한 구현이있는 것 같습니다 . 여기에 이미지 설명을 입력하십시오

이방성 필터링을 사용할 때 올바른 MIP 수준을 선택하기 위해 (현대) GPU가 수행하는 구체적인 계산은 무엇입니까?


3
에 대한 사양 GL_EXT_texture_filter_anisotropic은 매우 상세합니다. 프로세스를 더 잘 이해하는 데 도움이 될 수 있습니다.
glampert

답변:


14

텍스처 필터링 하드웨어는 다양한 밉맵 레벨의 여러 샘플을 가져옵니다 (최대 샘플 량은 이방성 필터링 레벨로 표시되지만, 주어진 필터링 작업에서 수집 된 샘플의 정확한 양은 프래그먼트의 파생물 간의 비율에 따라 달라집니다. ) 원뿔을 텍스처 공간에 비스듬한 각도로 표면을 보면서 투영하면 대략 타원형 모양의 돌기가 생겨 더 비스듬한 각도로 더 길어집니다. 추가 타원은이 타원의 축을 따라 (올바른 밉 레벨에서 제공하는 사전 필터링을 이용하기 위해) 수집되어 더 선명한 텍스처 샘플을 제공합니다.

또 다른 기술은 립 매핑 (Mipmapping에 대한 Wikipedia 기사에서 언급)으로 알려져 있지만현대 GPU에서 일반적으로 사용되는 텍스처의 사전 필터링을 사용합니다. 밉과 달리 텍스처는 균일하게 축소되지 않고 다양한 높이 너비 비율 (선택한 이방성 필터링 수준에 따라 최대 비율)을 사용합니다. 텍스처의 변형 (또는 3 선형 필터링을 사용하는 경우 2 개의 변형)은 표면의 각도를 기반으로 선택되어 왜곡을 최소화합니다. 픽셀 값은 기본 필터링 기술 (쌍 선형 또는 삼선 형)을 사용하여 가져옵니다. Rip-maps는 엄청나게 큰 크기 때문에 내가 알고있는 하드웨어에서는 사용되지 않습니다. 밉맵은 추가 33 % 스토리지를 사용하지만 립맵은 300 %를 사용합니다. AF를 사용할 때 텍스처 사용 요구 사항이 증가하지 않고 오히려 대역폭 만 증가한다는 점을 확인하면 확인할 수 있습니다.

더 자세히 읽으 려면 EXT_texture_filter_anisotropic OpenGL 확장 에 대한 사양을 살펴보십시오 . 이방성 필터링을 사용할 때 샘플을 계산하는 데 사용되는 공식과 샘플을 결합하는 방법에 대해 자세히 설명합니다.


5
RIP 맵은 일반적으로 대각선의 경우에 도움이되지 않기 때문에 사용되지 않을 것입니다. FWIW, Microsoft Refrast 용 코드를 찾을 수 있다면, 이방성 필터 구현은 아마도 오늘날의 HW가 어떻게 작동하는지에 대한 훌륭한 참조 일 것입니다.
Simon F

1
"AF를 사용할 때 텍스처 사용 요구 사항이 증가하지 않고 오히려 대역폭 만 증가한다는 점을 확인함으로써이를 확인할 수 있습니다." 살인자 주장. 좋은 대답입니다!
David Kuri

"GPU의 고성능 소프트웨어 래스터 화"링크는 한 번의 통과에서 이방성 필터링 만 언급하고 세부 사항은 언급하지 않습니다. 유용한 답변과 관련이 없다고 생각하기 때문에 답변에서 편집하려고합니다.
yuriks

@SimonF는 또한 추가 대역폭 요구 사항이 상당히 무섭다는 점을 추가 할 수 있습니다.
v.oddou

9

API 요구 사항은 모든 사양 또는 확장에서 찾을 수 있습니다. 다음은 하나입니다 : https://www.opengl.org/registry/specs/EXT/texture_filter_anisotropic.txt

AF 품질이 많은 벤치 마크의 일부로 사용 되었기 때문에 모든 GPU 공급 업체가 사양에서 벗어날 수 있습니다. 그리고 새로운 워크로드가 기존 근사치를 강조함에 따라 현재 구현은 계속 진화하고 있습니다. 불행히도, 정확히 무엇을 알기 위해서는 회사 중 하나의 일원이되어야합니다. 그러나 다음 문서에서 품질 및 구현 비용의 순서로 나열된 가능성의 스펙트럼을 측정 할 수 있습니다.

사양에서 인용 :

 Anisotropic texture filtering substantially changes Section 3.8.5.
 Previously a single scale factor P was determined based on the
 pixel's projection into texture space.  Now two scale factors,
 Px and Py, are computed.

   Px = sqrt(dudx^2 + dvdx^2)
   Py = sqrt(dudy^2 + dvdy^2)

   Pmax = max(Px,Py)
   Pmin = min(Px,Py)

   N = min(ceil(Pmax/Pmin),maxAniso)
   Lamda' = log2(Pmax/N)

 where maxAniso is the smaller of the texture's value of
 TEXTURE_MAX_ANISOTROPY_EXT or the implementation-defined value of
 MAX_TEXTURE_MAX_ANISOTROPY_EXT.

 It is acceptable for implementation to round 'N' up to the nearest
 supported sampling rate.  For example an implementation may only
 support power-of-two sampling rates.

 It is also acceptable for an implementation to approximate the ideal
 functions Px and Py with functions Fx and Fy subject to the following
 conditions:

   1.  Fx is continuous and monotonically increasing in |du/dx| and |dv/dx|.
       Fy is continuous and monotonically increasing in |du/dy| and |dv/dy|.

   2.  max(|du/dx|,|dv/dx|} <= Fx <= |du/dx| + |dv/dx|.
       max(|du/dy|,|dv/dy|} <= Fy <= |du/dy| + |dv/dy|.

 Instead of a single sample, Tau, at (u,v,Lamda), 'N' locations in the mipmap
 at LOD Lamda, are sampled within the texture footprint of the pixel.

 Instead of a single sample, Tau, at (u,v,lambda), 'N' locations in
 the mipmap at LOD Lamda are sampled within the texture footprint of
 the pixel.  This sum TauAniso is defined using the single sample Tau.
 When the texture's value of TEXTURE_MAX_ANISOTROPHY_EXT is greater
 than 1.0, use TauAniso instead of Tau to determine the fragment's
 texture value.

                i=N
                ---
 TauAniso = 1/N \ Tau(u(x - 1/2 + i/(N+1), y), v(x - 1/2 + i/(N+1), y)),  Px > Py
                /
                ---
                i=1

                i=N
                ---
 TauAniso = 1/N \ Tau(u(x, y - 1/2 + i/(N+1)), v(x, y - 1/2 + i/(N+1))),  Py >= Px
                /
                ---
                i=1


 It is acceptable to approximate the u and v functions with equally spaced
 samples in texture space at LOD Lamda:

                i=N
                ---
 TauAniso = 1/N \ Tau(u(x,y)+dudx(i/(N+1)-1/2), v(x,y)+dvdx(i/(N+1)-1/2)), Px > Py
                /
                ---
                i=1

                i=N
                ---
 TauAniso = 1/N \ Tau(u(x,y)+dudy(i/(N+1)-1/2), v(x,y)+dvdy(i/(N+1)-1/2)), Py >= Px
                /
                ---
                i=1 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.