SlideShare a Scribd company logo
테라로 살펴본
MMORPG의 논타겟팅 시스템
박순광 ∙ 김광일 ∙ 김재경
타겟팅? 논타겟팅?
• 몇 가지 예를 살펴보자
▪ WOW
▪ Blade & Soul
▪ TERA
https://youtu.be/fHns_YZDj_I?list=PLx9kQPn0UG9sA5ZFWiVKBQz6CePIDQ1UH&t=827
• 13분 47초 ~ 14분 5초
WOW
WOW
https://www.youtube.com/watch?v=3ZeH2fXQ-iQ&feature=youtu.be&t=177
• 2분 57초 ~ 3분 15초
Blade & Soul
https://youtu.be/ih-2hct930s
TERA
https://www.youtube.com/watch?v=4mgNGQo4cqY&feature=youtu.be
무슨 타겟팅이 이렇게 많아…
• 오토냐 프리냐는 중요하지 않음
• 게임에 알맞은 타겟팅으로 구현했을 뿐
• 한 게임에 여러 타겟팅이 존재할 수도 있음
• 그래서 타겟팅과 논타겟팅은 어떻게 구별?
타겟팅과 논타겟팅의 정의
출처 - http://www.thisisgame.com/webzine/community/tboard/?board=36&n=98814
타겟팅 vs 논타겟팅
그래서 어떻게 구현하죠?
그래서 어떻게 구현하죠?
라이덴2
출처 - http://go9ma.tistory.com/1481
• 핵심은 물리 판정이
실시간으로 일어나는 점
마영전의 경우
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부 中
NDC 2012 마비노기 영웅전 카이 포스트모템 中
NDC 2012 마비노기 영웅전 카이 포스트모템 中
NDC 2012 마비노기 영웅전 카이 포스트모템 中
NDC 2012 마비노기 영웅전 카이 포스트모템 中
NDC 2012 마비노기 영웅전 카이 포스트모템 中
NDC 2012 마비노기 영웅전 카이 포스트모템 中
https://www.youtube.com/watch?v=moDNvqCjYS4&feature=youtu.be
피격 프레딕션 유무 차이
NDC 2012 마비노기 영웅전 카이 포스트모템 中
NDC 2012 마비노기 영웅전 카이 포스트모템 中
https://www.youtube.com/watch?
v=fW7HIRuIpfs&feature=youtu.be
피격 프레딕션 로직
Frame loop
{
if ( isFirst && cl_hit
&& false == sv_hit )
{
play( flinch )
pause(0)
}
If ( sv_hit )
{
play( flinch )
resume(0)
}
}
NDC 2012 마비노기 영웅전 카이 포스트모템 中
실시간 물리 판정
라이덴2
출처 - http://go9ma.tistory.com/1481
던전앤파이터
• 싱글 or MO일 경우
• 클라에서 처리하거나
서버에서 모두 처리하면 됨
테라의 경우
• 심리스 월드로 구현된
MMORPG
• 프레임당 모든 유저의
물리 판정을 처리한다?
출처 - http://www.inven.co.kr/webzine/news/?news=60184
+
테라의 경우
출처 - http://blog.daum.net/chumakjung/12782784
서버
테라의 경우
• 서버 부하를 어떻게 줄이는지가 중요
※ 사진은 본문과 관계 없습니다
연산 ∙ 동기화
충돌 공간
• 테라의 물체는 공격할 수 있는
실린더로 이루어짐
충돌 공간
• 각 공격은 시간에 따른 충돌 공간을 포함
• 타겟의 실린더와 충돌 공간의 충돌을
체크함으로써 공격이 적중했는지 판단
스킬 정보
• 이전 슬라이드 스킬의 정보
• Targeting time은 공격을
시작하고 충돌 체크하는
시간을 의미
샘플 테이블(XML)
2단계 처리
• 각 공격(힐, 버프 포함)은 타겟팅 시간을 여러 개 갖고 있음
• 공격 유형에 따라 2 ~ 12가지 이상의 타겟팅 시간을 가질 수 있음
• 각 타겟팅 시간은 Front-End와 Back-End의 2단계로 구성
2단계 처리
• Front-End
공격 범위을 검색해서
충돌하는 대상을 수집
• Back-End
수집된 타겟들에게
데미지 적용
첫번째 공격(내리찍기)의 처리 과정
2단계 처리
두번째 공격(휘두르기)의 처리 과정
2단계 처리
• Front-End
충돌 체크를 위한 타겟 검색이 자주 일어남
• Back-End
타겟의 정보를 자주 업데이트 해야 함
빠른 동기화가 필요
Lock-Free 구현
• 락을 걸면 성능이 내려가므로 좋지 않음
• 락 없이 동기화하는 방법은?
Worker Thread Pattern
• 효과적으로 락을 제거하기 위해 썼다고 함
• 정확한 개념은 구글을 참고
• 한 줄 요약: 스레드 풀
• 테라에서는 CPU 코어 개수 = 스레드 개수
• 코어의 개수, 성능은 스레드와 비례
Worker Thread Pattern
• 서버의 모든 요청은 IOCP
• IoCompletionPortTask
패킷 처리
• TimerTask
시스템의 현재 시간 검사
• ClusterTask
타겟 유효 영역 검사
• 루프 처리 시간에 따라 0 ~ 16ms의
타임 아웃 값을 가짐
Front-End 구현
클러스터(Cluster)
• 테라의 심리스 월드는 클러스터라는 사각형들로 이루어짐
• 물체의 포인터를 가진 컨테이너
• 모든 물체는 클러스터에 붙어 있어야 됨
Front-End 구현
• 물체가 32 -> 33로 이동하면
32 클러스터는 물체를 제거
33 클러스터는 물체를 추가
• 소환이나 죽음도 추가나 삭제로
처리
• Worker Thread는 클러스터를
TLS에 저장하여 유지
Thread Local Storage(TLS)
• 전역 변수로 접근하나
각 스레드에 독립된 공간
• 전역 공간을 스레드 별로
사용하고 싶을 때 사용
출처 - http://www.inven.co.kr/webzine/news/?news=60184
Cluster Update Queue
• 클러스터를 업데이트 하기위한 Dispatcher
• 전역 변수로 모든 Worker Thread가 공유
• 어떤 행동이 클러스터의 업데이트를 필요로 하면
Worker Thread는 업데이트 큐 뒤쪽에 작업을 추가
• 모든 Worker Thread는 같은 알고리즘을 사용하여
같은 큐를 처리하므로 스레드별 TLS에 저장된
클러스터 정보는 모두 동일해야 한다
C++ Pseudo code with windows API
ClusterUpdateTask
C++ Pseudo code with windows API
CUT
C++ Pseudo code with windows API
CUT
C++ Pseudo code with windows API
• Worker Thread는 가장 최근에 수행된 작업의 위치를 가리키는 인덱스를 가지고 있다
(TLS_CurrentTaskIndex)
• final이 true면 업데이트 큐에서 삭제
Cluster Update Task
• 클러스터가 업데이트되는 작업
• 모든 TLS에 동기화되는 것을 보장하기 위해
레퍼런스 카운트를 가지고 있음
C++ Pseudo code with windows API
Atomic Operation
• Interlocked… 함수가 여기에 포함
• 멀티 스레드를 사용할 때 연산이 중간에 끼어들지 않는 것을 보장
• DB의 트랜잭션을 생각하면 됨
클러스터의 특징
• 물체를 검색할 때 락이 필요하지 않다
TLS에서 바로 포인터를 얻을 수 있음
• 물체가 움직인다면 모든 Worker Thread는 TLS에 있는 클러스터를 업데이트 해야 됨
클러스터의 특징
• 클러스터의 장단점
NDC12 MMO 서버 개발 포스트 모템
https://www.slideshare.net/devcatpublications/mmo-ndc2012
38p ~ 47p, 94p ~ 107p, 125p ~ 127p
NDC13 게임 서버 디자인 가이드
https://www.slideshare.net/devcatpublications/ndc2013-19986939
48p ~ 62p
Front-End 결론
• Front-End는 충돌된 물체를 검색하는 단계
• 테라에서 구현한 클러스터는 검색에 별도의 동기화 과정이 필요 없으므로
적절한 자료구조라 할 수 있다
Back-End 구현
• 업데이트를 자주 해야 함
• Critical Section이나 Spin Lock을 사용하면?
• Critical Section
Blocking으로 인한 성능 하락
• Spin Lock
급격한 CPU 사용 증가로 성능 하락
Lock-Free Executor
• 락이 없는 작업 Dispatcher
• 모든 물체는 멤버 함수의 실행 순서를 보장하기 위해 LFE를 가지고 있음
• 업데이트를 위한 함수 포인터를 Task에 랩핑하고 LFE에 랩핑한 Task를 등록
사실 이렇게 인자를 넘기는게 아니라 Task에 랩핑해서 넘긴다
Task
대충 요렇게???
C++ Pseudo code with windows API
Lock-Free Executor
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
결론
• 빈번한 업데이트로 인해 Atomic Operation을 활용하여 Lock-Free로 구현
• LockFreeTaskQueue는 논블락킹 동시 큐를 기반으로 하여 함수 호출 순서 보장
• 이러한 Front-End, Back-End 처리 과정은 CPU 사용량을 1/20로 줄임
• 1 ~ 6000명의 유저에 대한 CPU(Intel Xeon E5630) 사용율은 1 ~ 6%
• 대기 시간을 줄임으로써 프리 타겟팅 전투를 가능하게 함
Q / A

More Related Content

PDF
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
PDF
Windows Registered I/O (RIO) vs IOCP
PDF
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
PDF
나만의 엔진 개발하기
PDF
C++20에서 리플렉션 기능 구현
PDF
Windows IOCP vs Linux EPOLL Performance Comparison
PDF
MMOG Server-Side 충돌 및 이동처리 설계와 구현
PDF
Multiplayer Game Sync Techniques through CAP theorem
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Windows Registered I/O (RIO) vs IOCP
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
나만의 엔진 개발하기
C++20에서 리플렉션 기능 구현
Windows IOCP vs Linux EPOLL Performance Comparison
MMOG Server-Side 충돌 및 이동처리 설계와 구현
Multiplayer Game Sync Techniques through CAP theorem

What's hot (20)

PDF
NDC12_Lockless게임서버설계와구현
PPTX
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
PDF
임태현, MMO 서버 개발 포스트 모템, NDC2012
PPTX
게임 분산 서버 구조
PDF
실시간 게임 서버 최적화 전략
PDF
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
PPTX
NDC 11 자이언트 서버의 비밀
PDF
임태현, 게임 서버 디자인 가이드, NDC2013
PDF
중앙 서버 없는 게임 로직
PPTX
Next-generation MMORPG service architecture
PPTX
Ndc14 분산 서버 구축의 ABC
PDF
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
PDF
[NDC2016] TERA 서버의 Modern C++ 활용기
PPTX
스마트폰 온라인 게임에서 고려해야 할 것들
PPTX
[0903 구경원] recast 네비메쉬
PDF
Iocp 기본 구조 이해
PDF
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
PDF
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
PPT
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
PDF
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
NDC12_Lockless게임서버설계와구현
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
임태현, MMO 서버 개발 포스트 모템, NDC2012
게임 분산 서버 구조
실시간 게임 서버 최적화 전략
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
NDC 11 자이언트 서버의 비밀
임태현, 게임 서버 디자인 가이드, NDC2013
중앙 서버 없는 게임 로직
Next-generation MMORPG service architecture
Ndc14 분산 서버 구축의 ABC
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
[NDC2016] TERA 서버의 Modern C++ 활용기
스마트폰 온라인 게임에서 고려해야 할 것들
[0903 구경원] recast 네비메쉬
Iocp 기본 구조 이해
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
Ad

Similar to 테라로 살펴본 MMORPG의 논타겟팅 시스템 (20)

PPTX
뇌자T etc.windows multi threading programming
PPTX
Windows via C/C++ 06 스레드의 기본
PDF
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
PDF
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
PDF
242 naver-2
PPTX
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
PDF
Python 게임서버 안녕하십니까 : RPC framework 편
PDF
쓰레드.pdf
PPTX
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
PPTX
TenforFlow Internals
PPTX
Concurrent programming
PDF
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
PPTX
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
PPTX
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
PDF
[NDC08] 최적화와 프로파일링 - 송창규
PDF
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
PDF
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
PDF
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
PPT
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
PDF
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
뇌자T etc.windows multi threading programming
Windows via C/C++ 06 스레드의 기본
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
242 naver-2
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
Python 게임서버 안녕하십니까 : RPC framework 편
쓰레드.pdf
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
TenforFlow Internals
Concurrent programming
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
[NDC08] 최적화와 프로파일링 - 송창규
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
Ad

More from QooJuice (18)

PPTX
리플렉션과 가비지 컬렉션
PDF
캐릭터 애니메이션
PDF
Screen space ambient occlusion
PDF
UE4 Garbage Collection
PDF
Compute shader
PDF
Game programming patterns 2
PDF
Game programming patterns
PDF
Picking
PDF
코루틴(Coroutine)
PDF
Direct x 12 초기화
PDF
행렬
PDF
벡터
PDF
노말 맵핑(Normal mapping)
PDF
함수형 프로그래밍
PDF
부팅
PDF
절차지향 vs 객체지향
PDF
Segmentation and Paging
PDF
Move semantics
리플렉션과 가비지 컬렉션
캐릭터 애니메이션
Screen space ambient occlusion
UE4 Garbage Collection
Compute shader
Game programming patterns 2
Game programming patterns
Picking
코루틴(Coroutine)
Direct x 12 초기화
행렬
벡터
노말 맵핑(Normal mapping)
함수형 프로그래밍
부팅
절차지향 vs 객체지향
Segmentation and Paging
Move semantics

테라로 살펴본 MMORPG의 논타겟팅 시스템