Banditors(밴디터스) 소개
Banditors플랫폼: PC장르: Co-op 로그라이트개발 일자: 2024년 2월 ~ 개발 중개발 엔진: 언리얼 5.2개발 언어: C++ Banditors는 2025년 출시를 목표로 1인 개발 중인 상용 게임입니다.동료들과 던전을 탐험하며 무수히 쏟아지는 적들을 해치워 나가는 게임입니다. 게임에 대한 더 자세한 정보는 추후 공개할 예정입니다많은 응원 부탁드립니다 🙇
Banditors플랫폼: PC장르: Co-op 로그라이트개발 일자: 2024년 2월 ~ 개발 중개발 엔진: 언리얼 5.2개발 언어: C++ Banditors는 2025년 출시를 목표로 1인 개발 중인 상용 게임입니다.동료들과 던전을 탐험하며 무수히 쏟아지는 적들을 해치워 나가는 게임입니다. 게임에 대한 더 자세한 정보는 추후 공개할 예정입니다많은 응원 부탁드립니다 🙇
프로젝트 소개글은 여기서 확인하실 수 있습니다. 본 포스트에서는 로벤헬 프로젝트를 진행하며 제가 기술적으로 고민하고, 해결했던 흔적을 남겨두려고 합니다. 개발 과정에서 어떤 어려움이 있었고, 그 어려움을 기술적으로 어떻게 극복하려 시도했는지에 대한 분석이 담겨 있습니다. 아키텍처 설계의 배경 로벤헬은 "Server authoritative한 충돌, 이동 연산을 지원하면서도, 한 장소에 몇 천 명이 동시에 위치할 수 있는 MMO"라는, 엄청나게 거창한 목표를 두고 개발되었습니다. 사실 맨 처음에는 서버는 그냥 중개자 역할만 하고, 클라이언트가 위치를 발송하면 서버가 그걸 다른 클라이언트에게 전달하는 정도를 목표로 잡았지만, 막상 개발을 시작하니 뭔가 욕심이 나기 시작했고, "왜 물리 연산이 FPS만큼 리얼..
오늘 제가 속해있는 게임 제작 동아리 출신 게임 개발자 선배님들과 이야기를 나눌 수 있는 좋은 기회가 있었습니다. 여기서는 정식 인터뷰와 별개로 제가 개인적으로 대화를 나눴던 내용들 중 기억에 남는 내용들을 남겨 놓으려 합니다. 1. 현업에서 게임 개발 과정의 흐름 : 제가 알고 있는 내용과 크게 다르진 않았지만, 사운드 추가 작업이 생각보다 개발의 상당히 뒷쪽 시점에서 이루어진다는 것에 놀랐습니다. 개인적으로 혼자 게임을 개발할 때는 플레이어 몰입감에 소리가 중요한 역할을 한다고 생각해서 이걸 고려하며 개발하기 위해 개발 중반 정도에 사운드 작업을 같이 하는데, 회사는 마감일을 지키는 게 아주 중요하다 보니 크리티컬한 기능을 먼저 개발하는 게 중요하고, 또 사운드를 전담해서 제작하는 팀이 따로 있기 때..
Rovenhell (로벤헬) 개발 기간: 23년 8월 ~ 11월개발 목적: 취미 겸 기술 역량 향상 개발 환경: 클라이언트 및 게임 로직 서버: 언리얼 엔진 5 (커스텀 넷코드 제작, 언리얼 Replication 사용 X)미들웨어: Visual C++, IOCP개발 언어: C++기술 분석:https://gamesmith.tistory.com/272 [Rovenhell] 기술 분석프로젝트 소개글은 여기서 확인하실 수 있습니다. 본 포스트에서는 로벤헬 프로젝트를 진행하며 제가 기술적으로 고민하고, 해결했던 흔적을 남겨두려고 합니다. 개발 과정에서 어떤 어려움이gamesmith.tistory.com소스 코드: https://github.com/hagukin/Rovenhell_UE GitHub - hagukin..
짧다면 짧고 길다면 긴 군대에서의 1년 6개월이 지나갔다. 지난 1년 6개월간은 정말 다이나믹했다. 분명 육군 전체에서도 꽤 유니크한 편이라고 생각한다. 군대에서 있었던 에피소드들을 털어놓는 것도 재미는 있겠지만, 그런 건 친구들과의 안줏거리 정도로 만족한다. 이번 포스트에서는 지난 1년 6개월간 내가 무엇을 배웠고, 앞으로 어떻게 해 나갈 것인지를 정리해보고자 한다. 1년 반, 무얼 얻었나? 군생활을 하면서 우스갯소리로 "군대에서 얻을 건 없다"는 말을 종종 듣곤 했지만, 돌이켜보면 얻은 게 없지는 않다. 군대는 체력적으로 더 강해질 수 있는 여건을 마련해주었다. 입대 전에도 맨몸운동 정도는 꾸준히 했지만, 입대 후 규칙적인 생활 패턴 속에서 생활하며 더 체계적으로 운동을 할 수 있게 되었다. 스스로가..
이번 시간에는 카메라를 이동시킬 수 있는 기능을 구현해보자. 현재 우리의 프레임워크에서는 카메라의 좌표와 방향이 고정되어있는데, 이를 보다 유동적으로 동작할 수 있도록 수정해보자. (사실 이 내용은 예전에 내가 블로그에서 다룬 적이 있는 내용이기도 하다. 참조) 스크린에 나타나는 물체의 위치는 물체와 카메라의 상대적 위치관계에 의해 결정되는 것을 알 수 있다. (2D 카메라의 경우부터 생각해보면 쉽다. 카메라가 위로 움직이면 물체는 아래로 움직인다) 때문에 카메라의 실제 좌표를 파이프라인 상에서 자유롭게 움직이게 하는 대신, 카메라를 고정시켜 두고 물체들이 카메라의 움직임에 맞추어 상대적으로 이동하게 만드는 방법을 사용할 수 있다. (이렇게 하는 가장 큰 이유는 파이프라인에서 카메라의 좌표는 0,0,0이..
시작에 앞서 지금까지 구축한 파이프라인을 한 번 살펴보자. 정점이 처리되며 거쳐가는 공간은 위와 같다. homogeneous coordinates와 ndc space로의 변환은 지난 글에서 다루었던 내용이다. 파이프라인의 세부적인 프로세스들을 살펴보면 다음과 같다. 정점을 나눠 vertex shader를 거치고 triangle assembly로 삼각형들로 만든 후, 카메라 방향에 의한 culling을 처리하고, geometry shader를 거치고 나서 persepctive division 및 screen transform을 처리하고, triangle rasterization, z-buffering을 처리한 후 pixel shader를 처리하고 최종적으로 스크린에 렌더링한다. 여기서 잠시 한 가지 문제를..
Projection matrix(투영 행렬)은 아주 중요하고 아주 널리 다루어지지만 완벽하게 이해하기 까다로운 내용이다. 본 학습에서는 이를 최대한 완벽하게 이해할 수 있도록 다뤄보겠다. 본 학습에서 구현하고자 하는 기능은 화면 ratio 조절, fov 조절이다. 그리고 이 기능들을 추가하기 위한 더 나은 frustum을 사용한 projection 방법을 적용할 것이다. (Frustum이 뭔지는 잠시 뒤에서 다루겠다) 그리고 이 Frustum을 사용한 projection 방법은 정점에 Projection matrix를 곱하는 과정을 통해 이루어지는데, 우리는 이 과정에 필요한 이 projection matrix를 구하는 과정을 살펴볼 것이다. 우리의 프레임워크에서는 현재로써는 focal plane(Fru..
크기 4짜리 벡터와 4x4 행렬을 우리 프레임워크가 지원가능하도록 만들어보자. 더 자세히 들어가기 전에, 우리의 프레임워크는 row vector(가로로 긴 형태의 벡터)를 기본값으로 한다는 걸 예전 글에서도 언급한 적 있다. (DirectX 또한 row vector를 기본값으로 한다 - https://nicoschertler.wordpress.com/2012/01/27/directx-and-matrices/) 때문에 행렬-벡터 연산 또한 이에 맞추어 계산된디. (실제로 아래 코드에서 .Translation() 함수를 살펴보면 우리가 흔히 아는 변환행렬의 꼴을 transpose한 모습, 즉 tx ty tz가 행렬 아랫부분에 위치하고 있음을 알 수 있다.) 왜 4x4를 지원해야 하는가에 대한 설명은 잠시 뒤..
물체가 질감에 따라 다르게 보이는 이유는 무엇일까? 질감에 따라 표면의 울퉁불퉁한 정도가 다르고, 때문에 빛이 표면에서 반사되는 방향이 표면 자체의 방향과 일치하지 않기 때문이다. 이번 포스트에서는 이러한 질감을 구현하기 위해 물체의 Diffuse와 Specular한 정도에 따라서 빛이 적절한 수준으로 퍼지게 만들어 보다 현실적인 그래픽을 그려보겠다. 구현에 앞서 한가지 질문을 던져보겠다. 반짝거리는 금속과 같은 물체에 보이는 "광"은 왜 나타나는 것일까? 빛이 물체의 표면에 맞고 반사되어 카메라(관찰자)를 향해 맞는다면 그 부분이 더 밝게 보이기 때문에 광이 보이는 것이다. 이를 컴퓨터그래픽스에서는 어떻게 구현해야 할까? 단순히 어떤 빛이 물체의 표면 위의 점 A에 맞고 튕겨나온 반사광이 카메라가 위치..
작대기 3개 어느덧 제 군생활이 절반 이상 지나갔네요... 그중 특히 2022년은 제 인생 전체를 통틀어서 가장 많은 변화를 겪은 해가 아니었나 생각합니다. 개인적인 일들도 있었고, 무엇보다 군대라는 공간 속에서 제 스스로 정말 많이, 아주 많이 변화했다고 생각합니다. 대체 뭐가 그렇게 달라졌느냐고 물으신다면, 저는 크게 다음 두 가지, 내 목표를 이루기 위한 능력들을 갖춰나가는 지적 성장, 그리고 보다 더 나은 사람이 되기 위한 내적 성장 을 이루었다고 말씀드리고 싶습니다. 저는 끊임없이 학습하고 스스로를 더 나은 사람으로 만들어나가는 것을 멈추지 않아 왔습니다. 지식을 추구하는 것은 제 가장 큰 즐거움 중 하나이고, 삶의 원동력이 되기 때문입니다. 그런 저에게 입대는 하나의 시련처럼만 느껴졌습니다. ..
오늘은 phong shading, 정확히는 per-pixel lighting을 살펴보자. phong shading은 per-pixel lighting에 추가적으로 다른 개념들이 사용된 셰이딩 방법이지만, 일단은 편의를 위해 phong shading이라고 표현하겠다. 지난번 글에서 우리의 파이프라인의 point light에 한가지 문제가 있음을 언급했다. 이 사진을 보면 이해가 빠르다. 바로 빛이 거리의 영향을 받지 않는 문제이다. 그러나 우리는 분명 지난 시간에 거리에 따른 빛의 명암을 구현했는데, 이게 무슨 일일까? 물체를 기울여보면 그 문제의 원인에 대해 대략 감을 잡을 수 있다. 우리가 빛과 물체의 거리를 측정할 때는 정점을 기준으로 하고 있다. 그리고 정점과 정점 사이의 공간에 대해서는 두 정점에..