ํด ,,, ๋๋์ด ์ฑ๊ณตํ๋ค..
ํ๋ธ๋งต ์์ฒด๋ฅผ ๋ง๋๋ ๊ฑด ์ด๋ ต์ง ์๋ค.
ํ์ง๋ง ์ด์ ํ๋ก์ ํธ์ ํ๋ธ๋งต ํ๋ก์ ํธ์์ ๋ฌ๋ผ์ง๋ ๊ฒ์ด ๋ง์๋ค.
๋งค ์ฅ ์๋ก์ด ๊ฑธ ๋ฐ์๋ค์ด๋ ๋ถ๋ถ์์ ์ ๊ณตํด ์ฃผ๋ ์ฝ๋์ ๋น๊ตํด ๋ณด๋ฉด ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ด ๋ง๋ค
directX12 ๋ฌธ๋ฒ์ ์ดํดํ๊ณ ์ฐ๊ด์ฑ์ ์์์ผ๋ง ํ๋ธ๋งต์ ์์ฑํ ์ ์์๋ค.
1. ํ๋ธ๋งต cubeMap / ์ ๋ฐฉ์ฒด ๋งคํ
ํ๋ธ๋งต์ ํ ์ค์ฒ๋ ๋จ์ง ํ ์ค์ฒ ์ฌ์ฏ ์ฅ์ ๋ด์ ๋ฐฐ์ด์ด๋ค.
2. ํ๋ธ๋งต ์ ์ฉํ๊ธฐ
๐ธ1) RootSignature
Texture Cube๋ฅผ ์์ด๋์ ์ฐ๊ฒฐํ๊ธฐ ์ํด table์ ๋ง๋ค์ด์ค๋ค.
์ฌ๊ธฐ์ ๋นจ๊ฐ์์ผ๋ก ํ์ํ RootParameterIndex(3)์ Texture Cube๋ก ๋ง๋ค ๊ฑฐ๊ณ Init ๋งค๊ฐ๋ณ์ 3๋ฒ์งธ ์ธ์ 0์ด๋ฏ๋ก shader์์ t0์ผ๋ก ์ฌ์ฉ๋๋ค.
๐ธ2). ํ๋ธ๋งต ํ ์ค์ฒ/๋งคํฐ๋ฆฌ์ผ ๋ก๋ํ๊ธฐ
๐ธ3) ์์ ์ ๋ง๋ค๊ธฐ (DescriptorHeap)
- ๊ณ์ํด์ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ์๋ค๋ฉด NumDescriptors์ ๊ฐ์๊ฐ ๋์ด๋๊ณ ์์๊ฒ์ด๋ค .. ์์ด๋ ๋ฆฌ์์ค ๋ทฐ์ ๊ฐ์๋ฅผ ์ ์ธ์ด์ ํฌ๊ธฐ๋ฅผ ์ง์ ํด ์ฃผ์.
์ฐจ์ ์์ฑ์ D3D12 SRV DIMENSION TEXTURECUBE๋ก ํด์ค์ผ ํ๋ค.
ํ๋ธ๋งต๋ง ๋ฐ๋ก ์์ ์ ํ์ ๋ง๋ค์ด์ ํ ๋นํ ๊ฒ ์๋๋ฉด ๋ช ๋ฒ์งธ ์์ ์๊ฐ TextureCube์ธ์ง ์์์ผ ํ๋ฏ๋ก mSkyTexHeapIndex์ผ๋ก ํ๋ธ๋งต ์์ ์ ์ธ๋ฑ์ค๋ฅผ ๋งต๋ฒ๋ณ์๋ก ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
๐ธ4) ํ์ดํ๋ผ์ธ ๋ง๋ค๊ธฐ
sky pso ๋ง๋ค๊ธฐ
๊ฐ๋ณ์ ์ธ ์
ฐ์ด๋ ํ๋ก๊ทธ๋จ๋ค์ด ์ฐ์ด๋ฏ๋ก ๋ฐ๋ก ๋ง๋ค์ด์ค๋ค.
CullMode: ์นด๋ฉ๋ผ๊ฐ ๊ตฌ์ ๋ด๋ถ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ฉด ์ ๋ณ์ ๋นํ์ฑํํด์ผ ํ๋ค.
skyPsoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;
DepthFunc: LESS_EQUAL ํ๋ ๊ตฌ๊ฐ ๊น์ด ํ์ ์ ํต๊ณผํ๋ค.
๐ธ5) Draw ํจ์
3๋ฒ์์ ๋ณธ mSkyTexHeapIndex ์ธ๋ฑ์ค 7๋ฒ DescriptorHeap์ 1๋ฒ์์ ๋ณธ (RootParameterIndex 3๋ฒ) ์ ์ฐ๊ฒฐํ๊ฒ ๋ค. ์ฆ t0์ ๋ํจ์ฆ ํ ์ค์ณ mSkyTexHeapIndex์ ์๋ ๋งคํฐ๋ฆฌ์ผ ์ ๋ณด๋ฅผ ๋ฃ๊ฒ ๋ค๊ณ ๋ฐ์๋ค์ด๋ฉด ๋๋ค.
๐ธ6) ์ฐ๊ฒฐํ ์์ด๋ ์ฝ๋
์ค์ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
์นด๋ฉ๋ผ๊ฐ ์ธ๊ณ ์์ ์ด๋ ์ง์ ์ผ๋ก ๊ฐ๋ ํ๋ ๊ตฌ์ ํ๋ฉด์ ๊ฐ๊น์์ง๊ฑฐ๋ ๋ฉ์ด์ง๋ ์ผ์ ์๋ค.
์ธ๊ณ ๊ณต๊ฐ์์ ํ๋ ๊ตฌ์ ์ค์ฌ์ ์นด๋ฉ๋ผ ์์น์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์นด๋ฉ๋ผ๊ฐ ์์ง์ผ ๋ ํ๋ ๊ตฌ๋ ๋ฐ๋ผ ์์ง์ด๋ฏ๋ก ์นด๋ฉ๋ผ๊ฐ ํ๋ ๊ตฌ์ ํ๋ฉด์ ๊ฐ๊น์์ง์ง๋ ๋ฉ์ด์ง์ง๋ ์๋๋ค.
3. StructuredBuffer
์ด์ ๋ถํฐ ๋งคํฐ๋ฆฌ์ผ์ structuredBuffer์ ๋ด์์ ๊ด๋ฆฌํ๋ค.
(1) - Texture2D gDiffuseMap[8] : register(t1);
(2) - StructuredBuffer<MaterialData> gMaterialData : register(t0, space1);
(1) - Texture2D gDiffuseMap[8] : register(t1);
(2) - StructuredBuffer gMaterialData : register(t0, space 1);
์์ (2)๊ฐ์ด structuredBuffer์ ํํํ ์ ์๋ค. ๋ฐฐ์ด์ฒ๋ผ ์ธ๋ฑ์ค ์ ๊ทผํด์ ์ฌ์ฉํ๊ณ , ์ ๋ฌธ๋ฒ์ ์ฌ์ง ์๋ฃ๋ฅผ space 1์ ๋ฐฐ์ ํ๋ค๋ ๋ป์ด๋ค.
(1) ๋ฒ์ ํ
์ค์ฒ ๋ฐฐ์ด์ space 0์ ๋ ์ง์คํฐ t0, t1, t2, ....., t7์ ์ฐจ์งํ๋ค.
๊ทธ๋ผ ์์ด๋ ์ฝ๋์ StructuredBuffer ๋งคํฐ๋ฆฌ์ผ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. (๋๋ ์ฌ๊ธฐ์ ํ๋ฃจ๋ฅผ ๋ค ์จ๋ฒ๋ ธ๋ค.. ๊ณ์๋๋ ์ค๋ฅ ๋๋ฌธ์.. ํด๋ณด๋ฉด ๋ณ๊ฑฐ ์์.)
1) StructuredBuffer๋ constantBuffer๊ฐ ์๋๋ค.
constrantBuffer๋ CreateCommittedResource์ ๋ง๋ค ๋ ์์ ๋ฒํผ์ ํฌ๊ธฐ๋ ํ๋์จ์ด์ ์ต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํฌ๊ธฐ์ ๋ฐฐ์๊ฐ ๋์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก 256๋ฐฐ์ ์๋ก ์ฌ๋ฆผ ํด์ผ ํ๋ค. ๋ฒํผ ํฌ๊ธฐ๋ฅผ ํ ๋นํ๋ ๋ถ๋ถ์ด ๋ค๋ฅด๋ ์ด ๋ถ๋ถ์ ๊ผญ !! ์ฑ๊ธฐ์.
(๋ง์ฝ, ๊ฐ์ ์ฑ ์ผ๋ก ๊ณต๋ถํ์๋ ๋ถ์ด๋ผ๋ฉด FrameResource.cpp// std::make_unique(device, materialCount, false); false!! ๊ผญ false๋ก ๋ฐ๊ฟ์ฃผ์ธ์. ~~)
2) RootSignature๋ก space 1์ ์ฐ๊ฒฐํด ์ฃผ์.
t0๋ถํฐ ์ฌ์ฉํ๊ณ ์ถ์๋ฐ ์ฌ์ฉํ๊ณ ์๋ ํ ์ด๋ธ์ด ์๋ค๋ฉด, space N์ ์ฐ๊ฒฐํด ์ค๋ค.
slotRootParameter[2].InitAsShaderResourceView(0, 1);
3) ๊ฐ ๊ทธ๋ฆฌ๋ ์ค๋ธ์ ํธ๋ง๋ค ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋๋ค.
์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ธ๋ฑ์ค ์ ๊ทผ์ ํด์ผ ํ๋ค.
- ์ค๋ธ์ ํธ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ์ ๋ก๋ ๋ฒํผ ์ ๋ณด์ ๋งคํฐ๋ฆฌ์ผ ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ค.
- ๋งคํฐ๋ฆฌ์ผ ๋น๋์ matCBIndex์ ์ง์ ํ์ฌ ๋ด๊ฐ ์ฌ์ฉํ ํ ์ค์ฒ ์ฆ, ์ฌ์ง ์ ๋ณด๊ฐ ๋ช๋ฒ์งธ ๋งคํฐ๋ฆฌ์ผ์ธ์ง ์ง์ ํด ์ค๋ค.
ํ์ฌ ๊ทธ๋ ค ์ค ์ค๋ธ์ ํธ์ ๋งคํฐ๋ฆฌ์ผ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํด ์ฃผ๋ฉฐ hlsl์ ์ฐ๊ฒฐํ๋ค.
ํ๊ฒฝ๋งคํ ํด์ผํด์ ์์ง ์ด ํํธ ํ ๋ฐ ๋จ์๋ค.
'๐ฏ game engine > โฝ directX12' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DirectX12] ์๋์ฐ ๋งคํ (shadow mapping), ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ ์์ธ ์ ๋ฆฌ (0) | 2024.12.18 |
---|---|
[DirectX12] ์คํ ์ค(stencil) ๊ฑฐ์ธ ๋ง๋ค๊ธฐ (0) | 2024.11.07 |
[DirectX12] ์กฐ๋ช ์ ์ข ๋ฅ (0) | 2023.12.19 |
[DirectX12] ์กฐ๋ช ์ฐ์ฐ์ ์ํ ๋ฒ์ ๋ฒกํฐ, ๋ฒ์ ๋ฒกํฐ์ ๋ณํ (0) | 2023.12.14 |
[DirectX12] ์๊ธฐ๋ฅ์ ์ ์ ์ฐ๊ธฐ/๋ ๋๋ง ๊ณผ์ ์ดํดํ๊ธฐ (1) | 2023.12.12 |
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!