๋ชฉ๋ก2023/03 (9)
KoreanFoodie's Study
์ธ๋ฆฌ์ผ ๋ ๋๋ง ์ต์ ํ : Visibility ์ ์คํด๋ฃจ์ ์ปฌ๋ง(Occlusion Culling) ํต์ฌ : 1. ๋ ๋๋ง์๋ ์ปฌ๋ง(Culling) ์ด๋ผ๋ ๊ฐ๋ ์ด ์๋ค. ์ด ๊ฐ๋ ์, ์นด๋ฉ๋ผ์ ์์ ์์ ๋ณด์ด์ง ์๋ ๋ ์๋ค์ ๊ตณ์ด ๋ ๋๋ง ํ ํ์ ์์ด ๊ฑท์ด๋ด๋(Culling) ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์กํฐ์ Visibility ๋ Bounds Scale ์ ์ค์ ํด ํด๋น ์กํฐ๋ฅผ ์นด๋ฉ๋ผ์ ๋ณด์ฌ์ค ๋ฒ์๋ฅผ ์ค์ ํ ์ ์๋ค. 2. ์ปฌ๋ง ๋ฐฉ๋ฒ(Culling Method) ์๋ ํฌ๊ฒ 4 ์ข ๋ฅ๊ฐ ์๋ค : Distance, View Frustum, Precomputed Visibility, Dynamic Occulusion. 3. Culling ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ค์ 'stat initviews' ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋๋ฐ, ์ด ..
[์ธ๋ฆฌ์ผ] Visual Studio ํ๊ธ ๊นจ์ง (Log ํ๊ธ ๊นจ์ง) ํต์ฌ : 1. ์์ ๋ฐฉํธ์ผ๋ก ํ๊ธ ๋์ ์์ด ๋ก๊ทธ๋ง ๋์ค๊ฒ ํ๊ธฐ 2. ์ปดํจํฐ ํ๊ฒฝ์ ์ธ์ฝ๋ฉ ์ธํ ์ ๋ฐ๊พธ๊ธฐ (๋ถ์์ ) 3. cl-filter ๋ฅผ ์์ ํด์ '์๋ฒฝ'ํ๊ฒ ํด๊ฒฐํ๊ธฐ ๊ตฌ๊ธ๋ง ์ค ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐพ์๊ณ , ๊ฐ๊ฐ์ ์ ์ฉํด ๋ณธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ๋ค. ์์ ๋ฐฉํธ์ผ๋ก ํ๊ธ ๋์ ์์ด ๋ก๊ทธ๋ง ๋์ค๊ฒ ํ๊ธฐ ์ด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์. ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ด๋ค. ๊ทผ๋ฐ ํ๊ธ๋ ๋์์ผ ๋๋ ์ํฉ์ด๋ฉด... ์ด๋ ๊ฒ ํ๋ฉด ์๋๋ค. ๋น๊ทผ. ์ปดํจํฐ ํ๊ฒฝ์ ์ธ์ฝ๋ฉ ์ธํ ์ ๋ฐ๊พธ๊ธฐ (๋ถ์์ ) ์ด ๋งํฌ์ ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํ์. ์ ๋ ํ์ง ๋ง๊ธฐ. ๊ธฐ์กด ํ์ผ๋ค ์์ ๋ค ๊นจ์ง๋ค. cl-filter ๋ฅผ ์์ ํด์ '์๋ฒฝ'ํ๊ฒ ํด๊ฒฐํ๊ธฐ God ์ค๋ ฅ์ ๋ถ์ด ์ฌ๋ฆฌ์ ๋งํฌ๋ฅผ ํตํด ์์ ์ ์๋ํ๋ค. (..
TSharedRef ๋ฅผ ํด๋์ค ๋ฉค๋ฒ ๋ณ์๋ก ์ ์ธํ ๋ ์๋ฌ ํต์ฌ : 1. TSharedRef ๋ฅผ ์ ์ธํ ๋๋ ๋ฐ๋์ ์ด๊ธฐํ๋ฅผ ํด ์ฃผ์. 2. TSharedRef ๋ฅผ ์ด๊ธฐํํ ๋๋ MakeShareable ๋ณด๋ค MakeShared ๋ฅผ ์ฌ์ฉํ์. 3. ์ด๊ธฐํ๊ฐ ํ๋ค๋ฉด TSharedPtr ๋ก ์ ์ธํ๋ ๊ฒ๋ ๋์์ด๋ค. TSharedRef ๋ฅผ ๋ฉค๋ฒ ๋ณ์๋ก ์ ์ธํ ๋, ๋ง์ฝ ํค๋ํ์ผ์ด๋ ์์ฑ์์์ ์ด๊ธฐํ๋ฅผ ํด ์ฃผ์ง ์๋๋ค๋ฉด ์๋์ ๊ฐ์ ์๋ฌ๋ฅผ ๋ง๋๊ฒ ๋๋ค... void EnsureRetrievingVTablePtrDuringCtor(const TCHAR* CtorSignature) { UE_CLOG(!GIsRetrievingVTablePtr, LogCore, Fatal, TEXT("The %s constructor..
TTypeCompatibleBytes ํ์ ํต์ฌ : 1. TTypeCompatibleBytes ์ ๊ธฐ๋ณธ ํ์ ์ด ์๋ ๋ฐ์ดํฐ ๋ฐฐ์ด๋ก, ์ปดํ์ผ ํ์ alignment ๊ฐ ๊ฐ๋ฅํ๋ค. 2. Alignment ๊ฐ ๋๋ ๊ธฐ๋ณธ ๋จ์๋ ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ํ์ ์ผ๋ก๋ถํฐ ๊ณ์ฐ๋ ์ฌ์ด์ฆ๋ก ์ ์๋๋ค. 3. GetTypedPtr ๋ก ํด๋น Element ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. TypeCompatibleBytes.h ์ ์ ์๋ ๊ตฌํ์ ๋ณด๋ฉด, /** An untyped array of data with compile-time alignment and size derived from another type. */ template struct TTypeCompatibleBytes : public TAlignedBytes< sizeo..
์ธ๋ฆฌ์ผ ์ค๋งํธ ํฌ์ธํฐ ๊ตฌํ ์ธ๋ถ์ฌํญ๊ณผ ํ ํต์ฌ : 1. ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ์ง ๊ณ ๋ คํ ๋๋ ํญ์ ํผํฌ๋จผ์ค์ ๋ํด ์๊ฐํด์ผ ํ๋ค. ์ค๋งํธ ํฌ์ธํฐ๋ ์์ ๊ด๋ฆฌ์๋ ์ ํฉํ์ง๋ง ์ผ๋ถ ์ค๋งํธ ํฌ์ธํฐ ํ์ ์ C++ ๊ธฐ๋ณธ ํฌ์ธํฐ๋ณด๋ค ๋ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค. 2. TSharedPtr ๋ ๋น์นจ๋ฒํ(non-intrusive) ๋ก, ์ค๋ธ์ ํธ๊ฐ ์ค๋งํธ ํฌ์ธํฐ์ ์์ ํ์ ์๋์ง ์ ์ ์๋ค. ์ค๋ธ์ ํธ๋ฅผ TSharedRef ๋๋ TSharedPtr ๋ก ์ ๊ทผํ๋ฉด, ์ค๋ธ์ ํธ ํด๋์ค๋ฅผ TSharedFromThis ์์ ํ์์์ผ์ผ ํ๋ค. 3. ์ค๋งํธ ํฌ์ธํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ๋ฉํฐ ์ค๋ ๋์์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด, ์ค๋ ๋ ์ธ์ดํ ๋ฒ์ ์ ์ฌ์ฉํ์. ์ค๋งํธ ํฌ์ธํฐ ๊ตฌํ ์ธ๋ถ์ฌํญ ์ธ๋ฆฌ์ผ ์ค๋งํธ ํฌ์ธํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ..
TOptional ํต์ฌ : 1. TOptional ์ ์ธ์๋ก ๋ค์ด๊ฐ ๋ ์์ด ์์ฑ๋์๋์ง ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฐ๋จํ๊ฒ ํ์ธํ ์ ์๋ Wrapper ํด๋์ค์ด๋ค. 2. Optional.h ์ ๋ณด๋ฉด Value ์ bIsSet ์ด ์๋๋ฐ, Value ๊ฐ ์ค์ ๋๊ธฐ๋ ๋ฐ์ดํฐ์ด๊ณ , bIsSet ์ด ํด๋น ๋ฐ์ดํฐ์ ์์ฑ์๊ฐ ํธ์ถ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๋ ์์ด๋ค. IsSet, Emplace, GetValue ๋ฑ์ ์ฌ์ฉํ๋ฉด ํด๋น ํด๋์ค๋ฅผ ์ ์ฉํ๊ฒ ํ์ฉํ ์ ์๋ค. 3. TOptional ์ ์ฌ์ฉํ๋ ์ฅ์ ์ค ํ๋๋, ํน์ ๋ณ์๊ฐ ์ด๊ธฐํ๋์๋์ง๋ฅผ ํ๋จํ๊ธฐ ์ํด 'Magic Number' ๋ฅผ ์ธ ํ์๊ฐ ์์ด์ง๋ค๋ ๊ฒ์ด๋ค! TOptional ๊ตฌ์กฐ์ฒด ์ผ๋จ, Optional.h ์ ์ ์๋ TOptional ๊ตฌ์กฐ์ฒด์ ๋๋ต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ณด์..
ENUM_CLASS_FLAGS ์ฌ์ฉํ๊ธฐ (์ธ๋ฆฌ์ผ ํ๋๊ทธ ์ฌ์ฉ๋ฒ) ํต์ฌ : 1. ์ฌ๋ฌ ์กฐ๊ฑด์ ๋์์ ๊ฐ์ง ์ ์๋ ์ํฉ์ ๋ค๋ฅผ ๋๋, Enum Class ์ ๊ฐ์ Shift ์ฐ์ฐ์๋ฅผ ํ์ฉํด Bit Flag ์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. 2. EnumClassFlags ํ์ผ์ ์ ์๋ ํ ํ๋ฆฟ ํจ์๋ค(e.g. EnumHasAnyFlags)์ ํ์ฉํ๋ฉด, Enum Class ์ ์ ์๋ ํ๋๊ทธ๋ค์ ์ด์ฉํด ์ผ์ด์ค๋ค์ ์ค์ฒฉ์ ํจ์จ์ ์ผ๋ก ์ฒดํฌํ ์ ์๋ค. 3. ์ผ๋ฐ์ ์ผ๋ก Enum Class ๋ด์ ๊ฐ๋ค์ Flag ๋ก ํํํ๋ ๊ฒฝ์ฐ๋ UI ๋ ํ๊ฒฝ์ค์ ์ธํ ๋ฑ์ด ์๋ค. ์ผ๋ฐ์ ์ผ๋ก Enum Class ๋ ๊ฐ์ ์ฃผ์ ๋ด์์ ์ฌ๋ฌ ์กฐ๊ฑด๋ค์ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ผ ์ฌ๋ฌ ๋ณตํฉ์ ์ธ ์ํฉ์ ๋์์ ๋ค๋ค์ผ ํ๋ ์ผ์ด์ค๊ฐ ์๋ค๊ณ ํ๋ฉด ..
TimerHandle ๋ฐฐ์ด ์ฌ์ฉํ๊ธฐ (TimerHandle Array) ํต์ฌ : 1. TArray ํ์ ์ ์ฌ์ฉํ๋ฉด ๋๋ค. 2. ์๋ก์ด FTimerHandle ์ ๋ฃ์ ๋๋ Emplace ๋ฅผ ์ฌ์ฉํ๋ค. 3. ๊ฐ์ฒด๊ฐ ํ๊ดด๋๊ฑฐ๋ ์ ๋ฆฌํ๋ ์์ ์ ClearTimer ๋ฐ ๋ฐฐ์ด์ ๋น์์ฃผ๋ ์์ ์ ํด ์ฃผ์. ์ค๋ช ํ ๊ฒ์ ์์ 3์ค ์์ฝ์์ ๋ค ํ์ผ๋, ์ฝ๋๋ง ๋ณด์. // ์ ์ธ // ์ผ์ ์๊ฐ ํ UTextBlock ๋ณธ๋ ์์์ผ๋ก ๋์๊ฐ๊ฒ ๋ง๋ค๋ ์ฌ์ฉํ๋ ํ์ด๋จธํธ๋ค TArray timerHandleList; // ๊ตฌํ void UTestWidget::NativeConstruct() { for (int i = 0; i < 10; ++i) { FTimerHandle newTimerHandle; timerHandleList..
๋์ ์ผ๋ก ์ปดํฌํดํธ ์์ฑํ๊ธฐ (Dynamically create ActorComponent) ํต์ฌ : 1. ์ผ๋ฐ์ ์ผ๋ก ActorComponent ๋ ์์ฑ์์์ CreateDefaultSubobject ํจ์๋ฅผ ํตํด CDO ๊ฐ ์์ฑ๋๋ค. 2. ๋์ ์ผ๋ก ์กํฐ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ๋๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ๋ธ๋ฃจํ๋ฆฐํธ์์๋ AddComponent ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ฉฐ, C++ ์์๋ NewObject ๋ก ActorComponent ๋ฅผ ์์ฑ ํ, ๊ธฐ์กด RootComponent ์ Attach ํ๋ ๋ฐฉ์์ ํ์ฉํ๋ค. 3. ์ปค์คํ AddComponent ํจ์๋ฅผ ๋ง๋ค์ด์ ํธํ๊ฒ ํ์ฉํ๊ฑฐ๋, ํ ํ๋ฆฟ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ๋ธ๋ฃจํ๋ฆฐํธ์์ AActor ํด๋์ค์๋ AddComponent ๋ผ๋, ๋ด๋ถ์ ์ผ๋ก NewObj..