내 질문은 구체적으로 Metal과 관련이 있습니다. 왜냐하면 다른 API에 대한 답변이 변경되는지 알 수 없기 때문입니다.
내가 지금까지 이해하고 있다고 생각하는 것은 다음과 같습니다.
mipmapped 텍스처는 사전 계산 된 "세부 정보 수준"으로, 원래의 텍스처를 의미있는 방식으로 다운 샘플링하여 더 낮은 수준의 세부 사항을 만듭니다.
밉맵 레벨은 세부적인 내림차순으로 참조되며, 레벨
0
은 원래 텍스처이고 높은 레벨은 2의 거듭 제곱입니다.대부분의 GPU는 삼선 형 필터링을 구현하여 각 샘플에 대해 두 개의 인접한 밉맵 레벨, 이중 선형 필터링을 사용하여 각 레벨의 샘플을 선택한 다음 해당 샘플을 선형 혼합합니다.
내가 이해하지 못하는 것은 이러한 밉맵 레벨이 어떻게 선택되는지입니다. Metal 표준 라이브러리 의 문서 에서 lod_options
유형 의 인스턴스를 지정하거나 지정하지 않고 샘플을 가져올 수 있음을 알았습니다 . 이 인수가 밉맵 레벨 선택 방법을 변경한다고 가정하고 lod_options
2D 텍스처 에는 세 가지 종류가 있습니다 .
bias(float value)
level(float lod)
gradient2d(float2 dPdx, float2 dPdy)
불행히도 설명서에는 이러한 옵션의 기능에 대한 설명이 필요하지 않습니다. 나는 bias()
자동으로 선택된 세부 수준의 편향을 추측 하지만 그 편향 value
은 무엇을 의미합니까? 어떤 규모로 작동합니까? 마찬가지로, 어떻게한다 lod
의는 level()
이산 밉맵 레벨로 번역? 그리고 gradient2d()
텍스처 좌표의 그라디언트 를 사용 하는 가정하에 그 그라디언트를 사용하여 밉맵 레벨을 선택하는 방법은 무엇입니까?
더 중요한 것은를 생략 lod_options
하면 밉맵 레벨은 어떻게 선택됩니까? 실행되는 기능의 유형에 따라 다른가요?
그리고 sample()
함수 의 기본 no-lod-options 지정 작업이 gradient2D()
(적어도 조각 쉐이더에서) 같은 작업을 수행 하는 경우 간단한 화면 공간 파생을 사용하거나 래스터 라이저 및 보간 된 텍스처 좌표와 직접 작동합니까 정확한 기울기를 계산하려면?
마지막으로, 장치마다이 동작이 얼마나 일관성이 있습니까? 이전 기사 (DirectX 9에서와 같이 오래된 기사)에서 복잡한 장치 별 밉맵 선택을 언급했지만 최신 아키텍처에서 밉맵 선택이 더 잘 정의되어 있는지 알 수 없습니다.