ݺߣ

ݺߣShare a Scribd company logo
게임 애셋 스트리밍 패치
㈜넥슨
프론티어팀
이승재
발표자
이승재
프로그래머
카바티나 스토리
데스크탑 히어로즈
게임 애셋
game asset
게임에 들어가는 그래픽, 사운드, 음악, 텍스트 등 유저에게 보여지는 것들
http://gamemook.com/entry/게임용어-asset
일단 데이터 파일 정도의 의미로…
스트리밍 패치
“필수적인 애셋 다 받았으면
빨리 게임 시작하자”
나머지는 필요할 때 받고
WoW: 대격변에서 이미 사용
접근성이 좋아야 하니까
설치 용량 10MB 안 넘게 합시다
헉
그래서 했습니다
사실 저는 원래 패치에 별로 관심이 없었어요.
넥슨패처 쓰면 되니까.. 넥슨패처 좋잖아요.
기존 온라인 게임 패치
1. 모든 파일이 최신일까?
아니라면 패처 실행
2. 패처가 모든 파일을 최신 버전으로 맞추고
3. 다시 게임 실행
패처 옵션으로 ‘마지막으로 패치
되는 파일’ 따위를 설정할 수 있으
면 그 파일에서 버전을 읽어서, 서
버가 제공해주는 버전과 비교하
면 간단
스트리밍 패치
작동에 필요한 최소한의 파일을 우선 받는다
무슨 파일이 필요할지 어떻게 알지?
게임클라이언트가 패처 기능을 포함
게임 도중에도 다운로드 작업 필요
목록을 사람 힘으로 만들지는 말자;;;
어떻게 (1)
<스테이지 시작 전에, 지금 필요하고
최신 버전을 갖고 있지 않은 파일들을
미리 다운로드한다>
이 파일이 최신 버전인가?
• 패치 준비 단계에서 모든 파일을 요약
• 이름, 크기, CRC, svn 리비전
…
herocar.psd.data 15253 8b4999b8 4477
herocar.wsj 7142 8ecccbfb 4880
hidden_cannon.wsj 3152 221b695c 4117
hit.psd.data 15260 dad0af08 2879
hit.wsj 3292 c1030c3d 4836
hit01_effect.wsj 4571 330df761 4915
Hit_Arrow.wav 40322 e5782685 4717
hit_blood_00.wsj 4725 54d99432 6236
hit_blood_00_전연령.wsj 4859 0750b701 6342
Hit_Both.wav 37400 29d0ca43 4717
Hit_Claw.wav 22572 809f00a8 4717
Hit_Claw_2.wav 39696 d60a02a1 4717
Hit_Hammer_1.wav 13898 92be7f88 5044
Hit_Hammer_2.wav 13812 b81b8942 5044
hit_lightning.wsj 2780 33145aad 4729
Hit_Normal_1.wav 10694 5efd41cc 4717
Hit_Normal_2.wav 19376 8c26fd15 4717
Hit_Normal_3.wav 13906 a77f4b30 4717
hit_slash_00.wsj 1471 01d49c41 4849
hit_slash_01.wsj 1464 7ecae13c 4849
hit_slash_02.wsj 1475 188aeb09 4849
Hit_Wet_1.wav 27760 f2c492e7 4717
Hit_Wrench_1.wav 22118 726af8f2 5044
Hit_Wrench_2.wav 24512 8e2a5576 5044
Home-Default.dhmb 1173 63cccdf0 7324
Home-Default.luab 221 ef6ff272 5483
home_bg.psd.data 462976 db2d4059 4568
…
목록 파일 (수십KB)
버전 파일 (수십B)
모든 파일 (수십MB)
http://deskhz.dn...
44748
a418672e
7472
파일 최신 버전 알아내기
클라이언트 뜰 때 버전 파일을 받는다
목록 파일이 없거나 변경되었는가?
• 목록 파일을 갱신하고,
• 모든 파일들의 크기, CRC, 리비전을 검토
• 달라진 게 있으면 삭제한다
• 이제부터는 파일이 없으면 받으면 됨!
어떻게 (2)
<스테이지 시작 전에, 지금 필요하고
최신 버전을 갖고 있지 않은 파일들을
미리 다운로드한다>
“그냥 그때그때 받으면 안됨?”
로딩은 기다릴 수 있지만
플레이 도중에 멈추는 것은 좀…
지금 필요한 파일
A. 항상 필요한 파일
특정 확장자 (exe, dll, lua, ui)
별도의 목록 (Seed.lua) 에 있는 파일
B. 지금 시작할 스테이지 파일
0001-Town1.map / lua
C. 지금 필요한 파일들이 의존하는 파일
애셋 의존성의 예
스테이지 파일
배경 그림
스테이지에 나올
몬스터
몬스터
애니메이션
몬스터 그림
몬스터 이펙트
애니메이션
BGM
몬스터 이펙트
그림
몬스터 이펙트
사운드
의존성 검사
“이 파일은 어떤 다른 파일들을 필요로 하는가”
애셋 종류별로 의존성 검사 코드 필요
의존성 검사
말이 쉽지…
• 게임의 다른 부분과 심하게 얽히는 경향
모든 애셋 포맷을 ‘알아야’ 하니까…
• 지속적으로 비용이 발생한다
못하겠어요ㅠㅠ 는 아니고 아 귀찮아ㅡㅡ 정도
어떻게 (3)
<스테이지 시작 전에, 지금 필요하고
최신 버전을 갖고 있지 않은 파일들을
미리 다운로드한다>
다운로드
<메인 스레드>
필요한 파일 이름을
큐에 넣는다
다운로드 작업이 모두 끝날
때까지 기다린다
<다운로드 스레드> (x1~10)
큐에서 파일 이름을 꺼낸다
다운로드한다
추가 의존성이 발견되면
그것도 큐에 넣는다
기타 이슈
• 개발용 버전
• 가상 파일 시스템
• 실행 파일 교체
• 예외 상황 대응
• 플레이어 아바타
• 안 쓰는 애셋 찾기
개발용 버전
스트리밍 패치 쓰지 않습니다 당연히..
• 똑같은 인터페이스를 가진 다른 클래스 사용
의존성 검사 부분에서 실수하면,
• 개발 버전에선 잘 작동
• 릴리스 버전에서 파일 없다고 죽는다!
디버깅하기 훨씬 귀찮다
개발용 버전
실수하는 케이스:
• ‘항상 필요한 파일’ 목록에 안 넣고,
파일 이름 직접 써서 애셋 로드
• 애셋 종류 추가하거나 포맷 바꿨는데
의존성 검사 코드 수정 안 함
해결책:
• 준비 안 된 파일 읽으려 하면
개발용 버전에서도 인위적으로 오류 나게 함
실행 파일 교체
별도의 exe를 추가로 포함
DesktopHeroes.exe.patch
→ DesktopHeroes.exe
지금은 그냥 넥슨패처 씁니다.
넥슨닷컴에 붙이려다 보니…
가상 파일 시스템
단일 서브시스템으론 가장 까다로웠던 부분
• 임의 파일 추가/삭제가 빠를 것
• 여러 스레드에서 동시 읽고 쓰기 가능할 것
• 온갖 실패 상황에 대해 견고하게 동작할 것
저널링, Heap 메모리처럼 관리, Overlapped I/O 사용
예외 상황 대응
스트리밍패치도 결국은 패치
넥슨패처보다 불안정 N년간 온갖 상황을 겪으며 단련되었을 테니…
‘이럴 리 없는데’ 싶은 덤프 보고가 자꾸 들어옴
계속 수정 중
플레이어 아바타
언제 나올지 예측 불가
• 필요할 때 요청하고 완료될 때까지 기다릴 수 없다
• 지금은 모든 아바타를 ‘항상 필요한 파일’ 에 넣고 있음
평범하게 백그라운드 로딩하면 됨
• 일단 더미 그림 올려 놓고 받아지면 교체하기
보너스
의존성 검사 코드를 활용해서
• 어떤 애셋을 어떤 애셋이 참조하는지
• 안 쓰는 애셋은 무엇인지
찾는 툴을 쉽게 만들었음
결론
접근성 향상
CDN 비용 절감
어렵지 않아요!
데스크탑 히어로즈 현재 서비스 중
Q / A
Ad

Recommended

Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템
Youngtaek Oh
쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다
Jinho Jung
Part3. 아이디어를 게임기획으로 발전시키기
Part3. 아이디어를 게임기획으로 발전시키기
태성 이
NDC12 인디게임 개발 시 주의할 점
NDC12 인디게임 개발 시 주의할 점
Mingu Heo
1인개밵Ӟ갶되기ѫѫ것들
1인개밵Ӟ갶되기ѫѫ것들
Jinsub Jung
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
승명 양
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
강 민우
[NDC 2021] 게임 PD가 되어 보니
[NDC 2021] 게임 PD가 되어 보니
Yongha Kim
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
Eunseok Yi
게임 기획자의 생존 전략
게임 기획자의 생존 전략
태성 이
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
Brian Hong
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Heungsub Lee
게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해
Seungmo Koo
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
Eunseok Yi
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
강 민우
기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까
Han Je Sung
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
강 민우
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
CookApps
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
Kieun Jang
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간
Eunseok Yi
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발
Eunseok Yi
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
Eunseok Yi
게임제작개론 8
게임제작개론 8
Seokmin No
Blistt Travel
Blistt Travel
David F. Hartmann

More Related Content

What's hot (20)

[NDC 2021] 게임 PD가 되어 보니
[NDC 2021] 게임 PD가 되어 보니
Yongha Kim
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
Eunseok Yi
게임 기획자의 생존 전략
게임 기획자의 생존 전략
태성 이
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
Brian Hong
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Heungsub Lee
게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해
Seungmo Koo
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
Eunseok Yi
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
강 민우
기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까
Han Je Sung
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
강 민우
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
CookApps
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
Kieun Jang
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간
Eunseok Yi
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발
Eunseok Yi
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
Eunseok Yi
게임제작개론 8
게임제작개론 8
Seokmin No
[NDC 2021] 게임 PD가 되어 보니
[NDC 2021] 게임 PD가 되어 보니
Yongha Kim
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
Eunseok Yi
게임 기획자의 생존 전략
게임 기획자의 생존 전략
태성 이
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
Brian Hong
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Heungsub Lee
게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해
Seungmo Koo
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
Eunseok Yi
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
강 민우
기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까
Han Je Sung
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
강 민우
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
CookApps
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
Kieun Jang
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간
NDC 2015 이은석 - pay-to-skip: 온라인 게임 속 로봇 경제와 내몰리는 인간
Eunseok Yi
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발
NDC 2017 키노트: 이은석 - 다가오는 4차 산업혁명 시대의 게임개발
Eunseok Yi
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
Eunseok Yi
게임제작개론 8
게임제작개론 8
Seokmin No

Viewers also liked (20)

Blistt Travel
Blistt Travel
David F. Hartmann
Blistt travel
Blistt travel
David F. Hartmann
Cat personalizacion choco concept
Cat personalizacion choco concept
ChocoConcept
Background หลากสี
Background หลากสี
IvIy Alice
http://Chiropractor.inadrianmichigan.com
http://Chiropractor.inadrianmichigan.com
Chiropractor in Adrian Michigan
ม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอ
IvIy Alice
ึϸล์ล่าถูก๶ผา
ึϸล์ล่าถูก๶ผา
IvIy Alice
Le marche zurich
Le marche zurich
HOREQUIP
ปรับภาพให้สว่างใสด้วย Level
ปรับภาพให้สว่างใสด้วย Level
IvIy Alice
การกำหนดโทนสีของภาพ Hue saturation
การกำหนดโทนสีของภาพ Hue saturation
IvIy Alice
Sunvencions(1)
Marco Duran Cabobianco
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...
Walaa Samra
Substans presentation 30.9.2011
Substans presentation 30.9.2011
Jeanette Harf
Lalit’s case study
Lalit’s case study
Lalit Pandey
การซูมภาพ เพื่อเน้นจุดสนใจ
การซูมภาพ เพื่อเน้นจุดสนใจ
IvIy Alice
อาทิตย์อัสึϸ
อาทิตย์อัสึϸ
IvIy Alice
Local chiropractor clinic
Local chiropractor clinic
Chiropractor in Adrian Michigan
Cat personalizacion choco concept
Cat personalizacion choco concept
ChocoConcept
Background หลากสี
Background หลากสี
IvIy Alice
ม้วนขอบภาพให้โค้งงอ
ม้วนขอบภาพให้โค้งงอ
IvIy Alice
ึϸล์ล่าถูก๶ผา
ึϸล์ล่าถูก๶ผา
IvIy Alice
Le marche zurich
Le marche zurich
HOREQUIP
ปรับภาพให้สว่างใสด้วย Level
ปรับภาพให้สว่างใสด้วย Level
IvIy Alice
การกำหนดโทนสีของภาพ Hue saturation
การกำหนดโทนสีของภาพ Hue saturation
IvIy Alice
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...
PREVALENCE OF DIABETES MELLITUS IN TRANSFUSION DEPENDENT BETA THALASSEMIA PAT...
Walaa Samra
Substans presentation 30.9.2011
Substans presentation 30.9.2011
Jeanette Harf
การซูมภาพ เพื่อเน้นจุดสนใจ
การซูมภาพ เพื่อเน้นจุดสนใจ
IvIy Alice
อาทิตย์อัสึϸ
อาทิตย์อัสึϸ
IvIy Alice
Ad

Similar to 게임 애셋 스트리밍 패치 (20)

개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기
David Kim
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
DongMin Choi
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점
Ryan Park
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
devCAT Studio, NEXON
프론트엔드개발 버전 표기 방법 가이드 라인
프론트엔드개발 버전 표기 방법 가이드 라인
Ji-Tae Kim
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
Amazon Web Services Korea
DevRookie 언리얼 에셋과 패키지.pptx
DevRookie 언리얼 에셋과 패키지.pptx
MUUMUMUMU
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
Amazon Web Services Korea
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
MinGeun Park
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
Amazon Web Services Korea
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
tcaesvk
Optimizing The Content Pipeline
Optimizing The Content Pipeline
codevania
레이더즈 기술 사례
레이더즈 기술 사례
기룡 남
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법
Lee Sangkyoon (Kay)
[UNITE2014] 개발과 출시 경험에 대한 이야기
[UNITE2014] 개발과 출시 경험에 대한 이야기
형석 서
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
용호 최
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
Eunseok Yi
게임제작개론 : #8 게임 제작 프로세스
게임제작개론 : #8 게임 제작 프로세스
Seungmo Koo
개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기
David Kim
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
DongMin Choi
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점
Ryan Park
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
devCAT Studio, NEXON
프론트엔드개발 버전 표기 방법 가이드 라인
프론트엔드개발 버전 표기 방법 가이드 라인
Ji-Tae Kim
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
Amazon Web Services Korea
DevRookie 언리얼 에셋과 패키지.pptx
DevRookie 언리얼 에셋과 패키지.pptx
MUUMUMUMU
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
Amazon Web Services Korea
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
MinGeun Park
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
Amazon Web Services Korea
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
tcaesvk
Optimizing The Content Pipeline
Optimizing The Content Pipeline
codevania
레이더즈 기술 사례
레이더즈 기술 사례
기룡 남
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법
Lee Sangkyoon (Kay)
[UNITE2014] 개발과 출시 경험에 대한 이야기
[UNITE2014] 개발과 출시 경험에 대한 이야기
형석 서
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
용호 최
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
Eunseok Yi
게임제작개론 : #8 게임 제작 프로세스
게임제작개론 : #8 게임 제작 프로세스
Seungmo Koo
Ad

게임 애셋 스트리밍 패치

  • 1. 게임 애셋 스트리밍 패치 ㈜넥슨 프론티어팀 이승재
  • 3. 게임 애셋 game asset 게임에 들어가는 그래픽, 사운드, 음악, 텍스트 등 유저에게 보여지는 것들 http://gamemook.com/entry/게임용어-asset 일단 데이터 파일 정도의 의미로…
  • 4. 스트리밍 패치 “필수적인 애셋 다 받았으면 빨리 게임 시작하자” 나머지는 필요할 때 받고
  • 6. 접근성이 좋아야 하니까 설치 용량 10MB 안 넘게 합시다 헉
  • 7. 그래서 했습니다 사실 저는 원래 패치에 별로 관심이 없었어요. 넥슨패처 쓰면 되니까.. 넥슨패처 좋잖아요.
  • 8. 기존 온라인 게임 패치 1. 모든 파일이 최신일까? 아니라면 패처 실행 2. 패처가 모든 파일을 최신 버전으로 맞추고 3. 다시 게임 실행 패처 옵션으로 ‘마지막으로 패치 되는 파일’ 따위를 설정할 수 있으 면 그 파일에서 버전을 읽어서, 서 버가 제공해주는 버전과 비교하 면 간단
  • 9. 스트리밍 패치 작동에 필요한 최소한의 파일을 우선 받는다 무슨 파일이 필요할지 어떻게 알지? 게임클라이언트가 패처 기능을 포함 게임 도중에도 다운로드 작업 필요 목록을 사람 힘으로 만들지는 말자;;;
  • 10. 어떻게 (1) <스테이지 시작 전에, 지금 필요하고 최신 버전을 갖고 있지 않은 파일들을 미리 다운로드한다>
  • 11. 이 파일이 최신 버전인가? • 패치 준비 단계에서 모든 파일을 요약 • 이름, 크기, CRC, svn 리비전
  • 12. … herocar.psd.data 15253 8b4999b8 4477 herocar.wsj 7142 8ecccbfb 4880 hidden_cannon.wsj 3152 221b695c 4117 hit.psd.data 15260 dad0af08 2879 hit.wsj 3292 c1030c3d 4836 hit01_effect.wsj 4571 330df761 4915 Hit_Arrow.wav 40322 e5782685 4717 hit_blood_00.wsj 4725 54d99432 6236 hit_blood_00_전연령.wsj 4859 0750b701 6342 Hit_Both.wav 37400 29d0ca43 4717 Hit_Claw.wav 22572 809f00a8 4717 Hit_Claw_2.wav 39696 d60a02a1 4717 Hit_Hammer_1.wav 13898 92be7f88 5044 Hit_Hammer_2.wav 13812 b81b8942 5044 hit_lightning.wsj 2780 33145aad 4729 Hit_Normal_1.wav 10694 5efd41cc 4717 Hit_Normal_2.wav 19376 8c26fd15 4717 Hit_Normal_3.wav 13906 a77f4b30 4717 hit_slash_00.wsj 1471 01d49c41 4849 hit_slash_01.wsj 1464 7ecae13c 4849 hit_slash_02.wsj 1475 188aeb09 4849 Hit_Wet_1.wav 27760 f2c492e7 4717 Hit_Wrench_1.wav 22118 726af8f2 5044 Hit_Wrench_2.wav 24512 8e2a5576 5044 Home-Default.dhmb 1173 63cccdf0 7324 Home-Default.luab 221 ef6ff272 5483 home_bg.psd.data 462976 db2d4059 4568 … 목록 파일 (수십KB) 버전 파일 (수십B) 모든 파일 (수십MB) http://deskhz.dn... 44748 a418672e 7472
  • 13. 파일 최신 버전 알아내기 클라이언트 뜰 때 버전 파일을 받는다 목록 파일이 없거나 변경되었는가? • 목록 파일을 갱신하고, • 모든 파일들의 크기, CRC, 리비전을 검토 • 달라진 게 있으면 삭제한다 • 이제부터는 파일이 없으면 받으면 됨!
  • 14. 어떻게 (2) <스테이지 시작 전에, 지금 필요하고 최신 버전을 갖고 있지 않은 파일들을 미리 다운로드한다>
  • 16. 로딩은 기다릴 수 있지만 플레이 도중에 멈추는 것은 좀…
  • 17. 지금 필요한 파일 A. 항상 필요한 파일 특정 확장자 (exe, dll, lua, ui) 별도의 목록 (Seed.lua) 에 있는 파일 B. 지금 시작할 스테이지 파일 0001-Town1.map / lua C. 지금 필요한 파일들이 의존하는 파일
  • 18. 애셋 의존성의 예 스테이지 파일 배경 그림 스테이지에 나올 몬스터 몬스터 애니메이션 몬스터 그림 몬스터 이펙트 애니메이션 BGM 몬스터 이펙트 그림 몬스터 이펙트 사운드
  • 19. 의존성 검사 “이 파일은 어떤 다른 파일들을 필요로 하는가” 애셋 종류별로 의존성 검사 코드 필요
  • 20. 의존성 검사 말이 쉽지… • 게임의 다른 부분과 심하게 얽히는 경향 모든 애셋 포맷을 ‘알아야’ 하니까… • 지속적으로 비용이 발생한다 못하겠어요ㅠㅠ 는 아니고 아 귀찮아ㅡㅡ 정도
  • 21. 어떻게 (3) <스테이지 시작 전에, 지금 필요하고 최신 버전을 갖고 있지 않은 파일들을 미리 다운로드한다>
  • 22. 다운로드 <메인 스레드> 필요한 파일 이름을 큐에 넣는다 다운로드 작업이 모두 끝날 때까지 기다린다 <다운로드 스레드> (x1~10) 큐에서 파일 이름을 꺼낸다 다운로드한다 추가 의존성이 발견되면 그것도 큐에 넣는다
  • 23. 기타 이슈 • 개발용 버전 • 가상 파일 시스템 • 실행 파일 교체 • 예외 상황 대응 • 플레이어 아바타 • 안 쓰는 애셋 찾기
  • 24. 개발용 버전 스트리밍 패치 쓰지 않습니다 당연히.. • 똑같은 인터페이스를 가진 다른 클래스 사용 의존성 검사 부분에서 실수하면, • 개발 버전에선 잘 작동 • 릴리스 버전에서 파일 없다고 죽는다! 디버깅하기 훨씬 귀찮다
  • 25. 개발용 버전 실수하는 케이스: • ‘항상 필요한 파일’ 목록에 안 넣고, 파일 이름 직접 써서 애셋 로드 • 애셋 종류 추가하거나 포맷 바꿨는데 의존성 검사 코드 수정 안 함 해결책: • 준비 안 된 파일 읽으려 하면 개발용 버전에서도 인위적으로 오류 나게 함
  • 26. 실행 파일 교체 별도의 exe를 추가로 포함 DesktopHeroes.exe.patch → DesktopHeroes.exe 지금은 그냥 넥슨패처 씁니다. 넥슨닷컴에 붙이려다 보니…
  • 27. 가상 파일 시스템 단일 서브시스템으론 가장 까다로웠던 부분 • 임의 파일 추가/삭제가 빠를 것 • 여러 스레드에서 동시 읽고 쓰기 가능할 것 • 온갖 실패 상황에 대해 견고하게 동작할 것 저널링, Heap 메모리처럼 관리, Overlapped I/O 사용
  • 28. 예외 상황 대응 스트리밍패치도 결국은 패치 넥슨패처보다 불안정 N년간 온갖 상황을 겪으며 단련되었을 테니… ‘이럴 리 없는데’ 싶은 덤프 보고가 자꾸 들어옴 계속 수정 중
  • 29. 플레이어 아바타 언제 나올지 예측 불가 • 필요할 때 요청하고 완료될 때까지 기다릴 수 없다 • 지금은 모든 아바타를 ‘항상 필요한 파일’ 에 넣고 있음 평범하게 백그라운드 로딩하면 됨 • 일단 더미 그림 올려 놓고 받아지면 교체하기
  • 30. 보너스 의존성 검사 코드를 활용해서 • 어떤 애셋을 어떤 애셋이 참조하는지 • 안 쓰는 애셋은 무엇인지 찾는 툴을 쉽게 만들었음
  • 35. Q / A