프로그래밍 공부
작성일
2023. 10. 19. 15:13
작성자
WDmil
728x90

SamplerState 는 텍스처를 샘플링할 때 사용되는 설정을 정의하는데 사용되는 객체이다.

 

이 객체는 그래픽 파이프라인에서 텍스처 샘플링 작업에 영향을 미치며, 색상, 레벨등에 다양한 샘플링 매개변수를 제어할 수 있도록 도와준다.

 

주로 택스처 필터링, 주소모드 및 텍스처의 래핑을 구성하는데 사용된다.

 

주요역할

  1. 텍스처 필터링 설정
    • 텍스처를 확대 또는 축소할때 어떻게 보간할지 결졍할 수 있다.
    • 텍스처가 화면에 확대 또는 축소될 때 부드럽게 나타나게 하거나, 텍스처의 뾰족한 가장자리를 제어할 수 있다.
    • 우리가 흔히 아는 안티엘리어싱을 말한다.
  2. 주소모드 설정 ( UV좌표 설정)
    • 텍스처 를 벗어나는 텍스처 좌표를 처리하는 방법을 지정할 수 있다.
    • 텍스처가 반복되거나( 타일맵 )
    • 경계 텍셀에서 클램핑 되거나 ( 선형보간 )
    • 로 처리방식을 지정한다.
  3. Mipmap 레벨 설정
    • 텍스처의 다양한 해상도 버전을 이야기한다.
    • 거리가 멀 시 해당 객체의 버텍스의 개수를 낮추거나 가까울때 더 많게하여 자세히 표현하게 하는 정도의 최적화를 이야기한다.
  4. 비선형 필터링 및 비선형 왜곡
    • 비선형 필터링 및 왜곡 보정을 통해 텍스처가 가까이 다가갔을때 주변 픽셀과 일정값을 보정하여 흐릿하게 보이게 하거나. 보정을 하지 않고 딱딱 끊어지는 도트타입의 픽셀을 보이게 할 수 있다.
SamplerState::SamplerState()
{
    // 안티엘리어싱 할 때 어떤식으로 처리할것인지.

    /*
        D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR	= 0x5,
        선형보간으로 이미지의 픽셀 주변이 흐릿하게 처리해줌. 안티엘리어싱
        D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT	= 0x10,
        픽셀마다 딱딱 끊기게 흐릿하게 보간하지 않는다.

        3D에서는 리니어를 많이씀
        2D에서는 포인트를 많이씀

        D3D11_TEXTURE_ADDRESS_WRAP
        uv가 넘쳤을 때. 0에서 1까지 인데, 0부터 10까지 잡아서 넘치게 되었을 때
    */

    desc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
    desc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
    desc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
    desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;;
    desc.ComparisonFunc = D3D11_COMPARISON_NEVER;
    desc.MinLOD = 0;
    desc.MaxLOD = D3D11_FLOAT32_MAX;
    //LOD(Level Of Detail) : 카메라의 거리에 따라서 퀄리티를 다르게 하는 것   
    // 최적화 기법중 하나임
    /*
        D3D11_TEXTURE_ADDRESS_WRAP	= 1,
        타일맵처럼 여러개를 찍어준다.
        D3D11_TEXTURE_ADDRESS_MIRROR	= 2,
        // 거울처럼 뒤집어주는것. uv가 넘어가면 뒤집어준다.
        D3D11_TEXTURE_ADDRESS_CLAMP	= 3,
        // 끝에서 끊어서 다시 역순으로 uv를 밀어넣어준다.
        D3D11_TEXTURE_ADDRESS_BORDER	= 4,
        D3D11_TEXTURE_ADDRESS_MIRROR_ONCE	= 5
    
    */

    Changed();
}

위와같은 설정을 제공함으로써. 더 효율적인 동작을 보장한다.

728x90

'컴퓨터 용어 정리' 카테고리의 다른 글

DirectX Proejction행렬  (0) 2023.10.27
DirectX RasterizerSate  (0) 2023.10.19
HeightMap  (0) 2023.10.19
참조에 의한 호출 ( Call by Reference )  (0) 2023.10.12
값에 의한 호출 ( Call by Value )  (0) 2023.10.12