DirectX 11 3d

230509 skybox 개선 (스피어->큐브)

슬뷔 2023. 5. 11. 18:19

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