GameChoi
Choi Programming
GameChoi
전체 방문자
오늘
어제
  • 분류 전체보기 (468)
    • C++ Algorithm & Study (184)
      • C++ & Algorithm Strategies (45)
      • Game Math & DirectX 11 (72)
      • Server + UE5 (29)
      • Lyra Clone Coding (37)
    • Create Game (284)
      • [Window API] Game Client & .. (55)
      • [DirectX] DirectX 2D & 3D (155)
      • [UE5] BLUEPRINT & C++ (74)
    • odds and ends (0)
      • English (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Algorithm Strategies
  • UE5
  • RPG Game
  • Player Move Packet
  • core
  • Destination Move Packet
  • Game Server
  • protobuf
  • Network Worker
  • job queue
  • GAME Client
  • server
  • c++
  • Other Character
  • Player State
  • client
  • Game Room
  • Direct11
  • session
  • Direct3D

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GameChoi

Choi Programming

[Direct11] 10. Direct3D Effect Framework
C++ Algorithm & Study/Game Math & DirectX 11

[Direct11] 10. Direct3D Effect Framework

2023. 6. 14. 19:30

1. Direct3D Effect Framework

1.1 Effect Framework

 - 특정한 렌더링 효과를 구현하는 데 함께 쓰이는 셰이더 프로그램

   - 렌더 상태들을 효과라고 부르는 단위로 조직화하고 관리하는 틀을 제공하는 편의용 코드 집합

     - 물을 렌더링하기 위한 셰이더 프로그램들과 렌더 상태들을 하나의 효과로 둘 수 있음

       - 구름, 금속 물체, 캐릭터 애니메이션을 위한 것들을 각각 개별적인 효과로 두어서 관리

         - 하나의 효과는 하나의 정점 셰이더 & 하나의 픽셀 셰이더, 그 효과를 구현하는데 필요한 렌더 상태로 이루어짐

1.1.1 Effect File

 - 셰이더 코드와 상수 버퍼의 내용을 담을 뿐아니라 하나의 기법 정의 & 패스를 포함

   - technique11로 시작하는 Section은 하나의 기법을 정의

     - 특정 렌더링 기법을 구현하는 데 쓰이는 하나 이상의 패스들로 구성

       - 각 패스마다 기하구조를 다른 방식으로 렌더링 & 각 패스의 결과를 특정 방식으로 결합

   - pass로 시작하는 Section은 하나의 패스를 정의

     - 하나의 패스는 하나의 정점 셰이더 & 픽셀 셰이더, 렌더 상태로 구성

       - 추가적으로 기하 셰이더와 테셀레이션 관련 셰이더들이 포함될 수 있음

         - 이 패스에서 기하구조를 어떻게 처리하고 색을 입힐 것인지 규정

technique11 ColorTech
{
    pass PO
    {
        SetVertexShader(CompileShader(vs_5_0, VS()));
        SetPixelShader(CompileShader(ps_5_0, PS()));
    }
}

   - Render State 또한 패스의 한 구성요소

     - 직접 상태 집합을 생성하고 설정하는 것이 가능하고 구체적인 렌더 상태하에서 작동하는 효과에 유용

RasterizerState WireframeRS { FillMode = Wireframe; CullMode = Back; FrontCounterClockwise = false; }
technique11 ColorTech
{
technique11 T0
{
    pass P0
    {
        SetVertexShader(CompileShader(vs_5_0, VS()));
        SetPixelShader(CompileShader(ps_5_0, PS()));
        
        SetRasterizerState(WireframeRS);
    }
}

1.1.2 Complie Shader

 - 위의 설정 효과를 실제로 사용하려면 fx파일 안에 셰이더 프로그램들을 컴파일해야 함

   - 밑의 함수를 사용하여 컴파일 실행

HRESULT D3DX11CompileFromFile;

     - File Name, Shader Main Function, Shader Version, Blob 구조체 등 필요

   - 효과 파일에 대해 성공적으로 컴파일이 된다면 다음 함수를 이용하여 효과 자체를 나타내는 객체를 생성

HRESULT D3DXllCreateEffectFromMemory;

 - Direct3D 자원의 생성은 비용이 큰 연산이므로 항상 응용 프로그램의 주 루프가 아닌 초기화 시점에 수행

1.1.3 C++ Code & Effect File

 - 응용 프로그램은 상수 버퍼의 변수들을 갱신

   - 밑의 코드와 같이 상수 버퍼가 정의되어 있으면 효과 객체를 통해 상수 버퍼 변수에 대한 포인터를 얻음

cbuffer cbPerObject { float4x4 gWVP; }
ID3DXllEffectMatrixVariable* fxWVPVar;
fxWVPVar = mFX->GetVariableByName("gWVP")->AsMatrix();

   - 위의 코드로 인해 상수 버퍼에 대한 포인터를 알 수 있으므로 포인터를 사용하여 값 변경

fxWVPVar->SetMatrix((float*)&M);

     - 효과 객체의 내부 캐시가 갱신되는 것일 뿐 GPU메모리에 있는 실제 상수 버퍼가 갱신되는 것은 아님

       - 실질적인 갱신은 렌더링 패스를 수행할 때 일어남
   - 렌더링을 수행하려면 효과 객체에 있는 기법 객체를 가리키는 포인터도 얻어야 함

ID3DXllEffectTechnique* mTech; mTech = mFX->GetTechniqueByName("ColorTech");

1.1.4 Effect File & Drawing

 - 상수 버퍼의 변수들을 적절히 갱신 후 루프로 기법의 각 패스를 훑으면서 각 패스를 적용하여 기하구조를 그림

   - 하나의 패스에서 기하구조를 그릴 때에는 그 패스에 설정된 셰이더들과 렌더 상태들이 적용

     - 주어진 Index를 가리키는 포인터를 사용하여 GPU 메모리에 저장된 상수 버퍼를 새 변수 값들로 갱신

     - 패스에 설정된 셰이더 프로그램들을 파이프라인에 묶고, 패스에 설정된 렌더 상태들을 적용

for (uint32 p = 0; p < techDesc.Passes; ++p)
{
    _tech->GetPassByIndex(p)->Apply(0, _deviceContext.Get());
    _deviceContext->DrawIndexed(36, 0, 0);
}
저작자표시 (새창열림)

'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글

[Direct11] 12. EX App Program - Hills  (1) 2023.06.14
[Direct11] 11. EX App Program - Color Box  (0) 2023.06.14
[Direct11] 9. Direct3D API Interface & Function #2  (0) 2023.06.14
[Direct11] 8. Direct3D API Interface & Function #1  (0) 2023.06.14
[Direct11] 7. Rendering Pipeline - Pixel Shader & Output Merger (PS & OM)  (0) 2023.06.13
    'C++ Algorithm & Study/Game Math & DirectX 11' 카테고리의 다른 글
    • [Direct11] 12. EX App Program - Hills
    • [Direct11] 11. EX App Program - Color Box
    • [Direct11] 9. Direct3D API Interface & Function #2
    • [Direct11] 8. Direct3D API Interface & Function #1
    GameChoi
    GameChoi

    티스토리툴바