1. skybox 개선
몰려있는 느낌이 드는걸 개선해야한다 => 스피어 매쉬일때 이런 현상이 일어남
요즘은 그래서 큐브 매쉬를 많이 사용한다!
텍스쳐 6장을 사용해서 큐브형태를 만든다 (다이렉트에서는 dds 포맷을 사용함)
void CSkyBox::SetType(SKYBOX_TYPE _Type)
{
m_Type = _Type;
if (SKYBOX_TYPE::SPHERE == _Type)
{
SetMesh(CResMgr::GetInst()->FindRes<CMesh>(L"SphereMesh"));
}
else if (SKYBOX_TYPE::CUBE == m_Type)
{
SetMesh(CResMgr::GetInst()->FindRes<CMesh>(L"CubeMesh"));
}
SetMaterial(CResMgr::GetInst()->FindRes<CMaterial>(L"SkyBoxMtrl"));
GetMaterial()->SetScalarParam(INT_0, &m_Type);
}
어떻게 원하는대로 샘플링하여 랜더링할 수 있을까 ?
GPU차원에서 HLSL에 연산을 쉽게할 수 있게 내장되어? 있다.
기존에는 샘플링 할 때, UV좌표를 사용했다면 큐브벡터는 방향벡터를 사용한다.
중심에서 원하는 지점을 향하는 방향벡터(float3 position)를 알려주면 된다.
로컬스페이스 기준으로 알려주면 된다!
로컬스페이스 상에서 큐브 정점을 인덱스버퍼 감안해서 24개를 만든다.
정점자체가 곧 로컬스페이스에서의 좌표가 곧 본인의 위치이면서 본인의 방향이다.
(단위벡터로 만들어서 nomalize를 해야한다)
면을 채우는 애들이 여기로 ? (어딘지모름) 향하는 방향을 알아야하는데 빨간점에 있는 정점들이 자기의 방향값 로컬스페이스에서의 위치를 픽셀쉐이더로 넘기면 그 내부로 들어오는 픽셀들이 보간된 값이 들어와 원점을 향하는 본인의 방향값이 나오게 된다.
쉐이더 코드 상에서
// SkyBox 가 Cube 타입인 경우
else if (g_int_0 == 1)
{
vOutColor = g_cube_0.Sample(g_sam_0, _in.vLocalPos);
}
'DirectX 11 3d' 카테고리의 다른 글
230511 멀티랜더타겟(MRT) (0) | 2023.05.13 |
---|---|
230510 노말맵핑 (0) | 2023.05.11 |
230508 (0) | 2023.05.11 |
220504 (0) | 2023.05.10 |
220503 (0) | 2023.05.09 |