![[DirectX12] ์๋์ฐ ๋งคํ (shadow mapping), ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ ์์ธ ์ ๋ฆฌ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBav4B%2FbtsLn7ZWbu5%2F3SkV7C8SOb9cOCLSmKtdu0%2Fimg.png)
1. ์ฅ๋ฉด ๊น์ด ๋ ๋๋ง ๊ด์์ ์์ ์์ ๋ณธ ์ฅ๋ฉด์ ๊น์ด๋ฅผ ๋ ๋๋งํ๋ ๊ณผ์ ์ด ์๋ค. ์ด๋ ํ ์ค์ฒ ๋์ ๋ ๋๋ง ( render - to - texture )์ ์ผ์ข ์ด๋ฉฐ, ๊ด์์ ์์ ์์ ๋ณธ ์ฅ๋ฉด์ ๊น์ด ๊ฐ๋ค์ ๊น์ด ๋ฒํผ์ ๊ธฐ๋กํ๋ ๊ฒ์ ๋ปํ๋ค. ๊ทธ๋ฆผ์ ๋งคํ ์๊ณ ๋ฆฌ์ฆ์๋ ๋ ๋ฒ์ ๋ ๋๋ง ํจ์ค๊ฐ ํ์ํ๋ค. ๊ด์์ ์์ ์์ ๋ณธ ์ฅ๋ฉด ๊น์ด๋ฅผ ๊ทธ๋ฆผ์ ๋งต์ ๋ ๋๋งํ๋ ์ด์ด ์นด๋ฉ๋ผ์์ ๋ณธ ์ฅ๋ฉด์ ํ๋ฉด ๋ฒํผ์ ๋ ๋๋ง 2. ์ง๊ต ํฌ์/์ ์ฌ์ (Orthographic_Projection)๊ทธ๋ฆผ์ ๋งคํ์์ ํํ ๊ด์ด ๋ง๋ค์ด ๋ด๋ ๊ทธ๋ฆผ์๋ฅผ ๋ณธ๋ฐ๋ ์ง๊ต ํฌ์์ด ํ์ํ๋ค. (2.1). ์ง๊ต ํฌ์ ํ๋ ฌ ๊ตฌํ๊ธฐ (orthogonal_projection_matrix) ๋ฒกํฐ๋ฅผ ํน์ ๋ฒกํฐ ๊ณต๊ฐ ๋๋ ๋ถ๋ถ ๊ณต๊ฐ์ ์ง๊ต์ ์ผ๋ก ํฌ์ํ ๋ ์ฌ์ฉํ๋..
![[DirectX12] ํ๋ธ๋งต ๋ง๋ค๊ธฐ / StructuredBuffer](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fddpto9%2FbtsKWnQ3Aan%2FVajY9S2DAiwApSe9IDmz81%2Fimg.png)
ํด ,,, ๋๋์ด ์ฑ๊ณตํ๋ค..ํ๋ธ๋งต ์์ฒด๋ฅผ ๋ง๋๋ ๊ฑด ์ด๋ ต์ง ์๋ค.ํ์ง๋ง ์ด์ ํ๋ก์ ํธ์ ํ๋ธ๋งต ํ๋ก์ ํธ์์ ๋ฌ๋ผ์ง๋ ๊ฒ์ด ๋ง์๋ค.๋งค ์ฅ ์๋ก์ด ๊ฑธ ๋ฐ์๋ค์ด๋ ๋ถ๋ถ์์ ์ ๊ณตํด ์ฃผ๋ ์ฝ๋์ ๋น๊ตํด ๋ณด๋ฉด ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ด ๋ง๋คdirectX12 ๋ฌธ๋ฒ์ ์ดํดํ๊ณ ์ฐ๊ด์ฑ์ ์์์ผ๋ง ํ๋ธ๋งต์ ์์ฑํ ์ ์์๋ค. 1. ํ๋ธ๋งต cubeMap / ์ ๋ฐฉ์ฒด ๋งคํํ๋ธ๋งต์ ํ ์ค์ฒ๋ ๋จ์ง ํ ์ค์ฒ ์ฌ์ฏ ์ฅ์ ๋ด์ ๋ฐฐ์ด์ด๋ค. 2. ํ๋ธ๋งต ์ ์ฉํ๊ธฐ ๐ธ1) RootSignature Texture Cube๋ฅผ ์์ด๋์ ์ฐ๊ฒฐํ๊ธฐ ์ํด table์ ๋ง๋ค์ด์ค๋ค.์ฌ๊ธฐ์ ๋นจ๊ฐ์์ผ๋ก ํ์ํ RootParameterIndex(3)์ Texture Cube๋ก ๋ง๋ค ๊ฑฐ๊ณ Init ๋งค๊ฐ๋ณ์ 3๋ฒ์งธ ์ธ์ 0์ด๋ฏ๋ก shader์์ t0์ผ๋ก ์ฌ์ฉ๋๋ค. ?..
![[DirectX12] ์คํ
์ค(stencil) ๊ฑฐ์ธ ๋ง๋ค๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ6Mpi%2FbtsKyDT0bFr%2FE2YqYWKFI2a5ho9iep7G70%2Fimg.png)
1. ์คํ ์ค ๋ฒํผ Stencil Buffer๐ธ ํน์ง์คํ ์ค ๋ฒํผ๋ ํ๋ฉด ๋ฒํผ ๋ฐ ๊น์ด ๋ฒํผ์ ํด์๋๊ฐ ๊ฐ๋ค.์คํ ์ค ๋ฒํผ๋ฅผ ์ง์ ํ๋ฉด ๊ทธ ์คํ ์ค ๋ฒํผ๋ ๊น์ด ๋ฒํผ์ ๋ถ์ฐฉ๋๋ค.ํฝ์ ๋จํธ๋ค์ด ํ๋ฉด ๋ฒํผ์ ๊ธฐ๋ก๋์ง ๋ชปํ๊ฒ ํ๋ ์ญํ ์ ํ๋ค.CD3DX12_DEPTH_STENCIL_DESC๊ตฌ์กฐ์ฒด ์ฑ์ฐ๊ณ , D3D12_GRAPHICS_PIPELINE_STATE_DESC ์ค์ ํ๋ค. 2. ์คํ ์ค ํ์ ์คํ ์ค ๋ฒํผ๋ฅผ ์ด์ฉํ๋ฉด ์ฅ๋ฉด์ด ํ๋ฉด ๋ฒํผ์ ํน์ ์์ญ์๋ง ๋ ๋๋ง๋์ง ์๊ฒ ๋ง๋ค์ ์๋ค. ์คํ ์ค์ ์ ์ฉํ๋ ๊ฒฝ์ฐ, ์ฃผ์ด์ง ํ ํฝ์ ์ด ํ๋ฉด ๋ฒํผ์ ๊ธฐ๋ก๋๋์ง ์๋์ง๋ ์คํ ์ค ํ์ ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค. ์คํ ์ค ํ์ ์ ํฝ์ ์ด ๋์คํฐํ๋๋ ๊ณผ์ ์์, ์ฆ ์ถ๋ ฅ ๋ณํฉ๊ธฐ ๋จ๊ณ์์ ์ผ์ด๋๋ค. ํฝ์ ์ ํ์ฉ : ํ๋ฉด ๋ฒํผ์ ๊ทธ๋ฆฌ๊ฒ ๋ค. ํฝ์ ..
![[DirectX12] ์กฐ๋ช
์ ์ข
๋ฅ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzni3k%2FbtsCg2fTZ0w%2FEkeUrpQq8DbmpiWKGPo5Fk%2Fimg.png)
1. ์กฐ๋ช ์ ์ฃผ์ ๋ฒกํฐ 2. ๋๋ฒ ๋ฅดํธ ์ฝ์ฌ์ธ ๋ฒ์น [ Lambert's Cosine Law ] ๋น์์ ์ค์ํ ๊ฒ์ ๋จ์ ๋ฉด์ ๋น ๋ฐ๋ ๋น์ ์๋์ง(E) ์ด๋ค. ๊ฐ์ ์์ ๋น์ ๋น์ค๋ฌํ๊ฒ ๋น์ถ๋ ๊ฒ๋ณด๋ค ์ ๋ฉด์ผ๋ก ๋น์ถ๋ ๋น์ด ๋ ๊ฐํ ๋น์ด๋ค. ์ด๋ ๋น์ ์๋์ง = ๋ณต์ฌ์กฐ๋(๋จ์ ๋ฉด์ ๋น ๋ณต์ฌ ์ ์์ ๋ฐ๋) ํ ์์ญ์ ๋น์ ์์ ๊ฒฐ์ ํ๋ค. A1 ๋จ๋ฉด์ ์ธ ๋น์ ํ๋ฉด์ ์ ๋ฉด์ผ๋ก ๋๋ฆด ๋ ๊ฐ์ 0๋ (1๋ฒ)์ด๊ณ ๊ฐ์ ์(A1) ๋จ๋ฉด์ ์ธ ๋น์ ์ฌ์ ์ผ๋ก ๋๋ฆด ๋ ๊ฐ์ ์ธํ๋์ด๋ค. ์ด ๊ฐ์ผ๋ก ํตํด ๋ณต์ฌ์กฐ๋(๋จ์ ๋ฉด์ ๋น ๋ณต์ฌ ์ ์์ ๋ฐ๋)๋ฅผ ๊ตฌํ ์ ์๋ค. ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ผ๊ฐ๋ฒ์ ๋ฐ๋ผ 2๋ฒ์ E2๋ฅผ ๊ตฌํ๋ฉด, ์๋์ ๊ฐ์ ์์ด ๋์ถ๋๋ค. 3. ๋ถ์ฐ ์กฐ๋ช [ diffuse light / ๋๋ฐ์ฌ๊ด, ๋ถ์ฐ๊ด ] ๋น์ ์ด๋ค ๋ฌผ์ฒด ..
![[DirectX12] ์กฐ๋ช
์ฐ์ฐ์ ์ํ ๋ฒ์ ๋ฒกํฐ, ๋ฒ์ ๋ฒกํฐ์ ๋ณํ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9LcAc%2FbtsB1uJR4g6%2FTAlpHEPFPkvZUL8b3ouKDK%2Fimg.png)
๋ฌผ์ฒด์ ์ ์ฒด๊ฐ๊ณผ ๋ถํผ๊ฐ์ ํํํ๊ธฐ ์ํด ์กฐ๋ช (Lighting)๊ณผ ์์(Shadering)์ด ์ค์ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์กฐํ ๋ชจํ์ด ์ ํํ ์๋ก ๊ทธ ๊ณ์ฐ์ ๋น์ฉ์ ํฌ๊ณ ์ํ์ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ ๋๋ง ํด๋์ด๋ ๋๋ ์ฅ๋ฉด์ ๊ฒ์๊ฐ์ ์ค์๊ฐ ๋ ๋๋ง์ ํด์ผํ๋ ์ฅ๋ฉด๋ณด๋ค ๋น์ฉ์ด ๋ ๋๋ค. ์ฌ์ง(material)์ ๋น์ด ๋ฌผ์ฒด์ ํ๋ฉด๊ณผ ์ํธ์์ฉํ๋ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ์์ฑ๋ค์ ์งํฉ์ด๋ผ๊ณ ํ ์ ์๋ค. ํก์ํ๋ ๋น์ ์, ํ๋ฉด ์๋ ์ฌ์ง์ ๊ตด์ ๋ฅ , ํ๋ฉด์ ๋งค๋๋ฌ์ด ์ ๋, ํฌ๋ช ๋ ๋ฑ .. ๊ด์์ ๋ค์ํ ๋น์ ์์ ๋ผ ์ ์๊ณ ์ฌ๋ฌ๊ฐ์ง ์ธ๊ธฐ(intensity)๋ก ๋ฐฉ์ถํ๋ค. ๊ด์์์ ๋์จ ๋น์ด ๋ฌผ์ฒด์ ์ถฉ๋ํ๋ฉด, ๊ทธ ๋น์ ์ผ๋ถ๋ ํก์๋๊ณ ์ผ๋ถ๋ ๋ฐ์ฌ๋๋ค. ๋๋ถ๋ถ ๊ฒ์๊ณผ ๊ฐ์ ์ค์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ ์กฐํ ๋ชจํ์ ๊ตญ์ ์กฐ๋ช ๋ชจํ(loc..
![[DirectX12] ์๊ธฐ๋ฅ์ ์ ์ ์ฐ๊ธฐ/๋ ๋๋ง ๊ณผ์ ์ดํดํ๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoyPp9%2FbtsBMRTX7eZ%2FpnKgyhB7qVq71QD1Ei6kkK%2Fimg.webp)
์ ๋ด์ฉ์ ๋ง์ถฐ ๋ฒํ ์ค๋ฅผ ๋ง๋ค์ด๋ณด์. ์ธ๋ฑ์ค๋ ์๋ตํจ.float stackheight = height / stackCount; // ํ ์ธต ์์ ๋๋ฏธ๋ก ์ฌ๋ผ ๊ฐ ๋์ ๋ฐ์ง๋ฅผ ๋ณํ๋float radiusStep = (topRadius - bottomRadius) / stackCount;uint32 ringCount = stackCount + 1;for( uint32 i = 0; i ์์ ๊ฐ์ด ์ ์ ์ ๊ตฌํ๊ณ ์ธ๋ฑ์ค๋ฅผ ์ฐ์๋ค๋ฉด ๋ฐฐ์ด์ ๋ด์ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ฌ๋ผ๊ณ GPU์๊ฒ ์์ฒญํด์ผํ๋ค. DirectX12์์ GPU์๊ฒ ์์ฒญํ๋ ๊ณผ์ ์ ์์๋ณด์. ์ด์ ์ [Prev]CommandList๋ฅผ CommandQueue(GPU๊ฐ ์คํํ๋๋ก)์ ์ ์ถํ๊ณ ์๋กญ๊ฒ ๊ทธ๋ฆด ๋ช ๋ น๋ค์ [New]CommandList์ ๋ด์ CommnadQ..
![[DirectX12] Direct3D ์ด๊ธฐํ ๊ณผ์ , ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ์ CPU์ GPU์ ์ํธ์์ฉ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYNJVv%2FbtsBKfueAad%2FkmN4vJsy3n2JKnK6YWUwK0%2Fimg.webp)
๐ Direct3D ์ฅ์น ์ด๊ธฐํ ๊ณผ์ ๋ฐ ์ฉ์ด ์ ๋ฆฌ 1. ์์ ์(descriptor) ๊ฐ์ฒด ์์ ์๋ ์์ ์๋ฃ๋ฅผ ์ง์ ํ๋ ์๋จ์ผ ๋ฟ๋ง ์๋๋ผ ์์์ gpu์ ์์ ํ๋ ์๋จ์ด๊ธฐ๋ ํ๋ค. ์์ ์๋ direct3d์๊ฒ ์์์ ์ฌ์ฉ๋ฒ์(์์์ ํ์ดํ๋ผ์ธ์ ์ด๋ค ๋จ๊ณ์ ๋ฌถ์ด์ผ ํ๋์ง) ๋งํด์ค๋ค. Dirext3D ์์ฉ ํ๋ก๊ทธ๋จ์ ์์์ ์ง์ ํ์ดํ๋ผ์ธ์ ๋ฌถ์ง ์๋๋ค. ๋์ , ๊ทธ๋ฆฌ๊ธฐ ํธ์ถ์ด ์ฐธ์กฐํ ์์ ์๋ค์ ์ง์ ํจ์ผ๋ก์จ ์์์ ํ์ดํ๋ผ์ธ์ ๋ฌถ๋๋ค. 2. ์์ ์ ์ข ๋ฅ(ํ์) CBV ์์ ์ : constant buffer(์์ ๋ฒํผ)๋ฅผ ์์ ํ๋ค. SRV ์์ ์ : shader resource(์ ฐ์ด๋ ์์)์ ์์ ํ๋ค. UAV ์์ ์ : unordered access view(์์ ์๋ ์ ๊ทผ)์ ์์ ํ๋ค. ํ๋ณธ์ถ์ถ๊ธฐ ์์ ..