UE5/Network 15

[UE5] TearOff

[ UE5 : TearOff ] 특별한 경우에, 최적화를 위해 서버가 특정 액터를 복제하지 않도록 빠르게 분리시키는 것. 예를 들면, FPS 게임에서 적을 처치했을 때 특정 액터가 파괴되어 더 이상 게임에 영향을 미치지 않는 경우에 사용될 수 있다.그러니까 파괴된 건물의 잔해가 바닥에 떨어지거나 적 시체가 바닥에 쓰러져서 축 늘어지는 시뮬레이션을 진행한다면, 굳이 서버에서 해당 액터를 시뮬레이션해서 클라이언트에게 복제할 필요가 없다.이는 서버의 물리 시뮬레이션 연산 비용 + 복제 비용이 되기 때문이다.보통 이런 시체가 자연스럽게 쓰러지는 기능을 래그돌(Ragdoll)이라고 하는데, 해당 액터가 사망했을 경우 Ragdoll 된다는 것을 알리기 위해 TearOff를 클라이언트에게 마지막으로 알린 뒤, 서버에..

UE5/Network 2024.11.19

[NDC2022] SPICA 어디까지 왔나? 강연 필기

https://youtu.be/aulqNFU3gjo?si=-HB6y7jD5Rv2anvY  기존의 데디케이티드 서버구조에서, 조건에 따라 호스트 클라이언트를 선정하고, 몬스터의 연산량을 호스트에게 위임하여 연산량을 나누어 주도록 변경함으로써 최적화를 달성했다고 한다. 플러그인으로 기능을 구현하여 엔진 수정을 최소화하였으므로, 프로젝트 코드 / 버전 간의 코드 의존성도 거의 없게 되었다고 한다. 순서게임에 들어가서     1) 접속마주친 몬스터의     2) 위임공격을 피하고         3) 생성몬스터를 처리한다  4) 전투 1) 접속 - 홀펀칭(STUN)홀펀칭 : 포트가 열려있지 않은 상황에서 클라이언트가 연결을 시도할 때, 공유기가 있으면 해당 공유기로 인해서 패킷이 어디로 보내줄지 모르는 상태가 되..

UE5/Network 2024.11.13

[UE5] Animation Update in Server, Server side Rewind

[ 메모 ][ WIP  : 해당 게시글은 아직 연구중인 주제이므로 내용의 신뢰를 보장할 수 없고 임의 추가/삭제될 예정입니다. ] [ Overview ]FPS 게임이나 액션 게임에서, 캐릭터의 특정 애니메이션 프레임에서 공격 스킬이 실행되어야 하거나, 캐릭터의 히트박스를 기반으로 정교하게 피격 판정을 해야하는 경우가 있다.이 경우 피격 판정 당시의 캐릭터의 히트박스의 정보나, Montage의 AnimNotify를 기반으로 자주 판정하게 된다.그런데 언리얼엔진에선, 기본적으로 Server에서 AnimNotify 호출 또는 애니메이션의 업데이트가 원활하지 못하다.서버 입장에선 매 틱마다 캐릭터들의 본의 위치를 정교하게 업데이트 하거나 해당 프레임에서 AnimNotify를 호출하는 것이 비싼 연산이기 때문이다..

UE5/Network 2024.10.06

[UE5] SetPawn() : OnPossess in Client

[ UE5 OnPossess in Client ] 간혹 게임이 처음 시작될 때, Controller가 Pawn을 소유한 직후, 그러니까 Controller와 Pawn이 둘 다 유효한 가장 처음 시점이 필요할 때가 있다.OnPossess(APawn* InPawn)라고 간편한 함수가 직접적으로 존재하지만, 이는 서버에서만 호출된다.클라이언트, 또는 클라이언트와 서버 둘 다 간편하게 Init 할 수있는 함수가 없을까? [ AController::SetPawn(APawn* InPawn) ]이 함수는 서버, 클라이언트로 부터 전부 호출된다.그리고 virtual로 선언되어 있어 잘 사용하면 서버, 클라이언트 양측 케이스를 한 번에 핸들링가능하다는 뜻이다.기본적으로 서버에서는 OnPossess(), 클라이언트에서는 ..

UE5/Network 2024.09.28

Conditional Property Replication에 관한 짧은 분석

[ 짧은 메모 ] RepLayOut.cpp - 1525 CommentMost replication conditions don't actually effect whether or not we compare properties, because we share comparisons across connections, and typically only want to do one comparison per frame for all connections, when possible.  This means that we will end up performing the comparison, ignoring replication conditions, even if we might not have to send the pr..

UE5/Network 2024.09.15

[UE5] Replication Graph Deep Dive

수집한 공식/비공식 자료를 임의로 해석 후 정리하고 있는 게시글이기에 정확성이 다소 떨어질 수 있습니다 [ Overview ]Replication Graph는 4.20에 공개되고 4.21에 출시된, 언리얼 멀티플레이를 위한 대규모 최적화 기능이다.Replication Graph의 필요성은 데디케이티드 서버의 한계에 달하는 100인을 목표로 출시된 게임들이 출시하고 흥행함에 따라 대두되었는데, 이것이 개발되기 전에는 각 게임 개발사에서 독자적으로 엔진을 수정하여 최적화하곤 했다.이후 언리얼엔진 개발사인 에픽게임즈에서도 포트나이트 배틀로얄이 흥행함에 따라 공식적인 대규모 최적화 방식을 개발하고 적용한 뒤에 Replication Graph를 공개했다.이름과 달리 C++로만 공식적으로 지원되며, 언급했듯이 포트..

UE5/Network 2024.08.29

Multiplayer in UE : How to Understand Network Replication

https://www.youtube.com/watch?v=JOJP0CvpB8w  Replication system은 3가지 중요한 클래스에 의존한다. 1) NetDriver2) NetConnection3) UChannel Server가 부팅되면 NetDriver를 생성하고, remote process들로 부터 message를 수신하기 시작한다. (remote process : client that doesn't have authority)Client가 부팅되면 또한 자체의 NetDirve를 생성하고, server에게 connection을 요청한다.  일단 Server와 Client의 NetDriver가 서로 연결되면, NetDriver간에 NetConnection을 형성한다.Server는 각각 연결된 R..

UE5/Network 2024.08.29

[UE5] About HUD After Seamless Travel

Seamless Travel이 일어난 이후 무슨 일이 일어나는가? 우선 Seamless Travel이 일어날 때, 새로운 GameMode가 AGameMode의 subclass이고, PlayerController 또한 이전과 같다면 PlayerConrtoller는 변화가 일어나지 않고 그대로 넘어오게 된다.만약 그렇지 않다면, GameMode(또는 GameModeBase)의 HandleSeamlessTravelPlayer() 내에서 새로운 PlayerController가 만들어진다.Seamless Travel이 일어난 이후, PlayerController가 이전과 다르다면 일부 주요 정보만 받아오는 SwapPlayerController()가 일어나게 된다. [ AGameMode.cpp : HandleSea..

UE5/Network 2024.08.22

[UE5] Replication - Push Model

Push Model이란 뭘까?언리얼의 Property Replication System은 기본적으로 Polling System이다.라이엇게임즈의 발로란트 최적화 과정에서 Replication의 Polling System에 관한 이야기가  나와있다.Unfortunately, it’s also pretty slow. It requires scanning through every variable marked as replicated every frame, then comparing it to each of the 10 clients’ last known states, and then packaging any deltas to send to the client. This is effectively random ..

UE5/Network 2024.07.31