Graphics

Texture 사용하기

RUNNING_OJUNG 2024. 5. 14. 17:03

Texture2D 데이터를 언제 GPU로 옮기는 것일까?

Constants Buffer~SetConstantBuffers()함수로 통해서 설정하기만 하면 된다.

상수 버퍼는 프로그램 가능 셰이더 단계들에 연결하고 HLSL에 접근하는 버퍼이지만, 그 내용을 자원 뷰가 다르게 해석해야 할 여지는 없다. 따라서, 그대로 노출되는 상수버퍼는 자원 뷰를 사용할 필요가 없다.
HLSL 안에서 상수 버퍼는 cbuffer라는 키워드를 이용해서 선언하는 구조체에 대응된다.

그렇다면 Texture2D는 어떻게 해야할까?

  1. SRV를 통해서 등록해서 사용해야 한다. 그럼 어디서 SRV에 등록해야할까? 해당 코드에서 볼 수 있듯이, 모델을 불러오면서 SRV를 초기화해주는 것을 알 수 있다.
    if (!meshData.albedoTextureFilename.empty()) {
     D3D11Utils::CreateTexture(
         device, context, meshData.albedoTextureFilename, true,
         newMesh->albedoTexture, newMesh->albedoSRV);
     m_materialConstsCPU.useAlbedoMap = true;
    }
  2. How the SRV use? context->PSSetShaderResources(0, UINT(resViews.size()), resViews.data()); 해당 함수를 사용해서 PS에 다가 SRV를 binding해주는 것이다.
  3. binding된 순서대로 HLSL 코드에서 Texture2D ~~ : register(t0)과 같은 형식으로 Texture2D 데이터를 이용할 수 있다.

Texture가 깨지는 현상이 발생. 왜 그런걸까?

  • 혹시나 해서 그냥 albedoColor만 출력해보았지만, 똑같이 깨지는 현상이 발생한다.
  • 내가 Sampler를 초기화 안해줘서 그런거였음...

빛의 3원색은 더해서 하얀색이 되어야하는건데..

  • 왜 곱셈으로 표현할까? 해서 덧셈으로 바꿨는데 하얀색으로만 출력된다.
  • 기본적으로 색표현을 0255가 아닌 0.01.0으로 표현하기 때문에 발생하는 현상이다.
  • 덧셈으로 바꾸고 싶으면 귀찮지만 소수점 -> 정수 -> 소수점으로 바꾸는 과정을 취하면 될 것이다.