인기 글

1. [Unreal 5] 언리얼 엔진의 렌더링 파이프라인 (Rendering Pipeline)
·
Computer Graphics
서론 게임에서 무언가가 모니터 화면에 보여지고 있다는 것(렌더링)은 게임 엔진이 렌더링 파이프라인 이라는 정해진 과정을 열심히 수행하고 있다는 증거이다. 게임 엔진은 일반적으로 렌더링 파이프라인 이라는 것을 수행해 이미지 또는 프레임을 화면에 렌더링 한다. 본 게시글은 Unreal Engine에서 이 렌더링 파이프라인이 어떤 방식으로 이루어지고 어떻게 플레이어의 화면에 무언가를 렌더링 할 수 있는지에 대해 다루도록 하겠다.Rendering Pipeline? 렌더링 파이프라인의 과정에 대해 설명한 글은 정말 많다. 하지만 그 글들을 보면 과정이 조금씩 다르거나 똑같은 과정이라도 지칭하는 이름이 다르다. 렌더링 파이프라인은 렌더링의 목적에 따라 여러가지 종류의 렌더링 파이프라인이 존재하고, 설명하는 주체가 ..
[C++] Intro sort 인트로 정렬 C++
·
Coding Test
C++에서 제공하는 정렬 함수: IntroSortC++의 알고리즘 헤더에서는 sort() 함수를 지원한다. 정말 많은 sort 알고리즘이 존재하지만 C++에서 제공하는 정렬 함수는 어떤 알고리즘을 사용하는지 알아보자.정렬 알고리즘의 종류와 시간 복잡도여러가지 알고리즘에 대한 간략한 설명과 시간 복잡도를 보면 다음과 같다.알고리즘시간 복잡도 (최선)시간 복잡도 (평균)시간 복잡도 (최악)공간 복잡도퀵 정렬 (Quick Sort)O(n log n)O(n log n)O(n²)O(log n)힙 정렬 (Heap Sort)O(n log n)O(n log n)O(n log n)O(1)삽입 정렬 (Insertion Sort)O(n)O(n²)O(n²)O(1)C++의 IntroSort이런 널리 알려진 정렬 알고리즘과 달리..
2. [Unreal 5] 언리얼 엔진의 렌더링 파이프라인 (Rendering Pipeline)
·
Computer Graphics
서론 이전 시간에 Unreal Engine에서의 렌더링 파이프라인에 알아보기 전에 기초적인 하드웨어(GPU)관점에서의 렌더링 파이프라인에 대해서 알아보았다. 이번 시간에는 Unreal Engine에서 사용하는 렌더링 파이프라인은 어떤 방식이며 그것에 대해서 알아보도록 하자.Forward rendering Unreal Engine에서 사용하는 파이프 라인은 기본적으로 디퍼드 렌더링(Deferred rendering)과 포워드 렌더링(Forward rendering)을 선택하여 사용하고 디폴트는 디퍼드 렌더링을 사용한다고 한다. 우선 디퍼드 렌더링에 대해 알기 전에 포워드 렌더링에 대해 간략하게 알아보자. 이전 시간에 GPU의 관점에서의 렌더링 파이프라인에 대해 알아보았다. 포워드 파이프라인은 이것에서 조금..
[Unreal 5] C++ 클래스가 언리얼 에디터에서 보이지 않거나 삭제하고 싶을 때
·
Troubleshooting
언리얼 에디터에서는 C++ 클래스를 직접 삭제할 수 없기 때문에, 사용하지 않는 C++ 클래스를 삭제하려면 다음과 같은 과정을 따라야 한다.C++ 소스 삭제하고 싶을 때언리얼 에디터 종료Visual Studio 솔루션 탐색기의 프로젝트에서 해당 .cpp와 .h 파일 제거파일 탐색기에서 프로젝트 폴더 → Source 폴더 내의 Public에 존재하는 .h 파일과 Private에 존재하는 .cpp 파일 삭제Visual Studio에서 솔루션 우클릭 → 솔루션 다시 빌드빌드가 완료되면 언리얼 에디터 실행C++로 만든 클래스가 보이지 않을 때언리얼 에디터 종료Visual Studio에서 솔루션 우클릭 → 솔루션 다시 빌드빌드가 완료되면 언리얼 에디터 실행이 과정을 통해 삭제된 C++ 클래스 문제를 해결하거나, ..
[C++] 백준/Silver/1325. 효율적인 해킹
·
Coding Test
문제: 효율적인 해킹 (백준 1325번)문제 분석N개의 컴퓨터와 M개의 신뢰 관계가 주어질 때, 한 컴퓨터를 해킹하면 그 컴퓨터를 신뢰하는 다른 컴퓨터들도 해킹할 수 있다.각 컴퓨터를 시작점으로 하여 해킹할 수 있는 컴퓨터의 수(직접 및 간접)를 구한 뒤, 가장 많은 컴퓨터를 해킹할 수 있는 노드를 출력하는 문제이다. 접근입력으로 주어지는 (a, b) 관계는 "a가 b를 신뢰한다"는 의미이므로,b를 해킹하면 a도 해킹할 수 있다.이를 위해, 각 노드에 대해 역방향 그래프를 구성하여, 해당 노드에서 출발해 도달할 수 있는 노드의 수를 구하면 된다.해결 방법그래프 구성:입력 (a, b)를 받으면, graph[b]에 a를 추가한다.→ 이렇게 하면 b를 해킹했을 때, a로 확산되는 효과를 모사할 수 있다.BFS..

최신 글

[CS] 다익스트라 알고리즘 (데이크스트라 알고리즘)
·
Algorithm
서론오늘은 최단거리 알고리즘의 대명사 다익스트라 알고리즘에 대해서 알아보도록 하자. 지루하고 현학적인 이론을 설명하기에 앞서 EBS에서 누구나 다익스트라 알고리즘의 원리에 대해 아주 쉽게 시청각 자료를 곁들여서 설명을 해주었다(영상의 40초부터). 따라서 영상을 먼저 보고 온다면 이해해 큰 도움이 될 것이다.다익스트라를 아주 쉽게 설명해준 EBS의 은혜다익스트라 알고리즘(Dijkstra algorithm)이란?다익스트라 알고리즘은 그래프에서 한 노드에서 모든 노드까지의 최단거리를 구하는 알고리즘이다. 영상을 보면 알다시피 Min distance table(MDT)로 불리는 최단거리배열을 갱신하며 최단거리를 구한다. 다익스트라의 핵심은 노드간의 탐색을 할때 현재 도달할 수 있는 간선의 비용중 가장 비용이 ..
2. [CS] O(n log n) 정렬 - 퀵 정렬(Quick sort)
·
Algorithm
서론이전에 IntroSort에 대한 설명글에서 퀵 정렬(Quick sort)에 대한 슈도코드와 간략한 설명을 다루었다. 이번 글에서는 퀵 정렬에 대한 구체적인 동작 방식과 효율성에 대해서 알아보도록 하자.퀵 정렬(Quick sort)퀵 정렬은 분할 정복(Divide and Conquer) 방식의 정렬 알고리즘이다. 기준이 되는 피벗(Pivot)을 하나 선택하고, 피벗보다 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할해가며 정렬을 수행한다. 평균적으로 매우 빠르며($O(n log n)$), 제자리 정렬(추가적인 임시 배열을 사용하지 않음)이기 때문에 공간 효율성도 좋다.Quick sort 과정 (namu wiki) 분할 정복퀵 정렬은 앞서 설명했듯이 분할 정복을 사용해서 피벗을 기준으로 피벗보다 큰쪽, 피벗보..
1. [CS] O(n log n) 정렬 - 분할 정복과 합병 정렬(Merge sort)
·
Algorithm
서론분할 정복(Divide and conquer)은 커다란 문제를 작은 sub 문제로 나눈다음에 그것들을 다시 합쳐서 해결하는 개념이다. 일반적인 분할정복의 시퀀스는 다음과 같다:function solve(problem): if (problem is small enough): // base case return trivial solution else: divide problem into subproblems solve each subproblem recursively combine the results Divide: 문제를 더 작게 쪼갠다.Conquer: 하위 문제를 재귀적으로 해결한다.Combine: 하위 문제의 답을 바탕으로 최종 결과를 얻..
[Unreal 5] 언리얼 엔진의 Map 컨테이너(TMap, TSet)
·
Study
서론언리얼 엔진에서 Key를 기반으로한 컨테이너는 언리얼 개발을 조금이라도 해보았으면 TMap과 TSet을 바로 떠올릴 것이다. 검색을 해보면 TMap과 TSet의 메서드에 대한 설명은 정말 많지만 내부적으로 TMap과 TSet이 어떤 원리로 동작을 하는지와 같은 원론적인 내용을 다룬 글은 별로 없다. 따라서 이 글은은 언리얼 엔진의 대표적인 Map 컨테이너인 TMap과 TSet에 대한 원론적인 내용을 다룰 것이며 사용법이나 메서드에 관한 설명은 다른 글을 참고하기를 권장한다.HashTable(해시 테이블)언리얼 엔진의 TMap과 TSet은 해시 테이블(Hash Table) 기반의 컨테이너이다. 해시 테이블이란 [Key, Value] 쌍(또는 Key만 존재)의 데이터를 저장하는 자료구조로, 내부적으로 버..
[C++] C++의 다양한 컨테이너들
·
Study
서론C++에서 데이터를 저장할 때는 다양한 방식의 배열들을 사용할 수 있다. C-Style 배열부터 array, vector, list, deque 등 C++에서 제공하는 여러 배열(시퀀스 컨테이너)들은 각각의 특성과 용도에 따라 선택적으로 사용된다. 이번 글에서는 이러한 배열들의 특징과 차이점에 대해 알아보자.C-Style 배열C++을 처음 배울 때 가장 먼저 접하게 되는 배열로, 별도의 STL 없이도 사용할 수 있는 C++의 가장 기본적인 배열 형태이다. Primitive array라고도 불리며, 가장 빠르고 리소스를 적게 사용하는 반면, 제공하는 기능은 매우 제한적이다.배열의 크기를 정해놓고 사용하거나, 동적 할당을 통해 런타임에 크기를 지정할 수도 있다. new를 사용한 동적 할당 시에는 반드시 ..