๊ฐ๋ฐ์ผ์ง ๋ชฉ๋ก
#1 - ํ๋ ์ด์ด ๊ธฐ๋ณธ ์กฐ์
#3 - ๋ฌด๊ธฐ ์ข ๋ฅ ์ถ๊ฐ ๋ฐ ์ ๊ทธ๋ ์ด๋ ๊ตฌํ
#6 - ์ฆ์ฌ ๊ณต๊ฒฉ, ๊ฐ๊น์ด ์ ํ์, ๋ฐ๋ฏธ์ง ํ๊ธฐ
#8 - ์ฑ๋ฅ ์ต์ ํ (์์งค ์ฃผ์)
#10 - ๋๋ฐฑ / ๋ฏธํฐ์ด ์คํธ๋ผ์ดํฌ
#11 - ๊ฒฝํ์น ๋ฐ ๋ ๋ฒจ์ UI
#13 - ์ํธ์์ฉ / ํ์ผ๋งต
#14 - ํ ๋ฌด๊ธฐ ๊ฐ์ ๋ฐ ์ถ๊ฐ / ํ๋ ์ด์ด ํ๋ก์ฐ
#20 - ๋งต (3) / ์ค๋ด / ๋ง์คํฌ
#21 - ์ฅ๋น ์
๊ทธ๋ ์ด๋ (1)
#22 - ์ฅ๋น ์
๊ทธ๋ ์ด๋ (2)
#23 - ํ
์คํธ ํ๋ ์ด & ์ค๊ฐ ์ ๊ฒ (1)
#25 - ๊ฒฝํ์น ์ค๋ธ์ ํธ ๊ฐ์
#27 - ํ๊ดด ๊ฐ๋ฅํ ์ค๋ธ์ ํธ
#32 - ์ํธ ์์ฉ ๋ฐ ๋ฏธ๋๋ณด์ค ๋ณด์ ์์
์๋ง
๋ง์ง๋ง ์ผ์ง๋ก๋ถํฐ ๋ฌด๋ ค 5์ฃผ.
๋ด์ผ๋ถํฐ ๋ค์ ๊ฐ๋ฐ ์์! ์ด๋ผ๋ ๊ธ์ ์์ฑํ์ง 4์ฃผ.
๋๊ธ์ ์ ํน์ ๋์ด๊ฐ๋ฒ๋ ค ์ด์ฌํ ๋กค์ ํ ๊ฒ์ด์์...
๊ทธ ๊ฒฐ๊ณผ ์๊ฐ ์ญ์ .
๋ค1~๋ง ์น๊ธ ๊ฐ๋ฑ ๋ฌดํ๋ฐ๋ณต.
200ํฌ๊น์ง ์ฐ์์ผ๋ ์์ง ํ๊ฐ.
130ํ ๋ํ๋๋ฐ ์ป์ ๊ฒ์ด ์๋ค?!
์ด์ ์ง์ง ๋กค ์ ์.
์ฌ์ค ๋กค ์ธ์๋ ์ด๊ฒ์ ๊ฒ ํ์ด.
์ ๋ํฐ ๋ฉํฐํ๋ ์ด์ด๋ ๊ณต๋ถํด๋ณด๊ณ ...
์ฌํ ๊ณํ๋ ์ง๊ณ ...
๋ฌธ์ ๋ฐ์
์ง๋ ๋ฒ(#26) ์ผ์ง์์ ๋ค์ธ ํ๋ ์ด๋ฅผ ์ํด ๊ธธ์ฐพ๊ธฐ๋ฅผ ๊ฐ์ ํด์ฃผ์์ด.
ํ์ง๋ง ์ด๋ฒ์ ๋งต์ ๋ง๋ค๊ณ ์ค์ฌ์ฉํ๋ ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ด !
1ํ์ผ ๋จ์๋ก ๊ณ์ฐํ๋ค๋ณด๋ ์์ ์ฝ๋ผ์ด๋์ ํ๋ ์ด์ด๊ฐ ํ ํ์ผ ๋ด์ ์์ผ๋ฉด,
์ฝ๋ผ์ด๋๊ฐ ํ๋ ์ด์ด์ ์์น๊ฐ ๋์ด ๋ฒฝ์ธ์์ ํ์ง ๋ชปํ๊ฒ ๋ผ.
๋๋ถ์ ์ฌ์ง์ฒ๋ผ ์ ๋ฒฝ ์๋์ ์ ์ด ์ ๋ฒฝ์ ๋ถ์ ํ๋ ์ด์ด์๊ฒ ๊ณง๋ฐ๋ก ํฅํ๋ ๋ชจ์ต์ด์ผ.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด 1ํ์ผ์ 4๊ฐ์ ํ์ผ๋ก ์ชผ๊ฐ์ฃผ์์ด.
๋จ์ํ 4ํ์ผ๋ก ํ์ผ ์ฒดํฌ๋ ๋ฒ์๋ง ์์ ํด์ฃผ๋ฉด ํด๊ฒฐ๋ผ.
ํ์ง๋ง ์ด๋ ๊ฒ ํด๊ฒฐํ๋ฉด ๋ฌธ์ ๊ฐ ์๊ฒจ.
์ฝ 7000๊ฐ์ ํ์ผ ๊ธธ์ฐพ๊ธฐ * ๋ /๊ณต์ค ํ์ * 4์ธ ํ๋ ์ด๊ฐ ํ์ํด.
๊ทธ๋ฐ๋ฐ ์ง๊ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ทธ๊ฑธ ์๋ํ๋ฉด
๋ด ์ปดํจํฐ ๊ธฐ์ค ๋น๋ ํ ์ฝ 3ms๋ฅผ ์์ํ๊ฒ ๋ผ.
๋ณดํต ์ฌ์ง์๊ณ ์์ง์ผํ ๋ ๋งค ํ๋ ์ ๊ณ์ฐํ๊ฒ ๋ ํ ๊ณ ,
ํฌ์ง๋ ์์ง๋ง ์์ง๋ ์์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ด.
๋ฐ๋ผ์ ํด๊ฒฐ์ฑ ์ผ๋ก ์๊ฐํ ๊ฒ์ ๋๊ฐ์ง.
1. ๊ธธ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ํ์.
2. ์ ๋ํฐ ์ก ์์คํ ์ ์ฌ์ฉํ์.
๋จผ์ 1๋ฒ์ด ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ผํ ๋ ๊ณ ๋ฏผํด๋ณด์์ด.
๊ธธ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
๊ธธ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ๋ฐฉ๋ฒ์ ๋ง์ง๋ง ๊ธธ์ฐพ๊ธฐ ์ผ์ง์ ์์ฑ๋์ด ์์ผ๋
๊ถ๊ธํ ์ฌ๋๋ค์ ์ฐธ๊ณ ํด๋ณด๋๋ก ํด.
๊ธธ์ฐพ๊ธฐ ์์คํ ์ ๋ง๋๋๋ฐ์ ๊ฐ์ฅ ๋์์ด ๋์๋ ์๋ฃ๋ถํฐ ์๊ฐํ๋๋ก ํ ๊ฒ.
https://youtu.be/ZJZu3zLMYAc?si=Om_sn45uauBzylJu
How do vector field Pathfinding algorithm work ?In today's video, we will see how to create from scratch a vector field pathfinding algorithm.Excuse all the english mistakes.All the animations were made on...youtu.be์ด ์ ํ๋ธ ์๋ฃ์์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋์ง ๊ฐ๋จํ ํ์ธํ ์ ์์ด.
https://www.gdcvault.com/play/1027659/Pathing-in-Age-of-Empires
GDC ๋ฐํ ppt์์๋ ์์ด์ง ์ค๋ธ ์ ํ์ด์ด์์ ์ด๋ค์์ผ๋ก ํ๋ก์ฐ ํ๋๋ฅผ ๋ง๋ค์๋์ง ํ์ธํ ์ ์์ด.
๋ฐํ์๋ฃ๋ฅผ ์ธ์ฉํ์๋ฉด, flowfield๋ 3๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ ๋ง๋ค์ด์ ธ.
1. ๊ฐ ํ์ผ์ ์ด๋๋น์ฉ์ ๋ํ๋ด๋ Cost Field.
์ฝ๋ผ์ด๋ ๋ฑ์ ์ด๋ ๋ถ๊ฐ๋ฅํ ๋ถ๋ถ๋ ์ฒดํฌํด
2. ๊ฐ ํ์ผ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๋ Integration Field.
BFS๋ฅผ ์ฌ์ฉํด์ ์ฌ์ง์ ๋ณ๋ถํฐ ์ธ์ ํ์ผ๋ค์ ํ์ํด.
3. ๊ฐ ํ์ผ์ ๋ฐฉํฅ์ ๋ํ๋ด๋ Flow Field.
ํด๋น ํ์ผ์ ๊ทผ์ฒ ํ์ผ๋ค์ ๊ฑฐ๋ฆฌ๋ฅผ ์ข ํฉํด์ ํ์ฌํ์ผ์ ๋ฐฉํฅ์ ๋์ถํด.
๋ด ๊ธธ์ฐพ๊ธฐ ์์คํ ์ ๋ณด์๋ค๋ฉด ์๊ฒ ์ง๋ง, ๋๋ ์ด Integration Field์ Flow Field๋ฅผ ํตํฉํด๋์ด.
๋ด๊ฐ ์ ์ผ ์ฒ์์ ์์ฒด์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด ๋ง๋ค์๋ ๊ธธ์ฐพ๊ธฐ๋ BFS๋ฅผ ์ฌ์ฉํ์ง ์์์๊ณ ,
๋ฐฉํฅ ์ง์ ํ๋ ๋ฐฉ์์ ์ดํ BFS ์ ์ฉํ์ฌ ๊ตฌํํ๋ฉด์ ๊ทธ๋๋ก ๊ฐ์ ธ์๊ฑฐ๋ .
Integration Field๋ก๋ถํฐ flow field๋ฅผ ๋ง๋ค์ด์ฃผ๊ธฐ์๋
์ฝ๋ผ์ด๋์ ๋ฐ๋ผ ๋ฒฝ์ ๋น๋น์ง ์๋๋ก ๋ฐฉํฅ์ ์ง์ ํ๊ธฐ ์ํ ์กฐ๊ฑด ์ค์ ์ด ๋๋ฌด ๋ณต์กํด์
๋ด ์์ค์์๋ ํ๋ค๋ค๊ณ ์๊ฐํ๊ณ ,
BFS ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ ์ ์ด๋ ๊ฒ ์ฑ๋ฅ์ด ๊ฐ์ ๋ ์ค ๋ชฐ๋ผ์ ์ธ์ ํ์ผ์ ๋ชจ๋ ์ฒดํฌํ๊ธฐ์๋ ํ๋ค๊ฑฐ๋ผ ์๊ฐํ๊ฑฐ๋ .
์ด์จ๊ฑฐ๋ ๊ฒฐ๊ตญ integration field๋ฅผ ๋ง๋ค๋ฉฐ flow field๋ฅผ ๊ฐ์ด ๋ง๋ค์ด์ฃผ๋ค๋ณด๋
๋ค์ ์ฌ๋ผ์ด๋์ ์ต์ ํ ๋ฐฉ๋ฒ์ ์ ์ฉํ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์๋๋ผ๊ณ .
๋๋ ์ํ์ข์ฐ๋ง ํ์ํด์ ๊ฑฐ๋ฆฌ๋ฅผ 1๋ก ์ฃผ๋๋ฐ,
์๋ค๊ฐ์ ๊ฒฝ์ฐ์๋ 8๋ฐฉํฅ์ ํ์ํด์ ๊ฑฐ๋ฆฌ๋ฅผ 1๋ก ์ฃผ๋๋ผ๊ณ .
๋ค๋ง ๊ทธ๋ฌ๋ค๋ณด๋ 16๊ฐ์ง ๋ฐฉํฅ๋ง ๋์ค๊ฒ ๋๋๋ด.
๋์ฒ๋ผ ์ํ์ข์ฐ๋ง ํ์ํ๊ฒ ๋๋ฉด 8๋ฐฉํฅ์ด ๋์ค๊ฒ ๋ผ.
๋๋ ์ด๊ฑธ ๊ทธ๋ฅ Lerp๋ก ๋ ๋ฐฉํฅ ๋ฒกํฐ์ ์ค๊ฐ์ ํฅํ๋๋ก ๋ณด๊ฐํด์ ๋ฐฉํฅ์ ์ค์ ํด์ฃผ์๊ณ .
์๋ค๋ค์ ์ด๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํด FMM์ ์ ์ฉํ๋๋ฐ,
๊ฑฐ๋ฆฌ๋ฅผ ์์ด์ฝ๋ ๋ฐฉ์ ์?๊ฐ์๊ฑธ ์ด์ฉํด์ ์ ์ฉํ๋๋ด.
https://www.numerical-tours.com/matlab/fastmarching_0_implementing/
Dijkstra and Fast Marching AlgorithmsDijkstra and Fast Marching Algorithmswww.numerical-tours.com์ฌ๊ธฐ์์ ํ์ธํ ์ ์๊ณ ,
๋ง๋ฆ๋ชจ ๊ผด๋ก ๊ฑฐ๋ฆฌ๊ฐ ๋์ผํ๋ ๊ฒ์ด ์ํ๊ณผ ๋น์ทํ๊ฒ ๊ฑฐ๋ฆฌ๊ฐ ๋์ผํด์ ธ.
๊ทธ๋ฆฌ๊ณ ๋ฐฉํฅ๋ฒกํฐ๋ฅผ ๋ฏธ๋ฆฌ ์บ์ฑํด๋๊ณ flow field๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์.
๋๋ lerp๊ฐ ์๋ ๋ฏธ๋ฆฌ ์บ์ฑํด๋๊ณ ์ฌ์ฉํ๋ฉด ๋์ง ์์๊น ์ถ์๋๋ฐ,
๋ด ๋ฐฉ์์ผ๋ก๋ ๋ฒกํฐ๊ฐ ๊ณ์ฐ์ ํด์ ์บ์ฑํด๋ ๊ฐ์ ๋์ค๋๋ก ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋๋ผ๊ณ .
๋ฐ๋ผ์ ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํ๋ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ์์ด.
์ ์ฌ๋ผ์ด๋์๋ ๋ด๊ฐ ๋งํ ๊ฒ ์ธ์๋ ์ ๋ง ๋ง์ ์ต์ ํ ๊ธฐ๋ฒ๋ค์ด ์ค๋ช ๋์ด์์ผ๋ ๊ถ๊ธํ ์ฌ๋๋ค์ ์ฝ์ด๋ด.
์ ๋ํฐ ์ก ์์คํ ์ฌ์ฉ
๊ฒฐ๊ตญ ๋ด ์๊ณ ๋ฆฌ์ฆ์ด ๊ตฌ๋ฆฐ๋ฐ ๊ฐ์ ๋ฒ๋ ์์ผ๋ฉด ๋ฐฉ๋ฒ์ ํ๋์ผ.
๊ตฌ๋ฆฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ ๋น ๋ฅด๊ฒ ์คํ๋๋๋ก ํ์.
์ด๋ฅผ ์คํ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์ ๋ํฐ ์ก ์์คํ ์ ์ฌ์ฉํ๋๊ฑฐ์ผ.
์ด์ ์ด๋ฒ ์ผ์ง์ ์ฃผ์ ๋ก ๊ฐ๋ณด์.
์ ๋ํฐ Job System์ด๋?
ํน์ ์๋ชป๋ ๋ด์ฉ์ด ์๋ค๋ฉด ์ ์ ํด์ฃผ๋ฉด ๊ณ ๋ง์ธ ๊ฒ ๊ฐ์.
๋๋ ์ดํ๋ฐ์ ์ฌ์ฉ ์ํด์ ์๋ชป๋ ๋ด์ฉ์ด ์์ ์ ์์ผ๋ ๊ฐ๋จํ ์ฐธ๊ณ ๋ง ํด !
์ด๋ชจ์ ๋ชจ
๋์ ๊ฐ์ ๋ด๋น๋ค์ dots์ธ์ง ecs์ธ์ง ์ฑ๋ฅ์ด ์ข๋ค๊ณ ํ์ง๋ง ์๋ฟ์ง ์๋ ๋ด์ฉ์ด์์ด.
๊ทธ๋ฌ๋ค๋ณด๋ ๊ด๋ จ๋ ๋ด์ฉ์ธ ์ก ์์คํ ๋ ๋ฑํ ๊ด์ฌ์ด ์์๋๋ฐ,
์๋ฒ์ ์ฌ์ฉํด๋ณด๋ ์ ๋ง์ ๋ง ์ฝ๊ฒ ์ ๋์ด์์ด.
๋๊ฐ์ ๋ด๋น๋ ์ดํ๋ง์ ๊ธฐ์กด ์์คํ ์ฎ๊ธฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ์ด !
๋ค๋ฅธ ์ด์ผ๊ธฐ์ธ๋ฐ ์ค๊ฐ์ ์ ๋ํฐ ๋ฉํฐํ๋ ์ด์ด๋ ์ ๊น ์ฐ๋จนํด๋ดค๋๋ฐ ์ ๋ง ์ฝ๊ฒ ์ ๋์ด์๋๋ผ๊ณ .
๊ทธ๋ฅ ์ปดํฌ๋ํธ ๋ฃ์ด์ฃผ๋ฉด ์์์ ์๋ฒ์ธก์ด ๋ฌผ๋ฆฌ ๊ณ์ฐํ๊ณ
ํด๋ผ์ด์ธํธ ์ธก์ ํค๋ค๋งํฑ์ผ๋ก ์ฐ์ฐ ์ํ๊ณ ์๋ฒ๋ก๋ถํฐ ๊ฒฐ๊ณผ๋ฐ์ ๋๊ธฐํํ๊ณ .
๋ฌธ์ ๋ ์ ๋๋ ์ด๊ฐ ์๋ค๋ณด๋ ์๊ฑธ ์ด๋ป๊ฒ ์ค์ฌ์ผํ ์ง ๋ชฐ๋ผ์ ์ฐ๋จนํ๋ค ๋ค์ ๋ดํ ์ผ๋ก ๋์์ค๊ฒ ๋์ด.
์ด์จ๋ ์ด๋ฐ์ ๋ฐ ์ ๊ธฐ๋ฅ๋ค์ด ๋ง์์ง๊ณ , ์ ์ฉํ๊ฒ ๊ฝค๋ ๋ง์์ ธ์ ์ ๋ํฐ๊ฐ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ๋ณด์ฌ!
์ก ์์คํ
๋ณธ๋ก ์ผ๋ก ๋์๊ฐ์ ์ก ์์คํ ์ด ๋ฌด์์ธ์ง์ ๋ํด ์ด์ผ๊ธฐํด๋ณด๋ ค ํด.
๋ฌผ๋ก ๋๋ ๋ด๋น๋๊น ๊ทธ๋ฅ ๋ด๋น ๊ด์ ์์ ์ด์ผ๊ธฐํ๋๊ฑฐ๊ณ ,
์์ธํ ๊ฒ์ ๊ธฐ์ ๋ธ๋ก๊ทธ ๋ฑ์ ์ฐธ๊ณ ํ๋ ๊ฒ์ด ๋ ์ข์๊ฑฐ์ผ.
https://docs.unity3d.com/kr/2018.4/Manual/JobSystem.html
C# ์ก ์์คํ - Unity ๋งค๋ด์ผUnity C# ์ก ์์คํ (Job System)์ ์ฌ์ฉํด Unity ์์ง๊ณผ ์ํธ์์ฉํ๋ ๊ฐ๋จํ๊ณ ์์ ํ ๋ฉํฐ์ค๋ ๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๊ฒ์ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.docs.unity3d.com์ ๋ํฐ์ ์ก ์์คํ
์ ๋งํฌ ๋ฌธ์์ ์ค๋ช
์ ์๋ฏ์ด ๋ฉํฐ์ฐ๋ ๋ฉ์ ํ๊ฒ ํด์ฃผ๋๊ฑฐ์ผ.
๋ฉํฐ์ฝ์ด, ๋ฉํฐํ๋ก์ธ์ค, ๋ฉํฐ์ฐ๋ ๋ ๋ฑ ๋๋ฌด๋๋ ์ด๋ ค์ด ์ฉ์ด๋ค์ด ์๋๋ฐ,
๋ด๋น๋ ๊ทธ๋ฐ๊ฑฐ ๋ชจ๋ฅด๊ฒ ๊ณ ๊ทธ๋ฅ ์ฌ์ฉํ ๋.
๊ณตํ์ ์ ์ฌ์ฉํ๋ฉด ๋๋๊ฑฐ์ผ !
์ ๋งํฌ ๋ฌธ์์ ๋ค์ ํ์ด์ง์์ ์ค๋ช ๋์ด ์์ผ๋ ์ฝ์ด๋ณด์๋ ์ข๊ณ ๊ฐ๋จํ๊ฒ ์ค๋ช ํด๋ณผ๊ฒ.
์ฐ๋ฆฌ์ ๊ธฐ์กด ๋ฐฉ์์ ํผ์ ์ด์ฌํ ์ฌ๋ฌ ์ผ๋ค์ ์์๋๋ก ์ผํด์ ๋๋ง์น๋ ๊ฑฐ์ผ.
๋ฉํฐ์ฐ๋ ๋๋ฅผ ์ด์ฉํ๋ฉด ์ฌ๋ฟ์ด ์ฌ๋ฌ ์ผ๋ค์ ๊ฐ๊ฐ ๋์์ ์ํํ๊ฑฐ๋, ์ผ ํ๋๋ฅผ ์ชผ๊ฐ์ ์ํํ ์ ์๊ฒ ๋ผ.
์ ์ค๋ช ๋๋ก ๋ฉํฐ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ์ ์ด ๊ฐ๋ฅํ๋ ์์ฒญ๋๊ฒ ์ข๊ฒ ์ง?
ํ์ง๋ง ์ฅ์ ์ด ์๋ฏ์ด ๋จ์ ๋ ์กด์ฌํด.
์ ์์๋ฅผ ์ด์ด์ ์ค๋ช ํด๋ณด๋ฉด ๋์์ ์ผ์ ํ๋ค๋ณด๋ ์๋ก ๊ผฌ์ธ๋ค๊ฑฐ๋
์ฐ๋ฆฌ๊ฐ ๊ฐ๋ ํ๋ฌ ๊ฐ๋๋ ๋์์ ์ผํ๊ณ ์์ผ๋ ์ฒดํฌ๊ฐ ์ด๋ ต๊ฑฐ๋...
๊ทธ๋ฌ๋ค๋ณด๋ ๊ฐ๋ฐํ๊ธฐ๊ฐ ์ด๋ ต๊ณ ,
์ด๋ค ํ๋ก๊ทธ๋จ ๋๋ฆฌ๋ ค๋ฉด ๋ฉํฐ์ฝ์ด๋ณด๋ค ์ฝ์ด ์ ์ด๋ ํด๋ญ์ด ๋์๊ฒ ์ข๋ค ! ์ด๋ฐ ๋ง์ด ๋์ค๋ ๊ฑฐ ์๋๊น?
์ฆ ์ก ์์คํ ์ ์ ๋จ์ ๋ค์ ๋ณด์ํด์ ์์ ํ๊ณ ์ฝ๊ฒ ํ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ์น๊ตฌ์ผ.
์ฐ๋ฆฌ๋ ํ์ฉ๋ง ์ ํ๋ฉด ๋๋, ๊ฐ๋จํ ๊ฐ๋ ๋ง ์๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์์๋ณด๋๋ก ํ์.
Job System์ ์ฌ์ฉ
๋ด๋น๋ค์
์ ์์์ ์ผ์ฒ๋ผ Job System์ ์ํฌ Job,
์ก ์์คํ ์์ ์ฌ์ฉํ๋ ๋ณ์ํ์ ์ธ NativeContainer,
์ฌ๋ฌ Job ์ฌ์ด์์ ์์๋ฅผ ์ ํด์ฃผ๊ฑฐ๋, ๋ชจ๋ ธ๋นํค์ด๋น์ด์์ ๋๊ธฐํ๋๋ฐ ์ฌ์ฉํ JobHandle์ ๋๋ง ์๋ฉด ๋ ๊ฒ ๊ฐ์.
๊ฐ๋จํ ์์๋ ํ๋ ๋ง๋ค์ด๋ณด๋๋ก ํ ๊ฒ.
ํ๋ ์ด์ด์ 100000๋ช ์ ๊ณ ์ ๋ ์ซ์์ ์ ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ์์์ผ.
์ด๊ฑธ Job System์ผ๋ก ๋ณํํด๋ณผ๊ฑฐ์ผ.
๋น๋ ํ ์ฒดํฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์.
์ฝ 20ms์ ์๊ฐ์ด ์์๋ผ.
Native Container
https://docs.unity3d.com/kr/2021.3/Manual/JobSystemNativeContainer.html
NativeContainer - Unity ๋งค๋ด์ผ๋ฐ์ดํฐ ๋ณต์ฌ์ ์์ ์์คํ ํ๋ก์ธ์ค์ ๋ํ ๋จ์ ์ ์ก์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ ๋ณต์ฌ๋ณธ ๋ด์ ๊ฒฉ๋ฆฌ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์ ํ์ ๊ทน๋ณตํ๋ ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ NativeContainer๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ ์ ์ฅํด์ผ ํฉ๋๋ค.docs.unity3d.com1. ๋จผ์ ์ก ์์คํ ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ํ์ ๋ง ์ฌ์ฉํ ์ ์์ด !
๊ฐ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ ๋ํด์ ์ฐพ์๋ณด๋๋ก ํ๊ณ
๊ฐ๋จํ๊ฒ๋ int, bool, float ์ด๋ฐ ์น๊ตฌ๋ค๊ณผ ์ด๋ฐ ์น๊ตฌ๋ค๋ง ๋ด๊ธด struct ์ ๋๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์๊ฒ ๊ฐ์.
์ฆ ์ฐ๋ฆฌ๋ ์ฐธ์กฐํ์ ์ธ Transform์ด๋ GameObject ๊ฐ์ ํด๋์ค๋ฅผ ์ ๋ฌํ ์ ์์ด.
(Transform์ ์ ๋ํฐ ์ถ๊ฐ ํจํค์ง์์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ์ ๊ฐ ์๊ธด ํด)
2. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๊ฐ ๋ณดํต ์ก ์์คํ ์ ์ด์ฉํ๋ ์ด์ ๋ ๊ฑฐ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์์ผ๊ฑฐ์ผ.
๋ฐ๋ผ์ ์ด ๊ฑฐ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ค NativeContainer๋ผ๋ ๊ตฌ์กฐ์ฒด๊ฐ ์กด์ฌํด.
์ฐ๋ฆฌ๋ ์ด๊ฑธ ๋ฐฐ์ด๊ฐ์ ๋๋์ผ๋ก ์ฌ์ฉํ ์ ์์ด.
์๋ valueType์ด๋ผ๊ณ ๋์ค๋๋ฐ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์ ๊ทธ๋ฐ๊ฐ? ์ด์ ๋ ์ ๋ชจ๋ฅด๊ฒ ์ด.
์ด์จ๋ ๋ด๋ถ์ ์ผ๋ก ์ ์ธ๋ฑ์๊ฐ ๊ตฌํ๋์ด ์์ด์ ์ฐ๋ฆฌ๋ ๋ฐฐ์ด์ฒ๋ผ ์ฌ์ฉํ๋ฉด ๋ผ.
https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/indexers/using-indexers
์ด์ฐจ์ ๋ฐฐ์ด๊ฐ์ ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ด๋กํ๋ ! ๋ผ๊ณ ํ๋ค๋ฉด
array1[y][x] = array2[x + y * columnSize] ์๋ฐ ์์ผ๋ก ํด๊ฒฐํ ์ ์๊ฒ ์ง?
3. ์ก ๋ด๋ถ์์๋ ์ฝ๊ธฐ ์ ์ฉ, ์ฐ๊ธฐ ์ ์ฉ ์ ํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ค์ ํด์ค.
์ฝ๊ธฐ๋๊ฑด var a = container[idx]; ์๋ฐ์์ผ๋ก ๊ฐ์ ๋ฐ์์จ๋จ๊ฑฐ๊ณ ,
์ฐ๊ธฐ๋๊ฑด container[idx] = a; ์๋ฐ์์ผ๋ก ์์ ๋ญ๊ฐ ์๋ ๊ฐ์ ๋์ ํด์ฃผ๋๊ฑฐ์ผ.
์ฝ๊ณ ์ฐ๊ธฐ ๋ ๋ค ํ๋ค๋ฉด ํด๋น์ฌํญ์ ์๊ฒ ์ง๋ง.
4. ์ผ๋ง๋ ์ค๋ซ๋์ ์ฌ์ฉํ๋์ ๋ฐ๋ผ Allocator ์ค์ ํ๊ณ ์ฌ์ฉ ํ Dispose.
ํ ๋น์์ ๋ฐ๋ผ ์๋๊ฐ ๋ค๋ฅด๋ค๋๋ฐ ์์งํ ์ ๋ชจ๋ฅด๊ฒ ๊ณ ,
TempJob์ด๋ Persistent๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ ๊ฒ ๊ฐ์.
TempJob์ ๊ฒฝ์ฐ์๋ Update๋ฌธ ๋ด๋ถ์์ 1ํ๋ ์ ๋์ ๊ณ์ฐํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ณ
Update ๋ฌธ ๋ง์ง๋ง์ nativeContainer.Dispose(); ํด์ฃผ๋ฉด ๊ฐ๋น์ง ๋ฐ์์ด ์ํ๋๋ด.
Persistent์ ๊ฒฝ์ฐ์๋ Destroy ์์ Dispose ํด์ฃผ๋ฉด ๋ ๊ฒ ๊ฐ๊ณ .
์์์ ๋งํ ๊ฒ๋ค์ ์ข ํฉํด์ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด๋ณผ๊ฒ
์ฌ์ค Job์ฉ์ผ๋ก ๋ณดํต ์ฌ์ฉํ๋ Mathmatics๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ int2๋ผ๋ ๊ตฌ์กฐ์ฒด๊ฐ ์กด์ฌํ๋๋ฐ ์์๋ฅผ ์ํด ํ๋ ๋ง๋ค์ด์ฃผ์์ด.
์์์ ๋งํ๋๋ก Transform๊ฐ์ ํด๋์ค๋ ๋ด์์ฃผ์ง ๋ชปํ๋ฏ๋ก ๋ฐ๋ก ์์น๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ ๋ง๋ค์ด์ฃผ์๊ณ ,
๊ทธ ์ธ์๋ ์ด๋ ค์ธ ๊ฒ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํด.
Job
https://docs.unity3d.com/kr/2018.4/Manual/JobSystemCreatingJobs.html
์ก ๋ง๋ค๊ธฐ - Unity ๋งค๋ด์ผUnity์์ ์ก์ ๋ง๋ค๋ ค๋ฉด IJob ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค. IJob์ ์ฌ์ฉํ๋ฉด ์คํ ์ค์ธ ๋ค๋ฅธ ์ก๊ณผ ๋ณ๋ ฌ๋ก ์คํ๋๋ ๋จ์ผ ์ก์ ์์ฝํ ์ ์์ต๋๋ค.docs.unity3d.comhttps://docs.unity3d.com/kr/2018.4/Manual/JobSystemSchedulingJobs.html
์ก ์์ฝ - Unity ๋งค๋ด์ผ๋ฉ์ธ ์ค๋ ๋์์ ์ก์ ์์ฝํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.docs.unity3d.com์ด์ ์ฐ๋ฆฌ๊ฐ ์ํฌ ์ผ์ ๋ง๋ค์ด์ค ์ฐจ๋ก์ผ.
๊ทธ ์ผ์ Job์ด๋ผ๊ณ ํด.
1. ํฌ๊ฒ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๊ฒ์ ๋ ์ข ๋ฅ๊ฐ ์๋๋ฐ, ํ๋๋ Job, ๋๋จธ์ง ํ๋๋ ParallelFor ์ก์ด์ผ.
ParallelFor ์ก์ size ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๊ทธ size ๊ฐ ๋ฒ์๋งํผ ๋ฌด์์๋ก ์ ๊ทผํด์ ์๋ก ๋๋์ด์ ์ผ์ ๋๋ด.
์ฆ 1์์ 100๊น์ง result๊ฐ์ ๋ํ๋ผ๊ณ ํ์ ๋ ์ผ๋ฐ Job์์ 1๋ถํฐ ์์๋๋ก 100๊น์ง ๋ํ๋ค๋ฉด
ParallelFor ์ก์ผ๋ก ๋ง๋ค์ด์ค๋ค๋ฉด 1~100์ ๋ฌด์์๋ก ์ฌ๋ฌ๊ฐ์ ์ผํ๋ ์น๊ตฌ๋ค์ด ์ ๊ทผํด์ result๊ฐ์ ๊ฐ์ ๋ํ๋ ๊ฑฐ์ง.
๊ฒฐ๊ตญ ๊ฐ ์์๊ฐ ์๋ก์๊ฒ ๊ด์ฌํ์ง ์๋๋ค๋ฉด parallelFor ์ก์ด ํจ์ฌ ์๋๊ฐ ๋น ๋ฅด๊ฒ ์ง?
2. ๊ฐ๊ฐ IJob, IJobParallelFor์ ์์๋ฐ์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธํ๋ฉด ์ด๊ฒ ์ก์ด ๋ผ.
์ด ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ผ๋ฉด Execute / Execute(int idx)๋ฅผ ๊ตฌํํด์ค์ผํ๊ณ ,
์ด๊ฒ์ด ์ผํ๋ ์น๊ตฌ๋ค์ด ์๋์ผ๋ก ์ผํ ๋ถ๋ถ์ด ๋ผ.
3. ์ผ์ ์ํฌ ๋์๋ Schedule / Schedule(์ฌ์ด์ฆ, ๋ฐฐ์น์นด์ดํธ)๋ก ๋ฉ์ธ์ฐ๋ ๋์์ ์คํ.
ParallelFor์์๋ ์ฌ์ด์ฆ์ ๋ฐฐ์น ์นด์ดํธ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์์์ ์ผ์ ๋๋ ์ ์ฌ๋ฟ์ด์ ์ํํด.
์ฐ๋ฆฌ๊ฐ ์ ๊ฒฝ์จ์ค๊ฑธ ์ผ์ ๋๋ ํฌ๊ธฐ์ธ ๋ฐฐ์น์นด์ดํธ ์ ๋์ธ๋ฐ
์๊ฑด ์ฌ์ด์ฆ์ ๋ฐ๋ผ ์์ปค์์ ๋ฐ๋ผ ์ ๋นํ ๋ฐฐ์น์นด์ดํธ๊ฐ ์กด์ฌํ๋ ๊ฒ ๊ฐ์.
๋ชจ๋ฅด๊ฒ ์ผ๋ 32๋ก ํ ๊ฒ.
์ฐ๋ฆฌ์ ์ผ์ ์์๊ฐ ์๊ด์์ด ๊ฐ ์์๊ฐ ๋
๋ฆฝ์ ์ด๋ ParallelFor๋ก ๋ง๋ค์ด์ฃผ์์ด.
Point ๊ตฌ์กฐ์ฒด์ ๋บ์ ๋ magnitude๋ ์์ผ๋ ์ถ๊ฐํด์ฃผ๋๋ก ํ ๊ฒ.
JobHandle
์ด์ ์ผํ ๊ฒ๋ ๋ง๋ค์์ผ๋ ์ผ์ ๋ค๋ค๋ณด์์ผ๊ฒ ์ง?
https://docs.unity3d.com/kr/2018.4/Manual/JobSystemJobDependencies.html
JobHandle ๋ฐ ์ข ์์ฑ - Unity ๋งค๋ด์ผ์ก์ Schedule ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด JobHandle์ ๋ฐํํฉ๋๋ค. ์ฝ๋์ JobHandle์ ๋ค๋ฅธ ์ก์ ๋ํ ์ข ์์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ก์ด ๋ค๋ฅธ ์ก์ ๊ฒฐ๊ณผ์ ์ข ์๋๋ฉด ์ฒซ ๋ฒ์งธ ์ก์ JobHandle์ ํ๋ผ๋ฏธํฐ๋ก ๋ ๋ฒ์งธ ์ก์ Schedule ๋ฉ์๋์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฌํ ์ ์์ต๋๋ค.docs.unity3d.com1. ์ก์ Schedule์ ํธ์ถํด ์ก์ ์์ํ๋ฉด, ๋ฐํ์ผ๋ก JobHandle์ ๋ฐ์.
์ JobHandle์ ์ฌ์ฉํด์ ์ก ๊ฐ ์์๋ฅผ ์ค์ ํด์ค๋ค๊ฑฐ๋,
๋ฉ์ธ์ฐ๋ ๋์์ ๋๊ธฐ๋ฅผ ํด์ค ์ ์์ด.
2. jobHandle.Complete()๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ธ์ฐ๋ ๋์์ ๋๊ธฐํด.
๋ฉ์ธ์ฐ๋ ๋๋ผ๋๊ฑด ์ฐ๋ฆฌ๊ฐ ์ ๋ํฐ ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋๋ ๊ฒ์ ๋งํด.
์์์ ์ก ์์คํ ์ ๋ฉํฐ์ฐ๋ ๋๋ผ๊ณ ์ด์ผ๊ธฐํ์ผ๋
๋ด๊ฐ ์ผ์ ์ํค๊ณ ๊ทธ ์ผ์ ๋ค๋ฅธ ์น๊ตฌ๊ฐ ๋งก์์ ํด์ฃผ๊ณ ,
๋๋ ์ํจ ๋ค์ ๋ฐ์ค์ ์ผ์ ์์ํ ๊ฑฐ์ผ.
๊ทธ๋ฐ๋ฐ ์ ์ผ์ ๊ฒฐ๊ณผ๊ฐ์ ์ด์ฉํด์ ๋ค์ ์ผ์ ํด์ผํ ์ ์๊ฒ ์ง?
๊ทธ ๋ jobHandle.Complete()๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ผ์ด ๋๋ ๋๊น์ง ๋๋ ๋ฉ์ถฐ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ผ.
๋น์ทํ ๋๋์ผ๋ก๋ yield return ์ฝ๋ฃจํด;์ด๋ async/await์ด ์์ ์๋ ์๋๋ฐ,
์์์ ์ค๋ช ํ ๋ด์ฉ์ ์ฝ์๋ค๋ฉด ๋ค๋ฅธ ๊ฐ๋ ์ด๋๊ฒ์ ์ดํดํ ์ ์์์ ๊ฑฐ์ผ.
์ ๋ํฐ ์ก ์์คํ ์ ์ฌ๋ฟ์ด์ ์ผ์ ํ๋๊ฑฐ๊ณ ,
async/await์ ํผ์ ์ผํ๋๋ฐ ์ผ์ ์์๋๋ก ํ๋ ๊ฒ์ด ์๋ ์ด๊ฑฐํ๋ค ์ ๊ฑฐํ๋ค ํ๋๊ฑฐ์ง.
์๋ฅผ ๋ค๋ฉด, async/await์ ์๋ฒ๋ก ์์ฒญ์ ํ๊ณ ๋ต์ด ์ฌ๋๊น์ง ๋ฉ์ถฐ์์ง ์๊ณ ๋ค๋ฅธ ์ผ์ ํ๋ฏ์ด.
์ง์์ด ์๋ค๋ณด๋ ์ค๋ช ํ๊ธฐ ์ด๋ ค์ด ๊ฒ ๊ฐ์. ๋ถ์กฑํ๋ค๋ฉด ์ถ๊ฐ ์ค๋ช ์ ๋จ๊ธฐ๋๋ก ํ ๊ฒ.
unitask ์ด์ผ๊ธฐ๋ฅผ ์ถ๊ฐํ์๋ฉด,
await jobHandle; ์ ํด์ฃผ๋ฉด ํด๋น ์ก์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ผ.
์ ์์ ์ jobHandle.isCompleted๊ฐ true๊ฐ ๋๋์ง update ์์ ๋ง๋ค ์ฒดํฌํ๊ฒ๋ผ.
๋ง์ฝ์ ํ๊ท ํ๋ ์๋ณด๋ค ์ก์ด ์ค๋๊ฑธ๋ฆฌ๊ฒ ๋๋ค๋ฉด ๋ฉ์ธ์ฐ๋ ๋๊ฐ ๋ฉ์ถฐ์์ผ๋ ๊ฒ์์ด ๋ฉ์ถ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ์ง?
๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ์ isCompleted์์ฑ์ ์ด์ฉํด ์ฝ๋ฃจํด์์ yield return null;์ ํด์ ์๋ฃ๋ฅผ ๋๊ธฐ์ํฌ ์๋ ์์๊ฑฐ์ผ.
3. JobHandle.CombineDependency๋ก ๋ฌถ์ด์ฃผ๊ฑฐ๋ Schedule ํจ์์ ๋ฃ์ด ์์๋ฅผ ์ค ์ ์์ด.
job1๊ณผ job2๊ฐ ์์ ๋ ์ด ๋ ์ผ์ด ๋๋ ๋ค์ ๋ฉ์ธ์ฐ๋ ๋๊ฐ ์งํ๋์ผ ํ ์๋ ์์๊ฑฐ์ผ.
job1Handle.complete(); job2Handle.complete(); ์๋ฐ ์์ผ๋ก ๋๊ธฐ์์ผ๋ ๋๊ฒ ์ง๋ง
JobHandle.CombineDependency(job1Handle, job2Handle).Complete();
์๋ฐ์์ผ๋ก ๊ธฐ๋ค๋ ค ์ค์๋ ์๊ฒ ์ง?
๋๋ job1์ ๋๋ด๊ณ job2๋ฅผ ํด์ผํ๋๊ฒฝ์ฐ
var job1handle = job1.schedule();
var job2handle = job2.schedule(job1handle);
job2handle.complete();
์๋ฐ ์์ผ๋ก ์์ฑํด์ ์ก ๊ฐ ์์๋ฅผ ๋ณด์ฅํด์ค ์๋ ์์๊ฑฐ์ผ.
์๊ฑธ ์ข ํฉํด์ ์์ฑ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณผ๊ฒ.
์ด์ ์คํ์์ผ๋ณด๋๋ก ํ์.
์์์ ์ฝ 20ms์ ์์์๊ฐ์ด ๊ฑธ๋ ธ์๋๋ฐ ์ง๊ธ ๊ฑธ๋ฆฐ ์๊ฐ์
7ms๋ก 70%๊ฐ ๊ฐ์ํ์ด !
ํ๋กํ์ผ๋ฌ์ ์๋ ์ก์ด๋ผ๋ ๊ณณ์ ๋ณด๋ฉด
๋ฉ์ธ ์ฐ๋ ๋์์๋ ์ ์ก์ด complete ๋๊ธฐ๊น์ง 0.461ms๋ฅผ ๋๊ธฐํ๊ณ ,
๊ฐ ์ก๋ค์ ํญ๋ชฉ์ ๋๋ฌ๋ณด๋ฉด 0.46ms์ ๋์ฉ ์์ํ ๊ฒ์ ํ์ธํ ์ ์์ด.
์ ๋ถ๋ถ์ idle์ด ๊ธธ๊ฒ ์๋๋ฐ ์๋ฌด๊ฒ๋ ์ํ๊ณ ๋์๋ค๋ ๊ฑฐ์ผ.
์ ๋์์ ์ฐ๋ฆฌ๋ position์ nativearray์ ๋ฃ์ด์ฃผ๋ ์์ 10๋ง๋ฒ์ ํ๊ณ ์์๊ฒ ์ง.
์ ์์ ๋ job์์ ํ๋ค๋ฉด ๋ ๋จ์ถ๋๊ฒ ์ง?
๊ทธ ๋ถ๋ถ์ parallelforTransform์ด๋ผ๋ ์น๊ตฌ๋ก ํด๊ฒฐํ ์ ์๋ ๊ฒ ๊ฐ๊ณ , ๊ถ๊ธํ๋ค๋ฉด ์๋ํด๋ณด๋๋ก ํด.
๋๋ ๋ค์ ๋ด์ฉ์ผ๋ก ๋์ด๊ฐ๋๋ก ํ ๊ฒ.
Burst
์ฌ์ค ๋ ํ๋์ ์ค์ํ ์์ ์ด ์์ด.
๋ฐ๋ก Burst ์ปดํ์ผ ์์ฑ์ ๋ถ์ฌ์ฃผ๋๊ฑฐ์ผ.
์์ ์์ฑ ํ๋๋ง ๋ถ์ฌ์ฃผ๋ฉด ๋์ด์ผ!
๋ง์ง๋ง์ผ๋ก ์ ๋ํฐ ์๋ํฐ ์ ๋ฉ๋ด์์ Jobs ๋ฉ๋ด์ Enable Burst๋ฅผ ์ผ์ฃผ๋ฉด ๋ผ.
์๋ค๋ฉด ๋ฒ์คํธ ํจํค์ง ์ค์นํด์ค์ผํ๊ณ .
์ฐ๋ฆฐ ์๊ฐ ๋ญ ํ๋ ์ ์ธ์ง๋ ์ฐ๋ฆฌ๊ฐ์ ๋ด๋น๋ ๋ชฐ๋ผ๋ ๋๊ณ ๊ทธ๋ฅ ์ปดํ์ผ์ ๋ ์ต์ ํ ํด์ค๋ค๋๋ด.
๊ทธ๋ผ์ด์ ๋ค์ ๋น๋ํ๊ณ ์ฒดํฌํด๋ณด์.
์ฒดํฌํด๋ณด๋ฉด 0.46ms ๊ฑธ๋ฆฌ๋ ์น๊ตฌ๋ค์ด
0.034ms๋ฐ์ ๊ฑธ๋ฆฌ์ง ์๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ด.
๊ฑฐ์ 90%์ด์ ๊ฐ์ํ์ด.
์ฆ ์ฐ๋ฆฌ์ ์์ ์ 20ms ์ค 7ms๋ก ๊ฐ์ํ์ผ๋
์ผ๋ฐ์ ์ผ๋ก ํ๋ค๋ฉด 13ms์ ์์ ์ด์๋ ๊ฑด๋ฐ
์ด๊ฒ 0.034ms๋ก ๊ฐ์ํ๋ค๋ ์๋ฏธ์ผ.
13ms -> 0.034ms.
์ ๋ง ๋๋์ง ์๋?
๋จ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์์ ์ ์ ์ฉํด์ค๋ค๋ฉด
์ด๋ ต์ง๋ ์๊ณ ๊ฐ๋จํ๊ฒ ์ ๋ง ํฐ ์ฑ๋ฅ ๊ฐ์ ์ด ๋ ๊ฑฐ์ผ.
๋
์ฌ์ค ๋ด๊ฐ ์์ฑํ๊ฒ ๋ง๋ ๋ด์ฉ์ธ์ง ํ์ ์ ๊ฐ์ง ์์ง๋ง
์ผ๋จ ๊ต์ฅํ ์ฑ๋ฅ์ด ํฅ์๋๋ค๋ ๊ฑด ์ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํด.
๊ธ์ด ๊ธธ์ด์ง๋ค๋ณด๋ ๋ด๊ฐ ์ ์ฉํ ๋ด์ฉ์ ๋ค์ ์ผ์ง์์ ์์ฑํ๋๋ก ํ ๊ฒ.
๋์์ด ๋์๋ค๋ฉด ์ข๊ฒ ์ด !
IJobParallelForTransform ์ฌ์ฉ ๊ฒฐ๊ณผ
์ ๋งค ํ๋ ์ TransformAccessArray ์์ฑ ์ ๋น์ฐํ๊ฒ๋ ์ต์ ์ ์ฑ๋ฅ. ์ด 35ms์์
์๋ Awake์์ ๋ฏธ๋ฆฌ ๋ด์๋์ ๊ฒฝ์ฐ. ์ด 2.5ms ์์
์ฌ์ง ์ ๋ก๋๊ฐ pc์์ ์ ์๋์ ํจ์ค...
๊ฒฐ๋ก - ParallelForTransform๋ก ๋ณ๊ฒฝ ์ 6ms => 2.5ms๊ฐ ๋๊ธด ํ์ง๋ง,
๋ฐฐ์ด ํฌ๊ธฐ๋ ๋ด๋ถ ์์๊ฐ ์์ฃผ ๋ณ๋๋๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์ ์ ์ฝ์ด ์์ ๋ฏ ํ๋ค.
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๋ง์ฆ. ๊ธ ์์ฑํ๋๋ฐ 2์๊ฐ ์ ๋ ๊ฑธ๋ ค์ ํ๋ค์ด์ ธ๊ฐ์ง๊ณ ๋ณธ๋ฌธ์ ํ๋ฒ ์๋ํด ๋ด! ๋ผ๊ณ ์์ฑํ๋๋ฐ ๊ทธ๋ฅ ํ๊น์ ๋ง์ ํด์ ์ถ๊ฐํด๋ณด๊ฒ ์ ใ ใ ใ
ํด๋ณด๋๊น ํ์คํ 2๋ฐฐ์ ๋ ๋นจ๋ผ์ง๋ ๊ฒ ๊ฐ๊ธด ํ๋ฐ ์์ ๋ณ๋ ์์ ๋๋ง ์ฌ์ฉํ๊ธฐ ์ข์ ๊ฒ ๊ฐ์. ๊ธฐ์กด์ ๋งค ํ๋ ์๋ง๋ค position๊ฐ nativearray์ ์ ๋ถ ๋ณต์ฌํด์ฃผ๋ฏ์ด transformaccessarray ์์ฑ์์ transform๋ฐฐ์ด ๋ฃ๊ณ ์ด๊ธฐํํด์ฃผ๋ฉด ํจ์ฌ ๋๋ฆฐ๋ฏ.
๊ฐ๊ณ ์..
์ฑ๋ฅ ํ์คํ๋ค
์ง์ง ์ด๊ณ ์...
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์ ๋ํฐ๊ฐ ๋๊ฒ ์๋์ด์์! ์์์ผํ ๊ฒ ๋ณธ๋ฌธ์ ๋์จ 3๊ฐ๊ณ ์๊ฑฐ ๊ทธ๋ฅ ๊ฐ๋ค์ฐ๋ฉด ๋์ด๊ณ ๊ธธ์ฐพ๊ธฐ๋ ์์ ์ ์ด๋ฏธ ๋ค ๊ตฌํ์ ํ์์ผ๋ ์ฝ๊ฐ ๋ฐ์ดํฐ์งํฅ์ ์ธ ๋ง์ธ๋?๋ก ๋ณํํ๋ฉด ์๊ฐ๋ณด๋ค ๊ฐ๋จํจ. ๊ฐ๋ํฐ์ธ๋ฏ
์๊ณ ์!
์ง์ง ์กฑ๊ณ ์ใทใท - dc App
๋ด๋น์ธ๊ฑฐ์์!!!!!!!!!!
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
TempJob์ด๋ Persistent๊ฐ ์๋๊ฐ ๋ค๋ฅด๋ค๋๋ฐ ์์งํ ์ ๋ชจ๋ฅด๊ฒ ๊ณ =>
https://docs.unity3d.com/Packages/com.unity.collections@2.2/manual/performance-comparison-allocators.html
์ ์ฑ์ค๋ฐ ์ผ์ง ๊ฐ์ฌ ์์ ์ ๋ ์ผ์ง์์ ๋์๋ ๋ฐ์์
์์ชฝ ๋ฌธ์์ ์์๋ค๋.. ํ์คํ ๋ ๋น ๋ฅด๋ค๊ณ ํ ์ ๋์ ์ฐจ์ด๊ฐ ์๋ค์. ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค !
์ ๋ชฐ๋ผ์ ๊ทธ๋ฐ๋ฐ ์ ๊ฑฐ job system์ด ๊ฒฐ๊ตญ synchronized concurrency์ธ ๊ฑฐ์ฃ ? multithreading์ด ์๋๋ผ multiprocessing ์๋? ์ง์ง ๋ชจ๋ฆ.
์๋จ. ๋ฌธ์ ์ฝ์ด๋ณด์๋๊ฒ ๋ ์ ํํ ์์๊ฒ ์ง๋ง, ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ ๋ง ๊ฐ์ฌํฉ๋๋ค. ๋น์ ์ ์ผ์ง๊ฐ ์ ์๊ฒ ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋์์ต๋๋ค. ๊ณ์ ์์ํ ๊ฒ์
๋์์ด ๋์๋ค๋ ๋คํ์ด๋ค์ ! ๊ฐ์ฌํฉ๋๋ค ! ์์ผ๋ก๋ ํ๋ด๋๊ฑฐ์์