전체 글

게이머, 수학자, 개발자 삼위일체의 과정
https://meo-young.tistory.com/238 [이득우의 언리얼] 12. 언리얼 엔진의 메모리 관리개요이번 강의에서는 Unreal Engine의 가비지 컬렉션(Garbage Collection) 시스템을 이해하고, UObject 포인터를 안전하게 관리하는 방법을 학습합니다. C++의 고질적인 메모리 문제를 해결하는 Unreal의 자동meo-young.tistory.comhttps://dev.epicgames.com/documentation/ko-kr/unreal-engine/incremental-garbage-collection-in-unreal-engine?application_version=5.5 언리얼 엔진의 점진적 가비지 컬렉션 | 언리얼 엔진 5.5 문서 | Epic Develop..
Cascading(계단식) Cast Chain은 왜 문제일까?1. 리소스 로드 & 메모리 사용 증가캐스트가 “타입 확인”만 하는 것처럼 보여도, 블루프린트 클래스로의 캐스트는 그 블루프린트 에셋에 대한 하드 레퍼런스를 만들 수 있다.하드 레퍼런스는 A가 로드될 때 A가 의존하는 것들이 함께 메모리에 로드되고, 그 의존 대상의 의존 대상도 연쇄적으로 로드되는 구조라서 비용이 대폭 증가할 수 있다. 에디터에서 사이즈 맵을 통해 캐스트가 메모리에 미치는 영향을 확인할 수 있다. 또한 SpawnActor, GetAllActorsOfClass의 Class 핀에 블루프린트 타입 변수를 넣었을 때, 마찬가지로 하드 래퍼런스를 만들 수 있다. 2. 잠재적 실패 처리 대기 시간또한 잠재적으로 캐스트가 실패했을때의 비용도..
더티 플래그는 값이 필요할 때만 업데이트하도록 한다. 결과값이 실제로 필요할 때까지 무거운 연산을 미룬다. 씬 그래프(Scene Graph)의 트랜스폼 계산이 대표적인 예시이다. 캐릭터의 손에 총이 쥐어져 있다고 가정해 보자.계층 구조는 [월드] -> [캐릭터] -> [팔] -> [손] -> [총]으로 이루어진다.캐릭터가 1프레임 동안 앞으로 이동하고, 팔을 휘두르고, 손목을 꺾었다. '총'의 최종 월드 좌표(World Matrix)를 구하기 위해 행렬 연산을 계속 하는 대신에, 위치나 회전값이 변경될 때마다 isDirty = true로 플래그만 세팅해 둔다. 그리고 렌더링 파이프라인으로 넘어가기 직전, 총의 월드 좌표가 진짜로 필요해지면 한 번만 부모의 행렬들을 가져와 곱셈 연산을 수행하고 isDirt..
컴포지트 패턴(Composite pattern)이란 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다.사용 예)비헤이비어 트리 (Behavior Tree): Compoiste (셀렉터, 시퀀스, 단순 병렬) 노드는 흐름 제어의 형태이며, 하위에 Task 노드(Leaf)나 또 다른 Composite 노드를 자식으로 가진다. 트리를 평가할 때 연결된 자손 분기의 실행 방식을 결정한다. 구현 예시 Component (공통 인터페이스): UInvCompositeBaseComposite (자식 포함 노드): UInvComposite Leaf (말단 노드): UInvLeaf 이때 Component는 ApplyFunctio..
https://outscal.com/blog/unreal-engine-soft-hard-references-async-loading Why My First Open-World Game Crashed Every 5 Minutes (And How Soft vs Hard References Unreal Engine Finally Fixed It)Learn the difference between soft vs hard references in Unreal Engine. Master asynchronous loading with TSoftObjectPtr and the Asset Manager to fix memory crashes and eliminate loading screens.outscal.com
/*** Computes the sine and cosine of a scalar value.** @param ScalarSin Pointer to where the Sin result should be stored* @param ScalarCos Pointer to where the Cos result should be stored* @param Value input angles */template )>static constexpr FORCEINLINE void SinCos(std::decay_t* ScalarSin, std::decay_t* ScalarCos, T Value ){ // Map Value to y in [-pi,pi], x = 2*pi*quotient + remainder. ..
1. 더블 버퍼링 (Double Buffering)더블 버퍼링은 렌더링 중인 화면이 갱신되는 과정을 사용자가 목격하지 못하게 하기 위한 메모리 관리 기법입니다. 이는 Scanline Racing에 의한 화면 깜빡임(Flickering)이나 불완전한 렌더링 출력을 방지합니다. 그래픽스 API에서 화면 출력은 Swap Chain이라는 구조체에 의해 관리된다.Front Buffer (Primary Buffer): 현재 화면에 출력 중인 버퍼Back Buffer (Secondary Buffer): GPU가 다음 프레임을 렌더링하고 있는 버퍼GPU가 Back Buffer에 렌더링을 완료하면, 두 버퍼의 역할을 교체(Swap) 한다.과거에는 BitBlt(메모리 복사) 방식을 사용했으나?, 현대적 RHI는 Flip ..
Server side Rewindhttps://vorixo.github.io/devtricks/simple-rewinding/ Rewinding a networked gameIn this post you’ll learn the principles about network rewinding, and we’ll provide a very simple reconciliation implementation for Unreal Engine.vorixo.github.iohttps://snapnet.dev/blog/performing-lag-compensation-in-unreal-engine-5/#results Performing Lag Compensation in Unreal Engine 5Approaches a..
· 책
닌텐도 팝업 스토어를 들리고 슈퍼 마리오 갤럭시 합본팩을 구매후 서점에 갔는데,이와타씨에게 묻다라는 책을 추천받은 생각이 나 구매하고 집가사 바로 읽었다. 200p의 적은 분량이지만, 이와타씨의 철학을 어깨 너머 배울 수 있었다. 건강하게 오래 활동하셔서 더 많은 말을 해주셨다면 좋았을 텐데, 짧은 분량에 아쉬움이 느껴진다. 성공에 안주하지 않아야 하는 태도, 다름 사람에 대한 존경, 프로그래머는 노라고 말해서는 안된다 등 많은 교훈을 얻었다. 그의 유산은 계속해서 게이머에게, 닌텐도에 전해짐이 느껴진다. 특히 나 외의 다른 사람에게 존경심을 가질 수 있는지 여부,다른 생각과 가치관을 가지고 일하는 사람들에게 존경심을 가질 수 있는지가 중요함을 다시 깨닫는다. 취업에 급급했던 요즘, 잠시 가던 길을..
언리얼 엔진의 렌더 파이프라인은 기본 디퍼드 렌더링(deferred rendering) 패스와 함께 사용하거나 포워드 렌더링 패스에서 실행하도록 환경설정할 수 있다. 이 프로세스는 왼쪽에서 오른쪽으로 진행되며, 2단계부터 5단계는 동시에 이뤄진다. Deferred Rendering셰이딩이 디퍼드 패스에서 발생합니다GBuffer를 기반으로 컴포지팅 작업을 수행합니다동적 라이팅 렌더링에 뛰어납니다안정적이고 예측 가능한 높은 성능을 제공합니다기능 비활성화에는 유연하지만, 표면 속성에는 덜 유연합니다MSAA가 불가능하며, TAA에 의존합니다지오메트리를 렌더링 하는 동안에는 셰이딩과 라이팅을 렌더링 하지 않음. 렌더링의 일부를 지연하는 것. 다이내믹 렌더링에 우수하고 안정적이고 예측 가능한 하이엔드 퍼포먼스에 우..
J00n
To my youth