320x100

전체 글 435

[NDC 2016] 구형맵에서는 어떻게 길을 찾아야 하나요?

Recast: 언리얼 엔진에서 내비게이션 메시로 사용하고 있는 오픈 소스 라이브러리 장점 - 메시 빌드 속도 - 길찾기 속도 - 유연한 셋팅 단점 - 근시로 인한 오차 - 에이전트 검색 속도 - 난해한 셋팅 Detour: Recast로 생성된 메시에서 길을 찾아주는 라이브러리 DetourCrowd: 에이전트들간의 충돌 회피를 하는 알고리즘 DetourTileCache: 동적 메시 생성을 위한 라이브러리 Recast: 내비게이션 메시를 생성하는 부분 RecastDemo: 비주얼라이제이션을 포함한 툴 Recast 내비게이션 메시는 여러 개의 폴리곤들과 그 폴리곤들 사이의 연결 정보로 구성되어 있음 1. 길을 찾을 때 폴리곤의 각 변의 중점을 따라 길을 찾음 2. 찾은 길의 폴리곤을 따라서 길을 똑바르게 편다..

NDC/Dev 2023.01.17

[NDC 2016] <야생의 땅: 듀랑고> 중앙 서버 없는 게임 로직

객체가 중심이 되는 서버? 하나의 지역을 물리적인 서버가 담당하는 것은 땅의 크기가 서버의 성능에 의해 제한될 수 밖에 없다 => 서버는 모종의 규칙에 의해 배정된 객체를 담당한다 장점 서버에 소속된 객체의 시야 외에는 관심이 없어 전체 세계의 크기와 상관 없는 구조 => 이론적으로 무한한 크기의 세계를 표현 가능 특정 서버에 문제가 생겼을 때 재 접속하면 바로 그 위치에서 정상적인 플레이 가능 => 안정성의 향상 동기화 동기화가 잦을 수록 DB에 부담이 된다 분산 환경에서는 서버간 동기화가 이루어지므로, N배 부담이 된다 동기화 최적화 1. 미래를 예측해 동기화 횟수를 줄이자 변화량을 입력하면 그래프 방식으로 데이터를 보여주는 라이브러리 https://github.com/what-studio/gauge..

NDC/Server 2023.01.16

[NDC 2016] <야생의 땅: 듀랑고> 지형 관리 완전 자동화 - AWS와 DOCKER 체험기

도전 과제는 크게 2가지로 - 지형 배포: 지형 배포 자동화 - 자연물 관리: 자연 상태 파악, 생태계 시뮬레이션 자동화 지형 제작 & 배포 개요 - 전용 도구로 지형 파일들을 제작 - 후처리를 거친 뒤 지형 파일을 git에 commit - 서버 코드에서 해당 커밋을 참조하도록 변경 지형 제작 & 배포 도구 - WorldGen: 지형 파일 제작(C#) - ManageTool: 지형 배포 및 관리에 필요한 기능 제공(Python) 지형 배포 절차 - 청크별 빠른 색인을 위해 여러가지 지형 정보들을 청크별로 나눔 - 청크: 16 x 16 타일 -> pub-sub 토픽, 분산의 최소 단위 - 타일: 가로 세로 2m의 정사각형 -> 자연물, 건축물 등의 최소 단위 - cm: 동물의 위치등 섬세한 위치 조정에 사..

NDC/Server 2023.01.15

[NDC 2016] 유니티, iOS에서 LINQ 사용하기

LINK(Language Integrated Query): 데이터 저장소 종류와 관계 없이 저장소에 일관성 있는 인터페이스로 질의 - 동일한 인터페이스 사용 - 다양하고 편리한 기능 (Max, Min, Average, OrderBy, First ...) - 지연 실행 (성능 이점) - 간결한 High Level 코드 품질 - 컴파일 타임 에러 체크 int[] numbers = { 5, 10, 8, 3, 6, 12 }; Query syntax var result = from num in numbers where num % 2 == 0 orderby num select num * 2; Method syntax var result = numbers .Where(num => num % 2 == 0) .Order..

NDC/Dev 2023.01.15

[NDC 2016] 테라 서버의 Modern C++ 활용기

smart pointer (RAII) - 객체의 생성 소멸 관리를 위해 사용하는 객체 - shared_ptr, unique_ptr t_ptr - shared_ptr처럼 Reference Count를 공유 - 침습형(invasive) 카운터를 사용 Cppcon2015 중 "Smart pointers" are overused (스마트 포인터는 과다 사용되고 있다) - shared_ptr can be expensive => reference count의 증감 연산이 많이 일어나기 때문에 사례1) 빠른줄만 알았던 type_cast template T* type_cast(S* s) { if (s && TypeTable -> -> seq * C++14부턴 간단하게 std::make_index_sequence으로 대..

NDC/Server 2023.01.14

[NDC 2015] 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현

비관적 동기화 (락 기반 동기화) 내용 __ 작업하는 동안 다른 동작을 못하게 한다. 단점 __ 모든 DB 변경에서 락을 잡아야 한다 __ 락을 잡을 수 없는 상황(서버 다운)이 있다 낙관적 동기화 (트랜잭셔널 메모리) 내용 __ 일단 진행하고, 문제가 생기면 롤백한다 애플리케이션 레벨에서 롤백을 구현해야 하므로 문제 영역을 나눠보자 __ 퍼스트 로컬 트랜잭션 ____ 실패할 가능성이 있는 것 ____ 안전하게 롤백할 수 있어야 함 ____ ex) 아이템 제거, 골드 감소 __ 세컨드 로컬 트랜잭션 ____ 실패할 가능성이 없는 것 ____ 안전하게 롤백할 수 없어도 된다 ____ ex) 아이템 추가, 골드 증가 절차 1. 모든 참여자(DB)들에게 퍼스트 LT를 실행 2. 모든 퍼스트 LT가 성공하고 나..

NDC/DB 2023.01.09
320x100