전체 글 390

멀티플레이어의 기본 -데디케이트 서버와 리슨 서버

멀티플레이어의 이해 게임을 하면서 '멀티플레이어'라는 용어를 많이 들어봤을 것이다. 이 용어가 개발자에게는 어떤 의미냐 하면, 실제로 멀티플레이어를 구현하기 위해서는 서버와 서버에 연결된 클라이언트 사이의 네트워크를 통해 전송되는 일련의 명령을 의미한다. 이를 통해 구현해내면, 개발자는 플레이어에게 다른 플레이어들과 세계를 공유하는 경험을 제공할 수 있다. 서버와 클라이언트 사이의 이러한 양방향 통신의 한 예로는 플레이어가 게임 중에 무기를 발사하려고 시도하는 시점을 들 수 있다. 플레이어가 마우스 왼쩍 버튼을 누르고 있으면, 클라이언트가 서버에 무기 발사를 원한다는 의사를 전달한다. 서버는 다음 항목을 확인해 플레이어가 무기를 발사할 수 있는지 확인한다. 플레이어가 살아 있는가? 플레이어가 무기를 장착..

UE5 2024.01.01

레지스터

레지스터의 종류 레지스터는 저마다의 역할이 있고, 그에 걸맞는 내용을 저장한다. 그 중 전공서적에서 주로 다루는 8개의 핵심 레지스터를 설명하겠다. 각 레지스터가 CPU내부에서 어떤 역할을 수행하는지에 유의하자. 프로그램 카운터 PC : Program Counter 프로그램 카운터(PC; Progream Counter)는 메모리에서 가저올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장한다. 프로그램 카운터를 명령어 포인터(IP; Instruction Pointer)라고 부르는 CPU도 있다. 명령어 레지스터 IR : Instruction Register 명령어 레지스터(IR; Instruction Register)는 해석할 명령어, 즉 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터..

Survival - UE5 - Multiplayer의 작동

이 서바이벌 게임의 multiplayer로 복제되는 방식으로 설계되었다. 우선, 멀티플레이어에 대해 가장 먼저 알아야 할 것이 있다. 언리얼 엔진 내에서 멀티플레이어 게임을 프로그래밍하거나 만들 때, 따라야할 몇 가지 규칙이 있다. 만약 그 규칙을 따르지 않으면, Player1이 동작하는 모든 것이 Player2의 화면에서는 복제되지 않아 그저 멀대같이 서있는 하나의 캐릭터로만 보일 뿐이다. 이러한 문제는 멀티플레이어 게임을 제작할 때 종종 겪는 시행착오이다. UE 내에서는 멀티플레이어 작업을 수행할 때 준수해야하는 특정 규칙들이 있고, 이러한 규칙들을 잘 이해하면 원하는 종류의 멀티플레이어 게임을 거의 만들 수 있다. 실제로 언리얼 편집기 내에서는, 언리얼이 가지고 있는 두 가지 다른 유형의 멀티플레이..

UE5 2023.12.31

트리 - 상하 반전된 형태

트리 트리는 노드와 노드 사이를 연결하는 에지를 이용하여 계층을 구성한다. 트리이 계층 구조를 화면에 도식적으로 나타내려면 말 그대로 나무 형태로 나타낼 수 있으며, 이때 에지는 나뭇가지처럼 표현된다. 트리의 중심이 되는 노드를 루트 노드라고 부르고, 이 노드는 보통 가장 맨 위에 나타낸다. 즉, 트리 구조를 그림으로 나타낼 때는 실제 나무와는 정 반대로 뿌리 모양처럼 생기게 된다. 그 외에도 다양한 트리 모양이 있다. 연습 문제 : 조직도 구조 만들기 #include #include struct node { std::string position; node* first; node* second; }; struct org_tree { node* root; // 새로운 트리를 만드는 정적 함수로 트리 구조를..

ALU

필자는 ALU가 무엇인지도 중요하지만, 왜 배워야 하는 것인지도 중요하다고 생각한다. ALU는 CPU에도, GPU에도 있다. 일반적으로 ALU는 코어의 구성 요소 중 하나이다. ALU는 GPU를 더욱 효율적으로 사용하기 위해 단순 그래픽 처리 뿐만이 아니라, 병렬처리로 그래픽 처리 + 수학 연산도 가능하다 이러한 것이 가능한 GPU를 GPGPU라고 부른다. 이러한 GPGPU 똑똑한 GPU가 나오면서, C/C++ 언어로 병렬계산에 필요한 기능들을 제공해주는 소프트웨어가 만들어졌다. 이러한 것이 CUDA라는 API이다. 이전에도 DX 혹은 OpenGL이라는 병렬형 그래픽 처리 연산 소프트웨어가 있었지만, 이들은 그래픽 처리에 대한 고급 기술이 필요한 반면, CUDA는 이전 API와 달리 병렬 프로그래밍 전문..

D3D12 3D 프로그래밍 입문 - 기본 지식 (3)

다중표본화의 이론 모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터 화면에 임의의 선을 완벽하게 나타내는 것은 불가능하다. 흔히 이 때, 나타나는 현상이 앨리어싱 효과, 다른 말로는 계단현상을 보여준다. 선을 픽셀들의 배열로 "근사"치에 가깝게 연산하더라도 완벽히 일치할 수 없기에 나타나는 현상이다. 삼각형의 변에서도 이와 비슷한 앨리어싱 효과가 나타난다. 근래의 모니터는 모니터의 해상도가 높아, 픽셀 크기를 줄이면 문제가 크게 완화되었기에 계단 현상이 거의 눈에 띄지 않을 정도가 되었다. 그러나 모니터 해상도를 키우는 것이 불가능하거나 키워도 충분하지 않을 경우에는 antialiasing 안티엘리어싱 혹은 앨리어싱 제거 기법을 적용할 수 있다. 그런 기법 중 하나가 초과표본화(supersamplin..

그래픽스/DX12 2023.12.22

D3D11 원근 투영과 거리 비교

이번 수업 목표는 1열로 나열된 구들을 가지고 3D 입체 공간에서, 여러개의 물체의 원근감을 표현하는 것이다. 홍정모 교수님께서 단순히 여러 개의 물체 뿐만이 아니고, 여러 가지의 물체로 확장해주신 엔진 덕분에 기반부터 구현하지 않고 해당 원근감 원리에 대해서만 집중할 수 있게끔 해주셨다. 처음에는 구인 물체로 원근감을 표현하고, 이후에는 구가 아닌 물체로 원근감을 표현하신다. 이번 수업에서 원근법을 표현하려고 쓰는 기법은, 가상의 레이를 쏘고 구가 충돌하는 순서에 따라 거리를 구하는 방법이다.

그래픽스/DX11 2023.12.21

D3D12 3D 프로그래밍 입문 - 기본 지식 (2)

교환 사슬과 페이지 전환 애니메이션이 껌벅이는 현상을 피하려면 다음과 같은 방법을 사용하는 것이 최선이다. 우선, 애니메이션의 한 프레임을 전체 화면 바깥(off-screen) 텍스처에 그린다. 그런 텍스처를 후면 버퍼(back buffer)라고 부른다. 그 후면 버퍼를 하나의 완전한 프레임으로서 화면에 표시한다. 이렇게 하면 화면을 보는 사용자에게는 프레임이 그려지는 과정이 나타나지 않는다. 이중 버퍼링을 효율적으로 구현하려면 하드웨어로 관리되는 두 개의 텍스처 버퍼가 필요한데, 하나는 전면 버퍼(front buffer)이고 다른 하나는 앞에서 언급한 후면 버퍼이다. 화면에는 전면 버퍼에 담긴 이미지 자료가 표시된다. 전면 버퍼가 화면에 표시된 동안 애니메이션의 다음 프레임을 후면 버퍼에 그리고, 다 ..

그래픽스/DX12 2023.12.21

밉맵(Mipmap)

밉맵이란? 3차원 그래픽스의 텍스처 매핑 분야에서, 밉맵(mipmap)은 렌더링 속도를 향상시키기 위한 목적으로 기본 텍스처와 이를 연속적으로 미리 축소시킨 텍스처로 이루어진 비트맵 이미지의 집합이다. 밉맵은 일반적으로 3D 씬에서 오브젝트를 렌더링하는 데 사용되며 여기서 텍스처된 오브젝트는 카메라로부터 거리에 따라 달라질 수 있다. 더 높은 밉 레벨은 카메라에 가까운 오브젝트에 사용되며 더 낮은 밉 레벨은 더 먼 오브젝트에 사용된다. 밉맵은 GPU가 전체 해상도보다 낮은 해상도로 텍스처를 렌더링하는 상황에서 렌더링 작업 속도를 높이고 렌더링이 아티팩트를 줄일 수 있다. 효과적으로 캐시된 밉은 원본 텍스처의 다운샘플링된 버전이다. GPU는 원본 전체 해상도 텍스처에서 더 많은 샘플링 작업을 하는 대신에 ..

그래픽스 2023.12.21