2020. 8. 1. 19:03ใPROGRAMMING/DirectX 12
[ DirectX 12 ๋ฉํฐ ์ค๋ ๋ ๋ ๋๋ง(Multi-Thread Rendering ]
๊ตฌํ ๊ธฐ๊ฐ์ ์ํ ์ฝ๋ ๋ถ์ 3์ผ, ํ๋ก์ ํธ์ ์ ์ฉ 4์ผ. ์ฝ ์ผ์ฃผ์ผ ์ ๋ ์๊ฐ์ด ์์๋๋ค.
ํ์ฌ ํ๋ก์ ํธ์์ ์ฌ์ฉ ์ค์ธ ์ค๋ ๋์ ๊ฐ์๋ 4๊ฐ์ด๋ค.
์ฑ๊ธ ์ค๋ ๋ ๋ ๋๋ง๊ณผ ๋ฉํฐ์ค๋ ๋ ๋ ๋๋ง์ ์ฑ๋ฅ์ ๋น๊ตํด๋ณด๊ฒ ๋ค.
์ฐ์ ์ฌ์ฉํ๊ณ ์๋ ๋ฉ์ฌ ๋ชจ๋ธ ๋ฐ์ดํฐ์ ์ ๋ณด์ด๋ค.
์ ๋๋ฉ์ด์ ์ ๋ณด๊ฐ ์๋ ์คํํฑ ๋ฉ์ฌ์ ๊ฒฝ์ฐ
vertex ์ ์ 11,400๊ฐ / index 3,800๊ฐ์ด๋ค.
์ ๋๋ฉ์ด์ ์คํค๋์ ํด์ผ ํ๋ ๋ค์ด๋๋ฏน ๋ฉ์ฌ์ ๊ฒฝ์ฐ
vertex ์ ์ 51,294๊ฐ / index 17,096๊ฐ์ด๋ค.
๋ชจ๋ ์ค๋ธ์ ํธ์ ๋ํด์ ์ธ์คํด์ฑ์ ์ ์ฉ X.
๋ชจ๋ ์ค๋ธ์ ํธ๋ vertex ์ ฐ์ด๋์ pixel ์ ฐ์ด๋๋ฅผ ํตํด ๋ ๋๋ง ํ๋ค.
๋ ธํธ๋ถ ๊ธฐ๊ธฐ ์ฌ์.
[ 1. StaticMesh x 1,000 ]
ํ ๋ฒ ์ฅ๋ฉด์ ๊ทธ๋ฆด ๋๋ง๋ค ๊ทธ๋ฆฌ๋ vertex์ ๊ฐ์๋ 11,400 * 1,000 = 11,400,000๊ฐ.
๊ทธ๋ฆผ์ ๊น์ด๊น์ง ์ด 2๋ฒ์ ๊ทธ๋ฆฌ๋ฏ๋ก 11,400,000 * 2 = 22,800,000๊ฐ ์ด๋ค.
์คํํฑ ๋ฉ์ 1,000๊ฐ๋ฅผ ์ฑ๊ธ ์ค๋ ๋ ๋ ๋๋ง ํ ๊ฒฝ์ฐ ์ฝ 50 FPS๊ฐ ๋์จ๋ค.
(์ข์ธก ํ๋จ or ์ฐ์ธก ์๋จ์ FPS ์ ๋ณด ์ถ๋ ฅ)
์คํํฑ ๋ฉ์ 1,000๊ฐ๋ฅผ ๋ฉํฐ ์ค๋ ๋ ๋ ๋๋งํ ๊ฒฝ์ฐ ์ฝ 55 FPS๊ฐ ๋์จ๋ค.
(์ข์ธก ํ๋จ or ์ฐ์ธก ์๋จ์ FPS ์ ๋ณด ์ถ๋ ฅ)
์ฑ๋ฅ์ด ์ฝ 10% ํฅ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. (50 FPS --> 55 FPS)
[ 2. StaticMesh x 3,000 ]
ํ ๋ฒ ์ฅ๋ฉด์ ๊ทธ๋ฆด ๋๋ง๋ค ๊ทธ๋ฆฌ๋ vertex์ ๊ฐ์๋ 11,400 * 3,000 = 34,200,000๊ฐ.
๊ทธ๋ฆผ์ ๊น์ด๊น์ง ์ด 2๋ฒ์ ๊ทธ๋ฆฌ๋ฏ๋ก 34,200,000 * 2 = 68,400,000๊ฐ์ด๋ค.
์คํํฑ ๋ฉ์ 3,000๊ฐ๋ฅผ ์ฑ๊ธ ์ค๋ ๋ ๋ ๋๋ง ํ ๊ฒฝ์ฐ ์ฝ 20 FPS๊ฐ ๋์จ๋ค.
(์ข์ธก ํ๋จ or ์ฐ์ธก ์๋จ์ FPS ์ ๋ณด ์ถ๋ ฅ)
์คํํฑ ๋ฉ์ 3,000๊ฐ๋ฅผ ๋ฉํฐ ์ค๋ ๋ ๋ ๋๋งํ ๊ฒฝ์ฐ ์ฝ 24 FPS๊ฐ ๋์จ๋ค.
(์ข์ธก ํ๋จ or ์ฐ์ธก ์๋จ์ FPS ์ ๋ณด ์ถ๋ ฅ)
์ฑ๋ฅ์ด ์ฝ 20% ํฅ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. (20 FPS --> 24 FPS)
[ 1. DynamicMesh x 100 ]
ํ ๋ฒ ์ฅ๋ฉด์ ๊ทธ๋ฆด ๋๋ง๋ค ๊ทธ๋ฆฌ๋ vertex์ ๊ฐ์๋ 51,294 * 100 = 5,129,400๊ฐ.
๊ทธ๋ฆผ์ ๊น์ด๊น์ง ์ด 2๋ฒ์ ๊ทธ๋ฆฌ๋ฏ๋ก 5,129,400 * 2 = 10,258,800๊ฐ์ด๋ค.
๋ค์ด๋๋ฏน ๋ฉ์ 100๊ฐ๋ฅผ ์ฑ๊ธ ์ค๋ ๋ ๋ ๋๋ง ํ ๊ฒฝ์ฐ ์ฝ 36 ~ 37 FPS๊ฐ ๋์จ๋ค.
(์ข์ธก ํ๋จ or ์ฐ์ธก ์๋จ์ FPS ์ ๋ณด ์ถ๋ ฅ)
๋ค์ด๋๋ฏน ๋ฉ์ 100๊ฐ๋ฅผ ๋ฉํฐ ์ค๋ ๋ ๋ ๋๋งํ ๊ฒฝ์ฐ ์ฝ 40 ~ 41 FPS๊ฐ ๋์จ๋ค.
(์ข์ธก ํ๋จ or ์ฐ์ธก ์๋จ์ FPS ์ ๋ณด ์ถ๋ ฅ)
์ฑ๋ฅ์ด ์ฝ 10% ํฅ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. (36 FPS --> 40 FPS)
[ 2. DynamicMesh x 200 ]
ํ ๋ฒ ์ฅ๋ฉด์ ๊ทธ๋ฆด ๋๋ง๋ค ๊ทธ๋ฆฌ๋ vertex์ ๊ฐ์๋ 51,294 * 200 = 10,258,800๊ฐ.
๊ทธ๋ฆผ์ ๊น์ด๊น์ง ์ด 2๋ฒ์ ๊ทธ๋ฆฌ๋ฏ๋ก 10,258,800 * 2 = 20,517,600๊ฐ์ด๋ค.
๋ค์ด๋๋ฏน ๋ฉ์ 200๊ฐ๋ฅผ ์ฑ๊ธ ์ค๋ ๋ ๋ ๋๋ง ํ ๊ฒฝ์ฐ ์ฝ 19 ~ 20 FPS๊ฐ ๋์จ๋ค.
(์ข์ธก ํ๋จ or ์ฐ์ธก ์๋จ์ FPS ์ ๋ณด ์ถ๋ ฅ)
๋ค์ด๋๋ฏน ๋ฉ์ 200๊ฐ๋ฅผ ๋ฉํฐ ์ค๋ ๋ ๋ ๋๋งํ ๊ฒฝ์ฐ ์ฝ 22 ~ 23 FPS๊ฐ ๋์จ๋ค.
(์ข์ธก ํ๋จ or ์ฐ์ธก ์๋จ์ FPS ์ ๋ณด ์ถ๋ ฅ)
์ฑ๋ฅ์ด ์ฝ 10% ~ 15% ํฅ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. (20 FPS --> 23 FPS)
[ ์ ๋ฆฌ ]
๋ฉํฐ์ค๋ ๋ ๋ ๋๋ง์ ํ ๊ฒฝ์ฐ ์ฝ 10% ~ 20%์ ๋ ๋๋ง ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค.
์ค๋ ๋๋ฅผ 4๊ฐ๋ฅผ ์ฌ์ฉํ์์ง๋ง ์ฑ๋ฅ ํฅ์์ด 4๋ฐฐ๊ฐ ๋์ง ์๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. DirectX 12์์ CommandList์ ๋ ๋๋ง ๋ช ๋ น์ ๋์์ 4๊ฐ์ ์ค๋ ๋์์ ๋ด๋ ๊ฒ์ด์ง
๋์์ ์คํํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ์ฑ๊ธ ์ค๋ ๋ ๋ ๋๋ง์์๋ ๋ ๋๋ง ๋ช ๋ น๋ค์ด ๋ชจ๋ ๋ค์ด์จ ์ดํ์ GPU๊ฐ ์์ ์ ์์ํ๋ค.
๋ช ๋ น์ด ์ถ๊ฐ๋๋ ๋์์๋ GPU๋ ์ผ์ ์ ํ๊ณ ๋๊ณ ์๋ ๊ฒ์ด๋ค.
DirectX 12 ๋ฉํฐ์ค๋ ๋ ๋ ๋๋ง์
์ค๋ ๋(Thread)๋ฅผ ํตํด ๋ช ๋ น๋ค์ ๋น ๋ฅด๊ฒ GPU์ ๋ฃ์ด์ค์ ์คํ์ํค๊ณ ,
๋ช ๋ น๋ค์ด ์คํ๋๋ ๋์์ ์์ง ๋จ์์๋ ๋ช ๋ น๋ค์ GPU๋ก ๋ค์ ๋ณด๋์ผ๋ก์จ
GPU๊ฐ ๋ ๋๋ง ์์ ์ ์ฌ๊ณ ์๋ ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค.
2. ๋ ๋๋ง ์์ ๋๊ธฐํ๋ฅผ ์ํ ExecuteCommandLists() ํจ์ ํธ์ถ ํ์.
๊ทธ๋ฆผ์ ๊น์ด ๋งต์ด ๋จผ์ ๊ทธ๋ ค์ง๊ณ , ์ดํ์ ์ค๋ธ์ ํธ๋ค์ด ๊ทธ๋ ค์ ธ์ผ ํ๋ฏ๋ก
์ด ๋๊ธฐํ ์์๋ฅผ ๋ง์ถ๊ธฐ ์ํด ExecuteCommandLists() ํจ์ ํธ์ถ ํ์๊ฐ ๋ง์์ก๋ค.
ExecuteCommandLists()๋ ๊ต์ฅํ ๋ฌด๊ฑฐ์ด ์์ ์ ํ๋ ํจ์์ด๊ธฐ ๋๋ฌธ์
ํธ์ถ ํ์๊ฐ ๋ง์์ง๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๊ฒ ๋๋ค.
์ค๋ ๋ ์์ ๋๊ธฐํ - MicroSoft์ DirectX 12 ์ํ ์์ ๋ฅผ ์ฐธ์กฐ.
CommandList ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ - ์ ์์ฒ ๋์ PPT ์ฌ๋ผ์ด๋๋ฅผ ์ฐธ์กฐ.
์ด ์ธ ์ฐธ๊ณ ์๋ฃ ์ฌ์ดํธ.
'PROGRAMMING > DirectX 12' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DirectX 12 ๋ฃจํธ ์๋ช (Root Signature)๊ณผ ํ์ดํ๋ผ์ธ ์ํ(Pipeline State) (0) | 2020.08.01 |
---|---|
DirectX 12 ๋ฆฌ์์ค ์ฅ๋ฒฝ(Resource Barrier) (0) | 2020.07.29 |
DirectX 12 ๋ทฐ ํฌํธ(Viewprot)์ ์์ ์ฌ๊ฐํ(ScissorRect) (0) | 2020.07.28 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (5) - part 2 (0) | 2020.07.27 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (5) - part 1 (3) | 2020.07.25 |