전체 글 1454

Invalidation Box

인밸리데이션 박스(Invalidation Box) (1) 자손 위젯의 렌더링 정보와 지오메트리를 캐싱하여 UI의 CPU 사용량을 크게 줄이는 언리얼 엔진의 최적화 컴포넌트입니다.(2) 내부 위젯에 변화가 없으면 매 프레임 발생하는 재계산 및 페인트 과정을 건너뛰어 게임 성능을 향상시킵니다 (3) 데이터 캐싱: 인밸리데이션 박스 하위의 위젯 계층구조 전체를 캐싱합니다. 자손 위젯의 위치, 크기(레이아웃), 색상, 머티리얼 등의 정보가 저장됩니다(4) 캐시된 위젯의 속성이 변경되면(예: 텍스트 변경, 크기 조정) 그 자손들만 다시 페인팅됩니다. 변경되지 않은 UI 요소는 캐시된 데이터를 그대로 재사용합니다(5) CPU 비용 절감: 화면이 고정되어 있거나 거의 변하지 않는 정적 UI(인벤토리, 메뉴 화면,..

Unreal Engine/UI 2026.07.05

SlatePrepass

Slate Prepass- 언리얼 엔진의 슬레이트(Slate) UI 시스템에서 위젯의 크기와 위치(Geometry)를 계층 구조를 따라 재계산하고 캐싱하는 핵심 함수 UI Geometry (1) 위젯의 크기, 위치, 절대 좌표, 로컬 공간 등을 정의하는 핵심 데이터 구조입니다. (2) 화면에서 위젯의 정확한 레이아웃을 계산하고, 마우스 클릭이나 위젯 간 충돌(인벤토리 옆 툴팁 표시 등)을 판별하는 데 사용됩니다 - Absolute Size: 화면(뷰포트) 픽셀 기준의 실제 크기입니다. - Local Size: 부모 위젯 내에서의 로컬 공간 크기입니다. - Absolute/Local Position: 절대 화면 좌표계 및 부모 기준 로컬 좌표계에서의 위치입니다. - Get Local Size /..

Unreal Engine/UI 2026.07.04

UI - Paint

1. Paint(1) Unreal Engine에서 UI 요소를 화면에 그리기 위해 호출(2) 위젯의 렌더링 정보를 Slate Element Batchar에 전달(3) 위젯 트리의 상속 구조에서 Paint 함수는 모든 자손 위젯에 대하여 재귀적으로 호출되며 각 위젯의 BP 함수 호출 및 Tick 함수를 호출 -> 이 함수들은 Hit Test Grid의 재 빌드를 유발하며 성능에 많은 영향을 끼친다.-> 위젯 트리의 과도한 상속 구조는 CPU의 잦은 Vtable(가상 메서드 테이블) 접근을 유발하며 캐시 미스가 발생 2. Slate Element Batcher(FSlateElementBatcher)(1) UI 요소들을 화면에 효율적으로 그리기 위해 배치(Batch)로 묶어주는 핵심 렌더링 클래스입니다. (..

Unreal Engine/UI 2026.07.04

언리얼 넷 모드

- 실행 중인 게임 인스턴스가 네트워크상에서 어떤 역할(서버, 클라이언트, 또는 단일)을 하는지 정의하는 상태값 1. 언리얼 넷모드 종류-> 넷 모드는 World가 가지는 속성이다. (1) 싱글 : NM_StandAlone- 서버와 클라이언트 구분이 없으며, 로컬 플레이어만을 위한 연산만 수행합니다. 개발 초기 테스트나 싱글플레이 게임 제작에 사용됩니다 (2) 서버 : NM_ListenServer- 호스트 플레이어가 자신의 컴퓨터에서 서버를 열고 동시에 게임을 플레이하는 방식입니다 - 여는 플레이어에게는 서버이자 클라이언트이고, 다른 접속자들에게는 서버 역할을 합니다. -> 소규모 협동이나 캐주얼한 파티 게임에 적합하지만, 호스트의 인터넷 환경에 영향을 받습니다 (3) 서버 : NM_Dedica..

15. 짐벌락

오일러 각오일러 각 체계는 매우 직관적인데, x, y, z 축을 기준으로 놓고 기준축을 중심으로 회전을 표현한다.3차원은 축이 3개 존재하기에 이렇게 하면 모든 각도를 표현할 수 있다. 오일러 각의 문제점짐벌락 현상 -> 회전을 해서 두 개 이상의 축이 같아졌을 때 빠져나오지 못하는 문제점이다.오일러각을 이용한 회전 과정에서 두 개 혹은 세 개의 축이 겹쳐 한 개 혹은 두 개의 축에 자유도를 잃어서, 같은 방향으로 오브젝터의 회전 축이 겹치는 현상 -> 겹친 축을 원하는 방향으로 회전 할 수 없다.원래는 자유자재로 잘 움직이다가, 축들이 하나로 겹치게 되었을 때,문제점이 발생 짐벌락 현상이 발생하는 이유- 오일러 회전과 같이 회전의 연산을 각 축의 성분으로 나누어 계산하기 때문이다.- 오일러 각(E..

게임 수학 2026.06.22

15. 뷰포트 행렬

- 출력할 윈도우(window)와 윈도우 내에서의 출력 공간(viewport)가 필요하다.-> 출력 공간(viewport)를 설정하여 실질적으로 출력되는 공간을 설정해줄 수 있다. // 모니터 크기로 확장void ViewPort(float _Width, float _Height, float _Left, float _Right, float _ZMin, float _ZMax){ Identity(); Arr2D[0][0] = _Width * 0.5f; Arr2D[1][1] = -_Height * 0.5f; Arr2D[2][2] = _ZMax != 0.0f ? 1.0f : _ZMin / _ZMax; Arr2D[3][0] = Arr2D[0][0] + _Left; Arr2D[3][1] = -Arr2D[1][1] ..

게임 수학 2026.06.22

14. 투영 행렬

- 투영행렬의 목적은 모든 점의 X를 화면 -1~1 / 너비 기준으로 한 값으로 바꾸려고 하는 것 당연히 화면 바깥에 나가는 애들도 있고 걸치는 애들도 있고 하지만 기준이 생겼다, - -1~1 바깥으로 나간 애들은 전부다 화면 바깥에 있는 점들이다.X -1~1Y -1~1Z 0~1의 범위로 압축한다가 기본입니다. (1) 원근 투영- 원근감을 표현하기 위한 원근 투영행렬방식과 Real3D게임에 사용된다.- 원근 투영은 3각형으로 이루어져 있는데 Near는 0일수가 없다void PerspectiveFovRad(float _FovAngle, float _Width, float _Height, float _Near, float _Far){ Identity(); // w에 z값 이전을 위한 값 Arr2D[2][3]..

게임 수학 2026.06.22

14. 전치 행렬

(1) 어떤 회전행렬이 존재할때 그와 완전히 역방향의 회전행렬을 구해내는 것은 굉장히 쉽다.전치행렬이라는것을 이용하면 된다. (2) 이렇게 가운데 축을 기준으로 회전시킨 행렬을 전치 행렬이라고 하는데.(3) 이에 대한 결과는 회전행렬에는 이미 정해져있다.-> 기존 회전행렬에 완전히 반대되는 회전행렬이 만들어 집니다.void Transpose(){ float4x4 Result = *this; for (size_t y = 0; y

게임 수학 2026.06.22

13. View 행렬

View 행렬 : 월드 스페이스 -> 뷰 스페이스(1) 카메라 행렬을 의미(2) 뷰행렬의 역할 -> 어떤 카메라가 어떤 물체들을 보고 있다를 만들어 내는 겁니다.(3) 내 눈에 보이는 물체들을 정렬해주는 역할을 합니다.(4)뷰행렬을 구하기 위해서는 내적과 외적을 알아야 합니다. (5) 카메라가 기준되어카메라의 위치가 0,0,0카메라의 회전이 0,0,0 이 되는 행렬입니다 (6) 이 이야기는 반대로 말하자면- 카메라를 제외한 모두가 카메라를 기준으로 공전하는 행렬이 되는것입니다. (7) 뷰행렬의 목적- 투영행렬 하기전에 모든 점들을 카메라 앞에 존재하는 기준으로 만들려고 하는것. 눈앞에 보이는 점들을 가려내기 위해서 - 카메라는 45도 돌아가 있었다- 하지만 뷰행렬의 역할은 카메라를 회전하지 않은 상태로 ..

게임 수학 2026.06.22

12. 월드 행렬

월드 행렬 ((Mesh(점))로컬 스페이스 * 월드 행렬 => 월드 스페이스)world space에 배치하기 위해서는local space에서 오브젝트를 구성하는 정점들의 위치를 바꾸어주어야 합니다.여기서 정점들의 위치를 변경하는데 쓰이는 것이 World 행렬이며, 좌표는 동차 좌표를 사용합니다. (1) 크기(4X4) * 회전(4X4) * 이동(4X4) -> 최종 크자이 행렬 완성 - 크기- 자전 - 위치

게임 수학 2026.06.22