完. [Unreal 5 / STILL LOADING] Objective system
·
Unreal 5/STILL LOADING
서론개발 기간의 상당부분을 차지했던 Rendering system에 대한 소개를 마쳤다. 이제 그 다음으로 많은 시간을 투자했던 Objective system에 대해 소개하도록 하겠다. 이 시스템은 게임의 목표에 대한 상태와 그 상태의 변화(목표 진행중, 목표 달성 등)으로 부터 발생하는 여러 이벤트들 컨트롤 해주는 포괄적 시스템이다. 여기서 더 나아가 그런 목표에 대한 관리들을 C++ 코드를 작성하지 않고 블루프린트에서 쉽게 관리가 가능하도록 지원하게 하였다.아키텍처필자가 설계한 오브젝티브 시스템은 총 5계층의 아키텍처로 이루어져 있다.1. Data Layer (데이터 계층)USLObjectiveDataSettings: 시스템 전체 설정 관리USLObjectiveDataAsset: 챕터별 목표 템플릿 ..
3. [Unreal 5 / STILL LOADING] Rendering system - Pixelart style
·
Unreal 5/STILL LOADING
서론카툰 렌더링이야 그나마 자료도 많고 언리얼에서도 엔진을 수정하지 않고 PPM만을 사용해서 완벽하게는 아니더라도 카툰렌더링을 표현하는 시도가 적은 것은 아니다. 하지만 언리얼에서 픽셀아트 스타일의 게임, 즉 2D 도트 게임을 만드는 시도는 사례가 그리 많지 않다. 그도 그럴것이 언리얼 엔진은 실사지향을 하기 때문에 기본 렌더링 방식 자체가 멀티 라이팅에 유리한 디퍼드 렌더링으로 되어있기 때문에 성능상 유리하지 않다. 이를 해결하고자 엔진을 커스텀해서 사용하는 시간과 노력을 들일바엔 차라리 유니티 엔진으로 2D 게임을 만든는 것이 효율적인 선택일 것이다. 따라서 엔진을 커스텀하지 않고 3D 그래픽을 픽셀 아트로 변환하고자 하는 시도는 "정말 이것이 가능한가?" 라는 의문이 있었다.Transforming ..
2. [Unreal 5 / STILL LOADING] Rendering system - Cartoon style
·
Unreal 5/STILL LOADING
서론순서에 맞지 않게 2D 픽셀아트 스타일 렌더링을 다루기 전에 카툰 렌더링을 먼저 다루는 이유는, 프로젝트의 렌더링 방법에 따라 복잡도의 차등을 나누자면 카툰 스타일 렌더링 방식이 가장 복잡도가 낮고 다른 렌더링 방식의 베이스가 되기 때문이다. 우선 프로젝트에서 사용한 카툰 렌더링 방식은 Post Processing material(이후 PPM)을 활용한 Physically based Cel shading을 기반으로 하고 다음 유튜브를 가장 많이 참고하였다.Physically Based Cel Shading - Visual Tech ArtOutline(외곽선)비주얼 완성도의 핵심적인 기능을 하는게 아웃라인이지 않나 싶다. 컴퓨터 비전에서 사물의 외곽선을 검출하는 여러 에지 검출 알고리즘들에 대해 배웠던..
1. [Unreal 5 / STILL LOADING] Rendering system - Summary
·
Unreal 5/STILL LOADING
서론프로젝트의 기획 단계에서 요구되었던 렌더링 방식은 총 4가지이다. 고전 게임에서 자주 볼 수 있는 흑백 2D 게임 스타일, 그보다 조금 더 발전한 컬러 2D 픽셀 아트 스타일, 3D 카툰 스타일, 3D 실사 지향 스타일 등이 있고 여기서 3D 실사 지향 스타일은 언리얼 자체가 실사 지향 렌더링을 추구 하기 때문에 언리얼의 기본 기능만을 사용하여 연출할 수 있있고 내가 만들어야 했던 것은 흑백 2D 게임 스타일, 컬러 2D 픽셀아트 스타일, 3D 카툰 스타일 이렇게 총 3개이다.흑백 2D 게임 스타일흑백 2D 게임 스타일은 과거 게임보이 시절 흑백 게임들의 그래픽에서 모티브를 하였다. 물론 그 당시 흑백 게임들은 큰 모니터가 아니라 작은 게임보이의 디스플레이에서 재생되기 때문에 픽셀 수 자체가 많지 않..
0. [Unreal 5 / STILL LOADING] Introduction
·
Unreal 5/STILL LOADING
서론본 시리즈에서는 필자가 내일배움캠프 언리얼 5 개발자 교육 과정을 수료하며 팀장으로 진행했던 최종 프로젝트인 STILL LOADING 프로젝트에 대해 개발했던 기술적인 부분들을 정리하여 연재할 생각이다. 남들이 다 하는건 괜히 꺼려지고 특별한 것을 선호하는 홍대병 개발자인 본인의 특성상, 자료도 적고 하려는 사람도 적은 재밌는 시도를 맡아 개발하였기 때문에 앞으로 연재하는 내용들 중 일부는 아마 국내에서 최초로 다루고 게시하는 것일 가능성이 크다.STILL LOADINGSTILL LOADING Official Trailer게임의 장르를 한 문단으로 만들면 다음과 같다.메타픽션 서스펜스 어드벤쳐 퍼즐 2D/3D 게임아주 김치피자탕수육 장르를 가진 우리 게임의 스토리는 미완성된 게임의 주인공이 자아를 갖..
[기타] 클린 코드(Clean code)에 대한 내 생각
·
Other
서론이 글을 작성하기에 앞서 본인은 본인 스스로 개발을 잘 한다고 생각하지 않고, 아직 배울게 많고 부족한 상태라고 자각한다. 하지만 클린 코드라는 거창하고 권위있는 주제를 다루는 것이 본인의 오만함이 아니라, 그저 훗날 내가 이 글을 다시 보았을 때 과거의 나는 이런 생각을 가지고 있었구나, 나는 지금 얼마만큼 발전했고 혹은 초심을 잃어 퇴화하였는지를 알기 위해 이 글을 작성한다. 따라서 이 글을 읽을지도 모르는 모두에게 코딩에는 정답은 없고 완벽한 코드도 없다는 것을 인지하며 이렇게 열심히 밑밥을 까는 필자의 의도도 유념하며 읽어주기를 바란다. 완벽한 코드본인은 학창시절 스타크래프트2 를 정말 재미있게 플레이했다. 스타2의 군단의 심장 캠페인을 플레이하면 아바투르라는 공돌이 포지션의 NPC가 완벽하게..
[CS] 다익스트라 알고리즘 (데이크스트라 알고리즘)
·
Computer Science/Algorithm
서론오늘은 최단거리 알고리즘의 대명사 다익스트라 알고리즘에 대해서 알아보도록 하자. 지루하고 현학적인 이론을 설명하기에 앞서 EBS에서 누구나 다익스트라 알고리즘의 원리에 대해 아주 쉽게 시청각 자료를 곁들여서 설명을 해주었다(영상의 40초부터). 따라서 영상을 먼저 보고 온다면 이해해 큰 도움이 될 것이다.다익스트라를 아주 쉽게 설명해준 EBS의 은혜다익스트라 알고리즘(Dijkstra algorithm)이란?다익스트라 알고리즘은 그래프에서 한 노드에서 모든 노드까지의 최단거리를 구하는 알고리즘이다. 영상을 보면 알다시피 Min distance table(MDT)로 불리는 최단거리배열을 갱신하며 최단거리를 구한다. 다익스트라의 핵심은 노드간의 탐색을 할때 현재 도달할 수 있는 간선의 비용중 가장 비용이 ..
2. [CS] O(n log n) 정렬 - 퀵 정렬(Quick sort)
·
Computer Science/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)
·
Computer Science/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)
·
Unreal 5/Study
서론언리얼 엔진에서 Key를 기반으로한 컨테이너는 언리얼 개발을 조금이라도 해보았으면 TMap과 TSet을 바로 떠올릴 것이다. 검색을 해보면 TMap과 TSet의 메서드에 대한 설명은 정말 많지만 내부적으로 TMap과 TSet이 어떤 원리로 동작을 하는지와 같은 원론적인 내용을 다룬 글은 별로 없다. 따라서 이 글은은 언리얼 엔진의 대표적인 Map 컨테이너인 TMap과 TSet에 대한 원론적인 내용을 다룰 것이며 사용법이나 메서드에 관한 설명은 다른 글을 참고하기를 권장한다.HashTable(해시 테이블)언리얼 엔진의 TMap과 TSet은 해시 테이블(Hash Table) 기반의 컨테이너이다. 해시 테이블이란 [Key, Value] 쌍(또는 Key만 존재)의 데이터를 저장하는 자료구조로, 내부적으로 버..