Godot: ๊ฑฐ์˜ ๋งค๋ฒˆ ๊ฐ€์žฅ ๋Š๋ฆฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 11์›” 26์ผ  ยท  61์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: godotengine/godot

๋‚˜๋Š” Godot์˜ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ CPU ์ธก๋ฉด ์„ฑ๋Šฅ์„ ์™„์ „ํžˆ ๋ฌด์‹œํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ชฉ๋ก์ด ์ตœ์‹  PC์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋Š๋ฆฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ผ ๋•Œ ๋ชจ๋“  ๊ณณ์—์„œ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ํŠนํžˆ ์ž‘์€ ํฌ๊ธฐ์˜ ๊ตฌ์กฐ์—์„œ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋ Œ๋”๋Ÿฌ๋ธ”์˜ ์กฐ๋ช… ๋ชฉ๋ก ๋˜๋Š” ๋ฐ˜์‚ฌ ์บก์ฒ˜์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์— ํŠนํžˆ ์‹ฌ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 8๊ฐœ์˜ ์ตœ๋Œ€ ์กฐ๋ช… ์Šคํƒ ๋ฐฐ์—ด(์˜ˆ:)๊ณผ ์ถ”๊ฐ€๋กœ ์ œ๊ณต๋˜๋Š” ๋Œ€์‹  ๋งค๋ฒˆ 3๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์ƒ.

RID_Owner๊ฐ€ ํ•ด์‹œ ๋งต ๋˜๋Š” ์Šฌ๋กฏ๋งต์ด ๋  ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ์ธ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปฌ๋ง์„ ์œ„ํ•œ Octree ๊ตฌํ˜„์—๋„ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฝ”๋“œ์˜ ๋ชจ๋“  ๊ณณ์—์„œ ์—ฐ๊ฒฐ ๋ชฉ๋ก๊ณผ ๋”์ฐํ•œ ์„ฑ๋Šฅ ํฌ์ธํ„ฐ ๋ฌด๊ฑฐ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์ด์ฒด์ ์ด๊ณ  ์ ˆ๋Œ€์ ์ธ ๋‚จ์šฉ ๋’ค์— ์ˆจ๊ฒจ์ง„ ๋””์ž์ธ ์˜๋„์— ๋Œ€ํ•ด ๋ฌป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํŠน์ •ํ•œ ์ด์œ  ๋•Œ๋ฌธ์ธ๊ฐ€์š”? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์—ฐ๊ฒฐ ๋ชฉ๋ก์„ ์ˆ˜ํ–‰ํ•˜๋Š” "์ฒญํฌ" ์—ฐ๊ฒฐ ๋ชฉ๋ก์€ ๋™์ผํ•œ ์ฝ”๋“œ์—์„œ ์ž๋™์œผ๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ์ข‹์€ ๋ฉ์–ด๋ฆฌ์—์„œ ๋ชจ๋“  ์ข…๋ฅ˜์˜ "์‰ฌ์šด" ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์บ์‹œ๋ฅผ ์™„์ „ํžˆ ํ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ๋‚ด๋ถ€๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ฐœ๋… ์ฆ๋ช… ๊ตฌํ˜„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ €๋Š” ํ˜„์žฌ octree๋ฅผ ์šฐํšŒํ•˜๊ณ  ์„ ํƒ์  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ์žˆ๋Š” ํ‰๋ฉด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋ง ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. tps-demo๋ฅผ ๋ฒค์น˜๋งˆํฌ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ฒฐ๊ณผ์™€ ํ•จ๊ป˜ ๋Œ์•„์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ €๋Š” ํ•ด๋‹น ์˜ฅํŠธ๋ฆฌ์—์„œ 25๋ ˆ๋ฒจ ๊นŠ์ด๋กœ ๋ฒค์น˜๋งˆํ‚นํ–ˆ์Šต๋‹ˆ๋‹ค...

๋˜ ๋‹ค๋ฅธ ํ–‰๋ณตํ•œ ์ ์€ ์ฝ”๋“œ ์Šคํƒ€์ผ ํ’ˆ์งˆ์— ๊นŠ์€ ์ธ์ƒ์„ ๋ฐ›์•˜์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ๋”ฐ๋ฅด๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ฃผ์„์ด ์ž˜ ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

discussion enhancement core

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฝค ์˜ค๋žซ๋™์•ˆ ๋ฉ‹์ง„ ํฌํฌ์— ๋Œ€ํ•ด ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
4์ฝ”์–ด ์ธํ…” CPU์™€ GTX 1070์ด ํƒ‘์žฌ๋œ ๋Œ€ํ˜• ๊ฒŒ์ž„์šฉ ๋…ธํŠธ๋ถ์—์„œ ์บก์ฒ˜
๋…ธ๋ฉ€ ๊ณ ๋„
image

๋‚ด ํฌํฌ https://github.com/vblanco20-1/godot/tree/ECS_Refactor
image

๋‘ ํ”„๋กœํ•„ ๋ชจ๋‘์—์„œ Red๋Š” ๋ณธ์งˆ์ ์œผ๋กœ "GPU ๋Œ€๊ธฐ"์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ opengl์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ drawcall๋กœ ์ธํ•ด ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. vulkan ๋˜๋Š” ์ „์ฒด ๋ Œ๋”๋Ÿฌ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋Š” ์‹ค์ œ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

CPU ์ธก์—์„œ๋Š” 13ms ํ”„๋ ˆ์ž„์—์„œ 5ms ํ”„๋ ˆ์ž„์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. "๋น ๋ฅธ" ํ”„๋ ˆ์ž„์€ 5.5ms์—์„œ 2.5ms๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
"์ด ํ”„๋ ˆ์ž„" ์ธก์—์„œ๋Š” 13ms์—์„œ 8-9ms๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
~75FPS ~ ~115FPS

CPU ์‹œ๊ฐ„ ๊ฐ์†Œ = ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ godot๋Š” CPU์—์„œ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋ฉด FPS๊ฐ€ ๋‚ฎ์•„์ง€๊ณ  ํฌํฌ๋Š” GPU์— ๋ฐ”์ธ๋”ฉ๋˜๋ฏ€๋กœ CPU๊ฐ€ "๋ฌด๋ฃŒ"์ด๊ธฐ ๋•Œ๋ฌธ์— FPS๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋งŽ์€ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๊ฝค ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐœ์„  ์‚ฌํ•ญ ์ค‘ ๋งŽ์€ ๋ถ€๋ถ„์ด Godot๋กœ ๋ณ‘ํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IF Godot๋Š” ์ตœ์‹  C++๋ฅผ ์ง€์›ํ•˜๊ณ  ๋งค์šฐ ์ €๋ ดํ•œ "์ž‘์€" ์ž‘์—…์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์‹œ์Šคํ…œ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์žฅ ํฐ ์ด๋“์€ ๋™์  ๊ฐœ์ฒด #25013์—์„œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๊ทธ๋ฆผ์ž ๋ฐ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋ผ์ดํŠธ๋งต ์ฝ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋Ÿฌ์˜ ๋‹ค๋ฅธ ๋งŽ์€ ๋ถ€๋ถ„๋„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ์ž…๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์ด์ ์€ Godot๋ณด๋‹ค 10๋ฐฐ์—์„œ 20๋ฐฐ ๋น ๋ฅธ Octree์™€ ์ปฌ ๋ชฉ๋ก์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋Œ€์‹  ๊นŠ์ด ์‚ฌ์ „ ํ†ต๊ณผ ๋ฐ ์ผ๋ฐ˜ ํ†ต๊ณผ ๋ Œ๋”๋ง ๋ชฉ๋ก์„ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ Œ๋”๋ง ํ๋ฆ„์˜ ์ผ๋ถ€ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๋ฒˆ์ด๊ณ  ๋ผ์ดํŠธ->๋ฉ”์‰ฌ ์—ฐ๊ฒฐ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด ํฌ๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์—ฐ๊ฒฐ ๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค!).

์ €๋Š” ํ˜„์žฌ TPS ๋ฐ๋ชจ ์ด์™ธ์˜ ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ ๋งต์„ ์ฐพ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋งต์—์„œ ๋” ๋งŽ์€ ๋ฉ”ํŠธ๋ฆญ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ์ผ๋ จ์˜ ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  61 ๋Œ“๊ธ€

์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ์ž…๋‹ˆ๊นŒ? :ํŠธ๋กคํŽ˜์ด์Šค:

๋ฌด์—‡์„ ์ธก์ •ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด Godot์˜ ๊ฐ„๋‹จํ•œ Light2D ๋…ธ๋“œ๊ฐ€ ์ปดํ“จํ„ฐ๋ฅผ ํƒœ์šธ ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@Ranoller ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜์œ ์กฐ๋ช… ์„ฑ๋Šฅ์€ ํ˜„์žฌ Godot๊ฐ€ 2D ์กฐ๋ช…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๊ฐ€์žฅ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค: ๋ชจ๋“  ์Šคํ”„๋ผ์ดํŠธ๋ฅผ n๋ฒˆ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค(n์€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์กฐ๋ช…์˜ ์ˆ˜).

ํŽธ์ง‘: #23593 ์ฐธ์กฐ

๋ช…ํ™•ํžˆ ํ•˜์ž๋ฉด, ์ด๊ฒƒ์€ ์ฝ”๋“œ ์ „์ฒด์˜ CPU ์ธก ๋น„ํšจ์œจ์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Godot ๊ธฐ๋Šฅ์ด๋‚˜ Godot GPU ๋ Œ๋”๋ง ์ž์ฒด์™€๋Š” ์•„๋ฌด ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

@vblanco20-1 ์•ฝ๊ฐ„์˜ ์ธก๋ฉด ์ ‘์„ ์—์„œ, ๋‹น์‹ ๊ณผ ๋‚˜๋Š” ๋Œ€์‹  ECS ์—”ํ‹ฐํ‹ฐ๋กœ ๋ชจ๋ธ๋ง๋˜๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ํŠธ๋ฆญ์ด ์ ์ฐจ์ ์œผ๋กœ ๋‚˜๋ฌด์™€ ๋‚˜๋ž€ํžˆ ์ž‘๋™ํ•˜๋Š” ์ƒˆ๋กœ์šด ent ๋ชจ๋“ˆ๋กœ godot์˜ ๊ธฐ๋Šฅ ๋ถ„๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. get_tree() ๋ฐ get_registry()์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ent ๋ชจ๋“ˆ์€ ์•„๋งˆ๋„ ํŠธ๋ฆฌ/์žฅ๋ฉด ๊ธฐ๋Šฅ์˜ 80% ์ •๋„๋ฅผ ๋†“์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ…Œ์ŠคํŠธ๋ฒ ๋“œ๋กœ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋งŽ์€ ๊ฐœ์ฒด(์ปฌ๋ง, ์ŠคํŠธ๋ฆฌ๋ฐ, ๋ฐฐ์น˜ ๋ Œ๋”๋ง)๋กœ ํฐ ์ •์  ๋ ˆ๋ฒจ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ๊ณผ ์œ ์—ฐ์„ฑ์€ ๋–จ์–ด์ง€์ง€๋งŒ ์„ฑ๋Šฅ์€ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์™„์ „ํ•œ ECS๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—(๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ) ๋‚ฎ์€ ๊ต์ˆ˜ํ˜• ๊ณผ์ผ์— ๋Œ€ํ•œ ์‹คํ—˜์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ „์ฒด ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์œผ๋กœ ์ด๋™ํ•˜๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ์—…๋ฐ์ดํŠธ:

update_dirty_instances : 0.2-0.25๋ฐ€๋ฆฌ์ดˆ์—์„œ 0.1๋ฐ€๋ฆฌ์ดˆ๋กœ
octree_cull(๊ธฐ๋ณธ ๋ณด๊ธฐ): 0.35๋ฐ€๋ฆฌ์ดˆ์—์„œ 0.1๋ฐ€๋ฆฌ์ดˆ๋กœ

์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„? octree cull์˜ ๋Œ€์ฒด๋Š” ๊ฐ€์† ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  AABB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ™์–ด๋ฆฌ ๋ฐฐ์—ด์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

๋” ์›ƒ๊ธด ๋ถ€๋ถ„์€? ์ƒˆ๋กœ์šด ์ปฌ๋ง์€ 10์ค„์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋ผ์ธ์„ ํ•œ ๋ฒˆ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์†๋„ ํ–ฅ์ƒ์ด ์–ผ๋งˆ๋‚˜ ์ถ•์ ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์กฐ๋ช…์œผ๋กœ ์ƒˆ๋กœ์šด ์ปฌ๋ง์„ ๊ณ„์† ๊ตฌํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์•„๋งˆ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ๋„ ๊ตฌ๊ธ€ ๋ฒค์น˜๋งˆํฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์–ป์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

godotengine/godot-tests ์ €์žฅ์†Œ๊ฐ€ ์žˆ์ง€๋งŒ ์•„์ง ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์—…๋ฐ์ดํŠธ:

image

2๋‹จ๊ณ„๋กœ ์ƒ๋‹นํžˆ ๋ฉ์ฒญํ•œ ๊ณต๊ฐ„ ๊ฐ€์† ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๊ฐœ์„ ํ•˜๋ฉด ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€์—์„œ ๋‹ค๋ฅธ ํ–‰์€ ๋‹ค๋ฅธ ๋ฒ”์œ„์ด๊ณ  ๊ฐ ์ƒ‰์ƒ ๋ธ”๋ก์€ ์ž‘์—…/์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ทธ ์บก์ฒ˜์—์„œ ์ง์ ‘ ๋น„๊ต๋ฅผ ์œ„ํ•ด ์˜ฅํŠธ๋ฆฌ ์ปฌ๊ณผ ๋‚ด ์ปฌ์„ ๋‚˜๋ž€ํžˆ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ฒด ๊ฐ€์† ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์˜ค๋ž˜๋œ ๋‹จ์ผ octree ์ปฌ๋ง๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
๋˜ํ•œ ์ถ”๊ฐ€ ์ปฌ๋ง์€ ํ˜„์žฌ ์˜ฅํŠธ๋ฆฌ์˜ ์•ฝ ์ ˆ๋ฐ˜์—์„œ 1/3์ธ ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ์ƒ์„ฑ ๋น„์šฉ ์™ธ์—๋Š” ๋‚ด ๋ฉ์ฒญํ•œ ๊ตฌ์กฐ๊ฐ€ ํ˜„์žฌ ์˜ฅํŠธ๋ฆฌ๋ณด๋‹ค ๋Š๋ฆฐ ๊ฒฝ์šฐ๋ฅผ ํ•œ ๋ฒˆ๋„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ณด๋„ˆ์Šค๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์นœํ™”์ ์ด๋ฉฐ ๋ณ‘๋ ฌ๋กœ ์›ํ•˜๋Š” ์ฝ”์–ด ์ˆ˜๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์™„์ „ํžˆ ์—ฐ์†์ ์œผ๋กœ ํ™•์ธํ•˜๋ฏ€๋กœ ํฐ ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด SIMD๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์ฝ”๋“œ ์ค„์ด ํ›จ์”ฌ ์ ๊ณ  ํ˜„์žฌ ์˜ฅํŠธ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ์™•์ขŒ์˜ ๊ฒŒ์ž„์˜ ๋์ด ๋” ๋งŽ์€ ๊ณผ๋Œ€ ๊ด‘๊ณ ๋ฅผ ์ผ์œผํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค....

image

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ•˜์—ฌ ์ด์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ณ‘๋ ฌ ๋˜๋Š” ๋ณ‘๋ ฌ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ๋Š” C++17 ๋ณ‘๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฃผ ์ ˆ๋‘์ฒด ์ปฌ๋ง์—์„œ ์•ฝ 2๋ฐฐ์˜ ์†๋„ ํ–ฅ์ƒ์ด ์žˆ์ง€๋งŒ ์กฐ๋ช…์˜ ๊ฒฝ์šฐ ์ด์ „๊ณผ ๊ฑฐ์˜ ๊ฐ™์€ ์†๋„์ž…๋‹ˆ๋‹ค.

๋‚ด culler๋Š” ์ด์ œ ๊ธฐ๋ณธ ๋ณด๊ธฐ์—์„œ Godot octree๋ณด๋‹ค 10๋ฐฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/vblanco20-1/godot/blob/4ab733200faa20e0dadc9306e7cc93230ebc120a/servers/visual/visual_server_scene.cpp#L387
์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ์ปฌ๋ง ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ฐ€์† ๊ตฌ์กฐ๋Š” ๋ฐ”๋กœ ์œ„์— ์žˆ๋Š” ๊ธฐ๋Šฅ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ VS2015๋กœ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ฝ˜์†”์€ entt\ ๋‚ด๋ถ€์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ๋งŽ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

@Ranoller C++ 17์ด๋ฏ€๋กœ ์ตœ์‹  ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์–ด, Godot๊ฐ€ ์•„์ง C++17๋กœ ์˜ฎ๊ธฐ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„์š”? ์ ์–ด๋„ ๋‚˜๋Š” ๊ทธ ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํ† ๋ก ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๊นŒ?

Godot๋Š” C++ 03์ž…๋‹ˆ๋‹ค. ์ด ์›€์ง์ž„์€ ๋…ผ๋ž€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” @vblanco20-1์ด Juan์ด ์—ฐ๋ง์—ฐ์‹œ๋ฅผ ๋งˆ์น˜๋ฉด ์ด์•ผ๊ธฐํ•  ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค... ์ด ์ตœ์ ํ™”๋Š” ํ›Œ๋ฅญํ•  ๊ฒƒ์ด๊ณ  ์šฐ๋ฆฌ๋Š” ์ฆ‰์‹œ "์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค TM"์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

@vblanco20-1

octree_cull(๊ธฐ๋ณธ ๋ณด๊ธฐ): 0.35๋ฐ€๋ฆฌ์ดˆ์—์„œ 0.1๋ฐ€๋ฆฌ์ดˆ๋กœ

์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ฐœ์ฒด?

@nem0

@vblanco20-1

octree_cull(๊ธฐ๋ณธ ๋ณด๊ธฐ): 0.35๋ฐ€๋ฆฌ์ดˆ์—์„œ 0.1๋ฐ€๋ฆฌ์ดˆ๋กœ

์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ฐœ์ฒด?

์•ฝ 2200. godot octree๋Š” ์ˆ˜ํ‘œ๊ฐ€ ๋งค์šฐ ์ž‘์œผ๋ฉด ์ผ์ฐ ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๊ฐ€ ํด์ˆ˜๋ก ๋Š๋ฆฐ godot octree๊ฐ€ ๋‚ด ์†”๋ฃจ์…˜๊ณผ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค. Godot octree๊ฐ€ ์žฅ๋ฉด์˜ 90%๋ฅผ ์กฐ๊ธฐ์— ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ๋ชจ๋“  ๋‹จ์ผ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋ณธ์งˆ์ ์œผ๋กœ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์ œ ์‹œ์Šคํ…œ์€ ๊ฐ ์บ์‹œ ๋ผ์ธ์ด ์ƒ๋‹นํ•œ ์–‘์˜ AABB๋ฅผ ๋ณด์œ ํ•˜๋Š” ๋ฐฐ์—ด ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์–ด ์บ์‹œ ๋ฏธ์Šค.

๋‚ด ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ๋ธ”๋ก์ด 128๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ธ”๋ก ๋ฐฐ์—ด์ธ 2๋‹จ๊ณ„์˜ AABB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ์€ ๋Œ€๋ถ€๋ถ„ AABB ๋ฐฐ์—ด + ๋ธ”๋ก ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. AABB ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ๋ธ”๋ก์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก์€ AABB ๊ตฌ์กฐ์˜ ๋ฐฐ์—ด, ๋งˆ์Šคํฌ ๋ฐ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ตœ์ƒ์œ„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์ƒ์„ฑ์€ ๋งค์šฐ ๋ฉ์ฒญํ•œ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋” ์ž˜ ์ƒ์„ฑ๋˜๋ฉด ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ๋” ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 128 ์ด์™ธ์˜ ๋‹ค๋ฅธ ๋ธ”๋ก ํฌ๊ธฐ๋กœ ๋ช‡ ๊ฐ€์ง€ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ˆซ์ž๋ฅผ ํ™•์ธํ–ˆ๋Š”๋ฐ ๋ธ”๋ก๋‹น 128๊ฐœ๊ฐ€ ์—ฌ์ „ํžˆ ์ตœ์ ์˜ ์œ„์น˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž‘์€ ๋ฌผ์ฒด์—์„œ "ํฐ" ๋ฌผ์ฒด๋ฅผ ๋ถ„๋ฆฌํ•˜๋„๋ก ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ive๋Š” ๋˜ ๋‹ค๋ฅธ 30% ์†๋„ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ ์ง€๋„ ์ค‘์•™์„ ๋“ค์—ฌ๋‹ค๋ณด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ํฐ ๊ฐœ์ฒด๊ฐ€ ์ž‘์€ ๊ฐœ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ธ”๋ก AABB๋ฅผ ํŒฝ์ฐฝ์‹œํ‚ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. 3๊ฐ€์ง€ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ฐ€์žฅ ์ž˜ ์–ด์šธ๋ฆด ๊ฒƒ ๊ฐ™์•„์š”.

๋ธ”๋ก ์ƒ์„ฑ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ตœ์ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํฐ ๋ธ”๋ก์€ ์ค‘์•™์„ ๋ณผ ๋•Œ ์ธ์Šคํ„ด์Šค์˜ ์•ฝ 10~20%๋งŒ ์ปฌ๋งํ•˜๊ณ  ์ง€๋„ ๋ฐ–์„ ๋ณผ ๋•Œ ์ตœ๋Œ€ 50%๋ฅผ ์ปฌ๋งํ•˜๋ฏ€๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ๋งŽ์€ ์ถ”๊ฐ€ AABB ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์„  ์‚ฌํ•ญ์€ ์•„๋งˆ๋„ ํ˜„์žฌ octree๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์ง€๋งŒ "ํ‰ํ‰ํ•˜๊ฒŒ"ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ์‹คํ–‰ ์—†์ด๋„ ๋‚ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ˜„์žฌ ์˜ฅํŠธ๋ฆฌ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ๋” ๋‚˜์œ ๊ฒฝ์šฐ๋Š” ์ด์ œ ์—†์Šต๋‹ˆ๋‹ค.

@vblanco20-1 ๋‚˜๋Š” ๋‹น์‹ ์ด release ๋ชจ๋“œ( -O3 )๋กœ ์ปดํŒŒ์ผ๋œ godot์™€ ๋น„๊ต๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋””๋ฒ„๊ทธ์˜ ์ผ๋ฐ˜ ํŽธ์ง‘๊ธฐ ๋นŒ๋“œ(์ตœ์ ํ™”๊ฐ€ ์—†๊ณ  ๊ธฐ๋ณธ๊ฐ’์ž„)๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. ?
์–ด๋ฆฌ์„์€ ์งˆ๋ฌธ์ด๋ผ๋ฉด ์ฃ„์†กํ•˜์ง€๋งŒ ์Šค๋ ˆ๋“œ์— ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ์—†์Šต๋‹ˆ๋‹ค.
์•”ํŠผ ์ข‹์€ ์ž‘ํ’ˆ์ž…๋‹ˆ๋‹ค :)

@Faless ์ผ๋ถ€ ์ตœ์ ํ™”๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” release_debug์ž…๋‹ˆ๋‹ค. ๊ฒŒ์ž„์„ ์—ด ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด "๋ฆด๋ฆฌ์Šค"๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค(๊ฒŒ์ž„๋„ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋‚˜์š”?)

Ive๋Š” ์ปฌ๋ง์„ ํ›จ์”ฌ ๋” ๊ฐœ์„ ํ•˜๊ณ , ๋ชจ๋“  ํ”„๋ ˆ์ž„์„ ์žฌ์ƒ์„ฑํ•  ํ•„์š”๋ฅผ ์—†์• ๊ณ , ๋” ๋‚˜์€ ๊ณต๊ฐ„ ์ตœ์ ํ™”๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์žฌ์ƒ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , ๋ฉ”์ธ ์ปฌ์˜ ์„ฑ๋Šฅ์„ ์•ฝ๊ฐ„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ปฌ ์„ฑ๋Šฅ์„ ์—„์ฒญ๋‚˜๊ฒŒ ์ฆ๊ฐ€์‹œ์ผœ ๊ฑฐ์˜ 0์— ๊ฐ€๊นŒ์šด ๋น„์šฉ์„ ๊ฐ–๋Š” ํฌ์ธํŠธ๋ผ์ดํŠธ์— ๋Œ€ํ•œ ํŠน์ • ๋ชจ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "๋ฐ˜๊ฒฝ ์•ˆ์˜ ๊ฐ์ฒด"๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๊ฐ’์‹ผ O(1)๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

๋‚ด ์‹คํ—˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž‘๋™ํ•œ ๋ฐฉ์‹์—์„œ ์˜๊ฐ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„œ๋กœ ํŠ€๋Š” 400,000๊ฐœ์˜ ๋ฌผ๋ฆฌ ๊ฐœ์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

image

์ด์ œ ์ƒˆ๋กœ์šด ์ปฌ๋ง์ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋ธ”๋ก ์ƒ์„ฑ์ด ํ›จ์”ฌ ๋” ์Šค๋งˆํŠธํ•ด์ ธ์„œ ๋” ๋น ๋ฅธ ์ปฌ๋ง์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์กฐ๋ช…์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋Š” ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋‚ด ํฌํฌ์— ์ปค๋ฐ‹

ํ˜„์žฌ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์˜ ๋นŒ๋“œ์—์„œ ํ•ด๋‹น ๋ฒค์น˜๋งˆํฌ ๋„๊ตฌ(์Šคํฌ๋ฆฐ์ƒท์— ์žˆ๋Š” ๋„๊ตฌ)๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ ๊ตฌํ˜„์— ๋น„ํ•ด ๊ตฌํ˜„์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ ์ง€์ ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚œ ๋ฐ”๋ณด์•ผ, ์ด๋Ÿฐ.

@LikeLakers2 ์Šคํฌ๋ฆฐ์ƒท์—์„œ ํ˜„์žฌ ๊ตฌํ˜„๊ณผ ๊ตฌํ˜„์„ ๋ชจ๋‘ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Š” ์ด๊ฒƒ์„ ๋งˆ์Šคํ„ฐ ํฌํฌ์—์„œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

2018๋…„ 12์›” 12์ผ ์ˆ˜์š”์ผ MichiRecRoom [email protected]
์ผ๋‹ค:

@neikeq https://github.com/neikeq ์„ค๋ช…? ๋‚˜๋Š” ์Šคํฌ๋ฆฐ ์ƒท์„ ์ƒ๊ฐํ–ˆ๋‹ค
๊ฒŒ์‹œ๋œ ๊ฒƒ์€ ๊ทธ์˜ ๊ตฌํ˜„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฐ์ƒท๊ณผ ํ•จ๊ป˜ ์ง€๊ธˆ๊นŒ์ง€ ํ‘œํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/godotengine/godot/issues/23998#issuecomment-446831151 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ADLZ9pRh9Lksse9KBfWV0z5GmHRXf5P2ks5u4crCgaJpZM4YziJp
.

์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๋‰ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๋‰ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” reduz์™€ ์ด์•ผ๊ธฐํ–ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋‹ค๋ฅธ ์‹คํ—˜์„ ํ•˜๋Ÿฌ ๊ฐ”์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— 4.0์œผ๋กœ ์ปฌ๋ง์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ง ์œ ๋งํ•ด ๋ณด์˜€๋‹ค๋Š” ์ ์„ ์ƒ๊ฐํ•˜๋ฉด ์œ ๊ฐ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์ œ๋•Œ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ด๊ฒƒ์€ 4.0 ์ด์ •ํ‘œ๊ฐ€ ์ฃผ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๊นŒ? Reduz๋Š” Vulkan 4.0์— ๋Œ€ํ•œ ์ž‘์—…์„ ๊ณ„ํšํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ฃผ์ œ๋Š” ์„ฑ๋Šฅ์— ๊ด€ํ•œ ๋ฐ˜๋ฉด ๋ Œ๋”๋ง์— ์ค‘์ ์„ ๋‘๊ฑฐ๋‚˜ ์ ์–ด๋„ OP๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

@vblanco20-1 ์•ˆ๋งž๋Š”๋‹ค๊ณ  ํ•˜๋˜๊ฐ€์š”? C ++ 17๋กœ์˜ ์ด๋™ ๋•Œ๋ฌธ์— ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋‚˜ ์ด์ •ํ‘œ์— ๋‹ค๋ฅธ ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. #25013

๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฝค ์˜ค๋žซ๋™์•ˆ ๋ฉ‹์ง„ ํฌํฌ์— ๋Œ€ํ•ด ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
4์ฝ”์–ด ์ธํ…” CPU์™€ GTX 1070์ด ํƒ‘์žฌ๋œ ๋Œ€ํ˜• ๊ฒŒ์ž„์šฉ ๋…ธํŠธ๋ถ์—์„œ ์บก์ฒ˜
๋…ธ๋ฉ€ ๊ณ ๋„
image

๋‚ด ํฌํฌ https://github.com/vblanco20-1/godot/tree/ECS_Refactor
image

๋‘ ํ”„๋กœํ•„ ๋ชจ๋‘์—์„œ Red๋Š” ๋ณธ์งˆ์ ์œผ๋กœ "GPU ๋Œ€๊ธฐ"์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ opengl์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ drawcall๋กœ ์ธํ•ด ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. vulkan ๋˜๋Š” ์ „์ฒด ๋ Œ๋”๋Ÿฌ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋Š” ์‹ค์ œ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

CPU ์ธก์—์„œ๋Š” 13ms ํ”„๋ ˆ์ž„์—์„œ 5ms ํ”„๋ ˆ์ž„์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. "๋น ๋ฅธ" ํ”„๋ ˆ์ž„์€ 5.5ms์—์„œ 2.5ms๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
"์ด ํ”„๋ ˆ์ž„" ์ธก์—์„œ๋Š” 13ms์—์„œ 8-9ms๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
~75FPS ~ ~115FPS

CPU ์‹œ๊ฐ„ ๊ฐ์†Œ = ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ godot๋Š” CPU์—์„œ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋ฉด FPS๊ฐ€ ๋‚ฎ์•„์ง€๊ณ  ํฌํฌ๋Š” GPU์— ๋ฐ”์ธ๋”ฉ๋˜๋ฏ€๋กœ CPU๊ฐ€ "๋ฌด๋ฃŒ"์ด๊ธฐ ๋•Œ๋ฌธ์— FPS๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋งŽ์€ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๊ฝค ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐœ์„  ์‚ฌํ•ญ ์ค‘ ๋งŽ์€ ๋ถ€๋ถ„์ด Godot๋กœ ๋ณ‘ํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IF Godot๋Š” ์ตœ์‹  C++๋ฅผ ์ง€์›ํ•˜๊ณ  ๋งค์šฐ ์ €๋ ดํ•œ "์ž‘์€" ์ž‘์—…์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์‹œ์Šคํ…œ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์žฅ ํฐ ์ด๋“์€ ๋™์  ๊ฐœ์ฒด #25013์—์„œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๊ทธ๋ฆผ์ž ๋ฐ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋ผ์ดํŠธ๋งต ์ฝ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋Ÿฌ์˜ ๋‹ค๋ฅธ ๋งŽ์€ ๋ถ€๋ถ„๋„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ์ž…๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์ด์ ์€ Godot๋ณด๋‹ค 10๋ฐฐ์—์„œ 20๋ฐฐ ๋น ๋ฅธ Octree์™€ ์ปฌ ๋ชฉ๋ก์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋Œ€์‹  ๊นŠ์ด ์‚ฌ์ „ ํ†ต๊ณผ ๋ฐ ์ผ๋ฐ˜ ํ†ต๊ณผ ๋ Œ๋”๋ง ๋ชฉ๋ก์„ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ Œ๋”๋ง ํ๋ฆ„์˜ ์ผ๋ถ€ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๋ฒˆ์ด๊ณ  ๋ผ์ดํŠธ->๋ฉ”์‰ฌ ์—ฐ๊ฒฐ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด ํฌ๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์—ฐ๊ฒฐ ๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค!).

์ €๋Š” ํ˜„์žฌ TPS ๋ฐ๋ชจ ์ด์™ธ์˜ ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ ๋งต์„ ์ฐพ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋งต์—์„œ ๋” ๋งŽ์€ ๋ฉ”ํŠธ๋ฆญ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ์ผ๋ จ์˜ ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@vblanco20-1 ์™„์ „ ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ๋˜ํ•œ Vulkan์ด ๋ฉ‹์ง€์ง€๋งŒ ๊ดœ์ฐฎ์€ GLES3 ์„ฑ๋Šฅ์„ ๊ฐ–๋Š” ๊ฒƒ์ด Godot์—๊ฒŒ ์ ˆ๋Œ€์ ์ธ ์Šน๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ํ•œ Vulkan ์ง€์›์€ ์กฐ๋งŒ๊ฐ„ ์ฐฉ๋ฅ™ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์ง€๋งŒ GLES3 ํŒจ์น˜๋Š” ์—ฌ๊ธฐ ์‚ฌ๋žŒ๋“ค์ด ์ง€๊ธˆ ์™„์ „ํžˆ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ž…์ฆ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ์ ์  ๋” ๋งŽ์€ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ ์˜จ ๊ฒƒ์— ๋Œ€ํ•œ ๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ +1. Reduz๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ GLES3๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋™์˜ํ–ˆ๋‹ค๋ฉด ๋‚˜๋Š” ์ง€๊ตฌ์ƒ์—์„œ ๊ฐ€์žฅ ํ–‰๋ณตํ•œ ์‚ฌ๋žŒ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Godot์—์„œ 1.5๋…„ ๋™์•ˆ ๋งค์šฐ ์ง„์ง€ํ•œ 3D ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Godot๋ฅผ ๋งค์šฐ ์ง€์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๊ธฐ๋ถ€๊ธˆ ํฌํ•จ). ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฌ๊ณ ํ•œ 60FPS์˜ ๋ถ€์กฑ์€ ์ •๋ง๋กœ ์šฐ๋ฆฌ๋ฅผ ์˜์š•์„ ๊บพ๊ณ  ์šฐ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋ ฅ์„ ํฐ ์œ„ํ—˜์— ๋น ๋œจ๋ฆฝ๋‹ˆ๋‹ค.

ํฌ๋ ˆ๋”ง์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•„ ์ •๋ง ์•„์‰ฝ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ(3D ๋ฉด์—์„œ ๋งค์šฐ ๊ฐ„๋‹จํ•œ) ํ”„๋กœ์ ํŠธ๋กœ ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ ์•ˆ์— 60FPS๋ฅผ ๋‹ฌ์„ฑํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ ํ”Œ๋ ˆ์ด ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ชจ๋“  ๋…ธ๋ ฅ์ด ๋‚ญ๋น„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :/

@vblanco20-1 ์†”์งํžˆ ๋งํ•ด์„œ ํฌํฌ๋ฅผ ํ”„๋กœ๋•์…˜ ๊ฒŒ์ž„์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ : ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ: ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ 2๊ฐœ์˜ GLES3 ๋ž˜์Šคํ„ฐ๋ผ์ด์ €(GLES3 ๋ฐ GLES3-์ปค๋ฎค๋‹ˆํ‹ฐ)๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ : ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ: ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ 2๊ฐœ์˜ GLES3 ๋ž˜์Šคํ„ฐ๋ผ์ด์ €(GLES3 ๋ฐ GLES3-์ปค๋ฎค๋‹ˆํ‹ฐ)๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. GLES3 ๋ฐ GLES2 ๋ Œ๋”๋Ÿฌ๋กœ ์ง์ ‘ ์ˆ˜์ • ๋ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์•„์ด๋””์–ด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ ๋ Œ๋”๋ง์ด ์ฃผ์š” ๋ฐฉ์‹์œผ๋กœ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š” ํ•œ).

๋‹ค๋ฅธ ์ด์ ์€ Godot๋ณด๋‹ค 10๋ฐฐ์—์„œ 20๋ฐฐ ๋น ๋ฅธ Octree์™€ ์ปฌ ๋ชฉ๋ก์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋Œ€์‹  ๊นŠ์ด ์‚ฌ์ „ ํ†ต๊ณผ ๋ฐ ์ผ๋ฐ˜ ํ†ต๊ณผ ๋ Œ๋”๋ง ๋ชฉ๋ก์„ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ Œ๋”๋ง ํ๋ฆ„์˜ ์ผ๋ถ€ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๋ฒˆ์ด๊ณ  ๋ผ์ดํŠธ->๋ฉ”์‰ฌ ์—ฐ๊ฒฐ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด ํฌ๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์—ฐ๊ฒฐ ๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค!).

@vblanco20-1 C++03์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊นŠ์ด ์‚ฌ์ „ ํ†ต๊ณผ๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@Calinou ๊นŠ์ด

@vblanco20-1 ์†”์งํžˆ ๋งํ•ด์„œ ํฌํฌ๋ฅผ ํ”„๋กœ๋•์…˜ ๊ฒŒ์ž„์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@and3rson ์ œ๋ฐœ

Godot๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”? ์ด ์ƒ˜ํ”Œ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Godot ์†Œ์Šค์— Profiler.Begin ๋ฐ Profiler.End ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๊นŒ?

Godot๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”? ์ด ์ƒ˜ํ”Œ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Godot ์†Œ์Šค์— Profiler.Begin ๋ฐ Profiler.End ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๊นŒ?

Tracy ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์Šค์ฝ”ํ”„ ํ”„๋กœํŒŒ์ผ ๋งˆํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ZoneScopedNC("Fill List", 0x123abc)๋Š” ํ•ด๋‹น ์ด๋ฆ„๊ณผ ์›ํ•˜๋Š” 16์ง„์ˆ˜ ์ƒ‰์ƒ์œผ๋กœ ํ”„๋กœํ•„ ํ‘œ์‹œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

@vblanco20-1 - ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ ์ค‘ ์ผ๋ถ€๊ฐ€ Godot ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ์˜ฎ๊ฒจ์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์„๊นŒ์š”?

@vblanco20-1 - ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ ์ค‘ ์ผ๋ถ€๊ฐ€ Godot ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ์˜ฎ๊ฒจ์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์„๊นŒ์š”?

์•„๋งˆ๋„ C++11์ด ์ง€์›๋  ๋•Œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ reduz๋Š” vulkan์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๋ Œ๋”๋Ÿฌ์—์„œ ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ ˆ๋Œ€ ๊ทธ๋Ÿด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™” ์ž‘์—…์˜ ์ผ๋ถ€ ๊ฒฐ๊ณผ๋Š” 4.0 ๋ Œ๋”๋Ÿฌ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@vblanco20-1 ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ํ™˜๊ฒฝ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋งˆ์Œ, ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋˜ํ•œ AABB ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Godot ๋ฉ”์ธ์— ์ถ”๊ฐ€ ๋น„์šฉ ์—†์ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‚˜์š”?

@vblanco20-1 ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ํ™˜๊ฒฝ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋งˆ์Œ, ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋˜ํ•œ AABB ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Godot ๋ฉ”์ธ์— ์ถ”๊ฐ€ ๋น„์šฉ ์—†์ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‚˜์š”?

@swarnimarun Visual Studio 17 ๋˜๋Š” 19(๋‚˜์ค‘ ์—…๋ฐ์ดํŠธ ์ค‘ ํ•˜๋‚˜)๋Š”
scons ์Šคํฌ๋ฆฝํŠธ๋Š” cpp17 ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜„์žฌ ํŽธ์ง‘๊ธฐ ์‹คํ–‰์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์Šฌํ”„๊ฒŒ๋„ AABB ๋ณ€๊ฒฝ์€ ๊ฐ€์žฅ ํฐ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Godot octree๋Š” ๋น„์ฃผ์–ผ ์„œ๋ฒ„์˜ ๋งŽ์€ ๊ฒƒ๋“ค๊ณผ ์–ฝํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ง์„ ์œ„ํ•ด ๊ฐœ์ฒด๋ฅผ ์ถ”์ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐœ์ฒด๋ฅผ ํŽ˜์–ด๋งํ•˜๊ธฐ ์œ„ํ•œ ์ž์ฒด ์‹œ์Šคํ…œ์œผ๋กœ ์กฐ๋ช…/๋ฐ˜์‚ฌ ํ”„๋กœ๋ธŒ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์Œ์€ ๋˜ํ•œ octree์˜ ์—ฐ๊ฒฐ ๋ชฉ๋ก ๊ตฌ์กฐ์— ์˜์กดํ•˜๋ฏ€๋กœ ๋งŽ์€ ์‹œ๊ฐ์  ์„œ๋ฒ„๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ octree๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ๊ฐ์ฒด ์œ ํ˜•์— ๋Œ€ํ•ด ํฌํฌ์—์„œ ์ผ๋ฐ˜์ ์ธ godot octree๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

@vblanco20-1 ํŒจํŠธ๋ฆฌ์˜จ์ด ์žˆ๋‚˜์š”? ์„ฑ๋Šฅ์— ์ค‘์ ์„ ๋‘” ํฌํฌ์— ์•ฝ๊ฐ„์˜ ๋ˆ์„ ํˆฌ์žํ•˜๊ณ  ๊ณ ๋Œ€ C++๋กœ ์ œํ•œ๋˜์ง€ ์•Š์œผ๋ฉฐ ์•„๋งˆ๋„ ์ €๋งŒ์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 3D ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด Godot๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ์‹ถ์ง€๋งŒ ํ•ต์‹ฌ ํŒ€์— ๋Œ€ํ•œ ์„ฑ๋Šฅ ๋ฐ ์‚ฌ์šฉ์„ฑ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฐœ๋…์ด ์—†์œผ๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์งˆ ๊ฒƒ์ด๋ผ๋Š” ํฌ๋ง์„ ์žƒ์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@mixedCase ์ €๋Š” Godot์˜ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํฌํฌ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ์ฃผ์ €ํ•ฉ๋‹ˆ๋‹ค. ํฌํฌ์™€ ๋‹จํŽธํ™”๋Š” ์ข…์ข… ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ์ฃฝ์Œ์ž…๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ์‹œ๋‚˜๋ฆฌ์˜ค, ๊ทธ๋ฆฌ๊ณ  ๋” ์ƒˆ๋กœ์šด C++๊ฐ€ ์ƒ๋‹นํ•œ ์ตœ์ ํ™”๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์ž…์ฆ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Godot๋Š” ๊ณต์‹์ ์œผ๋กœ ์ตœ์‹  ๋ฒ„์ „์˜ C++๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด Godot 4.0์—์„œ ์ผ์–ด๋‚  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ณ , 3.2์—์„œ ํŒŒ์†์˜ ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๊ณ , Vulkan์ด Godot 4.0์— ์ถ”๊ฐ€๋  ๋•Œ ์ƒˆ๋กœ์šด C++ ๊ธฐ๋Šฅ์ด ํ™œ์šฉ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ reduz๊ฐ€ ์‚ญ์ œ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— GLES 3 ๋ Œ๋”๋Ÿฌ์— ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” Godot ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ง€ ๋‚ด ์ถ”์ธก์ผ ๋ฟ์ž…๋‹ˆ๋‹ค)

@aaronfrank ์ €๋„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜๊ตฌ ํฌํฌ๋Š” ์ด์ƒ์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฐ€ ๋งํ•œ ๊ฒƒ์—์„œ ๋‚ด๊ฐ€ ์ˆ˜์ง‘ํ•œ ๊ฒƒ(์ œ๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์ €๋ฅผ ๋ฐ”๋กœ ์žก์•„ ์ฃผ์‹ญ์‹œ์˜ค )์€ ๋œ๋‹ค๊ณ  ๋ฏฟ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค ์ค‘ ์ผ๋ถ€๋Š” ์ฝ”๋“œ๋ฅผ "์ฝ์„ ์ˆ˜ ์—†๋Š”" ๊ฒƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค(์ ์–ด๋„ C++์ด ๊ฑฐ์˜ 10๋…„ ์ „์— ์žˆ์—ˆ๋˜ "์ฆ๊ฐ• C"์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š”).

์ €๋Š” Juan์ด ๋งค์šฐ ์‹ค์šฉ์ ์ธ ์‚ฌ๋žŒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—”์ง€๋‹ˆ์–ด๋ง ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๊ฐ€ ์•„๋งˆ๋„ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ™•์‹ ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ˜„๋Œ€ ์ถ”์ƒํ™”์™€ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์ ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐœ๋… ์ฆ๋ช…์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. @vblanco20-1์€ ์ง€๊ธˆ๊นŒ์ง€ ๋†€๋ผ์šด ์ผ์„ ํ•ด๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ๊ฐ€ ๊ทธ๋Ÿฐ ์ผ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋งค๋‹ฌ ๊ทธ์—๊ฒŒ ์•ฝ๊ฐ„์˜ ๋ˆ์„ ์ ๋Š” ๊ฒƒ์„ ์ฃผ์ €ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” Godot ๊ฐœ๋ฐœ์ž๋“ค์ด ์ข‹์€ ์•„์ด๋””์–ด, ์„ฑ๊ณผ, ๋ฐœ์ „์— ์•Œ๋ ˆ๋ฅด๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ–‰๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Š์ž„์—†์ด ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด๊ฒŒ ์•ˆ๋“ค์–ด๊ฐ„๊ฒŒ ์•„์‰ฝ๋„ค์š”.

์ด๊ฒƒ์€ ์ตœ์ ํ™”, ์ •ํ™•ํžˆ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์ž‘์—… ์ค‘์ธ ์ผ๋ จ์˜ ๊ธฐ์‚ฌ์—์„œ ๋ฐœ์ทŒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Godot๋Š” STL ์ปจํ…Œ์ด๋„ˆ์™€ C++03์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์ด๋™ ์—ฐ์‚ฐ์ž๊ฐ€ ์—†์œผ๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ STL ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด๋ณด๋‹ค ๋” ๋‚˜์œ ๊ฒฝํ–ฅ์ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ Godot ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ฐœ์š”์™€ ๊ทธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ํ• ๋‹น๋œ C++ ๋ฐฐ์—ด. ์ „์ฒด ์—”์ง„์—์„œ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ํฌ๊ธฐ๋Š” ์ผ๋ถ€ ๊ตฌ์„ฑ ์˜ต์…˜์— ์˜ํ•ด ์„ค์ •๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ Œ๋”๋Ÿฌ์—์„œ ๋งค์šฐ ์ผ๋ฐ˜์ ์ด๋ฉฐ ์ ์ ˆํ•œ ๋™์  ๋ฐฐ์—ด ํด๋ž˜์Šค๊ฐ€ ์—ฌ๊ธฐ์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์˜ค์šฉ์˜ ์˜ˆ: https://github.com/godotengine/godot/blob/master/servers/visual/visual_server_scene.h#L442
์ด ๋ฐฐ์—ด์€ ์ •๋‹นํ•œ ์ด์œ  ์—†์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์  ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์ƒ์ˆ˜์— ์˜ํ•œ ์ตœ๋Œ€ ํฌ๊ธฐ ๋Œ€์‹  ํ•„์š”ํ•œ ํฌ๊ธฐ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ํ›จ์”ฌ ๋” ๋‚˜์€ ์˜ต์…˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. MAX_INSTANCE_CULL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ Instance* ์–ด๋ ˆ์ด๋Š” 0.5MB์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Vector( vector.h) std::vector ๋™์  ๋ฐฐ์—ด๊ณผ ๋™์ผํ•˜์ง€๋งŒ ์‹ฌ๊ฐํ•œ ๊ฒฐํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฒกํ„ฐ๋Š” copy-on-write ๊ตฌํ˜„์œผ๋กœ ์›์ž์ ์œผ๋กœ ๋‹ค์‹œ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ํ•  ๋•Œ

๋ฒกํ„ฐ a = build_vector();
๋ฒกํ„ฐ b = a;

refcount๋Š” 2๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ B์™€ A๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๋™์ผํ•œ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ํŽธ์ง‘์ด ์ด๋ฃจ์–ด์ง€๋ฉด ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋ฒกํ„ฐ A ๋˜๋Š” B๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋ฒกํ„ฐ ๋ณต์‚ฌ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋ฒกํ„ฐ์— ์“ธ ๋•Œ๋งˆ๋‹ค ์›์ž refcount๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฒกํ„ฐ์˜ ๋ชจ๋“  ๋‹จ์ผ ์“ฐ๊ธฐ ์ž‘์—…์ด ๋Š๋ ค์ง‘๋‹ˆ๋‹ค. Godot Vector๋Š” ์ตœ์†Œํ•œ std::vector๋ณด๋‹ค 5๋ฐฐ ๋Š๋ฆฐ ๊ฒƒ์œผ๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋ฒกํ„ฐ์—์„œ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ฒกํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ์žฌ๋ฐฐ์น˜๋˜์–ด ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ๋”์ฐํ•œ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ’€ ๋ฒกํ„ฐ(pool_vector.h). ๋ฒกํ„ฐ์™€ ๊ฑฐ์˜ ๊ฐ™์ง€๋งŒ ๋Œ€์‹  ํ’€์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์™€ ๊ฐ™์€ ํ•จ์ •์ด ์žˆ๋Š”๋ฐ, ์•„๋ฌด ์ด์œ  ์—†์ด ์“ฐ๊ธฐ ์‹œ ๋ณต์‚ฌํ•˜๊ณ  ์ž๋™์œผ๋กœ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค.

๋ชฉ๋ก( list.h)์— ํ•ด๋‹นํ•˜๋Š” std::list๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์—๋Š” 2๊ฐœ์˜ ํฌ์ธํ„ฐ(์ฒซ ๋ฒˆ์งธ ๋ฐ ๋งˆ์ง€๋ง‰) + ์š”์†Œ ์ˆ˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ด์ค‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ชฉ๋ก ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ํฌ์ธํ„ฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” 24๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. Vector๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Godot์—์„œ ๋”์ฐํ•˜๊ฒŒ ๋‚จ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—”์ง„ ์ „์ฒด์— ๋”์ฐํ•˜๊ฒŒ ์˜ค์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํฐ ์˜ค์šฉ์˜ ์˜ˆ:
https://github.com/godotengine/godot/blob/master/servers/visual/visual_server_scene.h#L129
์ด๊ฒƒ์ด ๋ชฉ๋ก์ด์–ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์—†์œผ๋ฉฐ ๋ฒกํ„ฐ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/godotengine/godot/blob/master/servers/visual/visual_server_scene.h#L242
์ด ๊ฒฝ์šฐ๋Š” ๋ชจ๋‘ ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ๋ฒกํ„ฐ ๋˜๋Š” ์œ ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์žฅ ํฐ ์‹ค์ˆ˜๋Š” ์ปฌ๋ง์— ์‚ฌ์šฉ๋˜๋Š” ์˜ฅํŠธ๋ฆฌ์—์„œ List๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋ฏธ ์ด ์Šค๋ ˆ๋“œ์—์„œ ๊ณ ๋„ ์˜ฅํŠธ๋ฆฌ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

Boost::intrusive_list์™€ ์œ ์‚ฌํ•œ SelfList(self_list.h) ์นจ์ž… ๋ชฉ๋ก. ์ด๊ฒƒ์€ ํ•ญ์ƒ ๋…ธ๋“œ๋‹น 32๋ฐ”์ดํŠธ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž์ฒด๋„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—”์ง„ ์ „์ฒด์— ๋”์ฐํ•˜๊ฒŒ ์˜ค์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ:
https://github.com/godotengine/godot/blob/master/servers/visual/visual_server_scene.h#L159
์ด๊ฒƒ์€ ํŠนํžˆ ๋‚˜์ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์—”์ง„์—์„œ ์ตœ์•… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋ฌด ์ด์œ  ์—†์ด ์—”์ง„์˜ ๋ชจ๋“  ๋‹จ์ผ ๋ Œ๋”๋ง ๊ฐ€๋Šฅํ•œ ๊ฐœ์ฒด์— 8๊ฐœ์˜ ๋šฑ๋šฑํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ชฉ๋ก์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ, ๊ทธ๊ฒƒ์€ ์Šฌ๋กฏ๋งต์ด๋‚˜ ๋ฒกํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ๋Œ€์ฒดํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Map(map.h) ์ -๊ฒ€์ • ๋‚˜๋ฌด. ๊ฑฐ์˜ ๋ชจ๋“  ์šฉ๋„์—์„œ ํ•ด์‹œ๋งต์œผ๋กœ ์˜ค์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•์— ๋”ฐ๋ผ OAHashmap ๋˜๋Š” Hashmap์„ ์œ„ํ•ด ์—”์ง„์—์„œ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ๋ณธ ์ง€๋„์˜ ๋ชจ๋“  ์‚ฌ์šฉ์€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€์žˆ๋Š” ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Map์˜ ์˜ˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Hashmap( hash_map.h) ์€ std::unordered_map๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๋ฉฐ, ์—ฐ๊ฒฐ ๋ชฉ๋ก ๋ฒ„ํ‚ท์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํ์‡„ํ˜• ์ฃผ์†Œ ์ง€์ • ํ•ด์‹œ๋งต์ž…๋‹ˆ๋‹ค. ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ๋‹ค์‹œ ํ•ด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OAHashMap( oa_hash_map.h) ์ƒˆ๋กœ ์ž‘์„ฑ๋œ ๊ณ ์† ๊ฐœ๋ฐฉ ์ฃผ์†Œ ์ง€์ • ํ•ด์‹œ๋งต. ๋กœ๋นˆํ›„๋“œ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ๋งต๊ณผ ๋‹ฌ๋ฆฌ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. std::unordered_map๋ณด๋‹ค ํ›จ์”ฌ ์ž˜ ๊ตฌํ˜„๋œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

CommandQueueMT(command_queue_mt.h) ๋น„์ฃผ์–ผ ์„œ๋ฒ„์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น ํ์ž…๋‹ˆ๋‹ค. ํ•˜๋“œ์ฝ”๋”ฉ๋œ 250kb ์–ด๋ ˆ์ด๋ฅผ ํ• ๋‹น์ž ํ’€๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๊ณ  ๋ชจ๋“  ๋ช…๋ น์„ ๊ฐ€์ƒ call() ๋ฐ post() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ํ‘ธ์‹œ/ํŒ ์ž‘์—…์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฎคํ…์Šค๋ฅผ ์ž ๊ทธ๋Š” ๊ฒƒ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฌด๋””์นด๋ฉœ ๋Œ€๊ธฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ๋Œ€๊ธฐ์—ด์€ ํ›จ์”ฌ ๋” ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŽ์€ ์›€์ง์ด๋Š” ๊ฐœ์ฒด์™€ ๊ฐ™์ด ์‹œ๊ฐ์  ์„œ๋ฒ„๋กœ ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒŒ์ž„์˜ ๊ฒฝ์šฐ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Godot์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ๊ฑฐ์˜ ํ•ต์‹ฌ ์„ธํŠธ์ž…๋‹ˆ๋‹ค. ์ ์ ˆํ•œ std::vector ๋™๋“ฑ๋ฌผ์ด ์—†์Šต๋‹ˆ๋‹ค. "๋™์  ๋ฐฐ์—ด" ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฒกํ„ฐ์™€ ์“ฐ๊ธฐ ์‹œ ๋ณต์‚ฌ ๋ฐ ํฌ๊ธฐ ์ถ•์†Œ์— ๋Œ€ํ•œ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” DynamicArray ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ ์ง€๊ธˆ godot๊ฐ€ ๊ฐ€์žฅ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํฌํฌ์˜ ๊ฒฝ์šฐ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ STL ๋ฐ ๊ธฐํƒ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” godot ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 2๊ฐœ์˜ ํ•ด์‹œ๋งต์„ ์ œ์™ธํ•˜๊ณ  STL๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ”ผํ•ฉ๋‹ˆ๋‹ค.


4.0์˜ vulkan ๊ตฌํ˜„์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ˆ˜์ •ํ•  ์‹œ๊ฐ„์ด ์•„์ง ์žˆ์Šต๋‹ˆ๋‹ค.

๋ Œ๋” API์—์„œ ๋งต ์‚ฌ์šฉ. https://github.com/godotengine/godot/blob/vulkan/drivers/vulkan/rendering_device_vulkan.h#L350
๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Map์€ ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์กด์žฌํ•  ์ด์œ ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ํ•ด์‹œ๋งต์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ฐฐ์—ด ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ ๋Œ€์‹  ์—ฐ๊ฒฐ ๋ชฉ๋ก์„ ๋‚จ์šฉํ•ฉ๋‹ˆ๋‹ค.
https://github.com/godotengine/godot/blob/vulkan/drivers/vulkan/rendering_device_vulkan.h#L680
์šด ์ข‹๊ฒŒ๋„ ์ด๊ฒƒ์€ ๋น ๋ฅธ ๋ฃจํ”„๊ฐ€ ์•„๋‹ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” List๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

๋ Œ๋”๋ง API์—์„œ PoolVector ๋ฐ Vector ์‚ฌ์šฉ. https://github.com/godotengine/godot/blob/vulkan/drivers/vulkan/rendering_device_vulkan.h#L747
๋ Œ๋” API ์ถ”์ƒํ™”์˜ ์ผ๋ถ€๋กœ ๊ฒฐํ•จ์ด ์žˆ๋Š” 2๊ฐœ์˜ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์‹  ๋‹จ์ ์ด ์žˆ๋Š” 2๊ฐœ๋ฅผ ๊ฐ•์ œ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ํฌ์ธํ„ฐ + ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜ ๋ฒ„์ „์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด API๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•ด๋ฅผ ๋ผ์น˜๋Š” ์‹ค์ œ ์˜ˆ๋Š” ์ •์  ๋ฒ„ํผ ์ƒ์„ฑ ํ•จ์ˆ˜์— ์žˆ์Šต๋‹ˆ๋‹ค. GLTF ํ˜•์‹์—์„œ ์ •์  ๋ฒ„ํผ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ์••์ถ•๋ฉ๋‹ˆ๋‹ค. ์ด API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” GLTF ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฒ„ํผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๊ณ  ๊ฐ ๋ฒ„ํผ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ์ด ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ API๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
API๊ฐ€ ํฌ์ธํ„ฐ + ํฌ๊ธฐ ๋˜๋Š” Span<> ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•  ํ•„์š” ์—†์ด ๋กœ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฒ„ํผ์—์„œ API๋กœ ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ณต์…€ ์—”์ง„๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ์  ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋‚ด๋ถ€ ๊ตฌ์กฐ์—์„œ ์ง์ ‘ ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋Œ€์‹  ์ •์  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด Vector๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ Vector์— ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด CppCon์˜ ์ด ๊ฐ•์—ฐ์ด ์ œ๊ฐ€ ์•„๋Š” ์ตœ๊ณ ์˜ ๊ฐ•์—ฐ์ž…๋‹ˆ๋‹ค. https://www.youtube.com/watch?v=fHNmRkzxHWs
๋‹ค๋ฅธ ์ข‹์€ ์ด์•ผ๊ธฐ๋Š” https://www.youtube.com/watch?v=-8UZhDjgeZU ์ž…๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์„œ Godot ์š”๊ตฌ์— ๋งค์šฐ ์œ ์šฉํ•œ ์Šฌ๋กฏ๋งต๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Godot๋Š” ์„ฑ๋Šฅ์— ํฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค... ๋‹น์‹ ์€ Godot ํŒ€์˜ ์ข‹์€ ๋™๋ฃŒ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค!

๊ธฐ์—ฌํ•˜๊ฑฐ๋‚˜ ๋„์›€์„ ์ค„ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค.

@vblanco20-1 ์ข‹์€ ์˜๋„๋ฅผ ๊ฐ–๊ณ  ๊ณ„์‹œ๋‹ค๋Š” ์ ์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—”์ง„์˜ ๋‚ด๋ถ€ ์ž‘๋™ ๋ฐฉ์‹์ด๋‚˜ ๊ทธ ๋’ค์— ์ˆจ์€ ์ฒ ํ•™์„ ์ „ํ˜€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ณ„์‹ญ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์˜๊ฒฌ์€ ๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•, ์„ฑ๋Šฅ์— ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ์–ด์กฐ๋„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ณต๊ฒฉ์ ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€, ๋˜๋Š” ์™œ ์–ด๋–ค ๊ฒƒ์ด ํŠน์ •ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ–‰ํ•ด์ง€๋Š”์ง€ ๋ฌป๋Š” ๋Œ€์‹ ์—, ๋‹น์‹ ์€ ๋‹จ์ง€ ์˜ค๋งŒํ•˜๊ฒŒ ๊ตด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ํƒœ๋„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ตœ์ ํ™”์— ๊ด€ํ•ด ์–ธ๊ธ‰ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ๋“ค์€ ๋‚ด๊ฐ€ Godot 4.0์—์„œ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๊ณ„ํšํ•œ ํ•ญ๋ชฉ์˜ ์•„์ฃผ ์ž‘์€ ํ‘œ๋ฉด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค(๋‚ด ๋ชฉ๋ก์— ๋” ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค). ๋‚˜๋Š” ์ด๋ฏธ ์ด๊ฒƒ์ด ๋ช‡ ๋‹ฌ ์ „ ์ดํ›„๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‹ค์‹œ ์ž‘์„ฑ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋ฅผ ๋ฏฟ์ง€ ์•Š์œผ์…”๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค๋งŒ, ๋ช…๋ฐฑํ•œ ์ด์œ  ์—†์ด ์ด๊ฒƒ์œผ๋กœ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•˜์‹œ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž‘์—…์„ ๋งˆ์นœ ํ›„์—๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋งค์šฐ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ ํ•˜๊ณ  ์žˆ๋Š” ์ผ์€ ์ฃฝ์€ ๋ง์„ ๋•Œ๋ฆฌ๋Š” ๊ฒƒ๋ฟ์ด๋ฏ€๋กœ ์ž ์‹œ ์ง„์ •ํ•˜์‹ญ์‹œ์˜ค.

๋‹ค์‹œ ๋ง์”€๋“œ๋ฆฌ์ง€๋งŒ, Godot 4.0์˜ ์•ŒํŒŒ ๋ฒ„์ „์ด ์ถœ์‹œ๋˜๋ฉด(์˜ฌํ•ด ๋ง ์ „์—) ๋ชจ๋“  ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•˜๊ณ  ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์ด์ต์„ ์–ป์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ 4.0์—์„œ ์‚ฌ๋ผ์ง€๊ณ  3.x ๋ธŒ๋žœ์น˜์—์„œ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋…ผ์˜ํ•˜๋Š” ๋ฐ ํฐ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์ง€์ ์—์„œ๋Š” ์•ˆ์ •์„ฑ์ด ์ตœ์ ํ™”๋ณด๋‹ค ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ด ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—:

  • ๋ชจ๋“  ๊ณต๊ฐ„ ์ธ๋ฑ์‹ฑ ์ฝ”๋“œ(vblanco๊ฐ€ ๋‹ค์‹œ ์ž‘์„ฑํ•œ ๊ฒƒ)๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์ปฌ๋ง์„ ์œ„ํ•œ ์„ ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋Œ€์ฒด๋˜๋ฉฐ, ๊ณ„์ธต์  ์˜คํด๋ฃจ์ „ ์ปฌ๋ง์„ ์œ„ํ•œ octree ๋ฐ ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ SAP์™€ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ฒŒ์ž„์—์„œ ์„ฑ๋Šฅ. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ํ• ๋‹น์€ O(1) ์ธ ์ƒˆ๋กœ์šด RID_Allocator์™€ ๊ฐ™์€ ๋งฅ๋ฝ์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ „์— @vblanco20-1๊ณผ ์ด๊ฒƒ์„ ๋…ผ์˜ํ–ˆ๊ณ  ๊ทธ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ Godot ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์งˆ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋˜์ง€ ์•Š๋Š” ์กฐ์ •์— ์–ด๋Š ์ •๋„์˜ ์ „๋ฌธ ์ง€์‹์ด ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋ชจ๋“  ์œ ํ˜•์˜ ๊ฒŒ์ž„์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜คํด๋ฃจ์ „ ์ปฌ๋ง์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ข‹์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชฉ๋ก์€ ๋ถ„ํ•  ์œ„ํ—˜์ด ์ „ํ˜€ ์—†๋Š” ์ž‘์€ ์‹œ๊ฐ„ ํ• ๋‹น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ํ•ญ์ƒ ์ฆ๊ฐ€ํ•˜๊ณ  ์ ˆ๋Œ€ ์ถ•์†Œ๋˜์ง€ ์•Š๋Š” ์„น์…˜ํ™”๋œ ๋ฐฐ์—ด(ํŽ˜์ด์ง€์— ์ •๋ ฌ๋˜์–ด ์กฐ๊ฐํ™” ์—†์Œ)์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค(RID_Allocator ๋˜๋Š” 2D ์—”์ง„ Vulkan ๋ถ„๊ธฐ์˜ ์ƒˆ CanvasItem์—์„œ์™€ ๊ฐ™์ด ์ด์ œ ํ•ญ๋ชฉ์„ ๋‹ค์‹œ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Œ). ๋งŽ์€ ๋ช…๋ น์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ) ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Godot์—์„œ ๋ชฉ๋ก์ด ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋Š” ์„ฑ๋Šฅ๋ณด๋‹ค ์ž‘์€ ํ• ๋‹น์ด ์„ ํ˜ธ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์‹ค์ œ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ ์˜๋„๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค).
  • PoolVector๋Š” ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” ๋งค์šฐ ํฐ ํ• ๋‹น์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Godot 2.1๊นŒ์ง€๋Š” ์‚ฌ์ „ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ํ’€์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ด๊ฒƒ์€ 3.x์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฉฐ ํ˜„์žฌ ํ˜„์žฌ ๋™์ž‘์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 4.0์˜ ๊ฒฝ์šฐ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋Œ€์ฒด๋˜๋ฉฐ ํ•  ์ผ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • Godot์˜ Vector<>๋ฅผ std::vector์™€ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ๋น ๋ฅธ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ์ž ๊ธ‰๋‹ˆ๋‹ค(ptr() ๋˜๋Š” ptrw() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด). std::vector๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด Godot๋Š” ๋ถˆํ•„์š”ํ•œ ๋ณต์‚ฌ๋กœ ์ธํ•ด ํ›จ์”ฌ โ€‹โ€‹๋Š๋ ค์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์“ฐ๊ธฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ๋ณต์‚ฌ๋ฅผ ๋งŽ์ด ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Map<>์€ ๋งŽ์€ ์–‘์˜ ์š”์†Œ์— ๋Œ€ํ•ด ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์นœ์ˆ™ํ•˜๋ฉฐ ๋‹จํŽธํ™”๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธ‰๊ฒฉํ•œ ์„ฑ์žฅ/์ถ•์†Œ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ HashMap์ด ๋Œ€์‹  ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์‚ฌ์‹ค์ด์ง€๋งŒ OAHashMap์„ ๋” ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ์ƒˆ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿด ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค). ์ผ๋ฐ˜์ ์ธ ์ฒ ํ•™์œผ๋กœ ์„ฑ๋Šฅ์ด ์šฐ์„ ์‹œ๋˜์ง€ ์•Š์„ ๋•Œ ์šด์˜ ์ฒด์ œ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž๊ฐ€ ์ž‘์€ ๊ตฌ๋ฉ์„ ์ฐพ๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์€ ํ• ๋‹น์ด ํฐ ํ• ๋‹น๋ณด๋‹ค ํ•ญ์ƒ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค(์ด๋Š” ๊ฑฐ์˜ ์˜๋„๋œ ์ž‘์—…์ž…๋‹ˆ๋‹ค). , ํšจ๊ณผ์ ์œผ๋กœ ๋” ์ ์€ ํž™์„ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋‹น์‹ ์ด ์›ํ•  ๋•Œ ์–ธ์ œ๋“ ์ง€ ๊ณ„ํš๊ณผ ๋””์ž์ธ์— ๋Œ€ํ•ด ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์ ์งˆํ•˜๊ณ  ๋ถˆํ‰ํ•˜๋Š” ๋Œ€์‹ , ์ด๊ฒƒ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋•๋Š” ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ณต๊ฐ„ ์ธ๋ฑ์„œ๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋Š๋ฆฐ ์ด์œ ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ดํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์•„๋งˆ๋„ ์—ฌ๋Ÿฌ๋ถ„์ด Godot๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์•„์ฃผ ์ตœ๊ทผ๊นŒ์ง€ 3D ์—”์ง„์€ 10๋…„์ด ๋„˜์—ˆ๊ณ  ๋งค์šฐ ๊ตฌ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค. OpenGL ES 3.0์—์„œ ํ˜„๋Œ€ํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ OpenGL์—์„œ ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ์™€ Vulkan์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ์ค‘๋‹จํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค(Apple์—์„œ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค).

์ด์— ๋”ํ•ด Godot๋Š” ์–ผ๋งˆ ์ „๊นŒ์ง€๋งŒ ํ•ด๋„ PSP์™€ ๊ฐ™์€ ์žฅ์น˜์—์„œ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋งค์šฐ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ตœ์ ํ™”๋˜๊ณ  ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝ๋˜๊ณ  ์žˆ์ง€๋งŒ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์˜๋ฏธํ•˜๊ณ  ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ๋งŽ์€ ์œ„์น˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชฉ๋ก์„ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•˜์ง€.

๋˜ํ•œ, ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๋งŽ์€ ์ตœ์ ํ™”(๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋งŽ์€ ๋ฎคํ…์Šค ์ฝ”๋“œ๋ฅผ ์›์ž๋กœ ์ด๋™)๋Š” Godot๋ฅผ C++11(์ธ๋ผ์ธ๋œ ์›์ž์— ๋Œ€ํ•œ ํ›จ์”ฌ ๋” ๋‚˜์€ ์ง€์›์„ ๊ฐ–๊ณ  ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€)์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ณด๋ฅ˜๋˜์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์˜ค์—ผ์‹œํ‚ค๋Š” Windows ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•ˆ์ •์ ์ธ ๋ถ„๊ธฐ์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. C++11๋กœ์˜ ์ด๋™์€ Godot 3.2๊ฐ€ ๋ถ„๊ธฐ๋˜๊ณ  ๊ธฐ๋Šฅ์ด ์ •์ง€๋œ ํ›„์— ์ด๋ฃจ์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Vulkan Master ๋ถ„๊ธฐ๋ฅผ ๋™๊ธฐํ™” ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํฐ ๊ณ ํ†ต์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ดˆ์ ์ด Vulkan ์ž์ฒด์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋‘๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒ ์ง€๋งŒ ์„œ๋‘๋ฅด๋Š” ๊ฒƒ๋ณด๋‹ค ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์žฅ๊ธฐ์ ์œผ๋กœ ๋” ๋‚˜์€ ์„ฑ๊ณผ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ชจ๋“  ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ด๋ฉฐ ๊ณง ์ค€๋น„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(Vulkan ๋ถ„๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ•œ ๊ฒฝ์šฐ 2D ์—”์ง„์ด ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ„).

์•ˆ๋…•ํ•˜์„ธ์š” reduz๋‹˜
๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„ ๋‹น์‹ ์˜ ์š”์ ์ด ์œ ํšจํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€๋งŒ, ๋‚˜๋Š” ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๋‘ ๊ฐ€์ง€์— ๋Œ€ํ•ด ๋…ผํ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค:

  • ๋ชฉ๋ก์€ ์กฐ๊ฐํ™” ์œ„ํ—˜์ด ์ „ํ˜€ ์—†๋Š” ์ž‘์€ ์‹œ๊ฐ„ ํ• ๋‹น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ํ•ญ์ƒ ์ฆ๊ฐ€ํ•˜๊ณ  ์ ˆ๋Œ€ ์ถ•์†Œ๋˜์ง€ ์•Š๋Š” ์„น์…˜ํ™”๋œ ๋ฐฐ์—ด(ํŽ˜์ด์ง€์— ์ •๋ ฌ๋˜์–ด ์กฐ๊ฐํ™” ์—†์Œ)์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค(RID_Allocator ๋˜๋Š” 2D ์—”์ง„ Vulkan ๋ถ„๊ธฐ์˜ ์ƒˆ CanvasItem์—์„œ์™€ ๊ฐ™์ด ์ด์ œ ํ•ญ๋ชฉ์„ ๋‹ค์‹œ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Œ). ๋งŽ์€ ๋ช…๋ น์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ) ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Godot์—์„œ ๋ชฉ๋ก์ด ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋Š” ์„ฑ๋Šฅ๋ณด๋‹ค ์ž‘์€ ํ• ๋‹น์ด ์„ ํ˜ธ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์‹ค์ œ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ ์˜๋„๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค).

์—ฐ๊ฒฐ ๋ชฉ๋ก์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๋™์  ๋ฐฐ์—ด๋ณด๋‹ค ์†๋„๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์ด ๋” ์ข‹์„์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ํ›„์ž๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ตœ๋Œ€ 2๋ฐฐ ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋„๋ก ๋ณด์žฅ๋˜๋Š” ๋ฐ˜๋ฉด List<some pointer> ๋Š” ์ •ํ™•ํžˆ 3๋ฐฐ ๋งŽ์€ ์ €์žฅ ๊ณต๊ฐ„(์‹ค์ œ ๋‚ด์šฉ, ๋‹ค์Œ ๋ฐ ์ด์ „ ํฌ์ธํ„ฐ)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๋ฉด ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ์ƒํ™ฉ์ด ํ›จ์”ฌ ๋” ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

์ ์ ˆํ•˜๊ฒŒ ๋ž˜ํ•‘๋˜์—ˆ์„ ๋•Œ(๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ์ด๋ฏธ Godot ์ฝ”๋“œ์—์„œ ๋ณธ ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ, ๊ทธ๋“ค์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ "๊ทธ๋“ค [๋ชฉ๋ก ] ์ฝ”๋“œ ์˜๋„๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค".

IMHO, ๋ชฉ๋ก์€ ์ •ํ™•ํžˆ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์—์„œ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ ์ค‘๊ฐ„์— ์š”์†Œ๋ฅผ ์ž์ฃผ ์ง€์šฐ๊ฑฐ๋‚˜ ์‚ฝ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋˜๋Š” ์š”์†Œ์˜ ์ผ์ •ํ•œ ์‹œ๊ฐ„(๋‹จ์ˆœํžˆ ์ƒ๊ฐ๋œ ์ผ์ • ์‹œ๊ฐ„์ด ์•„๋‹Œ) ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‹œ๊ฐ„ ์†Œ๋ชจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹ค์‹œ๊ฐ„ ์ปจํ…์ŠคํŠธ์—์„œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  • Map<>์€ ๋งŽ์€ ์–‘์˜ ์š”์†Œ์— ๋Œ€ํ•ด ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์นœ์ˆ™ํ•˜๋ฉฐ ๋‹จํŽธํ™”๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธ‰๊ฒฉํ•œ ์„ฑ์žฅ/์ถ•์†Œ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ HashMap์ด ๋Œ€์‹  ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์‚ฌ์‹ค์ด์ง€๋งŒ OAHashMap์„ ๋” ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ์ƒˆ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿด ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค). ์ผ๋ฐ˜์ ์ธ ์ฒ ํ•™์œผ๋กœ ์„ฑ๋Šฅ์ด ์šฐ์„ ์‹œ๋˜์ง€ ์•Š์„ ๋•Œ ์šด์˜ ์ฒด์ œ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž๊ฐ€ ์ž‘์€ ๊ตฌ๋ฉ์„ ์ฐพ๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์€ ํ• ๋‹น์ด ํฐ ํ• ๋‹น๋ณด๋‹ค ํ•ญ์ƒ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค(์ด๋Š” ๊ฑฐ์˜ ์˜๋„๋œ ์ž‘์—…์ž…๋‹ˆ๋‹ค). , ํšจ๊ณผ์ ์œผ๋กœ ๋” ์ ์€ ํž™์„ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค.

libc-allocator๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋งค์šฐ ๋˜‘๋˜‘ํ•˜๋ฉฐ OAHashMap(๋˜๋Š” std::unordered_map)์ด ๋•Œ๋•Œ๋กœ ์ €์žฅ์†Œ๋ฅผ ์žฌํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์—(์ƒ๊ฐ ์ƒ๊ฐ๋œ ์ผ์ • ์‹œ๊ฐ„) ํ• ๋‹น์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ์ปดํŒฉํŠธํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋„๋ก ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” OAHashMap์ด Map๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜ ์ด์ง„ ํŠธ๋ฆฌ ๋งต๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋” ๋งŽ์€ ํž™์„ ์†Œ๋น„ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ตณ๊ฒŒ ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  Map์˜ ๊ฐ ์š”์†Œ์— ์žˆ๋Š” ๊ฑฐ๋Œ€ํ•œ ํฌ์ธํ„ฐ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์‹ค์ œ๋กœ OAHashmap(๋˜๋Š” std::unordered_map)์˜ ํž™ ์กฐ๊ฐํ™”๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋น„ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ, ๋‚˜๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋…ผ์Ÿ์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ทธ๊ฒƒ์„ ๋ฒค์น˜๋งˆํ‚นํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ด๊ฒƒ์€ Godot 4.0์—์„œ ํ›จ์”ฌ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด -- ๋‹น์‹ ์ด ๋งํ–ˆ๋“ฏ์ด -- ๊ฑฐ๊ธฐ์—์„œ ๋งŽ์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ผ์–ด๋‚  ๊ฒƒ์ด๊ณ  ์–ด์จŒ๋“  4.0์—์„œ ์™„์ „ํžˆ ์žฌ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐœ์„ ๋œ ์ฝ”๋“œ ๊ฒฝ๋กœ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ @reduz ๋‹˜ , @vblanco20-1์ด ์ œ์•ˆํ•œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฒค์น˜๋งˆํ‚นํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ(์ง€๊ธˆ๋„ 3.1์—์„œ). @vblanco20-1(๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ)์ด ๊ทธ๋Ÿฌํ•œ ๋ฒค์น˜๋งˆํ‚น ์ œํ’ˆ๊ตฐ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ณ  vblanco์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด Godot3.1์˜ ์„ฑ๋Šฅ(์†๋„ ๋ฐ "์กฐ๊ฐํ™”๋ฅผ ๊ณ ๋ คํ•œ ํž™ ์†Œ๋น„" ์ธก๋ฉด์—์„œ ๋ชจ๋‘)์„ ํ‰๊ฐ€ํ•  ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด? ์‹ค์ œ 4.0 ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ท€์ค‘ํ•œ ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋ฐฉ๋ฒ•๋ก ์ด '์„œ๋‘๋ฅด์ง€ ์•Š๊ณ  ์ œ๋Œ€๋กœ ํ•˜๊ณ  ์žˆ๋‹ค'๋Š” ๋‹น์‹ ์—๊ฒŒ ์ž˜ ๋งž๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

@vblanco20-1: ์‚ฌ์‹ค, ๋‹น์‹ ์˜ ๋…ธ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹ค์ œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์‹ค์ œ๋กœ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ทธ๋Ÿฌํ•œ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Windfisch ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ž˜๋ชป ์ฝ๊ฑฐ๋‚˜ ์ž˜๋ชป ์ดํ•ดํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ๋‚ด ๊ฒŒ์‹œ๋ฌผ์„ ๋‹ค์‹œ ์ฝ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์„ ์œ„ํ•ด ๊ทธ๋“ค์„ ๋ช…ํ™•ํžˆ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋ชฉ๋ก์€ ๊ท€ํ•˜๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ •ํ™•ํžˆ ์‚ฌ์šฉ๋˜๋ฉฐ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ž‘์€ ํ• ๋‹น์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํž™์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฐฐ์—ด๋ณด๋‹ค ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๊ทœ๋ชจ์—์„œ(์˜๋„ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ) ์ด๋Š” ์‹ค์ œ๋กœ ์ฐจ์ด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ ๋” ๋น ๋ฅด๊ฑฐ๋‚˜ ๋” ๋งŽ์ด ํฌ์žฅ๋˜๊ฑฐ๋‚˜ ๋” ๋‚˜์€ ์บ์‹œ ์ผ๊ด€์„ฑ์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ข‹๋“  ๋‚˜์˜๋“  Victor๋Š” ์ฃผ๋กœ PSP์šฉ ๊ฒŒ์ž„์„ ํผ๋ธ”๋ฆฌ์‹ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ๋‚ด ์—”์ง„์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์˜ค๋ž˜๋œ ์—”์ง„ ์˜์—ญ(์‹ค์ œ๋กœ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๊ฒƒ์€ ์•„๋‹์ง€๋ผ๋„) ์ค‘ ํ•˜๋‚˜์— ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ค๋žซ๋™์•ˆ ์žฌ์ž‘์„ฑ์„ ๋ณด๋ฅ˜ํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์˜ ์ฃผ์š” ์ตœ์ ํ™”๋Š” ๋‚ด๊ฐ€ ์ตœ๊ทผ์— ์ถ”๊ฐ€ํ•œ CPU ๊ธฐ๋ฐ˜ ๋ณต์…€ ์›๋ฟ” ์ถ”์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ ๋งํ•ด์„œ, 3.0 ๋ฆด๋ฆฌ์Šค ๊ทผ์ฒ˜์—์„œ ๋„ˆ๋ฌด ์„œ๋‘๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์ž‘์—…ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ์ˆ˜์ •์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฐ€ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚˜๋Š” @vblanco20-1์˜ ์ž‘์—… ์„ฑ๋Šฅ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•œ ์ ์ด ์—†์œผ๋ฉฐ ์†”์งํžˆ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ์˜ ์ž‘์—…์„ ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” 1) ๊ทธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฒŒ์ž„์˜ ํ‰๊ท  ๊ฐœ์ฒด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ˆ˜๋™ ์กฐ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ Godot ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•ฝ๊ฐ„ ๋Š๋ฆฌ์ง€๋งŒ ์กฐ์ •ํ•  ํ•„์š” ์—†์ด ๋” ์ž˜ ํ™•์žฅ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 2) ๊ทธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์˜คํด๋ฃจ์ „ ์ปฌ๋ง์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋‹จ์ˆœํ•œ ์˜ฅํŠธ๋ฆฌ๋Š” ๊ณ„์ธต์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค). 3) ๊ทธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŽ˜์–ด๋ง์— ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(SAP๊ฐ€ ๋” ๋‚˜์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค). 4) ๊ทธ๋Š” C++17๊ณผ ๋‚ด๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ 3.2๋ฅผ ๋ฆด๋ฆฌ์Šคํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ž‘์—…ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋Š” ๋Š๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค์šฐ ์•ˆ์ •์ ์ด๊ณ  ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ณ‘ํ•ฉ๋˜๋ฉด ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ, ํšŒ๊ท€ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ 4.0 ๋ถ„๊ธฐ๋กœ ๋Œ€๋ถ€๋ถ„ ๋ฐ”์˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๊ฑฐ๋‚˜ Victor๋ฅผ ๋„์šธ ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋‘ ์œ„์— ์„ค๋ช…๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฒŒ์‹œ๋ฌผ์„ ๋‹ค์‹œ ์ฝ์œผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์ €๋Š” Victor์—๊ฒŒ ์ธ๋ฑ์‹ฑ ์ฝ”๋“œ๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•ฝ์†ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒฐ๊ตญ์—๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๊ฒŒ์ž„์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Godot๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๊ทธ์˜ ํฌํฌ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ์—ด๋ ค ์žˆ๊ณ  ์—ฌ๊ธฐ์—์„œ ๊ณต์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ทธ์˜ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ ์ตœ์ ํ™”๋Š” gdscript, ๋ Œ๋”๋ง ๋˜๋Š” "๋ง๋”๋“ฌ๊ธฐ" ๋ฌธ์ œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™๊ณ  ์‚ฌ๋žŒ๋“ค์ด ๋ถˆํ‰ํ•˜๋Š” ๊ฒƒ๋“ค์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—(๋‚˜๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค), ์•„๋งˆ๋„ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์‚ฌ๋žŒ๋“ค์ด ํ–‰๋ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‚ด ํฌํ•จ)... ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๋ฃจ์•„์ง“ ์†๋„...
"copy on write" ์ž‘์—…์€ ๋‚ด ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ๋งค์šฐ ํฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜€์Šต๋‹ˆ๋‹ค(์Šคํฌ๋ฆฝํŠธ ๊ตฌ๋ฌธ ๋ถ„์„์—์„œ 25์ดˆ์—์„œ 7000์ค„ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋‹จ 1์ดˆ๋กœ)... ์ €๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ตœ์ ํ™”๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ gdscript์—์„œ ๋ Œ๋”๋ง์ด ํ•„์š”ํ•˜๊ณ  ๋ง๋”๋“ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค.

@reduz ์˜ ์„ค๋ช…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‹ค์ œ๋กœ ์ด์ „ ๊ฒŒ์‹œ๋ฌผ๋ณด๋‹ค ๊ท€ํ•˜์˜ ์š”์ ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐ„ ์ธ๋ฑ์‹ฑ ์ฝ”๋“œ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์€ ์ข‹์€ ์ผ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ ์ฝ”๋“œ๋Š” ์ด์ „์— ์—„์ฒญ๋‚˜๊ฒŒ ๋‹ค๋ฅธ ๊ทœ๋ชจ๋กœ ๋งŽ์€ ๊ฐœ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋„˜์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 4.0์ด ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋„ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ๊ณต๊ฐ„ ์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ํฌํ•จ๋œ ๊ณต์œ  ๋ฌธ์„œ๋ฅผ ๋‘์–ด ๋” ๋งŽ์€ ๊ธฐ์—ฌ์ž๊ฐ€ ์ด์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ  ์•„์ด๋””์–ด๋ฅผ ๋˜์ง€๊ฑฐ๋‚˜ ๊ตฌํ˜„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์— ๋Œ€ํ•ด ๋งค์šฐ ์ž˜ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ํฅ๋ฏธ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ์‹œํ•  ์—ฌ์ง€๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ถฉ์กฑํ•ด์•ผ ํ•˜๋Š” ๋งค์šฐ ๋ช…ํ™•ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์„ธ๊ณ„ ํฌ๊ธฐ์˜ ํ‰๊ท  ์š”์†Œ์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ฌ์šฉ์ž ์กฐ์ •์„ ์š”๊ตฌํ•˜์ง€ ์•Š๊ณ  ๊ฐ€๋Šฅํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌํ•™์ด๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ ์—”์ง„๋„ ์ด๋ฅผ ํ•„์š”๋กœ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋ฐ”์ผ์—์„œ ๋” ๋งŽ์€ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•˜๊ณ  ์žฌํˆฌ์˜ ๊ธฐ๋ฐ˜ ์˜คํด๋ฃจ์ „ ์ปฌ๋ง๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ์–ด๋–ค ํ˜•ํƒœ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…์— ๋Œ€ํ•ด์„œ๋„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„€๋„์šฐ ๋ฒ„ํผ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•ด - ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์Œ - ๋ฐฉํ–ฅ์„ฑ ์„€๋„์šฐ์— ๋Œ€ํ•œ ์žฌํˆฌ์˜ ๊ธฐ๋ฐ˜ ์˜คํด๋ฃจ์ „ ์ปฌ๋ง๊ณผ ๊ฐ™์€ ์ตœ์ ํ™”๋ฅผ ํƒ์ƒ‰ํ•˜์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ์˜ ์ƒ์„ฑ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ €๋Š” TPS ๋ฐ๋ชจ๊ฐ€ ๊ฐœ์ฒด๋‚˜ ํ์ƒ‰์ด ๋งŽ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ๋ฒค์น˜๋งˆํฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). @vblanco20-1 ์šฐ๋ฆฌ์˜ ์ฝ”๋”ฉ/์–ธ์–ด ์Šคํƒ€์ผ๊ณผ ์ฒ ํ•™์„ ๋”ฐ๋ฅผ ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด ๋ฌผ๋ก  ๊ธฐ๊บผ์ด ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ๋ Œ๋”๋ง ์ฝ”๋“œ(RenderingDevice๋ฅผ ์‚ฌ์šฉํ•œ ์‹ค์ œ ๋ Œ๋”๋ง)๋Š” ๋‹ค์†Œ ๊ฐ„๋‹จํ•˜๊ณ  ์ˆ˜ํ–‰ํ•  ๋ฐฉ๋ฒ•์ด ๋งŽ์ง€ ์•Š์ง€๋งŒ ์ธ๋ฑ์‹ฑ์€ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋” ํฅ๋ฏธ๋กœ์šด ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐ„ ์ธ๋ฑ์‹ฑ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” @reduz ์ž…๋‹ˆ๋‹ค. ์›๋ž˜ ํƒ€์ผ ๊ธฐ๋ฐ˜ ์ปฌ๋ง์€ ์ด ์Šค๋ ˆ๋“œ์˜ ์ค‘๊ฐ„์ฏค์— ์ œ๊ฑฐ๋˜๊ณ  Octree๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฑฐ๊ธฐ์—์„œ ์–ป์€ octree๋Š” WIP(์ผ๋ถ€ ์žฌ๋งž์ถค ๊ธฐ๋Šฅ ๋ˆ„๋ฝ)์ด์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•ด ์ƒ๋‹นํžˆ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ ์ฝ”๋“œ๋Š” ํ”„๋กœํ† ํƒ€์ž… ํŠน์„ฑ์—์„œ ๊ทธ๋ฆฌ ์ข‹์ง€ ์•Š์œผ๋ฏ€๋กœ tps-demo์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ์žฅ๋ฉด์—์„œ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์˜ฅํŠธ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ๋งŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
์–ธ๋ฆฌ์–ผ ์—”์ง„ ์˜ฅํŠธ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜์ง€๋งŒ ํ”Œ๋žซ ๋ฐ˜๋ณต ๊ฐ€๋Šฅ์„ฑ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ์•„์ด๋””์–ด๋Š” ์˜ฅํŠธ๋ฆฌ์˜ ์žŽ์‚ฌ๊ท€๋งŒ ๊ฐ์ฒด๋ฅผ ๋ณด์œ ํ•˜๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ 64 ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์— ๋ณด์œ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ปดํŒŒ์ผ ์‹œ๊ฐ„ ํฌ๊ธฐ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ). octree ์žŽ์€ 65๊ฐœ ์š”์†Œ๋กœ "๋„˜์ณ"๋‚˜๊ฐ„ ํ›„์—๋งŒ ๋ถ„ํ• ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ฐ ์žŽ์‚ฌ๊ท€๊ฐ€ 64 ํฌ๊ธฐ ๋ฐฐ์—ด์— ๋งž๋Š” ๊ฒฝ์šฐ ์žŽ์‚ฌ๊ท€๋ฅผ ๋‹ค์‹œ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋ณ‘ํ•ฉํ•˜์—ฌ ์žŽ์‚ฌ๊ท€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ฅํŠธ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๊นŠ์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ์—์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•œ ๋˜ ๋‹ค๋ฅธ ์ข‹์€ ์ ์€ ๋ฆฌํ”„ ๋…ธ๋“œ๋„ ํ”Œ๋žซ ์–ด๋ ˆ์ด์— ์ €์žฅ๋˜์–ด ์ปฌ๋ง์—์„œ ๋ณ‘๋ ฌ์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํฌ์ธํŠธ ์„€๋„์šฐ๋ฅผ ์œ„ํ•œ ์ปฌ๋ง ๋˜๋Š” ๊ธฐํƒ€ "์ž‘์€" ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ณ„์ธต์  ์ปฌ๋ง์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ปฌ๋ง์„ ์œ„ํ•œ ํ”Œ๋žซ ๋ณ‘๋ ฌ์„ ๊ธฐ๋ณธ ๋ทฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ชจ๋“  ๊ฒƒ์— ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋” ๋Š๋ฆฌ๊ณ  ๋ณ‘๋ ฌํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ธ”๋ก ๊ตฌ์กฐ๋Š” ์•ฝ๊ฐ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜์ง€๋งŒ ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋„ ๋…ธ๋“œ๊ฐ€ ์–‘ ์ดํ•˜๋กœ ๋–จ์–ด์ง€๋ฉด ๋ณ‘ํ•ฉ๋˜๋ฏ€๋กœ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋…ธ๋“œ์™€ ๋ฆฌํ”„๊ฐ€ ๋ชจ๋‘ ์ผ์ •ํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค๋Š” ์ ์—์„œ ํ’€ ํ• ๋‹น์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํฌํฌ์— ์—ฌ๋Ÿฌ ์˜ฅํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„€๋„์šฐ์บ์Šคํ„ฐ ๊ฐœ์ฒด์— ๋Œ€ํ•ด์„œ๋งŒ ์˜ฅํŠธ๋ฆฌ๊ฐ€ ์žˆ์–ด์„œ ์„€๋„์šฐ๋งต์„ ์ปฌ๋งํ•  ๋•Œ "์„€๋„์šฐ๋ฅผ ํˆฌ์‚ฌํ•  ์ˆ˜ ์žˆ์Œ"๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋…ผ๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ Œ๋” API์— ๋Œ€ํ•œ Vector ๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ ๋‚˜์˜ ์šฐ๋ ค์— ๋Œ€ํ•ด ์ด ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ๊ฑฑ์ •ํ–ˆ๋˜ ๊ฒƒ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/24731


ํฌํฌ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ C++17์—์„œ .. ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํฌํฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ๋ถ€๊ฐ€ ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ํ•„์š”ํ•˜๊ณ  Godot๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ์—…๊ณ„์—์„œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋ณ‘๋ ฌ ๋Œ€๊ธฐ์—ด์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฅผ ์œ„ํ•ด ๋ฌด๋””์นด๋ฉœ ๋Œ€๊ธฐ์—ด์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.


๋žŒ๋‹ค์—์„œ ์‚ฌ์šฉ์€ ์ฃผ๋กœ ์ปฌ๋ง์— ์‚ฌ์šฉ๋˜๋ฉฐ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•œ ๊ฐœ์ฒด๋งŒ ์ถœ๋ ฅ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ƒ๋‹นํ•œ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์•ˆ์€ ๋ฐ˜๋ณต์ž ๊ฐ์ฒด(์–ธ๋ฆฌ์–ผ ์—”์ง„์ด ์˜ฅํŠธ๋ฆฌ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ๊ฒฐ๊ตญ ์ฝ”๋“œ๊ฐ€ ๋” ๋‚˜๋น ์ง€๊ณ  ์“ฐ๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋” ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.


๋‚ด ์˜๋„๋Š” "๋„๋‘‘์งˆ"ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ "์‹œ์—ฐ์„ ์œ„ํ•ด ํฌํฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๋นˆ๋ฒˆํ•œ ์˜๊ฒฌ์— ๋‹ตํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๊ฐ€ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฉ”์‹œ์ง€๋Š” ์•ฝ๊ฐ„ ๋ถˆ์•ˆํ•˜๊ณ  ์ •ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ์œ ์ผํ•œ ๋ชฉํ‘œ๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ๊ฒŒ์ž„ ์—”์ง„์„ ๋•๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๋ก€ํ•˜๊ฒŒ ๋ณด์˜€๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

@vblanco20-1 ํ›Œ๋ฅญํ•˜๊ฒŒ ๋“ค๋ฆฌ๊ณ  octree๊ฐ€ ์ž‘๋™ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•œ ๋ฐฉ์‹์€ ๋งค์šฐ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ ๋ณ‘๋ ฌ ํ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์™ธ๋ถ€ ์ข…์†์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋งŒํผ ๊ฐ„๋‹จํ•ด ๋ณด์ด๊ณ  ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด C++11์ด ํ•„์š”ํ•˜๋ฏ€๋กœ Vulkan ๋ถ„๊ธฐ์—์„œ๋งŒ ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ๋งŒ์•ฝ ๋‹น์‹ ์ด ์ด๊ฒƒ์„ ์ปค๋ฐ‹ํ–ˆ๋‹ค๋ฉด, ๋‚˜๋Š” ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์„ ์‚ดํŽด๋ณด๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ Vulkan ๋ธŒ๋žœ์น˜์—์„œ ์ธ๋ฑ์„œ ์žฌ์ž‘์„ฑ์„ ์œ„ํ•œ ๊ธฐ์ดˆ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ). ๋ฌผ๋ก  ๊ตฌํ˜„์„ ์ง€์›ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ(์ƒˆ API์— ๋” ๋งŽ์€ ๊ฒƒ์ด ์žˆ์„ ๋•Œ) ๋งค์šฐ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

ํ‰ํ‰ํ•œ ๋ฐฐ์—ด์ด ์žˆ๋Š” ๋ณ‘๋ ฌ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋กญ์ง€ ๋งŒ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ œ ๊ด€์ ์€ ์˜คํด๋ฃจ์ „ ์ปฌ๋ง์— ๊ทธ๋‹ค์ง€ ์œ ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฉฐ ์ผ๋ฐ˜ ์˜ฅํŠธ๋ฆฌ ์ปฌ๋ง๋ณด๋‹ค ์–ผ๋งˆ๋‚˜ ๊ฐœ์„ ๋˜์—ˆ๋Š”์ง€ ์ธก์ •ํ•˜๋Š” ๊ฒƒ๋„ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋œ ์ฝ”์–ด์˜ ์ถ”๊ฐ€ ์–‘์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ํšจ์œจ์ ์œผ๋กœ(๋ฌด์ฐจ๋ณ„์ ์œผ๋กœ) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์˜์—ญ์ด ๋งŽ์ด ์žˆ์Œ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค(๋ฌผ๋ฆฌ์™€ ๊ฐ™์ด). ๋”ฐ๋ผ์„œ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ๋ฏธ๋ฏธํ•œ ๊ฐœ์„ ์„ ์–ป๋”๋ผ๋„ ํ•ญ์ƒ ๊ทธ๋ ‡์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค ๋‹ค๋ฅธ ์˜์—ญ์ด CPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ตœ์„ ์˜ ์ด์ต์ž…๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๊ทธ๊ฒƒ์€ ์„ ํƒ ์‚ฌํ•ญ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ Bullet 3์˜ dbvt ๊ตฌํ˜„์ด ์ƒ๋‹นํžˆ ํฅ๋ฏธ๋กญ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌํ˜„์€ ์ ์ง„์  ์ž์ฒด ๊ท ํ˜• ์กฐ์ • ๋ฐ ์„ ํ˜• ํ• ๋‹น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ œ๊ฐ€ ๋” ์—ฐ๊ตฌํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค(์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋…์  ์—”์ง„์—์„œ ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์žˆ์–ด ์–ธ๊ธ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค :P ). ์•Œ๊ณ ๋ฆฌ์ฆ˜์ ์œผ๋กœ ๊ท ํ˜• ์žกํžŒ ์ด์ง„ ํŠธ๋ฆฌ๋Š” ์„ค๊ณ„์ƒ ์˜ฅํŠธ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ์ค‘๋ณต๋˜๋ฉฐ ํŽ˜์–ด๋ง ๋ฐ ํ์ƒ‰ ํ…Œ์ŠคํŠธ ๋ชจ๋‘์—์„œ ๋” ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ์ ˆํ•œ ์œ ์šฉ์„ฑ์„ ๊ณ ๋ คํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธํ˜• ๋ธŒ๋กœ๋“œํŽ˜์ด์ฆˆ/์ปฌ๋ง ์ ‘๊ทผ ๋ฐฉ์‹์ด ์‹ค์ œ๋กœ ์ข‹์€ ์•„์ด๋””์–ด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒค์น˜๋งˆํฌ ์žฅ๋ฉด.

์–ด์จŒ๋“ , ๋‹น์‹ ์€ ๋งค์šฐ ๋˜‘๋˜‘ํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ํ•จ๊ป˜ ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ์ง€๋งŒ, ํ•ญ์ƒ ๋‹น์‹ ์˜ ์ทจํ–ฅ์— ๋งž์ง€ ์•Š์„์ง€๋ผ๋„ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ์กด์˜ ๋งŽ์€ ๋””์ž์ธ ์ฒ ํ•™์„ ์ดํ•ดํ•˜๊ณ  ์กด์ค‘ํ•ด ์ฃผ๊ธฐ๋ฅผ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. . ํ”„๋กœ์ ํŠธ๋Š” ๊ฑฐ๋Œ€ํ•˜๊ณ  ๊ด€์„ฑ๋ ฅ์ด ๊ฐ•ํ•˜๋ฉฐ ์ทจํ–ฅ์„ ์œ„ํ•ด ๋ฌผ๊ฑด์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์นœํ™”์„ฑ๊ณผ "๊ทธ๋ƒฅ ์ž‘๋™"์€ ๋””์ž์ธ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ•ญ์ƒ ๋ชฉ๋ก์—์„œ ์ฒซ ๋ฒˆ์งธ์ด๋ฉฐ ์ฝ”๋“œ์˜ ๋‹จ์ˆœ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํšจ์œจ์„ฑ๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ์˜์—ญ์ด ์ค‘์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ์ด ๋ชฉํ‘œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ). ์ง€๋‚œ๋ฒˆ์— ์šฐ๋ฆฌ๊ฐ€ ๋…ผ์˜ํ–ˆ์„ ๋•Œ, ๋‹น์‹ ์€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์–ดํ–ˆ๊ณ  ์–ด๋–ค ์ถ”๋ก ์— ๊ท€๋ฅผ ๊ธฐ์šธ์ด๊ฑฐ๋‚˜ ์‹ค์ œ ๋ฌธ์ œ์— ์ง‘์ค‘ํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ๊ธฐ์—ฌ์ž๋“ค๊ณผ ํ˜‘๋ ฅํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ข‹์€ ์˜๋„.

์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ์ž…๋‹ˆ๊นŒ? :ํŠธ๋กคํŽ˜์ด์Šค:

์„ฑ๋Šฅ๊ณผ ์†Œ์Šค ๋ชจ๋ธ์€ ์ €๋ฅผ Godot์™€ ํ•จ๊ป˜ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ œ๋ฅผ ๋ฒ—์–ด๋‚œ ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์˜คํ”ˆ ์†Œ์Šค์˜ ์ด์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

@mixedCase ์ €๋Š” Godot์˜ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํฌํฌ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ์ฃผ์ €ํ•ฉ๋‹ˆ๋‹ค. ํฌํฌ์™€ ๋‹จํŽธํ™”๋Š” ์ข…์ข… ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ์ฃฝ์Œ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜คํ”ˆ ์†Œ์Šค์˜ ๋ณธ์งˆ์€ ์ฝ”๋“œ๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์€ ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์˜ ๋์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋” ๋งŽ์€ ์˜ต์…˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์€ ๋…์ ์ด๋ฉฐ ๊ทธ๊ฒƒ์ด ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์˜นํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌด์–ธ๊ฐ€๋ฅผ ์™„์ „ํžˆ ํ†ต์ œํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ฒ™ํ•˜๋Š” ํšŒ์‚ฌ์— ์†์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์€ ๊ฑฐ์ง“๋ง์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ์˜คํ”ˆ ์†Œ์Šค ์„ธ๊ณ„์—์„œ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๋‹น์‹ ๋„ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์ดํ•ด์•ผ ํ•  ์ผ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๊ดœ์ฐฎ์„์ง€ ๋Œ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์›๋ž˜ ๊ฐœ๋ฐœ์ž๋Š” ํฌํฌ์˜ ๊ฐœ์„  ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ•ญ์ƒ ๊ทธ๊ฒƒ์„ ํ•  ์ž์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์˜คํ”ˆ ์†Œ์Šค ์„ธ๊ณ„์˜ ๋˜ ๋‹ค๋ฅธ ํŠน์„ฑ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ ํฌํฌ๊ฐ€ ์›๋ณธ๋ณด๋‹ค ๋‚˜์„ ๊ฒƒ์ด๋ฉฐ ๋งŽ์€ ๊ธฐ์—ฌ์ž๊ฐ€ ๊ฑฐ๊ธฐ์— ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ์žƒ์ง€ ์•Š๊ณ  ๋ชจ๋‘ ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์•„, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํšŒ์‚ฌ๊ฐ€ ์›๋ณธ์— ๋’ค์ฒ˜์ ธ ์žˆ์œผ๋ฉด ์†์‹ค์„ ์ž…์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” ํฌํฌ์˜ ๊ฐœ์„  ์‚ฌํ•ญ๋„ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ์Œ).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰