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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GameChoi

Choi Programming

[Direct11] 31. EX App Program - Quad Tesselation
C++ Algorithm & Study/Game Math & DirectX 11

[Direct11] 31. EX App Program - Quad Tesselation

2023. 6. 22. 18:22

1. EX App Program

1.1 Quad Tesselation

1.1.1 C++ 응용 프로그램

 - 제어점 네 개를 담는 정점 버퍼를 생성 및 사각형 패치를 입력 조립기 단계에 제출하는 함수 적용

D3D11_BUFFER_DESC vbd; XMFLOAT3 vertices[4]; D3D11_SUBRESOURCE_DATA vinitData;
HR(_device->CreateBuffer(&vbd, &vinitData, _quadPatchVB.GetAddressOf()));
md3dIediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_T0P0L0GY_4_C0NTR0L_P0INT_PATCHLIST);

1.1.2 Hull Shader

PatchTess ConstantHS(InputPatch<VertexOut, 4> patch, uint patchID : SV_PrimitiveID)

 - 이전 글과 동일하나 시점과의 거리에 따라 테셀레이터 계수들을 결정

   - 물체가 멀리 있으면 저다각형 메시를 사용, 시점에 가까워짐에 따라 테셀레이셔 정도를 증가

     - 4개의 패치의 중점을 구해 세계 공간에서 패치의 중점을 구하고 카메라와의 거리를 구함

PatchTess pt;
float3 centerL = 0.25f * (patch[0].PosL + patch[1].PosL + patch[2].PosL + patch[3].PosL);
float3 centerW = mul(float4(centerL, 1.0f), gWorld).xyz;
float d = distance(centerW, gEyePosW);

     - 시점과의 거리에 따라 패치를 테셀레이션, [d0, d1] 구간으로 보간한 값을 사용

const float d0 = 20.0f; const float d1 = 100.0f;
float tess = 64.0f * saturate((d1 - d) / (d1 - d0));

     - 모든 테셀레이션 계수를 동일하게 설정해서 패치를 균등하게 세분화

       - ControlPoint Hull Shader는 동일

pt.EdgeTess[0] = tess; pt.EdgeTess[1] = tess; pt.EdgeTess[2] = tess; pt.EdgeTess[3] = tess;
pt.InsideTess[0] = tess; pt.InsideTess[1] = tess;
return pt;

1.1.3 Domain Shader

[domain("quad")]
DomainOut DS(PatchTess patchTess, float2 uv : SV_DomainLocation, const OutputPatch<HullOut, 4> quad)

 - 사각형을 단순히 세분하는 것만으로 표면에 세부사항을 추가X

   - 새로 생긴 정점들의 위치를 우리가 나타내고자 하는 물체의 실제 형태에 좀 더 근접하게 이동

     - 겹선형 보간을 통해 보간

DomainOut dout;
float3 v1 = lerp(quad[0].PosL, quad[1].PosL, uv.x); float3 v2 = lerp(quad[2].PosL, quad[3].PosL, uv.x);
float3 p = lerp(v1, v2, uv.y);

     - 변위 매핑을 적용하여 물체의 실체 형태를 변경하고 카메라 공간의 위치로 변경하고 출력

p.y = 0.3f * (p.z * sin(p.x) + p.x * cos(p.z));
dout.PosH = mul(float4(p, 1.0f), gWorldViewProj);
return dout;
저작자표시 (새창열림)

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

[Direct11] 33. 3D Direct Application - Instancing & Culling  (0) 2023.06.26
[Direct11] 32. 3D Direct Application - Camera  (0) 2023.06.26
[Direct11] 30. Direct3D Tesselation  (0) 2023.06.22
[Direct11] 29. EX App Program - Blur System  (0) 2023.06.21
[Direct11] 28. Direct3D Compute Shader - Blur System  (0) 2023.06.21
    'C++ Algorithm & Study/Game Math & DirectX 11' 카테고리의 다른 글
    • [Direct11] 33. 3D Direct Application - Instancing & Culling
    • [Direct11] 32. 3D Direct Application - Camera
    • [Direct11] 30. Direct3D Tesselation
    • [Direct11] 29. EX App Program - Blur System
    GameChoi
    GameChoi

    티스토리툴바