๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก2023/03 (9)

KoreanFoodie's Study

์–ธ๋ฆฌ์–ผ ๋ Œ๋”๋ง ์ตœ์ ํ™” : Visibility ์™€ ์˜คํด๋ฃจ์ „ ์ปฌ๋ง(Occlusion Culling)

์–ธ๋ฆฌ์–ผ ๋ Œ๋”๋ง ์ตœ์ ํ™” : Visibility ์™€ ์˜คํด๋ฃจ์ „ ์ปฌ๋ง(Occlusion Culling) ํ•ต์‹ฌ : 1. ๋ Œ๋”๋ง์—๋Š” ์ปฌ๋ง(Culling) ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ๋‹ค. ์ด ๊ฐœ๋…์€, ์นด๋ฉ”๋ผ์˜ ์‹œ์ ์—์„œ ๋ณด์ด์ง€ ์•Š๋Š” ๋…€์„๋“ค์„ ๊ตณ์ด ๋ Œ๋”๋ง ํ•  ํ•„์š” ์—†์ด ๊ฑท์–ด๋‚ด๋Š”(Culling) ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์•กํ„ฐ์˜ Visibility ๋Š” Bounds Scale ์„ ์„ค์ •ํ•ด ํ•ด๋‹น ์•กํ„ฐ๋ฅผ ์นด๋ฉ”๋ผ์— ๋ณด์—ฌ์ค„ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ์ปฌ๋ง ๋ฐฉ๋ฒ•(Culling Method) ์—๋Š” ํฌ๊ฒŒ 4 ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค : Distance, View Frustum, Precomputed Visibility, Dynamic Occulusion. 3. Culling ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋“ค์€ 'stat initviews' ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ..

Game Dev/Unreal C++ : Study 2023. 3. 29. 23:46
[์–ธ๋ฆฌ์–ผ] Visual Studio ํ•œ๊ธ€ ๊นจ์ง (Log ํ•œ๊ธ€ ๊นจ์ง)

[์–ธ๋ฆฌ์–ผ] Visual Studio ํ•œ๊ธ€ ๊นจ์ง (Log ํ•œ๊ธ€ ๊นจ์ง) ํ•ต์‹ฌ : 1. ์ž„์‹œ ๋ฐฉํŽธ์œผ๋กœ ํ•œ๊ธ€ ๋Œ€์‹  ์˜์–ด ๋กœ๊ทธ๋งŒ ๋‚˜์˜ค๊ฒŒ ํ•˜๊ธฐ 2. ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์˜ ์ธ์ฝ”๋”ฉ ์„ธํŒ…์„ ๋ฐ”๊พธ๊ธฐ (๋ถˆ์•ˆ์ •) 3. cl-filter ๋ฅผ ์ˆ˜์ •ํ•ด์„œ '์™„๋ฒฝ'ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ๊ตฌ๊ธ€๋ง ์ค‘ ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๊ณ , ๊ฐ๊ฐ์„ ์ ์šฉํ•ด ๋ณธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ์ž„์‹œ ๋ฐฉํŽธ์œผ๋กœ ํ•œ๊ธ€ ๋Œ€์‹  ์˜์–ด ๋กœ๊ทธ๋งŒ ๋‚˜์˜ค๊ฒŒ ํ•˜๊ธฐ ์ด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž. ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทผ๋ฐ ํ•œ๊ธ€๋„ ๋‚˜์™€์•ผ ๋˜๋Š” ์ƒํ™ฉ์ด๋ฉด... ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ๋‹น๊ทผ. ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์˜ ์ธ์ฝ”๋”ฉ ์„ธํŒ…์„ ๋ฐ”๊พธ๊ธฐ (๋ถˆ์•ˆ์ •) ์ด ๋งํฌ์˜ ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•˜์ž. ์ ˆ๋Œ€ ํ•˜์ง€ ๋ง๊ธฐ. ๊ธฐ์กด ํŒŒ์ผ๋“ค ์™„์ „ ๋‹ค ๊นจ์ง„๋‹ค. cl-filter ๋ฅผ ์ˆ˜์ •ํ•ด์„œ '์™„๋ฒฝ'ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ God ์‹ค๋ ฅ์ž ๋ถ„์ด ์˜ฌ๋ฆฌ์‹  ๋งํฌ๋ฅผ ํ†ตํ•ด ์ˆ˜์ •์„ ์‹œ๋„ํ–ˆ๋‹ค. (..

Game Dev/Unreal C++ : Dev Log 2023. 3. 28. 17:47
์–ธ๋ฆฌ์–ผ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ(Unreal Smart Pointer) ์ •๋ฆฌ 2 : ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ๊ณผ ํŒ

์–ธ๋ฆฌ์–ผ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ๊ณผ ํŒ ํ•ต์‹ฌ : 1. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ คํ•  ๋•Œ๋Š” ํ•ญ์ƒ ํผํฌ๋จผ์Šค์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” ์ž์› ๊ด€๋ฆฌ์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ ์ผ๋ถ€ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํƒ€์ž…์€ C++ ๊ธฐ๋ณธ ํฌ์ธํ„ฐ๋ณด๋‹ค ๋” ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 2. TSharedPtr ๋Š” ๋น„์นจ๋ฒ”ํ˜•(non-intrusive) ๋กœ, ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์˜ ์†Œ์œ  ํ•˜์— ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ์˜ค๋ธŒ์ ํŠธ๋ฅผ TSharedRef ๋˜๋Š” TSharedPtr ๋กœ ์ ‘๊ทผํ•˜๋ฉด, ์˜ค๋ธŒ์ ํŠธ ํด๋ž˜์Šค๋ฅผ TSharedFromThis ์—์„œ ํŒŒ์ƒ์‹œ์ผœ์•ผ ํ•œ๋‹ค. 3. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์ž. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ ์–ธ๋ฆฌ์–ผ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ..

Game Dev/Unreal C++ : Study 2023. 3. 22. 11:44
[์–ธ๋ฆฌ์–ผ] TOptional ์‚ฌ์šฉํ•˜๊ธฐ + ์˜ˆ์ œ

TOptional ํ•ต์‹ฌ : 1. TOptional ์€ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ๋…€์„์ด ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ์•„๋‹Œ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” Wrapper ํด๋ž˜์Šค์ด๋‹ค. 2. Optional.h ์— ๋ณด๋ฉด Value ์™€ bIsSet ์ด ์žˆ๋Š”๋ฐ, Value ๊ฐ€ ์‹ค์ œ ๋„˜๊ธฐ๋Š” ๋ฐ์ดํ„ฐ์ด๊ณ , bIsSet ์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋…€์„์ด๋‹ค. IsSet, Emplace, GetValue ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 3. TOptional ์„ ์‚ฌ์šฉํ•˜๋Š” ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š”, ํŠน์ • ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด 'Magic Number' ๋ฅผ ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค! TOptional ๊ตฌ์กฐ์ฒด ์ผ๋‹จ, Optional.h ์— ์ •์˜๋œ TOptional ๊ตฌ์กฐ์ฒด์˜ ๋Œ€๋žต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ž..

Game Dev/Unreal C++ : Study 2023. 3. 21. 23:45
[์–ธ๋ฆฌ์–ผ] ENUM_CLASS_FLAGS ์‚ฌ์šฉํ•˜๊ธฐ (์–ธ๋ฆฌ์–ผ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ๋ฒ•)

ENUM_CLASS_FLAGS ์‚ฌ์šฉํ•˜๊ธฐ (์–ธ๋ฆฌ์–ผ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ๋ฒ•) ํ•ต์‹ฌ : 1. ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ๋™์‹œ์— ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ๋‹ค๋ฅผ ๋•Œ๋Š”, Enum Class ์˜ ๊ฐ’์„ Shift ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•ด Bit Flag ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 2. EnumClassFlags ํŒŒ์ผ์— ์ •์˜๋œ ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜๋“ค(e.g. EnumHasAnyFlags)์„ ํ™œ์šฉํ•˜๋ฉด, Enum Class ์— ์ •์˜๋œ ํ”Œ๋ž˜๊ทธ๋“ค์„ ์ด์šฉํ•ด ์ผ€์ด์Šค๋“ค์˜ ์ค‘์ฒฉ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค. 3. ์ผ๋ฐ˜์ ์œผ๋กœ Enum Class ๋‚ด์˜ ๊ฐ’๋“ค์„ Flag ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” UI ๋‚˜ ํ™˜๊ฒฝ์„ค์ • ์„ธํŒ… ๋“ฑ์ด ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Enum Class ๋Š” ๊ฐ™์€ ์ฃผ์ œ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์กฐ๊ฑด๋“ค์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์ผ ์—ฌ๋Ÿฌ ๋ณตํ•ฉ์ ์ธ ์ƒํ™ฉ์„ ๋™์‹œ์— ๋‹ค๋ค„์•ผ ํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ..

Game Dev/Unreal C++ : Dev Log 2023. 3. 14. 21:29
[์–ธ๋ฆฌ์–ผ] ๋™์ ์œผ๋กœ ์•กํ„ฐ ์ปดํฌํ„ดํŠธ ์ƒ์„ฑํ•˜๊ธฐ (Dynamically create ActorComponent)

๋™์ ์œผ๋กœ ์ปดํฌํ„ดํŠธ ์ƒ์„ฑํ•˜๊ธฐ (Dynamically create ActorComponent) ํ•ต์‹ฌ : 1. ์ผ๋ฐ˜์ ์œผ๋กœ ActorComponent ๋Š” ์ƒ์„ฑ์ž์—์„œ CreateDefaultSubobject ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด CDO ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. 2. ๋™์ ์œผ๋กœ ์•กํ„ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ๋Š” AddComponent ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋ฉฐ, C++ ์—์„œ๋Š” NewObject ๋กœ ActorComponent ๋ฅผ ์ƒ์„ฑ ํ›„, ๊ธฐ์กด RootComponent ์— Attach ํ•˜๋Š” ๋ฐฉ์‹์„ ํ™œ์šฉํ•œ๋‹ค. 3. ์ปค์Šคํ…€ AddComponent ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ํŽธํ•˜๊ฒŒ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ AActor ํด๋ž˜์Šค์—๋Š” AddComponent ๋ผ๋Š”, ๋‚ด๋ถ€์ ์œผ๋กœ NewObj..

Game Dev/Unreal C++ : Dev Log 2023. 3. 10. 16:20