https://developer.valvesoftware.com/wiki/Lag_Compensation 관련된 문서로 Yahn Bernier’s 2001 paper on game engine networking를 보려고 했을 수 있다. 렉 보정은 서버에서 유저 명령어를 수행할 때, 플레이어의 지연시간만큼 시간을 되돌리는 개념이다. 예측과 결합하면 렉 보정은 공격자의 시선에서 네트워크 지연을 방지하는데 도움이 된다. 보다 자세한 설명은 소스엔진 멀티플레이어 네트워크 참고. 기본적으로 플레이어만 뒤로 돌아가고 이들의 1초간 위치와 애니메이션 기록을 저장해둔다.…
https://developer.valvesoftware.com/wiki/Interpolation 멀티플레이어 게임의 클라이언트는 서버의 각 업데이트를 받을 때 3 프레임 이상을 렌더해야 하는 것이 보통이다. (60fps에 cl_updaterate 20으로 가정) 소스엔진의 보간 시스템은 서버 업데이트 사이의 데이터 간격이나 패킷 손실로 인해 생길 수 있는 홱 움직이는 움직임을 부드럽게 보간하여 방지한다. 서버는 각 플레이어가 얼마나 보간되는지 파악하여 렉 보정을 적절히 보정한다. 영향과 관리 보간은 플레이어 관점에서…
https://developer.valvesoftware.com/wiki/Prediction 예측은 서버에서 확인 받을 필요 없이 클라이언트가 로컬 플레이어의 행동에 대한 영향을 예측하는 개념이다. 엔티티의 예측된 상태는 서버와 일치하거나 불일치가 감지될 때까지 서버 명령어를 테스트한다. 대다수의 경우는 클라이언트의 예측에서 서버와 일치하고 지연시간이 없는 것처럼 행복하게 플레이 할 수 있게 된다. 불일치가 있다면? 예측 코드가 정확하게 작성되었어도 희박하게 발생될 수 있는데 이때는 클라이언트를 틀린 지점으로…
https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization Yahn W. Bernier (yahn@valvesoftware.com), 2001Software Development Engineer 우선 그대로 적고 검수 예정이다. 개요 액션 게임에서 온라인 플레이를 지원하는 것은 게임이 근본적으로 성공하는 요인이자 그 수명을 늘린다. 하지만 1인칭 액션 게임의 이러한 인터넷 플레이 설계 작업은 고된 작업이다. 사용자의 다양한 PC 환경에 맞춰 개발자가 넓은 범위의 하드웨어와 네트워크 연결 또한 지원해야 하기 때문이다. 현재 온라인 게이밍…
아마 여기서 이 글을 보는 사람이라면 AMBuild는 소스모드의 익스텐션만을 빌드하는 툴로만 알고 있을텐데 사실은 C++ 프로젝트라면 어디에나 호환될 수 있도록 alliedmods 측에서 제작한 빌드 툴이다. 익스텐션에 대한 내용은 나중에 다루고 우선 그 빌드에 쓰이는 이 도구에 대해 알아보고자 한다. 먼저 이 빌드 툴이 다른 빌드 툴과 무슨 차이가 있는지 알아보기 위해 위키를 참고했다. 여기서 대부분의…
데이터 구조체의 확장형, 구조체처럼 멤버 변수를 가질 수 있지만 나아가서 함수도 멤버로 가질 수 있다. (객체 지향의 정수) 클래스의 인스턴스를 ‘Object‘라고 부르며 일반적인 변수처럼 클래스 자체를 타입으로 선언하고 다룰 수 있다. 기본적으로 일반적인 데이터 구조체와 같은 형식이지만 추가로 함수를 넣을 수 있고 접근 지정자를 사용한다. 접근 지정자가 의미하는 것은 아래와 같다. private: 같은 클래스나 “friend”에서만…
이건 혹시라도 헷갈리면 진짜 큰일나고 보통 제대로 이해 못한다는 구간이라서 따로 문서를 만들었다. 일반적으로 변수는 그 값이 컴퓨터 메모리 상에 저장되는 위치를 식별자를 통해서 물리적인 주소에 대해 신경 쓸 필요 없이 필요할 때 손쉽게 접근할 수 있게 한다. C++ 프로그램에서의 컴퓨터 메모리는 각 고유한 주소를 가지는 1 바이트 단위의 메모리 층이 연속적으로 이뤄진 형태다. 이런…
C++에서 입출력에 사용하는 streams 객체를 뜻함 stream은 프로그램에서 문자들을 삽입하거나 추출하는 객체다.기본적으로 표준 라이브러리에 여러 가지의 stream 오브젝트들이 있다. cin : 표준 입력 streamcout: 표준 출력 streamcerr: 표준 에러(출력) streamclog: 표준 로깅(출력) stream crr, clog은 기본적으로 cout와 똑같이 작동되지만 에러 메세지와 로깅 용도로 사용된다는 목적을 명시한다. 개별적으로 리디렉션 될 수 있다. (확인 필요) cout (표준…
https://cplusplus.com/doc/tutorial/variables/ 언어에 직접적으로 구현되어 대부분의 시스템에서 기본적으로 지원된다. 문자 타입들: 한 문자를 표현하는 데 쓰임 (‘A’, ‘$’ 등)가장 흔한 타입은 char, 1바이트만을 사용하지만 더 넓은 범위를 지원하는 문자도 있다. char: 1바이트 사용 (8비트) char16_t: char보다 크게 2바이트 사용 (16비트) char32_t: char16_t보다 크게 4바이트 사용 (32비트) wchar_t: 가장 큰 범위로 표현할 수 있음 정수 타입: 숫자를…
edict_t 라고도 한다.이전에 번역한 Networking Entities 문서에서 언급된 키워드인데 정확히 알지 못한 개념이라 정리하는 겸 번역한다. edict_t (“엔티티 딕셔너리”)는 엔티티들이 서버와 클라리언트 사이를 교차할 수 있도록 하는 인터페이스 구조체이고 이게 붙은 엔티티는 서버와 클라이언트에서 같은 인덱스를 갖게 된다. 엔티티 딕셔너리는 해당 엔티티의 데이터 테이블의 상태를 다루고 모든 DLL에 공통된 표현을 제공하지만 클라이언트에서 사용할 수는 없다. Note: 엔티티…
https://developer.valvesoftware.com/wiki/Networking_Entities 이전에 번역한 Source Multiplayer Networking 문서의 관련 문서들을 번역하고 있다.이번에도 우선 번역을 먼저하고 문장을 다듬거나 부연 설명이 필요한 것은 서서히 추가할 예정이다. 소스 엔진은 가상의 세계에 최대 255명의 플레이어를 동시에 수용할 수 있다. 플레이어 간의 월드 업데이트와 유저의 입력을 동기화하기 위해서 UDP/IP 네트워크 패킷 통신으로 소통하는 서버-클라이언트 아키텍쳐를 사용하고 서버는 그 중심에서 유저의 입력이나…
SourcePawn 스크립트에서도 C++처럼 전처리문 #define을 통한 매크로 상수, 함수를 작성할 수 있는 것을 떠올려 똑같이 작성해보았는데 원했던 대로 작동이 되지 않아 다시 확인해야 했다. 특히 매크로에 대한 항목은 공식 문서에서는 언급도 되지 않은 내용이라 아예 공개된 컴파일러 소스의 어휘 분석을 확인해야 했다.물론 정확하게 확인했다는 생각이 아직 안 들지만 우선 참고로 적어둔다. 컴파일러 코드에 의하면 아래와…