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 |